Kodkomplexitet i agil utveckling. Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010

Storlek: px
Starta visningen från sidan:

Download "Kodkomplexitet i agil utveckling. Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010"

Transkript

1 Kodkomplexitet i agil utveckling Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010

2 Sammanfattning Denna studie avser att undersöka hur uppmätning av kodkomplexitet kan användas för att förbättra utvecklingsprocessen i agila metoder. Detta genom att studera hur kodkomplexiteten förändras med tiden i ett agilt (XP) projekt. Olika mått på komplexitet tas upp samt hur dessa kan kopplas till de upplevda problem som finns i projektet. En kontinuerlig mätning av komplexitetsmått kan användas för att undvika och minska oroande trender i utvecklingen. Nyckelord Agile, Cyclomatic Complexity, Kodkomplexitet, Metrics Innehåll 1 Introduktion 3 2 Kodkomplexitet McCabes Cyclomatic Complexity CK Metrics Suite Weighted Methods per Class Depth of Inheritance Tree Number of Children Coupling Between Object Lack of Cohesion of Methods Method Lines of Code Number of Methods Nested Block Depth Verktyg för datainsamling Metrics för Eclipse State of Flow Val av verktyg Kodkomplexitet i agila metoder Simple Design Refactoring Agile Design Test Driven Development Observation av kodkomplexitet i projektet Beskrivning av projektet Datainsamling Utveckling med tiden Åtgärder Diskussion Andra team Rekommendation för coacher

3 1 Introduktion Denna artikel tar upp olika mått på kodkomplexitet och hur dessa kan användas i och påverkas av en agil process. Grunden till området kring komplexitet i mjukvaruutveckling lades av Thomas McCabe som 1976 skrev A Complexity Measure [6] som främst behandlar ett mått på kodkomplexitet kallad Cyclomatic Complexity. Detta mått är fortfarande ett av de vanligaste för att beskriva komplexiteten i kod även om det med tiden framkommit även andra mått. McCabes cyklomatiska komplexitet och andra metoder beskrivs mer utförligt i avsnitt 2. Artikeln kommer även att studera hur kodkomplexiteten i ett agilt projekt (härefter kallat projektet) för ett team av åtta utvecklare utvecklas med tiden 1. I den agila metoden finns moment avsedda för att hålla koden överskådlig och överlag enkel, något som skulle kunna bidra till en mindre komplex kodbas. Se avsnitt 5 för en detaljerad beskrivning. 2 Kodkomplexitet När McCabe introducerade sitt mått på kodkomplexitet 1976 fanns få metoder för att mäta komplexitet i skriven kod, det vill säga mått på hur lätt det är att förstå och testa koden. Dessa mått var även ytterst bristfälliga. Ett exempel som tas upp beskriver hur det fysiska antalet rader kod begränsades för att metoder inte skulle bli alltför komplexa. IBM-50 lines var en sådan metod, som begränsade till 50 rader kod. I ett sådant fall skulle det ändå kunna finnas 25 efterföljande If-Then satser, vilket kan ge upp till 33,5 miljoner möjliga flöden genom koden - vilket gör programmet ytterst svårt att testa fullständigt [6]. Detta var något som McCabe avsåg att motverka genom introduktionen av måttet Cyclomatic Complexity (CC). Chidamber och Kemerer beskrev 1994 i [3] en ny uppsättning metrics med fokus på objektorienterad utveckling - populärt benämnt the CK metrics suite. I moderna projekt, som ofta är just objektorienterade, är dessa nya mått bra för att undvika klasser och metoder som tyngs av onödig komplexitet. Måtten som ingår i sviten är Weighted Methods per Class (WMC), Depth of Inheritance Tree (DIT), Number of Children (NOC), Coupling between Objects (CBO), Lack of Cohesion of Methods (LCOM) och Response for a Class (RFC). Verktyget för uppmätning av kodkomplexitet saknade stöd för RFC, varför detta mått saknas i 5.2. Övriga mått beskrivs nedan. 2.1 McCabes Cyclomatic Complexity McCabes metod baseras på riktade grafer och beror på inblandade noder, bågar och kopplade komponenter [6]. McCabes CC beräknas genom att summera antalet bågar (E), subtrahera bort antalet noder (N) och addera dubbla antalet kopplade komponenter (P). Bågar i detta sammanhang avser flödesväg från ett tillstånd till ett annat. Noderna betecknar dessa tillstånd. Ett tillstånd kan ses som ett block i koden (visas som cirklar i grafer) eller ett boolskt villkor (visas som diamantformer). Till exempel har en If-Then-Else-sats två skilda block. Kopplade komponenter avser ett begrepp inom grafteori som beskriver 1 Projektet är ett nedskalat projekt enligt extreme Programming (XP) metodik. 3

4 hur många delgrafer hela grafen består av, t.ex. så kan ett huvudprogram anropa (sekvensiellt) två subrutiner, se figur 2. I detta fall är antalet kopplade komponenter tre. Formeln för beräkning är som följer: CC = E N + 2P. McCabes CC är ett behjälpligt mått vid testning av programvara, då det ger ett mått på hur många flödesvägar det finns genom koden. Något som kan ge en antydan om hur svårt det kan vara att testa en metod, klass eller ett program. Nedan följer några exempel med grafer och motsvarande cyklomatiska komplexitet. (a) If-sats, CC = = 2 (b) While-loop, CC = = 2 Figur 1: Två exempel på typiska logiska satser och motsvarande CC Figur 2: Ett exempel på en huvudrutin och två subrutiner, CC = CC(M) + CC(A) + CC(B) = CK Metrics Suite Weighted Methods per Class Weighted Methods per Class är en objektorienterad metod för beräkning av komplexiteten hos en klass [3]. WMC är summan av komplexiteter i en klass, vilket innebär att en klass innehållande tre raka metoder (inga villkorssatser) får WMC = 3. Begreppet komplexitet är avsiktligt vagt valt för att tillåta en generell applicering av metoden. Som exempel på komplexitetsmått kan t.ex. tidigare nämnda CC användas. 4

5 Ett högt mått på WMC kan antingen betyda att klassen består av få komplexa metoder eller ett stort antal enkla metoder, eller givetvis en kombination av de båda. Många enkla metoder behöver inte betyda att komplexiteten är låg, det kan vara svårt att följa hur metoderna interagerar, vilket kan tyda på dålig arkitektur och försvåra testning. WMC kan vara bra att använda för att visa vilka klasser som kan kräva extra mycket tid vid testning och vidareutveckling av funktionalitet. På detta sätt kan potentiella orosmoment upptäckas i ett tidigare skede. Definitionen av WMC följer nedan. W MC = Depth of Inheritance Tree Depth of Inheritance Tree är ett mått på hur långt ner i klass-hierarkin en klass befinner sig [3]. Ju fler arv det finns ovanför klassen i hierarkin, desto fler metoder finns förmodligen ärvda, vilket gör det svårare att förutsäga beteenden hos klassen. Klasser långt ner i klassträdet har större risk för återanvändna metoder och det finns även fler metoder och klasser inblandade, något som kan resultera i komplexa samband Number of Children Number of Children är ett mått relaterat till att ju fler barn en klass har, desto större blir återanvändningen av metoder på grund av arvet [3]. Ett stort antal barn kan även tyda på felaktig abstraktion av föräldern. Siffran för NOC ger också en fingervisning på vilken inverkan klassen har på den övergripande designen Coupling Between Object Coupling Between Object anger antalet klasser som den aktuella klassen är kopplade till [3]. En hög CBO kan göra klassen svårare att återanvända i ett annat område, samt göra testningen svårare [7]. I senare avsnitt då detta mäts görs skillnad på Efferent CBO och Afferent CBO, vilket omnämns i [7]. Efferent CBO anger antalet klasser inuti ett paket som beror på klasser utanför paketet. Afferent CBO anger antalet klasser utanför ett paket som beror på klasser inuti paketet Lack of Cohesion of Methods Lack of Cohesion of Methods ger ett mått på sammanhållning av en klass [3]. Sammanhållning avser i det här fallet hur väl klassen faller in under Single responsiblity principle, det vill säga att en klass bör endast ha ett skäl för förändring [5]. Det kan hända att en klass i själva verket är en abstraktion av flera saker, i sådana fall är sammanhållningen förmodligen liten, och klassen bör delas upp. LCOM beräknas i detta fall enligt den så kallade Henderson-Sellersmetoden 2. Ett lågt värde tyder på en väl sammanhållen klass och ett värde nära 2 En normerad variant på den LCOM-metod som ursprungligen formulerades som en del av CK-sviten n i=1 c i 5

6 ett på att en klass borde delas upp i ett antal andra klasser eller subklasser [7] Method Lines of Code Method Lines of Code anger som namnet säger antalet rader kod (ej kommentarer och blanka rader) för metoder [3] Number of Methods Number of Methods är som namnet beskriver en siffra på antalet metoder [3]. Ett stort antal metoder kan göra koden mer lättläslig, men samtidigt försämra prestandan på grund av många metodanrop [7] Nested Block Depth Nested Block Depth är mått som ger djupet för kodblock, så som if-satser och loopar [3]. Ett stort djup kan göra koden svårläslig och vara tecken på alltför komplexa lösningar [7]. 3 Verktyg för datainsamling Då kursprojektet 3 använde Eclipse 4 som utvecklingsmiljö, har fokus legat på att använda verktyg anpassade för detta gränssnitt. I studien ansågs verktyget Metrics 5 (version 1.3.6) ge bäst information till studien kring kodkomplexitet. Verktyget ger även data som inte är direkt relaterat till kodkomplexitet, som dock kan komma till nytta vid annan användning. De utvalda måtten till studien finns beskrivna i avsnitt 2 och gavs alla av nämnda verktyg. 3.1 Metrics för Eclipse Metrics tar fram olika mått på den insamlade datan där detta är möjligt. Dessa värden är totalvärde, medelvärde, standardavvikelse och maximalt värde. Datan är även tillgänglig på en lägre nivå - för enskilda paket, klasser och metoder. Programmet ger därmed en bra överblick för såväl hela systemet som för de mindre komponenterna. Metrics kommer även med en graf som beskriver beroendet mellan paket. Detta kan användas för att upptäcka cirkulära beroenden bland paket. Funktionen känns inte helt färdig och lämnar en del att önska, så som fler valmöjligheter och vyer inuti paket och klasser. Funktionen kan i sammanhanget mest ses som en kul grej och tillförde inte mycket till studien. En sak som kunde ha varit bättre med verktyget är möjligheterna för exportering. Det som stöds är export i XML-format, vilket kräver att formatering (eller transformering) i efterhand. Formatet är även sådant att inte alla medelvärden är givna, något som även då måste göras i efterhand. Transformering av resultatet kan göras med så kallade XSL-scheman, vilket dessvärre ligger utanför författarnas kunnande. 3 Projektdelen i kursen Programvaruutveckling i Grupp IDE för Java-utveckling med stora tilläggsmöjligheter Eclipse-plugin för metricsinsamling 6

7 3.2 State of Flow Ett annat verktyg som testades var State of Flow 6 (SOF) som även det gav värden på McCabes CC och andra komplexitetsmått för klasser. Dessvärre var datan från detta verktyg mindre överskådlig och därför svårare att tolka och använda. Inga medelvärden för paket och klasser fanns beräknade, vilket gjorde verktyget mest användbart på enskilda metoder. Noterbart är dock att värdena angivna av detta verktyg inte stämde överrens med det ovan nämnda Metrics. Detta tyder på att olike implementationer av algoritmerna använts. Till exempel fås komplexiteten för ett metodanrop med en switch-case-sats till elva för SOF och tolv för Metrics. 3.3 Val av verktyg I avsnitt 5 används värden uppmätta med hjälp av Metrics om inget annat specificerats, detta då verktyget var mer lättanvänt och ansågs strängare än SOF. Beslutet togs även tidigt i studien, varför ingen data samlats in med det senare verktyget. 4 Kodkomplexitet i agila metoder 4.1 Simple Design Agil utveckling bygger på flexibilitet och möjlighet att enkelt kunna hantera förändringar på ett smidigt sätt. För att detta skall vara möjligt måste använda Simple Design, implementera den absolut enklaste saken som kan fungera [1]. Enkel kod är enklare att förstå, förklara, testa, underhålla och förändra vilket i sin tur borde medföra lägre kodkomplexitet. 4.2 Refactoring Ett viktigt inslag i agila metoder är kontinuerlig refaktorisering, så väl efter varje enhetsimplementation som efter större integreringar. Refaktoriseringar utförs inkrementellt för att inte införa stora förändringar till den gemensamma kodbasen. En refaktorisering innebär även att koden blir mer lättläslig och att en bättre lösning på problemet införs samtidigt som funktionaliteten består [1]. Ofta har IDE:t som används funktioner som underlättar refaktorisering, något som också medför mindre risk att den mänskliga faktorn stör operationen. Genom att utföra refaktorisering regelbundet, vilket hör till XP-metodiken, bör minska kodkomplexiteten då svårförståliga metoder delas upp i mindre och mer välskrivna metoder, där syftet av var och en är klart och dess ansvarsområde mindre. 4.3 Agile Design Med användning av agila metoder utvecklas helhetsbilden av systemet allt eftersom [5]. Detta då utvecklingen sker med vad som är aktuellt i åtanke. Planering för framtida funktionalitet hör inte till denna metodik, då det tar tid från det arbete som skall utföras. Den aktuella strukturen av systemet formas Eclipse-plugin för metricsinsamling 7

8 av de många små inkrement som utförs av respektive utvecklare genom hela utvecklingsprocessen. Det finns många faktorer som påverkar huruvida ett system håller en nivå där vidareutveckling är enkelt. Martin beskriver symptom för dålig design - Bad Smells - gällande agile design. Dessa följer nedan. Rigidity - Systemet är svårändrat, då en ändring framtvingar många ändringar i andra delar av systemet. Fragility - En ändring gör att systemet fallerar i delar som inte tycks ha någon anknytning till ändringen. Immobility - Systemet är svårt att dela upp i mindre komponenter vilket gör att det blir svårt att återanvända lösningar i andra projekt. Viscosity - Det är svårare att göra saker rätt än att göra dom fel. Needless Complexity - Systemdesignens grundläggande uppbyggnad innehåller saker som inte är till någon nytta. Needless Repetition - Designen innehåller redundant kod som skulle kunna förenas genom abstraktion. Opacity - Systemet är svårt att förstå och läsa och uttrycker inte intentionerna. Martin skriver att där designen hos ett traditionellt utvecklingsteam är mer eller mindre statisk och ytterst svårförändrad, så är systemdesignen hos ett agilt team i ständig rörelse och i varje iteration är designen anpassad för den funktionalitet som för tillfället har stöd [5]. De ovanstående begreppen relaterar till kodkomplexitet, då sådan kod ofta är svårförstålig och medför ovilja att genomföra stora ändringar i koden då beteendet kan vara svårt att förutsäga. Detta kan vara ett problem i det oerfarna utvecklarteam som denna studie följt. 4.4 Test Driven Development Test Driven Development (TDD) är en viktig hörnsten för agil utveckling som tyvärr missuppfattas allt för ofta. TDD har många fördelar vilket gör det lätt att missa det primära syftet med TDD vilket är design. Två vanliga misstag är att tro att TDD är samma sak som att använda automatiserade tester och att TDD betyder att alla test skall skrivas först [4]. Automatiserade tester hjälper utvecklingen mycket men förespråkarna för TDD har alltid varit tydliga med att poängtera att TDD handlar om design, inte testning [2]. Om man skriver alla tester först och sedan implementerar för att få igenom alla testerna så missar man det ursprungliga syftet med TDD, vilket är att utveckla allting i väldigt små och snabba test-kod iterationer. Att koda i små iterationer hjälper till att skriva enkel kod då man skriver så lite kod som möjligt för att få igenom ett litet test vilket kan ha en inverkan på kodkomplexitet. Ännu en viktig fördel med TDD är att utvecklarna blir tvingade att tänka igenom designen ordentligt för att skriva testet innan implementationen påbörjas, vilket även det kan ha en inverkan på kodkomplexitet. 8

9 5 Observation av kodkomplexitet i projektet 5.1 Beskrivning av projektet I projektet, som är av XP-typ, får åtta utvecklare chansen att utveckla ett tidtagningssystem för terrängmotorcykelsporten enduro 7. Utvecklarna har under utbildningen ej läst någon liknande kurs, vilket gör att de till en början kan vara ovana vid arbetssättet. Teamet om åtta utvecklare leds av två coacher som läser en annan kurs (Coachning av Programvaruteam) och som under projektets lopp skall utöva coachnings- och ledarskapspraktiker från teoridelen i samma kurs. Projektet består av sex iterationer som i sin tur består av en långlaboration om åtta timmar, ett planeringsmöte på två timmar samt individuella så kallade spikes 8 om fyra timmar för varje utvecklare. En iteration pågår under en läsvecka med nämnda moment utspridda under denna tid. 5.2 Datainsamling I slutet av varje långlaboration har data samlats in med det Metrics plug-in nämnt i avsnitt 3. Datan har sammanställts och efter varje laboration har en kort reflektion gjorts för att observera om den insamlade datan återspeglar projektet. Frågan som skall besvaras är huruvida de insamlade måtten på komplexitetet kan kopplas till de problem som upplevs i projektet. LOC Totalt Iteration Iteration Iteration Iteration Iteration Iteration Tabell 1: Totalt antal rader kod McCabes CC Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 2: Cyclomatic Complexity WMC Max Medel Totalt Iteration Iteration Iteration Iteration Iteration Iteration Tabell 3: Weighted Methods per Class DIT Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 4: Depth of Inheritance Tree En mer detaljerad beskrivning av sporten 8 Utforskande hemarbete med avsikt att ge utvecklaren fördjupad kunskap inom ett för projektet angeläget område 9

10 NOC Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 5: Number of Children ACBO Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 6: Afferent Coupling ECBO Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 7: Efferent Coupling LCOM Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 8: Lack of Cohesion of Methods MLC Max Medel Totalt Iteration Iteration Iteration Iteration Iteration Iteration Tabell 9: Method Lines of Code NBD Max Medel Iteration Iteration Iteration Iteration Iteration Iteration Tabell 10: Nested Block Depth 10

11 5.3 Utveckling med tiden Då projektet snabbt växer i storlek (se tabell 1) och att det för utvecklarna upplevs som viktigt att hinna med att implementera mycket funktionalitet, görs ibland lösningar som inte alltid är så väl genomtänkta och kan bryta mot delar av den tilltänkta XP-metodiken. Dock är utvecklarna, som tidigare nämnt, ovana vid arbetssättet och faller lätt in i gamla vanor. Det kan ses att kodkomplexiteten kontinuerligt ökar tills dess att en större refaktorisering genomförs, vilken förmodligen kunde ha minskats skulle utvecklarna lagt ner mer energi på de mindre refakoriseringar som är en del av TDD och simple design. Under iteration två var den cyklomatiska komplexiteten väldigt hög, se tabell 2. Detta berodde på att i synnerhet en metod för utskrift fick väldigt mycket ansvar, istället för att bryta ut delar av koden till mindre och mer lättförståliga metoder. Anledningen till detta var troligen att många utvecklare var inblandade i samma metod med flera olika stories, och i det här skedet av projektet var utvecklarna fortfarande rädda att ändra i kod skriven av andra. Med tiden blev dock detta bättre, och i princip alla kände sig slutligen bekväma med att ändra i befintlig kod skriven av andra. Som kan ses i tabell 1 ökade projektets storlek med nästan 100 % under iteration fyra, utan att för den delen ge stor ökning av olika komplexitetsmått. Detta kan bero på att en stor refaktoriseringsspike innan iteration tre fick utvecklarna att se fördelarna med att hålla komplexiteten låg under iterationerna. Därefter sågs inga stora toppar i komplexiteten, vilket tyder på att utvecklarna drog lärdom av tidigare problem. Det som kan ses i tabellerna är att måtten på CBO steg under iteration fyra, främst på grund av att ny funktionalitet krävde mycket interaktion mellan klasser i en arkitektur som från början inte var skapad med detta i åtanke. 5.4 Åtgärder Då data samlats in och granskats efter långlaborationernas slut har ibland höga värden för olika mått stått ut. Detta har sedan påpekats vid antingen planeringsmötet eller vid långlaborationens inledning, för att göra utvecklarna medvetna om dessa riskområden. Detta då utvecklarna själva inte använder verktyg för metricsinsamling under laborationerna. Utvecklarna har verkat ta till sig informationen och lagt ner lite extra arbete för att hålla nere komplexiteten i påpekade klasser. Dessvärre kan liknande problem dyka upp på andra ställen i projektet, vilket tyder på att utvecklarna inte fullt ut tänker på att skriva kod utan hög komplexitet. Detta kan även tyda på att utvecklarna inte helt följer XP-paradigmerna om simple design och refactoring. Påpekanden om riskområden gjordes främst i inledningen av projektet, då det inte funnits speciellt stora problem de senare iterationerna. Som tidigare nämnt verkar utvecklarna ha tagit till sig den information som givits, och arbetat för att hålla nere komplexiteten på egen hand i projektets senare skede. Detta har fungerat bra trots att utvecklarna inte använt verktyg för insamling av komplexitetsdata. Något som kan betyda att utvecklarna i ett projekt på denna skala inte är i behov av ett separat verktyg så länge de är medvetna om vilka problem som kan uppstå, skulle de förbise processen. En enkel lösning för att utvecklarna mer självständigt ska upptäcka och åtgärda komplexitetsproblem bör de själva ha möjlighet att samla in metrics. 11

12 Datainsamlingen och kontroll av komplexitet och eventuella åtgärder kan till exempel införas i kraven för när en story anses vara klar. På så sätt hålls komplexiteten låg och det åläggs coacherna mindre ansvar att ständigt upplysa om enskilda punkter. Då verktygen ger en bra överblick behöver detta inte nödvändigtvis ta lång tid. Eftersom problemen upptäcks tidigt blir åtgärderna även mindre i omfattning vilket ger momentet en plats i XP-metodikens korta iterationer. 6 Diskussion Att samla in data för kodkomplexitet går både snabbt och enkelt vilket gör att man kan kontinuerligt undersöka komplexiteten för ett projekt och använda det för att förhindra problem som uppstår på grund av för komplex kod. Under studien noterades det att komplexiteten fluktuerade mycket upp och ner istället för att hålla sig på en stabil nivå. Anledningen till den ostabila komplexiteten beror nog på utvecklarnas ovana vid agila metoder och bör kunna undvikas genom att följa processen bättre med tanke på simpel design och refaktorisering. Det var tydligt att topparna i kodkomplexitet skapade problem och utvecklingen kunde stanna av totalt i flera timmar då metoder med hög komplexitet var involverade. 6.1 Andra team Då projektet utfördes parallellt med tio andra team, kan vi i efterhand göra en jämförelse med hur komplexiteten ser ut i andra team, där coacherna inte undersökt kodkomplexitet under arbetets gång. Det visade sig att författarnas team (härefter kallat Teamet) låg långt fram i avseende på antal implementerade stories, vilket gjorde jämförelse svårt i vissa fall, då antalet rader kod skiljde sig kraftigt åt. Jämförelser gjordes med tre andra team. Två av dessa hade implementerat mellan 15 och 20 stories (hädanefter kallat Team A och Team B), medan det tredje teamet (Team C) låg på samma nivå som Teamet, det vill säga dryga 30 stories. I fallet med Team A och B avspeglades det totala antalet rader kod till antalet implementerade stories, och låg på ungefär samma nivå som Teamet vid iteration tre, både gällande antal rader och antalet implementerade stories. Därför har en jämförelse gjorts, för både tidpunkten för iteration tre samt för läget vid projektets fullbordan. I fallet med Team C som implementerat ungefär lika många stories som teamet kunde endast den senare jämförelsen göras, då de låg lika långt fram i utvecklingen som Teamet. Team A och B hade överlag väldigt jämnlik kodkomplexitet jämfört med Teamets slutprodukt, trots att Teamet hade nästan dubbelt så stor kodbas. Jämfört med Teamet under iteration tre låg Team A och B generellt lite sämre till i komplexitetsmåtten, även om det oftast inte rörde sig om några större skillnader. Team C hade som bekant ungefär lika många implementerade stories som Teamet, vilket gjorde deras lilla kodbas (drygt två tusen rader kod) förvånande. En faktor är deras förhållandevis lilla andel testfallskod, som utgjorde endast 25 % jämfört med Team A, B och Teamet som hade ungefär 50 % testfallskod. Ett högt maxvärde (15) för CC uppmärksammades i en klass som även stack ut i 12

13 andra områden, bland annat var även NBD hög. Som kanske kan inses var denna klass ytterst svårläst med många nästlade block och svårföljda flödesvägar. Övriga mått i projektet var ungefär i nivå med Teamets. Totalt sett ter det sig som att Teamet hade aningen lägre kodkomplexitet än de team som jämförelser gjorts med. Något som kan ses som logiskt. Huruvida det var coachernas inblandning och uppmätning av komplexitetsdata som medfört detta är dock svårt att säga. Detta då många faktorer spelar in, så som förkunskaper hos utvecklare, hur väl processen följs, individuell motivation och stämning i teamet. Skillnaderna var dock inte enorma, vilket kan tyda på att det inte får så stort inflytande i ett projekt på den här skalan. Problem kan även uppmärksammas av utvecklarna då de delar kodbasen och är beroende av koden är lättläst och lätt att förändra. Tillfälliga komplexitetshärdar bör därför upptäckas med tiden och åtgärdas. Dessa problem bör även kunna stävjas om viljan att följa XP-metodiken är hög. 6.2 Rekommendation för coacher Uppmätning av kodkomplexitet under kursprojektet kan ge en bra bild av orosmoment i projektet innan de ställer till allt för mycket problem. Det som krävs är då ett verktyg som kan ge sådan information på ett lättläst sätt och gärna med stöd för utvecklingsmiljön, till exempel som plugin till Eclipse. Nedan följer några enkla punkter att tänka på vid insamling av komplexitetsdata. Enkelt verktyg med bra exporteringsmöjligheter. Snabbkurs alternativt spike-arbete för utvecklarna kring kodkomplexitet i projektets inledning. Överblick av coacherna efter varje långlabb för att hitta eventuella riskzoner. Kontrollera höga värden, det kan vara testfall och annat som påverkar. Huruvida stor vikt bör läggas på detta område kan dock diskuteras. Projekts omfattning är sådan att utvecklarna själva snabbt bör upptäcka problem som hindrar fortsatt utveckling allt eftersom stories tillkommer. Kodkomplexitet kan vara bra för coacher att mäta vid sidan om, för att se till att kvaliteten på projektet hålls uppe. Så länge utvecklarna använder sig av kunskaper som lärts ut i tidigare kurser och i teoridelen av PVG-kursen bör inte ett behov finnas av ett sådant verktyg. Ännu ett moment i kursen kan leda till att utvecklare tyngs ytterligare i ett projekt som redan introducerar många nya begrepp och arbetssätt. Det kan också finnas en risk att ett för stort fokus läggs vid denna uppgift och att utvecklarna kommer ifrån kursens egentliga mål. Slarv eller bristande motivation kring de delmoment som XP-metodiken medför kan ge upphov till de dåliga lukter omnämnda i 4.3, vilka kan speglas i de komplexitetsmått som kan samlas in. Det kan därför vara en idé att som coach se över komplexiteten som en del av utvärdering om processen följs. Detta kan göras som ett parallellt arbete med uppmätning av Code Coverage 9 som ofta används av coacher som mått på hur väl teamen praktiserar test first. 9 Procent av kodbasen som körs igenom vid exekvering av testfall 13

14 Referenser [1] Beck, K. Embracing change with extreme programming. IEEE Computer Vol. 32 (1999). [2] Beck, K. Aim, fire. IEEE Software Vol. 18 (2001). [3] Chidamber, S., and Kemerer, C. A metrics suite for object oriented design. IEEE Transactions on Software Engineering Vol. 20 (1994). [4] Janzen, D., and Saiedian, H. Does test-driven development really improve software design quality. IEEE Software Vol. 25 (2008). [5] Martin, R. C. Agile Software Development, Principles, Patterns, and Practices. Pearson Education, Inc., [6] McCabe, T. A complexity measure. IEEE Transactions of Software Engineering Vol. 2 (1976). [7] Oliveira, M. F. S., et al. Software quality metrics and their impact on embedded software. In 5th International Workshop on Model-based Methodologies for Pervasive and Embedded Software (MOMPES 2008) (2008). 14

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

Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola Verktyget FindBugs Djupstudie i kursen EDA 270 Coachning av programvaruteam Christofer Bach dt05cb6 Daniel Nilsson dt05dn4 Lunds Tekniska Högskola 15 feb 08 1. Sammanfattning Denna djupstudie kommer att

Läs mer

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design RE SD PD I UT IT ST AT Mjukvarudesign System Requirement Specification Inkrementell och iterativ! Konceptuell design (VAD) Systemdesign (OOA) Arkitekturell (grovkornig, UML) Teknisk design (HUR) Programdesign

Läs mer

En sammanställning av komplexitetsmått.

En sammanställning av komplexitetsmått. En sammanställning av komplexitetsmått. D08 Lunds Tekniska Högskola Arvid Lindell dt08al6@student.lth.se 28 Februari 2012 Abstrakt Denna artikel diskuterar kodkomplexitetsmått i allmänhet. Några av de

Läs mer

Scrum + XP samt konsekvensanalys

Scrum + XP samt konsekvensanalys Scrum + XP samt konsekvensanalys Daniel Nimren dt05dn8 Douglas Frisk dt05df1 Dept. of Computer Science, Lunds Tekniska Högskola, Sweden {dt05dn8 dt05df1}@student.lth.se 1 mars 2010 Sammanfattning Denna

Läs mer

Nyttomaximering av spikes

Nyttomaximering av spikes Nyttomaximering av spikes Johan Hedin Sånemyr D11, LTH dat11jh1@student.lu.se Victor Shu-Ming Lam D11, LTH dat11vla@student.lu.se 2016-03-07 Sammanfattning Som projektledare av ett team programmerare så

Läs mer

Scrum + XP = sant. Kristian Björk D06, Lunds Tekniska Högskola dt05kb1@student.lth.se. Frederik Blauenfeldt Jeppsson. dt06fb8@student.lth.

Scrum + XP = sant. Kristian Björk D06, Lunds Tekniska Högskola dt05kb1@student.lth.se. Frederik Blauenfeldt Jeppsson. dt06fb8@student.lth. Scrum + XP = sant Kristian Björk D06, Lunds Tekniska Högskola dt05kb1@student.lth.se Frederik Blauenfeldt Jeppsson D06, Lunds Tekniska Högskola dt06fb8@student.lth.se 2010-03-02 1 Abstract Scrum och XP

Läs mer

Kodanalys med mjukvarumetriker

Kodanalys med mjukvarumetriker AKADEMIN FÖR TEKNIK OCH MILJÖ Avdelningen för industriell utveckling, IT och samhällsbyggnad Kodanalys med mjukvarumetriker En fältstudie hos Monitor ERP System AB Pontus Sund 2017 Examensarbete, Grundnivå

Läs mer

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Separation of Concern Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Modulär design Fördelar med välgjord modulär design: Lätt att utvidga Moduler går

Läs mer

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

Djupstudie Code smells / Refaktorisering. Martin Larsson dt08ml5 Stefan Johansson, dt08sj7 Djupstudie Code smells / Refaktorisering Martin Larsson dt08ml5 Stefan Johansson, dt08sj7 27 februari 2012 Innehåll 1 Inledning 1 2 Bakgrund 1 2.1 extreme programming....................... 1 2.2 Programvaruutveckling

Läs mer

Coaching av programvaruteam EDA270, djupstudie: Praktisk SCM användning i XP-projekt

Coaching av programvaruteam EDA270, djupstudie: Praktisk SCM användning i XP-projekt Coaching av programvaruteam EDA270, djupstudie: Praktisk SCM användning i XP-projekt Martin Malek Anders Hellström Lunds Tekniska Högskola 22 februari 2005 Version 1.0 Sammanfattning Som utgångspunkt för

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Aletta Nylén http://user.it.uu.se/~aletta Epost: aletta.nylen@it.uu.se Rum: 1216 Kursinfo Lärare: Aletta Nylén Jesper Wilhelmsson Litteratur: Object-Oriented Software Development

Läs mer

Agil programutveckling

Agil programutveckling Agil programutveckling Pontus Evertsson D00, Lunds Tekniska Högskola d00pe@efd.lth.se Anna Jennerheim D00, Lunds Tekniska Högskola d00aj@efd.lth.se 2003-05-15 1 1. Inledning 3 2. Extreme Programming (XP)

Läs mer

Effekter av införande av agila metoder. Daniel Sundmark Mälardalens högskola

Effekter av införande av agila metoder. Daniel Sundmark Mälardalens högskola Effekter av införande av agila metoder Daniel Sundmark Mälardalens högskola Agila metoder Agila metoder Values T. ex., working software over comprehensive documentation (Agile manifesto) Agila metoder

Läs mer

Labrapport över Rumbokningssytemet Grupp:1

Labrapport över Rumbokningssytemet Grupp:1 Fakulteten för ekonomi, kommunikation, IT & data Labrapport över Rumbokningssytemet Grupp:1 Kurskod: DVGC18 Kursnamn: Software Engineering Inlämningsdatum: 2009 10 28 Scrummaster: Martin Blom Projektmedlemmar:

Läs mer

Naked Objects. Michael Persson, d04mpe Peter Exner, dt08pe8

Naked Objects. Michael Persson, d04mpe Peter Exner, dt08pe8 Naked Objects Michael Persson, d04mpe Peter Exner, dt08pe8 2 mars 2010 Sammanfattning Naked objects är ett mönster som kan användas för att skapa en grundarkitektur. Tankesättet med Naked Objects är att

Läs mer

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet

Läs mer

Kodkomplexitet - Hur mäts det? Sara Nilsson D05, Lunds Tekniska Högskola 1 mars 2011

Kodkomplexitet - Hur mäts det? Sara Nilsson D05, Lunds Tekniska Högskola 1 mars 2011 Kodkomplexitet - Hur mäts det? Sara Nilsson D05, Lunds Tekniska Högskola dt05sn2@student.lth.se 1 mars 2011 Sammanfattning Den här rapporten är tänkt för studenter med programmeringsvana och åtminstone

Läs mer

Kritik av Extrem Programmering

Kritik av Extrem Programmering Kritik av Extrem Programmering Markus Borggren d01mbo@efd.lth.se Martin Persson d01mp@efd.lth.se D01, Lunds Tekniska Högskola 15 februari, 2004 Abstract I denna djupstudie kommer vi att försöka, på ett

Läs mer

D J U P S T U D I E I E D A S I M P L E C O D E A N D D E S I G N

D J U P S T U D I E I E D A S I M P L E C O D E A N D D E S I G N D J U P S T U D I E I E D A 2 7 0 S I M P L E C O D E A N D D E S I G N S. Marcus Jacobsson D03, Lunds Tekniska Högskola d03mj@efd.lth.se S. Magnus Weinberg D03, Lunds Tekniska Högskola d03mw@efd.lth.se

Läs mer

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

F9 del B Organisatoriskt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson Datavetenskap, LTH F9 del B Organisatoriskt EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson Datavetenskap, LTH 1 Projektet - moment Projektstartsmöte 6 Iterationer (en per vecka) - 10-12 team - 12-14 personer

Läs mer

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser Abstrakta Klasser 1 God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin men ibland kan dessa egenskaper inte definieras fullständigt Abstrakta klasser innehåller ofta

Läs mer

F7 Agila metoder. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Ulf Asklund Datavetenskap, LTH

F7 Agila metoder. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Ulf Asklund Datavetenskap, LTH F7 Agila metoder EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Ulf Asklund Datavetenskap, LTH 1 XP - Scrum - Kanban Agila metoder Vad innehåller SCRUM Hur skiljer sig XP och SCRUM KANBAN

Läs mer

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling Rune Tennesmed Oskar Norling Individuellt Mjukvaruutvecklingsprojekt Webbprogrammerare H12 Oskar Norling 2012-05-30 Abstrakt Denna rapport handlar om mitt mjukvaruutecklingsprojekt som jag och en klasskompis

Läs mer

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2014, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet

Läs mer

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson Rapport grupp 4 Software Engineering Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson 2009-10-29 Processer Sprinter Scrum har varit till stor hjälp för oss för att nå våra mål,

Läs mer

Agil projektmetodik Varför och vad är det?

Agil projektmetodik Varför och vad är det? Agil projektmetodik Varför och vad är det? Boris Magnusson Datavetenskap LTH 2016-02-08 Lite större projekt Sträcker sig över tid Involverar många deltagare som behöver arbeta parallellt Planeras - delas

Läs mer

Refaktorisering i ett XP-projekt

Refaktorisering i ett XP-projekt Författare: Erik Norberg, Joakim Puusaari E-post: {d00en, d00jpu@efdlthse Datum: 2004-02-22 Refaktorisering i ett XP-projekt Sammanfattning I denna djupstudie delar vi med oss av våra erfarenheter av refaktoriseringar,

Läs mer

Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Separation of Concern Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Modulär design Ett programsystem är för stort för att kunna förstås i sin helhet.

Läs mer

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning PMM (Process Maturity Metrics) PMM är en metod för att mäta processmognad i utvecklingsprojekt. I korthet går metoden ut på att man utvärderar sin utvecklingsprocess med avseende på ett antal framgångsfaktorer

Läs mer

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

Analysverktyg för Code smells och Test coverage. Djupstudie för Coaching av programvaruteam 2015 Analysverktyg för Code smells och Test coverage Djupstudie för Coaching av programvaruteam 2015 Lund, 6/3 2015 Christian Kuijer Andersen Rickard Johansson dat11can@student.lu.se dat11rjo@student.lu.se

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Regression med Genetiska Algoritmer

Regression med Genetiska Algoritmer Regression med Genetiska Algoritmer Projektarbete, Artificiell intelligens, 729G43 Jimmy Eriksson, jimer336 770529-5991 2014 Inledning Hur många kramar finns det i världen givet? Att kunna estimera givet

Läs mer

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Objektorienterad Programkonstruktion. Föreläsning jan 2017 Objektorienterad Programkonstruktion Föreläsning 15 30 jan 2017 Felsökning Med moderna programmeringsverktyg är rena syntaxfel oftast lätta att åtgärda Fel som kan vara svårare att åtgärda är t.ex: thread

Läs mer

Objektorienterad programmering, allmänt

Objektorienterad programmering, allmänt Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara

Läs mer

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha? Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Deluppgift 2 Kravhantering a) (2p) När man diskuterar krav brukar man ange två olika typer av krav. Beskriv dessa och ge exempel.

Deluppgift 2 Kravhantering a) (2p) När man diskuterar krav brukar man ange två olika typer av krav. Beskriv dessa och ge exempel. Page 1 (5) Hemuppgift 1DV404 150115-150118 Deluppgift 1 Processmodeller a) (4p) Alla mjukvaruutvecklare följer någon form av utvecklingsprocess i sitt arbete. Diskutera vad organisationer brukar ange som

Läs mer

Praktikum i programvaruproduktion

Praktikum i programvaruproduktion Praktikum i programvaruproduktion Introduktion Föreläsare/Ansvarig: Pontus Boström Email:pontus.bostrom@abo.fi Rum A5055 Assistent: Petter Sandvik Email: petter.sandvik@abo.fi Rum: A5048 Föreläsningar:

Läs mer

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDI02 Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Verifikation, Validering och Testning XP Extreme Programming Vad är ett fel? I engelskan

Läs mer

SCRUM. Marcus Bendtsen Institutionen för datavetenskap

SCRUM. Marcus Bendtsen Institutionen för datavetenskap SCRUM Marcus Bendtsen Institutionen för datavetenskap 2 Metodik Systematiskt tillvägagångssätt för att garantera utfallet Metodiken behöver passa kontexten och tillgängliga resurser Verifiering av metodiken

Läs mer

12 principer of agile practice (rörlig)

12 principer of agile practice (rörlig) X-treme programming 12 principer of agile practice (rörlig) Ge nöjd kund genom tidig och kontinuerliga leveranser Den viktigaste punkten som betyder att min vill ha kontinuerlig feedback Välkomna sena

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss

Läs mer

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda Objektorienterad modellering och design (EDAF25) Föreläsning 3 UML Objektdiagram Agenda UML objekt och sekvensdiagram Design smells Designprinciper (ALP, SRP, OCP, DIP) (, Composite) Att göra denna och

Läs mer

Testdriven utveckling. Teorin bakom testdriven utveckling. Bakgrund. Januari 2009, KTH. Alexander Tarnowski

Testdriven utveckling. Teorin bakom testdriven utveckling. Bakgrund. Januari 2009, KTH. Alexander Tarnowski Testdriven utveckling Januari 2009, KTH Alexander Tarnowski Teorin bakom testdriven utveckling Bakgrund Testdriven utveckling började nämnas kring 1999-2000 av Kent Beck I praktiken implementationen av

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer

Att införa XP. Daniel Nilsson och Mattias Nordahl Lunds Tekniska Högskola. 27 februari Abstrakt

Att införa XP. Daniel Nilsson och Mattias Nordahl Lunds Tekniska Högskola. 27 februari Abstrakt Att införa XP Daniel Nilsson och Mattias Nordahl Lunds Tekniska Högskola 27 februari 2012 Abstrakt Genom analys och sammanfattning av tidigare publikationer samt diskussion och reflektion av en högskolekurs

Läs mer

Objektorienterad analys och design

Objektorienterad analys och design Objektorienterad analys och design Objektorienterad analys och design 1 Dagens föreläsning Första delen, innan rasten: Motivation och bakgrund Analys Funktioner Andra delen, efter rasten: Objektorienterade

Läs mer

Kurs-PM fo r HI1028, Projektkurs inom programvaruutveckling, VT16

Kurs-PM fo r HI1028, Projektkurs inom programvaruutveckling, VT16 Kurs-PM fo r HI1028, Projektkurs inom programvaruutveckling, VT16 Mål Kursen skall ge studenten träning i att utveckla en större programvara. Arbetet utförs i projektform. Projektet skall ge grundläggande

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för:

SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för: Lektion 32 Övningar Korta punkter Jag vill ha en redovisning från alla grupper där ni går igenom person för person vad personen har ansvarat för och vad och vem personen har parprogrammerat på. Ta även

Läs mer

Objektorienterad programmering. Grundläggande begrepp

Objektorienterad programmering. Grundläggande begrepp Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller

Läs mer

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

Introduktion. Objekt-orienterad Programmering och Design (TDA551) Alex Gerdes, HT-2016 Introduktion Objekt-orienterad Programmering och Design (TDA551) Alex Gerdes, HT-2016 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart? Testbart? Maintainable?

Läs mer

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT TIDAA Planering Programmering grundkurs HI1024 HT 2016 - TIDAA Föreläsning V35 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning

Läs mer

Proj-Iteration1. Arkitektur alt. 1

Proj-Iteration1. Arkitektur alt. 1 Proj-Iteration1 PVG/Coaching Boris Magnusson Datavetenskap LTH Proj-Iter1-1 Registrering Registrering Arkitektur alt. 1 Personuppgifter Starttid Sorterare Måltid Efterbehandling Resultat Tre program som

Läs mer

Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu. Mina listor En Android-applikation Rickard Karlsson 2013-06-09 Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.se Innehållsförteckning 2. Innehållsförteckning 3. Abstrakt 4. Inledning/bakgrund

Läs mer

EDAA01 Programmeringsteknik - fördjupningskurs

EDAA01 Programmeringsteknik - fördjupningskurs EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se sandra.nilsson@cs.lth.se http://cs.lth.se/edaa01ht Förkunskapskrav: Godkänd på obligatoriska

Läs mer

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator Viktiga begrepp Den här ordlistan är till för dig som går kursen Om Programmering. Eftersom detta är en grundläggande kurs har vi i vissa fall gjort en del förenklingar. En del begrepp är svåra att förenkla,

Läs mer

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018 Principles of subclasses Objekt-orienterad programmering och design Alex Gerdes, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss två fördelar:

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

I detta avsnitt beskrivs vart parprogrammering appliceras, hur det ska fungera och även i vilket projekt det introduceras i.

I detta avsnitt beskrivs vart parprogrammering appliceras, hur det ska fungera och även i vilket projekt det introduceras i. PARPROGRAMMERING Mikael Möller, dt07mm5@student.lth.se 2011-02-28 Abstrakt Parprogrammering är ett arbetssätt där två programmerare arbetar tillsammans vid en dator med en uppgift. Studien behandlar frågor

Läs mer

Petter Berglund. Sammanfattning

Petter Berglund. Sammanfattning EDA270 - Coaching av programvaruteam Verktyg för kodanalys Petter Berglund D05, Lunds Tekniska Högskola dt05pb2@student.lth.se 2008-02-10 Sammanfattning Verktyg för kodanalys blir allt vanligare i programvaruutvecklingsprojekt

Läs mer

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault

Läs mer

Laboration i datateknik

Laboration i datateknik KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Programmering av LEGO-robot Rickard Eriksson 2012-09-06 rieri@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Denna rapport är till följd

Läs mer

Vad är. Domändriven design?

Vad är. Domändriven design? Vad är Domändriven design? 1 Domändriven design är utvecklare och domänexperter som arbetar tillsammans för att skapa mjukvara som är både begriplig och möjlig att underhålla. ett sätt att fånga och sprida

Läs mer

EXJOBBSOPPOSITION. Rapportförfattare: Hanif Farahmand Mokarremi Ashkan Jahanbakhsh

