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

Storlek: px
Starta visningen från sidan:

Download "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"

Transkript

1 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 S. Marcus Jacobsson D03, Lunds Tekniska Högskola d03mj@efd.lth.se S. Magnus Weinberg D03, Lunds Tekniska Högskola d03mw@efd.lth.se Version

2 Denna djupstudie tar upp vikten av simple code and design i ett XP projekt. Här tas det bland annat upp hur bad code identifieras och en kort sammanfattning av några av de viktigaste mönsterna i XP. Rapporten tar även upp en granskning av kod och design från en av utvecklingsgrupperna som läste kursen Programmering i grupp VT 2006 vid Lunds Tekniska Högskola. 2

3 Innehållsförteckning: 1 INTRODUKTION INLEDNING BAKGRUND TEORI OM SIMPLE CODE AND DESIGN SIMPLE CODE AND DESIGN DESIGN MÖNSTER Observer Singleton Command Abstract server AGILE DEVELOPMENT MOT BIG UPFRONT DESIGN METAFORER BAD CODE SMELLS Vanliga tecken på dålig kod Lösning i agila projekt KONSEKVENSERNA AV DÅLIG DESIGN VIKTEN AV REFAKTORISERING OCH TEST DRIVEN DEVELOPMENT GRANSKNING AV SIMPLE CODE AND DESIGN I XP TEAM GRANSKNING AV THE BLACK TEAM Mönster i koden Onödig komplexitet Agile design eller big upfront design? Bad code Utvecklingstopp Påverkan av refaktorisering Efter refaktorisering SAMMANFATTNING ETT EXTRA TACK TILL REFERENSER

4 1 Introduktion 1.1 Inledning Detta är en djupstudie i kursen "Coaching av programvaruteam" på LTH. Djupstudien handlar om hur "Simple Code and Design" kan användas. Rapporten tar även upp vikten av att söka efter Bad Code i projekt. Djupstudien redovisar även resultatet av en analys av kod skriven av the black team och påpekar tecken på dålig kod. the black team är ett alias för en av utvecklingsgrupperna i kursen "Programmering i Grupp. Rapporten är inriktad på hur dålig kod ska upptäckas och lite om riskerna för vad som händer om man ignorerar det faktum att det finns dålig kod. Förhoppningen är att läsaren ska få en bättre inblick om vikten av bra kod i agila projekt. 1.2 Bakgrund I all programmering finns det vissa ramar man borde hålla sig innanför för att undvika onödigt arbete, fel och komplexitet. För att försöka minimera problem som onödigt komplex kod och felaktig design försöker programmeraren att använda sig av tekniker ur "Simple Code and Design" när han ska utveckla programmet och letar ständigt efter felaktigheter med hjälp av sin kunskap om "Bad Code Smells". Dessa finns i varierande utsträckning i alla projekt men med hjälp av kunskap och erfarenhet så kan de undvikas ganska effektivt. Med automatiska testsviter och tekniker som "Test First" så kan dagens utvecklare relativt enkelt refaktorisera felaktigheter och fortfarande vara säkra på att koden de skrivit fortfarande håller åtminstone lika hög kvalité som föregående versioner av koden. Huruvida ett stycke kod sedan kan anses vara enkel eller lättförståelig kan variera beroende på programmerarens kunskap och erfarenhet av tidigare sedda lösningar på problemet. I många fall kan det verka som att koden måste vara komplex för att uppnå rätt funktionalitet men detta stämmer oftast inte. 2. Teori om simple code and design 2.1 Simple code and design Med simple code and design menas en design som är enkel att förstå och samtidigt löser det problem som utvecklaren ska implementera. Detta utan att införa bad code samt någon onödig komplexitet. Den ska inte förväxlas med kod som är så enkel att den blir dum och då är omöjlig att arbeta vidare på. Designmönster är ett utmärkt sätt att genomföra simple design, man bör dock vara medveten om att det ger onödig komplexitet om man använder designmönster in absurdum. Vad som är simple design kan även variera beroende programmerarnas kompetens, en design som är enkel för en expert kan verka svårförståelig och komplex för en nybörjare. 4

