Mga nadagdag:
- Kakayahang gumawa ng unit, integration at edge case test na may makabuluhang paninindigan sa AI
- Kakayahang sistematikong kunin ang saklaw ng pagsubok, limitahan ang mga halaga at negatibong mga sitwasyon na may suporta sa AI
- Kakayahang i-verify na ang mga pagsubok na ginawa ng AI ay aktwal na nagpapatunay ng pag-uugali at hindi lamang ulitin ang umiiral na code
Ang pagsubok ay ang mekanismo na nagpapatunay na ang software ay talagang kumikilos tulad ng ipinangako. Ang isang mahusay na suite ng pagsubok ay nagsasabi sa iyo sa ilang segundo kung ang isang pagbabago ay masira ang isang bagay at nagbibigay sa engineer ng kalayaan na kumilos nang may kumpiyansa. Pinapabilis ng AI ang pinaka nakakapagod at pinakanalaktawan na bahagi ng pagsusulat ng pagsubok: pagbuo ng maraming sitwasyon, breakpoint, at negatibong kaso. Ngunit mayroong isang palihim na bitag dito: Maaaring magsulat ang AI ng mga pagsubok na nagpapatunay sa kasalukuyang (marahil may mali) na gawi ng code, hindi sa dapat na pag-uugali nito; o maaari itong gumawa ng mga walang laman na pagsubok na palaging pumasa, hindi aktwal na sinusuri ang anumang bagay. Ang halaga ng isang pagsubok ay wala sa kung ito ay pumasa, ngunit sa kung ito ay nagsusuri ng tama at nagiging pula kapag ito ay mali.
Sa unit na ito, matututunan mo kung paano gumawa ng mga pagsubok sa unit, integration at edge case na may makabuluhang mga pahayag; kung paano sistematikong kunin ang saklaw ng pagsubok, mga breakpoint, at downside na mga sitwasyon; at makikita natin kung paano mo masusuri kung ang mga pagsubok na ginagawa ng AI ay aktwal na nagpapatunay ng pag-uugali.
Mga Konsepto: Pagsubok sa unit: Sinusubok ang isang function/klase nang nakahiwalay. Pagsubok sa pagsasama: Mga pagsubok na gumagana nang maayos ang maraming bahagi. Igiit: Isang pahayag na nagsusuri na ang isang resulta ay katumbas ng inaasahan; Ito ang puso ng pagsubok. Saklaw: Gaano karami sa code ang pinapatakbo ng mga pagsubok; Hindi ginagarantiya ng mataas na coverage ang kalidad.
Paggawa ng Makabuluhang Pagsusulit
Ang isang mahusay na pagsubok ay malinaw na gumagawa ng tatlong bagay: ito ay nagtatatag ng isang estado, ito ay nagsasagawa ng isang aksyon, ito ay nagsasaad ng resulta. Kapag nagpi-print ng mga pagsubok sa AI, tukuyin kung anong gawi ang gusto mong i-verify at kung anong mga senaryo ang dapat nitong saklawin; Kung hindi, ito ay gumagawa ng mga mababaw na pagsubok na laging pumasa.
- Tukuyin ang pag-uugali na susuriin. "Ano ang itinuturing na tama?" Sagutin ng malinaw ang tanong.
- Magtanong ng mga uri ng senaryo. Normal, limitasyon, negatibo, kundisyon ng error.
- Mag-import ng makabuluhang paninindigan. Ito ay hindi lamang "nagtapon ng isang error", ito ay "ibinalik ang tamang halaga".
- Suriin ang katumpakan ng pagsubok. Nagiging pula ba ang pagsubok kapag sinasadya mong nasira ang code?
Comprehensive test generation prompt: "Sumulat ng mga unit test para sa sumusunod na function na 'applydiscount(amount, coupon)'. Magkaroon ng KAHIT LEAST na isang scenario sa mga sumusunod na kategorya: (1) normal valid coupon, (2) breakpoints (0 amount, 100% discount), (3) negative (invalid coupon, negative test amount), (4) coupon na error sa bawat kaso ng CONCPONC. (hindi lang 'nagtrabaho').
Prompt sa pagkuha ng boundary value: "Magsagawa ng boundary value analysis para sa mga input ng function na ito. Para sa bawat parameter, i-extract ang mga value na 'just in the boundary', 'just below the boundary', 'just above the boundary' bilang isang table. Pagkatapos ay ilista ang mga test scenario na sumasaklaw sa mga boundaries na ito. Huwag isulat ang code: [Function list lang]."
Babala: Ang mataas na saklaw ng pagsubok (hal. 90%) ay hindi nagpapatunay na tama ang code. Sinusukat ng saklaw kung gaano karaming mga hilera ang naisagawa; hindi na ang mga linyang iyon ay gumagawa ng tamang resulta. Ang isang pagsubok na walang makabuluhang paninindigan ay nagpapataas ng saklaw ngunit hindi ginagarantiyahan ang anuman. Ang nilalaman ng paggigiit ay tumutukoy sa kalidad, hindi ang bilang ng mga pahayag.
Pagsubok sa Pagsubok Mismo: Ang Lohika ng Mutation
Ang pinaka-praktikal na paraan upang maunawaan kung gumagana ang AI-generated na pagsubok ay ang sadyang pagsira sa code (mutation testing logic). Baligtarin ang isang kundisyon, gumawa ng + sign -; Kung walang mga pagsubok na nagiging pula, ang iyong mga pagsusulit ay hindi aktwal na nagpapanatili ng gawi na iyon.
Test vulnerability hunting prompt: "Sabihin sa akin kung aling mga potensyal na bug sa code na ito ang MAAARING HINDI mahuli ng mga sumusunod na pagsubok. Magmungkahi ng 5 maliliit na mutasyon na maaaring gawin sa code (hal. >= sa halip na >, - sa halip na +) at ipahiwatig para sa bawat isa kung mahuhuli ito ng mga kasalukuyang pagsubok. Para sa mga hindi nahuli, magmungkahi ng pagsubok na dapat idagdag. Code: [code] Mga Pagsusuri: [test]"
Mahina Prompt / Malakas na Prompt
MAHINA: "Sumulat ng pagsubok sa function na ito." (Resulta: karaniwang isang masayang senaryo, mahinang paninindigan; nakakaligtaan ang mga error.) MALAKAS: "Sumulat ng pagsubok sa function na 'passwordStrong' na ito. Panuntunan: hindi bababa sa 8 character, 1 uppercase na letra, 1 digit ang kinakailangan. Takpan ang mga sumusunod na sitwasyon bilang HIWA-hiwalay na mga pagsubok: eksaktong 8 character (limitasyon), 7 character lang (sa ibaba ng bakanteng espasyo), walang mga character na masyadong mahaba (sa ibaba ng espasyo), walang string na mas mataas na espasyo, walang string na espasyo lamang. (1000 character) Tahasang igiit ang inaasahang true/false value sa bawat pagsubok at pangalanan ang pagsubok ayon sa sinusuri nito."
Ang malakas na prompt ay nagbibigay ng mga panuntunan at buong hangganan na mga sitwasyon. Ang mga pares ng hangganan tulad ng "eksaktong 8 / 7 character" ay ang mga pinakakaraniwang lugar kung saan nagkakamali (nakalilito > sa >=). Ang mahinang prompt ay lumalampas sa mga hangganang ito at nagdadala ng error sa produksyon.
Mga Uri ng Pagsubok at Saan Gagamitin
Uri ng pagsubok
Ano ang kinukumpirma nito?
kontribusyon ng AI
Pansin
yunit
Isang function/klase
Bumubuo ng mga multi-scenario nang mabilis
Kinakailangan ang makabuluhang paninindigan
pagsasama
Mga bahagi na nagtutulungan
Scenario at kunwaring draft ng data
Tunay na nakakahumaling na pag-uugali
tapusin/tanggapin
Buong daloy ng user
Listahan ng hakbang at inaasahan
madaling kapitan ng brittleness
regression
Ang lumang error ay hindi bumabalik
Pagsubok na partikular sa pagkakamali
Dapat idagdag sa bawat pag-aayos
Mga Mini Case
Case 1 — Ang pagsubok na laging pumasa. Nagsusulat ang AI ng 12 pagsubok sa isang function at lahat sila ay pumasa. Nagiging kahina-hinala ang engineer at sadyang binabaluktot ang return value ng function; 3 lang sa mga pagsusulit ang nagiging pula. Ang iba pang 9 na pagsusulit ay hindi naglalaman ng mga makabuluhang paninindigan. Ang pagsubok ay pinalalakas ng pangangaso ng mutation; ang tunay na proteksyon ay nakukuha sa 9 na senaryo.
Kaso 2 — Error sa hangganan. Dapat sabihin ng isang function ng pag-verify ng edad na "18 at higit pa ang wasto" ngunit >18 ang nakasulat, ibig sabihin, tinanggihan ang edad 18. Ang error ay lalabas kaagad sa pagsubok dahil ang AI ay bumubuo ng "eksaktong 18" na senaryo sa pamamagitan ng breakpoint analysis. Pinipigilan ng nag-iisang pagsubok sa limitasyon ang anumang tunay na reklamo ng user.
Kaso 3 — Pag-aayos ng kasalukuyang gawi. Kapag sinabihan ang AI na "magsulat ng isang pagsubok batay sa code na ito", ito ay gumagawa ng isang pagsubok na tumatanggap bilang "tama" ng isang rounding error na mayroon na sa code. Kapag ang inhinyero ay nag-print ng pagsubok ayon sa kinakailangan (inaasahang tamang halaga) at hindi ang code, ang pagsubok ay nagiging pula at ang tunay na error ay nangyayari. Ang mga pagsubok ay dapat na nagmula sa inaasahan, hindi mula sa code.
Mga karaniwang pagkakamali
- Walang kabuluhang paninindigan. "Hindi naghagis ng error" ay hindi sapat; Dapat ma-verify ang tamang halaga.
- Nakalilito ang saklaw sa kalidad. Ang mataas na saklaw ay hindi garantiya ng tumpak na mga resulta.
- Pagpi-print ng pagsubok sa pamamagitan ng code. Inaayos ang kasalukuyang error sa "true"; Ang mga pagsubok ay dapat magmula sa inaasahan.
- Nilaktawan ang mga halaga ng limitasyon. Ang nakakalito > sa >= ay ang pinakakaraniwang pagkakamali; Ang mga pares ng hangganan ay dapat na masuri.
- Hindi pag-audit sa pagsusulit mismo. Ang pagsubok na hindi nagiging pula kapag sinira mo ang code ay hindi nagbibigay ng proteksyon.
Sa buod
Ang isang mahusay na suite ng pagsubok ay ang susi sa paggawa ng mga pagbabago nang may kumpiyansa. Mabilis na bumubuo ang AI ng maraming sitwasyon, hangganan, at negatibong sitwasyon; Ngunit kung kumukuha ito ng mga pagsubok mula sa code sa halip na mga kinakailangan, maaari nitong ayusin ang mga umiiral nang bug o magsulat ng mga walang kabuluhang pagsubok na palaging pumasa. Igiit ang kongkretong inaasahang halaga sa bawat pagsubok, isama ang mga nakatali na pares, at i-verify na talagang nagpoprotekta ang iyong mga pagsubok sa pamamagitan ng sadyang paglabag sa code. Ang nilalaman ng paninindigan, hindi ang bilang ng mga saklaw, ang tumutukoy sa kalidad.
Gawain ng aplikasyon
Pumili ng isang function at hayaan itong bumuo ng mga pagsubok sa apat na kategorya (normal, limitasyon, negatibo, error) na may komprehensibong pag-prompt ng pagbuo ng pagsubok; Ipahayag ang kongkretong inaasahang halaga sa bawat pagsubok. Pagkatapos ay patakbuhin ang test vulnerability hunting prompt, magmungkahi ng 5 maliliit na mutasyon sa code, at patakbuhin ang mga pagsubok upang suriin kung alin ang kanilang mahuhuli. Magdagdag ng bagong pagsubok para sa hindi bababa sa isang mutation na hindi nahuli at ipakita na nasa pula na ito.
checklist
- [ ] Nag-print ako ng mga pagsubok batay sa inaasahan/tamang pag-uugali, hindi sa code.
- [ ] Sinaklaw ko ang normal, limitasyon, negatibo at mga sitwasyong error.
- [ ] Iginiit ko ang kongkretong inaasahang halaga sa bawat pagsubok.
- [ ] Sinubukan ko ang mga pares ng hangganan (sa itaas-ibaba lang / nasa itaas-ibaba lang).
- [ ] Sa pamamagitan ng sadyang paglabag sa code, kinumpirma ko na naging pula ang mga pagsubok.
- [ ] Nagdagdag ako ng bagong pagsubok para sa mga hindi natukoy na mutasyon.