← 返回列表

Intervistë Seri AI 16: Si duhet të jetë një kodim i mirë specifikacioni?

Një Spec Coding (kodim i drejtuar nga specifikimet) i mirë, thelbi i tij është shndërrimi i "ideve të paqarta" në "marrëveshje të sakta, të verifikueshme dhe të ekzekutueshme". Nuk është thjesht shkrimi i një dokumenti, por krijimi i një gjuhe komunikimi pa paqartësi midis njerëzve dhe AI (ose midis njerëzve). Më poshtë do të jap një pamje të një spec-i të mirë nga katër dimensione: struktura e përmbajtjes së specifikimit, parimet e shkrimit, procesi i bashkëpunimit me AI, verifikimi i cilësisë.


1. Struktura standarde e dokumentit të specifikimit (me modul funksioni si shembull)

Kapitull Përmbajtje e detyrueshme Shembull
1. Qëllimi dhe fusha Një fjali që shpjegon çfarë bën, qartëson çfarë nuk bën "Implementoni API për regjistrim përdoruesi, nuk përfshin verifikim emaili"
2. Marrëveshja input/output Struktura e të dhënave, llojet, fushat e detyrueshme/opsionale, vlerat shembull POST /register trupi i kërkesës {email: string, password: string}, përgjigja 201 ose 400 me kod gabimi
3. Sjellja dhe logjika Rregullat e biznesit, kushtet kufitare, ndryshimet e gjendjes "Gjatësia e fjalëkalimit 8-20 karaktere, të paktën një numër; nëse email-i ekziston, kthe 409"
4. Trajtimi i gabimeve Të gjitha skenarët e mundshëm të përjashtimit dhe kodet/mesazhet përkatëse të gabimit "Dështim i lidhjes me bazën e të dhënave → kthe 503, mos ekspozoni stack-un"
5. Kërkesat jo-funksionale Performanca (koha e përgjigjes < 200ms), siguria (query të parametrizuara), log, observueshmëria "Të gjitha SQL-të duhet të përdorin precompile; regjistro email por jo password"
6. Raste testimi (kyç) Të paktën 3 inpute tipike + 2 inpute kufitare/përjashtimore, jep outputin e pritur Shih tabelën më poshtë
7. Varësitë dhe kufizimet Cilat biblioteka përdoren, versioni, variablat e ambientit "Python 3.10+, FastAPI, variabël ambienti DB_URL"

Shembull i rasteve të testimit (të integruara në spec)

Skenar Input Output i pritur
Regjistrim normal email: a@b.com, pwd: Pass1234 201, kthen user_id
Fjalëkalim shumë i shkurtër pwd: Ab1 400, kod gabimi WEAK_PASSWORD
Email tashmë ekziston email i njëjtë si më sipër 409, kod gabimi EMAIL_EXISTS

Spec-i i mirë fillimisht shkruan rastet e testimit, sepse AI mund të gjenerojë testime njësie bazuar në to dhe të verifikojë automatikisht pas përfundimit.


2. Parimet thelbësore të shkrimit të Spec (variant SMART)

Parim Shpjegim Kundërshembull
I saktë (Precise) Përdor numra konkretë, lloje, kushte boolean; shmang "sa më shumë", "zakonisht" ❌ "Fjalëkalimi duhet të jetë mjaft i sigurt" → ✅ "Fjalëkalimi të paktën 8 karaktere, përmban shkronjë të madhe, të vogël, numër"
I verifikueshëm (Verifiable) Çdo kërkesë mund të vlerësohet si e kaluar/dështuar me testim automatik ose kontroll manual ❌ "Kodi duhet të jetë elegant" → ✅ "Kompleksiteti ciklik i funksionit ≤ 10, pa blloqe të përsëritura"
Pa paqartësi (Unambiguous) I njëjti term ka kuptim të njëjtë në të gjithë tekstin; jep fjalor nëse nevojitet ❌ "Nëse përdoruesi nuk ekziston, kthe gabim" → ✅ "Përdoruesi nuk ekziston → kthe 404 dhe {code: 'USER_NOT_FOUND'}"
I plotë (Complete) Mbulon rrugën e lumtur, të gjitha rrugët e përjashtimit, kërkesat jo-funksionale ❌ Shkruar vetëm skenarët e suksesit → ✅ Përfshin timeout të bazës së të dhënave, mungesë lejesh etj.
Atomik (Atomic) Një spec përshkruan vetëm një funksion që mund të dorëzohet në mënyrë të pavarur (lehtëson AI-në ta përfundojë në një herë) ❌ Përdor një spec për "të gjithë sistemin e pagesave" → ✅ Ndaj në "gjenero faturë pagese", "verifiko nënshkrimin", "kthe para"