5 Ett bra sätt att tänka när man ska skapa en design är att se till att man använder sig av tre grundläggande tankesätt ur XP: Consider the Simplest Thing That Could Possibly Work Se till att använda den enklaste lösning som uppfyller de kraven som är ställda. Var dock uppmärksam på att det inte alltid är den mest basala lösningen som är den bästa, tänk: simple, not stupid. Den enklaste lösningen är inte nödvändigtvis den lösning som är lättast att ändra. En lösning som är väldigt dynamisk innehåller ofta onödigt komplexitet. Enkel design betyder inte heller att det ska vara så få rader kod som måste ändras för att ny funktionalitet ska kunna implementeras. Ex. Det är bättre att använda en textfil för att lagra data än en databas om textfilen räcker för att täcka kraven på lösningen. You Aren t Going to Need It. Lägg inte ner kraft på att förutse framtida behov utan se istället till att nuvarande behov är tillgodosedda. Spenderar man tid på att förutspå framtiden så riskerar man att implementera funktionalitet som kunden inte vill ha. Once and Only Once. Istället för att lägga till duplicerad funktionalitet så är det bättre att generalisera funktionen. Första gången går det bra att göra något mindre generellt. Andra gången funktionaliteten behövs så får man refaktorisera och anpassa koden så att den kan uppfylla båda kraven. Duplicerad kod kostar mer att underhålla och uppdatera ( double maintenance ). Dubbel funktionalitet gör även projektet svårare att överskåda. 2.2 Design mönster För att underlätta för team med många utvecklare så använder man sig oftast av design mönster. Detta är mönsterlösningar som många utvecklare känner till. För många av de vanligaste problemen finns det bra mönster som underlättar implementering av funktionalitet. Detta sparar även utvecklarna mycket tid då de inte behöver uppfinna hjulet flera gånger. Eftersom XP kräver att utvecklarna är insatta i alla delar av koden så är det lättare om standard mönster används då utvecklarna inte behöver sätta sig in i en komplex lösning. Även om mönster kan lösa många problem så ska man inte använda mönster i onödan. Kan man uppnå tillräckligt bra resultat för att implementera en story utan att använda ett komplext mönster så är detta att föredra. Nedan beskrivs några mönster som kan anses passa väl in i ett agilt projekt, detta eftersom alla mönsterna följer SRP. Observer har valts då den är lämplig vid beroendekedjor som är viktiga att förstå t. ex. när man vill använda tabeller i AWT/Swing. Singleton är bra då man bygger en enkel databas och är ett bra exempel på hur en statisk referens till en klass kan användas. Command är ett exempel på hur klasser med ett gemensamt användningssätt kan fungera. Abstract server valdes pga. sin liket till Template och eftersom den beskriver arv på ett tydligt sätt, vilket är viktigt i all OO programmering. För mer information se Agile Software development av Robert C. Marting. 5

