Göm menyn

Projektuppgift

Steg 1: Förberedelser

Innan ni börjar behöver ni själva välja vilket projekt ni vill utföra och skriva en projektplan. Ta också en titt på några övningar för att skriva bra kod.

Ni behöver också vara medvetna om reglerna för samarbete och användning av fritt material, så att ni inte riskerar göra något som räknas som fusk eller vilseledande.

Viktigt: Samarbete, fritt material och fusk!

Följande regler gäller när man använder kod som man inte har skrivit själv (ensam).

Användande av klassbibliotek

När du använder klassbibliotek i kompilerat format (JAR-filer) finns ingen risk att vi misstar denna kod för din egen. Då gäller följande:

  • Du får gärna använda alla klasser i standardbiblioteket för Java 11.

  • Du får också använda MigLayout och GSON, som vi har refererat till under föreläsningar och/eller i labbarna. Du måste då lägga till själva JAR-filerna i det incheckade projektet och lägga till dem som libraries i IDEA-projektet.

    Följ instruktionerna för IDEA, eller den enklaste varianten: "You can also create a new library from JAR files located within a project content root. Select these files in the Project tool window, and then select Add as Library from the context menu". Du behöver inte tala om för oss att du använder dessa välkända bibliotek.

  • I projektet får du också gärna använda andra fullständiga klassbibliotek som du laddar ner från nätet, under följande förutsättningar:

    • Klassbiblioteken får inte vara ramverk som "tar över" eller "kontrollerar" projektets struktur. Det måste vara din kod som ger den övergripande strukturen och som driver allt framåt, medan klassbiblioteket får hjälpa till med isolerade deluppgifter – t.ex. att hantera uppritning av rörliga figurer på skärmen.

    • Du kan inte räkna med att de som granskar ditt projekt är bekanta med det klassbibliotek du använder. I implementationsbeskrivningen i projektrapporten behöver du därför vara extra noggrann med att beskriva klassbiblioteken och hur de används i ditt projekt, och du kan behöva fler sidor än det angivna antalet. Missar du det kan du få tillbaka projektet för komplettering av dokumentationen.

    • Klassbiblioteken ska läggas till som JAR-filer i projektet och checkas in. De ska inte ligga med som källkod (se nästa punkt).

    • Den kod du själv skriver måste så klart fortfarande ha en rimlig omfattning (bredd och djup). Klassbibliotek kan eventuellt hjälpa dig att komma längre men gör inte att du kan minimera den egna kodens omfattning.

Du ska inte använda verktyg som Maven eller Gradle för att automatiskt hantera beroenden på klassbibliotek. Verktygen är visserligen användbara, men ger merarbete för handledarna och sätter käppar i hjulen för vår kodinspektion.

Du måste tydligt markera användning av okompilerad källkod som du hittar på nätet enligt nedan. Detta är för att du inte ska riskera misstanke om fusk / plagiat (där vi är skyldiga att anmäla alla misstankar).

Användande av okompilerad källkod från andra
  • Du får (i måttlig grad) använda enskilda fullständiga klasser vars källkod du hittar på nätet, under förutsättning att du lägger dem i ett paket vars namn innehåller "borrowedcode" (exakt så) eller lägger till "BorrowedCode" i klassnamnet. Du kan t.ex. lägga dem i package se.liu.liuid123.game.graphics.borrowedcode om ditt LiU-ID är liuid123, eller döpa en klass till MyListenerBorrowedCode. Detta mönster används sedan i automatisk kodanalys!

    Regeln gäller även om du modifierar den kod du hittar.

  • Du får (i måttlig grad) använda enskilda kodfragment som du hittar på nätet. Om kodfragmenten är längre än ett par rader ska de göras till separata metoder vars namn innehåller "borrowedcode", t.ex. "borrowedcode_dijkstras_algorithm()". Detta mönster används sedan i automatisk kodanalys!

    Är kodfragmenten mycket korta (1-2 rader) och svåra att lägga som egna metoder räcker med en kommentar som innehåller texten "borrowedcode".

    Regeln gäller även om du modifierar den kod du hittar.

  • Du får givetvis lära dig och inspireras av enskilda enklare kodrader du hittar på nätet, och om du anser att du faktiskt har lärt dig tillräckligt för att skriva detta själv utan att "titta på facit", får du använda sådan egenskriven kod utan att ange en källa. Men om det handlar om enstaka rader som du inte anser att du helt och fullt kan skriva på egen hand, är det bättre att ta det säkra före det osäkra och ange källan enligt ovan (borrowedcode)!

För samarbete med andra grupper gäller följande regler. Detta är för att du inte ska riskera misstanke om fusk / plagiat (där vi är skyldiga att anmäla alla misstankar).

Diskussioner med andra grupper
  • Det är fullt tillåtet att diskutera gemensamma lösningar på ett problem, t.ex. hur man strukturerar en del av koden, så länge som varje projektgrupp skriver sin egen kod.

  • Om man faktiskt skriver koden tillsammans, eller skriver av, räknas detta som lånad kod enligt ovan och måste markeras!

Steg 2: Programutveckling

Uppstart och Git-repon

Under projektstarten skapar vi regelbundet nya Git-repon för projektgrupperna, allteftersom deltagarna anmäler sig. Titta om ditt/ert repo finns tillgängligt – annars bör det komma inom kort.

Gör en klon av det nya repot, på samma sätt som för labbarna – se de tidigare instruktionerna!

Skapa också ett nytt IDEA-projekt i den resulterande arbetskopian. Detta måste i vilket fall som helst göras före inlämning, även om ni huvudsakligen använder ett annat verktyg vid utvecklingen.

Programutveckling

Under hela programutvecklingsfasen ska ni:

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

  • Tänka på hur projektet kommer att bedömas, så att ni inte missar viktiga aspekter.

  • 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! Fyll i projektrapporten under tiden, alltså den andra delen av projektmallen.

  • 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-2020-v1), och hålla 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.

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

Steg 3: Feature Freeze

Vad är en "feature freeze"?

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!

När och hur gör vi en Feature Freeze?

När ni har kvar runt 10-20 av de 80 arbetstimmarna ä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? Detta kan ge komplettering!

  • Uppdatera dokumentationen och kommentarerna.

  • Uppdatera projektrapporten (den slutliga delen).

  • Finputsa programkoden på "detaljnivå".

  • Och så vidare...

Steg 4: Demonstration

I distansläge sker ingen demonstration. Se istället kurssidan om distansläge.

Beroende på antal projektgrupper kommer ni att ha cirka 8–12 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 lite tid närmast innan demonstrationen till att "polera" projektet enligt ovan.

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 tidigare labbtider eller 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 kontrollera att ni vet varför ni har gjort som ni har gjort. Frågorna kan ställas till en specifik person. Alla ska känna 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? 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.

  • (Här sa vi tidigare att ni ska lämna in ett ifyllt labbomslag (papper). Det behövs inte längre.)

Projektrapporten lämnas in tillsammans med koden, incheckad i Git – inte vid demonstrationen.

Steg 5: Inlämning av kod och dokumentation

Se separata inlämningsinstruktioner.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2020-05-15