Djupstudie: Big Ball of Mud - Technical debt and large refactorings

Storlek: px
Starta visningen från sidan:

Download "Djupstudie: Big Ball of Mud - Technical debt and large refactorings"

Transkript

1 Djupstudie: Big Ball of Mud - Technical debt and large refactorings Coaching av programvaruteam Felix Glas Februari 2012

2 Abstract Technical debt är den skuld utvecklare tar på sig genom att undvika refaktoriseringar. Så småningom måste skulden betalas tillbaka för att fortsatt utveckling skall kunna vara möjlig. För att motverka dessa problem bör utvecklare kontinuerligt refaktorisera programkoden, det vill säga rätta till och förbättra bristande delar av mjukvaran. Ibland kan det emellertid uppstå situationer där det är praktiskt gynnsamt att skapa snabba men bristande lösningar. Big Ball of Mud är ett begrepp som beskriver en situation där mjukvarans struktur befinner sig i ett oordnat och svårhanterligt tillstånd. Det finns flera anledningar till varför detta tillstånd ofta uppstår vid något tillfälle under utvecklingen av en mjukvara. För att lösa omfattande problem med strukturen måste en stor refaktorisering genomföras. Detta innebär ibland att övrig utveckling måste stoppas medan refaktoriseringen pågår. Vid stora refaktoriseringar kan det vara svårt att refaktorisera enligt förutbestämda mönster. Särskilda åtgärder måste vidtas för att kunna strukturera om systemet på ett bra sätt. Eventuellt blir utvecklarna tvungna att återskapa en ny modell av systemet (reverse engineering) för att kunna identifiera brister enligt designprinciperna. Därefter kan en ny modell tas fram (reengineering) som bättre lämpar sig för fortsatt utveckling.

3 Innehållsförteckning 1 Inledning 1.1 Technical debt 1.2 Metod 1.3 Kort om resultaten 1.4 Språk 2 Utvecklingsmetoder 2.1 Refaktorisering 2.2 Design med agil inriktning 2.3 Äldre utvecklingsmetoder 3 Designprinciper 3.1 Gör rätt från början 3.2 Design smells 3.3 Designprinciper 3.4 Big ball of mud 4 Studie 4.1 Stora refaktoriseringar 4.2 Reverse- and reengineering 4.3 Enkät 4.4 Resultat 5 Slutsats

4 1 Inledning 1.1 Technical debt All form av mjukvaruutveckling drabbas förr eller senare av komplikationer i form av bristande kvalité på källkod. Bristerna gör det svårt att komma vidare i utvecklingsarbetet om inte reparation av dessa brister genomförs. Små brister ackumuleras med tiden och påverkar allt större delar av mjukvaran. Problemet har liknats med en teknisk skuld i form av ett lån av snabba programmeringslösningar (eng: technical debt) [11][13]. Precis som de flesta andra lån måste detta lån så småningom betalas tillbaka. När den tidspressade utvecklaren väljer att tillämpa en så kallad quick and dirty -lösning skapas ett framtida behov av en bättre lösning. Utvecklarna kan välja att endast betala ränta i form av den extra ansträngning som framtida utveckling innebär när man arbetar med en dålig lösning. Alternativt kan utvecklarna välja att amortera på lånet genom att refaktorisera mjukvaran. Detta medför en lägre framtida ränta eftersom mindre ansträngning krävs för fortsatt utveckling. Ibland är det oundvikligt (och eventuellt fördelaktigt) att ta ut ett sådant lån för att kunna leverera mjukvara vid rätt tidpunkt [11]. Ofta kan det vara viktigt att kunna leverera på utsatt tid och senare genomföra en refaktorisering av en forcerad lösning. Det viktigaste är dock att det emellanåt amorteras på lånet, det vill säga att refaktoriseringar regelbundet utförs. Annars kommer projektet att behöva dras med en allt större räntekostnad i form av extra arbetstimmar i onödan. När ett projekt med en stor skuld inte har refaktoriserats på tillräckligt länge uppstår ett tillstånd där särskilda metoder måste tillämpas för att handskas med återbetalningen. Dessa stora refaktoriseringar (eng: large refactorings) har en tendens att stoppa fortsatt utveckling av alla delar av mjukvaran. 1.2 Metod Under kursen Programvaruutveckling i Grupp får en grupp studenter praktisera utveckling i grupp enligt agila utvecklingmetoder. Varje grupp tillsätts två äldre studenter som coacher. I min roll som coach har jag under 7 veckors tid genomfört en djupstudie i ämnet som den här studien behandlar. I studien har jag undersökt hur stora refaktoriseringar delvis kan undvikas genom användningen av olika designmönster som till exempel The Open-Closed Principle och The Dependency-Inversion Principle [4]. När ett projekt ändå (förmodligen oundvikligen efter lång tid) hamnar i ett läge där en stor refaktorisering måste genomföras, kommer jag att studera om det finns någon eller några bra metoder för att handskas med detta. Studien kommer huvudsakligen att koncentreras på principer som gäller vid tillämpandet av agila utvecklingsmetoder.

5 1.3 Kort om resultaten Under studien kommer jag att genomföra två enkäter för att undersöka hur designprinciperna tillämpas under projektets gång samt om tendenser finns att det bildas ett så kallat antimönster (eng: antipattern). I det här fallet är jag intresserad av anti-mönstret Big Ball of Mud [9]. 1.4 Språk Eftersom en stor del av litteraturen inom området mjukvaruutveckling och refaktorisering är på engelska återspeglas detta i terminologin. Många av de uttryck som används för att beskriva teorin är svåra att översätta till svenska och jag har därför valt att behålla de flesta på engelska. Eventuellt kan denna språkliga blandning vara till nytta för läsaren eftersom det är lättare för en oinvigd att förstå programmeringslitteratur om man kan de engelska facktermerna. 2 Utvecklingsmetoder 2.1 Refaktorisering Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure. Martin Fowler, Refactoring, Addison-Wesley, 1999 Refaktorisering innebär att ändra och skriva om delar av ett program för att förbättra den inbördes strukturen utan att förändra dess funktionalitet ur ett yttre perspektiv [1]. Med detta menas att koden kan ändras utan att det sker en förändring i vad koden utför. Syftet med en sådan ändring är oftast att förbättra läsbarheten för programmerare, förenkla strukturen och underlätta underhållandet av kod [8]. En välstrukturerad och lätthanterlig kod är lättare att underhålla och minskar risken för uppkomsten av buggar. Att refaktorisera kod är ett sätt att betala tillbaka den tekniska skulden (eng: technical debt) [11][13]. Genom att regelbundet genomföra mindre refaktoriseringar under programmets utveckling kan mängden degraderad kod begränsas. Vid programvaruutveckling är det nästan alltid utvecklarna som utgör den största ekonomiska kostnaden. Det har även gjorts undersökningar som visar att underhåll av kod kostar mer än själva utvecklingen [2]. Vid stora utvecklingsprojekt kan kostnaden av underhållet mångdubbelt överstiga kostnaden av utvecklingsarbetet. Av denna anledning kan man dra slutsatsen att kod som är enkel att underhålla har stort värde. Alltså bör det i utvecklingsprojekt läggas stor vikt vid att producera kod som är lätt att underhålla i ett senare skede. En annan aspekt som går hand i hand med underhåll är

6 läsbarhet. Eftersom framtida underhåll kan ske i olika former och med utbytt personal är det viktigt att nytillkomna utvecklare snabbt kan sätta sig in i projektet och förstå hur programmet fungerar. Inom agil utveckling förespråkas rutinmässig refaktorisering i samband med att ny kod skrivs [1][4]. Detta görs för att kontinuerligt ta hand om den växande mängden svårhanterlig kod och struktur som oundvikligen produceras vid iterativa utvecklingsmetoder. Vid iterativ utveckling implementeras funktionalitet allt eftersom då nya krav på funktioner kan tillkomma vid varje iteration [4]. När en sådan utvecklingsmetod tillämpas är det viktigt att organisera en rutinmässig kontroll och korrigering av den snabbt tillkommande nya strukturen så att programmet vidhåller en bra design enligt konstens regler. 2.2 Design med agil inriktning Vid agil utveckling har leveransen av programvara högsta prioritet [3][4]. Ny programvara bör kunna levereras tidigt och kunna följas upp med regelbundna uppdateringar. Det finns ett starkt samband mellan mjukvarukvalitet och frekventa leveranser av uppdaterad mjukvara [4]. Genom ett nära samarbete med kunden och möjligheten att tidigt granska produkten kan brister upptäckas och korrigeras kontinuerligt [3]. Till skillnad från vid äldre vattenfallsmetoder välkomnas förändring även sent under utvecklingsfasen. Mjukvarukoden anpassas för att vara flexibel och modulär för att underlätta den snabba förändringstakten. Agil utveckling använder sig av iterativa utvecklingsmetoder för att på ett flexibelt sätt kunna hantera snabbt växlande förutsättningar [4][5]. Metoden är utvecklad för att bättre kunna klara av de påfrestningar som modern mjukvaruutveckling utsätts för. Till exempel prioriteras ofta tidsomfattning och planering först för att ett utvecklingsprojekt garanterat skall kunna leverera en release till utsatt tid [5]. Eftersom teknikutvecklingen går snabbare och teknikförutsättningarna kan ändras på kort tid måste ny mjukvara snabbt kunna anpassas och uppdateras. Under sådana omständigheter gynnas ofta inte uppkomsten av kodkvalitet av sig själv utan måste aktivt utvärderas och förbättras. Därför är det särskilt viktigt att organisera rutiner för granskning och refaktorisering vid tillämpandet av agila metoder. 2.3 Äldre utvecklingsmetoder Äldre utvecklingsmodeller baseras ofta på en noga utformad ursprungsplan som förverkligas stegvis. Exempel på en sådan modell är vattenfallsmodellen [5]. Vid tillämpandet av vattenfallsmodellen skall varje steg vara klart och bedömas innan nästa steg kan tas. Modellen kan liknas vid de processer som följs vid konstruktion av hus och inom industrin. Arbetssättet gör att ju längre processen framskrider, desto svårare

7 blir det att hantera förändring. Med en låg förändringstakt är behovet av upprepade refaktoriseringar inte lika stort och mjukvaran kan anpassas i större utsträckning efter en färdig arkitektur. Nackdelen blir dessvärre att svårigheten att hantera förändring leder till att många utvecklingsprojekt måste börjas om eller läggas ned. Moderna metoder ställer högre krav på förmågan att kontinuerligt kunna hantera förändring och att fortlöpande kunna förbereda mjukvaran för fortsatt förändring. 3 Designprinciper 3.1 Gör rätt från början För att minimera behovet av refaktoriseringar är det viktigt att man utformar programkoden rätt från början. Det finns ett antal hjälpmedel för att kunna förutse vad som ofta utvecklas till dåliga lösningar. Till exempelvis har forskning och lång erfarenhet lett fram till de fem designprinciperna som tillsammans utgör grunden för god objektorienterad design [4][6]. Den som följer principerna har goda möjligheter att kunna minimera andelen tid som läggs på refaktoriseringar. Emellertid så går det inte helt att undvika refaktoriseringar eftersom det alltid kommer att finnas plats för förbättringar i en design. I alla utvecklingsprojekt uppstår brister oavsett hur duktiga utvecklarna är. Ofta sker detta för att kompromisser tvingas fram under tidspressade förhållanden. För att utvecklingsprojektet skall ha en fortsatt gynnsam framtid måste refaktoriseringar genomföras. En refaktorisering skall dock inte bara ses som en städningsåtgärd, utan som en naturlig del av utvecklingsarbetet. 3.2 Design smells När man talar om design i mjukvarusammanhang menar man mer än bara klasstrukturen representerad i till exempelvis ett UML-diagram. Designen är ett abstrakt koncept som omfattar allt från den översiktliga formen och strukturen till strukturen på varje enskild klass och metod. Den slutgiltiga representationen av design är därför naturligtvis källkod. Om en design anses vara dålig kan detta uttryckas med termen luktande kod - eller design (eng: code and design smells) [1]. Följande anses vara symptom på luktande kod: 1. Rigidity (rigiditet) - Det är svårt att ändra i koden eftersom ändringar tvingar fram ytterligare ändringar i andra delar av koden. 2. Fragility (skörhet) - Ändringar gör att andra delar av koden slutar fungera.

8 3. Immobility (orubblighet) - Systemet är inte modulärt och delar av koden kan inte återanvändas på andra ställen. 4. Viscosity (tröghet) - Det är svårare att göra rätt än att göra fel. 5. Needless comlexity (onödig komplexitet) - Delar av koden är onödigt komplex utan att tillföra mervärde. 6. Needless repetition (onödigt repetition) - Delar av koden är identisk med andra delar och borde kunna enas med en abstraktion. 7. Opacity (svårbegriplighet) - Delar av koden är svåra att förstå och uttrycker inte sina syften. Till exempelvis skall klass- och metodnamn representera vad de är till för. Luktande kod är tecken på att en refaktorisering måste genomföras för att fortsatt utveckling och underhåll av koden skall kunna genomföras i en rimlig takt. Om problemen tillåts kvarstå kommer mjukvaran att bli mer och mer svårhanterlig. Luktande kod har en tendens att fortplanta sig genom mjukvaran vid fortsatt utveckling och måste åtgärdas eller i varje fall avgränsas. Luktande kod kan uppstå av sig själv, oavsett om utvecklarna är duktiga eller inte, genom att kraven på mjukvaran förändras med tiden och på ett sätt som inte den ursprungliga designen kan förutsäga. För att undvika stora refaktoriseringar bör en god programmerare alltid akta sig för att skriva kod som kan börja lukta. 3.3 Design principles På en högre designnivå tillämpas ett antal principer för att strukturera mjukvaran på ett optimalt sätt [4]. Syftet är att hålla designen så enkel, ren och förståelig som möjligt. Dessa principer bör inte uteslutande användas vid den initiala utformningen av systemets design, utan skall tillämpas kontinuerligt under varje iteration för att i så stor mån som möjligt undvika onödiga omstruktureringar. Genom följande steg hanteras problem i designen [4]: 1. Problemet identifieras genom att det uppvisar symptom på luktande kod. 2. Problemet diagnostiseras genom tillämpning av designprinciper. 3. Utvecklarna löser problemet genom att använda sig av lämpliga designmönster. SRP (The Single Responsibility Principle) - En klass bör ha EN anledning till förändring Principen säger att varje klass bör bara ha ansvaret för att utföra en sak. Varje ny uppgift som klassen utför är ytterligare en anledning till förändring. För många ansvarsuppgifter gör klassen känslig för förändringar och designen blir skör. En skör design medför att enstaka förändringar skapar oförutsedda problem i andra delar av mjukvaran. Principen utgör en del av basen för all mjukvarudesign: att identifiera och

9 separera ansvarsuppgifter. OCP (The Open-Closed Principle) - Mjukvarukomponenter, som till exempel klasser, skall vara öppna för användning i form av arv men stängda för inre modifikation. När en förändring i en klass orsakar en dominoeffekt av fler förändringar i programmet är designen allt för rigid. Principen råder utvecklare att refaktorisera på ett sätt så att efterföljande förändringar inte medför en kaskad av ytterligare förändring. Efterföljande förändringar bör ske genom skapandet av ny kod och inte genom modifikation av existerande komponenter. LSP (The Liskov Subtitution Principle) - Subtyper skall vara substitut för bastyper. Principen säger att en subtyp bör kunna användas endast med kännedom om hur dess bastyp fungerar. Om en implementation behöver kännedom om vad som skiljer specifika subtyper åt bryter detta dessutom mot OCP genom att införandet av nya subtyper kräver modifikation av implementationen. DIP (The Dependency-Inversion Principle) - Beroenden bör peka på abstraktioner Implementation skall ej bero av konkreta klasser, de skall bero av gränssnitt (eng: interface) och abstrakta klasser. För att frikoppla delar av koden från varandra och modularisera designen är det viktigt att klasser på en högre nivå inte är beroende av implementationsdetaljer på en lägre nivå. En bra design kan delas in i lager där beroendena är omvända: de undre lagren beror av de högre. Högre lager använder sig av gränssnitt och abstrakta klasser för att komma åt de underliggande lagren. ISP (The Interface-Segregation Principle) - Implementationen bör inte tvingas bero av metoder som den inte använder. När en klass beror av ett gränssnitt måste den implementera alla metoder som definieras i gränssnittet. Gränssnitt bör därför delas upp om användingen av olika delar av gränssnittet skiljer sig mellan implementerande klasser. Detta för att undvika onödiga beroenden och en rigid design. 3.4 Big ball of mud Big ball of mud är ett uttryck som myntades 1999 av Brian Foote och Joseph Yoder [9] och som beskriver ett designmönster (eller snarare ett antimönster) där strukturen är bristande. När programkoden inte följer designprinciperna och mer liknar en ohanterlig röra kan den liknas med en gyttjeboll. De flesta utvecklare anser att en sådan röra bör undvikas och att en stor refaktorisering måste genomföras. Trots detta är fenomenet vanligt och många projekt utvecklas ofta till att bli ostrukturerade och svårhanterliga.

10 Anledningen till att många mjukvaruprojekt följer detta mönster diskuteras nedan under ett antal punkter. Ofta sker en oundviklig degenerering av programstruktur och design vid tillkomsten av ny kod. Därför måste detta ses som en del av utvecklingen och inte som misslyckande. De punkter som diskuteras nedan är anledningar som kan bidra till uppkomsten av dålig programstruktur [9]. Behovet att leverera kvalitativ mjukvara under utsatt tid och budget Ledningen ser det som levereras, inte de tekniska detaljerna. Ur ett kortsiktigt perspektiv spelar design och programstruktur mindre roll och hamnar lätt på efterkälken. När en bra struktur inte belönas av ledningen bildas en ond cirkel. Fokus främst på funktionalitet och i andra hand på arkitektur och prestanda Även ett resultat av en kortsiktig planering där kund och ledning endast har insikt i programmets yttre. Om ingen hänsyn tas till långsiktig utveckling utan endast ligger på mängden funktionalitet som implementeras faller en bra design samman ganska fort. Snabba lösningar på små problem Snabba lösningar för att snabbt kunna gå vidare är inte alltid den bästa lösningen. Speciellt inte om det ej finns utrymme för refaktorisering i efterhand. Agil utveckling talar för enkelhet och att lösa aktuella problem, inte framtida. Snabba lösningar tenderar dock att bli beroende av refaktoriseringar i längden. Återanvändning av gammal kod Under tidspressade förhållanden vill man hellre återanvända färdig kod än att skriva ny. Ofta innebär återanvändandet av gammal kod att en del kompromisser måste göras vad gäller designprinciperna. Användningen av en oflexibel designplan En designplan som är allt för stel och inte kan förändras i den takt som behövs utgör en dålig grund för programmets struktur. Refaktorisering är riskabelt Refaktoriseringar innebär att kod kanske måste skrivas om. Många utvecklare kan känna att detta är riskabelt eftersom den nya koden kanske inte fungerar direkt. En refaktorisering är även ett åtagande som måste slutföras innan utvecklingen kan gå vidare.

11 Programmet skall fortsätta fungera Om det viktigaste är att mjukvaran fortsätter att fungera på kort sikt kan resultatet bli att man upprepat reparerar något som egentligen inte är bra. När produktionen håller ett högt tempo finns det mindre och mindre tid till att refaktorisera bristande struktur. 4 Studie 4.1 Stora refaktoriseringar Små refaktoriseringar är en viktig del av det agila utvecklingsarbetet. De är oftast överblickbara och kan göras enligt förutbestämda mönster. I större projekt (och även i mindre) är det emellertid vanligt att större refaktoriseringar blir nödvändiga. Refaktoriseringar som är tillräckligt stora och komplicerade går inte att genomföra enligt förutbestämda mönster. De är för omfattande och berör för stor del av strukturen för att kunna genomföras parallellt med annan utveckling [7]. En genomgående refaktorisering kan eventuellt beröra alla utvecklare som jobbar med projektet. Detta kan skapa förvirring för de utvecklare som inte känner till detaljerna av refaktoriseringen. En stor och komplex refaktorisering kan innebära att utvecklarna tappar kontrollen under genomförandet, och att visa delar av mjukvaran tillfogas ofärdiga refaktoriseringar. Systemet består nu av en blandning av ny och gammal struktur, vilket eventuellt leder till en ännu sämre struktur än från början. Stora refaktoriseringar kan även vara svåra att genomföra eftersom de måste utföras på strukturer som konstant kan förändras. Detta eftersom det kanske inte går att stoppa övriga utvecklingsspår när refaktoriseringen skall genomföras. Den enda lösningen vid stora refaktoriseringar blir ofta att refaktoriseringen måste planeras noga och delas upp i mindre delar [7][10]. Det måste på förhand bestämmas vilka delar av refaktoriseringen som kommer att påverka specifika delar av mjukvaran så att en prioriteringsplan kan konstrueras. Genom att iterativt genomföra refaktoriseringarna kan även effekterna av förändringen hela tiden observeras. 4.2 Reverse- and reengineering För att hantera stora refaktoriseringar av ett mjukvaruprojekt är utvecklarna ibland tvungna att från den konkreta implementationen återkonstruera en abstrakt representation av designen för att kunna överblicka vad som behöver ändras [12] [14]. Ofta är behovet av en stor refaktorisering resultatet av en mängd olika ändringar i källkoden under en lång tid. Risken är då stor att utvecklarna tappat förmågan att överblicka hela designen och det blir svårt att applicera designprinciperna för att hitta brister. Ibland kan även dokumentationen ha hamnat på efterkälken och upphöra att