6 2.2.1 Observer Observer är ett av de mönster som kan vara svårt att förstå i början. Men när man väl lärt sig det så är det lätt att få det att passa in i ett projekt. Exempel på ställen där det kan tänkas fungera är ett excel liknande program där man använder mönstret för att hantera celler som uppdateras. Ett annat exempel kan vara att använda observer-mönstret för att utveckla ett gui med test first. Problemet med observer-mönstret är att det är svårare att förstå programmet och det blir svårare att söka. Detta strider mot Simple design. Därför bör man vara aktsam när man väljer att implementera observer-mönstret i XP. Men det är inte ovanligt att trots att det kan vara en komplex lösning så kan det vara den lättaste lösningen för att implementera ny funktionalitet. Fördelen med observer-mönstret är att det är lätt att lägga till en ny observerare utan att göra några ändringar i de objekt som blir observerade. Detta är väldigt viktigt i agila projekt då det ger en svag koppling mellan olika klasser Singleton I objektorientering finns det en riklig mängd av samband och förhållandesätt. Utav dessa förhållanden är ett av de mest grundläggande förhållandet mellan klasser och objekt där det brukar finnas ett en till flera förhållande mellan en klass och många objekt. Men sen har man ju situationer där man inte kan eller vill tillåta mer än ett objekt per klass. Ett av mönsterna som kan användas för att lösa ett sådant problem är singletonmönstret. En singleton skapar som mest ett objekt och håller sedan en statisk referens till sig själv som inte ska kunna förstöras. En singleton saknar alltid en konstruktor och ger ifrån sig en referens till sig själv genom en statisk metod ofta kallad instance. Exempel på bra tillfällen att använda singleton är Factory klasser eller då man vill ha en central hanterare. Detta mönstret kan användas för att hantera en global databas. Där det inte behövs mer än en instans som ska kunna nås i alla delar av programmet. Detta underlättar för utvecklare då de inte behöver skicka med en referens till klassen i projektet. Dock strider detta mot lösa kopplingar mellan klasserna, vilket är något man bör sträva efter i XP Command Ett av de mest lättförståeliga och användbara mönstren är just commandmönstret. Detta mönster använder sig av några av de mest grundläggande idéerna i objektorienterad programmering till grundstomme. Mönstret ger en förvånansvärt bra överskådlighet även i lite mer avancerade vidareutvecklingar. Detta mönster använder sig av ärvning eller interface för att uppnå en gemensam grund. Denna grund utnyttjas sedan för att skapa ett gemensamt sätt att använda en metod hos klasserna. Genom att bara ha en operation do (eller motsvarande) så skapas väldigt lösa kopplingar mellan klasserna. Detta är väldigt viktigt i agila metoder för att undvika att tester fallerar samt svåra merge konflikter. Command mönstret underlättar användning av klassen genom att påtvinga SRP. 6

7 2.2.4 Abstract server Möjligheten att enkelt kunna bygga ut, ersätta samt att lägga till klasser är några av de mest centrala delarna i objektorienterad programmering. Utan dessa möjligheter kommer ett projekt ha betydligt svårare att bli slagkraftigt i dagens mjukvaruindustri. Detta gör att användaren lätt kan lägga till ny funktionalitet genom att implementera ett interface. Eftersom klasserna som ska använda funktionaliteten bara känner till ett interface så behövs det inte göra någon ändring i de användande klasserna. Detta är en viktig del i XP då det läggs till ny funktionalitet utan så mycket tanke på design. Detta bidrar till lösa kopplingar mellan klasser vilket också är viktigt i XP. Ett praktiskt exempel på interface är i Sun s java awt där de flesta klickbara komponenter kan lägga till en eller flera lyssnare utan att specifikt deklarera deras klasser. 2.3 Agile development mot big upfront design I agila utvecklingsmetoder förespråkas en enkel liten design i början av ett projekt för att uppnå maximal flexibilitet. Denna grunddesign ska sedan utvecklas med tiden och till sist vara komplett. Detta fungerar mycket väl om både projektet och teamet är litet men för ett enterpiseprojekt med väldigt många utvecklare och en striktare krav-profil kommer detta ofta vara mindre slagkraftigt. Big upfront design innebär istället att hela projektets design fastslås innan någon funktionalitet implementeras. Problematiken som kommer med big upfront design är för det första att designen blir svårare att ändra för att implementera nya features samt att dålig design kan ge onödig komplexitet och duplicerad kod. Däremot kommer big upfront design ge en klarare bild över designen och ge en renare kod vid första implementeringen. Men allt eftersom projektet utvecklas och nya krav tillkommer så kan även big upfront design få bad code och behöva refaktoriseras. Men denna metodik tar inte upp refaktorisering vilket ofta leder till sämre kod och ökade kostnader för implementering. Detta till skillnad från agila metoder som tar upp refaktorisering och bad code som en naturlig del av utvecklingen. Här växer designen fram som ett fågelbo där man tar en bit, implementerare och upprepar detta tills det att designen uppenbarar sig. Detta genererar ofta mer bad code under implementeringen, men eftersom utvecklarna refaktoriserar efteråt så implementeras detta aldrig i den slutgiltiga produkten. Detta är förvisso idealet och efterföljs inte alltid. Fördelen med agila metoder är att det är lättare att svänga när kunden ändrar sina krav. Viktigt att komma ihåg i båda fallen är att en design dels måste vara tillräckligt övergripande för att täcka ett projekts användning och dels kan behöva ändras eller göras om då förändringar sker. I modern spelutveckling (speciellt online spel) så utvecklas spelen under hela spelet livslängd. Här passar de agila metoderna mycket bra. Det är nästan omöjligt att använda big upfront design eftersom kraven ändras regelbundet. I enterpriseprojekt passar exempelvis big upfront design bättre. Här har ofta kunden bättre definierade krav och det sitter fler utvecklare som ska koordineras. Big upfront design kan också lämpa sig bättre om både hårdvara och mjukvara ska utvecklas. 7

