Siirry sisältöön

TDD tekoälyn kanssa — ensimmäinen projekti

Yhdistä kaikki opitut taidot: luo ensimmäinen projekti käyttäen TDD-prosessia (Red-Green-Refactor) yhdessä AI-koodaustyökalun kanssa.

AI Builders
Aloittelija
45 min

TDD tekoälyn kanssa — ensimmäinen projekti

Tässä oppitunnissa yhdistämme kaikki moduulin taidot: projektisäännöt, skillit, promptauksen ja speksit. Rakennamme ensimmäisen projektin käyttäen Test-Driven Development -prosessia yhdessä AI:n kanssa.

TDD: Red → Green → Refactor

TDD (Test-Driven Development)

TDD on kehitysprosessi, jossa testit kirjoitetaan ENNEN toteutusta. Sykli on: Red (kirjoita failaava testi) → Green (kirjoita minimikoodi joka passaa) → Refactor (paranna koodia testien suojassa). AI:n kanssa TDD on erityisen tehokas, koska testit toimivat automaattisena verifointina AI:n tuottamalle koodille.

Miksi TDD + AI?

AI tuottaa koodia nopeasti, mutta miten tiedät onko se oikeaa koodia? TDD ratkaisee tämän:

VaiheIlman TDDTDD:n kanssa
AI generoi koodin"Näyttää hyvältä?"Testit kertovat onko oikein
Muutos rikkoo jotainHuomaat tuotannossaTestit failaavat heti
RefaktorointiPelottaaTestit suojaavat
RegressiotYleisiäHarvinaisia

TDD-sykli AI:n kanssa

Vaihe 1: RED — Kirjoita testi ensin

Red: Failaava testitypescript
// lib/validation/__tests__/email.test.ts
import { describe, it, expect } from 'vitest'
import { validateEmail } from '../email'

describe('validateEmail', () => {
it('should accept valid email', () => {
  expect(validateEmail('user@example.com')).toEqual({
    valid: true,
    email: 'user@example.com',
  })
})

it('should reject email without @', () => {
  expect(validateEmail('invalid')).toEqual({
    valid: false,
    error: 'Virheellinen sähköpostiosoite',
  })
})

it('should reject empty string', () => {
  expect(validateEmail('')).toEqual({
    valid: false,
    error: 'Sähköposti on pakollinen',
  })
})

it('should trim whitespace', () => {
  expect(validateEmail('  user@example.com  ')).toEqual({
    valid: true,
    email: 'user@example.com',
  })
})
})

Testit failaavat koska validateEmail-funktiota ei ole vielä olemassa. Tämä on Red-vaihe.

Vaihe 2: GREEN — Anna AI:n toteuttaa

Anna AI:lle testin ja pyydä toteutusta:

Prompti AI:llemarkdown
Toteuta validateEmail-funktio joka läpäisee
kaikki nämä testit.

Noudata sääntöjä:
- TypeScript strict mode
- Palauta tyypitetty Result-objekti
- Ei ulkoisia kirjastoja

AI tuottaa toteutuksen:

Green: Toteutustypescript
// lib/validation/email.ts
type ValidationResult =
| { valid: true; email: string }
| { valid: false; error: string }

export function validateEmail(input: string): ValidationResult {
const trimmed = input.trim()

if (!trimmed) {
  return { valid: false, error: 'Sähköposti on pakollinen' }
}

const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
if (!emailRegex.test(trimmed)) {
  return { valid: false, error: 'Virheellinen sähköpostiosoite' }
}

return { valid: true, email: trimmed }
}

Aja testit — kaikki vihreällä. Tämä on Green-vaihe.

Vaihe 3: REFACTOR — Paranna koodia

Testien suojassa voit pyytää AI:ta refaktoroimaan:

Refaktorointipromptmarkdown
Refaktoroi tämä funktio:
- Erota validointisäännöt omiksi funktioiksi
- Lisää JSDoc-dokumentaatio
- Varmista että regex on turvallinen (ei ReDoS)

Pro-vinkki

TDD:ssä testit ovat turvaverkko. Kun testit ovat olemassa, voit pyytää AI:ta tekemään rohkeita refaktorointeja — testit kertovat heti jos jokin meni rikki.

Käytännön projekti: Todo-API

Rakennetaan yksinkertainen Todo-API TDD:llä ja AI:n avulla.

Speksi

Todo-API speksimarkdown
# Feature: Todo API

## AC1: Luonti
Given tyhjä todo-lista
When POST /api/todos { title: "Osta maitoa" }
Then palautaa 201 + todo-objektin id:llä

## AC2: Listaus
Given 2 todoa tietokannassa
When GET /api/todos
Then palautaa listan kahdella todolla

## AC3: Valmistuminen
Given olemassa oleva todo
When PATCH /api/todos/:id { completed: true }
Then todo merkitään valmiiksi

## AC4: Validointi
Given tyhjä title
When POST /api/todos { title: "" }
Then palautaa 400 + virheilmoitus

TDD-prosessi

  1. Kirjoita testit AC1:lle__tests__/api/todos.test.ts
  2. Anna AI:n toteuttaaapp/api/todos/route.ts
  3. Aja testit → Kaikki vihreällä?
  4. Toista AC2–AC4 → Jatka samaa sykliä
  5. Refaktoroi → Pyydä AI:ta parantamaan koodia

Testin ja toteutuksen suhde

AC1 (testi) → POST handler (koodi) → ✅ Pass
AC2 (testi) → GET handler (koodi) → ✅ Pass
AC3 (testi) → PATCH handler (koodi) → ✅ Pass
AC4 (testi) → Validointi (koodi) → ✅ Pass

AI:n rooli TDD:ssä

TDD-vaiheIhmisen rooliAI:n rooli
RedKirjoittaa testin (tai tarkistaa)Voi ehdottaa testejä
GreenTarkistaa toteutuksenGeneroi toteutuksen
RefactorPäättää refaktoroinnin suunnanToteuttaa refaktoroinnin

AI-TDD-periaate

TDD:ssä ihminen omistaa speksin ja hyväksymiskriteerit, AI omistaa toteutuksen. Testit ovat sopimus näiden välillä — ne varmistavat, että AI:n tuottama koodi tekee sen mitä ihminen halusi.

Tietovisa

Mikä on TDD:n tärkein hyöty AI-avusteisessa kehityksessä?

TDD-harjoitus: Rakennetaan laskuri

Toteuta yksinkertainen laskurimoduuli TDD:llä: 1) Kirjoita testit ensin (add, subtract, multiply, divide + virhetilanne nollalla jako), 2) Anna AI:n toteuttaa funktiot, 3) Aja testit, 4) Refaktoroi. Bonus: lisää testit edge caseille (erittäin suuret luvut, desimaalit).

Moduulin yhteenveto

Olet nyt oppinut Greenfield-moduulin kaikki perustaidot:

  1. Työkalut & säännöt — AI-koodaustyökalut ja AGENTS.md
  2. Skills — Kyvykkyyksien dokumentointi ja löydettävyys
  3. Promptaus — Konteksti → Tehtävä → Rajoitteet
  4. Speksit — Given-When-Then hyväksymiskriteerit
  5. TDD — Red → Green → Refactor AI:n kanssa

Seuraavassa moduulissa siirrymme Brownfield-kehitykseen: miten turvallisesti muokata olemassa olevaa koodikantaa AI:n avulla.

Kirjaudu seurataksesi edistymistäsi

Kysymykset ja vastaukset

Kirjaudu sisään osallistuaksesi keskusteluun