SlideShare a Scribd company logo
1 of 15
Download to read offline
Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Om Cygni




Javakonsultbolaget Cygni grundades i                                                           Den genomsnittlige Cygnikonsulten är 35
mars 2006. Sedan dess har bolaget växt                                                         år och har 12 års professionell erfarenhet
med god lönsamhet och mycket hög                                                               av avancerad systemutveckling. De flesta
kundnöjdhet. Idag är Cygni 25 anställda                                                        av Cygnis konsulter är civilingenjörer,
och sysselsätter även ett antal under-                                                         vanligtvis från D-linjen på KTH. En
konsulter.                                                                                     Cygnikonsult är van att snabbt sätta sig in
                                                                                               i kundens verksamhet, oavsett bransch,
Cygni är specialister på att utveckla                                                          och därmed möjliggöra en snabb och
avancerade      Java-    och    Java EE-                                                       effektiv systemutveckling i linje med den
applikationer. Samtliga Cygnis konsulter                                                       övergripande kravbilden.
är utvecklare och/eller systemarkitekter
med lång erfarenhet från projekt i en
mängd olika branscher och teknik-
domäner.




                                   Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Byggverktyg
Det finns en flora av byggverktyg på                                 Apache Ant                                   Maven 2
marknaden varav de flesta av dessa
                                                                     http://ant.apache.org/                       http://maven.apache.org
verktyg är open source-alternativ.
Rudimentära verktyg såsom make och
egenhackade bat-filer har ersatts av mer
sofistikerade verktyg som exempelvis Ant
och Maven.
Ett byggverktyg används för att man på
ett kontrollerat sätt ska kunna bygga ihop                           Apache Ant är ett av de vanligaste verk-     Maven 2 är ett verktyg för automatiserade
det system eller den produkt man ut-                                 tygen för automatiserade byggen. Det är      byggen. Maven har stora likheter med
vecklar. Det är viktigt att byggverktyget                            likt make men är byggt på Java och           Apache Ant men använder sig av en
är deterministiskt det vill säga att                                 kräver således en javaplattform för att      princip som kallas Convention over
resultatet som produceras blir lika varje                            kunna köras. Apache Ant passar bäst för      Configuration som innebär att bygg-
gång. Dessutom är det viktigt att det                                att bygga javaprojekt.                       skripten blir väldigt korta och över-
finns möjlighet att plugga in olika                                                                               blickbara. Det finns defaultvärden för
                                                                     En stor skillnad mellan make och Ant är
rapporter och andra features via så kallad                                                                        vilken katalogstruktur som ska användas
                                                                     att Ant använder XML för att beskriva
plugin-arkitektur.                                                                                                och så vidare.
                                                                     byggprocessen medan make använder det
                                                                     gamla Makefile-formatet.                     En stor fördel med Maven är dess
                                                                                                                  hantering av beroenden mellan olika arte-
Omoderna verktyg:                                                    De stora nackdelarna med Ant är att          fakter. Detta gäller både egna artefakter
                                                                     beroenden mellan olika artefakter såsom      (egna jar- eller war-filer) eller externa
        Make
    ●
                                                                     tredjepartsbibliotek och liknande inte       artefakter   såsom    tredjepartsbibliotek.
                                                                     hanteras på något enhetligt sätt samt att
        Bat-filer / Shell scripts
    ●                                                                                                             Externa beroenden tankas hem från
                                                                     Ant-filerna blir långa och svåra att över-   Mavens repository vilket innebär att ut-
        IDE
    ●                                                                blicka.                                      vecklare enkelt kan komma igång med
                                                                                                                  utvecklingen från vilken maskin som
                                                                                                                  helst.
Moderna verktyg:
                                                                                                                  Maven har dessutom ett väldigt bra stöd
        Ant
    ●                                                                                                             för rapporter och externa plugins.
        Maven
    ●
        Ivy
    ●
        Buckminster
    ●




                                     Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Utvecklingsmiljö
En utvecklingsmiljö är det verktyg som         Eclipse                                        IntelliJ IDEA                                     NetBeans
utvecklaren använder mest. Det är därför
                                               http://www.eclipse.org                         http://www.jetbrains.com/idea/                    http://www.netbeans.org/
väldigt   viktigt   att  utvecklingsmiljön
fungerar bra och integrerar väl med de
övriga verktyg som används inom
projektet. Ett annat ord för utvecklings-
miljö är IDE – Integrated Development
Environment vilket kanske bättre be-
skriver vad det hela handlar om.
                                               Eclipse är ett open source-verktyg och det     IntelliJ IDEA är till skillnad från Eclipse ett   NetBeans är ett open source-verktyg som
Utvecklingsmiljön bör    åtminstone    till-
                                               absolut vanligaste utvecklingsverktyget        kommersiellt utvecklingsverktyg. IntelliJ         håller hög klass men kanske inte fått lika
handahålla följande:
                                               på marknaden. Applikationen är plugin-         har gott rykte inom javavärlden och är            stort genomslag som Eclipse. NetBeans är
        Editor för källkod    (Java,   JSP,
    ●                                          baserad via en teknologi som kallas OSGi       liksom Eclipse baserat på en plugin-              liksom Eclipse plugin-baserat och har bra
        XML, HTML etc)                         vilket leder till att en mängd olika plugins   arkitektur. IntelliJ är känt för sitt utmärkta    stöd för refaktorering och liknande som
                                               finns att ladda hem för integration med        refaktoreringsstöd men eftersom verk-             erbjuds i både Eclipse och IntelliJ IDEA.
        Kompilator
    ●                                          olika verktyg.                                 tyget inte är gratis har det inte fått lika
                                                                                                                                                Värt att nämna är det utmärkta stödet för
                                                                                              stort genomslag som Eclipse.
        Debugger
    ●                                          Eclipse erbjuder ett bra stöd för re-                                                            Java ME som används exempelvis för ut-
                                               faktorering av källkod och filer.                                                                veckling av applikationer som ska köras
        Autocompletion
    ●
                                                                                                                                                på en mobiltelefon.
        Integration    med      versions-
    ●
        hanteringssystem

        Integration     med     defekt-
    ●
        hanteringsverktyg (JIRA, Trac,
        BugZilla etc)
Utöver ovanstående bör utvecklingsmiljön
vara baserad på en plugin-arkitektur för
att enkelt kunna lägga till nya features
från externa tillverkare (exempelvis
integration med byggverktyg, profilering,
UML-diagram etc).




                                       Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Kontinuerlig integration
Kontinuerlig integration kallas på engelska   CruiseControl                             Continuum                                    Hudson
Continuous Integration – CI. Konceptet
                                              http://cruisecontrol.sourceforge.net/     http://continuum.apache.org/                 https://hudson.dev.java.net/
innebär att versionshanterad källkod
kontinuerligt kommer att kompileras (det
vill säga integreras i kodbasen). Typiskt
så installeras en CI-server som ansvarar
för den kontinuerliga integration och
denna startar ett nytt bygge så fort någon
fil i versionshanteringssystemet ändrats.
Om ett kompileringsfel uppstår så kan
                                              CruiseControl är ett av de vanligaste     Continuum är ett CI-verktyg som är gjort     Hudson är ett modernt CI-verktyg som är
utvecklarna i projektet notifieras av CI-
                                              verktygen för CI. Det erbjuder stöd för   för integration med Maven. Continuum är      enkelt   och   lättkonfigurerat. Hudson
servern via exempelvis e-post för att
                                              det mesta inom CI men kräver en viss      enkelt att sätta upp om Maven-filerna är i   erbjuder stöd för många delar inom CI
genast kunna åtgärda problemet.
                                              mängd konfiguration för att få allt att   ordning men erbjuder endast ett subset       såsom rapporter men till skillnad från
                                              fungera. CruiseControl är open source     av de features som finns i exempelvis        exempelvis CruiseControl är det betydligt
Utöver kompileringsfel kan även enhets-
                                              men det finns även en kommersiell         CruiseControl. Beroende på vilka krav        enklare att konfigurera. Översiktssidan
tester och liknande exekveras vilket
                                              variant som kallas Cruise.                som ställs på CI-verktyget kan Continuum     som beskriver systemets ”hälsa” är
innebär att CI-servern direkt hittar ifall
                                                                                        dock räcka till.                             lättmanövrerad och tydlig.
något enhetstest misslyckas.
                                                                                        Continuum utvecklas via Maven-projektet      Hudson är en open source-produkt och
Utvecklarna brukar bli motiverade att
                                                                                        och är open source.                          rekommenderas varmt, speciellt för nya
endast checka in kod som faktiskt
                                                                                                                                     projekt.
kompilerar för att inte ”sätta stopp i
maskineriet” för de andra utvecklarna.
Fördelar med CI:

         Kontinuerlig återkoppling på hur
    ●
         systemet ”mår”

         Fel hittas tidigt – Inte i anslut-
    ●
         ning till testperiod eller release

         Kodkvaliteten ökar
    ●
         Koden testas ofta     (via   auto-
    ●
         matiserade tester)

         Det är enkelt att hämta det
    ●
         senaste bygget




                                      Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Enhetstester
Enhetstester handlar om att skriva testfall   JUnit                                       TestNG                                           RMock
i Java som testar begränsade delar av
                                              http://junit.org/                           http://testng.org                                http://rmock.sourceforge.net/
