← 返回列表

AI Series Interview 16: Unsa ang maayong spec coding?

Ang maayong Spec Coding (spec-driven programming) mao ang paghimog 'libog nga ideya' nga mahimong 'tukma, mapamatud-an, ug mapatuman nga kontrata'. Dili lang kini dokumento, kondili usa ka walay kalibog nga pinulongan sa komunikasyon tali sa tawo ug AI (o tawo ug tawo). Sa ubos, akong i-detalye ang estruktura sa sulod, prinsipyo sa pagsulat, proseso sa kolaborasyon sa AI, ug pag-validate sa kalidad aron mahatagan kag maayong spec.


1. Standard Structures sa Spec Document (Pananglitan: Feature Module)

Sekyon Gikinahanglan nga Nilalaman Pananglitan
1. Tumong ug Sakop 1 sentence unsay buhaton, klarohon ang dili buhaton 'Ipatuman ang API sa pagrehistro sa user, dili apil ang email verification'
2. Input/Output nga Kontrata Data structure, type, required/optional fields, sample values POST /register request body {email: string, password: string}, response 201 or 400 nga adunay error code
3. Gawi ug Lohika Business rules, boundary conditions, state transitions 'Password length 8-20, kinahanglan adunay labing menos usa ka numero; kung ang email nag-eksist na, ibalik ang 409'
4. Pag-atubang sa sayop Tanang posibling exception scenarios ug katugbang nga error code/message 'Database connection naputol → ibalik 503, ayaw i-expose ang stack trace'
5. Non-functional nga mga Kinahanglanon Performance (response time < 200ms), security (parameterized queries), logging, observability 'Tanang SQL kinahanglan mogamit ug pre-compiled; i-log ang email pero dili ang password'
6. Test Cases (Importante) Labing menos 3 typical input + 2 boundary/exception input, ihatag ang expected output Tan-awa ang lamesa sa ubos
7. Dependencies ug Constraints Unsa nga library, version, environment variables 'Python 3.10+, FastAPI, environment variable DB_URL'

Test Cases Pananglitan (I-embed sa spec)

Scenario Input Expected Output
Normal nga pagrehistro email: a@b.com, pwd: Pass1234 201, ibalik user_id
Mubo kaayo ang password pwd: Ab1 400, error code WEAK_PASSWORD
Nag-eksist nga email parehas nga email sa taas 409, error code EMAIL_EXISTS

Ang maayong Spec kinahanglan mosulat una og test cases, kay ang AI magamit kini sa direktang paghimo og unit tests, dayon awtomatikong i-validate.


2. Pangunang mga Prinsipyo sa Pagsulat og Spec (SMART nga variant)

Prinsipyo Pagpasabot Dili maayong pananglitan
Tukma (Precise) Gamit ang piho nga numero, type, boolean condition; likayi ang 'kutob sa mahimo', 'kasagaran' ❌ 'Ang password kinahanglan igo nga luwas' → ✅ 'Ang password labing menos 8 ka karakter, adunay uppercase, lowercase, numero'
Mamatuod (Verifiable) Ang matag kinahanglanon mahimong mahukman pinaagi sa automated test o manual check kung pasado o napakyas ❌ 'Ang code kinahanglan elegante' → ✅ 'Ang function cyclomatic complexity ≤ 10, walay duplicate code blocks'
Walay Kalibog (Unambiguous) Ang parehas nga termino adunay makanunayon nga kahulugan sa tibuok dokumento; kung gikinahanglan, i-glossary ❌ 'Kung wala ang user, ibalik ang error' → ✅ 'User wala → ibalik 404 ug {code: 'USER_NOT_FOUND'}'
Kompleto (Complete) Nagtabon sa happy path, tanang exception path, ug non-functional requirements ❌ Gisulat lang ang success scenario → ✅ Naglakip sa database timeout, kulang nga permiso, ug uban pa
Atomic (Atomic) Usa ka spec naghulagway lang sa usa ka independenteng ihatag nga feature (para sayon sa AI usa ka buhat) ❌ Gamit ang usa ka spec para sa 'entire payment system' → ✅ Bahina ngadto sa 'generate payment order', 'callback verification', 'refund'

