Kap 5.1
Planera ett projekt
Gå från en vag idé till en plan som går att programmera och testa.
Mål
Efter lektionen ska du kunna...
- förklara varför planering behövs
- skriva tydliga krav
- använda användningsfall, flödesschema och pseudokod
- dela upp ett projekt i delar
- bestämma projektets MVP
Vanlig fälla
Börja inte med kod direkt
Skapa filer
Skriv en meny
Lägg till funktioner
Ändra idén under tiden
Om målet är otydligt är det svårt att veta vad som ska byggas först.
Oklarheter i idén blir lätt större kodproblem.
Planering
Planen behöver inte vara perfekt
Planering betyder inte att varje detalj måste vara bestämd.
Planen ska göra problemet tillräckligt tydligt för att du ska kunna börja i rätt ordning.
Planen får ändras när du lär dig mer under projektet.
Från idé till krav
En vag idé räcker inte
Vag idé:
"Gör ett bibliotekssystem"
Tydligt krav:
"Användaren ska kunna söka efter en bok med titel."
Ett krav beskriver något programmet ska kunna göra.
Krav
Lånebibliotekets viktigaste funktioner
- Lägg till en bok med titel och författare.
- Sök efter en bok med titel.
- Visa om boken är tillgänglig eller utlånad.
- Spara data mellan programmets körningar.
Kraven visar att programmet behöver inmatning, lagring, sökning och utskrift.
Process
Sex steg från idé till start
- Beskriv idén.
- Skapa användningsfall.
- Rita viktiga flöden.
- Skriv pseudokod.
- Identifiera programmets delar.
- Bestäm en MVP.
Steg 1
Beskriv idén
Vad? Ett lånebibliotek för böcker.
Vem? En bibliotekarie.
Varför? För att registrera, söka och låna ut böcker.
Programmet ska vara ett lånebibliotek där
användaren kan lägga till, söka och låna ut böcker.
Steg 2
Användningsfall visar användarens mål
flowchart LR
A[Bibliotekarie] --> B((Registrera bok))
A --> C((Söka bok))
A --> D((Låna ut bok))
A --> E((Visa alla böcker))
Användningsfallen hjälper dig hitta vilka funktioner programmet behöver.
Användningsfall
Beskriv ett fall med text
Användare: Bibliotekarie
Mål: Låna ut en bok
1. Sök efter boken
2. Kontrollera att den finns
3. Kontrollera att den är tillgänglig
4. Ändra status till utlånad
5. Visa en bekräftelse
Steg 3
Rita flödet för utlåning
flowchart TD
A([Start]) --> B[Skriv boktitel]
B --> C[Sök efter boken]
C --> D{Finns boken?}
D -- Nej --> E[Visa: Boken finns inte]
D -- Ja --> F{Är boken tillgänglig?}
F -- Nej --> G[Visa: Redan utlånad]
F -- Ja --> H[Ändra status till utlånad]
H --> I[Visa bekräftelse]
E --> J([Slut])
G --> J
I --> J
Varför flödesschema?
Upptäck besluten före koden
- Vad händer om boken inte finns?
- Vad händer om den redan är utlånad?
- När får statusen ändras?
- Vilket meddelande ska användaren få?
Diagrammet gör alternativa vägar synliga innan du skriver villkoren.
Steg 4
Skriv pseudokod
Fråga efter boktitel
Sök efter boken
Om boken inte finns:
Visa "Boken finns inte"
Annars om boken redan är utlånad:
Visa "Boken är redan utlånad"
Annars:
Ändra status till utlånad
Visa en bekräftelse
Pseudokoden beskriver logiken utan krav på korrekt Pythonsyntax.
Från pseudokod
Nu blir funktionerna tydligare
def sök_bok(titel):
...
def är_tillgänglig(bok):
...
def låna_ut_bok(bok):
...
Varje del av pseudokoden kan bli en funktion eller ett villkor.
Steg 5
Identifiera programmets delar
- Gränssnitt: meny och användarinmatning.
- Logik: sökning och utlåning.
- Data: böcker och deras status.
- Lagring: fil eller databas.
- Felhantering: tom inmatning och saknade böcker.
Kodstruktur
Planera filer efter ansvar
lanebibliotek/
├── main.py # meny och programflöde
├── databas.py # spara och söka böcker
└── modeller.py # klassen Book
Filstrukturen visar var olika delar ska byggas.
Steg 6
MVP: minsta fungerande version
MVP betyder Minimum Viable Product.
Det är den enklaste versionen som löser projektets viktigaste problem.
Målet är att snabbt få ett litet program som går att köra och testa.
Avgränsa
Nu och senare
MVP:
- Lägg till böcker
- Visa alla böcker
- Sök efter titel
Senare:
- Inloggning
- Grafiskt gränssnitt
- Statistik
- Export till PDF eller CSV
Varför MVP?
Bygg kärnan innan extrafunktionerna
- Du får något körbart tidigt.
- Grundfunktionerna kan testas innan projektet växer.
- Du minskar risken att fastna i detaljer.
- Extra funktioner kan prioriteras efter att kärnan fungerar.
Exempel
Planera ett elevregister
Syfte: En lärare ska kunna registrera elever och poäng.
Användare: Lärare.
Viktigaste funktioner: Lägg till elev, visa elever och sök efter elev.
Lagring: Databas eller textfil.
Elevregister
Pseudokod för ett centralt flöde
Visa meny
Om användaren väljer "lägg till elev":
Fråga efter namn
Fråga efter poäng
Kontrollera att poängen är ett tal
Spara eleven
Skriv "Elev sparad"
Planen visar både normalflöde och behovet av validering.
Elevregister
Möjlig kodstruktur
elevregister/
├── main.py # meny och användarens val
├── databas.py # spara, hämta och söka elever
└── modeller.py # klassen Elev
Nu är det tydligt vilken del som kan byggas och testas först.
Arbetsordning
Bygg projektet stegvis
- Skapa datamodellen.
- Bygg lagringen.
- Testa att lägga till och hämta data.
- Lägg till menyn.
- Hantera felaktig inmatning.
- Bygg extrafunktioner sist.
Risker
Planera även för fel
- Vad händer vid tom inmatning?
- Vad händer om användaren skriver text där ett tal krävs?
- Vad händer om en sökning inte ger någon träff?
- Vad händer om filen eller databasen inte kan öppnas?
Förväntade fel bör finnas med i krav och testfall.
Checklista
Innan du börjar koda
- Vad är programmets syfte?
- Vem ska använda det?
- Vilka tre funktioner är viktigast?
- Vad ingår i MVP?
- Vilken data ska sparas?
- Vilka fel kan uppstå?
- Vilken del ska byggas först?
Öva
Planera ditt projekt
- Beskriv programmets syfte.
- Lista funktionerna.
- Skapa minst ett användningsfall.
- Rita ett centralt flöde.
- Skriv pseudokod för en funktion.
- Bestäm MVP och vad som får vänta.
Sammanfattning
Kom ihåg
- Krav gör en vag idé programmerbar.
- Användningsfall visar vad användaren behöver.
- Flödesscheman visar beslut och alternativa vägar.
- Pseudokod beskriver logiken före syntaxen.
- MVP avgränsar den första fungerande versionen.
- En bra plan visar vad som ska byggas först.