TDP005 Projekt: objektorienterade system

Relevanta dokument
TDP005 Projekt: objektorienterade system

TDP005 Projekt: objektorienterade system

TDP005. Föreläsning 1. Filip Strömbäck

TDP005. Föreläsning 1. Filip Strömbäck

Objektorienterad programmering

TDDI02. På denna föreläsning: Programmeringsprojekt, Föreläsning 1. Kursinformation Vad är Software Engineering? Hur går ett projekt till?

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

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

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

Objektorienterad programmering, allmänt

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

Linköpings universitet 1

12 principer of agile practice (rörlig)

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

Objektorientering. Grunderna i OO

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

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

SCRUM. Marcus Bendtsen Institutionen för datavetenskap

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

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

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

SKOLFS. beslutade den XXX 2017.

Imperativ programmering. Föreläsning 4

Agil programutveckling

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Objektorienterad programmering

SCRUM. Vattenfallsmodellen. Analys. Design. Kod. Test. Rational Unified Process Agile. Kallas också linjär sekventiell modell.

Objektorienterad analys och design

Användarcentrerad systemdesign

Agile-metoder, XP och ACSD

Användarcentrerad systemdesign

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

Några grundläggande begrepp

Dokumentation och presentation av ert arbete

OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram

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

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

Dokumentation och presentation av ert arbete

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

CREATING VALUE BY SHARING KNOWLEDGE

Therese Hansson & Magnus Jonsson. Motivationsfaktorer - Test inom Agila utvecklingsprojekt

Objektorienterad programmering. Grundläggande begrepp

729G06 Föreläsning 1 Objektorienterad programmering

Dokumentation och presentation av ert arbete

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

Dokumentation och presentation av ert arbete

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

TDP023 Projekt: Agil systemutveckling

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

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

BESKRIVNING AV PROCESSMETODEN SCRUM

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

Objektorienterad analys och design

TDDD78 Att välja och genomföra ett projekt

Programmeringsteknik II

TDIU01 (725G67) - Programmering i C++, grundkurs

Kursplanering Objektorienterad programmering

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

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

Undervisningen i ämnet programmering ska ge eleverna förutsättningar att utveckla följande:

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

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

XP-projekt: En fördjupning

RUP - Rational Unified Process

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

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

Metoder och verktyg för funktionssäkerhet

SCRUM och mycket mer

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

Symptom på problemen vid programvaruutveckling

Agil projektmetodik Varför och vad är det?

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

Kursens mål. Objektorienterad programmering. Kursupplägg. Tillgodoräknande. Kursbok. Labsalar

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

Föreläsning 15: Repetition DVGA02

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

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

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

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

AGILA METODER. (för oss som inte kodar) Nina Berlin

Imperativ programmering

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78 Att välja och planera ett projekt

Föreläsning 1: Introduktion till kursen

Projektuppgift - Gymmet

Testdriven utveckling av Web Services. Ole Matzura

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Föreläsning 1: Introduktion till kursen

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

OOA Objektorienterad Analys. Exempel på informell kravspecifikation. DD2385 Programutvecklingsteknik Några bilder till föreläsning 11 13/5 2013

Vad händer med L3: ΔL3-L4 för Krav följs upp av annan projektgrupp. Föreläsning 5: V&V II + Design II Efterläsning Kodning

TDDD78 Att välja och planera ett projekt

Kursinformation. Metodik för programvaruutveckling. Utvecklingsprocessen för programvara. Innehåll. Processmodell. Exempel

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

Objektorienterad konstruktion

Introduktionsmöte Innehåll

Föreläsning om OO, OOA och UML

Transkript:

TDP005 Projekt: objektorienterade system

Idag Introduktion till kursen Introduktion till systemutveckling

Lärare Examinator: Torbjörn Jonsson Kursledare: Jonas Lindgren (torbjorn.jonsson@liu.se) (jonas.lindgren@liu.se) Övriga assistenter: Anton Sundblad Linus Olsson (anton.sundblad@liu.se) (linus.olsson@liu.se)

Hur kombineras TDP004 / TDP005?

Vad ska göras inom TDP005? Designa och implementera ett 2-dimensionellt arkadspel Simulering av en värld Figurer med ett beteende över tid Spelaren styr (minst) en av dessa figurer Dokumentera spelet/processen

