← 返回列表

AI viðtalsröð 16: Hvernig ætti góð spec kóðun að vera?

Góð Spec kóðun (forskriftardrifin forritun) snýst um að breyta „óskýrum hugmyndum“ í „nákvæman, sannanlegan og framkvæmanlegan samning“. Þetta snýst ekki bara um að skrifa skjal, heldur að koma á óvíslegu samskiptamáli milli manna og gervigreindar (eða manna emellan). Hér að neðan mun ég gefa dæmi um góða spec frá fjórum víddum: efnisuppbygging forskriftar, ritunarreglur, samvinnuferli við gervigreind, gæðastýring.


1. Uppbygging forskriftarskjals (með aðgerðareiningu sem dæmi)

Kafli Áskilið innihald Dæmi
1. Markmið og umfang Ein setning sem útskýrir hvað er gert, skýrt hvað er ekki gert „Útfæra notendaskráningar API, án tölvupóststaðfestingar“
2. Inn-/útgöngusamningur Gagnaskipan, gerðir, áskilin/valfrjáls svið, dæmi POST /register beiðnilykill {email: string, password: string}, svar 201 eða 400 með villukóða
3. Hegðun og rökfræði Viðskiptareglur, jaðarskilyrði, ástandsumbreytingar „Lykilorðslengd 8-20 stafir, að minnsta kosti einn tölustaf; tölvupóstur þegar til → skila 409
4. Villumeðhöndlun Allar mögulegar undantekningar og samsvarandi villukóðar/skilaboð „Gagnagrunnstenging mistókst → skila 503, án stafls“
5. Óvirkar kröfur Afköst (svartími < 200ms), öryggi (parameterized queries), annálar, sjáanleiki „Allar SQL verða að nota forþýðingu; skrá email en ekki password
6. Prófunardæmi (lykilatriði) Að minnsta kosti 3 dæmigerð inntök + 2 jaðar/undantekningar inntök, með væntanlegu úttaki Sjá töflu hér að neðan
7. Ósjálfstæði og skorður Hvaða bókasöfn, útgáfur, umhverfisbreytur „Python 3.10+, FastAPI, umhverfisbreyta DB_URL

Prófunardæmi (innfellt í spec)

Atburðarás Inntak Væntanlegt úttak
Eðlileg skráning email: a@b.com, pwd: Pass1234 201, skilar user_id
Lykilorð of stutt pwd: Ab1 400, villukóði WEAK_PASSWORD
Tölvupóstur þegar til sama email 409, villukóði EMAIL_EXISTS

Góð Spec verður fyrst að skrifa prófunardæmi, því gervigreind getur beint búið til einingapróf út frá þeim og sjálfvirkt staðfest að lokum.


2. Meginreglur við skrif á Spec (SMART afbrigði)

Meginregla Skýring Andstætt dæmi
Nákvæmni (Precise) Notaðu tilteknar tölur, gerðir, Boolean skilyrði; forðastu „eins og mögulegt“ eða „venjulega“ ❌ „Lykilorð verður að vera nóg öruggt“ → ✅ „Lykilorð að minnsta kosti 8 stafir, inniheldur hástaf, lágstaf, tölustaf“
Sannanleiki (Verifiable) Hver krafa verður að vera hægt að staðfesta með sjálfvirkum prófum eða mannlegri skoðun sem staðist/mistókst ❌ „Kóðinn verður að vera glæsilegur“ → ✅ „Fylgiflækjustig falls ≤ 10, engir endurteknir kóðablokkir“
Óvísindi (Unambiguous) Sama hugtak notast samkvæmt í öllum textanum, gefðu upp hugtakaskrá ef þörf krefur ❌ „Ef notandi er ekki til, skila villu“ → ✅ „Notandi ekki til → skila 404 og {code: 'USER_NOT_FOUND'}
Heildstæði (Complete) Ná yfir hamingjuferð, allar undantekningarleiðir, óvirkar kröfur ❌ Aðeins skrifað árangursatriði → ✅ Innifalið gagnagrunnstímaút, ófullnægjandi heimildir o.s.frv.
Atómísk (Atomic) Ein spec lýsir aðeins einu sjálfstætt afhendanlegu aðgerðaratriði (þannig að gervigreind getur klárað það í einu) ❌ Nota eina spec til að skrifa „allt greiðslukerfi“ → ✅ Skipt í „búa til greiðsluseðil“, „kallbak undirskriftarstaðfesting“, „endurgreiðsla“

3. Spec Kóðunarferli við samvinnu við gervigreind

  1. Maður skrifar spec (ofangreind uppbygging, sérstaklega prófunardæmi og fallundirskriftir).
  2. Fóðra spec strax inn í gervigreind (ekki til viðbótarspjallskrár, forðastu „vibe“ mengun).
  3. Gervigreind framleiðir kóða + einingapróf (gervigreind verður að búa til keyranleg próf samkvæmt prófunardæmum í spec).
  4. Keyra próf: Ef öll standast, farðu í næsta skref; ef ekki, lagfærðu spec eða kóða beint (hér má fara í smár lykkjur, en skráðu breytingar).
  5. Mannleg skoðun: Athuga hvort einhverjar aðgerðir utan spec (scope creep) hafi verið bættar við, athuga öryggi/afköst.
  6. Frysta: Skilaðu spec skjalinu og lokakóðanum saman í geymslu sem varanlegt skjal.

Lykilaðferð: Spec sem kóði – notaðu spec.md + test_spec.py, þar sem prófunarskráin kemur beint úr dæmum í spec, þannig að seinna við breytingar á kóða þarf bara að keyra próf til að staðfesta að spec sé ekki brotið.


4. Áhrif góðs Spec (getur verið viðmið fyrir samþykki)

  • Ákveðni: Sama spec gefið mismunandi gervigreind (eða mismunandi fólki) framleiðir svipaða útfærslu.
  • Prófanleiki: Eftir að kóði er skrifaður er hægt að sjálfvirkt staðfesta 90% réttleika.
  • Viðhaldanleiki: Eftir hálft ár getur hver sem er lesið spec og skilið upphaflega hönnunarhugmynd.
  • Lítill samskiptakostnaður: Liðið ræðir aðeins spec, ekki einstakar kóðalínur.
  • Öryggi/gæði innbyggð: Öryggiskröfur (eins og parameterized queries) og jaðarskilyrði skrifuð í spec, gervigreind verður að fylgja.

5. Dæmi um gott Spec (einangruð útgáfa)

# Spec: Notendaskráningar API

## Umfang
- Tekur við email, password
- Sendir ekki staðfestingarpóst, athugar ekki raunveruleika tölvupósts

## Samningur
POST /register
Content-Type: application/json
Beiðni: { "email": string, "password": string }
Svar 201: { "user_id": string }
Svar 400: { "code": "INVALID_PASSWORD" | "INVALID_EMAIL" }
Svar 409: { "code": "EMAIL_ALREADY_EXISTS" }

## Hegðun
- email verður að vera í samræmi við RFC 5322 grunnform (a@b.c)
- password: lengd 8-20, að minnsta kosti einn tölustafur og einn hástafur
- Notaðu bcrypt til dulritunar, salt kostnaður 10
- Ef email finnst þegar til fyrir gagnagrunnsskráningu → 409

## Prófunardæmi (inntak -> væntanleg stöðukóði+svarsvið)
| Inntak email | password | Vænting |
|------------|----------|------|
| test@x.com | Pass1234  | 201, user_id til |
| test@x.com | pass      | 400, INVALID_PASSWORD |
| bad        | Pass1234  | 400, INVALID_EMAIL |
| (tölvupóstur sem er þegar til) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |

## Óvirkar kröfur
- SQL verður að nota parameterized queries (varnir gegn innspýtingu)
- Annálar skrá upprunalega IP-tölu skráningar, ekki lykilorð
- Svartími 95% beiðna < 100ms (án bcrypt)

## Ósjálfstæði
- Python 3.10+, FastAPI, bcrypt, asyncpg

Góð Spec kóðun = að breyta „hönnunarákvörðunum“ manna í „prófunardæmi + gerðarundirskriftir + hegðunarskorður“ fyrir vélina, þannig að gervigreind sér um útfærsluna, en maður heldur alltaf stjórn á gæðum og stefnu.

评论

暂无已展示的评论。

发表评论(匿名)