← 返回列表

AI ƒe kpeɖeŋuwo ƒe biabia 16: Spec Coding nyui aɖe si le abe?

Spec Coding (wɔna si le mɔ̃ɖoɖo dzi) nyui aɖe la, eƒe gɔmeɖeɖe nye be ‘susus si me kɔ’ trɔna zu ‘nudɔdɔ si me tɔtɔ, si wɔte ŋu akpɔe, eye wɔte ŋu awɔe’. Mevɔna ɖe agbalẽ ŋɔŋlɔ ɖokui o, ke boŋ wɔna ɖe gbeƒãɖeɖe si me akaka mele o la si le ame kple AI (alo ame kple ame) dome. Le eteƒe la, matso nudɔdɔwo ƒe nɔnɔmetata, ŋɔŋlɔ ƒe sewo, dɔwɔwɔ kple AI, eye mɔ̃ɖoɖo nyuiyenyenye siaa me ade ale si spec nyui aɖe le.


I. Nudɔdɔ ɖokuiwo ƒe nɔnɔmetata (Dɔwɔnu ƒe akpa aɖe le eteƒe)

Akpa Nu si le eme (esi le vevie) Kpɔɖeŋu
1. Taɖodzinu kple Mɔ̃ɖoɖo Gbeɖeɖe aɖe si gblɔ nu si wɔna, eye wɔna nu si wɔna o “Miele dɔmedzoe ɖoɖo API, mele email ɖoɖo kpɔ o”
2. Nudɔdɔ / Nudɔdɔ (Input/Output) Nu siwo le nu me, wɔnuɖeŋu, esi le vevie / esi wate ŋu ava, kpɔɖeŋu bɔbɔwo POST /register ŋutinya ƒe ŋutinya {email: string, password: string}, ŋuɖoɖo 201 alo 400 si ƒe vodada ƒe numetsotso le eme
3. Nuvavawo kple nunɔamesi Asitsa ƒe sewo, li kpɔɖeŋuwo, nɔnɔme trɔtrɔwo “Ŋɔŋlɔ si ƒe didime nye 8-20, ele be wòatsɔ ade ŋkɔ aɖe, eye email si li xoxo la atrɔ 409
4. Vodadawo ƒe hehe Nudɔdɔ siwo katã wɔna ɖe nu si me tɔtɔ, kple ŋuɖoɖo siwo sɔ ɖe wo ŋu “Database ƒe ƒuƒoƒo meɖo o → ɖo 503, megblẽa alesi wòle le eme o”
5. Nu siwo mele vevie o (Non-functional requirements) Dɔwɔwɔ ƒe nyuiyenyenye (eɖo ŋuɖoɖo le < 200ms), dedienɔnɔ (parametrized query), agbalẽŋɔŋlɔ, kpɔkpɔ “SQL mele be wòatsɔ pre-compiled o; ŋlɔ email gake mègatsɔ password o”
6. Kpɔɖeŋuwo (Test cases) (esi le vevie) Nudɔdɔ bɔbɔ siwo le mama aɖe me + nudɔdɔ siwo le li / nu si me tɔtɔ le me, eye nàtsɔ ŋuɖoɖɔ si woɖo la aɖo Kpɔ taƒe si le eteƒe
7. Nudzɔdzɔwo kple nunɔamesiwo Nu siwo wòazã, version, ame ƒe nɔnɔme “Python 3.10+, FastAPI, ame ƒe nɔnɔme DB_URL

Kpɔɖeŋuwo ƒe kpɔɖeŋu (si le spec me)

Nubabla Nudɔdɔ Ŋuɖoɖɔ si woɖo
Dɔmedzoe ɖoɖo gɔmeɖeɖe email: a@b.com, pwd: Pass1234 201, ɖo user_id
Ŋɔŋlɔ si le kpui pwd: Ab1 400, vodada ƒe nume WEAK_PASSWORD
email si le xoxo email ɖeka 409, vodada ƒe nume EMAIL_EXISTS

Spec nyui la ele be wòaɖe kpɔɖeŋuwo gbã elabe AI ate ŋu awɔ unit test to wo dzi enumake eye ne ewu eme la, wòakpɔe ɖokui.


II. Ŋɔŋlɔ Spec ƒe sewo (SMART ƒe tɔtrɔ)

Se Nyaɖeɖefia Kpɔɖeŋu si menyo o
Me tɔtɔ (Precise) Zã xexlẽme kɔkɔ, wɔnuɖeŋu, ŋugble siwo kata nye ema, ‘ne wòate ŋu’, ‘gbogbo me’ ❌ “Ŋɔŋlɔ la ele be wòade ŋusẽ” → ✅ “Ŋɔŋlɔ la le kpui o, ele be wòaɖe ŋkɔ, ŋkɔ kple xexlẽme”
Wɔte ŋu akpɔ (Verifiable) Nudɔdɔ ɖesiaɖe ate ŋu adzra ɖo to kpɔɖeŋu ŋutɔŋutɔtodzɔdzɔ alo ame ƒe kpɔkpɔ ❌ “Kɔdowo nàna wòanyo” → ✅ “Kɔdowo ƒe kpekpeɖeŋu ≤ 10, mele kɔdowo ƒe gbegblẽ le eme o”
Mele yakame (Unambiguous) Ɖoɖowo ɖeka naa nu ɖeka le ŋɔŋlɔ bliboa me, ne ele vevie la ŋlɔ nyagblɔɖi ❌ “Ne ame la mele o, trɔ vodada” → ✅ “Ame la mele o → trɔ 404 kple {code: 'USER_NOT_FOUND'}
Blibo (Complete) Kpɔ mɔ̃ si le dzidzɔ me, mɔ̃ siwo katã nu me tɔtɔ le, kple nu siwo mele vevie o la katã ❌ Ŋlɔ ɖe mɔ̃ si le dzidzɔ me ko → ✅ Kpɔ database ƒe ɣeyiɣi, ŋusẽ mele o, etc.
Atom (Atomic) Spec ɖeka ɖeɖe gblɔa dɔwɔnu aɖe si wɔate ŋu adzra ɖo ɖokui (bia be AI nawɔ ɖeka) ❌ Zã spec ɖeka ŋlɔ “fe ƒe ɖoɖo blibo la” → ✅ Kpata “fe ƒe ɖoɖo”, “trɔtrɔ ƒe nɔnɔme”, “fe ƒe trɔtrɔ”