Minimikrav Spelet ska simulera en värld med olika objekt i realtid Minst tre typer av objekt Flera instanser av minst två objekttyper Objekten ska röra sig över skärmen Minst spelaren och ytterligare en objekttyp ska vara rörliga En figur ska styras av spelaren (åtminstone) 2D-grafik Kollisionshantering ska finnas Spelet ska upplevas som ett sammanhängande spel Även krav på implementationen, se hemsida!

Inspirationskällor Äldre TV-spel, t.ex. NES, är ofta lagom nivå

Kursmoment Introduktion till programutveckling (Software Engineering) Systemutveckling och testning Eclipse Make Versionshantering SDL2 (Simple DirectMedia layer) för utveckling av GUIs i C++ UML (Unified Markup Language) för objektorienterad design Projekt i C++ Objektorientering Doxygen

Kursplanering 1 Föreläsningar Labbar Kursintroduktion och Software Engineering SDL2 UML Eclipse make SDL2 Komma igång Projekthandledning Vid behov (bokas med assistenterna)

Kursplanering 2 Kodgranskning 2-3 projektgrupper ska granska varandras kod Ungefär halvvägs in i kodningen Schemalagt tillfälle, men kan även göras vid annan tidpunkt Kodgranskningsgrupper meddelas senare på hemsidan Slutseminarium Demotillfälle Obligatoriskt Alla visar upp sitt spel för alla andra Examinator går runt och pratar med alla om spelet Båda personerna i gruppen ska kunna redogöra för alla delar av spelet

Projekt, moment Ett projekt, som även inkluderar ett antal dokument: Kravspecifikation. Minst 4 sidor. Klar senast 2014-11-18 Designspecifikation. UML-klassdiagram, mm. Klar senast 2014-12-17 Kodgranskning. Kodgranskningsmöte med 2-3 projektgrupper Kodgranskningsprotokoll klar senast 2014-12-10 Program och kod Kod klar och inlämnad senast 2014-12-17. Demo (obligatorisk) 2014-12-17 Reflektionsrapport (individuell), klar senast 2014-12-19 Håll en arbetsdagbok under kursens gång

Kravspecifikation Ska beskriva spelet, och vad ni ska göra Ett kontrakt med kursledningen, det ni beskriver där är det som ska implementeras Två typer av krav Absoluta krav: Ska uppfyllas för att bli godkänd på kursen Tilläggskrav: Uppfylls i mån av tid. Några av dessa ska uppfyllas för högre betyg Om ni märker under projektets gång att ni inte kommer att kunna uppfylla er kravspecifikation kan den omförhandlas med kursledare. En ny version ska då kommas överens om, lämnas in och godkännas

Betygskrav Rapporterna bedöms med G eller VG: Kravspecifikation Designspecifikation Kodgranskning Individuell reflektionsrapport Projektet bedöms med 3, 4 eller 5: Program, demo och kod Slutbetyget: 3: Godkänd på samtliga moment 4: 4 på projekt + minst ett VG 5: 5 på projekt + VG på ind. reflektionen + ännu ett VG

Projektgrupper 2 personer per grupp Ha gärna samma grupper som i TDP004 Anmäl i webreg idag! Länk på kurshemsidan

Redovisning All kod redovisas via Gitlab: http://gitlab.ida.liu.se/ Vid kodinlämning, maila en länk till er assistent Alla dokument redovisas via Inla: Dokument i PDF-format Finns en länk från kurshemsidan Använd en tydlig struktur och bra namn på dokument och kataloger, så att det är lätt att hitta och identifiera allt

Tidsplan Vecka Projekt Annat 45 Projektidé 46 Kravspec-skrivande Intro, SDL2, Eclipse, make 47 Kravspec klar, kodning UML, SDL2 48-50 Kodning Kodgranskning 51 Demo, dokumentation klar

Introduktion till systemutveckling

Utvecklingsprocess Kravspecifikation och analys Systemdesign Objektdesign Implementation Testning (Leverans) (Underhåll)

Kravspecifikation och analys Förväntat beteende, inte implementation (vad inte hur) Process: 1. Samla in användningsfall 2. Analysera för att förstå och modellera systemets beteende 3. Specificera systemets beteende i en specifikation 4. Validera kravspecifikationen med användningsfallen

Andra krav ISO-standarder med mera som ska vara uppfyllda Tidplan och leveransdatum Ekonomiska ramar Ofta används kravspecifikationen som ett kontrakt för vad som ska levereras av utvecklaren

