Göm menyn

Projektuppgift

Syfte

Syftet med projektuppgiften är:

  • Att ni ska designa och implementera ett eget OO-program från grunden.

  • Att ni ska använda, och demonstrera hur ni använder, de OO-tekniker ni har lärt er utan att vara bundna av en fördefinierad uppgift eller ett kodskelett.

Projektet motsvarar ca 100 timmars arbete per person. Ni måste därför arbeta mycket på egen hand, utanför schemalagd tid. Annars är det stor risk att projektet inte motsvarar kursens poäng och att ni behöver komplettera.

Rapportera eventuella oklarheter eller problem direkt till examinatorn!

Att göra: Anmälan i Webreg (senast 140228)

I projektet delar vi upp oss i 4 "storgrupper", K/L/M/N, som inte är uppdelade per klass. Man kan arbeta enskilt eller i par och får gärna samarbeta över klassgränserna. Vi och många tidigare studenter rekommenderar pararbete i de flesta situationer. Arbetar man ensam kan projektet ha något mindre omfattning, men kvaliteten måste fortfarande vara lika hög.

  1. Anmäl er i WebReg3. Är det fullt i er önskade grupp får ni välja en annan. Om det är fullt i alla grupper, kontakta examinatorn.

Att arbeta i större grupper än två är inte tillåtet. Undantaget är om det efter att grupperna har bildats finns exakt en person som inte hittar någon att arbeta med – då kan den personen få "dispens" av examinatorn att gå med i en annan grupp. Vi ställer då motsvarande högre krav på kvalitet och omfattning!

Regler: Grupparbete sker i grupp!

Även när man arbetar i grupp måste man utvecklas individuellt. Den ena personen i gruppen får inte skriva det mesta av koden "för att det skall gå fortare". Ni ska båda göra ungefär lika stor del av både design och kodning, och båda ska vara fullt insatta i hur saker fungerar.

Om ni arbetar separat på vissa delar av koden måste ni därför regelbundet (gärna varje dag) gå genom den kod som skrivits och diskutera hur den fungerar. Denna informella code review är inte tidsslöseri utan ett utmärkt sätt att både lära sig av andra och hitta problem i programkoden innan det är "för sent"!

I verkligheten krävs i många projekt att all ny kod verifieras på detta sätt innan den överhuvudtaget får integreras i kodbasen.

Steg 1: Förstå krav och kriterier

Krav och kriterier

Det första steget i projektet är att förstå vilka krav som gäller för samtliga projekt och vilka kriterier som ni måste uppfylla för vissa betyg. Detta kan påverka hur ni ska bygga upp ert projekt. Läs därför bedömningssidan.

Steg 2: Val och beskrivning av projekt

Syfte

Innan ni börjar behöver ni själva välja vilket projekt ni vill utföra. En projektbeskrivning måste sedan skrivas och lämnas in till labbhandledaren, helst innan projektstart (det går bra att skriva på svenska). Syftet är:

  1. Att ni ska tänka genom implementationen i förväg. Många studenter anser att man har tjänat mycket på detta steg.

  2. Att er handledare ska kunna ge feedback om det är större problem med den valda inriktningen. (Mindre detaljer är svåra att kommentera eftersom mycket beror på era förkunskaper och exakt hur ni går tillväga.)

Vid slutinlämningen ska även en uppdaterad version av projektbeskrivningen lämnas in, med ytterligare information adderad. I båda fallen går det bra att skriva på svenska.

Att göra: Välj och beskriv projekt

  1. Läs informationen om vad som kan vara ett lämpligt projekt.

  2. Kom överens om ett projekt att utföra.

  3. Fyll tillsammans i första delen av projektbeskrivningen enligt projektbeskrivningsmallen. Mer instruktioner finns i denna.

  4. Exportera till PDF-format, t.ex. med File | Export to PDF i OpenOffice Writer. Döp filen enligt följande mönster, utan mellanslag i filnamnet.

    liuid123-liuid456-beskrivning.pdf

  5. Skicka till er egen handledare för en kort genomgång. Brevets ämne ska som alltid inledas med kurskoden TDDD78 så det kan sorteras rätt. Lämna in enligt deadline om ni vill få snabbast möjlig feedback. Att lämna in senare är OK, men då blir även återkopplingen fördröjd. Beskrivningen måste dock alltid lämnas in minst 4 veckor innan projektinlämning!

Steg 3: Programutveckling

Att göra: Uppstart

Innan ni börjar programmera ska ni:

  1. Skapa ett nytt IDEA-projekt om ni använder IDEA, inte lägga koden i samma projekt som labbarna. Se instruktionerna i labb 1.

    Kom ihåg att ändra More Settings / Project format till ".ipr (file based)"!

  2. Bestämma om ni vill använda versionshantering. Detta kan t.ex. vara till stor hjälp om man arbetar på flera ställen och behöver synkronisera sin kod. Ni kommer att få tillgång till ett Subversion-arkiv (repo) som ni kan använda, men det går även bra att använda system som Git.