3. Procesi i Spec Coding-ut kur bashkëpunoni me AI

  1. Njeriu shkruan spec-in (struktura e mësipërme, veçanërisht rastet e testimit dhe nënshkrimet e funksioneve).
  2. I jep spec-in AI-të për një herë (mos shto kërkesa në mënyrë dialogu, shmang ndotjen e vibrit).
  3. AI nxjerr kodin + testet e njësisë (AI duhet të gjenerojë teste të ekzekutueshme bazuar në rastet e testimit në spec).
  4. Ekzekuto testet: nëse kalojnë të gjitha, kalo në hapin tjetër; nëse jo, modifiko spec-in ose korrigjo kodin direkt (në këtë pikë mund të hysh në një cikël të vogël, por regjistro ndryshimet).
  5. Rishikim njerëzor: kontrollo nëse është futur funksionalitet jashtë spec-it (scope creep), kontrollo sigurinë/performancën.
  6. Fikso: dërgo dokumentin e spec-it dhe kodin përfundimtar së bashku në depo, si dokumentacion të përhershëm.

Praktikë kyçe: Kodifikimi i spec-it – përdor spec.md + test_spec.py, ku skedari i testimit vjen direkt nga shembujt e spec-it, kështu që ndryshimet e mëvonshme në kod kërkojnë vetëm ekzekutimin e testeve për të verifikuar nëse spec-i është cenuar.


4. Efektet e një Spec-i të mirë (mund të shërbejnë si kritere pranimi)

  • Determinizëm: I njëjti spec i dhënë AI-ve të ndryshme (ose njerëzve të ndryshëm) prodhon implementime të ngjashme.
  • Testueshmëri: Pasi shkruhet kodi, menjëherë mund të verifikohet automatikisht 90% e saktësisë.
  • Mirëmbajtje: Pas gjashtë muajsh, kushdo që lexon spec-in mund të kuptojë qëllimin fillestar të dizajnit.
  • Kosto e ulët komunikimi: Gjatë diskutimeve në ekip, diskutohet vetëm spec-i, jo rreshtat konkretë të kodit.
  • Siguri/Cilësi e integruar: Kërkesat e sigurisë (si query të parametrizuara) dhe kushtet kufitare shkruhen në spec, AI duhet t'i respektojë.

5. Një shembull i Spec-it të mirë (version i thjeshtuar)

# Spec: 用户注册 API

## 范围
- 接收 email, password
- 不发送验证邮件,不检查邮箱真实性

## 契约
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" }

## 行为
- email 必须符合 RFC 5322 基本格式(a@b.c)
- password: 长度 8-20,至少包含一个数字和一个大写字母
- 使用 bcrypt 加密存储,盐成本 10
- 如果在存入数据库前发现 email 已存在 → 409

## 测试用例(输入 -> 期望状态码+响应字段)
| 输入 email | password | 期望 |
|------------|----------|------|
| test@x.com | Pass1234  | 201, user_id 存在 |
| test@x.com | pass      | 400, INVALID_PASSWORD |
| bad        | Pass1234  | 400, INVALID_EMAIL |
| (已存在的邮箱) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |

## 非功能
- SQL 必须使用参数化查询(防注入)
- 日志记录注册来源 IP,不记录密码
- 响应时间 95% 请求 < 100ms (不含 bcrypt)

## 依赖
- Python 3.10+, FastAPI, bcrypt, asyncpg

Spec Coding i mirë = shndërrimi i "vendimeve të dizajnit" të njeriut në "raste testimi + nënshkrime tipash + kufizime sjelljeje" për makinën, duke lejuar AI-në të plotësojë vetëm implementimin, ndërsa njeriu kontrollon gjithmonë cilësinë dhe drejtimin.

评论

暂无已展示的评论。

发表评论(匿名)