Mga nadagdag:
- Kakayahang gumawa ng mga unit, integration at UI test na may artificial intelligence alinsunod sa testing pyramid at cover limit at error na sitwasyon pati na rin ang mga masasayang sitwasyon
- Kakayahang alisin ang mga walang laman/walang silbi na mga pagsubok at namumulaklak na saklaw sa pamamagitan ng pagsuri na ang bawat pagsubok na nabuo ay aktwal na nagpapatunay ng isang pag-uugali
- Pagtitiyak na nahuhuli ng pagsubok ang bug at pinipigilan itong ayusin ang bug sa pamamagitan ng pagsasabi sa AI kung ano ang dapat gawin ng code
Ang pagsulat ng code ay kalahati ng trabaho; Ang pagpapatunay na gumagana nang tama ang code ay ang kalahati. Nakatagpo ang mga mobile app ng daan-daang iba't ibang device, laki ng screen, bersyon ng operating system, at gawi ng user. Imposibleng subukan ang lahat ng ito nang manu-mano; Iyon ang dahilan kung bakit ang awtomatikong pagsubok (code testing code — pagsubok na tumatakbo nang walang pag-click ng tao) ay ang backbone ng kalidad ng mobile. Ang AI ay hindi kapani-paniwalang mahusay sa pagsulat ng mga pagsusulit dahil ang pagsulat ng mga pagsusulit ay eksaktong uri ng pattern na trabaho na gusto nito: pagpapatunay ng isang partikular na gawi para sa mga partikular na input. Sa unit na ito, matututunan natin kung paano pabilisin ang unit testing, interface testing at automation gamit ang AI, ngunit tiyakin ang kalidad ng pagsubok sa pamamagitan ng mata ng tao.
Pagsubok ng pyramid: kung ano ang susuriin at magkano
Ang isang malusog na diskarte sa pagsubok ay kahawig ng isang pyramid. Kasama sa base ang isang malaking bilang ng mga unit test (mabilis na pagsubok na sumusubok sa isang solong function o klase sa paghihiwalay); sila ay mabilis at mura. Sa gitna ay mas kaunting integration testing (pagsubok kung paano gumagana ang maraming bahagi). Sa itaas ay may kaunting UI/end-to-end na pagsubok (pagsusuri na ginagawa sa pamamagitan ng pag-click sa screen gaya ng ginagawa ng user); makatotohanan sila ngunit mabagal at marupok. Tumutulong ang AI sa bawat layer, ngunit ang pinakamahalaga ay nasa base: mabilis na gumagawa ng mga unit test ng lohika ng negosyo.
Uri ng pagsubok
Saklaw
bilis
kahusayan ng AI
pagsubok ng yunit
Isang function/klase
napakabilis
napakataas
pagsasama
interlayer
daluyan
mataas
UI / end-to-end
Lahat ng stream ng screen
mabagal
Katamtaman (marupok)
Tip: Kapag sinasabi sa AI na "bumuo ng mga pagsubok para sa function na ito", tahasang humingi ng mga edge case: walang laman na input, null, negatibong numero, napakalaking halaga, error sa network. Ang AI ay gumagawa ng masayang landas nang madali; Ang mga tunay na pagkakamali ay nagtatago sa mga hangganan at tumalon kung hindi mo gusto ang mga ito doon.
Mga hakbang sa pagsulat ng mga pagsubok gamit ang AI
- Tukuyin ang pag-uugali na susuriin. "Ang function na ito ay dapat magbigay ng output na ito sa input na ito."
- Tukuyin ang balangkas. JUnit + MockK sa Android, XCTest sa iOS, Espresso (Android) o XCUITest (iOS) para sa UI.
- Humingi ng mga estado ng limitasyon. Masayang senaryo + error + breakpoints.
- Pamahalaan ang mga kunwaring bagay. Ang mga panlabas na dependency tulad ng network at database ay ginagaya para sa pagsubok (mock — kinokontrol na mock sa halip na ang aktwal na serbisyo).
- Patakbuhin ang pagsubok at i-verify. Ang pagsusulit ba ay pumasa, ito ba ay nagpapatunay ng anumang bagay na tunay na makabuluhan?
Ang ikalimang hakbang ay kritikal. Minsan ang AI ay gumagawa ng mga walang kwentang pagsubok na "laging pumasa"; halimbawa, isang pagsubok na hindi nagbe-verify ng anuman o nagsusuri ng sarili nitong pekeng data. Ang pagpasa sa pagsusulit at isang mahalagang pagsubok ay magkaibang bagay.
Pag-iingat: Dahil lamang sa maaaring gumawa ng AI ay hindi nangangahulugan na ang pagsubok ay tama. Minsan tinatanggap ng AI ang kasalukuyang (marahil may sira) na pag-uugali ng code bilang "tama" at nagsusulat ng mga pagsubok nang naaayon. Inaayos ng naturang pagsubok ang bug sa halip na mahuli ito. Tinutukoy mo kung ano ang inaasahan ng pagsubok; Sabihin sa AI kung ano ang dapat nitong gawin, hindi kung ano ang ginagawa ng code.
Pagsusuri sa sukat ng saklaw at kamalian
Ang saklaw ng pagsubok (kung anong porsyento ng code ang pinapatakbo ng mga pagsubok) ay isang kapaki-pakinabang ngunit mapanlinlang na sukatan. Ang 90% na saklaw ay nagpapahiwatig na 90% ng code ay naisakatuparan; ngunit hindi na-verify na gumagana nang tama ang mga linyang iyon. Ang isang pagsubok na nagpapatakbo ng isang linya at hindi sinusuri ang resulta ay nagpapalaki sa saklaw ngunit hindi nagbibigay ng seguridad. Ang layunin ay hindi mataas na mga numero, ngunit makabuluhang pagpapatunay. Mabilis kang makakataas gamit ang AI, ngunit tiyaking ang bawat pagsubok ay aktwal na sumusubok ng isang gawi.
tatlong mini case
Kaso 1 — Nahuli ang sitwasyon sa hangganan. Ang AI ay tinanong para sa mga pagsubok para sa isang function ng paglilipat ng pera sa isang banking application, at partikular na "negatibong halaga" at "higit sa balanse" na mga senaryo ay idinagdag. Ang pagsubok ay nagsiwalat na ang paglipat ay hindi na-block na may negatibong halaga; ito ay magiging isang pangunahing kahinaan sa seguridad sa produksyon. Isinara sa pamamagitan ng pagdaragdag ng isang linyang kontrol. Aralin: Ang mga pagsubok sa hangganan ay ang pinakamahalagang pagsubok.
Kaso 2 — Pekeng pagsubok. Ang isang koponan ay hinalinhan upang taasan ang saklaw sa 85% na may 40 mga pagsubok sa yunit na ginawa ng AI. Sa panahon ng inspeksyon, nakita na karamihan sa mga pagsubok ay hindi aktwal na nag-verify ng anumang output, tinawag lang nila ang function at nagsulat ng assertTrue(true). Mataas ang coverage ngunit zero ang proteksyon. Ang mga pagsusulit ay inayos at muling isinulat na may tunay na pagpapatunay. Aralin: maaaring magsinungaling ang mga numero ng saklaw.
Case 3 — Pinabilis ang pagsubok sa UI. Isang e-commerce team ang nagsulat ng XCUITest script ng add-to-cart flow na may AI sa loob ng 20 minuto; Kung isinulat ito sa pamamagitan ng kamay, aabutin ng kalahating araw. Nahulaan ng AI ang mga identifier ng elemento ng screen; Itinugma sila ng team sa totoong code at inayos ang mga ito. Ang bilis ng draft ay totoo, ngunit ang pag-verify ng identifier ay gawa ng tao.
Mahinang prompt / Malakas na prompt
Mahinang prompt: "Sumulat ng pagsubok para sa function na ito."
Napakahusay na prompt: "Gumawa ng mga unit test para sa Kotlin function na ito gamit ang JUnit5 + MockK. Function: money transfer (halaga, source, target). Mga gawi na susuriin (kung ano ang dapat GAWIN ng code):- Dapat maging matagumpay ang valid transfer- Negatibo o zero na halaga ang dapat tanggihan- Ang halagang mas malaki kaysa sa balanse ay dapat tanggihan- Network error ay dapat magtapon ng naaangkop na exception. paninindigan."
Mga nakopyang template
Unit test template: "Bumuo ng [JUnit/XCTest] unit test para sa function na ito para sa [language]. Inaasahang gawi: [ano ang gagawin]. Isama ang: masayang senaryo, null input, breakpoints, error case. Hayaang i-verify ng bawat pagsubok ang iisang gawi; gumamit ng makabuluhang assertion; mock. [code]"
Template ng pagsubok ng UI: "Sumulat ng pagsubok sa UI ng sumusunod na daloy gamit ang [Espresso/XCUITest]: [hakbang-hakbang na daloy ng user]. Pumili ng mga elemento ng screen na may accessibility id, gumamit ng id sa halip na text. Magdagdag ng diskarte sa paghihintay. Paalalahanan akong itugma ang mga element id sa aktwal na code."
Template ng pag-audit ng pagsubok:"Suriin ang mga pagsubok na ito:1) Talagang bini-verify ba nila ang isang output/gawi o null ba ang mga ito?2) Sinasaklaw ba nila ang mga limit case?3) Inaayos ba nila ang code o inaasahan ang tamang gawi? I-flag at palakasin ang mahihinang pagsubok. [mga pagsubok]"
Template ng pag-optimize ng coverage: "Tukuyin ang mga hindi pa nasusubukang bahagi ng klase na ito at magmungkahi ng mga makabuluhang pagsubok. Unahin ang mga landas na may tunay na panganib, hindi lamang ang bilang ng mga saklaw. [code]"
Mga karaniwang pagkakamali
- Testing lang yung happy scenario. Ang mga error ay naka-imbak sa mga estado ng limitasyon; Tanungin sila nang lantaran.
- Pagtanggap ng walang laman/walang kwentang pagsubok. Ang mga pagsubok sa uri ng assertTrue(true) ay nagpapalaki sa saklaw at hindi nagbibigay ng proteksyon.
- Ang pagkakaroon ng AI na i-verify kung ano ang ginagawa ng code. Dapat asahan ng pagsubok kung ano ang dapat gawin ng code; kung hindi, inaayos nito ang bug.
- Pagkakamali sa numero ng saklaw para sa layunin. Ang 90% na saklaw ay hindi nangangahulugang 90% na katumpakan.
- Pagli-link sa text sa UI testing. Nasira ang pagsubok kapag nagbago ang teksto; Gumamit ng stable identifier (id).
- Ang pag-set up ng mga pangungutya ay hindi tama. Ang "unit test" na tumatawag sa aktwal na serbisyo ay magiging mabagal at malutong.
Sa buod
Ang pagsubok ay ang backbone ng mobile na kalidad, at ang AI ay napakahusay sa lugar na ito, lalo na sa unit testing. Sundin ang testing pyramid: maraming unit, medium integration, maliit na UI testing. Tahasang tanungin ang AI para sa masayang senaryo pati na rin limitahan ang mga kaso at landas ng error. Siguraduhin na ang bawat pagsubok na nabuo ay aktwal na nagpapatunay ng isang gawi; Ang mga walang laman na pagsusuri at napalaki na coverage ay nakakapanlinlang. Pinakamahalaga, sabihin sa AI kung ano ang dapat gawin ng code, hindi kung ano ang ginagawa nito, kaya't nahuli ng pagsubok ang bug, hindi ito inaayos.
Gawain ng aplikasyon
Humiling ng mga pagsubok mula sa AI gamit ang "Template ng pagsubok ng unit" para sa isang function ng logic ng negosyo (hal. pagkalkula ng diskwento o pagpapatunay ng form) at tahasang tukuyin ang mga kaso ng limitasyon (null, negatibo, masyadong malaki). Patakbuhin ang mga nabuong pagsubok, pagkatapos ay ipa-audit ang parehong mga pagsubok gamit ang "Template ng pag-audit ng pagsubok." Maghanap ng kahit isang mahinang pagsubok, palakasin ito, at subukan kung ang mga pagsubok ay nakakuha ng aktwal na error ng function (sa pamamagitan ng pagdaragdag ng maliit na bug).
checklist
- [ ] Pinili ko ang naaangkop na layer para sa test pyramid (priority unit)
- [ ] Gusto ko ng limitasyon at mga kaso ng error bukod sa masayang senaryo
- [ ] Na-verify ko na ang bawat pagsubok ay naglalaman ng isang makabuluhang pahayag
- [ ] Sinabi ko sa AI kung ano ang dapat gawin ng code, hindi kung ano ang ginagawa nito
- [ ] Nakatuon ako sa aktwal na mga landas ng peligro, hindi sa bilang ng mga saklaw
- [ ] Gumamit ako ng stable identifier sa mga UI test, hindi ako nag-bind sa text