3. Proseso sa Spec Coding Kung Magtinabangay sa AI

  1. Tawo mosulat og spec (sa estruktura sa ibabaw, ilabi na ang test cases ug function signature).
  2. I-feed ang spec sa AI sa usa ka higayon (ayaw pagdugang og requirements pinaagi sa dialogue aron malikayan ang vibe contamination).
  3. AI mogawas og code + unit tests (ang AI kinahanglan mosunod sa test cases sa spec aron makagama og ma-execute nga tests).
  4. Padagana ang tests: Kung puros passed, adto sa sunod nga lakang; kung dili, i-edit ang spec o direkta nga i-correct ang code (niadto nga punto, mahimo nga moadto sa gamay nga loop, pero irekord ang mga kausaban).
  5. Human review: Susiha kung adunay mga feature nga wala sa spec (scope creep), susiha ang seguridad/performance.
  6. I-fix: I-submit ang spec document ug final code ngadto sa repository isip permanenteng dokumento.

Mahinungdanong praktis: I-code ang spec — gamit ang spec.md + test_spec.py, diin ang test file direktang gikan sa mga examples sa spec, aron sa pag-usab sa code sa ulahi, padagan lang ang tests aron ma-validate kung nadaot ba ang spec.


4. Epekto sa Maayong Spec (Mahimong Acceptance Criteria)

  • Kasigurohan: Ang parehas nga spec maghatag ug susamang implementasyon bisag lain-laing AI (o lain-laing tawo).
  • Ma-test: Human masulat ang code, dayon nga ma-autovalidate ang 90% sa correctness.
  • Ma-maintain: Human unom ka bulan, bisan kinsa makakita sa spec, makasabot sa orihinal nga design intention.
  • Ubos nga gasto sa komunikasyon: Sa diskusyon sa team, ang spec lang ang hisgotan, dili ang piho nga code lines.
  • Seguridad/kalidad nga na-embed: Ang security requirements (sama sa parameterized queries) ug boundary conditions gi-encode sa spec, AI kinahanglan motuman.

5. Pananglitan sa Maayong Spec (Simplified Version)

# Spec: User Registration API

## Sakop
- Makadawat og email, password
- Dili magpadala og verification email, dili mag-check sa email authenticity

## Kontrata
POST /register
Content-Type: application/json
Request: { "email": string, "password": string }
Response 201: { "user_id": string }
Response 400: { "code": "INVALID_PASSWORD" | "INVALID_EMAIL" }
Response 409: { "code": "EMAIL_ALREADY_EXISTS" }

## Gawi
- Ang email kinahanglan mosunod sa RFC 5322 basic format (a@b.c)
- password: length 8-20, labing menos usa ka numero ug usa ka uppercase
- Gamit ang bcrypt encryption sa pagtipig, salt cost 10
- Kung sa wala pa i-save sa database nakit-an nga nag-eksist ang email → 409

## Test Cases (input -> expected status code + response field)
| Input email | password | Expected |
|-------------|----------|----------|
| test@x.com | Pass1234  | 201, adunay user_id |
| test@x.com | pass      | 400, INVALID_PASSWORD |
| bad        | Pass1234  | 400, INVALID_EMAIL |
| (nag-eksist nga email) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |

## Non-functional
- SQL kinahanglan mogamit ug parameterized queries (kontra sa injection)
- I-log ang source IP sa pagrehistro, dili i-log ang password
- Response time 95% sa requests < 100ms (walay bcrypt)

## Dependencies
- Python 3.10+, FastAPI, bcrypt, asyncpg

Ang maayong Spec Coding = himoong 'design decisions' sa tawo nga mahimong 'test cases + type signatures + behavioral constraints' sa makina, aron ang AI maoy mag-fill sa implementasyon, samtang ang tawo magpabilin nga nagkontrol sa kalidad ug direksyon.

评论

暂无已展示的评论。

发表评论(匿名)