koden. Ett enhetstest exekverar typiskt
väldigt fort och testar kanske en eller ett
par     klasser.  Grundtanken     är    att
irrelevanta delar av koden ”mockas” – det
vill säga att man fejkar de komponenter
som inte är relevanta för testet.
Ett enhetstest exekveras i olika steg,
                                              JUnit är det vanligaste verktyget för       TestNG bygger är ett verktyg för enhets-         RMock är ett mockverktyg som används
dessa är setup, test, assert och tear
                                              enhetstester på marknaden. Det är open      testning som skapats för att kompensera          för att ”mocka” irrelevanta komponenter
down. Detta innebär att ett test först
                                              source och välbeprövat.                     de brister som funnits i JUnit. TestNG har       samt för att definiera vissa förväntade
sätter upp de komponenter och det data
                                                                                          liksom JUnit ett brett stöd i javavärlden        beteenden på en viss komponent.
som ska användas för testet. Sedan
                                              Det finns dock några delar av JUnit som     och integrerar väl med de flesta verktyg.
exekveras själva testet (exempelvis att
                                              har förbättringspotential såsom stöd för                                                     RMock     använder      liksom     verktygen
man kör en metod som ska testas).
                                              multitrådade tester. Dessa områden          TestNG erbjuder ett unikt stöd för               EasyMock och jMock metoden expect-
Därefter sker en eller flera asserts – det
                                              kommer säkert att täckas upp i nyare        testning av multitrådning, hantering av          run-verify som innebär att man först
vill säga verifieringar av det förväntade
                                              versioner av JUnit och flera av dessa har   testdata via datasets, att testa för             sätter    upp     förväntningar,     därefter
utfallet. Utan asserts har man ju faktiskt
                                              redan täckts upp av TestNG.                 ”failure” istället för ”success” det vill säga   exekverar koden och sist sköter ram-
inte verifierat att koden gör som den ska.
                                                                                          att man testar för att verifiera att             verket verifiering av att alla förväntningar
Det sista steget handlar om att rensa upp     Det finns två större versioner av JUnit.    exempelvis ett undantag sker snarare än          uppfyllts. Detta kan tyvärr leda till att
komponenter och data som använts så att       Version 3.8+ och version 4+. Skillnaderna   att man testar att det inte ska ske.             många förväntningar som är irrelevanta
nästa enhetstest kan exekveras.               är att version 4+ använder annotationer                                                      måste sättas upp och koden blir därmed
                                              för att styra den testsvit som ska köras                                                     svårläst och lång.
Det finns flera typer av ramverk som
                                              medan version 3.8+ ger stöd för Java 1.4
hanterar både enhetstester och så kallad
                                              och använder reflection.
mockning av komponenter. De vanligaste
enhetstestramverken är JUnit och TestNG                                                                                                    Mockito
medan de vanligaste ramverken för att
                                                                                                                                           http://code.google.com/p/mockito/
mocka komponenter är EasyMock, JMock,
RMock och Mockito.
När det gäller agil utveckling har enhets-
tester visat sig vara ett ovärderligt
verktyg. Genom att tidigt införa dessa
tester erhålls typiskt avsevärt högre
kvalitet på koden.
                                                                                                                                           Mockito är ett nytt och modernt mock-
Enhetstester passar bra in i bygg-
                                                                                                                                           ramverk. Ramverket kan i stort sett
processen eftersom dessa tester typiskt
                                                                                                                                           samma saker som exempelvis RMock men
kan exekveras via exempelvis Maven eller
                                                                                                                                           man har lagt ett stort fokus på att den
andra automatiserade byggverktyg.
                                                                                                                                           testkod som skrivs ska bli så enkel som
                                                                                                                                           möjligt.


                                      Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Projektkommunikation
Snabb feedback och maximal tillgång till                                                        Instant Messaging (IM)                            Old school
projektinformation     är   faktorer   som
                                                                                                IM kan användas till mer än att chatta            Flera av ovanstående verktyg hanterar
effektiviserar utvecklingsprojektets väg
                                                                                                med kompisarna om var man ska ta sin              information som man tidigare kanske
framåt. I communities för open source
                                                                                                after-work-öl just idag... Om alla i              hade återfunnit på post-it-lappar eller på
och agil utveckling har det över tiden
                                                                                                projektet ser varandra online via ett bra         någon projekt-whiteboard. Ofta kan man
tagits fram flera verktyg och arbetssätt
                                                                                                IM-verktyg så underlättar det mycket när          få samma effektivitet fast bättre spridning
för att underlätta flödet och tillgången till
                                                                                                man vill skicka små kodsnuttar, länkar till       och tillgänglighet på informationen om
information och kommunikationen mellan
                                                                                                bra informationskällor på nätet och annan         man använder rätt systemverktyg istället,
projektmedlemmarna.
                                                                                                typ av kort textuell information. Om ni           men det betyder inte på något sätt att
                                                                                                dessutom kopplar upp CI-verktyget till            lapparna och skrivtavlorna inte har en roll
                                                                                                nätet så får alla samma omedelbara                att fylla! Se till att även ha med dessa i
Wiki                                            Google Docs                                     feedback på hur läget är på bygget och            valet av verktyg och välj det som passar
                                                                                                om det är några tester som fallerar och           bäst just för er!
En wiki är en lättviktig textbaserad webb-      Där en wiki-sida blir för enkel för den
                                                                                                måste åtgärdas.
sajt, med mycket låg tröskel för vem som        information som ska behandlas så vänder
helst (som har rättigheter) att lägga till      man sig snart till ett Office-program av
nya sidor och redigera befintliga dito. Det     något slag. Det kan vara för att man vill
gör det som ett utmärkt verktyg att samla                                                       Maven-projektsajt
                                                ha bättre kontroll över formatteringen
in och spara den ackumulerade kunskap           eller för att man vill ha en tabell med
                                                                                                Maven kan generera en kodrelaterad
som projektet och dess medlemmar                beräkningar eller liknande. Nackdelen
                                                                                                projektsajt till dig, vid varje automatiserat
samlar på sig under resans gång. Det är         med     de     traditionella  Office-sviterna
                                                                                                bygge (som en del av den kontinuerliga
här man hittar webbsidor som beskriver          (Microsoft Office) är att det ställer krav på
                                                                                                integrationen).      Du    kan      konfigurera
allt från vilka kodregler man ska använda       att alla har dessa installerade (och
                                                                                                genereringen så att de den tar med de
sig av och vilka lösenord det är på             samma version dessutom) och att man
                                                                                                delar ni i projektet är intresserade av, till
testservrarna, till designdokument som          måste vara noga med att hantera
                                                                                                exempel JavaDoc, syntaxmarkerad käll-
resonerar kring hur man valt att lösa           dokumenten så att man inte råkar
                                                                                                kod     (JXR),      länkar     till    projekt-
specifika problem som behöver vara känt         uppdatera samma dokument samtidigt på
                                                                                                dokumentation på andra ställen och