8 2.4 Metaforer Metaforer är ett kraftfullt verktyg i XP för att underlätta kommunikationen mellan utvecklare och kunder. Men det är även ett hjälpmedel för att göra koden lättare att förstå 1. Det handlar om att använda metaforer när utvecklare döper klasser och variabler. Det vanligaste är att man använder sig av naive metaphors, typexempel är att en klass som hantera en tävling i Enduro kallas för Race eller en klass som håller information om en förare kallas för driver. Utöver detta så väljer många utvecklare att använda mer tekniska metaforer för att beskriva arkitekturen, som resultat delen i enduro kallas ofta för server medan delen för att registrera tider kallas för klient. Genom att använda metaforer i namngivningen så blir det lättare att förstå kopplingen mellan koden och verkligenheten. Problemet är att metaforer inte alltid hjälpa teamet. En metafor som är självklar för någon kan vara helt obegriplig för en annan. Ett annat problem är att man ibland använder sig av metaforer som inte beskriver problemet tillräckligt bra. Detta kan leda till att utvecklarna väljer fel väg när de ska implementera ny funktionalitet vilket kan leda till en onödigt komplex eller i värsta fall en icke fungerande lösning. 2.5 Bad code smells Det bästa sättet att förstöra ett projekt är att ha för mycket dålig kod. Ett mantra som utvecklare bör använda sig av är bad code smells. Trots att dålig kod kan ställa till mycket problem så finns det i stort sett alltid i ett projekt. Det vanligaste sättet att dölja komplex kod är att använda kommentarer för att förklara vad den gör. Kommentarer är parfym till koden för att dölja stanken. Många gånger så beror dålig kod i XP på att utvecklare inte har en bra överblick över projekt eller inte vågar ändra kod de inte varit med och skrivit. Det krävs mycket mod för att ändra någon annans dåliga kod. Men det krävs även mycket kunskap för att upptäcka dålig kod. Det bästa sättet att undvika dålig kod i XP är att refaktorisera både före och efter att en story implementeras. Det är också viktigt att utvecklarna läser igenom koden efter varje iteration. Genom att läsa igenom koden så får utvecklarna en bättre överblick över programmet och kan då göra de ändringar som krävs. För att underlätta utveckling är det även bra att ha tillgång till ett UMLdiagram. För mer information om bad code så kan ni läsa A Taxonomy for Bad Code Smells" 2 och Bad smells in code Vanliga tecken på dålig kod Några av de vanligaste problemen är stora klasser, duplicerad kod och stora metoder. Large Classes: Kommer av att en design inte ändras då det behövts trots att nya features implementerats. Detta leder till att klasser växer sig enorma och svåröverskådliga. Shotgun surgery: Detta innebär att man måste göra små ändringar i många metoder som ligger i många klasser för att implementera ny funktionalitet