III. Dɔwɔwɔ kple AI le Spec Coding me

  1. Amewo ŋlɔa spec (nɔnɔmewo le ete, ɖe kpɔɖeŋuwo kple dɔwɔnu ƒe nɔnɔme gbɔ).
  2. Tsɔ spec blibo la na AI (megabia nu le nyaɖeɖe me o, ne nàbe wòagblẽ nu o).
  3. AI tsɔa kɔdowo + unit test (AI ele be wòazã kpɔɖeŋuwo tso spec me wɔ kpɔɖeŋu siwo ate ŋu awɔ dɔ).
  4. Wɔ kpɔɖeŋuwo ɖa : ne wo katã va yi le eme la, yi afɔɖeɖe si woɖo; ne o, trɔ spec alo na kɔdowo ɖe eme (ne wòle eme la, ate ŋu awɔ ɖe eme gake ele be wòaŋlɔ tɔtrɔwo).
  5. Amewo ƒe kpɔkpɔ: Kpɔ be kpɔɖeŋu siwo le spec me le eme (scope creep), kpɔ dedienɔnɔ / dɔwɔwɔ ƒe nyuiyenyenye.
  6. Ŋlɔ ɖo: Tsɔ spec agbalẽ kple kɔdowo siwo wòwɔ la ɖo ɖi ɖe repository me abe agbalẽ siwo nɔna ɖe eme ene.

Dɔwɔnu si le vevie : Spec na zu kɔdowo – Zã spec.md + test_spec.py, afisi kpɔɖeŋuwo tso spec me tsoe, ale be ne wòtrɔ kɔdowo la, edziedzi wòate ŋu awɔ kpɔɖeŋuwo akpɔ be womegbã spec o.


IV. Ale si Spec Nyui Nana (Wɔate ŋu azãe abe mɔ̃ɖoɖo ene)

  • Nudzedze : Spec ɖeka na AI tɔtrɔɖeŋu (alo ame tɔtrɔɖeŋu) tae wɔna siwo sɔ.
  • Kpɔɖeŋu ŋutɔ : Ne wòwɔ kɔdowo la, edziedzi wòate ŋu akpɔ be 90% eɖo.
  • Nɔnɔme nyui : Eƒe aɖaba si yi la, ame aɖeke si kpɔ spec la, ate ŋu ase ale si woɖoe gbã.
  • Nyeɖeɖe ƒe asixɔxɔ kpui : Ne ɖoɖoa me tae ɖoɖoa ɖe spec dzi ko, meɖoa nya ɖe kɔdowo ƒe mɔ̃ɖoɖo dzi o.
  • Dedienɔnɔ / Nyuiyenyenye le eme : Dedienɔnɔ ƒe nudɔdɔ (abe parametrized query) kple li kpɔɖeŋuwo le spec me, ele be AI nawɔ ɖe wo ŋu.

V. Kpɔɖeŋu Spec Nyui aɖe (Si le kpui)

# Spec: Dɔmedzoe ɖoɖo API

## Mɔ̃ɖoɖo
- Xɔ email, password
- Megadɔa email ɖoɖo o, mekpɔa email ƒe nɛ o

## Nudɔdɔ / Nudɔdɔ (Contract)
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" }

## Nuvavawo
- email ele be wòado gbe RFC 5322 ƒe nɔnɔme (a@b.c)
- password: didime 8-20, ele be wòaɖe xexlẽme ɖeka kple ŋkɔ gã aɖe
- Zã bcrypt kpɔ ɖoɖo, salt asixɔxɔ 10
- Ne wòkpɔ email le xoxe haɖe o haɖe o hã eye wòge ɖe database me → 409

## Kpɔɖeŋuwo (nudɔdɔ -> nɔnɔme si woɖo + ŋuɖoɖɔ ƒe akpa)
| Nudɔdɔ email | password | Nɔnɔme si woɖo |
|--------------|----------|----------------|
| test@x.com | Pass1234  | 201, user_id le |
| test@x.com | pass      | 400, INVALID_PASSWORD |
| bad          | Pass1234  | 400, INVALID_EMAIL |
| (email si le xoxo) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |

## Nu siwo mele vevie o
- SQL ele be wòazã parametrized query (be wòakpɔ nu tso nu me)
- Agbalẽŋɔŋlɔ ŋlɔa nɔƒe si tsoa IP, meŋlɔa password o
- Ŋuɖoɖo ƒe ɣeyiɣi 95% nudɔdɔ < 100ms (bcrypt mele eme o)

## Nudzɔdzɔwo
- Python 3.10+, FastAPI, bcrypt, asyncpg

Spec Coding Nyui = Ŋlɔ ame ƒe ‘ɖoɖoɖoɖo’ zu mɔ̃ɖoɖɔ siwo woatu ɖo ‘kpɔɖeŋuwo + nɔnɔme kɔkɔ + nuvavawo’ , na be AI nàwɔ akpa siwo susɔ la ko, eye ame la nàkpɔ nyuiyenyenye kple mɔ̃ɖoɖo.

评论

暂无已展示的评论。

发表评论(匿名)