Att göra: Programutveckling

Under hela programutvecklingsfasen ska ni:

  • Följa milstolparna i projektbeskrivningen. Upptäcker ni problem eller vill göra ändringar uppdaterar ni projektbeskrivningen – den är inte en kravspecifikation, utan projektet kan vid behov ändras under tiden.

  • Testa regelbundet, så att ni hittar problem tidigt.

  • Putsa och förbättra koden regelbundet, så att ni inte har allt detta kvar till slutet. Nya features är roliga, men hög kvalitet är viktigt.

  • Dokumentera regelbundet. Många tidigare studenter skriver att de önskar de hade dokumenterat under kursens gång – efter ett tag glömmer man t.ex. vilka designbeslut man gjorde!

  • Välja objektorienterade lösningar så att ni kan lära er, och visa att ni har lärt er, både Java och objektorientering.

  • Gå genom IDEAs kodinspektioner minst en gång i veckan (Analyze | Inspect Code, välj profil TDDD78-2015-v1), och håll koll på färgläggningen som visas direkt i koden. Detta är ofta ett utmärkt sätt att starta reflektioner över den egna koden och att lära sig något nytt. Ibland kan det så klart ge "falska varningar", och dessa ska då kommenteras så att handledaren får er motivering till varför varningen finns kvar.

  • Diskutera projektet med labbhandledaren då och då. Be om feedback på lösningar ni har gjort och ta chansen att fixa eventuella problem så tidigt som möjligt, även om vi så klart inte kan garantera att allt upptäcks. Att använda handledaren är inte en svaghet utan en styrka!

  • Ge oss omedelbar feedback om det uppstår tekniska eller andra problem.

Kom också ihåg att sluta lägga till features i tid, så ni hinner med att polera implementationen!

Steg 4: Feature Freeze

Syfte

Det är bättre, både ur betygssynpunkt och för inlärningen, att ha ett projekt med något mindre omfattning men högre kvalitet än att ha ett större antal features som tyvärr inte riktigt fungerar.

Så är det även i "verkligheten", och i många projekt sker därför en feature freeze en tid innan en ny version faktiskt görs tillgänglig. Man slutar alltså lägga till nya finesser och spenderar tid enbart på att fixa problem och "städa upp".

Detta är extremt viktigt och ska göras även i detta projekt!

Att göra: Feature Freeze

Minst en vecka innan inlämning är det dags att sluta lägga till nya finesser. Då sätter ni istället av tid till att:

  • Återigen gå genom alla IDEAs kodinspektioner och fixa eventuella problem som hittas.

  • Se över den övergripande strukturen på hela projektet och se om den kan förbättras.

  • Gå tillbaka till koden ni skrev i början, och uppdatera den nu när ni kan mer och vet bättre!

  • Leta efter ineffektiv och duplicerad kod. Hitta sätt att reducera detta. Finns det till exempel ställen där kod från många liknande klasser egentligen borde ligga i en gemensam superklass?

  • Uppdatera dokumentationen och kommentarerna, så att en utomstående lättare kan förstå.

  • Uppdatera projektbeskrivningen.

  • Finputsa programkoden på "detaljnivå".

  • Och så vidare...

Steg 5: Demonstration

Syfte: Demonstration

Ni kommer att ha cirka 10 minuter på er att demonstrera ert projekt för labbhandledaren. Två specifika labbtillfällen är reserverade för detta. Det går även bra att demonstrera tidigare om handledaren har tid, men vi bedömer ändå alla projekt tillsammans efter deadline.

Förberedelser för demonstration

Använd veckan innan demonstrationen till att "polera" projektet enligt ovan.

Fyll i ett labbomslag där ni skriver under att ni har följt alla labbregler på IDA.

Var förberedda på själva demonstrationen! Allt ska gå att starta smidigt när labbhandledaren kommer till er. Testa att demonstrera för varandra i god tid, så att ni inte hittar uppenbara buggar under demonstrationen för handledaren.

Info: Demonstrationen