9 Large methods: Det är vanligt att det skapas långa metoder i XP. Ny funktionalitet ska hanteras men istället för att bryta ut den i en dynamisk metod så lägger man in kod i de metoder som redan existerar. Duplicated code: Innebär ett misslyckande med avseende på Once and Only Once. Man har antingen haft för bråttom eller inte insett att i stort sett samma sak redan görs på andra ställen i koden. Detta är ett vanligt fel hos oerfarna utvecklare. Lazy Classes: Detta är en klass som inte innehåller någon väsentlig egen funktionalitet utan istället bara delegerar ansvar till andra klasser. Divergent change: Enligt Single Responsibility Principle (SRP) ska varje klass ha ett Väldefinierat ansvarsområde. Men med tiden kan ibland klasser få bredare och bredare ansvar. När detta skett borde klassen delas upp i flera olika andra klasser då ansvarsområdet annars inte kan anses vara väldefinierat. Genom att dela upp funktionalitet i flera klasser minskas även risken för svåra merge konflikter. Message chains: Om man har en klass som begär ett object från en annan klass som i sin tur måste begära objektet från en tredje osv. Detta kallas message chains och är ett tecken på man kan ha ett fel i sin design. Comments: Kommentarer fungerar som deodorant för koden (undantaget javadoc). Om det behövs kommentarer i koden för att göra den begriplig så har man ofta onödig komplexitet eller en dålig kod standard. Istället för att skriva beskrivande kommentarer ska man ändra koden så att den blir läslig. Long parameter lists: Om en metod tar för många parametrar så blir den svårare att använda. En metod behöver inte få all information för att lösa uppgiften, bara tillräckligt för att hitta informationen. Temporary fields: Ibland lägger utvecklare variabler som enbart används lokalt i en metod som attribut. Detta kan uppstå om utvecklare inte refaktoriserar ordentligt efter att de gjort ändringar. Ex. Ett attribut kan ha används i två metoder och så har den ena metoden plockats bort. Dead code: Kod som inte används av projektet ska plockas bort. Detta är ett vanligt problem om man använder agila utvecklingsmetoder där utvecklarna inte refaktoriserar ordentligt eller inte har tillräcklig bra kunskap om arkitekturen och koden. Static coupled classes: Om klassernas relationer är väldigt statiska så leder detta ofta till svåra merge konflikter och problem som är svåra att lösa. Kopplingar mellan klasser ska därför vara väldigt lösa och dynamiska. Lösa kopplingar mellan klasser har varit ett av de starkaste tecken på väldesignad kod i över 30 år

10 2.5.2 Lösning i agila projekt För att minska mängden bad code i projektet så måste utvecklarna refaktorisera ofta. Det krävs att det refaktoriseras både före en story implementeras och efter den checkas in. Detta är svårt för utvecklare som är nya till XP. Utvecklarna måste ha mod att våga ändra både i metoder och också klasser men även arkitekturen. Men för att kunna göra refaktoriseringar så krävs det att utvecklarna har bra insikt i vad koden gör och hur programmet fungerar. Det krävs även en heltäckande test svit för att undvika dålig kod. 2.6 Konsekvenserna av dålig design I XP görs ingen inledande design av arkitekturen. Filosofin är en story i taget och teamet ska implementera den på det lättast tänkbara sättet. Detta medför att designen blir hackig och behövs refaktoriseras. Målet i XP är att utvecklarna ska refaktorisera för en story påbörjas och efter den checkas in. Detta är något som många utvecklare har svårt för, speciellt under tidspress. Brist på refaktorisering och bristande kunskap om projektet leder till att designen blir sämre och mängden dålig kod ökar. Detta leder till att det blir svårare att implementera ny funktionalitet och det leder i sin tur till att det tar längre tid att bli klar med en ny story. Detta medför i sin tur till att kostnaderna för att implementera ny funktionalitet ökar. Om utvecklarna trots detta inte gör något åt problemet så riskerar hela projektet att fallera då det inte längre går att implementera någon ny funktionalitet och det blir för svårt att göra en refaktorisering för att åtgärda problemen. 2.7 Vikten av refaktorisering och Test Driven Development I de flesta projekt finns det åtminstone några ställen med "Bad Code Smells" men där ingen förändring har skett pga. antingen tidsbrist eller brist på förståelse. Det ända sättet att få bort dessa "Bad Smells" är att refaktorisera men många gånger finns det en motvilja mot att göra detta pga. risken att man förlorar funktionalitet. Denna motvilja beror på misslyckad TDD då testerna (om det nu finns några) inte tillräckligt täcker det ställe där det behövs refaktoriseras. TDD har många andra fördelar men den största är att försäkra sig om att koden man skrivit verkligen utför det man förväntar sig av den och inget annat. I TDD använder man test first eftersom man oftast inte vet exakt vad koden kommer eller inte göra förrän man testat att använda den. TDD tvingar även en utvecklare att tänka innan han börjar koda vilket kan undvika många problem som annars kan orsaka onödig komplexitet som sedan behöver refaktoriseras bort. If you want to refactor, the essential precondition is having solid tests. -- M. Fowler 10

