Speksilähtöinen kehitys ja hyväksymiskriteerit
Promptaus kertoo AI:lle miten tehdä — speksi kertoo mitä tehdä ja milloin se on valmis. Tässä oppitunnissa opit kirjoittamaan speksejä, jotka ohjaavat AI:ta tuottamaan juuri oikean lopputuloksen.
Miksi speksi ennen koodia?
Speksilähtöinen kehitys
Speksilähtöinen kehitys (spec-driven development) tarkoittaa, että jokainen ominaisuus kuvataan täsmällisenä speksinä ennen toteutusta. Speksi sisältää tavoitteen, hyväksymiskriteerit, tiedostot jotka muuttuvat ja testausstrategian. AI-agentti käyttää speksiä suunnitelmana ja tarkistuslistana.
Speksi vs. prompti
| Aspekti | Prompti | Speksi |
|---|---|---|
| Tarkoitus | Yksittäinen pyyntö | Kokonainen ominaisuus |
| Laajuus | 1–5 lausetta | Strukturoitu dokumentti |
| Verifioitavuus | Subjektiivinen | Objektiivinen (AC:t) |
| Toistettavuus | Heikko | Vahva |
| Arvo pitkällä aikavälillä | Katoava | Dokumentaatio |
Speksin rakenne
# Feature: Käyttäjän profiilisivu
## Tavoite
Käyttäjä näkee oman profiilinsa tiedot ja voi muokata niitä.
## Hyväksymiskriteerit
### AC1: Profiilin näyttäminen
**Given** kirjautunut käyttäjä
**When** navigoi osoitteeseen /profile
**Then** näkee nimensä, sähköpostinsa ja profiilikuvansa
### AC2: Nimen muokkaus
**Given** kirjautunut käyttäjä profiilisivulla
**When** muokkaa nimeä ja painaa Tallenna
**Then** nimi päivittyy tietokantaan ja UI:ssa
### AC3: Virheenkäsittely
**Given** kirjautunut käyttäjä profiilisivulla
**When** yrittää tallentaa tyhjän nimen
**Then** näkee virheilmoituksen "Nimi ei voi olla tyhjä"
## Tiedostot
| Tiedosto | Muutos |
|----------|--------|
| app/profile/page.tsx | Uusi sivu |
| lib/users/profile.ts | Profiilifunktiot |
| components/ProfileForm.tsx | Lomakekomponentti |
## Testausstrategia
- Yksikkötestit: ProfileForm validointi
- Integraatiotesti: profiilin tallennus
- E2E: koko profiilimuokkausflowHyväksymiskriteerit: Given-When-Then
Given-When-Then on tehokkain tapa kirjoittaa hyväksymiskriteereitä, koska jokainen kriteeri on suoraan käännettävissä testiksi.
Given — Esiehto
Mikä tilanne vallitsee ennen toimintoa? Kirjautunut käyttäjä? Tyhjä tietokanta? Tietty sivu auki?
When — Toiminto
Mitä tapahtuu? Käyttäjä klikkaa nappia? API vastaanottaa pyynnön? Ajastettu tehtävä käynnistyy?
Then — Odotettu tulos
Mikä on lopputulos? UI näyttää tietoa? Tietokanta päivittyy? Sähköposti lähtee?
Pro-vinkki
Jokainen hyväksymiskriteeri pitäisi voida suoraan kääntää testiksi. Jos kriteeriä ei voi testata automaattisesti, se on todennäköisesti liian epämääräinen. Kirjoita kriteeri uudelleen täsmällisemmin.
Speksi ohjaa AI:ta
Kun annat AI-agentille speksin promptin sijaan, agentti:
- Ymmärtää laajuuden — tietää mitä tiedostoja luoda/muokata
- Tarkistaa työnsä — vertaa tulosta hyväksymiskriteereihin
- Priorisoi — aloittaa kriittisimmistä kriteereistä
- Dokumentoi — speksi toimii muutoksen dokumentaationa
Toteuta seuraava speksi:
# Feature: Hakutoiminto
## AC1: Perushaku
Given käyttäjä on hakusivulla
When kirjoittaa hakukenttään "React" ja painaa Enter
Then näkee listan tuloksista jotka sisältävät "React"
## AC2: Tyhjä haku
Given käyttäjä on hakusivulla
When painaa Enter tyhjällä hakukentällä
Then näkee ilmoituksen "Kirjoita hakutermi"
## AC3: Ei tuloksia
Given käyttäjä on hakusivulla
When hakee termillä "xyznonexistent123"
Then näkee ilmoituksen "Ei hakutuloksia"
Tiedostot:
- app/search/page.tsx (uusi)
- components/SearchBar.tsx (uusi)
- lib/search/searchService.ts (uusi)
Noudata projektin AGENTS.md-sääntöjä.
Kirjoita testit ennen toteutusta (TDD).Speksien laadun tarkistuslista
Ennen kuin annat speksin AI:lle, tarkista:
- Jokainen AC on testattavissa
- Given-When-Then on täydellinen (ei puuttuvia osia)
- Tiedostolista on realistinen
- Virhetilanteet on huomioitu
- Edge caset on tunnistettu
- Speksi on linjassa AGENTS.md:n kanssa
Mikä on Given-When-Then -mallin suurin etu AI-avusteisessa kehityksessä?
Iteratiivinen speksityö
Speksi harvoin syntyy kerralla. Käytä iteratiivista prosessia:
- Luonnos — Kirjoita ensimmäinen versio nopeasti
- Tarkistus — Käy läpi tarkistuslista
- AI-arviointi — Pyydä AI:ta arvioimaan speksin selkeyttä
- Jalostus — Lisää puuttuvat edge caset ja virhetilanteet
- Hyväksyntä — Speksi on valmis toteutettavaksi
Kirjoita speksi oikealle ominaisuudelle
Valitse oikea tai kuvitteellinen ominaisuus ja kirjoita sille täydellinen speksi: 1) Tavoite, 2) Vähintään 3 hyväksymiskriteeriä Given-When-Then -muodossa, 3) Tiedostolista, 4) Testausstrategia. Anna speksi AI-koodaustyökalulle ja arvioi tulosta.
Yhteenveto
- Speksi kertoo AI:lle mitä tehdä ja milloin se on valmis
- Given-When-Then on standardi hyväksymiskriteerien kirjoittamiseen
- Jokainen kriteeri pitää olla testattavissa
- Speksi sisältää tavoitteen, AC:t, tiedostolistan ja testausstrategian
- Seuraavaksi yhdistämme kaiken: TDD tekoälyn kanssa — ensimmäinen projekti