av hela projektet.                              olika ställen.
                                                                                                rapporter från alla de övriga verktygen vi
                                                                                                tar upp i det här kompendiet. Eftersom
                                                Ett bra alternativ är att använda sig av
                                                                                                sajten genereras om i samband med
                                                Googles webbaserade Office-svit: Google
                                                                                                incheckning är den alltid i synk med
                                                Docs     (http://docs.google.com).    Funk-
                                                                                                koden som ligger i repositoryt.
                                                tionerna är inte lika kompletta och
                                                avancerade       som     de    installerade
                                                alternativen, men det går ändå att göra
                                                relativt avancerade saker utan krav på en
                                                installerad programvara (utöver en vanlig
                                                webbläsare) och eftersom dokumenten
                                                ligger på nätet så får man versions-
                                                hantering och åtkomsthantering på köpet!




                                       Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Kodtäckning
Det finns en mängd verktyg för att mäta     Cobertura                                  EMMA                                         EclEmma
hur stora delar av koden som körs, både
                                            http://cobertura.sourceforge.net/          http://emma.sourceforge.net/                 http://www.eclemma.org/
vid exekvering och test av applikationen.
Vid testning av en applikation kan 80%-
regeln vara bra att tillämpa. Om man
täcker 80% av all kod via sina tester har
man en väldigt hög täckningsgrad – det
är nästan omöjligt att nå upp till 100%
och det är varken nödvändigt eller
kostnadseffektivt.
                                            Cobertura är ett verktyg som mäter vilka   EMMA är liksom Cobertura ett kod-            EclEmma är en plugin till Eclipse som
                                            metoder och vilka instruktioner i koden    täckningsverktyg   som    instrumenterar     baseras på kodtäckningsverktyget EMMA.
Verktyg för kodtäckning kan både köras
                                            som exekverats. Detta sker genom så        bytekoden. EMMA är också open source         Denna plugin integrerar väl med ut-
för att generera rapporter vid ett
                                            kallad instrumentation av bytekoden (det   och kan integreras med Ant och Maven.        vecklingsmiljön och utvecklaren får ett
automatiserat bygge och kan även
                                            vill säga den kompilerade koden). Detta                                                 bra stöd för att se vilka rader kod som
integreras i utvecklingsmiljön. När verk-
                                                                                       En skillnad mellan EMMA och Cobertura är
                                            innebär att koden måste kompileras på                                                   körs av ett visst test.
tygen integreras i utvecklingsmiljön får
                                                                                       att EMMA kan hantera kodrader med
                                            ett speciellt sätt så att Cobertura kan
utvecklaren ett bra stöd för att se vilka
                                                                                       partiell täckning, det vill säga att om en   Bilden nedan visar hur det kan se ut efter
                                            sätta in sina mätpunkter som sedan
kodrader som täcks att ett specifikt test
                                                                                       del av en rad har exekverats markeras        körning av ett enhetstest.
                                            används vid själva exekveringen.
som denne just nu utvecklar.
                                                                                       den raden som delvis exekverad.
                                            Cobertura är ett open source-verktyg som
Förutom de open source-alternativ som
                                            integrerar väl med Ant och Maven och kan
presenteras till höger finns även flera
                                            generera detaljerade rapporter i både
kommersiella verktyg för kodtäckning
                                            XML- och HTML-format.
såsom Clover. Det finns dessutom en flora
av alternativa open source-verktyg men
Cobertura    fungerar    bra  för  auto-
matiserade byggen via exempelvis Maven
och    EclEmma      rekommenderas     för
integration med Eclipse.




                                    Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Beroenden
Om man använder en modern arkitektur        JDepend                                      Classycle                                    SonarJ
som är komponentbaserad är det viktigt
                                            http://clarkware.com/software/JDepend.html   http://classycle.sourceforge.net/            http://www.hello2morrow.com/products/sonarj
att beroenden mellan komponenter och
paket är tydliga. Man bör dessutom
undvika cirkulära beroenden mellan
komponenter och paket i största möjliga
mån. Detta för att bygga en så lätt-
förvaltad applikation som möjligt som har
en komponent-/modulmodell som håller
över tiden.
                                            JDepend är ett verktyg som kontrollerar      Classycle är ett verktyg som är likt         SonarJ är ett nytt kommersiellt verktyg
                                            vilka beroenden som finns mellan olika       JDepend. En av skillnaderna är att           som   kan    åskådligöra    beroenden    i
Det finns ett begränsat antal verktyg för
                                            paket.                                       Classycle har både snyggare rapporter        systemet på ett enkelt och tydligt sätt.
att mäta denna typ av beroenden på en
                                                                                         och faktiskt analyserar det rådata som
kodbas. Det kanske mest kända verktyget
                                            Formatet på den rapport som genereras                                                     Det är möjligt att sätta upp regler för vad
                                                                                         skapas djupare än vad JdDepend gör.
JDepend producerar rapporter som är
                                            kan antingen vara XML eller HTML. Dock                                                    som är tillåtet och inte och sedan låta
svårtolkade. Dock har nya kommersiella
                                            säger inte rapporten så mycket om            Classycle erbjuder enkel integration med     SonarJ indikera ifall någon bryter en
alternativ dykt upp på marknaden som till
                                            exempelvis vilka cirkulära beroenden som     Ant men tyvärr är det inte lika enkelt att   sådan regel.
exempel SonarJ.
                                            finns   utan    dessa     beroenden   får    integrera med Maven.
                                                                                                                                      SonarJ    används   bland    annat   vid
                                            utvecklaren själv gräva fram utifrån
Verktyg som tolkar beroenden kan
                                                                                                                                      utveckling och kvalitetssäkring av det
                                            rådatat som produceras i rapporten.
användas i den automatiska bygg-
                                                                                                                                      populära ramverket Spring Framework.
processen genom att specificera olika
gränsvärden som är tillåtna. Exempel på
dessa värden kan vara vilka beroenden
som är tillåtna, hur många beroenden en
komponent får ha och så vidare.




                                    Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Kodkonventioner
Kodkonventioner är regler och re-             Checkstyle                                   eclipse-cs                                     IDE
kommendationer för namnkonventioner,
                                              http://checkstyle.sourceforge.net/           http://eclipse-cs.sourceforge.net/             http://www.eclipse.org
indentering, kommentarer, white space
och så vidare. Dessa konventioner är
viktiga för att:

         80% av kostnaden för ett mjuk-
    ●
         varusystem är kostnaden för för-
         valtning.

         Det finns nästan ingen mjukvara      Checkstyle kan kontrollera att kodnings-     eclipse-cs är en plugin till Eclipse för att   De flesta IDE:s som exempelvis Eclipse
    ●
         som förvaltas under hela dess        standarden i ett projekt följs enligt de     integrera Checkstyle med Eclipse. De           har inbyggt stöd för formattering av Java,
         livslängd av originalförfattaren.    riktlinjer som satts upp.                    varningar och fel som upptäcks via             XML, HTML, JSP och så vidare. I Eclipse
                                                                                           Checkstyle rapporteras på ett överskådligt     så     räcker    det   med    att   trycka
                                              Checkstyle är mycket konfigurerbart vilket
         Kodkonventioner förbättrar käll-
    ●                                                                                      sätt i Eclipse. Checkstyle Errors hanteras     Ctrl + Shift + F så formatteras koden
                                              innebär att nästan alla konventioner kan
         kodens läsbarhet vilket innebär                                                   som kompileringsfel.                           enligt de inställningar som är bestämda
                                              stödjas av programmet. Det medföljer två
         att utvecklare förstår koden                                                                                                     för    det    aktuella  projektet.  Dessa
                                              stycken   konfigurationsfiler som     kan
         snabbare exempelvis i en för-                                                                                                    inställningar     kan     delas    mellan
                                              användas för att snabbt komma igång
         valtningssituation.                                                                                                              projektmedlemmar vilket leder till att en
                                              med Checkstyle, en fil för SUNs kod-                                                        person kan sätta upp alla regler men alla
         Tydliga riktlinjer underlättar ut-
    ●                                         konventioner och en fil med en ”minimal”                                                    kan använda dem.
         veckling av ny kod vilket innebär    kodstandard.
         att det är ”ett beslut som inte
                                              Det finns flera nivåer som kan användas
         måste fattas”. Det innebär också
                                              när en regel bryts. De vanligaste är
         att nya utvecklare ”vet vad som
                                              Warning och Error, om ett Error hittas så
         gäller”.
                                              hanteras det på samma sätt som ett
SUN tillhandahåller kodningsriktlinjer som    kompileringsfel.
har blivit grunden till en kodstandard som
                                              Rapporter kan genereras och integreras i
används inom javavärlden. Olika projekt
                                              den automatiska byggprocessen.
har olika avvikelser från denna kod-
standard. Riktlinjerna kan hittas på
följande adress:
http://java.sun.com/docs/codeconv/




                                      Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Kodmassa och komplexitet
Stora projekt med många utvecklare leder                                                          JavaNCSS
till stora mängder kod. Mindre projekt
                                                                                                  http://www.kclee.de/clemens/java/javancss/
som håller på under en lång tid leder
också till stora mängder kod. Om många
utvecklare använder kodbasen kommer
det förr eller senare att finnas klasser och
metoder som är väldigt långa och/eller
väldigt komplexa. Det är viktigt att hitta
dessa ”hot spots” för att:
                                                                                                  JavaNCSS är ett open source-verktyg som
         Om man minskar kodmassan och
    ●
                                                                                                  mäter bland annat Non Commenting
         komplexiteten ökas förvaltnings-
                                                                                                  Source      Statements    (NCSS)      och
         barheten.
                                                                                                  Cyclomatic Complexity Number (CCN).
         Komplex kod tar betydligt längre                                                         Förenklat kan man säga att NCSS är ett
    ●
         tid att sätta sig in i.                                                                  mått på mängden kod i ett paket, en
                                                                                                  klass eller metod. CCN är ett mått på hur
         Kod som är komplex är generellt
    ●                                                                                             komplex en klass eller metod är.
         sett ”error prone”.
                                                                                                  Det finns rekommenderade gränsvärden
                                                                                                  för både NCSS och CCN men dessa
                                                                                                  värden bör bestämmas för respektive
                                                                                                  projekt baserat på hur komplex koden
                                                                                                  kan bli, hur duktiga utvecklare som finns i
                                                                                                  projektet, om projektet är nyutveckling
                                                                                                  eller förvaltning och så vidare.
                                                                                                  JavaNCSS kan enkelt integreras i den
                                                                                                  automatiska byggprocessen via exempel-
                                                                                                  vis Maven.




                                      Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Potentiella buggar
Att hitta potentiella buggar (eller även                             PMD                                        FindBugs
faktiska buggar) är inte lätt. Javakod kan
                                                                     http://pmd.sourceforge.net/                http://findbugs.sourceforge.net/
vara syntaktiskt korrekt skriven men ändå
innehålla buggar.
Det finns flera verktyg som analyserar
javakod och kompilerad bytekod och letar
efter potentiella buggar via så kallade
”bad programming practices” (i motsats
till ”best practices”). Denna typ av
                                                                     PMD är ett open source-verktyg som         FindBugs analyserar kompilerad bytekod
verktyg kan vara ovärderliga under
                                                                     analyserar javakod med hjälp av olika      och letar efter ”bug patterns” det vill säga
utveckling av ny kod, uppfräschning av
                                                                     konfigurerbara regler. PMD kan analysera   kod som är skriven på ett ”dåligt” sätt.
gammal kod och när man letar buggar.
                                                                     följande problemområden:
Typiskt kan dessa verktyg både användas
                                                                                                                Det fina med FindBugs är att verktyget
vid    automatiska   byggen    och   via
                                                                                                                hittar potentiella buggar som andra
                                                                              Potentiella buggar
                                                                         ●
utvecklingsmiljön.
                                                                                                                liknande verktyg inte hittar.
                                                                              Död kod
                                                                         ●
                                                                                                                FindBugs integreras enkelt med Maven
                                                                              Tomma statements                  och liknande verktyg för automatiserade
                                                                         ●
                                                                                                                byggen. Utöver detta finns bra plugins till
                                                                              Överkomplicerade uttryck
                                                                         ●                                      exempelvis Eclipse.
                                                                              Suboptimal kod
                                                                         ●
                                                                              Komplexitet (PMD mäter CCN
                                                                         ●
                                                                              såsom verktyget JavaNCSS som
                                                                              nämnts tidigare)

                                                                              Duplicerad kod (via CPD)
                                                                         ●
                                                                     PMD kan användas i den automatiska
                                                                     byggprocessen via exempelvis Maven och
                                                                     kan generera rapporter i bland annat
                                                                     XML- och HTML-format.




                                     Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Upprepning (D.R.Y.)
Ett av de allra vanligaste quot;lågnivå-           Det finns många problem med det här                PMD-CPD
problemenquot; i en stor kodbas är att det är      sättet att programmera:
                                                                                                  http://pmd.sourceforge.net/
vanligt med upprepning av kod, så kallad
                                               Många kodrader är i sig ett problem, och
quot;copy-paste-programmeringquot; (CPP)...
                                               CPP leder ju till just detta. System med
Det ligger nära till hands när man ska         många kodrader är (allt annat lika)
lösa ett problem som man vet redan är          svårare att överblicka, svårare att söka i
löst på annan plats i koden att bara           och svårare att förstå. Allt detta leder till
kopiera hela eller delar av den gamla          att de blir svårare och dyrare att
lösningen och göra om den lite så att den      underhålla och får generellt ofta sämre
                                                                                                  Kvalitetsverktyget PMD som nämnts
passar den nya situationen. Det är             kvalitet.
                                                                                                  tidigare har en funktion, quot;Copy/Paste
faktiskt så vanligt att det är snarare regel
                                               I och med kod-dupliceringen kommer det             Detectionquot; (CPD), för att gå igenom all
än undantag att det förekommer i icke-
                                               att finnas många ställen i kodmassan som           kod och identifera partier av kod som
triviala system, om man inte använder sig
                                               gör samma sak, på samma sätt. Om den               återfinns på flera ställen, det vill säga
av särskilda hjälpmedel för att förhindra
                                               koden måste ändras, eller om det                   såna som troligen har skapats genom
detta.
                                               upptäcks fel i den som funnits redan från          CPP. CPD genererar en rapport som,
Vad är då problemen att göra på det här        början, blir det en väldigt känslig uppgift        modul för modul, visar statistik på hur
sättet? Det är ju väldigt konkret åter-        att söka rätt på alla ställen som berörs           många rader kod som är redundanta.
användning av kod, och det är ju bra?          och ändra dem på samma sätt.                       Rapporten     kan  länkas    direkt   mot
                                                                                                  källkoden för att explicit peka ut rader
                                               Allt eftersom tiden går kommer koden
                                                                                                  som borde byggas bort.
                                               som från början var identisk att sakta
Eller?                                         men säkert att divergera i takt med att
                                               koden underhålls och vidareutvecklas. Det
                                               kommer då att bli allt svårare att
                                               identifiera   och    åtgärda   fel    och
                                               förändringar i den kopierade koden, utan
                                               att missa något ställe och/eller att
                                               samtidigt introducera nya fel.




                                               Lösningen     på     dessa  problem    är
                                               naturligtvis att inte använda CPP det vill
                                               säga Don't Repeat Yourself – D.R.Y.




                                      Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Översikt och trender
När man jobbar med verktyg för               Sonar                                        QALab                                    XRadar
kvalitetssäkring blir det väldigt mycket
                                             http://sonar.codehaus.org/                   http://qalab.sourceforge.net/            http://xradar.sourceforge.net/
information    som    genereras.   Denna
information kan aggregeras på ett
överskådligt sätt för flera av de verktyg
som nämnts tidigare.
Det finns några verktyg för att jobba med
aggregerad information. Dessa verktyg
använder principen ”drill-down” vilket
                                             Sonar är ett open source-verktyg som         QALab är ytterligare ett open source-    XRadar har inte fått lika stort genomslag
innebär att man utifrån en översikt kan
                                             använder andra rapportverktyg såsom          verktyg som använder andra befintliga    som      exempelvis      Sonar.     XRadar
”borra” sig ner till mer och mer detaljer.
                                             PMD och Checkstyle och sammanställer         rapportverktyg       och    aggregerar   aggregerar information precis som de
Det är viktigt att dessa verktyg förutom     en aggregerad rapport. Verktyget är          information från dessa.                  andra     verktygen     och     presenterar
”drill-down” också kan hantera trender så    mycket trevligt med enkel och kraftfull                                               resultatet på ett något annorlunda sätt
                                                                                          QALab kan aggregera information från
att man kan se hur en applikation            navigering.                                                                           (andra skärningar).
                                                                                          följande rapportverktyg:
förändras över tiden, exempelvis hur
                                             Med hjälp av Sonar kan man se trender
många varningar och liknande som finns
                                                                                                    Checkstyle
                                                                                               ●
                                             det vill säga man kan se hur kvaliteten på
jämfört med förra releasen eller förra
                                             koden förändras över tiden.
veckan och så vidare.
                                                                                                    PMD
                                                                                               ●
                                             För att köra Sonar krävs att det aktuella
                                                                                                    PMD-CPD
                                                                                               ●
                                             projektet använder Maven.
                                                                                                    FindBugs
                                                                                               ●
                                             De verktyg som stöds av Sonar är:
                                                                                                    Cobertura
                                                                                               ●
                                                      Checkstyle
                                                 ●
                                                                                                    Simian
                                                                                               ●
                                                      PMD
                                                 ●
                                                      PMD-CPD
                                                 ●
                                                      Cobertura
                                                 ●
                                                      Clover
                                                 ●
                                                      JavaNCSS
                                                 ●
                                                      Surefire
                                                 ●




                                     Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
Rekommendationer
Nedan följer några tips för hur man kan införa de verktyg       5.   Använd enhetstester! Enhetstester är det
som diskuterats ovan ett projekt.                                    överlägset viktigaste kvalitetsverktyget för
                                                                     systemutveckling. Genom att testa koden på
    1.   Sätt upp en Wiki för kommunikation inom                     detta sätt så erhålls betydligt högre kvalitet,
         projektet. Wikin kan användas som central                   koden blir såklart mer testbar vilket ofta leder
         kommunikationspunkt       för   all typ av                  till en bättre applikationsdesign.
         dokumentation såsom designdokument, FAQ,
         how-to:s, länkar och så vidare.                        6.   Installera Sonar för att övervaka trender. Sonar
                                                                     påverkar inte byggskripten men ger en väldigt
    2.   Använd någon form             av IM för snabb               god överblick över flera kvalitetsverktyg.
         kommunikation mellan          projektmedlemmarna.
         IM är ypperligt när det      gäller att skicka korta   7.   Påbörja mätningar av kodtäckning. Inför
         kodsnuttar, ställa kortare   frågor och liknande.           exempelvis Cobertura i det kontinuerliga bygget
                                                                     för att få kontinuerlig status på hur mycket av
    3.   Använd ”riktiga” byggskript, bygg inte från                 koden som täcks. Använd EclEmma för att
         utvecklingsmiljön. Med ”riktiga” byggskript                 integrera kodtäckning i Eclipse.
         menas Ant eller Maven. Om ett nytt projekt
         påbörjas borde det självklara valet vara Maven         8.   Specificera vilka beroenden som får finnas
         och använder ert projekt redan Ant bör ni starkt            mellan moduler, paket och komponenter. Sätt
         överväga att övergå till Maven. Att konvertera              upp JDepend eller liknande för att analysera de
         ett befintligt Ant-projekt till Maven är relativt           beroenden    som    finns  och    verifiera  att
         enkelt. Följande fördelar erhålls                           arkitekturen är korrekt vid varje kontinuerligt
                                                                     bygge.
             Tydligare beroenden till externa bibliotek
         ○
                                                                9.   Installera FindBugs-plugin i utvecklingsmiljön
             Enkelt att integrera med utvecklingsmiljö
         ○                                                           och gå manuellt igenom de potentiella buggar
                                                                     som verktyget rapporterar.
             Enkelt att konfigurera           rapporter   och
         ○
                                                                10. Konfigurera in Copy-Paste-Detection (PMD-CPD)
             kvalitetsverktyg
                                                                    i det kontinuerliga bygget och lägg tid på att
             Enkelt att integrera med CI-verktyg
         ○                                                          minska kodmassan.
             Enkelt att integrera       med    aggregerings-
         ○                                                      11. Konfigurera in regler för kodkonventioner via
             verktyg såsom Sonar                                    Checkstyle i det kontinuerliga bygget. Starta
                                                                    inte med alla regler på samma gång utan börja
    4.   Sätt upp ett CI-verktyg. Om ni inte använder
                                                                    med EN regel och bygg sedan på med fler och
         något CI-verktyg föreslås Hudson som är enkelt
                                                                    fler regler.
         att sätta upp, enkelt att konfigurera och väldigt
         kraftfullt. CI-verktyget bör initialt hantera          12. Konfigurera in ytterligare verktyg såsom PMD
         kontinuerliga byggen där kompilering av källkod            när koden blir mer och mer stabil.
         samt exekvering av enhetstester sker.




                                        Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se

More Related Content

Similar to Cygni Powertools 1.0

VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsAnton Tibblin
 
HT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScriptHT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScriptAnton Tibblin
 
CV Johan Kempe Details
CV Johan Kempe DetailsCV Johan Kempe Details
CV Johan Kempe DetailsJohan Kempe
 
HT16 - DA156A - Ramverk och bibliotek
HT16 - DA156A - Ramverk och bibliotekHT16 - DA156A - Ramverk och bibliotek
HT16 - DA156A - Ramverk och bibliotekAnton Tibblin
 
Molnet och-big data-ake-edlund
Molnet och-big data-ake-edlundMolnet och-big data-ake-edlund
Molnet och-big data-ake-edlundAke Edlund
 
2013.11.29 ake edlund-tillvaxverket
2013.11.29 ake edlund-tillvaxverket2013.11.29 ake edlund-tillvaxverket
2013.11.29 ake edlund-tillvaxverketAke Edlund
 
2013.10.10 ake edlund-azlannet
2013.10.10 ake edlund-azlannet2013.10.10 ake edlund-azlannet
2013.10.10 ake edlund-azlannetAke Edlund
 
Molnet och BigData för AzlanNet
Molnet och BigData för AzlanNet Molnet och BigData för AzlanNet
Molnet och BigData för AzlanNet Ake Edlund
 
Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.ADDQ
 
HT19 - DA156A - Ramverk och bibliotek
HT19 - DA156A - Ramverk och bibliotekHT19 - DA156A - Ramverk och bibliotek
HT19 - DA156A - Ramverk och bibliotekAnton Tibblin
 
HT18 - DA156A - Frameworks
HT18 - DA156A - FrameworksHT18 - DA156A - Frameworks
HT18 - DA156A - FrameworksAnton Tibblin
 
HT17 - DA156A - Ramverk och bibliotek
HT17 - DA156A - Ramverk och bibliotekHT17 - DA156A - Ramverk och bibliotek
HT17 - DA156A - Ramverk och bibliotekAnton Tibblin
 
Ny teknik på webben
Ny teknik på webbenNy teknik på webben
Ny teknik på webbenPer Axbom
 
Kravställning i EPiServer 7
Kravställning i EPiServer 7Kravställning i EPiServer 7
Kravställning i EPiServer 77minds AB
 
Sparx EA frukostmöte presentation
Sparx EA frukostmöte presentationSparx EA frukostmöte presentation
Sparx EA frukostmöte presentationLars Lundgren
 
Ny teknik och användbarhet
Ny teknik och användbarhetNy teknik och användbarhet
Ny teknik och användbarhetPer Axbom
 
HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)Anton Tibblin
 