SMART kravspecification Specific: Measurable: Agreed upon: Realistic: Timely: Tydlig och rakt på sak. Svara på frågorna: Vad ska du göra? Varför är det viktigt? Om du inte kan mäta kraven, hur kan du då veta ifall de är uppfyllda eller inte? Överenskommelser mellan alla inblandade (Kund, användare, et.c.) Möjligt med de tillgängliga resurserna, kunskapen och tiden. Du måste vilja och kunna utföra det. En tydlig tidsram för projektet.

Systemdesign Omforma problemet till en lösning Konceptuell design Vad systemet gör, dess funktion Skrivet i kundens språk utan teknisk jargong Implementationsoberoende Kopplat till kravspecifikationen Teknisk design Hur man gör det Platform Hierarki och funktion hos programkomponenter Datastrukturer och dataflöde

Objektorienterad design Före ~1970 fanns i princip ingen teknik utan individer gjorde som de ville 1975-1985 Strukturerad programmering (klassiskt paradigm) Strukturerad systemanalys Dataflödesanalys Strukturerad programmering och testning Problem: tekniken skalade inte upp. Problematiskt för stora program > 500 000 rader eller mer Svårt att underhålla programmen

Objektorientering, historia Simula 67, 60-tal, objekt som formella koncept Smalltalk, 70-tal Introducerade begreppet objektorientering Objekt och meddelanden Dynamiskt Spreds i stor skala 1981 Objektorienterad LISP, 80-tal C++, tillägg av objekt till C, 1980 Dominant programmeringsparadigm på 90-talet t.ex. Delphi, Java, 1995 2000-talet??

Objektorienterad design Problemet och lösningen organiseras som en samling av diskreta objekt, inkluderande både datastruktur och beteende Karaktäristik Abstraherar funktionalitet till diskreta objekt Klassificering av grupper av objekt med gemensamma attribut och beteende Inkapsling för att dölja implementationsdetaljer Arv som tillåter att attribut delas mellan snarlika objekt Polymorfism så att relaterade objekt kan ha olika beteende

Objektorienterad design, karaktäristik Objekt är en abstrakt representation av världen Objekt har ansvar för sitt eget tillstånd Objekt är oberoende enheter Systemfunktionalitet uttrycks m.h.a. operationer som associeras med olika objekt Delad data undviks Objekt kommunicerar genom att anropa operationer hos andra objekt I praktiken i C++ varje objekt är en instans av en klass

Objektorienterad utveckling Objektorienterad analys (OOA) Designkrav Högnivåarkitektur Objektorienterad design (OOD) Översätter en arkitektur till programmeringskonstruktioner Modellerar klasser, metoder, etc Objektorienterad programmering (OOP) Implementerar designen Gränsen mellan OOA och OOD är inte skarp

Objektorientering, språk Rena objektorienterade språk Smalltalk Scala Språk främst utvecklade som objektorienterade C++ Java, C# Python I grunden procedurella språk där OO lagts till Visual Basic Ada 95 Andra språk med många OO-drag Common LISP Oberon

Implementation Standarder Kodningsriktlinjer Stilguider för ökad läsbarhet och förståelse Dokumentation Intern dokumentation Header-kommentarer Kodkommentarer Variabelnamn Formattering Data-dokumentation Extern dokumentation Översikt av systemets komponenter Ingår i systemdokumentationen

Testning Enhetstestning Fokuserar på de enskilda modulerna Integrationstestning Testar när moduler sätts samman till mer komplexa enheter Användbarhetstestning Gränssnittstestning Systemtestning Funktion Prestanda Acceptans

Utvecklingsmetoder Vattenfallsmodellen Prototyping Agil utveckling XP Scrum

Varför behövs en utvecklingsmetod? Komplexitet och styrning Att få alla i ett team att jobba åt samma håll Arbetsfördelning Kommunikation Mellan utvecklare (under konstruktion) Mot kund (innan, under och efter) Till eftervärlden (testamentering) Till omvärlden (manualer)

Vattenfallsmetoden

Vattenfallsmetoden (med återhopp)

