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 tip
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