Göm menyn

TDIU16 Process- och operativsystemprogrammering

Online-övningar


Online-övningar

I visualiseringsverktyget finns också möjlighet att lösa problem online. Dessa problem är av samma typ som de uppgifter som kommer på tentan. Det är alltså ett bra sätt att förbereda sig inför tentan. Löser du tillräckligt många problem i kursen kan du också få ett bonuspoäng till tentan (för högre betyg, precis som för deadlines).

I systemet finns ett antal problem. Varje problem består av en implementation av en enkel datastruktur och ett testprogram (som i tentaproblemen). Målet är att komma fram till en så bra implementation som möjligt genom att alla som deltar hjälps åt att skriva bra testfall till problemet.

Både testfall och implementationer är tillgängliga för alla inloggade i systemet. Du kan alltså ta hjälp av testfall som andra har skrivit för att förbättra din implementation. På samma sätt kan du förbättra dina testfall genom att studera din egen eller andras implementationer, och skriva tester som hittar fel i dem.

Denna del av visualiseringsverktyget är omstrukturerad för i år. Det finns därför en mindre risk att du stöter på problem. Hör i så fall av dig och beskriv vad problemet är så kan jag lösa problemet. Utöver det så kommer jag att analysera aktiviteten i systemet (anonymt) för att utvärdera hur systemet fungerar inför kommande år. Anonyma resultat från denna analys kan komma att publiceras i vetenskapliga tidsskrifter.

Kom igång

För att lösa problem använder du Online-menyn i Progvis. Den innehåller följande alternativ:

  • Connect Anslut till problembanken. Gör detta innan du använder något annat alternativ i menyn. Första gången kommer du få ett meddelande om att du behöver logga in. Klickar du på OK så kommer din webbläsare öppnas. Välj då att logga in med LiU-ID (annars kan du inte få bonus). Du blir sedan ombedd att ange ett namn som visas för andra i systemet, och blir till slut ombedd att klocka på Connect igen.
  • Disconnect Stäng anslutningen. Du behöver oftast inte göra detta manuellt.
  • Highscore... Visa topplistan (inklusive dina poäng). Här kan du också byta ditt namn i systemet.
  • Problems... Detta är antagligen det viktigaste alternativet i menyn. Detta alternativ visar en lista över de problem du kan lösa. Se nedan för mer detaljer. Du kan också trycka Ctrl+P.
  • Submit problem... Här kan du ladda upp egna problem till alla användare om du vill. Det är inte något som förväntas i kursen. Problemen består av tre delar: en implementation, ett test och en referensimplementation. Den sistnämnda används endast internt för att validera testfall.
  • Log out Logga ut. Detta gör att du kommer få logga in igen nästa gång du klickar på Connect. Detta är användbart ifall du vill logga in som en annan användare, annars är det inte viktigt att logga ut.

Lösa problem

För att börja lösa problem kan du alltså välja Online -> Problems.... Gör du detta kommer du se ett nytt fönster med en lista av problem till vänster. I den listan väljer du vilket problem du vill arbeta med. Vad som syns när du har valt ett problem beror på om du har arbetat med problemet förut eller inte.

Nya problem

Om du väljer ett problem som du inte tidigare har arbetat med blir du ombedd att undersöka originalproblemet innan du kan se andras lösningar. Klickar du på knappen Solve så blir du ombedd att hitta ett fel i koden. Detta gör du genom att stega fram trådarna på ett sådant sätt så att programmet inte fungerar korrekt. Du är schemaläggaren och ska hitta en interleaving som gör att programmet inte fungerar.

När du har hittat ett fel blir du ombedd att modifiera implementationen för att korrigera felet. Detta gör du genom att klicka på knappen Open impl. i den gröna ytan i toppen av fönstret. Detta öppnar den texteditor du har valt som standard i ditt system så att du kan redigera koden. När du har sparat koden i din editor kan du klicka på Reload och se hur din lösning fungerar, och verifiera att den fungerar som den ska.