11 3 Granskning av simple code and design i XP team 3.1 Granskning av The black team 5 En utförlig analys av teamets kod gjordes och resultatet av denna analys finns beskriven nedan( ). Efter denna refaktorisering gjordes ytterligare en analys i vilken effekterna av refaktoriseringen beskrivs( ) Mönster i koden Utvecklarna har valt att bara implementera ett av de mönster vi har tagit upp i rapporten. Detta kan dels bero på bristande kunskaper om mönster och hur de ska implementeras. Det kan även bero på att de känner sig stressade och ovana med utvecklingsmetodiken. Det mönster de valt att implementera är ett av de viktigaste men även det enklaste mönstet, nämligen Template method. De har skapat en abstrakt klass som de kallar Race och sedan låter de alla typer av race utöka denna klass. Exempelvis MarathonRace, LapRace och StageRace. Detta har gjort att det är väldigt lätt att implementera en ny racetyp i programmet. Utvecklarna använde sig även av Singleton mönstret när de skulle implementera sin databas. De har skapat en klass Database som bygger på en statisk metod instance som returnerar databasen vilket följer Singleton mönstret Onödig komplexitet Något direkt tecken på onödig komplexitet har vi inte funnit i koden. Deras design är lätt att överblicka men p.g.a. att de saknar mönster, tester och har mycket dålig kod så är det svårt att implementera ny funktionalitet Agile design eller big upfront design? Gruppen har en väldigt agil design. De har inte haft någon direkt design av projektet vilket kanske borde ha gjorts när de refaktoriserade datastrukturen första gången. Även XP kräver en viss design för att underlätta vidareutvecklingen Bad code Detta är gruppens stora problem. Det är väldigt mycket tecken på dålig kod. Detta är troligen också den stora anledningen till alla problem med deras tester. I detta avsnitt kommer det att ges exempel på dålig kod i teamets projekt. Large Classes Database Denna klass är större än nödvändigt och bryter även mot SRP. RegisterGUI Denna klass är enorm, den är 16kbyte stor vilket är mycket större än rekommenderat. Large methods ResultCreator metoden readfromfilestodb är väldigt stor. RegisterGUI BuildTable är stor och ostrukturerad. Long parameter list ResultCreator readfromfilestodb och processinputfiles har långa parameter listor