Vattenfallsmetoden Fördelar Enkel och lätt att förstå Passar in i projektstyrningspraktiker Fokusera på krav i början, billigt i slutet Bra för små projekt Bra för stabila projekt Fokus på dokument mycket kunskap kan bevaras Används mycket Bra för fastpriskontrakt Nackdelar Krav kan förändras dumt att låsa sig Tidig låsning vid lösningar dyrt att göra om ifall man ändrar sig sent i projektet Feedback från senare faser skulle kunnat underlätta en del andra faser Svårt att göra tidsuppskattningar Ingen riskhantering Litet utrymme för problemlösning

Prototyping Prototyping bygger på att: Tidigt skriva en prototyp Testa denna prototyp Förfina kravspecifikationen baserat på feedback Vidareutveckla prototypen och upprepa

Agil utveckling Individer och interaktion istället för processer och verktyg Ansikte-mot-ansikte-kommunikation istället för dokument Lita på att utvecklarna organiserar sig och sköter sig Producera kod istället för dokument Framgång mäts i hur väl programmet fungerar Samarbete med kunden istället för kontrakt Förändring istället för planering Inser att det inte går att förutse alla krav i början av projektet

Agil utveckling, värden Kommunikation Alla inblandade i processen måste kommunicera. Kund, medarbetare, ägare Enkelhet Utveckla den enklast tänkbara lösningen som uppfyller alla dina behov Återkoppling Optimism is an occupational hazard of programming, feedback is the treatment. (Kent Beck) Begär och ge återkoppling hela tiden Mod Våga göra ändringar och stå för dina åsikter Ödmjukhet Erkänn att du inte vet allt och att andra kan tillföra värdefulla synpunkter till ditt projekt

Agil utveckling Initiala krav (dagar) Initial arkitektur (dagar) Grov programvision Arkitekturvision Iteration 0: Initial bild av systemet Modellspånande (minuter) Testdriven utveckling Testdriven (timmar) utveckling (timmar) Iteration 1: Utveckling Iteration 2: Utveckling Iteration n: Utveckling Kraven utvecklas under tiden Modellera sparsamt Involvera användarna Var specifik Utveckla körbara program Prototyping!

Agila metoder extreme programming (XP) Scrum Crystal Clear Varje projekt behöver sina egna direktiv, konventioner och metoder Projektets kvalitet beror av människorna i projektet Högre produktivitet med bättre kommunikation och täta leveranser Adaptive Software development Projekt organiserat kring att bygga komponenter som tillhandahåller olika egenskaper hos programmet Fixa leveranstider

Extreme programming (Kent Beck) Extrem tonvikt på programmering...och testning Extrem valfrihet/flexibilitet att kunna lägga ned (men ändå få något ut av det) att kunna vända kurs att kunna avvakta att kunna växa snabbt Extremt korta iterationscykler

XP, 12 aspekter Planering med kunden och fokus på kravens vikt Små inkrementella leveranser Metafor som gemensam vision av hur systemet skall fungera Enkel design som bara hanterar nuvarande behov Skriv testerna först Refactoring: omstrukturera krav, design och kod när det blir komplext och oöverskådligt Parprogrammering Gemensamt ägande, alla kan ändra i all kod Kontinuerlig integration och små förbättringar 40-timmarsvecka Kunden på plats Kodstandard som alla följer

XP Test cases New user stories Project velocity Bugs User stories Requirements Release Planning Release plan Iteration Latest version Acceptance testing Small release Next iteration

Scrum Fokus både på management och systemutveckling Sprint Iterationer om runt 7-30 dagar Varje sprint ska producera och testa en körbar programversion Mål prioriteras och väljs från projekt-backloggen, delvis baserat på erfarenheter från tidigare sprints Planeringsmöte innan varje sprint Scrum 1-dagarsiteration Görs parallellt av många (självorganiserande) team Scrum-möte varje morgon, c:a 15 min, stående

Scrum Iterated until finished Scrum 1 day Sprint ~ 30 days Product Backlogs Sprint Backlogs Working Software increment Planning High leveldesign

Scrum TODO board

Scrum Burndown chart

Designnivåer som struktur för en kravspecifikation, 1 Vision Vad är den bärande tanken bakom systemet? Mål Vad är det mer konkreta målet med systemet? Målgrupp Vilka ska använda systemet? Tjänster Vad ska man kunna göra med systemet? Vad erbjuder systemet för tjänster? Användbarhetsmål Hur ska tjänsterna upplevas?

