Kodanalys med hjälp utav SemmleCode

Relevanta dokument
Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Installationsanvisningar. till IST Analys

Installation av VDI för PC TIPS! Skriv ej ut använd hellre ipad. Nya lathundar publiceras regelbundet Version 1.0

Verktyg för statisk kodanalys

Petter Berglund. Sammanfattning

Programinstallation Datorbaserat handsmörjningssystem

Hur du installerar Open Broadcaster Software (OBS) fo r HD-sa ndning

Djupstudie Code smells / Refaktorisering. Martin Larsson dt08ml5 Stefan Johansson, dt08sj7

Djupstudie Verktyg för att förebygga problem i källkod. Anders Forslund Anders Lund

Malmö University / Library and IT Service. Marcus Lindberg

Administratörsrättigheter i Windows krävs för att genomföra installationen.

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Webservice & ERP-Integration Rapport

Continuous Integration med Jenkins. Linus Tolke Enea Experts

INSTALLATIONSGUIDE TILL ANDROID UTVECKLINGSMILJÖ

Design Collaboration Suite

Administrationsmanual ImageBank 2

A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices

Manual Mjukvara Allvis Software (SV )

OBS!!! Anslut ej USB kabeln till dator eller GPS innan du först har installerat drivrutinerna för USB kabeln i din dator.

Praktikum i programmering

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Laboration 10 - Eclipse

Introduktion av uppdatering

LICENSAKTIVERINGSGUIDE. Design Collaboration Suite

Instruktioner för uppdatering från Ethiris 4.10 till 5.x

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

Lite mer om CGI-programmering

Instruktioner för uppdatering från Ethiris 5.x till 6.0

Att lära sig av kodanalys

Installation av StruSofts låne-licensserver (nätverkslicens)

Instruktioner för uppkoppling mot NyA Open

Kapitel 4 Arkivmenyn Innehåll

BuildingPortalSuite. Beskrivning BuildingPortalSuite - Beskrivning

NetBeans 7. Avsikt. Projektfönster

Kom igång med TIS-Office

1 Den normala kartbilden

Programmering i C++ Kompilering från kommandoraden

Xerox Device Agent, XDA-Lite. Installationsguide

Introduktion till programmering. Programspråk och paradigmer

Administrationsmanual ImageBank 2

Så här installerar du Friluftskartan pro på din dator

Alternativet är iwindows registret som ni hittar under regedit och Windows XP 32 bit.

Innehåll i detta dokument

Infoga dokument i Connect med hjälp av FlashPaper

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

GEM-TEC Manual. Box 7035 S Solna Tel: Fax:

Visma Proceedo. Att logga in - Manual. Version 1.3 /

Objektorientering: Lagring och livstid

F9 del B Organisatoriskt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson Datavetenskap, LTH

UTVECKLINGSVERKTYG. Praktiska tips för PUM-projekten

Eclipse. Kort genomgång

Objektorienterad programmering i Java I

Slutrapport för JMDB.COM. Johan Wibjer

Installationsmanual ImageBank 2

Scala Doc SQL Installation

Quick Start Guide Snabbguide

NetBeans 5.5. Avsikt. Projektfönster

Webbprogrammering. Sahand Sadjadee

Uppstart Agda PS Hosting

TDDD78 Objektorientering: Lagring och livstid

Analysverktyg för Code smells och Test coverage. Djupstudie för Coaching av programvaruteam 2015

Chaos VPN - Installera Cisco AnyConnect Windows 8

Gränssnitt för FakeGranska. Lars Mattsson

VERSION 3.2 KLIENTMANUAL NETALERT CS

Spelprogrammering med XNA och MonoGame

INSTALLATION AV VITEC MÄKLARSYSTEM

Instruktion till. PigWin PocketPigs. Del 1 - Installation

TUTORIAL: SAMLING & KONSOLL

Versionshantering. Jan Erik Moström

Detta är en snabbguide hur man installerar Hitman Pro version 2.6. Instruktionen är skapad och hämtad från

Installationsmanual ImageBank 2

Scrum + XP samt konsekvensanalys

AUTOMATISKA PROGRAMUPPDATERINGAR

INSTALLATIONSGUIDE PC

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Code-Lite tutorial ( /RoJ)

Starta Egenrapportering automatiskt i Windows

Versionshantering med Git

Workshop IBA internet based assessment

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

1

Uppstart. Agda Drift

B. INSTALLATIONEN AV PC-PLANNER MJUKVARAN OCH DRIVRUTINER

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

LabelLogic. Bruksanvisning. Innehåll. Label Choices. Data Library. Print Centre. Design Centre