HT19 - DA354A - Introduktion till Python
HT19 - DA354A - Introduktion till PythonHT19 - DA354A - Introduktion till Python
HT19 - DA354A - Introduktion till PythonAnton Tibblin
 
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkVälj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkCreuna Sverige
 

Similar to Cygni Powertools 1.0 (20)

VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.js
 
Apitek Prisma
Apitek PrismaApitek Prisma
Apitek Prisma
 
HT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScriptHT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScript
 
CV Johan Kempe Details
CV Johan Kempe DetailsCV Johan Kempe Details
CV Johan Kempe Details
 
HT16 - DA156A - Ramverk och bibliotek
HT16 - DA156A - Ramverk och bibliotekHT16 - DA156A - Ramverk och bibliotek
HT16 - DA156A - Ramverk och bibliotek
 
Molnet och-big data-ake-edlund
Molnet och-big data-ake-edlundMolnet och-big data-ake-edlund
Molnet och-big data-ake-edlund
 
2013.11.29 ake edlund-tillvaxverket
2013.11.29 ake edlund-tillvaxverket2013.11.29 ake edlund-tillvaxverket
2013.11.29 ake edlund-tillvaxverket
 
2013.10.10 ake edlund-azlannet
2013.10.10 ake edlund-azlannet2013.10.10 ake edlund-azlannet
2013.10.10 ake edlund-azlannet
 
