Ìfọ̀wọ̀n AI 16: Kí ni koodu àsopọ́ tí ó dára yẹ kí ó jẹ́?
Koodu Àsopọ́ tí ó dára, kókó rẹ̀ ni láti sọ “èrò àìdádúró” di “àdéhùn pípé, tí a lè dánwò, tí a lè ṣe”. Kì í ṣe kíkọ ìwé àkọsílẹ̀ kan nìkan, ṣùgbọ́n ó jẹ́ dídá èdè ìbánisọ̀rọ̀ tí kò ní ìyàtọ̀ lákọ̀ọ́ àwọn ènìyàn àti AI (tàbí ènìyàn àti ènìyàn).
Nísàlẹ̀, èmi yóò sọ bí spec tí ó dára ṣe rí nípa àwọn igun mẹ́rin: ètò àkóónú àwọn àsopọ́, àwọn ìlànà kíkọ, ìlànà ìfọwọ́sowọ́pọ̀ pẹ̀lú AI, àti ìdánilójú didára.
一、Ètò Àkóónú Àsopọ́ Láti Ìbẹ̀rẹ̀ (pẹ̀lú Àpẹẹrẹ Iṣẹ́)
| Apayì | Nǹkan tí a gbọ́dọ̀ kọ | Àpẹẹrẹ |
|---|---|---|
| 1. Àfojúsùn àti Ìbò | Sọ ní ọ̀rọ̀ kan ohun tí a ṣe, sọ kedere ohun tí a kò ṣe | “Ṣe imuse API iforukosile olumulo, kò pẹlu ijẹrisi imeeli” |
| 2. Àdéhùn input/output | Ètò data, irú, ojúlówó/aṣàyàn, àpẹẹrẹ iye | Ara ibeere POST /register {email: string, password: string}, ìdáhùn 201 tàbí 400 pẹ̀lú koodu àṣìṣe |
| 3. Ìwà àti Ọgbọ́n | Àwọn ofin iṣẹ́, àwọn ipo ààlà, ìyipada ipo | “Gígùn ọ̀rọ̀ aṣírí 8-20, ó kéré tán ó ní nọ́mbà kan; tí imeeli bá ti wà tẹ́lẹ̀, ìdáhùn 409” |
| 4. Ìtọ́jú Àṣìṣe | Gbogbo àyíká àìṣedéédé àti àwọn koodu àṣìṣe/ifiranṣẹ tí ó bá mu | “Àìṣe àkápọ̀ data → ìdáhùn 503, má ṣe fi akopọ han” |
| 5. Àwọn ibeere tí kì í ṣe iṣẹ́ | Iṣẹ́ (akoko ìdáhùn < 200ms), ààbò (ìbéèrè paramita), ìtọ́ka àkọsílẹ̀, ìṣeéwò | “Gbogbo SQL gbọ́dọ̀ lo awọn ibeere ti a ti ṣe tẹlẹ; kọ email ṣùgbọ́n má kọ password” |
| 6. Àpẹẹrẹ ìdánwò (Kókó) | Ó kéré tán 3 input aṣoju + 2 input ààlà/àìse, pẹ̀lú ìjáde tí a reti | Wo tabili isalẹ |
| 7. Àwọn àìgbára àti ìdèwọ́ | Kí ni a lo library, version, àwọn ayíká iye | “Python 3.10+, FastAPI, ayíká iye DB_URL” |
Àpẹẹrẹ ìdánwò (ninu spec)
| Àyíká | Input | Ìjáde tí a reti |
|---|---|---|
| Iforukosile deede | email: a@b.com, pwd: Pass1234 |
201, ìdáhùn user_id |
| Ọ̀rọ̀ aṣírí kúrú | pwd: Ab1 |
400, koodu àṣìṣe WEAK_PASSWORD |
| Imeeli ti wà tẹ́lẹ̀ | email kanna | 409, koodu àṣìṣe EMAIL_EXISTS |
Spec tí ó dára gbọ́dọ̀ kọ àwọn àpẹẹrẹ ìdánwò kọ́kọ́, nítorí AI le gbé wọn lò láti ṣe àwọn ìdánwò kọ̀ọ̀kan tí ó tọ̀wọn lẹ́sẹ̀kẹsẹ̀, kí ó sì fìdí wọn mú lẹ́yìn tí ó bá ti parí.
二、Àwọn ìlànà kòkó kíkọ Spec (SMART yàtọ̀)
| Ìlànà | Àlàyé | Àpẹẹrẹ òdì |
|---|---|---|
| Pípé (Precise) | Lo awọn nọ́mbà pàtó, irú, ipo Boolean, yàgò fun “bí ó bá ti lè jẹ́”, “nígbà gbogbo” | ❌ “Ọ̀rọ̀ aṣírí gbọ́dọ̀ jẹ́ ààbò tó” → ✅ “Ọ̀rọ̀ aṣírí ó kéré tán 8 nọ́mbà, pẹ̀lú lẹ́tà ńlá, lẹ́tà kékeré, nọ́mbà” |
| Ìṣeéfìdírí (Verifiable) | Gbogbo ibeere ni a lè pinnu pé ó kọjá/kùnà nípasẹ̀ ìdánwò aládaaṣe tàbí àyẹ̀wò ọwọ́ | ❌ “Koodu gbọ́dọ̀ jẹ́ dídára” → ✅ “Aṣiṣe àyíká iṣẹ́iṣẹ́ ≤ 10, kò sí àwọn koodu àtúnṣe” |
| Àìṣiyèméjì (Unambiguous) | Ọ̀rọ̀ kan náà ní ìtumọ̀ kan gbogbo ìwé, fún glossary tí ó bá ṣe pàtàkì | ❌ “Tí olumulo kò bá sí, ìdáhùn àṣìṣe” → ✅ “Olumulo kò sí → ìdáhùn 404 pẹ̀lú {code: 'USER_NOT_FOUND'}” |
| Pípé (Complete) | Bò ọ̀nà ayọ̀, gbogbo ọ̀nà àìṣedéédé, àwọn ibeere tí kì í ṣe iṣẹ́ | ❌ Kọ ipo àsìkò ayọ̀ nìkan → ✅ Pẹ̀lú àkókò àkópọ̀ data, aṣẹ tí kò tó, àti b́b |
| Àtomu (Atomic) | Spec kan ṣe àpèjúwe aaye iṣẹ́ kan ṣoṣo tí a lè jíṣẹ́ lọ́tọ̀ (látí rọrùn fún AI láti ṣe lẹ́ẹ̀kan) | ❌ Fi spec kan kọ “gbogbo eto isanwo” → ✅ Pín sí “ṣe ìwé isanwo”, “dáwọ́lé ìbùwọ́n”, “ìpadà” |
三、Ìlànà Koodu Spec pẹ̀lú AI
- Eniyan kọ spec (ètò tí ó wà lókè, pàápàá jùlọ kọ àwọn àpẹẹrẹ ìdánwò àti àmì iṣẹ́).
- Fún AI ni spec ni ẹ̀ẹ̀kan (má ṣe fi àwọn ibeere kun nípasẹ̀ ìbánisọ̀rọ̀, yàgò fun ìbàjẹ́ vibe).
- AI ṣe àkójáde koodu + ìdánwò kọ̀ọ̀kan (AI gbọ́dọ̀ ṣe àwọn ìdánwò tí a lè ṣe nígbà gbogbo gẹ́gẹ́ bi àpẹẹrẹ ìdánwò nínú spec).
- Ṣiṣẹ́ ìdánwò: Tí gbogbo wọn bá kọjá, lọ sí ìgbésẹ̀ tí ó tẹ̀le; tí wọn kò bá kọjá, ṣe àtúnṣe spec tàbí tún koodu ṣe ni taara (ní àkókò yìí, o le wọ inú àtúnsọ̀nà kékeré, ṣùgbọ́n ohùn tó).
- Àyẹ̀wò ọwọ́: Ṣe àyẹ̀wò boya a ti fi àwọn iṣẹ́ tí kò sí nínú spec (scope creep), ṣe àyẹ̀wò ààbò/iṣẹ́.
- Ṣe ìmúdúró: Fi ìwé spec àti koodu ìparí papọ̀ sí ibi ìkóhndé, gẹ́gẹ́ bi ìwé àkọsílẹ̀ tí ó wà títí.
Àṣà kókó: Spec koodu — lo
spec.md+test_spec.py, nínú èyí tí ìdánwò wá láti inú àwọn àpẹẹrẹ spec, tí ó bá jẹ́ pé a tún koodu ṣe, a lè ṣiṣẹ́ ìdánwò láti fìdí spec rí.
四、Àwọn àbájáde Spec tí ó dára (lè jẹ́ àwọn àákọ ìgbàwọlé)
- Ìdánilójú: Spec kanna fún AI yàtọ̀ (tàbí ènìyàn yàtọ̀) yóò ṣe àṣeyọrí tí ó rí.
- Ìṣeéwádìí: Lẹ́sẹ̀kẹsẹ̀ lẹ́yìn kíkọ koodu, a lè fìdí 90% ìwà pípé.
- Ìṣeéṣọ́: Lẹ́yìn ọ̀sẹ̀ mẹ́fà, ẹnikẹ́ni tí ó bá wo spec yóò lóye èrò oníṣẹ́ àkọ́kọ́.
- Àwọn iye ìbánisọ̀rọ̀ kọ̀: Nígbà ìjíròrò ẹgbẹ́, gbogbo ènìyàn dẹ́ àdánwò spec, kì í dẹ́ àwọn laini koodu pàtó.
- Ààbò/Didára inú rẹ̀: Àwọn ibeere ààbò (bí i àwọn ibeere paramita) àti àwọn ipo ààlà ti kọ sínú spec, AI gbọ́dọ̀ tẹ̀lé.
五、Àpẹẹrẹ Spec tí ó dára (Ìwé kúkúrú)
# Spec: API Iforukosile Olumulo
## Ìbò
- Gba email, password
- Kò fiwé ìdánilójú imeeli, kò ṣe àyẹ̀wò òtítọ́ imeeli
## Àdéhùn
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" }
## Ìwà
- email gbọ́dọ̀ bá ìlànà RFC 5322 (a@b.c)
- password: gígùn 8-20, ó kéré tán ní nọ́mbà kan àti lẹ́tà ńlá kan
- Lo bcrypt fún títọ́jú pẹ̀lú ìparí, iye iyọ̀ 10
- Tí a bá ri email tí ó ti wà tẹ́lẹ̀ kí ó tó fipamọ́ → 409
## Àpẹẹrẹ ìdánwò (Input -> koodu ipo + aaye ìdáhùn tí a reti)
| Input email | password | Ìjáde tí a reti |
|------------|----------|------|
| test@x.com | Pass1234 | 201, user_id wà |
| test@x.com | pass | 400, INVALID_PASSWORD |
| bad | Pass1234 | 400, INVALID_EMAIL |
| (imeeli tí ó ti wà tẹ́lẹ̀) | Pass1234 | 409, EMAIL_ALREADY_EXISTS |
## Àwọn tí kì í ṣe iṣẹ́
- SQL gbọ́dọ̀ lo àwọn ìbéèrè paramita (dènà àìṣe)
- Àkọsílẹ̀ kọ orísun IP iforukosile, kò kọ ọ̀rọ̀ aṣírí
- Àkókò ìdáhùn 95% ibeere < 100ms (laisi bcrypt)
## Àwọn àìgbára
- Python 3.10+, FastAPI, bcrypt, asyncpg
Koodu Spec tí ó dára = Kíkọ “ìpinnu oniṣẹ́” di “àpẹẹrẹ ìdánwò + àmì irú + ìdèwọ́ ìwà”, jẹ́ kí AI kàn fún ìmúṣẹ, nígbà tí ènìyàn sì máa ń darí didára àti ìtọ́sọ́nà.
评论
暂无已展示的评论。
发表评论(匿名)