Qazanclar:
- Qəbul qaydasından asılı olmayaraq vahid testlərində gözlənilən dəyəri hesablayaraq, süni intellektin səhv davranışı "doğru" kimi qəbul etməsinin qarşısını almaq bacarığı
- AAA və FIRST prinsiplərini tətbiq etməklə və xarici asılılıqları ələ salmaqla sürətli, müstəqil və təkrarlana bilən testləri çap etmək bacarığı
- Testləri mutasiya (kod qırılması) ilə test etmək və sınaqdan keçirilməsi çətin olan kodu dizayn qoxusu kimi tanımaq bacarığı
Test piramidasının ən böyük və ən sürətli təbəqəsi vahid sınağıdır - funksiyanı və ya kiçik kod parçasını hər şeydən təcrid olunmuş şəkildə yoxlayan test. Minlərlə vahid testi saniyələr ərzində işləyir və kod hələ də tərtibatçının ekranında olarkən səhvi aşkar edir. Süni intellekt (AI) vahid testlər hazırlamaqda bəlkə də ən bacarıqlıdır: siz ona bir funksiya verirsiniz, AI onlarla test istehsal edir. Ancaq bu rahatlıq ən böyük tələyə səbəb olur: AI asanlıqla "yaşıl parlayan, lakin heç nəyi təsdiq etməyən" testlər istehsal edir və ya kodun cari (bəlkə də səhv) davranışını "düzgün" kimi qəbul edir. Bu bölmədə siz AI ilə həqiqətən qoruyucu vahid testlərini necə yazmağı və sınaqdan keçirilə bilən kod ilə AI arasındakı əlaqəni öyrənəcəksiniz.
Yaxşı vahid testinin keyfiyyətləri: İLK
Yaxşı vahid testləri BİRİNCİ prinsiplərə əməl edir: Sürətli, Müstəqil (testlər bir-birindən asılı olmamalıdır), Təkrarlana bilən (təkrarlana bilən — istənilən mühitdə eyni nəticə), Öz-özünə doğrulama (açıq keçid/uğursuzluq), Vaxtında (vaxtında). AI testlər hazırlayarkən bu prinsipləri özünüzə xatırladın; testin "müstəqil" və "təkrarlana bilən" olmasını xarici dünyadan (faktiki verilənlər bazası, şəbəkə, saat) asılı olmadığını xüsusi olaraq xahiş edin.
AAA nümunəsi və ifadəli təsdiq
Möhkəm vahid testi AAA strukturunu izləyir: Təşkil et (hazırlamaq — girişləri və asılılıqları qurmaq), Fəaliyyət göstərmək (icra etmək — sınaqdan keçirilən funksiyanı çağırmaq), Təsdiq et (təsdiq et — nəticəni gözlənilən dəyərlə müqayisə et). Tənqidi olan iddiadır. Süni intellektin ən çox yayılmış səhvi sınaq altında olan kodun çıxışından təsdiq çıxarmaqdır – “kod nə qaytarırsa, doğrudur” məntiqi. Bu, testi mənasız edir. Doğru yol, gözlənilən dəyəri müstəqil olaraq müəyyən etməkdir (qəbul meyarlarından, onu əl ilə hesablayın).
Diqqət: Süni intellektə "bu funksiya üçün test yazın" desəniz, AI funksiyanı işə sala və nəticəsini "gözlənilən" kimi yaza bilər. Bu test funksiya yalan olsa belə keçir. Bunun əvəzinə "gözlənilən nəticələri bu qaydalara uyğun hesablayırsınız, funksiyanın cari çıxışına istinad etməyin" deyin.
İstehzalar, stublar və asılılıqlar
Vahid sınağı izolyasiya tələb edir. Funksiyanız verilənlər bazası və ya API-dən asılıdırsa, sınaq zamanı onlar saxta obyektlərlə (mock/stub — real asılılığın idarə olunan, dummy əvəzedicisi) əvəz olunur. Bu, testi sürətli, müstəqil və təkrarlana bilən edir. AI saxta quraşdırma istehsal edə bilər; Ancaq həddindən artıq istehzadan çəkinin: hər şeyi ələ salsanız, test yalnız "istehzanın nə qaytardığını" yoxlayacaq, həqiqi məntiqi yox. Balans: xarici dünyanı təqlid edin, sınaqdan keçirilən həqiqi məntiqi yerinə yetirin.
Sınaq qabiliyyəti və AI
Maraqlı rəy var: sınaqdan keçirilməsi çətin olan kod çox vaxt zəif dizayn edilmiş koddur. Süni intellekt bir funksiyaya test yazmaqda çətinlik çəkirsə (çoxlu asılılıqlar, gizli qlobal vəziyyət, yan təsirlər), bu dizayn qoxusudur. Süni intellektdən “bu kodu sınamaq üçün necə refaktor edərdiniz” sualı həm daha yaxşı sınaq, həm də daha yaxşı koda gətirib çıxarır.
Parametrləşdirilmiş testlər və məlumat müxtəlifliyi
Fərqli girişlərlə eyni qaydanı yoxlamaq üçün hər dəfə ayrıca test yazmaq həm yorucu, həm də saxlamaq çətindir. Parametrləşdirilmiş test — girişlər və gözlənilən nəticələr siyahısında eyni test məntiqini təkrar-təkrar işlədən struktur — bu təkrarı aradan qaldırır: tək test orqanı onlarla giriş cütü ilə qidalanır. Qəbul qaydalarınızı ona verdiyiniz zaman AI bu girişlə gözlənilən nəticə cədvəllərini hazırlamaqda çox səmərəlidir; Xüsusilə, sistematik olaraq limit dəyərləri və ekvivalentlik siniflərini cədvəlləşdirir.
Ancaq burada da bir tələ var: AI test olunan koddan yaradılan cədvəldə gözlənilən nəticələri əldə etməyə çalışır. Parametrləşdirilmiş testlərdə bu xəta daha təhlükəlidir, çünki bircə yanlış məntiq onlarla sətirləri etibarsız edir. Buna görə də, həmişə gözlənilən nəticə sütununu qəbul qaydasına uyğun olaraq müstəqil olaraq hesablayın və ən azı bir neçə satırı əl ilə təsdiqləyin. Həmçinin "hər sətir nəyi təmsil edir" təsvir sütununu soruşun; belə ki, bir sıra pozulduqda, hansı dövlətin pozulduğunu dərhal görürsən.
İpucu: Parametrləşdirilmiş test cədvəlinə qəsdən “tələ cərgəsi” əlavə edin, yəni nəticəni bilərəkdən səhv yazın. Testi keçirdiyiniz zaman bu xətt qırmızıya çevrilmirsə, testiniz əslində bu vəziyyəti təsdiqləmir. Bu, tez bir sınaq keçirmə yoxlamasıdır.
Zəif məlumat / Güclü göstəriş
Zəif: "Bu funksiya üçün vahid testi yazın."
Güclü: "taxCalculate(miqdar, rate) funksiyası üçün [dil/çərçivə] vahid testləri yazın. Qəbul qaydası: nəticə = məbləğ * dərəcə, 2 ondalığa yuvarlaqlaşdırılıb; mənfi məbləğ və ya dərəcə xəta atır; dərəcə 0 olarsa, 0 qaytarır. AAA strukturundan istifadə edin. BU qaydalara uyğun olaraq gözlənilən dəyərləri əl ilə hesablayın; cari örtük və mənfi halların çox böyük çıxışı, bound funksiyasına istinad etməyin. Hər bir testin adı onun təsdiq etdiyi qaydanı təsvir etsin.
Güclü tez; Qəbul qaydasını, müstəqil gözlənilən dəyər gözləntisini, strukturu və kənar halları verir. Beləliklə, test kodun güzgüsü deyil, qaydanın qoruyucusu olur.
Vahid test keyfiyyət cədvəli
simptom
Pis test (saxta güvən)
yaxşı test
iddia etmək
Yoxdur və ya "null deyil"
Gözlənilən konkret dəyər
Gözlənilən dəyər mənbəyi
Funksiya çıxışı
Qəbul qaydası / əllə hesablama
asılılıq
Faktiki DB/şəbəkə/saat
Saxta/stub ilə izolyasiya edilmişdir
kənar qutu
Yalnız xoşbəxt yol
limit, mənfi, xəta
Kodu pozduqda
yaşıl qalır
qırmızı olur
ad
test1, test metodu
təsdiq etdiyi qaydanı təsvir edir
Dörd kopyalana bilən şablon
1) Qaydaya əsaslanan vahid sınağı:
Rolunuz: proqram təminatının sınaq mühəndisi. Aşağıdakı funksiya üzrə vahid testini [dil/çərçivə] ilə yazın: [imza]. Qəbul qaydaları: [qaydalar].- AAA strukturundan istifadə edin.- BU qaydalara uyğun olaraq gözlənilən dəyərləri əl ilə hesablayın; Funksiyanın cari çıxışına istinad etməyin. - Ayrı-ayrı testlərlə həddi, mənfi, səhv və xoşbəxt yolu əhatə edin. - Qoy hər bir test adı təsdiq etdiyi qaydanı təsvir etsin. - Xarici asılılıqları sınamaq; Əsl məntiqi işləyin.
2) Mutasiya müqavimətinə nəzarət:
Bu vahid testlərini yoxlayın. Test edilən koda edə biləcəyim 5 kiçik düzəlişləri sadalayın (a - əvəzinə +, a >= əvəzinə >, sərhəd dəyişikliyi) və hər biri üçün mənə deyin ki, bu testlərdən HANSI qırmızıya çevriləcək? Heç biri qaytarılmırsa, test kifayət deyil. Kod + testlər: [yapışdırın]
3) Sınaq qabiliyyətinə baxış:
Bu funksiya üçün vahid test yazmaq niyə çətindir? Gizli asılılıq, qlobal status, yan təsirlər, bir çox məsuliyyət varmı? Onu sınaqdan keçirmək üçün minimal refaktorinq təklif edin; davranışını dəyişməyin. Kod: [yapışdırın]
4) Tamamlanmamış ssenari:
Aşağıdakı funksiya və mövcud testlər verilir. Hansı davranışın/kənar vəziyyətin HEÇ vaxt sınaqdan keçirilmədiyini sadalayın (əhatə dairəsi boşluğu) və hər biri üçün bir test əlavə edin. Funksiya+testlər: [yapışdırın]
üç mini qutu
1-ci hal - Kodun əks olunmasını sınayın. Tərtibatçı süni intellektə yuvarlaqlaşdırma funksiyası üçün test yazmağı tapşırdı; 10 test yaşıl idi. Əslində, funksiya yanlış istiqamətdə yuvarlaqlaşdırıldı, lakin AI funksiyanın çıxışından gözlənilən dəyərləri götürdü, buna görə də testlər səhvi "doğru" hesab etdi. Gözlənilən dəyərlər "qaydaya əsaslanan" şablonla əl ilə hesablandıqda, 4 test qırmızı rəngə çevrildi və əsl səhv aşkar edildi.
2-ci hal - Mutasiya nəzarətinin dəyəri. Bir komanda 45 vahid testinə istinad etdi. "mutasiya möhkəmliyinin yoxlanılması" ilə koda 20 kiçik düzəliş etməyə çalışdı; testlər onlardan yalnız 11-ni tutdu. Qalan 9 fasilə səssizcə keçdi. Komanda zəif sınaqları gücləndirdi; Növbəti buraxılışda bu təkmilləşdirilmiş testlər tərəfindən faktiki hesablama xətası aşkar edildi.
3-cü hal – Sınaqsızlıq dizayn qoxusudur. Süni intellekt sifariş funksiyası üçün testlər yaza bilmədi, ona daim real verilənlər bazası lazım idi. "Sınaq qabiliyyətinə baxış" şablonu göstərdi ki, funksiya verilənlər bazasına girişi daxil edir. Asılılıq enjeksiyonu çıxarıldıqda, testlər yazıla bilər və kod daha təmiz olur.
Ümumi səhvlər
- Koddan gözlənilən dəyərin alınması. Süni intellekt funksiya çıxışını "düzgün" kimi qəbul edir; səhv kodu təsdiqləyən test.
- Təsdiq etmədən və ya əhəmiyyətsiz təsdiqlə test edin. “Səhv atmadı, keçdi” məntiqi; Heç nəyi təsdiq etmir.
- Həddindən artıq istehza. Hər şeyi ələ salmaq və yalnız rişxəndin qaytardığını sınamaq; real məntiq sınaqdan keçirilmir.
- Yalnız xoşbəxt yol. Həddi keçmə, mənfi və səhv vəziyyətləri.
- Kodu pozaraq sınaqdan keçirilmir. Mutasiyanı yoxlamadan yaşıllığa etibar etmək.
- Sınaqsızlığa məhəl qoymamaq. Çətin sınaqdan keçmək əvəzinə pis dizaynı tanımaq və düzəltmək deyil.
Xülasə
Vahid testləri sınaq piramidasının ən sürətli və ən böyük təbəqəsidir; Ən ucuz anda səhvini tutur. Süni intellekt vahid testlər hazırlamağa çox qadirdir, lakin onun ən böyük tələsi kodun özündən gözlənilən dəyəri çıxararaq yanlış davranışı "düzgün" hesab edən testlər yazmaqdır. Həll yolu: qəbul qaydalarını verin, gözlənilən dəyərləri əl ilə hesablayın, AAA və FIRST prinsiplərini tətbiq edin, xarici dünyaya lağ edin və həqiqi məntiqi işlədin və hər testi mutasiya ilə yoxlayın (kodu pozaraq). Test etmək çətin olan kod düzəldilməli olan dizayn işarəsidir.
Tətbiq tapşırığı
Öz layihənizdən biznes qaydası olan funksiyanı seçin. Qəbul qaydalarını yazın və AI-nin “qaydaya əsaslanan vahid testi” şablonu ilə testlər yazmasını təmin edin; Gözlənilən dəyərləri əl ilə hesablayın. Sonra “mutasiya möhkəmliyi yoxlanışı” tətbiq edin: kodda ən azı 5 kiçik fasilə edin və neçə testin qırmızıya çevrildiyini ölçün. Tutulmamış korrupsiyalar üçün yeni test əlavə edin. Nə qədər pozulduğunu bildirin (məsələn, mutasiya hesabı).
yoxlama siyahısı
- [ ] Mən qəbul qaydalarını verdim və gözlənilən dəyərləri əl ilə hesabladım.
- [ ] Testlərin koddan gözlənilən dəyəri əldə etmədiyinə əmin oldum.
- [ ] AAA və FIRST təlimatlarına uyğun olaraq müstəqil test qurmuşam.
- [ ] Mən xarici asılılıqlara istehza etdim və faktiki məntiqi işlətdim.
- [ ] Mən limit, mənfi və xəta hallarını əhatə etdim.
- [ ] Kodu pozmaqla (mutasiya) sübut etdim ki, testlər həqiqətən qoruyur.