Grattis till ett bra köp!

1.Lär känna MS SQL Observera. Tips. Förberedelse

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Fråga: Hur ställer jag in min router utan att använda CD skivan? Svar: Du kan ställa in din router manuellt genom att följa stegen nedan.

TeamViewer Installation och användning

GitHub for Windows och GitShell

Antares Användning och installation

USB styrt DMX gränssnitt

Transkript:

Kodanalys med hjälp utav SemmleCode Henrik Andersson, D05 (dt05ha1@student.lth.se) Erik Mossberg, D01 (d01em@student.lth.se) 18 Februari 2008

Sammanfattning Avsikten med denna rapport är att läsaren ska få en bra insikt i hur man kan använda verktyg för att analysera kod. Rapporten kommer att ge era exempel på verktyg som gör detta, men kommer att fokusera på SemmleCode som är ett plugin till Eclipse. 2

Innehåll 1 Inledning 4 2 Frågeställningar 4 3 Statisk analys 4 3.1 Verktyg för statisk analys...................... 5 3.2 Användandet av statisk analys................... 5 4 SemmleCode 6 4.1 Inledning............................... 6 4.2 Funktioner och användningsområde................. 6 4.3 Användarvänlighet.......................... 6 4.3.1 Installation.......................... 6 4.4 Querys................................. 7 4.4.1 Exempel............................ 7 5 Diskusion 11 5.1 För- resp nackdelar.......................... 11 5.2 Slutsats................................ 12 6 Referenser 13 A installationsanvisning 14

1 Inledning Att analysera koden i ett projekt kan vara svårt och jobbigt. Svårt då det inte är lätt att få fram något bra resultat ur koden, men det är heller inte lätt att alltid kunna dra någon slutsats av resultatet man kan ha fått fram. Jobbigt är det eftersom ett projekt kan innehålla många tusen rader kod som kan vara svår att analysera utan något hjälpverktyg. Det nns en mängd verktyg som hjälper till med detta. Denna djupstudie i kursen "Coaching av programvaruteam"kommer att analysera verktyget SemmleCode [1]. SemmleCode är ett plugin till Eclipse som i sin tur är en öppen utvecklingsmiljö. I detta fall används Eclipse främst till att utveckla javakod. Målet med denna rapport är att läsaren ska få en förståelse för hur ett kodanalysverktyg kan hjälpa till att få en klar bild över sin kod och kodkvalité, samt lära ut hur man använder verktyget. Som resultat av rapporten skulle vi inte rekomendera att man använder SemmleCode inom sitt team. Det är ett bra plugin till Eclipse om man vill få en bra bild över hur projektet utvecklas, men det kan nog vara till mer hjälp om en utanstående skulle använda det och sedan komma med idéer till teamet. Coacherna kan kanske använda det för att hitta eventuella designfel eller kunna ge en prognos på hur programmet utvecklas. 2 Frågeställningar Denna rapport kommer att ta upp olika aspekter av programmet för att ge en bra bild av hur det används och vad det kan användas till. Dom frågor som kommer att behandlas i första hand är följande. Hur kan man använda verktyget i ett XP-team för att ge medlemmarna en enkel bild över hur systemet ser ut? Är verktyget lättanvändligt? Fungerar verktyget tillfredsställande? Vilka fördelar respektive nackdelar nns det med verktyget? 3 Statisk analys Statisk kodanalys är analys av kod som utförs utan att själva koden körs. Statisk analys kan utföras av människor men är svårt och tar tid. Analysen kan också utföras med hjälp av automatiska verktyg. [2] Dessa verktyg söker då igenom koden efter fördenerade mönster, som följandet av kodkonventioner eller catchblock som fångar exceptions utan att behandla dom. Verktygen kan också utföra beräkningar, som att räkna antalet anropspunkter till en viss funktion. Motsatsen till statisk kodanalys kallas naturligt nog dynamisk kodanalys, analys som utförs då koden körs. 4

3.1 Verktyg för statisk analys Det nns era verktyg för statisk kodanalys. JDepend JQuery PMD (Eclipse) Jackpot (Netbeans) Findbugs and fb-crasher Lint-serien av verktyg HTML Tidy W3-validator De esta verktyg är inriktade på endast ett språk, men vissa har även inspirerat till en hel familj av verktyg. T.ex. Lint (för c)[3] som följdes av JsLint, pylint och JLint (JavaScript, python och Java) 1. Detta kan jämföras med SUnit, ett enhetstestningsramverk för Smalltalk, som sedan har följts av bl.a. phpunit och JUnit. En del av dessa verktyg har undersökts av tidigare djupstudier, t.ex. [4]. En del av verktygen är externa verktyg, och en del är integrerade i utvecklingsmiljön (IDE) som Eclipse. Fördelar med IDE-integration är att er personer kan använda verktyget. Existerande undersökningar [5] har visat att det nns en brist på kännedomen om statiska analysverktyg. En annan fördel med integration är att verktyget får bättre möjligheter att korrigera felen automatiskt, vilket exemplieras av 'Quick Fix' i Eclipse. 3.2 Användandet av statisk analys Statisk analys kan bl.a. ge följande resultat [6]: Kvalitetsanalys Complexitetsanalys Buggsökning, t.ex. buer-overows och andra säkerhetsproblem Visualisera arkitekturen med dependency analysis Hitta anti-patterns Hitta oanropad kod Hitta duplicerad kod 1 Lint (för c) letar efter vanliga problem, bland annat om variabler används innan de får något värde. Originalversionen följdes av JsLint, pylint och JLint (JavaScript, python och Java). 5

Brott mot kodningsstandarden Eclipse utför med defaultinställningar 'Continuous builds'. Som ett steg i kompileringen utförs en grundläggande form av statisk analys, för att hitta uppenbara syntaxfel och typfel. Utöver detta kan Eclipse ge varningar för mer programmerings-logiska fel, som boolska tester som alltid ger samma resultat. På dessa sätt kan statisk kodanalys ha en del av fördelarna hos 'Pair Programming'. En programmerare kan koncentrera sig på att skriva kod som är beskrivande och uttrycksfull medans ide:t (eller en parprogrammerare) hanterar all formell språksyntax och letar efter dåliga kodvanor. 4 SemmleCode 4.1 Inledning SemmleCode är som tidigare nämnt ett plugin till Eclipse. Det används för att visa information från kod genom olika sorters diagram och grafer. Genom att skriva kod i SemmleCode så anger man vad för information man vill analysera, hur man vill analysera den och hur man vill representera resultatet. 4.2 Funktioner och användningsområde SemmleCode har väldigt många funktioner. I och med att man i kod skriver vad SemmleCode ska göra så nns det väldigt mycket som kan göras. På hemsidan [1] nns det många exempel som man kan utgå ifrån om man vill. På så sätt nns det många sätt att använda sitt resultat. Om man bara vill ha en liten översikt så kan man anpassa det så att man bara visar det man vill. Om man däremot vill ha mer information så är det inte svårt att lägga till det. Det kan användas bl.a. till att ge teamet en bra översikt över systemet, som en koll från kunden om eektivitet eller för att följa utvecklingen av programmet för båda parterna. 4.3 Användarvänlighet SemmleCode är ett knepigt program att bara installera och använda. Man måste lägga lite tid på att lära sig hur man ska använda det. När man väl har lärt dig det så är det inte något problem att använda det, även om det kan ta lite tid att få något resultat. Problemet är att det inte går att köra era queries samtidigt på ett smidigt sätt, vilket gör att man får köra dom en och en och det tar mycket tid. I och med att man skriver s.k. queries ( vilka tas upp senare ) själv så nns det ett stort användningsområde och det är lätt att få fram ett enkelt resultat. Det nns standardqueries som man får med när man installerar SemmleCode, men om man vill anpassa det efter sitt egna behov måste man lära sig att skriva queries vilket också tar lite tid. 4.3.1 Installation Installationsanvisning nns i appendix A. 6

4.4 Querys All analys av koden sker genom en variant av sql som heter QL. QL är skapat att vara likt Java [7] och SQL [8]. Enkla querys ser ytligt väldigt lika SQLs select-satser, men har även stöd för advancerade querys med objekt-orientering. Att skriva querys kan vara svårt i början innan man vet hur man ska skriva. På Semmles hemsida [1] nns det många exempel på querys som man kan använda för att få fram en bra representation. Ett tips är att man kan utgå ifrån deras exempel och sedan utveckla egna varianter. Det medföljer även ett bibliotek med vanliga querys som man kan utgå ifrån. Innan man kan skriva querys förpopuleras en relationsdatabas med information om koden. Databasen innehåller bland annat alla denitioner och anrop. För ett litet projekt räckte det med att använda den inbyggda minnesbaserade databasen. Man kan välja vilka ler man vill ha med när man ska populera sin databas. Det är dock inte att föredra då man måste populera om den varje gång man ska exekvera en ny query. I det långa loppen är det smidigare att populera databasen med alla ler. Man kan sedan begränsa sig till den relevanta koden för varje query. 4.4.1 Exempel Querys som använts i denna rapport är följande: Rader kod per paket from Class c, int loc where loc = sum(compilationunit cu cu.getpackage() = c.getpackage() cu.getnumberoflinesofcode()) and c.fromsource() select c.getpackage(), loc order by loc desc Ger bild enl. gur 1 Rader kod per klass from RefType t, int i where i = count(method m m.getdeclaringtype() = t) and t.fromsource() select t, i order by i desc Ger bild enl. gur 2. Metoder med mer än 50 rader kod 7

Figur 1: Rader kod per paket. Den röda staplen mäter 320 Figur 2: Metoder per klass. Den röda stapeln mäter 29 from Method m where m.fromsource() and m.getlocation().getnumberoflinesofcode() > 50 select m.getlocation().getnumberoflinesofcode(), m Ger bild enl. gur 3. Arkitektur from Class c where c.fromsource() select c.getpackage(), c 8

Figur 3: Metoder med mer än 50 rader kod. Den röda stapeln mäter 64 rader Ger bild enl. gur 4. Figur 4: Enkel arkitektur över ett projekt. Dom gula fyrkanterna är paket och dom gröna cirklarna är klasser. Klasserna är förbundna med sitt paket genom en grön linje Stapeldiagrammen går att ändra till cirkeldiagram istället om det är mer önskvärt. Det är lätt att i sin query välja bara vissa klasser/paket/metoder m.m. beroende på vilka villkor man anger. Som ovan i gur 3 där endast alla metoder med mer än 50 rader kod i ett projekt väljs. I gur 4 visas en enkel bild över vilka paket som nns, samt vilka klasser som nns i varje paket. Det går att manuellt ytta på klasserna så att man lättare kan se paketen och klasserna. Om man istället vill veta hur t.ex. metoderna ligger kan man skriva en query som gör detta. Dock kan det bli väldigt rörigt även på ett sådant här litet projekt då det ofta nns många metoder som sak visas. 9

Dessa bilder kan som ovan nämnt användas till många olika saker, men framför allt så ger dom en enkel bild över hur systemet ser ut. I gur 1 kan man se vilka klasser som är stora och vilka som är små. Om man gör detta under varje iteration kommer man att kunna se vilka klasser det är som växer mest. I gur 3 ser man vilka metoder som börja att bli stora. Om man följer storleken på en metod under iterationerna kan man se om det är någon som alltid ligger över den gränsen man har satt. Det ger en bra visuell bild över hur stor metoden är vilket kan ge en liten push på att man ska refaktorisera den metoden till några mindre. Om man vill se hur projektet utvecklar sig kan man lägga två bilder bredvid varandra och sedan se hur dom förhåller sig till varandra. I gur 5 kan man se hur strukturen har ändrats från iteration 3 till iteration 4. Och i gur 6 kan man se hur antalet rader kod per paket har ändrats under samma tid. Man ser även att ett paket har tagits bort från iteration 3 till iteration4. Figur 5: Bilden ovan är från iteration 4 och bilden under från iteration 3. Dom gula fyrkanterna är paket och dom gröna cirklarna är klasser. Klasserna är förbundna med sitt paket genom en grön linje 10

Figur 6: Bilden ovan är från iteration 4. Den röda stapeln visar 340 rader kod. Bilden under från iteration 3. Där visar den röda stapeln 320 rader kod 5 Diskusion 5.1 För- resp nackdelar Det nns många för och nackdelar med SemmleCode. Det är väldigt exibelt och kan användas till mycket mer än vad exemplen ovan visar. Det är relativt lätt att använda när man väl har kommit igång med det. Att väl komma igång med SemmleCode är det som kan vara lite klurigt. Först ska man installera det vilket visas i appendix A och det är inte svårt, Det som är svårt är fortsättningen. Först ska man ordna med en databas och sen ska man skriva queries. Att skriva queries kan vara svårt i början innan man vet hur man ska skriva. Det nns en del exempel på hemsidan man kan utgå ifrån, men det är ett helt nytt språk att lära sig. Det är skapat att vara likt Java [7] och SQL [8]. När man väl har kommit in i hur man sak göra är det smidigt att skapa queries. En stor fördel är att SemmleCode ger en väldigt bra bild över vad man vill 11

ha reda på. Det är lättare att få en översikt. Bäst hade det nog varit om man kombinerade det med andra verktyg för att få en mer komplett bild som inte bara ger en översikt utan även går djupare in på detaljerna. T.ex. kan man kombinera det med tidigare nämnda Findbugs. Då man se hur koden ser ut med hjälp utav koder samt att man kan se var koden kan ha buggar. Då kan man kanske se om det kan nnas något samband mella stora metoder och många buggar m.m. och på så sätt prioritera en refaktorisering eller en genomgång av koden där den inte ser bra ut. En stor nackdel är den tid det tar att analysera koden med era olika queries, eller om man ska analysera era projekt samtidigt. Det går inte, vad vi har hittat, att göra detta på ett smidigt sätt, vilket gör att det tar lång tid om man vill göra någon omfattande analys. 5.2 Slutsats Vi har kommit fram till att SemmleCode är ett verktyg som inte passar som sitter och kodar. Det är bättre om en utomstående eller kanske en coach använder det för att se hur projektet utveckals. Det är svårt att få någon bra bild över ett projekt om man bara skulle använda det en gång, utan man bör nog använda det era gånger under projektets gång och sedan jämföra resultaten. 12

6 Referenser Referenser [1] Semmle Semmle Query Technologies 24 Oktober 2007 http://semmle.com 10 Februari 2008 [2] Amit Chaturvedi Java & Static Analysis -Finding bugs early with automated code reviews Dr Drobb s Java and Static Analysis 1 Juli 2005 http://www.ddj.com/showarticle.jhtml?articleid=184406143 10 Februari 2008 [3] Lint manual Man Page lint.1 http://developers.sun.com/sunstudio/documentation/ss10_docs/mr/man1 /lint.1.html 17 Februari 2008 [4] Gustaf Lundh, Viktor Holtenäs Djupstudie, Coaching av programvaruteam - Verktyg för kodkvalité 20 Februari 2006 http://www.cs.lth.se/eda270/djupstudier/articles/2005-2006/eda270-2006-nygardlundh.pdf 10 Februari 2008 [5] Greg Sporar Talking About Static Analysis 08 November 2008 Greg Sporar s Blogg - Talking About Static Analysis http://weblogs.java.net/blog/gsporar/archive/2006/11/talking_about_s.html 10 Februari 2008 [6] Paul Duvall Automation for the people: Improving code with Eclipse plugins 11 Januari 2007 Automation for the people: Improving code with Eclipse plugins http://www-128.ibm.com/developerworks/java/library/j-ap01117/index.html 10 Februari 2008 [7] Java Sun Java Technology 7 Februari 2008 http://java.sun.com 10 Februari 2008 [8] SQL SQL Tutorial http://www.w3schools.com/sql/default.asp 10 Februari 2008 13

A *Appendix A installationsanvisning SemmleCode är ett plugin till Eclips och installeras lättast genom att man klickar på Help-Software updates-find and install... enl gur 7 Figur 7: Menyväg från Eclipsevy Där fyller man i den andra rutan som säger att man ska leta efter nya plugins och installera det enl gur 8 Figur 8: Välj att installera nyyy plugin 14

Efter det väljer man New Remote Site... Då kommer en popup fram. I den fyller man in vad man vill kalla sin plugin lokalt samt varifrån man ska ladda ner programmet ifrån. På raden Name kan man skriva Semmle och på raden URL: ska man ange http://semmle.com/update som den adress vilken man vill ladda ner SemmleCode från. gur 9. Tryck sedan OK. Figur 9: URL och det namn du vill kalla ditt plugin Nu ska Semmle nnas i listan i fönstret som nns i bakgrunden. Kryssa i rutan som tillhör Semmle och tryck sedan på Finish enl gur 10 Figur 10: Kryssa i rutan med det namn som du valde i steget innan 15

Då kommer det upp ett fönster i vilket man ska kryssa i Semmle och sedan trycka på Next enl gur 11 Figur 11: Klicka på Next Licensavtalet kommer då upp. Det är bra att läsas igenom och godkänna om man vill fortsätta. För att godkänna, kryssa I accept the terms in the license agreement. enl gur 12 Figur 12: Licensavtalet 16

Efter detta kommer en ruta upp i vilken man ska ange var man vill installera pluginen. Tryck Finish om det verkar bra, annars välj Change Location och välj en ny plats enl gur 13 Figur 13: Plats för installation1 Välj sedan Install i fönstret som kommer upp sedan enl gur 14 Figur 14: Välj Install 17

Efter att det är installerat så ska man starta om Eclipse. Det kommer upp en ruta som gör det automatiskt om man väljer Yes enl gur 15 Annars får man stänga ner Eclipse och starta om det manuelt Figur 15: Välj Yes för automatisk omstart 18