Molnet och BigData för AzlanNet
Molnet och BigData för AzlanNet Molnet och BigData för AzlanNet
Molnet och BigData för AzlanNet
 
Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.
 
HT19 - DA156A - Ramverk och bibliotek
HT19 - DA156A - Ramverk och bibliotekHT19 - DA156A - Ramverk och bibliotek
HT19 - DA156A - Ramverk och bibliotek
 
HT18 - DA156A - Frameworks
HT18 - DA156A - FrameworksHT18 - DA156A - Frameworks
HT18 - DA156A - Frameworks
 
HT17 - DA156A - Ramverk och bibliotek
HT17 - DA156A - Ramverk och bibliotekHT17 - DA156A - Ramverk och bibliotek
HT17 - DA156A - Ramverk och bibliotek
 
Ny teknik på webben
Ny teknik på webbenNy teknik på webben
Ny teknik på webben
 
Kravställning i EPiServer 7
Kravställning i EPiServer 7Kravställning i EPiServer 7
Kravställning i EPiServer 7
 
Sparx EA frukostmöte presentation
Sparx EA frukostmöte presentationSparx EA frukostmöte presentation
Sparx EA frukostmöte presentation
 
Ny teknik och användbarhet
Ny teknik och användbarhetNy teknik och användbarhet
Ny teknik och användbarhet
 
HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)
 
HT19 - DA354A - Introduktion till Python
HT19 - DA354A - Introduktion till PythonHT19 - DA354A - Introduktion till Python
HT19 - DA354A - Introduktion till Python
 
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkVälj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
 