Designnivåer som struktur för en kravspecifikation, 2 Funktioner och innehåll Går det att beskriva mer konkret vilka funktioner och vilket innehåll som ska finnas i systemet? Interaktionsstruktur: Hur ser användargränssnittets struktur ut? Interaktionstekniker: Hur interagerar man? Presentationsstekniker: Vad är det man ser på bildytan? Fysisk form: Vad har produkten för form? Är det ett specialdesignat föremål? Är det en programvara på en persondator? Säkerhetskrav. Eventuellt hårdvarukrav och prestandakrav.

Design och testning Designen måste ta hänsyn till testningen Bra design uppmuntrar till testning av individuella moduler snarare än hela systemet Enkla designer är ofta enkla att testa Tydliga abstraktionsbarriärer Väldefinierad modulfunktionalitet Objektorienterad design Design som respekterar abstraktionsbarriärer Moduler behandlas som enheter som tillhandahåller en väldefinierad mängd funktioner, inte som moduler som är implementerade på ett visst sätt

Testning Enhetstestning Testar enskilda metoder, klasser, etc Komponenttestning Testar hela klasser eller små moduler Integrationstestning Testar kombinationer av flera klasser eller subsystem Regressionstestning Repetition av tidigare tester, för att se om de fortfarande fungerar när ny funktionalitet lagts till Systemtestning Testar det fullständiga systemet Acceptanstestning Testar om kraven uppfyllts i programmet

Enhetstestning Att vara säker på att varje modul fungerar korrekt innan den integreras med andra moduler Mycket lättare att vara säker på att en liten del av systemet fungerar rätt än att avlusa hela systemet på en gång Bra för att hitta udda fel som bara uppträder för specifika indata

Automatisera testning Trist att testa Skapa en testsvit som ständigt växer och som automatiskt körs varje gång ett program byggs och som bara genererar pass/fail Förhindrar att projektmedlemmer checkar in kod som inte fungerar med resten Det finns många alternativ för Unit-testning för C++ En rekommendation är googletest http://code.google.com/p/googletest/

Skapa testfall Black-box Tittar bara på specifikationen Försök glömma koden Be någon annan skriva testfallen White-box (Glass-box) Tar hänsyn till koden Skriv testfall som knäcker koden Skrivs av programmeraren eller någon som kan koden

Black-box-testfall Ekvivalenstestning Dela upp indata i ekvivalensklasser och testa en korrekt och en felaktig från varje klass Gränsfall Täckning: Varje indata hör till en ekvivalensklass Disjunkta: Inget indata hör till mer än en klass Representativitet: Alla indata i en klass ger samma fel Testa gränserna för varje ekvivalensklass Orsak-effekt Utgå från förväntat resultat för att bestämma indata Antar att en kombination av värden orsakar fel Felgissning Välj testfall utifrån domänkunskap

Exempel getnumdaysinmonth(month, year) Ekvivalenstestning ger 6 ekvivalensklasser: (31 dagar, 30 dagar, februari) x (skottår, icke-skottår) EXPECT_EQ((getNumDaysInMonth(1, 1200), 31); EXPECT_EQ((getNumDaysInMonth(7, 1300), 31); EXPECT_EQ((getNumDaysInMonth(4, 1996), 30); EXPECT_EQ((getNumDaysInMonth(9, 2001), 30); EXPECT_EQ((getNumDaysInMonth(2, 2000), 29); EXPECT_EQ((getNumDaysInMonth(2, 2100), 28); Gränsfall getnumdaysinmonth(0, 1974) getnumdaysinmonth(4, -1)

White-boxt-testning Arrangera så att varje sats i koden exekveras minst en gång Olika typer av satser: Enskilda satser Villkorssatser: varje utfall exekveras en gång Loopar: Hoppa över loopen Exakt en gång i loopen Mer än en gång Varje väg igenom koden exekveras minst en gång

Testdriven utveckling Skriv testerna först Undviker fel på grund av feltolkad kravspec Klargör kraven på systemet Avslöjar brister i kravspecifikationen Bättre att upptäcka när man skriver tester istället för kod Underlättar testning av koden när den utvecklas Säkerställer att man inte testar mot koden (black-box-testning)

Kursens början! Projekt Forma projektgrupper + anmäl er i webreg (idag!) Bestäm vad ni vill göra (idag!) Börja skriva kravspecifikation (deadline 2014-11-18) Föreläsning 2 Imorgon, i Visionen! SDL2 (grafikbibliotek) Labbar Imorgon, Eclipse Fredag, make Material + uppgifter finns på kurshemsidan