EXJOBBSOPPOSITION. Rapportförfattare: Hanif Farahmand Mokarremi Ashkan Jahanbakhsh EXJOBBSOPPOSITION Rapportförfattare: Hanif Farahmand Mokarremi Ashkan Jahanbakhsh Rapportens titel: Domän-Webb-Applikations-Fuzzer(DWAP) introduktion och implementation Opponent: Viktor Gummesson Var det

Läs mer

Att lära sig av kodanalys

Att lära sig av kodanalys Att lära sig av kodanalys Om att använda kodanalysverktyg i utbildningssyfte tillsammans med XP Daniel Bengtsson, c02db@student.lth.se Mikael Piotrowski, c04mpi@student.lth.se Lunds Tekniska Högskola den

Läs mer

ToDo ios-applikation. Mikael Östman. Mikael Östman - mo22ez Linnéuniversitetet

ToDo ios-applikation. Mikael Östman. Mikael Östman - mo22ez Linnéuniversitetet ToDo ios-applikation Mikael Östman 201205 Mikael Östman - mo22ez Linnéuniversitetet mo222ez@student.lnu.se Abstrakt Detta är en slutrapport för det projekt jag bedrivit inom ramen för kursen Individuellt

Läs mer

Kursplanering Objektorienterad programmering

Kursplanering Objektorienterad programmering Kursplanering Objektorienterad programmering Fakta Ämne Programmering Poäng 40 Yh-poäng Kurskod YSYS-OOP Klass Systemutvecklare.NET 2 Syfte och koppling till yrkesrollen Syftet är att få en stabil grund

Läs mer

Användarcentrerad systemdesign

Användarcentrerad systemdesign Användarcentrerad systemdesign Föreläsning 11: Agile-processer och ACSD Stefan Blomkvist Avdelningen för MDI/IT, Uppsala Universitet, Stefan.Blomkvist@hci.uu.se www.it.uu.se/edu/course /homepage/acsd/

Läs mer

Gruppdynamik och gruppsykologi i Extremet Programming

Gruppdynamik och gruppsykologi i Extremet Programming Gruppdynamik och gruppsykologi i Extremet Programming Jerry Malm, d02jm@efd.lth.se Gustav Olsson, d02og@efd.lth.se Lunds Tekniska Högskola Lund, den 22 februari 2005 Sammanfattning Denna djupstudie kan

Läs mer

Planeringsspelets mysterier, del 1

Planeringsspelets mysterier, del 1 Peter Lindberg Computer Programmer, Oops AB mailto:peter@oops.se http://oops.se/ 28 februari 2002 Planeringsspelets mysterier, del 1 Om jag ska spela ett sällskapsspel för första gången så vill jag att

Läs mer

Uppsats i MDI En reflektion över designarbetet i tidigare inlämningsuppgift

Uppsats i MDI En reflektion över designarbetet i tidigare inlämningsuppgift Uppsats i MDI En reflektion över designarbetet i tidigare inlämningsuppgift Personlig uppsats i kursen Människa-datorinteraktion Magisterprogrammet MDI/ID 2003 11 03 Mattias Ludvigsson it3luma@ituniv.se

Läs mer

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

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016 Objekt-orienterad Programmering och Design TDA551 Alex Gerdes, HT-2016 Kursteamet Dr. Alex Gerdes kursansvarig, föreläsare Dr. Niklas Broberg examinator, (föreläsare) Fredrik Sjöholm handledare Johan Andersson

Läs mer

Introduktion och OO. Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-2018

Introduktion och OO. Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-2018 Introduktion och OO Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-2018 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart? Testbart?

Läs mer

Laboration i datateknik

Laboration i datateknik KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Felsökning och programmering av LEGO NXT robot Daniel Willén 2012 09 06 dwill@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Syftet med

Läs mer

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim  Agenda (halvdag) Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer

Läs mer

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo 729G75: Programmering och algoritmiskt tänkande Tema 1. Föreläsning 1 Jody Foo Föreläsningsöversikt Kursinfo / Om kursen Algoritmer Objektorienterad programmering i praktiken terminologi använda objekt

Läs mer

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt Kursombud Objektorienterad modellering och diskreta strukturer / design Designprinciper Lennart Andersson EDAF10 EDA061 Reviderad 2010 09 02 2010 OMD 2010 F2-1 Att göra Agile? OMD 2010 F2-2 Grupper för

Läs mer

Utvecklingen av ett tidregistrerings- och faktureringssystem

Utvecklingen av ett tidregistrerings- och faktureringssystem Datavetenskap Opponenter: Anders Heimer & Jonas Seffel Respondenter: Daniel Jansson & Mikael Jansson Utvecklingen av ett tidregistrerings- och faktureringssystem Oppositionsrapport, C-nivå 2006:10 1 Sammanfattat

Läs mer

Cult of Code Quality

Cult of Code Quality Jakob Schyberg (d00jsc) 2005-02-13 Coaching av Programvaruteam Josef Granqvist (d00jgr) LTH Institutionen för Datavetenskap Cult of Code Quality Vad kan en coach göra? Denna djupstudie handlar om kodkvalitet.

Läs mer

Programmeringsteknik II

Programmeringsteknik II Programmeringteknik II Kursintroduktion http://www.it.uu.se/edu/course/homepage/prog2/vt18/ 2018-03-19 Programmeringsteknik II 2018-03-19 1 / 9 Lärare Carl Nettelblad (kursansvarig) Anna Eckerdal Biträdande

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH F2 XP Extrem Programmering översikt EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH Syfte & Mål Ge en helhet av vad XP är Mål & syfte med XP - varför ser metoden

Läs mer

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH F2 XP Extrem Programmering översikt EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH Vad är XP? En metod för hur man utvecklar programvara i grupp i nära samspel

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Introduktion till programmering med hjälp av Lego Mindstorm

Introduktion till programmering med hjälp av Lego Mindstorm Kungliga Tekniska Högskolan Introduktion till programmering med hjälp av Lego Mindstorm Laborationsrapport gällande programmering inom NXC Simon Jansson 31 08 2014 simonjan@kth.se Introduktionskurs i datateknik

Läs mer

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

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack 725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.

Läs mer

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15 DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Djupstudie Verktyg för att förebygga problem i källkod. Anders Forslund Anders Lund Djupstudie Verktyg för att förebygga problem i källkod Anders Forslund (d04afr@student.lth.se) Anders Lund (et05al1@student.lth.se) 2 mars 2010 Sammanfattning Då kodningsstandard ej hålls så blir ofta

Läs mer

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Planering Programmering grundkurs HI1024 HT 2015 - data

Planering Programmering grundkurs HI1024 HT 2015 - data Planering Programmering grundkurs HI1024 HT 2015 - data Föreläsning V36 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning

Läs mer

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer

Läs mer

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT 2014 Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att

Läs mer