12 Lazy Classes Racer Är en String i fårakläder Duplicated code Database Metod för sortering enligt vem som vinner I ett varvlopp. Denna funktionalitet ska ligga i LapRace klassen. Temporary fields Enduro EnduroVersion är public och används bara på ett ställe i koden. Comments ResultCreator readfromfilestodb har mycket kommentarer och har mycket onödig komplexitet. FileComparer isequal har 5 kommentarer och är onödigt komplex. Dead code Sorter Saknar fullständigt funktionalitet. Database Metod har inparameter som aldrig används. Racer Innehåller metoder som inte används. Exempelvis getheader(). Record - Attributet placement används inte. RegisterGUI Innehåller både oanvända imports och oanvända attribut. Övriga brister Record Returnerar av en typ som är deklarerad som private på två ställen. RegisterGUI Innehåller för många privata klasser. MyTableModel och Clock borde inte ligga där de gör när så många klasser implementerats i koden. FileComparer metoden isequal är onödigt komplex. ReadFile Data hämtas från klassen för att användas omodifierad i klassens metoder. WriteFile Data hämtas från klassen för att användas omodifierad i klassens metoder. WriteFile Stora delar av klassen är utkommenterade när de borde vara borttagna. För exempelkod se referenslista under Example code from The black team Utvecklingstopp I mitten av projektet så hade the black team så mycket tecken på dålig kod och fel i testerna att det inte längre gick att implementera nya stories. Detta löstes genom att införa ett utvecklingsstopp. Detta gav utvecklarna god tid att åtgärda de fel som hade uppstått dels pga. av ovana inför den nya metodiken och dels pga. av bristande kunskap om TDD och refactor mercilessly. Under en hel dag implementerades ingen ny funktionalitet. Efter denna iteration så blev ny funktionalitet billigare att implementera då en bättre design uppnåtts Påverkan av refaktorisering Det var nödvändigt att göra en stor refaktorisering efter 2 iterationer. Detta eftersom deras ursprungliga design inte längre var hållbar för utveckling. Detta beror troligen på omställningen till den nya utvecklingsmetodiken men även på brister med TDD. Refaktorisering var inriktad på att skriva om datastrukturen och de delar av programmet som var beroende av denna samt att rätta felaktig kod. Efter refaktoriseringen fick de en design som gjorde det lättare att implementera nya race typer. Men den skapade problem med flera tider till förare. Så alla stories som har med sortering att göra blev mycket svårare att genomföra. Detta berodde delvis på att de som refaktoriserade inte tittade på de stories som var utdelade men även till viss del att de misstolkade stories. 12

13 3.1.7 Efter refaktorisering Vårt projekt hade många fel och tecken på dålig kod. Efter att en refaktorisering gjorts blev koden mer lättöverskådlig vilket gjorde att teamet fick bättre inblick i projektets olika delar. Täckningen av testfall blev bättre och kodkvalitén blev mer tillförlitlig. Teamet fick lättare för att upptäcka och avlägsna dålig kod. Vi upptäckte att många stories kostade mycket mindre efter att refaktoriseringen gjorts. Detta var vad vi förväntat oss och även anledningen till att refaktoriseringen skulle ske. 4 Sammanfattning Simple code and design är lika viktig som TDD i ett XP projekt. Som utvecklare och som coach är det mycket viktigt att ha bra kännedom om hur man upptäcker Bad code och hur denna ska åtgärdas. För att bibehålla Simple code and design är det viktigt att utvecklarna har bra tester som gör det möjligt för dem att refaktorisera. Det är hjälper att göra stora refaktoriseringar med jämna mellanrum och det krävs att utvecklarna är noga med att refaktorisera både före de påbörjat en story och efter de är klara med den. Som coach är det viktigt att leda utvecklarna till att undvika och refaktorisera bort dålig kod. Det kan också vara viktigt att coacherna sätter de mest erfarna utvecklarna på att förbereda för stora designändringar i projektet. Dålig kod och dålig design leder till att kostnaden för implementering av ny funktionalitet ökar. Detta kan användas som motivering för att avbryta utvecklingen och åtgärda de fel som finns. 4.1 Ett extra tack till Vi skulle vilja tacka The black team som läste kursen EDA260 vt-2006 för ett bra underlag till vår djupstudie och för ett gott arbete under refaktoriseringen och utvecklingsstoppet vilket gjorde skillnaden på kvalité mer tydlig. 13

14 5 Referenser Agile software development Robert C. Martin ISBN: A Taxonomy for "Bad Code Smells" Mika Mäntylä BAD SMELLS IN CODE The System Metaphor William C. Wake What is Extreme Programming? Ron Jeffries Example code from The black team 14

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

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

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

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

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

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

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

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

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel

Läs mer

TDDD78 Objektorientering: Lagring och livstid