12 beskriva systemet korrekt. Vad som då måste göras är en återskapning av modellen eller en så kallad reverse engineering (omvänd ingenjörskonst), det vill säga att högnivådesignen måste återskapas från källkoden [12][14]. För att konstruera en abstrakt modell av ett system måste utvecklarna analysera och förstå hur koden fungerar. Reverse engineering bör inte blandas ihop med begreppet reenginering (omskapande ingenjörskonst), som handlar om att omstrukturera modellen [12][14]. Reverse engineering respektive reenginering definieras så här: Reverse Engineering is the process of analyzing a subject system to identify the system s components and their interrelationships and create representations of the system in another form or at a higher level of abstraction. Reengineering... is the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form. Chikofsky and Cross, Reverse engineering and design recovery, Computer Society Press 1992 Reverse engineering handlar alltså mer om analys och förståelse medan reenginering handlar om strukturering för att laga brister. Eftersom en omstrukturering vid en stor refaktorisering innebär att strukturen måste ändras på alla nivåer i mjukvaran ingår båda begreppen i processen. Först analyseras och återskapas en modell, sedan omstruktureras den. Processen innebär även att information utöver källkoden kan omstruktureras och förbättras, som till exempelvis dokumentation och testfall. Figur 1 illustrerar processen.

13 . Figur 1. Processen vid en sk. reverse- och reenginering enligt [14]. 4.3 Enkät Del 1: Under djupstudiens gång har jag följt upp den praktiska delen av kursen där en grupp studenter har praktiserat programvaruutveckling i grupp. I mitten av praktikperioden utförde jag en enkätundersökning för att få en bild av vad studenterna ansåg om det program som utvecklades gällande design och behovet av refaktoriseringar. Om man antar att gruppen består av 8 utvecklare som utvecklat ett godtyckligt program under 3 tillfällen, motsvarande 3 * 8 timmar utvecklingstid samt extra planeringstid, blev resultatet enligt följande frågeställningar och svar. På en skala 1-5, där 1 är mycket bra och 5 är mycket dåligt, skulle gruppen svara på hur bra översikt de hade över programmets design/arkitektur. Svar i snitt: 1,9 På en skala 1-5, där 1 är mycket bra och 5 är mycket dåligt, skulle gruppen svara på hur bra kvalitet de ansåg att programmets design/arkitektur höll. Svar i snitt: 2,1 På frågan om hur mycket tid som lades ner på refaktoriseringar per tillfälle svarade 75% 1-2 timmar, och resterande 25% svarade under 1 timme.

14 Ingen i gruppen ansåg att för mycket tid lades ner på refaktoriseringar per tillfälle. Bara en i gruppen ansåg att det behövdes en grundläggande omstrukturering av designen/arkitekturen. Del 2: Under slutet av praktikperioden genomförde jag en andra enkätundersökning som inriktades mer på användningen av designprinciper. Ingen i gruppen ansåg att en grundläggande omstrukturering av designen/arkitekturen behövdes vid det sista labbtillfället. På en skala 1-5, där 1 är mycket liten utsträckning och 5 är mycket stor utsträckning, skulle gruppen svara på i vilken utsträckning som projektet vid något tillfälle drabbats av rigiditet och skörhet. Svar i snitt: 2,6 På en skala 1-5, där 1 är mycket liten utsträckning och 5 är mycket stor utsträckning, skulle gruppen svara på i vilken utsträckning som projektet vid något tillfälle drabbats av överdriven komplexitet. Svar i snitt: 2,6 På en skala 1-5, där 1 är mycket liten utsträckning och 5 är mycket stor utsträckning, skulle gruppen svara på i vilken utsträckning som projektet vid något tillfälle drabbats av onödig repetition av källkod. Svar i snitt: 2,3 På en skala 1-5, där 1 är mycket liten utsträckning och 5 är mycket stor utsträckning, skulle gruppen svara på i vilken utsträckning som projektet vid något tillfälle drabbats av svårbegriplig källkod. Svar i snitt: 2,3 På en skala 1-5, där 1 är mycket liten grad och 5 är mycket stor grad, skulle gruppen svara på i vilken grad som ovanstående problem hade refaktoriserats bort. Svar i snitt: 4,1 På frågan om projektet vid något tillfälle passerat en flaskhals på grund av refaktoriseringar, så att fortsatt utveckling saktat av eller avstannat, svarade 50% ja. Fem av åtta ansåg att det var oundvikligt att problem med stora refaktoriseringar uppstod och att det var svårt att förutse och förebygga designproblem. Två av åtta ansåg att det behövdes en bättre strukturerad process för stora refaktoriseringar.