Cygni Powertools 1.0

  • 1. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 2. Om Cygni Javakonsultbolaget Cygni grundades i Den genomsnittlige Cygnikonsulten är 35 mars 2006. Sedan dess har bolaget växt år och har 12 års professionell erfarenhet med god lönsamhet och mycket hög av avancerad systemutveckling. De flesta kundnöjdhet. Idag är Cygni 25 anställda av Cygnis konsulter är civilingenjörer, och sysselsätter även ett antal under- vanligtvis från D-linjen på KTH. En konsulter. Cygnikonsult är van att snabbt sätta sig in i kundens verksamhet, oavsett bransch, Cygni är specialister på att utveckla och därmed möjliggöra en snabb och avancerade Java- och Java EE- effektiv systemutveckling i linje med den applikationer. Samtliga Cygnis konsulter övergripande kravbilden. är utvecklare och/eller systemarkitekter med lång erfarenhet från projekt i en mängd olika branscher och teknik- domäner. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 3. Byggverktyg Det finns en flora av byggverktyg på Apache Ant Maven 2 marknaden varav de flesta av dessa http://ant.apache.org/ http://maven.apache.org verktyg är open source-alternativ. Rudimentära verktyg såsom make och egenhackade bat-filer har ersatts av mer sofistikerade verktyg som exempelvis Ant och Maven. Ett byggverktyg används för att man på ett kontrollerat sätt ska kunna bygga ihop Apache Ant är ett av de vanligaste verk- Maven 2 är ett verktyg för automatiserade det system eller den produkt man ut- tygen för automatiserade byggen. Det är byggen. Maven har stora likheter med vecklar. Det är viktigt att byggverktyget likt make men är byggt på Java och Apache Ant men använder sig av en är deterministiskt det vill säga att kräver således en javaplattform för att princip som kallas Convention over resultatet som produceras blir lika varje kunna köras. Apache Ant passar bäst för Configuration som innebär att bygg- gång. Dessutom är det viktigt att det att bygga javaprojekt. skripten blir väldigt korta och över- finns möjlighet att plugga in olika blickbara. Det finns defaultvärden för En stor skillnad mellan make och Ant är rapporter och andra features via så kallad vilken katalogstruktur som ska användas att Ant använder XML för att beskriva plugin-arkitektur. och så vidare. byggprocessen medan make använder det gamla Makefile-formatet. En stor fördel med Maven är dess hantering av beroenden mellan olika arte- Omoderna verktyg: De stora nackdelarna med Ant är att fakter. Detta gäller både egna artefakter beroenden mellan olika artefakter såsom (egna jar- eller war-filer) eller externa Make ● tredjepartsbibliotek och liknande inte artefakter såsom tredjepartsbibliotek. hanteras på något enhetligt sätt samt att Bat-filer / Shell scripts ● Externa beroenden tankas hem från Ant-filerna blir långa och svåra att över- Mavens repository vilket innebär att ut- IDE ● blicka. vecklare enkelt kan komma igång med utvecklingen från vilken maskin som helst. Moderna verktyg: Maven har dessutom ett väldigt bra stöd Ant ● för rapporter och externa plugins. Maven ● Ivy ● Buckminster ● Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 4. Utvecklingsmiljö En utvecklingsmiljö är det verktyg som Eclipse IntelliJ IDEA NetBeans utvecklaren använder mest. Det är därför http://www.eclipse.org http://www.jetbrains.com/idea/ http://www.netbeans.org/ väldigt viktigt att utvecklingsmiljön fungerar bra och integrerar väl med de övriga verktyg som används inom projektet. Ett annat ord för utvecklings- miljö är IDE – Integrated Development Environment vilket kanske bättre be- skriver vad det hela handlar om. Eclipse är ett open source-verktyg och det IntelliJ IDEA är till skillnad från Eclipse ett NetBeans är ett open source-verktyg som Utvecklingsmiljön bör åtminstone till- absolut vanligaste utvecklingsverktyget kommersiellt utvecklingsverktyg. IntelliJ håller hög klass men kanske inte fått lika handahålla följande: på marknaden. Applikationen är plugin- har gott rykte inom javavärlden och är stort genomslag som Eclipse. NetBeans är Editor för källkod (Java, JSP, ● baserad via en teknologi som kallas OSGi liksom Eclipse baserat på en plugin- liksom Eclipse plugin-baserat och har bra XML, HTML etc) vilket leder till att en mängd olika plugins arkitektur. IntelliJ är känt för sitt utmärkta stöd för refaktorering och liknande som finns att ladda hem för integration med refaktoreringsstöd men eftersom verk- erbjuds i både Eclipse och IntelliJ IDEA. Kompilator ● olika verktyg. tyget inte är gratis har det inte fått lika Värt att nämna är det utmärkta stödet för stort genomslag som Eclipse. Debugger ● Eclipse erbjuder ett bra stöd för re- Java ME som används exempelvis för ut- faktorering av källkod och filer. veckling av applikationer som ska köras Autocompletion ● på en mobiltelefon. Integration med versions- ● hanteringssystem Integration med defekt- ● hanteringsverktyg (JIRA, Trac, BugZilla etc) Utöver ovanstående bör utvecklingsmiljön vara baserad på en plugin-arkitektur för att enkelt kunna lägga till nya features från externa tillverkare (exempelvis integration med byggverktyg, profilering, UML-diagram etc). Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 5. Kontinuerlig integration Kontinuerlig integration kallas på engelska CruiseControl Continuum Hudson Continuous Integration – CI. Konceptet http://cruisecontrol.sourceforge.net/ http://continuum.apache.org/ https://hudson.dev.java.net/ innebär att versionshanterad källkod kontinuerligt kommer att kompileras (det vill säga integreras i kodbasen). Typiskt så installeras en CI-server som ansvarar för den kontinuerliga integration och denna startar ett nytt bygge så fort någon fil i versionshanteringssystemet ändrats. Om ett kompileringsfel uppstår så kan CruiseControl är ett av de vanligaste Continuum är ett CI-verktyg som är gjort Hudson är ett modernt CI-verktyg som är utvecklarna i projektet notifieras av CI- verktygen för CI. Det erbjuder stöd för för integration med Maven. Continuum är enkelt och lättkonfigurerat. Hudson servern via exempelvis e-post för att det mesta inom CI men kräver en viss enkelt att sätta upp om Maven-filerna är i erbjuder stöd för många delar inom CI genast kunna åtgärda problemet. mängd konfiguration för att få allt att ordning men erbjuder endast ett subset såsom rapporter men till skillnad från fungera. CruiseControl är open source av de features som finns i exempelvis exempelvis CruiseControl är det betydligt Utöver kompileringsfel kan även enhets- men det finns även en kommersiell CruiseControl. Beroende på vilka krav enklare att konfigurera. Översiktssidan tester och liknande exekveras vilket variant som kallas Cruise. som ställs på CI-verktyget kan Continuum som beskriver systemets ”hälsa” är innebär att CI-servern direkt hittar ifall dock räcka till. lättmanövrerad och tydlig. något enhetstest misslyckas. Continuum utvecklas via Maven-projektet Hudson är en open source-produkt och Utvecklarna brukar bli motiverade att och är open source. rekommenderas varmt, speciellt för nya endast checka in kod som faktiskt projekt. kompilerar för att inte ”sätta stopp i maskineriet” för de andra utvecklarna. Fördelar med CI: Kontinuerlig återkoppling på hur ● systemet ”mår” Fel hittas tidigt – Inte i anslut- ● ning till testperiod eller release Kodkvaliteten ökar ● Koden testas ofta (via auto- ● matiserade tester) Det är enkelt att hämta det ● senaste bygget Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 6. Enhetstester Enhetstester handlar om att skriva testfall JUnit TestNG RMock i Java som testar begränsade delar av http://junit.org/ http://testng.org http://rmock.sourceforge.net/ koden. Ett enhetstest exekverar typiskt väldigt fort och testar kanske en eller ett par klasser. Grundtanken är att irrelevanta delar av koden ”mockas” – det vill säga att man fejkar de komponenter som inte är relevanta för testet. Ett enhetstest exekveras i olika steg, JUnit är det vanligaste verktyget för TestNG bygger är ett verktyg för enhets- RMock är ett mockverktyg som används dessa är setup, test, assert och tear enhetstester på marknaden. Det är open testning som skapats för att kompensera för att ”mocka” irrelevanta komponenter down. Detta innebär att ett test först source och välbeprövat. de brister som funnits i JUnit. TestNG har samt för att definiera vissa förväntade sätter upp de komponenter och det data liksom JUnit ett brett stöd i javavärlden beteenden på en viss komponent. som ska användas för testet. Sedan Det finns dock några delar av JUnit som och integrerar väl med de flesta verktyg. exekveras själva testet (exempelvis att har förbättringspotential såsom stöd för RMock använder liksom verktygen man kör en metod som ska testas). multitrådade tester. Dessa områden TestNG erbjuder ett unikt stöd för EasyMock och jMock metoden expect- Därefter sker en eller flera asserts – det kommer säkert att täckas upp i nyare testning av multitrådning, hantering av run-verify som innebär att man först vill säga verifieringar av det förväntade versioner av JUnit och flera av dessa har testdata via datasets, att testa för sätter upp förväntningar, därefter utfallet. Utan asserts har man ju faktiskt redan täckts upp av TestNG. ”failure” istället för ”success” det vill säga exekverar koden och sist sköter ram- inte verifierat att koden gör som den ska. att man testar för att verifiera att verket verifiering av att alla förväntningar Det sista steget handlar om att rensa upp Det finns två större versioner av JUnit. exempelvis ett undantag sker snarare än uppfyllts. Detta kan tyvärr leda till att komponenter och data som använts så att Version 3.8+ och version 4+. Skillnaderna att man testar att det inte ska ske. många förväntningar som är irrelevanta nästa enhetstest kan exekveras. är att version 4+ använder annotationer måste sättas upp och koden blir därmed för att styra den testsvit som ska köras svårläst och lång. Det finns flera typer av ramverk som medan version 3.8+ ger stöd för Java 1.4 hanterar både enhetstester och så kallad och använder reflection. mockning av komponenter. De vanligaste enhetstestramverken är JUnit och TestNG Mockito medan de vanligaste ramverken för att http://code.google.com/p/mockito/ mocka komponenter är EasyMock, JMock, RMock och Mockito. När det gäller agil utveckling har enhets- tester visat sig vara ett ovärderligt verktyg. Genom att tidigt införa dessa tester erhålls typiskt avsevärt högre kvalitet på koden. Mockito är ett nytt och modernt mock- Enhetstester passar bra in i bygg- ramverk. Ramverket kan i stort sett processen eftersom dessa tester typiskt samma saker som exempelvis RMock men kan exekveras via exempelvis Maven eller man har lagt ett stort fokus på att den andra automatiserade byggverktyg. testkod som skrivs ska bli så enkel som möjligt. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 7. Projektkommunikation Snabb feedback och maximal tillgång till Instant Messaging (IM) Old school projektinformation är faktorer som IM kan användas till mer än att chatta Flera av ovanstående verktyg hanterar effektiviserar utvecklingsprojektets väg med kompisarna om var man ska ta sin information som man tidigare kanske framåt. I communities för open source after-work-öl just idag... Om alla i hade återfunnit på post-it-lappar eller på och agil utveckling har det över tiden projektet ser varandra online via ett bra någon projekt-whiteboard. Ofta kan man tagits fram flera verktyg och arbetssätt IM-verktyg så underlättar det mycket när få samma effektivitet fast bättre spridning för att underlätta flödet och tillgången till man vill skicka små kodsnuttar, länkar till och tillgänglighet på informationen om information och kommunikationen mellan bra informationskällor på nätet och annan man använder rätt systemverktyg istället, projektmedlemmarna. typ av kort textuell information. Om ni men det betyder inte på något sätt att dessutom kopplar upp CI-verktyget till lapparna och skrivtavlorna inte har en roll nätet så får alla samma omedelbara att fylla! Se till att även ha med dessa i Wiki Google Docs feedback på hur läget är på bygget och valet av verktyg och välj det som passar om det är några tester som fallerar och bäst just för er! En wiki är en lättviktig textbaserad webb- Där en wiki-sida blir för enkel för den måste åtgärdas. sajt, med mycket låg tröskel för vem som information som ska behandlas så vänder helst (som har rättigheter) att lägga till man sig snart till ett Office-program av nya sidor och redigera befintliga dito. Det något slag. Det kan vara för att man vill gör det som ett utmärkt verktyg att samla Maven-projektsajt ha bättre kontroll över formatteringen in och spara den ackumulerade kunskap eller för att man vill ha en tabell med Maven kan generera en kodrelaterad som projektet och dess medlemmar beräkningar eller liknande. Nackdelen projektsajt till dig, vid varje automatiserat samlar på sig under resans gång. Det är med de traditionella Office-sviterna bygge (som en del av den kontinuerliga här man hittar webbsidor som beskriver (Microsoft Office) är att det ställer krav på integrationen). Du kan konfigurera allt från vilka kodregler man ska använda att alla har dessa installerade (och genereringen så att de den tar med de sig av och vilka lösenord det är på samma version dessutom) och att man delar ni i projektet är intresserade av, till testservrarna, till designdokument som måste vara noga med att hantera exempel JavaDoc, syntaxmarkerad käll- resonerar kring hur man valt att lösa dokumenten så att man inte råkar kod (JXR), länkar till projekt- specifika problem som behöver vara känt uppdatera samma dokument samtidigt på dokumentation på andra ställen och av hela projektet. olika ställen. rapporter från alla de övriga verktygen vi tar upp i det här kompendiet. Eftersom Ett bra alternativ är att använda sig av sajten genereras om i samband med Googles webbaserade Office-svit: Google incheckning är den alltid i synk med Docs (http://docs.google.com). Funk- koden som ligger i repositoryt. tionerna är inte lika kompletta och avancerade som de installerade alternativen, men det går ändå att göra relativt avancerade saker utan krav på en installerad programvara (utöver en vanlig webbläsare) och eftersom dokumenten ligger på nätet så får man versions- hantering och åtkomsthantering på köpet! Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 8. Kodtäckning Det finns en mängd verktyg för att mäta Cobertura EMMA EclEmma hur stora delar av koden som körs, både http://cobertura.sourceforge.net/ http://emma.sourceforge.net/ http://www.eclemma.org/ vid exekvering och test av applikationen. Vid testning av en applikation kan 80%- regeln vara bra att tillämpa. Om man täcker 80% av all kod via sina tester har man en väldigt hög täckningsgrad – det är nästan omöjligt att nå upp till 100% och det är varken nödvändigt eller kostnadseffektivt. Cobertura är ett verktyg som mäter vilka EMMA är liksom Cobertura ett kod- EclEmma är en plugin till Eclipse som metoder och vilka instruktioner i koden täckningsverktyg som instrumenterar baseras på kodtäckningsverktyget EMMA. Verktyg för kodtäckning kan både köras som exekverats. Detta sker genom så bytekoden. EMMA är också open source Denna plugin integrerar väl med ut- för att generera rapporter vid ett kallad instrumentation av bytekoden (det och kan integreras med Ant och Maven. vecklingsmiljön och utvecklaren får ett automatiserat bygge och kan även vill säga den kompilerade koden). Detta bra stöd för att se vilka rader kod som integreras i utvecklingsmiljön. När verk- En skillnad mellan EMMA och Cobertura är innebär att koden måste kompileras på körs av ett visst test. tygen integreras i utvecklingsmiljön får att EMMA kan hantera kodrader med ett speciellt sätt så att Cobertura kan utvecklaren ett bra stöd för att se vilka partiell täckning, det vill säga att om en Bilden nedan visar hur det kan se ut efter sätta in sina mätpunkter som sedan kodrader som täcks att ett specifikt test del av en rad har exekverats markeras körning av ett enhetstest. används vid själva exekveringen. som denne just nu utvecklar. den raden som delvis exekverad. Cobertura är ett open source-verktyg som Förutom de open source-alternativ som integrerar väl med Ant och Maven och kan presenteras till höger finns även flera generera detaljerade rapporter i både kommersiella verktyg för kodtäckning XML- och HTML-format. såsom Clover. Det finns dessutom en flora av alternativa open source-verktyg men Cobertura fungerar bra för auto- matiserade byggen via exempelvis Maven och EclEmma rekommenderas för integration med Eclipse. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 9. Beroenden Om man använder en modern arkitektur JDepend Classycle SonarJ som är komponentbaserad är det viktigt http://clarkware.com/software/JDepend.html http://classycle.sourceforge.net/ http://www.hello2morrow.com/products/sonarj att beroenden mellan komponenter och paket är tydliga. Man bör dessutom undvika cirkulära beroenden mellan komponenter och paket i största möjliga mån. Detta för att bygga en så lätt- förvaltad applikation som möjligt som har en komponent-/modulmodell som håller över tiden. JDepend är ett verktyg som kontrollerar Classycle är ett verktyg som är likt SonarJ är ett nytt kommersiellt verktyg vilka beroenden som finns mellan olika JDepend. En av skillnaderna är att som kan åskådligöra beroenden i Det finns ett begränsat antal verktyg för paket. Classycle har både snyggare rapporter systemet på ett enkelt och tydligt sätt. att mäta denna typ av beroenden på en och faktiskt analyserar det rådata som kodbas. Det kanske mest kända verktyget Formatet på den rapport som genereras Det är möjligt att sätta upp regler för vad skapas djupare än vad JdDepend gör. JDepend producerar rapporter som är kan antingen vara XML eller HTML. Dock som är tillåtet och inte och sedan låta svårtolkade. Dock har nya kommersiella säger inte rapporten så mycket om Classycle erbjuder enkel integration med SonarJ indikera ifall någon bryter en alternativ dykt upp på marknaden som till exempelvis vilka cirkulära beroenden som Ant men tyvärr är det inte lika enkelt att sådan regel. exempel SonarJ. finns utan dessa beroenden får integrera med Maven. SonarJ används bland annat vid utvecklaren själv gräva fram utifrån Verktyg som tolkar beroenden kan utveckling och kvalitetssäkring av det rådatat som produceras i rapporten. användas i den automatiska bygg- populära ramverket Spring Framework. processen genom att specificera olika gränsvärden som är tillåtna. Exempel på dessa värden kan vara vilka beroenden som är tillåtna, hur många beroenden en komponent får ha och så vidare. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 10. Kodkonventioner Kodkonventioner är regler och re- Checkstyle eclipse-cs IDE kommendationer för namnkonventioner, http://checkstyle.sourceforge.net/ http://eclipse-cs.sourceforge.net/ http://www.eclipse.org indentering, kommentarer, white space och så vidare. Dessa konventioner är viktiga för att: 80% av kostnaden för ett mjuk- ● varusystem är kostnaden för för- valtning. Det finns nästan ingen mjukvara Checkstyle kan kontrollera att kodnings- eclipse-cs är en plugin till Eclipse för att De flesta IDE:s som exempelvis Eclipse ● som förvaltas under hela dess standarden i ett projekt följs enligt de integrera Checkstyle med Eclipse. De har inbyggt stöd för formattering av Java, livslängd av originalförfattaren. riktlinjer som satts upp. varningar och fel som upptäcks via XML, HTML, JSP och så vidare. I Eclipse Checkstyle rapporteras på ett överskådligt så räcker det med att trycka Checkstyle är mycket konfigurerbart vilket Kodkonventioner förbättrar käll- ● sätt i Eclipse. Checkstyle Errors hanteras Ctrl + Shift + F så formatteras koden innebär att nästan alla konventioner kan kodens läsbarhet vilket innebär som kompileringsfel. enligt de inställningar som är bestämda stödjas av programmet. Det medföljer två att utvecklare förstår koden för det aktuella projektet. Dessa stycken konfigurationsfiler som kan snabbare exempelvis i en för- inställningar kan delas mellan användas för att snabbt komma igång valtningssituation. projektmedlemmar vilket leder till att en med Checkstyle, en fil för SUNs kod- person kan sätta upp alla regler men alla Tydliga riktlinjer underlättar ut- ● konventioner och en fil med en ”minimal” kan använda dem. veckling av ny kod vilket innebär kodstandard. att det är ”ett beslut som inte Det finns flera nivåer som kan användas måste fattas”. Det innebär också när en regel bryts. De vanligaste är att nya utvecklare ”vet vad som Warning och Error, om ett Error hittas så gäller”. hanteras det på samma sätt som ett SUN tillhandahåller kodningsriktlinjer som kompileringsfel. har blivit grunden till en kodstandard som Rapporter kan genereras och integreras i används inom javavärlden. Olika projekt den automatiska byggprocessen. har olika avvikelser från denna kod- standard. Riktlinjerna kan hittas på följande adress: http://java.sun.com/docs/codeconv/ Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 11. Kodmassa och komplexitet Stora projekt med många utvecklare leder JavaNCSS till stora mängder kod. Mindre projekt http://www.kclee.de/clemens/java/javancss/ som håller på under en lång tid leder också till stora mängder kod. Om många utvecklare använder kodbasen kommer det förr eller senare att finnas klasser och metoder som är väldigt långa och/eller väldigt komplexa. Det är viktigt att hitta dessa ”hot spots” för att: JavaNCSS är ett open source-verktyg som Om man minskar kodmassan och ● mäter bland annat Non Commenting komplexiteten ökas förvaltnings- Source Statements (NCSS) och barheten. Cyclomatic Complexity Number (CCN). Komplex kod tar betydligt längre Förenklat kan man säga att NCSS är ett ● tid att sätta sig in i. mått på mängden kod i ett paket, en klass eller metod. CCN är ett mått på hur Kod som är komplex är generellt ● komplex en klass eller metod är. sett ”error prone”. Det finns rekommenderade gränsvärden för både NCSS och CCN men dessa värden bör bestämmas för respektive projekt baserat på hur komplex koden kan bli, hur duktiga utvecklare som finns i projektet, om projektet är nyutveckling eller förvaltning och så vidare. JavaNCSS kan enkelt integreras i den automatiska byggprocessen via exempel- vis Maven. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 12. Potentiella buggar Att hitta potentiella buggar (eller även PMD FindBugs faktiska buggar) är inte lätt. Javakod kan http://pmd.sourceforge.net/ http://findbugs.sourceforge.net/ vara syntaktiskt korrekt skriven men ändå innehålla buggar. Det finns flera verktyg som analyserar javakod och kompilerad bytekod och letar efter potentiella buggar via så kallade ”bad programming practices” (i motsats till ”best practices”). Denna typ av PMD är ett open source-verktyg som FindBugs analyserar kompilerad bytekod verktyg kan vara ovärderliga under analyserar javakod med hjälp av olika och letar efter ”bug patterns” det vill säga utveckling av ny kod, uppfräschning av konfigurerbara regler. PMD kan analysera kod som är skriven på ett ”dåligt” sätt. gammal kod och när man letar buggar. följande problemområden: Typiskt kan dessa verktyg både användas Det fina med FindBugs är att verktyget vid automatiska byggen och via hittar potentiella buggar som andra Potentiella buggar ● utvecklingsmiljön. liknande verktyg inte hittar. Död kod ● FindBugs integreras enkelt med Maven Tomma statements och liknande verktyg för automatiserade ● byggen. Utöver detta finns bra plugins till Överkomplicerade uttryck ● exempelvis Eclipse. Suboptimal kod ● Komplexitet (PMD mäter CCN ● såsom verktyget JavaNCSS som nämnts tidigare) Duplicerad kod (via CPD) ● PMD kan användas i den automatiska byggprocessen via exempelvis Maven och kan generera rapporter i bland annat XML- och HTML-format. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 13. Upprepning (D.R.Y.) Ett av de allra vanligaste quot;lågnivå- Det finns många problem med det här PMD-CPD problemenquot; i en stor kodbas är att det är sättet att programmera: http://pmd.sourceforge.net/ vanligt med upprepning av kod, så kallad Många kodrader är i sig ett problem, och quot;copy-paste-programmeringquot; (CPP)... CPP leder ju till just detta. System med Det ligger nära till hands när man ska många kodrader är (allt annat lika) lösa ett problem som man vet redan är svårare att överblicka, svårare att söka i löst på annan plats i koden att bara och svårare att förstå. Allt detta leder till kopiera hela eller delar av den gamla att de blir svårare och dyrare att lösningen och göra om den lite så att den underhålla och får generellt ofta sämre Kvalitetsverktyget PMD som nämnts passar den nya situationen. Det är kvalitet. tidigare har en funktion, quot;Copy/Paste faktiskt så vanligt att det är snarare regel I och med kod-dupliceringen kommer det Detectionquot; (CPD), för att gå igenom all än undantag att det förekommer i icke- att finnas många ställen i kodmassan som kod och identifera partier av kod som triviala system, om man inte använder sig gör samma sak, på samma sätt. Om den återfinns på flera ställen, det vill säga av särskilda hjälpmedel för att förhindra koden måste ändras, eller om det såna som troligen har skapats genom detta. upptäcks fel i den som funnits redan från CPP. CPD genererar en rapport som, Vad är då problemen att göra på det här början, blir det en väldigt känslig uppgift modul för modul, visar statistik på hur sättet? Det är ju väldigt konkret åter- att söka rätt på alla ställen som berörs många rader kod som är redundanta. användning av kod, och det är ju bra? och ändra dem på samma sätt. Rapporten kan länkas direkt mot källkoden för att explicit peka ut rader Allt eftersom tiden går kommer koden som borde byggas bort. som från början var identisk att sakta Eller? men säkert att divergera i takt med att koden underhålls och vidareutvecklas. Det kommer då att bli allt svårare att identifiera och åtgärda fel och förändringar i den kopierade koden, utan att missa något ställe och/eller att samtidigt introducera nya fel. Lösningen på dessa problem är naturligtvis att inte använda CPP det vill säga Don't Repeat Yourself – D.R.Y. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 14. Översikt och trender När man jobbar med verktyg för Sonar QALab XRadar kvalitetssäkring blir det väldigt mycket http://sonar.codehaus.org/ http://qalab.sourceforge.net/ http://xradar.sourceforge.net/ information som genereras. Denna information kan aggregeras på ett överskådligt sätt för flera av de verktyg som nämnts tidigare. Det finns några verktyg för att jobba med aggregerad information. Dessa verktyg använder principen ”drill-down” vilket Sonar är ett open source-verktyg som QALab är ytterligare ett open source- XRadar har inte fått lika stort genomslag innebär att man utifrån en översikt kan använder andra rapportverktyg såsom verktyg som använder andra befintliga som exempelvis Sonar. XRadar ”borra” sig ner till mer och mer detaljer. PMD och Checkstyle och sammanställer rapportverktyg och aggregerar aggregerar information precis som de Det är viktigt att dessa verktyg förutom en aggregerad rapport. Verktyget är information från dessa. andra verktygen och presenterar ”drill-down” också kan hantera trender så mycket trevligt med enkel och kraftfull resultatet på ett något annorlunda sätt QALab kan aggregera information från att man kan se hur en applikation navigering. (andra skärningar). följande rapportverktyg: förändras över tiden, exempelvis hur Med hjälp av Sonar kan man se trender många varningar och liknande som finns Checkstyle ● det vill säga man kan se hur kvaliteten på jämfört med förra releasen eller förra koden förändras över tiden. veckan och så vidare. PMD ● För att köra Sonar krävs att det aktuella PMD-CPD ● projektet använder Maven. FindBugs ● De verktyg som stöds av Sonar är: Cobertura ● Checkstyle ● Simian ● PMD ● PMD-CPD ● Cobertura ● Clover ● JavaNCSS ● Surefire ● Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se
  • 15. Rekommendationer Nedan följer några tips för hur man kan införa de verktyg 5. Använd enhetstester! Enhetstester är det som diskuterats ovan ett projekt. överlägset viktigaste kvalitetsverktyget för systemutveckling. Genom att testa koden på 1. Sätt upp en Wiki för kommunikation inom detta sätt så erhålls betydligt högre kvalitet, projektet. Wikin kan användas som central koden blir såklart mer testbar vilket ofta leder kommunikationspunkt för all typ av till en bättre applikationsdesign. dokumentation såsom designdokument, FAQ, how-to:s, länkar och så vidare. 6. Installera Sonar för att övervaka trender. Sonar påverkar inte byggskripten men ger en väldigt 2. Använd någon form av IM för snabb god överblick över flera kvalitetsverktyg. kommunikation mellan projektmedlemmarna. IM är ypperligt när det gäller att skicka korta 7. Påbörja mätningar av kodtäckning. Inför kodsnuttar, ställa kortare frågor och liknande. exempelvis Cobertura i det kontinuerliga bygget för att få kontinuerlig status på hur mycket av 3. Använd ”riktiga” byggskript, bygg inte från koden som täcks. Använd EclEmma för att utvecklingsmiljön. Med ”riktiga” byggskript integrera kodtäckning i Eclipse. menas Ant eller Maven. Om ett nytt projekt påbörjas borde det självklara valet vara Maven 8. Specificera vilka beroenden som får finnas och använder ert projekt redan Ant bör ni starkt mellan moduler, paket och komponenter. Sätt överväga att övergå till Maven. Att konvertera upp JDepend eller liknande för att analysera de ett befintligt Ant-projekt till Maven är relativt beroenden som finns och verifiera att enkelt. Följande fördelar erhålls arkitekturen är korrekt vid varje kontinuerligt bygge. Tydligare beroenden till externa bibliotek ○ 9. Installera FindBugs-plugin i utvecklingsmiljön Enkelt att integrera med utvecklingsmiljö ○ och gå manuellt igenom de potentiella buggar som verktyget rapporterar. Enkelt att konfigurera rapporter och ○ 10. Konfigurera in Copy-Paste-Detection (PMD-CPD) kvalitetsverktyg i det kontinuerliga bygget och lägg tid på att Enkelt att integrera med CI-verktyg ○ minska kodmassan. Enkelt att integrera med aggregerings- ○ 11. Konfigurera in regler för kodkonventioner via verktyg såsom Sonar Checkstyle i det kontinuerliga bygget. Starta inte med alla regler på samma gång utan börja 4. Sätt upp ett CI-verktyg. Om ni inte använder med EN regel och bygg sedan på med fler och något CI-verktyg föreslås Hudson som är enkelt fler regler. att sätta upp, enkelt att konfigurera och väldigt kraftfullt. CI-verktyget bör initialt hantera 12. Konfigurera in ytterligare verktyg såsom PMD kontinuerliga byggen där kompilering av källkod när koden blir mer och mer stabil. samt exekvering av enhetstester sker. Cygni | 08-459 93 30 | info@cygni.se | cygni.se | stacktrace.se