När du känner dig nöjd med dina ändringar kan du klicka på Submit. När du gör detta kommer Progvis verifiera att du har löst de fel som testet exponerade. Lyckades du får du möjligheten att ladda upp din implementation. Efter detta kan du se andras tester och implementationer.

Påbörjade problem

Om du tidigare har arbetat med ett problem så är idén att du med hjälp av andra studenters implementationer och tester iterativt förbättra dina testfall och din implementation. Du förbättrar din implementation genom att hitta ett testfall som visar på fel i din implementation, och löser de felen. Om det inte finns några sådana kan du förbättra dina testfall för att hitta fel i din, eller andra studenters implementationer.

Väljer du ett problem som du har arbetat med tidigare så ser du tre flikar i högerdelen av fönstret:

  • Overview Denna flik visar den senaste versionen av din kod tillsammans med den senaste versionen av ditt test. I botten av skärmen finns ett statusmeddelande som säger om den senaste versionen av ditt testfall visar fel i den senaste versionen av din implementation eller inte. Det finns också en knapp som låter dig förbättra antingen din implementation eller ditt test, beroende på om det finns fel eller inte.
  • Improve my implementation Denna flik innehåller en lista över tester som andra har laddat upp i systemet. Systemet visar också om testerna har hittat ett fel i din implementation eller inte. Genom att klicka på testerna så kan du se koden i högerdelen av fliken för att se hur testkoden ser ut. Ibland finns det tester som inte har verifierats ännu. Klicka i så fall antingen på Check all för att kontrollera alla (det kan ta ett tag om det är många), eller markera ett testfall och klicka på Check. Om du väljer ett testfall som har hittat fel i din implementation kan du klicka på knappen Improve my implementation för att se vad felet är (likt hur du gjorde första gången), och sedan försöka förbättra din implementation.
  • Improve my test Denna flik innehåller en lista över implementationer som andra har laddat upp i systemet. Systemet visar också om ditt test har hittat ett fel i implementationerna eller inte. Klickar du på koden så kan du se hur implementationen ser ut. Målet är att hitta en implementation som du tror innehåller ett fel, men som ditt test inte hittar ännu. Då kan du med hjälp av den implementationen förbättra ditt test så att testet hittar felet och ladda upp testet så att det kan hjälpa andra att hitta fel. Innan du laddar upp ditt nya test kommer systemet kontrollera att dit test är korrekt genom att jämföra det mot en referensimplementation av datastrukturen. Likt i förra fliken kan det finnas rader där statusen är okänd. Du kan då kontrollera dessa med Check all eller genom att välja dem och klicka på Check.

Poäng

Du får poäng enligt följande när du arbetar i systemet:

  • 50 p om du lyckas lösa felet i originalproblemet
  • 10 p om du skickar in en ny implementation (ej första inskickningen, oavsett om den är korrekt eller inte)
  • 50 p om du skickar in en ny implementation som löser alla problem i tested (ej första inskickningen)
  • 100 p om du skickar in ett test som hittar ett fel i en implementation

Första inskickningen på ett problem ger alltid 50 poäng, och denna gång kräver systemet att din inskickning löser felen som visas av det (enkla, men ej kompletta) testfallet. Nästkommande inskickningar av implementationer ger antingen 10 poäng om de inte löser alla fel i ett testfall, eller 10 + 50 poäng om de löser felen som testet visar. Inskickning av nya tester ger alltid 100 poäng, då systemet kräver att inskickade tester hittar ett fel i någon implementation.

Notera: Poängen du får reduceras med en tredjedel om du använder din egen implementation för att förbättra dina tester, eller dina egna tester för att förbättra din implementation.

Som det står på sidan Examination så får du 1 bonuspoäng på tentan om du samlar 500 poäng eller mer i systemet. Detta kräver att du har loggat in med ditt LiU-ID, annars vet vi inte vem som har samlat poäng. Notera att dessa övningar är tänkta att lösas individuellt.

Märker vi att systemet missbrukas (exempelvis genom att medvetet skicka in kod som introducerar gamla fel), så kan vi komma att ta bort dessa inskickningar och därmed reducera poängen.


Sidansvarig: Filip Strömbäck
Senast uppdaterad: 2024-03-19