Demonstrationen går till så här.

  • Hos de grupper som vill demonstrera ska alla gruppmedlemmar vara närvarande för att svara på frågor (som på en tenta). Kan någon medlem inte komma hänvisar vi till nästa omredovisningstillfälle.

  • Demonstrationen inleds med att ni själva demonstrerar funktionaliteten i projektet under några minuter. Var beredda på att visa hur det används och att visa upp de finesser ni själva tycker är viktigast givet tidsbegränsningen.

  • Därefter fortsätter handledaren med egna tester och frågor. Bland annat kan vi testa er kunskap om koden och att kontrollera att ni vet varför ni har gjort som ni har gjort. Frågorna kan ställas till en specifik person. Se därför till att alla känner till alla aspekter av koden.

    Detta garanterar inte att alla problem upptäcks – inte ens de som kan verka "uppenbara". Den riktiga genomgången av programkoden sker efter inlämning, när handledaren får tid att sätta sig en timme eller två med enbart ert projekt!

  • Labbhandledaren kan också välja att ställa några (individuella!) frågor runt objektorienterad programmering: Vad menas med polymorfism? Varför vill man gömma information? Vad är skillnaden på ärvning mellan klasser och när man implementerar ett gränssnitt? Varför kan designmönster vara bra? Vad finns det för relation mellan meddelanden och metoder? Och så vidare. Var beredda på att svara.

  • Om projektet är buggigt kan handledaren välja att gå vidare till en annan grupp så att ni får försöka igen senare. Är programmet för buggigt när demotillfället närmar sig sitt slut kan ni bli hänvisade till omredovisning under nästa planerade demotid, vilket kan dröja.

  • När allt är klart lämnar ni in det ifyllda labbomslaget som ni förberedde.

Projektbeskrivningen lämnas in tillsammans med koden, inte vid demonstrationen.

Steg 6: Inlämning av kod och dokumentation

Allmänna regler

Vi har strikta instruktioner för inlämning. Vi har över 130 studenter, så om vi behöver lägga ner 10 minuter extra per student "i onödan" tar det över 20 timmar som vi kunde ha lagt på handledning och kursutveckling! Därför måste vi returnera labbar som inte följer instruktionerna för komplettering.

Inlämningsprocedur

  1. Labben måste lämnas in i IDEA-format så att vi snabbt kan öppna den och navigera genom koden.

    Har du använt en annan miljö: Skapa ett nytt projekt enligt instruktionerna i labb 1. Kom ihåg att ändra More Settings / Project format till ".ipr (file based)"!

  2. Läs genom de allmänna kvalitetskriterierna en gång till och se till att koden uppfyller dem.

  3. Kör IDEAs kodinspektioner. Det här är till stor del ett sätt att lära sig skriva kod som inte bara gör vad den ska utan även är välskriven och strukturerad.

    Förstår du inte en varning? Utmärkt! Då har du en chans att lära dig något nytt, redan innan du lämnar in koden! Läs IDEAs inbyggda beskrivningar, läs våra utökade beskrivningar, och om det inte hjälper, fråga gärna assistenten eller examinatorn.

    1. Välj Analyze | Inspect Code i menyn.
    2. Välj inspektionsprofil "TDDD78-2015-v1" och tryck OK.

    Inget automatiskt inspektionsverktyg är 100% korrekt. Det kan alltså finnas varningar som är "felaktiga". Alla sådana måste kommenteras på plats i koden, med god motivering. Övriga varningar ska korrigeras. Se även de allmänna kvalitetskriterierna.

  4. Är detta en komplettering? Beskriv i så fall i filen "kompletteringar.txt" hur varje enskild kommentar från handledaren har hanterats: Vad som ändrats och var i koden, hur ni har löst problemet, och annan information som är relevant för att handledaren lätt ska se vad som gjorts.

    Gör ni flera kompletteringar ska gamla kommentarer vara kvar och tydligt skilda från nya kommentarer (markera med kompletteringsdatum). Detta underlättar för oss och är en del av examinationen där ni visar att ni förstår varför kompletteringen behövdes.

  5. Packa all källkod och andra filer som krävs tillsammans med ev. kompletteringsbeskrivning i en ZIP- eller TAR.GZ-fil. Även den uppdaterade projektbeskrivningen i PDF-format ska ligga i denna fil. Använd t.ex. File | Export to PDF i OpenOffice Writer.

    IDEAs projektdefinitionsfiler (.ipr, .iml) och liknande måste finnas med så att projektet enkelt kan öppnas i IntelliJ IDEA. Testa genom att packa upp arkivet på annan plats och öppna det i IDEA genom att klicka på den nyss uppackade .ipr-filen!

    Döp filen enligt följande mönster, utan mellanslag i filnamnet. Vid komplettering använder ni versionsnummer "v2", "v3" och så vidare. Använd nytt versionsnummer oavsett hur liten kompletteringen är.

    • liuid123-liuid456-projekt-v1.zip
  6. Dubbelkolla och trippelkolla att inlämningen är gjord på rätt sätt. Inlämningar som har många okommenterade varningar, saknar nödvändiga filer eller uppenbart bryter mot viktiga regler kommer att returneras utan bedömning.

  7. Skicka in filen via epost – till handledaren. Brevets ämne ska inledas med kurskoden TDDD78 så det kan sorteras rätt. Annars kan det dröja innan brevet blir läst.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2015-10-23