TDDD78 Objektorientering: Lagring och livstid jonas.kvarnstrom@liu.se 2017 TDDD78 Objektorientering: Lagring och livstid Tre sorters variabel (1): Lokal 3 Deklareras i en metod Lokal variabel Varje anrop får sin egen "kopia": Två anrop till foo()

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1 Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.

Läs mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje

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

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer

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

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

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

Läs mer

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Lunds Tekniska Högskola Datavetenskap Tentamen EDA061 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram

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

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Mutability och State Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Immutability Ett icke muterbart (immutable) objekt är ett objekt vars tillstånd inte

Läs mer

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

F5 Enkel Design, Refaktorisering

F5 Enkel Design, Refaktorisering F5 Enkel Design, Refaktorisering EDA260 Programvaruutveckling i grupp Projekt Görel Hedin Datavetenskap, LTH PVG, 2009 F5-1 Refaktorisering omstrukturering av koden utan att ändra det yttre beteendet PVG,

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2014 2017 jonas.kvarnstrom@liu.se

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 I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015 Objektorienterad Programkonstruktion Föreläsning 7 24 nov 2015 Observer (GoF) Man definierar ett "ett-till-många"-förhållande mellan objekt så att när ett objekt byter tillstånd så uppdateras alla beroende

Läs mer

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:

Läs mer

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

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

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

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

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

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

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

F5 Enkel Design, Refaktorisering. EDAF45 Programvaruutveckling i grupp Projekt Görel Hedin, Boris Magnusson,Datavetenskap, LTH

F5 Enkel Design, Refaktorisering. EDAF45 Programvaruutveckling i grupp Projekt Görel Hedin, Boris Magnusson,Datavetenskap, LTH F5 Enkel Design, Refaktorisering EDAF45 Programvaruutveckling i grupp Projekt Görel Hedin, Boris Magnusson,Datavetenskap, LTH 1 XP:s Deltekniker (Practices) 1. Planering Planeringsspelet Regelbundna releaser

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

Läs mer

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

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

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

729G06 Föreläsning 1 Objektorienterad programmering

729G06 Föreläsning 1 Objektorienterad programmering Översikt Formalia Vad är objektorienterad programmering 729G06 Föreläsning 1 Objektorienterad programmering Definieria klasser Skapa och använda objekt Annika Silvervarg Ciltab, IDA, Linköpings universitet

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

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 Programmering fortsättningskurs DIT950

Tentamen Programmering fortsättningskurs DIT950 Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00

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

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal Tentamen DD2385 Programutvecklingsteknik vt 2009 Fredagen den 5 juni 2009 kl 10.00 13.00 Inga hjälpmedel utom penna, sudd och linjal Tentans del I omfattar 22 poäng. Del II har också 22 poäng Preliminära

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym

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

XP-projekt: En fördjupning

XP-projekt: En fördjupning XP-projekt: En fördjupning Extreme Programming Martin Karlsson marka@itn.liu.se K7522 011 36 34 63 Fem värden Kommunikation Var öppna Var ärliga Ta konflikter Diskutera Tag beslut Tag ansvar Kräver feedback,

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

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

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

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält

Läs mer

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. (7) Objektinteraktion Objektorienterad programmering 2 Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. Mål Efter övningen skall du kunna konstruera ett program med

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Tentamen i EDAF60 29 oktober 2018 Skrivtid: 14-19 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/blått/blyerts.

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

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

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

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

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). 1 (11) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att

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

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

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. .0.0 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6 poäng Denna tentamen

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

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

TDDD26 Individuell projektrapport

TDDD26 Individuell projektrapport TDDD26 Individuell projektrapport Kort beskrivning av projektet Vi hade som projekt att utveckla en digital media servicer som skulle hjälpa filmentusiasten att organisera sitt filmbibliotek. Programmet

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

Designmönster/Design patterns

Designmönster/Design patterns Johan Eliasson Design patterns Designmönster/Design patterns Vad är det? Beprövade lösningar till återkommande programmeringsproblem Plattformsoberoende Beskrivs ofta med hjälp av UML Baseras på en bok

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

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

Objektorientering i liten skala

Objektorientering i liten skala Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas

Läs mer

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14. Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer