AI-Serie Interview 16: Wéi soll e gudde Spec Coding ausgesinn?
E gudde Spec Coding (Spezifikatiounsgedriwwe Programmatioun) geet dorëm, "ongenaue Iddien" a "präzis, verifizéierbar, ausféierbar Kontrakter" ze verwandelen. Et geet net nëmmen drëm, en Dokument ze schreiwen, mee ém en eendeitegt Kommunikatiounsmedium tëscht Mënsch an AI (oder tëscht Mënschen) opzebauen. Hei ënnert wäert ech vu Inhaltsstruktur, Schreifprinzipien, Zesummenaarbecht mat AI a Qualitéitsverifikatioun virstellen, wéi e gudde Spec ausgesinn.
1. Standardstruktur vun engem Spezifikatiounsdokument (Beispill Funktiounsmodul)
| Sektioun | Obligatoreschen Inhalt | Beispill |
|---|---|---|
| 1. Zil a Beréich | E Saz erkläert wat gemaach gëtt, a wat net gemaach gëtt | "Implementéiert User-Registréierungs-API, net mat E-Mail-Verifikatioun" |
| 2. Input/Output-Kontrakt | Datenstruktur, Typ, obligatoresch/fakultativ Felder, Beispillwäerter | POST /register Ufro Kierper {email: string, password: string}, Äntwert 201 oder 400 mat Feeler-Code |
| 3. Verhalen a Logik | Geschäftsreegelen, Grenzbedéngungen, Zustandsännerungen | "Passwuertlängt 8-20 Zeechen, mindestens eng Zuel; E-Mail scho präsent -> 409" |
| 4. Feelerbehandlung | All méiglech Ausnahmeszenarien a entspriechend Feeler-Coden/Message | "Datebankverbindung feelgeschloen -> 503, kee Stack verroden" |
| 5. Net-funktionell Ufuerderungen | Leeschtung (Äntwertzäit < 200ms), Sécherheet (paramétréiert Queryen), Loggen, Observabilitéit | "All SQL muss precompiléiert sinn; email loggen, awer net password" |
| 6. Téistfäll (kritescher) | Op d'mannst 3 typesch Input + 2 Grenz/Exceptionell Input, erwaarte Resultat | Kuck Tabell ënnen |
| 7. Ofhängegkeeten a Contrainten | Wat fir Bibliothéik, Versioun, Ëmweltvariabelen | "Python 3.10+, FastAPI, Ëmweltvariabel DB_URL" |
Téistfäll Beispill (agebonnen am Spec)
| Szenario | Input | Erwaarten Output |
|---|---|---|
| Normal Registréierung | email: a@b.com, pwd: Pass1234 |
201, retournéiert user_id |
| Passwuert ze kuerz | pwd: Ab1 |
400, Feeler-Code WEAK_PASSWORD |
| E-Mail scho präsent | selwecht email | 409, Feeler-Code EMAIL_EXISTS |
E gudde Spec soll Téistfäll virdrun hunn, well AI kann op Basis vun hinnen direkt Unit-Téiste generéieren, an automatesch verifizéieren nodeems se fäerdeg sinn.
2. Kärprinzipie beim Spec Schreiwen (SMART-Variant)
| Prinzip | Erklärung | Konträit-Beispill |
|---|---|---|
| Präzis (Precise) | Benotzt konkret Zuelen, Typpen, Boolesch Konditiounen; vermeit "esou vill wéi méiglech", "normalerweis" | ❌ "Passwuert soll genuch sécher sinn" -> ✅ "Passwuert op d'mannst 8 Zeechen, mat groussem, klengen Buschtaw an Zuel" |
| Verifizéierbar (Verifiable) | All Ufuerderung kann duerch automateschen Test oder manuell Kontroll als bestanen/fail bewäert ginn | ❌ "Code soll elegant sinn" -> ✅ "Funktiouns zyklematesch Komplexitéit ≤ 10, keng widderhuelende Codeblocken" |
| Eendeiteg (Unambiguous) | D'selwecht Begrëff huet uechter den Text d'selwecht Bedeitung; wann néideg, glossary | ❌ "Wann de Benotzer net existéiert, Feeler zréckginn" -> ✅ "Benotzer existéiert net -> 404 mat {code: 'USER_NOT_FOUND'}" |
| Komplett (Complete) | Deckt Happy-Path, all Ausnahmefäll, net-funktionell Ufuerderungen | ❌ Nëmmen Erfollegsszenario -> ✅ Inklusiv Datebank-Zäitout, net genuch Rechter |
| Atomesch (Atomic) | E Spec beschreift nëmmen een onofhéngeg liwwerbaren Funktiounspunkt (fir datt AI et a enger Séance fäerdeg kritt) | ❌ Mat engem Spec "ganzt Bezuelungssystem" -> ✅ Opgedeelt a "Bezuelungs-Crééieren", "Callback-Verifikatioun", "Réckbezuelung" |
3. Spec Coding Prozess bei Zesummenaarbecht mat AI
- Mënsch schreift Spec (uewest Struktur, besonnesch Téistfäll a Funktiounssignatur).
- Spec a'némmen un AI ginn (net dialoglech Ufuerderungen dobäisetzen, fir Vibe-Verschmotzung ze vermeiden).
- AI gëtt Code + Unit-Téiste eraus (AI muss no de Téistfäll am Spec ausféierbar Téiste generéieren).
- Téist lafen : Wann all bestanen, dann nächste Schrëtt; wann net, Spec änneren oder Code direkt korrigéieren (hei kann a klenge Loop gaang ginn, awer d'Ännerunge musse protokolléiert ginn).
- Manuell Iwwerpréifung : Kucken ob Funktiounen ausserhalb vum Spec bäikomm sinn (scope creep), Sécherheet/Leeschtung kontrolléieren.
- Fixéieren : Spec-Dokument a Final-Code gemeinsam am Repository ofginn, als permanent Dokument.
Kérpraxis : Spec Codéieren - benotzt
spec.md+test_spec.py, woubãi den Testfichier direkt aus de Beispiller am Spec kénnt, sou datt bei Ännerungen nëmmen d'Téiste gelaf musse ginn fir z'iwwerpréiwen ob de Spec nach hält.
4. Effekter vun engem gudde Spec (als Akzeptanzkrittéieren)
- Bestëmmtheet : De selwechte Spek a verschidden AIs (oder verschidde Mënsche) ginn änlech Implementatiounen.
- Téistbarkeet : Nodeems de Code fäerdeg ass, kann een direkt 90% vun der Korrektheet automatesch verifizéieren.
- Wartbarkeet : No engem hallwe Joer kann jiddereen de Spec kucken a verstoen, wat deemools d'Designentscheedung war.
- Niddreg Kommunikatiounskäscht : Am Teamdiskussioun diskutéiert een nëmmen de Spec, net d'Code-Zeilen.
- Sécherheet/Qualitéit agebaut : Sécherheetsufuerderungen (wéi paramétréiert Queryen) a Grenzbedéngunge stinn am Spec, an AI muss se befollegen.
5. E gudde Spec-Bespeel (extrem vereinfacht)
# Spec: User-Registréierungs-API
## Beréich
- Kréiegt email, password
- Schéckt keng Verifikatiouns-E-Mail, kontrolléiert net ob d'E-Mail richteg ass
## Kontrakt
POST /register
Content-Type: application/json
Ufro: { "email": string, "password": string }
Äntwert 201: { "user_id": string }
Äntwert 400: { "code": "INVALID_PASSWORD" | "INVALID_EMAIL" }
Äntwert 409: { "code": "EMAIL_ALREADY_EXISTS" }
## Verhalen
- email muss dem RFC 5322 Basisformat entspriechen (a@b.c)
- password: Längt 8-20, mindestens eng Zuel an ee grousse Buschtaf
- Benotzt bcrypt fir verschlësselt Späicheren, Salz-Käscht 10
- Wann vum Afüllen an d'Datebank festgestallt gëtt, datt d'E-Mail scho existéiert -> 409
## Téistfäll (Input -> erwaarten Statuscode+Responsefeld)
| Input email | password | Erwaart |
|------------|----------|--------|
| test@x.com | Pass1234 | 201, user_id existéiert |
| test@x.com | pass | 400, INVALID_PASSWORD |
| bad | Pass1234 | 400, INVALID_EMAIL |
| (schon präsent email) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |
## Net-Funktionell
- SQL muss mat paramétréierte Queryen (Injektiounsschutz)
- Loggen vun der Aschreiwungsquell IP, kee Passwuert loggen
- Äntwertzäit 95% vun den Ufroe < 100ms (ouni bcrypt)
## Ofhängegkeeten
- Python 3.10+, FastAPI, bcrypt, asyncpg
Gudde Spec Coding = "Designentscheedunge vum Ménsch" an "Téistfäll + Typsignatur + Verhalenscontrainten vun der Maschinn" ëmwandelen, esou datt AI nëmmen d'Implementatioun ausfëllt, wärend de Ménsch ëmmer déi Qualitéit an d'Richtung kontrolléiert.
评论
暂无已展示的评论。
发表评论(匿名)