Programdesign Dokumentera Välj datastruktur så programmet blir så enkelt som möjligt. Välj algoritm så programmet blir lättläst, robust och effektivt. Analysera programmet för att få en bra metod. Överväganden vid val av algoritm är: Lättlästhet minnesutrymme storlek på indata Testa programmet med möjliga (och omöjliga) indata och kontrollera att det fungerar. Verifiera programmet. Försök att i förväg verifiera att algoritmerna fungerar. Det är viktigt att programmet är lättläst och kommenterat (där det behövs) Namn väljs så att de har mening i programmet. Bra namn i huvudprogrammet på allt som används globalt. Bra procedur- och funktionsnamn. Tillåtet att ha kortare namn i detaljerade underprogram. I loopar kan man använda enbokstaviga namn men försök hitta beskrivande namn istället. Om det behövs kommentera, men se först efter om koden går att förenkla så kommentaren blir överflödig. Av koden ska det framgå hur programmet fungerar. Kommentarer skall alltid tala om vad/varför inte hur. Namnen skall vara enkla, inte likna varandra och få läsaren på rätt spår. Använd aldrig namn som l, o, lo, ol... DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 1 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 2 / 20 Dokumentera Dokumentera varje underprogram. Det skall innehålla kommentarer avseende följande: 1. Programmerare (om fler) 2. Versionsnummer och datum 3. Vad programmet gör och ev. metod som används 4. In- och utdata (domän och codomän). 5. Varifrån anrop sker (vilken proc/funkt anropar och ev. i vilken situation) 6. Var ytterligare dokumentation finns. 7. Endkommentarer vid blockslut Svåra programavsnitt Förklara svåra programavsnitt Förklara konstanter, typer och variabler. Uppdatera dokumentationen då koden uppdateras. Formatera koden så att den blir lättläst DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 3 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 4 / 20
In- och utdata till procedurer och funktioner Definiera automatiskt Previllkor : De begränsningar under vilka en rutin fungerar. Postvillkor : Eller: De egenskaper hos tillståndet som är resultat av en rutins anrop. Om du lovar att previllkor är uppfyllda innan exekveringen så lovar jag (rutinen) att postvillkor är uppfyllda efter. För varje rutin skall previllkor och postvillkor anges! Helst skall rutinen kontrollera att de uppfylls. Vid specifikation av problem: definiera automatiskt Axiom Konstruktorer Selektorer Previllkor Postvillkor DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 5 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 6 / 20 Top-down-metoden Obs! Arbeta top-down (hierarki av abstraktioner). Man arbetar uppifrån och ned, dvs börja med att betrakta den övergripande strukturen för att sedan bryta ned den i delbitar tills vi når detaljnivå. Bli expert på att hitta fel och tyda felmeddelanden. Att korrigera dem är oftast förhållandevis enkelt. Ett program läses under längre tid än det skrivs!!!! Då du avslutat ditt arbete och programmet är levererat så är c:a 80% av jobbet kvar. DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 7 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 8 / 20
Vägar att hitta fel... Testning av program Testa funktioner och procedurer vartefter de blir klara, detta istället för att köra hela programmet när det är klart. Utskrifter i programmet som visar vad som händer. Använd WriteLn för att skriva ut värden på exempelvis slingvariabler. Debugger ger möjlighet att spåra fel genom utskrift av variabelvärden, stackdump osv Statisk analyserare hittar variabler som aldrig används, inte initierats men används, delar av kod man aldrig når osv. Tänk på att det är möjligt att påvisa närvaron av buggar men inte att inga finns. Vilka metoder kan vi använda för att testa program? Vi utgår sorteringsproceduren: DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 9 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 10 / 20 Testning av program Black box Sista testet kraschar sort, ändra Black box testa med Lätta värden som går att kontrollera. T.ex. sort(0, 0, 0), olika permutationer av 0 och 1 i sort(0, 1, 1) samt olika permutationer av 1, 2 och 3 i sort(1, 2, 3). Typiska värden, t.ex. sort(7, 23, 1) Gränsvärden, t.ex. sort(0, 1/sys.maxsize, -1/sys.maxsize) Felaktiga värden, t.ex. sort( a, 3, 4.13) except TypeError as t: print(t) DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 11 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 12 / 20
Testning av program Glass box Testning av program Ticking box Glass box: Välj värden så att alla programmets vägar genomlöps. Anropet sort(3, 5, 1) genomlöper första if-satsen Anropet sort(1, 3, 5) genomlöper andra if-satsen Anropet sort(5, 1, 3) genomlöper tredje if-satsen Ticking-box-metoden är den enklaste av alla: Strunta i felen, användaren kommer ju ändå att upptäcka dem. Då felrapporterna kommer - åtgärda. Metoden kallas också den tidsinställda bomben. DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 13 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 14 / 20 Indentera! Indentera forts... Om Dig, Eriksson om vilken jag ej kunnat tänka mig något dylikt har jag då Du då jag till följd av iråkad snuva måst nysa brast i skratt fått en högst ofördelaktig tanke. Lektorn: Om Dig, Eriksson, om vilken jag ej kunnat tänka mig något dylikt, har jag, då Du, då jag till följd av iråkad snuva måst nysa, brast i skratt, fått en högst ofördelaktig tanke. (Albert Engström) Indentering kan vara klargörande i många situationer! DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 15 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 16 / 20
Från och med labb 8 måste ni... Från och med labb 8 måste ni dokumentera er kod Det skall finnas: 1. Previllkor 2. Postvillkor Och, om det är tillämpligt (använd sunt förnuft) 3. Programmerare (om fler) 4. Versionsnummer och datum 5. Vad programmet gör och ev. metod som används 6. In- och utdata (domän och codomän). 7. Varifrån anrop sker (vilken proc/funkt anropar och ev. i vilken situation) ## # sort(a, b, c) # # pre: 3 parametrar som är jämförbara med avseende på > # post: tupel med värdena i stigande ordning ## except TypeError as t: print(t) # end sort DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 17 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 18 / 20 Det finns en dokumentationskonvention som man bör ansluta till när man börjar göra stora Pythonprogram. och som ni naturligtvis kan använda redan nu """Sortera tre värden pre: 3 parametrar som är jämförbara med avseende på > post: tupel med värdena i stigande ordning """ except TypeError as t: print(t) # end sort >>> sort(3, 4, 2) (2, 3, 4) >>> print(sort. doc ) Sortera tre värden pre: 3 parametrar som är jämförbara med avseende på > post: tupel med värdena i stigande ordning DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 19 / 20 DA2001 (Föreläsning 15) Datalogi 1 Hösten 2013 20 / 20