15 4.4 Resultat Från enkäten kan man dra slutsatsen att de flesta ansåg att programmets struktur höll en tillräckligt bra kvalité och att det inte behövdes en grundläggande ändring av strukturen efter tre utvecklingstillfällen. De flesta ansåg att ca en timme inte var för mycket tid att lägga på refaktoriseringar. Överlag indikerade gruppen under slutet av praktikperioden att det inte förekommit några större designproblem enligt designprinciperna. Gruppen ansåg även att de få designproblem som existerat har refaktoriserats bort i stor grad. Trots detta upplevde många att projektet stannat av på grund av stora refaktoriseringar och majoriteten ansåg att detta var oundvikligt. Av detta kan man enligt mig dra slutsatsen att små problem oundvikligen ackumuleras och bildar större brister i designen efter en tid. 5 Slutsats Vid programvaruutveckling ackumuleras små brister och bilder på sikt större problem som måste refaktoriseras bort. Därför är det viktigt att rutinmässigt genomföra refaktoriseringar för att förhindra att problemen bildar en så kallad Big Ball of Mud. Det optimala sättet att hålla nere den tekniska skulden vore om all källkod följde designprinciperna till punkt och pricka. I praktiken är detta dessvärre svårt att följa och ofta tvingas utvecklare kompromissa i designvalen föra att kunna leverera programvara till utsatt tid. Ofta infinner sig ett tillstånd av oordning förr eller senare i utvecklingsprojekt och fortsatt utveckling hindras till dess att en stor refaktorisering genomförts. Stora refaktoriseringar ställer andra krav på utvecklarna vad gäller uppdelning och planering. För att hitta en bättre lämpad design är det ibland nödvändigt att analysera och återkonstruera en designmässig översikt av programvaran. Då kan man använda sig av en så kallad reverse- och reengineering-process. Lämpligtvis så läggs extra mycket kraft på att slutföra en stor refaktorisering då ett projekt blir svårhanterligt och fortsatt utveckling har saktat av till följd av brister enligt designprinciperna. Det är viktigt att kunna identifiera och motivera behovet av en stor refaktorisering då det ofta kommer smygande utan att någon märker det. Det kan också vara svårt att tidsuppskatta omfattningen av en stor refaktorisering och ibland kan den innebära ett utvecklingsstopp för övriga utvecklingslinjer. Det är emellertid av stor vikt att programvaran håller god kvalitet för att underlätta fortsatt utveckling och i det långa loppet brukar refaktoriseringen betala sig själv i både tid och pengar.

16 Referenser [1] M. Fowler, Refactoring: improving the design of existing code, Addison-Wesley, [2] I. Sommerville, I. Software Engineering. Addison-Wesley, 6th edition, [3] Chromatic, Extreme Programming Pocket Guide - Team-Based Software Development, O Reilly, [4] R. Martin, Agile Software Development - Principles, Patterns and Practices, Prentice-Hall, [5] B. Hughes, Software Project Management, McGraw-Hill, [6] E. Koffman, Data Structures - Objects, Abstraction and Design using Java, John Wiley and Sons Ltd, [7] M. Lippert, Large Refactorings in Agile Software Development, Position Paper for the Workshop on Beyond Green-Field Software Development: Strategies for Reengineering and Evolution at OOPSLA, University of Hamburg & it-wps, Ltd, [8] S. Koopmanschap, Refactoring Your Application, April [9] B. Foote & J. Yoder, Big Ball of Mud, Technical report, University of Illinois at Urbana-Champaign, Dept. of Computer Science, Technical Report WUCS [10] S. Gorts, Refactoring in the Large, November [11] J. Atwood, Coding Horror - Paying down your technical debt, February [12] E. Chikofsky and J. Cross II, Reverse engineering and design recovery: A taxonomy, In Robert S. Arnold, editor, Software Reengineering, pages 54 58, IEEE Computer Society Press, 1992.

17 [13] W. Cunningham, Ward Explains Debt Metaphor, Februari [14] S. Demeyer, Object Oriented Reengineering Patterns, Square Bracket Associates, 2009

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

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012 DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012 Innehåll Testning med JUnit Refactoring Några designprinciper JUnit Ramverk i Java för testning av Java-klasser Utvecklat av Gamma

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

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv? När skall man använda implementationsarv? Föreläsning 5 När skall implementationsarv användas? The Open-Closed Principle (OCP) Liskov Substitution Principle (LSP) Implementationsarv är en konstruktion

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

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

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

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

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

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

Introduktion. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Introduktion. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Introduktion Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart? Testbart? Maintainable?

Läs mer

Introduktion. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Introduktion. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Introduktion Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart? Testbart? Maintainable?

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

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Den här veckan Måndag: Retrospektiv övning, övning på gamla tentauppgifter Tisdag (idag): Retrospektiv

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

Iterativ mjukvaruutveckling. 1DV404 HT14 Jesper Andersson

Iterativ mjukvaruutveckling. 1DV404 HT14 Jesper Andersson Iterativ mjukvaruutveckling 1DV404 HT14 Jesper Andersson Om kursen ü 9-10 föreläsningar ü Kurslitteratur: Larman, Craig Applying UML and Patterns, 3rd edition senaste upplagan ü Kursansvarig och föreläsningar:

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

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

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

Chaos om datorprojekt..

Chaos om datorprojekt.. Systemutveckling och användbarhet Användarcentrerad systemutveckling, gränssnitt och prototyper. Referens till avsnitt i kursboken Dix kapitel 6 Gulliksen, Göransson: Användarcentrerad systemdesign, kapitel:

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

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

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

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018 Objekt-orienterad programmering och design DIT953 Niklas Broberg, 2018 Kursteamet Niklas Broberg kursansvarig, föreläsare, examinator Johannes Åman Pohjola föreläsare Assistenter: Karin Wibergh Sarosh

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

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

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

Användarcentrerad Systemutveckling

Användarcentrerad Systemutveckling Användarcentrerad Systemutveckling Människadatorinteraktion (MDI) Inst. för informationsteknologi http://www.it.uu.se/edu/ course/homepage/hci/ ht10 Användarcentrerad systemutveckling, gränssnitt och prototyper.

Läs mer

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

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018 Objekt-orienterad Programmering och Design TDA552 Alex Gerdes, HT-2018 Kursteamet Dr. Alex Gerdes examinator och föreläsare (Dr. Niklas Broberg föreläsare) Handledare: Sólrún Halla Einarsdóttir Yazan Ghafir

Läs mer

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod Systemutveckling TDP029 Systemutveckling Annika Silvervarg COIN/HCCS/IDA Systemutveckling kallas processen att ta emot en beställning på ett datorsystem, skriva en strukturerad kravspecifikation på systemet,

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

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

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

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv

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

Chaos om IT-projekt..

Chaos om IT-projekt.. Användarcentrerad systemutveckling, gränssnitt och prototyper. Lämplig extraläsning Gulliksen, Göransson: Användarcentrerad systemdesign, Studentlitteratur, kapitel: 4, 5, 6, 7, 8, 9 (Bredvidläsning) Syfte

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

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design Alex Gerdes, 2018

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design Alex Gerdes, 2018 Dependencies High cohesion, low coupling Objekt-orienterad programmering och design Alex Gerdes, 2018 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart?

Läs mer

Projektkaos. Chaos-rapporten. 34% av projekten avslutades i tid och enligt budget... ... 66% misslyckades!

Projektkaos. Chaos-rapporten. 34% av projekten avslutades i tid och enligt budget... ... 66% misslyckades! Projektkaos. Chaos-rapporten 34% av projekten avslutades i tid och enligt budget...... 66% misslyckades! 1 Standish Group, 2003 (www.standishgroup.com) Praxis Hantera krav Använd komponentarkitekturer

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

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

HT1 2015, FÖRELÄSNING

HT1 2015, FÖRELÄSNING Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2015, FÖRELÄSNING 2 Förra föreläsningen Kursens upplägg och tidsbudget Mål & Syfte med kursen Substantivmetoden Designprinciper

Läs mer

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Kent Petersson EMW, Mölndal Datavetenskap, Chalmers epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp

Läs mer

Djupstudie i parprogrammering

Djupstudie i parprogrammering Djupstudie i parprogrammering Abstrakt P. Abrahamsson D05, Lunds Tekniska Högskola dt05pa1@student.lth.se P. Norlander D07, Lunds Tekniska Högskola dt07pn3@student.lth.se 2011-02-25 Denna studie handlar

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

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss

Läs mer

HAND TRACKING MED DJUPKAMERA

HAND TRACKING MED DJUPKAMERA HAND TRACKING MED DJUPKAMERA ETT PROJEKT I TNM090 - SOFTWARE ENGINEERING Rasmus KARLSSON Per JOHANSSON Erik HAMMARLUND raska293@student.liu.se perjo020@student.liu.se eriha891@student.liu.se 2014-01-14

Läs mer

Designmönster - EMW. Kent Petersson epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.

Designmönster - EMW. Kent Petersson epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers. Designmönster - EMW Kent Petersson epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp arbetar på Inst. för Datavetenskap, Cth & Gu, 50% och Software

Läs mer

Introduktion. Grundkursen

Introduktion. Grundkursen Föreläsning 1 Introduktion Utveckla för förändring 1 Grundkursen I grundkursen fick ni: lära er de grundläggande principerna för objektorienterad programmering lära er de grundläggande konstruktionerna

Läs mer

RUP - Rational Unified Process

RUP - Rational Unified Process IBM Software Group RUP - Rational Unified Process Eva Hådding eva.hadding@se.ibm.com 1 Projektkaos. Chaos-rapporten 28% av projekten avslutades i tid och enligt budget. 49% av projekten drog över de ursprungliga

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

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

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

Föreläsning 1. Introduktion Utveckla för förändring

Föreläsning 1. Introduktion Utveckla för förändring Föreläsning 1 Introduktion Utveckla för förändring Grundkursen I grundkursen fick ni: lära er de grundläggande principerna för objektorienterad programmering. lära er de grundläggande konstruktionerna

Läs mer

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Dependencies High cohesion, low coupling Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt?

Läs mer

Teststrategier och Testcertifiering. Per Strandberg, Maj 2013

Teststrategier och Testcertifiering. Per Strandberg, Maj 2013 Teststrategier och Testcertifiering Per Strandberg, Maj 2013 1 Lite om Test i Allmänhet och ISTQB Certifiering Mål med testning? Förebygga fel Hitta fel eller risk Underlätta och ge stöd vid utveckling

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 (DRY, SRP, OCP, DIP) (, ) Att göra denna och nästa vecka:

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

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Modulär design Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Separation of Concern principle Do one thing do it well. Separation of Concern är inte specifikt

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.

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

Att införa Extreme Programming genom processförbättring

Att införa Extreme Programming genom processförbättring Att införa Extreme Programming genom processförbättring Johan Thiborg-Ericson Vahagn Baghomian 14-02-28 Sammanfattning Syftet med denna studie är att studera hur agila metoder uppkommer som en naturlig

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

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

Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Vad är ett bra program? I kursen pratar vi om bra kod utifrån ett utvecklar-perspektiv, dvs det som gör koden lätt

Läs mer

Fungerar Agila principer i alla typer av projekt?

Fungerar Agila principer i alla typer av projekt? Fungerar Agila principer i alla typer av projekt? Wenell Management AB Vad är Agile? Agile kan sägas vara ett paraplybegrepp. Det är inte en systemutvecklingsmetodik i sig utan snarare en uppsättning värderingar,

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

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

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

Objektorienterad Systemutveckling Period 3

Objektorienterad Systemutveckling Period 3 Objektorienterad Systemutveckling 2 2018 Period 3 kurskod C1OB2B Innehåll Kursintroduktion Kursmaterialet finns temporärt även på http://www.gidenstam.org/hb/oosu2 KURSINTRODUKTION Kursintroduktion Inblandade

Läs mer

OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram

OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram 2EMHNWRULHQWHUDG5HDOWLGVSURJUDPPHULQJ Föreläsning 7 OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram - Kravspecifikationer, användningsfall, systemarkitektur - Analysfas vad är analys?

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

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram Analys och design med hjälp av CRC 83 Klassdiagram Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. Reellt,

Läs mer

SKOLFS. beslutade den XXX 2017.

SKOLFS. beslutade den XXX 2017. 1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning

Läs mer

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg Programmering Seminarier i datavetenskap, datorteknik och informationsteknik Niklas Broberg niklas.broberg@chalmers.se 2018-09-27 Hur många från Datavetenskap? Datateknik? Informationsteknik? Översikt

Läs mer

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA CDC6600 - en jämförelse mellan superskalära processorer av: Marcus Karlsson Sammanfattning I denna rapport visas konkret information om hur den första superskalära processorn såg ut och hur den använde

Läs mer

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg Programmering Seminarier i datavetenskap, datorteknik och informationsteknik Niklas Broberg niklas.broberg@chalmers.se 2017-09-21 Hur många från Datavetenskap? Datateknik? Informationsteknik? Översikt

Läs mer

Filhanterare med AngularJS

Filhanterare med AngularJS Filhanterare med AngularJS Författare: Filip Johansson Peter Emilsson Oskar Georgsson Christian Nilsson Datum: 2014-03-26 1 Sammanfattning Filhanterare med AngularJS är en filhanterare skapad för Sigma

Läs mer

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers. Programmering Seminarier i datavetenskap, datorteknik och informationsteknik Niklas Broberg niklas.broberg@chalmers.se 2015-09-24 Hur många från Datavetenskap? Datateknik? Informationsteknik? Översikt

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

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Lunds Tekniska Högskola Datavetenskap Ulf Asklund Tentamen EDA061 2016 06 03, 14:00 18:00 Tentamen i Objektorienterad modellering och design Tentamen består av en teoridel om totalt 5 poäng och en problemdel

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

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

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015 Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

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

Projektuppgift.

Projektuppgift. Projekt Projektuppgift Designa och implementera ett webbaserat gränssnitt för att söka information i en befintlig databas. Webssidan ska vara komplett med navigering, överblick, sökning och strukturerad

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program. Föreläsning 2 Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program. Vår process Kravbeskrivning (3 dagar). Enkel form av användningsfall (use cases). Analys

Läs mer

TDDI02. Programmeringsprojekt, Föreläsning 2. Filip Strömbäck. Med utgångspunkt i tidigare slides av Jonas Lindgren

TDDI02. Programmeringsprojekt, Föreläsning 2. Filip Strömbäck. Med utgångspunkt i tidigare slides av Jonas Lindgren TDDI02 Programmeringsprojekt, Föreläsning 2 Filip Strömbäck Med utgångspunkt i tidigare slides av Jonas Lindgren På denna föreläsning: Dokument - kravspecifikation, projektplan Vad är klok design? Projektarbete

Läs mer

Viktiga programmeringsbegrepp: Kontrakt

Viktiga programmeringsbegrepp: Kontrakt jonas.kvarnstrom@liu.se 2017 Viktiga programmeringsbegrepp: Kontrakt Vad lovar {klassen, metoden, fältet}? Kontrakt 2 Kontrakt: Överenskommelse som anger Vad som ska tillhandahållas Vad som förväntas i

Läs mer

Utvecklingsm odell och utvecklingsm etod för att skapa god kom m unikation

Utvecklingsm odell och utvecklingsm etod för att skapa god kom m unikation Kurs: Designm etodik, 3 p Delm om ent: Datum : 2 0 0 3-1 2-1 8 Utvecklingsm odell och utvecklingsm etod för att skapa god kom m unikation Nils Järgenstedt [ it3 jani@ituniv.se] Innehållsförteckning INLEDNING...

Läs mer

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

Kodkomplexitet i agil utveckling. Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010 Kodkomplexitet i agil utveckling Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010 Sammanfattning Denna studie avser att undersöka hur uppmätning av kodkomplexitet kan användas för

Läs mer

Introduktionsmöte Innehåll

Introduktionsmöte Innehåll Introduktionsmöte Innehåll Introduktion till kursen Kursens mål och innehåll Undervisning Datavetenskap (LTH) Introduktionsmöte ST 2019 1 / 14 EDAA01 Programmeringsteknik - fördjupningskurs Ingen sommarkurs

Läs mer

Linköpings universitet 1

Linköpings universitet 1 Vanliga faser TDP029 Systemutveckling Annika Silvervarg COIN/HCCS/IDA Analys Vad är problemet? Uppgift Vad är det för arbetsuppgifter och hur utförs de? Användarbehov Vad behöver användaren/användarna?

Läs mer

PROGRAMMERINGSMETODIK

PROGRAMMERINGSMETODIK PROGRAMMERINGSMETODIK 1 Metaforer för programmering Hierarki, modularitet, överblick Programbyggnadskunskap Utvecklingsprocessen Kategorier av programspråk Programmering som allmän konst Metaforer för

Läs mer

Seminarierna Instruktioner. Övningarna Viktiga relationer

Seminarierna Instruktioner. Övningarna Viktiga relationer Objektorienterad modellering och design (EDAF25) Föreläsning 3 Seminarierna Instruktioner Agenda UML objekt och sekvensdiagram Design smells Designprinciper (DRY, SRP, OCP, DIP) Att göra denna och nästa

Läs mer