Qazanclar:
- Yalançı inamın üç üzünü (qeyri-iddialı, özünü təsdiq edən, əhəmiyyətsiz iddia) tanımaq və antidotları tətbiq etmək bacarığı
- Alət və ya əl ilə faiz əhatəsindən daha dəqiq keyfiyyət ölçüsü kimi mutasiya testindən və mutasiya xalından istifadə etmək bacarığı
- AI-ni sınaqlara qarşı qırmızı komanda kimi yerləşdirmək və tərif tələsinə düşmədən boşluqları sınamaq bacarığı
Bu modulun mərkəzində təkrarlanan bir xəbərdarlıq var: yaşıl parlaq test paneli keyfiyyətin sübutu deyil. Testləriniz sizə güvən verirsə, bu güvənin həqiqi və ya saxta olduğunu bilməlisiniz. Süni intellekt (AI) əsrində bu sual həmişəkindən daha vacibdir, çünki AI maye, hamar görünən, lakin içi boş testlər istehsal etməkdə mahirdir. Yanlış güvən — proqram təminatının düzgün olduğuna inanmaq, çünki testlər yaşıldır, əslində isə testlər heç nəyi təsdiqləmir — QA komandası üçün baş verə biləcək ən təhlükəli şeydir; çünki heç bir səhv olmadığını deyil, səhvləri görə bilmədiyinizi gizlədir. Bu bölmə bütün modulun təsdiqləmə fəlsəfəsini bir intizamda birləşdirir: testlərinizi sınaqdan keçirmək.
Testin keyfiyyətini ölçmək üçün qızıl standart: mutasiya testi
Testin həqiqətən qoruyub saxlamadığını başa düşməyin ən güclü yolu mutasiya testidir (mutasiya testi - mənbə kodunda qəsdən kiçik təhriflər/mutasiyalar yaradan və testlərin bu təhrifləri aşkar edib-etmədiyini ölçən texnika). Məntiq sadədir: kodu qəsdən pozarsanız (+-ı --ə, a >-nı >=-ə, doğrunu yalana çevirsəniz), yaxşı bir test dəsti bu pozulmanı tutmalı və qırmızı rəngə çevrilməlidir. Əgər belə deyilsə, bu pozulma sağ qalmış mutantdır - buna görə də testləriniz əslində bu davranışı qoruyub saxlamır.
Mutasiya hesabı = öldürülmüş mutasiya / ümumi mutasiya. 90% xətti əhatə edən paket 40% mutasiya balı ola bilər; Bu, xətlərin işlədiyini, lakin davranışın təsdiqlənmədiyini göstərir. Mutasiya xalı, faiz əhatəsindən daha çox dürüst keyfiyyət ölçüsüdür.
İpucu: Avtomatik mutasiya vasitələri var (Java üçün PIT/Pitest, JavaScript/TypeScript üçün Stryker, .NET üçün Stryker.NET, Python üçün mutmut). Bunlar avtomatik olaraq yüzlərlə mutasiya yaradır və sınaqdan keçirir. Əgər alətiniz yoxdursa, hətta “kod testini sındırmaq” metodu belə kritik funksiyalar üçün əvəzolunmazdır.
Yalançı inamın üç üzü və onun antidotu
Pseudo-etibar forması
simptom
antidot
Təsdiq etmədən test edin
Kod işləyir, heç nə təsdiqlənmir
Hər testdə həqiqi təsdiq; mutasiya ilə sınaq
özünü təsdiq edən test
Gözlənilən = kodun çıxışı
Müstəqil olaraq gözlənilən dəyəri hesablayın
Önəmsiz iddia
"null deyil", "200 qaytarıldı"
Biznes qaydasını/faktiki nəticəni təsdiq edin
Yüksək əhatəli yanlışlıq
90% xətlər, aşağı qorunma
Mutasiya hesabına baxın
Kövrək test tolerantlığı
“Yenə ilişib, keç”
Kök səbəb + deterministik test
Süni intellektdən “qırmızı komanda” kimi istifadə
Süni intellekt həm yalançı inam yarada, həm də onu ovlamaqda güclü müttəfiq ola bilər. Öz testlərinizə qarşı AI-dan qırmızı komanda kimi istifadə edin: “bu testlərdən keçən, lakin səhv olan kod yazın” və ya “bu testləri aldadacaq bir təxribat tapın” deyə soruşun. Əgər AI testlərinizdə boşluqlar tapırsa, bu boşluqlar real risklərdir.
Diqqət: AI-dən “Test keyfiyyətim yaxşıdırmı?” sualını verməyin. və "bəli, əla" cavabını təminat kimi qəbul edin. AI mehriban olmağa meyllidir. Bunun əvəzinə, AI-ni konkret bir işə çağırın: "bu testlərdən keçən bir səhv istehsal edin." Əgər onu yarada bilirsə, testləriniz bu xətaya kor olur.
Ekvivalent mutasiyalar və balın hədləri
Mutasiya testi güclüdür, lakin onun bir xüsusiyyəti var: bəzi mutasiyalar kodun davranışını heç dəyişmir. Bunlara ekvivalent mutasiyalar deyilir (ekvivalent mutant — pozulmuş kod, orijinalla eyni nəticəni verən mutasiya). Məsələn, heç vaxt istifadə olunmayan dəyişənin ilkin qiymətinin dəyişdirilməsi çıxışa təsir etmir; Heç bir test bunu tuta bilməz və etməməlidir. Buna görə də, 100% mutasiya xalı çox vaxt praktikada mümkün deyil və məqsəd deyil. Ekvivalent mutasiyaların əllə çıxarılması çox əmək tələb edir; Ona görə də mutasiya xalını mütləq imtahan balı kimi deyil, “testlərim həqiqətən qoruyurmu?” sualının dürüst göstəricisi kimi oxuyun.
Praktik yanaşma belədir: bütün kod bazasında daim mutasiya testi aparmaq əvəzinə, onu ən yüksək risk və ən mürəkkəb biznes qaydalarını ehtiva edən modullarda işlədin. Bu modullarda sağ qalan mutasiyaları bir-bir araşdırın; Həqiqi boşluqdursa, bir test əlavə edin; ekvivalent mutasiyadırsa, onu əsaslandırma ilə qeyd edin və keçin. AI sağ qalan mutasiyanın ekvivalent olub olmadığını qiymətləndirmək üçün ilkin skrininq həyata keçirə bilər; amma son qərarı kodun nə etdiyini bilən siz verir.
Diqqət: Mutasiya testi hesablama baxımından baha başa gəlir (bütün müvafiq testlər hər mutasiya üçün yenidən həyata keçirilir). Beləliklə, ümumi və ağlabatan strategiya onu hər birləşmədən daha çox, kritik modullar üçün həftəlik və ya buraxılışdan əvvəl dərin yoxlama kimi planlaşdırmaqdır.
Zəif məlumat / Güclü göstəriş
Zəif: "Testlərim kifayətdirmi?"
Güclü: "Bu funksiya və test paketi üçün qırmızı komanda kimi fəaliyyət göstərin. (1) Kodda öldürülə bilən 8 mutasiya yaradın (operatorun dəyişdirilməsi, sərhəd dəyişikliyi, şərtin inversiyası, dəyərin dəyişdirilməsi). (2) Hər mutasiya üçün mövcud testlərdən hansının onu tutacağını və hansının YOXDURUNUN göstərin. (3) Sağ qalan hər mutasiya üçün, həmçinin onu öldürə biləcəyini göstərən yeni bir sınaq nümunəsi yazın. bütün bu testlər, lakin Kod+testləri pozur: [yapışdırın]".
Güclü tez; O, AI-ni tərif maşını deyil, sınaqdan keçirən imtahançı kimi yerləşdirir.
Dörd kopyalana bilən şablon
1) Manual mutasiya nəzarəti:
Bu kod üçün 8 əhəmiyyətli mutasiya (kiçik qəsdən pozulmalar) yaradın: arifmetik operatorun dəyişdirilməsi, müqayisə limiti (> vs >=), məntiqi inversiya, qaytarma/sabit əvəzetmə, şərti atlama. Hər mutasiya üçün mövcud testlərdən hansının onu tutacağını və ya tutmayacağını proqnozlaşdırın. Kod+testlər: [yapışdırın]
2) Sağ qalan mutasiyanı öldürmək:
Aşağıdakı mutasiya test hesabatında sağ qalan (tutulmamış) mutasiyalar var: [siyahı/hesabat]. Hər biri üçün həmin mutasiyanı öldürəcək minimal test yazın (bu şəkildə pozulduqda kod qırmızıya çevriləcək). Testin hansı davranışı təsdiqlədiyini şərh edin.
3) Qırmızı komanda - qan testi:
Aşağıdakı testlərin BÜTÜNÜNÜ KEÇƏN, lakin aşağıdakı iş qaydasını pozan kod yaza bilərsiniz: [biznes qaydası]. Əgər belədirsə, bu testlərdə hansı boşluq buna imkan verir? Bu boşluğu bağlayacaq testi əlavə edin. Testlər: [yapışdırın]
4) Test keyfiyyətinin yoxlanılması:
Keyfiyyət üçün bu test paketini yoxlayın. Hər bir test üçün işarələyin:- Həqiqi təsdiq varmı, yoxsa rekvizitdir?- Gözlənilən dəyər müstəqildirmi, koddan əldə edilir?- O, biznes qaydasını yoxsa mənasız bir şeyi yoxlayır? Nəhayət, təxmini "həqiqi təsdiq balı" və 3 ən zəif testi verin. Testlər: [yapışdırın]
üç mini qutu
1-ci hal — Əhatə 92%, mutasiya göstəricisi 38%. Bir komanda yüksək əhatə dairəsinə etibar edirdi. Stryker ilə mutasiya testi aparıldıqda, nəticə 38% idi: istehsal edilən mutasiyaların əksəriyyəti sağ qaldı. Bu, testlərin xətləri işlətmədiyini və davranışı yoxladığını sübut etdi. Komanda test keyfiyyətinə üç həftə sərmayə qoydu; Mutasiya əmsalı 81%-ə yüksəldi və növbəti buraxılışda bu gücləndirilmiş testlər tərəfindən iki real hesablama səhvi aşkar edildi.
Case 2 - AI testi aldatdı. "Qırmızı komanda" şablonu ilə bir mütəxəssis AI-dan mövcud testlərdən keçən, lakin endirim qaydasını pozan kodu istədi. Süni intellekt həmişə sıfır endirimi qaytaran kod yazdı və bütün testlər yaşıl qaldı, çünki heç bir test faktiki endirim dəyərini təsdiqləmirdi. Boşluq göründü, real təsdiqlər əlavə edildi.
3-cü vəziyyət - tərif tələsi. Kiçik bir sınaqçı süni intellektdən soruşdu: "Testlərim yaxşıdır?" və “çox əhatəli” cavabını eşidəndə rahatlandı. Onun böyük həmkarı eyni testləri "test keyfiyyətinin auditi" şablonundan istifadə edərək yoxlamışdı; Məlum oldu ki, 20 testdən 12-si dekordur (təsdiq və ya zibil olmadan). Doğru sual düzgün cavabı gətirdi.
Ümumi səhvlər
- Keyfiyyət üçün əhatə dairəsini səhv salmaq. Yüksək sıra əhatə dairəsinə güvənmək və mutasiya xalına ümumiyyətlə baxmamaq.
- AI-nin tərifinə etibar etmək. "Testləriniz yaxşıdır?" və müsbət cavabı təminat hesab etmək.
- Koddan gözlənilən dəyərin alınması. Səhv kodu təsdiqləyən özünü doğrulayan testlər.
- Önəmsiz iddialarla kifayətlən. "Null deyil", "200 qaytarıldı" kimi faktiki qaydanı təsdiq etməyən çeklər.
- Sağ qalan mutasiyalara məhəl qoymamaq. Mutasiya hesabatında tutulmayanlara məhəl qoymamaq.
- Hətta kritik kodu əl ilə mutasiya etməyə çalışmayın. Alət mövcud deyilsə, "kodu sındırın və sınaqdan keçirin" addımını atlayın.
Xülasə
Pseudo-trust proqram təminatının düzgün olduğuna inanır, çünki testlər yaşıldır; halbuki testlər heç nəyi təsdiq etməyə bilər. Bunu ölçmək üçün qızıl standart mutasiya testidir: kodu qəsdən pozmaq və testlərin onu tutduğunu ölçmək. Mutasiya xalı, faiz əhatəsindən daha çox dürüst keyfiyyət ölçüsüdür. Süni intellekt həm yalançı inam yaradır, həm də onu ovlamaqda güclü qırmızı komandaya çevrilir – “bu testlərdən keçən bir səhv yaradın” deyə soruşun. Testlərinizi sınayın: həqiqi təsdiq, müstəqil gözlənilən dəyər, biznes qaydalarının təsdiqi və öldürülmüş mutasiyalar.
Tətbiq tapşırığı
Biznes qaydasını və onun testlərini öz layihənizdən ehtiva edən funksiyanı idxal edin. Mümkünsə, mutasiya alətini (Stryker/Pitest/mutmut) işə salın və mutasiya xalını ölçün; Əgər alət yoxdursa, "əllə mutasiyaya nəzarət" şablonu ilə ən azı 8 mutasiya yaradın və onları əl ilə sınayın. Sağ qalan hər mutasiya üçün “sağ qalan mutasiyanı öldür” şablonu ilə yeni test yazın. Nəhayət, "qırmızı komanda" nümunəsi ilə AI-nin testlərinizi aldadan kod istehsal edə biləcəyinə baxın. Başlanğıc və son mutasiya xalınızı (və ya tutulan/ümumi mutasiya nisbətini) bildirin.
yoxlama siyahısı
- [ ] Test keyfiyyətini əhatə dairəsi ilə deyil, mutasiya balı ilə qiymətləndirdim.
- [ ] Mən kritik kod üçün mutasiya testini (ya alətlə və ya əllə) keçirdim.
- [ ] Sağ qalan hər mutasiya üçün yeni testlər yazdım.
- [ ] Qırmızı komanda olaraq süni intellektdən istifadə etdim və testlərimdə boşluqlar axtardım.
- [ ] Süni intellektin "testləriniz yaxşıdır" tərifini arxayınçılıq kimi qəbul etmədim.
- [ ] Mən yoxladım ki, hər bir test faktiki təsdiqi, müstəqil gözlənilən dəyəri və biznes qaydasını təsdiqləyir.