Daromadlar:
- Psevdo-ishonchning uchta yuzini tanib olish qobiliyati (davogar bo'lmagan, o'zini-o'zi tasdiqlovchi, ahamiyatsiz da'vo) va antidotlarni qo'llash
- Mutatsiya testi va mutatsiya ballini asbob yoki qo'l bilan qoplash foizlaridan ko'ra aniqroq sifat o'lchovi sifatida ishlatish qobiliyati
- AIni sinovlarga qarshi qizil jamoa sifatida joylashtirish va maqtov tuzog'iga tushmasdan bo'shliqlarni sinab ko'rish qobiliyati
Ushbu modulning markazida takroriy ogohlantirish mavjud: yashil yonib turgan sinov paneli sifatning dalili emas. Agar sizning testlaringiz sizga ishonch bag'ishlasa, bu ishonch haqiqiy yoki soxta ekanligini bilishingiz kerak. Sun'iy intellekt (AI) asrida bu savol har qachongidan ham muhimroqdir, chunki AI suyuq, silliq, ammo ichi bo'sh testlarni ishlab chiqarishga mohir. Noto'g'ri ishonch - dasturiy ta'minotning to'g'ri ekanligiga ishonish, chunki testlar yashil bo'lib, aslida testlar hech narsani tasdiqlamaydi - QA jamoasi bilan sodir bo'lishi mumkin bo'lgan eng xavfli narsa; chunki u xatolar yo'qligini emas, balki xatolarni ko'ra olmasligingizni yashiradi. Ushbu bo'lim butun modulni tekshirish falsafasini bitta fanga birlashtiradi: testlaringizni sinab ko'rish.
Sinov sifatini o'lchash uchun oltin standart: mutatsiya testi
Sinov haqiqatdan ham himoya qiladimi yoki yo'qligini tushunishning eng kuchli usuli bu mutatsiya testidir (mutatsion test - manba kodida ataylab kichik buzilishlar/mutatsiyalarni keltirib chiqaradigan va testlar bu buzilishlarni aniqlaydimi yoki yo'qligini o'lchaydigan usul). Mantiq oddiy: agar siz kodni ataylab buzsangiz (+ ni -ga, a >ni >= ga, rostni noto‘g‘riga aylantirsangiz), yaxshi test to‘plami bu buzilishni ushlashi va qizil rangga aylanishi kerak. Agar shunday bo'lmasa, bu buzilish omon qolgan mutantdir - shuning uchun testlaringiz aslida bu xatti-harakatni saqlamaydi.
Mutatsiya darajasi = o'ldirilgan mutatsiya / umumiy mutatsiya. 90% chiziq qamroviga ega paket 40% mutatsiyaga ega bo'lishi mumkin; Bu chiziqlar ishlayotganini ko'rsatadi, lekin xatti-harakatlar tasdiqlanmagan. Mutatsiya ko'rsatkichi foizli qamrovga qaraganda ancha halolroq sifat ko'rsatkichidir.
Maslahat: Avtomatik mutatsiya vositalari mavjud (Java uchun PIT/Pitest, JavaScript/TypeScript uchun Stryker, .NET uchun Stryker.NET, Python uchun mutmut). Ular avtomatik ravishda yuzlab mutatsiyalarni yaratadi va sinovdan o'tkazadi. Agar sizda vosita bo'lmasa, hatto qo'lda "kodni sindirish" usuli ham muhim funktsiyalar uchun bebahodir.
Psevdo-ishonchning uchta yuzi va uning antidoti
Psevdo-ishonch shakli
simptom
antidot
Tasdiqlashsiz sinov
Kod ishlaydi, hech narsa tasdiqlanmagan
Har bir testda haqiqiy tasdiq; mutatsiya bilan sinov
o'z-o'zini tasdiqlovchi test
Kutilayotgan = kod chiqishi
Mustaqil ravishda kutilgan qiymatni hisoblang
Arzimas da'vo
"null emas", "200 qaytarildi"
Biznes qoidasini/haqiqiy natijani tasdiqlang
Yuqori darajadagi xato
90% chiziqlar, past himoya
Mutatsiya darajasiga qarang
Mo'rt sinovga chidamliligi
"Yana tiqildi, o'ting"
Ildiz sababi + deterministik test
AIdan "qizil jamoa" sifatida foydalanish
AI psevdo-ishonch hosil qilishi va uni ovlashda kuchli ittifoqchi bo'lishi mumkin. O'zingizning testlaringizga qarshi AIni qizil jamoa sifatida foydalaning: "ushbu testlardan o'tgan, ammo noto'g'ri kodni yozing" yoki "bu testlarni aldab qo'yadigan o'zgartirishni toping" deb so'rang. Agar AI sizning testlaringizdagi bo'shliqlarni topsa, bu bo'shliqlar haqiqiy xavf hisoblanadi.
Diqqat: AIdan "Mening sinovim sifati yaxshimi?" Deb so'ramang. va "ha, ajoyib" javobini ishonch sifatida qabul qiling. AI mehribon bo'lishga moyil. Buning o'rniga, sun'iy intellektni aniq vazifaga chaqiring: "ushbu sinovlardan o'tgan xatoni yarating." Agar u uni ishlab chiqara olsa, testlaringiz bu xatoga ko'r bo'ladi.
Ekvivalent mutatsiyalar va ballning chegaralari
Mutatsiyani tekshirish kuchli, ammo uning o'ziga xos xususiyati bor: ba'zi mutatsiyalar kodning harakatini umuman o'zgartirmaydi. Bular ekvivalent mutatsiyalar deb ataladi (ekvivalent mutant — buzilgan kod, asl nusxa bilan aynan bir xil natija beradigan mutatsiya). Masalan, hech qachon ishlatilmaydigan o'zgaruvchining boshlang'ich qiymatini o'zgartirish chiqishga ta'sir qilmaydi; Hech qanday sinov buni ushlay olmaydi va qilmasligi kerak. Shuning uchun, 100% mutatsiya ball ko'pincha amalda erishib bo'lmaydi va maqsad emas. Ekvivalent mutatsiyalarni qo'lda olib tashlash ko'p mehnat talab qiladi; Shuning uchun mutatsiya ballini mutlaq imtihon bahosi sifatida emas, balki "mening testlarim haqiqatan ham himoya qiladimi?"
Amaliy yondashuv quyidagicha: butun kod bazasida doimiy ravishda mutatsiya testini o'tkazish o'rniga, uni eng yuqori xavf va eng murakkab biznes qoidalarini o'z ichiga olgan modullarda boshqaring. Ushbu modullardagi omon qolgan mutatsiyalarni birma-bir ko'rib chiqing; Agar u haqiqiy bo'shliq bo'lsa, test qo'shing; agar u ekvivalent mutatsiya bo'lsa, uni asoslash bilan belgilang va o'ting. AI omon qolgan mutatsiyaning ekvivalentligini baholashda dastlabki skriningni amalga oshirishi mumkin; lekin yakuniy qaror kodni nima qilishini biladigan siz tomonidan qabul qilinadi.
Diqqat: Mutatsiyani tekshirish hisoblash qimmat (barcha tegishli testlar har bir mutatsiya uchun qaytadan o'tkaziladi). Shunday qilib, umumiy va oqilona strategiya uni har bir birlashma emas, balki muhim modullarni haftalik yoki chiqarishdan oldin chuqur tekshirish sifatida rejalashtirishdir.
Zaif taklif / Kuchli taklif
Zaif: "Mening testlarim etarlimi?"
Kuchli: "Ushbu funktsiya va test to'plami uchun qizil jamoa sifatida harakat qiling. (1) O'ldirish mumkin bo'lgan kodda 8 ta mutatsiyani yarating (operatorni almashtirish, chegarani siljitish, shartni inversiyalash, qiymatni qaytarish). (2) Har bir mutatsiya uchun mavjud testlardan qaysi biri uni ushlashini va qaysi biri YO'Qligini ko'rsating. (3) Omon qolgan har bir mutatsiya uchun, agar siz uni o'ldirishi mumkin bo'lgan yangi sinov misolini yozing. bu testlarning barchasi, lekin kod + testlarini buzadi: [qo'yish]".
Kuchli tezkor; U AIni maqtov mashinasi emas, balki sinovdan o'tuvchi imtihonchi sifatida joylashtiradi.
To'rt nusxa ko'chirish shablonlari
1) Mutatsiyani qo'lda boshqarish:
Ushbu kod uchun 8 ta muhim mutatsiyani (kichik qasddan buzilishlar) yarating: arifmetik operatorni almashtirish, taqqoslash chegarasi (> vs >=), mantiqiy inversiya, qaytish/doimiy almashtirish, shartni o'tkazib yuborish. Har bir mutatsiya uchun mavjud testlardan qaysi biri uni ushlaydi yoki yo'qligini taxmin qiling. Kod + testlar: [qo'yish]
2) Omon qolgan mutatsiyani o'ldirish:
Quyidagi mutatsiya testi hisobotida omon qolgan (ushlanmagan) mutatsiyalar mavjud: [roʻyxat/hisobot]. Ularning har biri uchun ushbu mutatsiyani o'ldiradigan minimal test yozing (bu tarzda buzilganda kod qizil rangga aylanadi). Sinov qanday xatti-harakatni tasdiqlaganini izohlang.
3) Qizil jamoa - qon testi:
Quyidagi testlardan O'TGAN, lekin quyidagi biznes qoidasini buzadigan kod yoza olasizmi: [biznes qoidasi]. Agar shunday bo'lsa, ushbu testlardagi qanday bo'shliq bunga imkon beradi? Ushbu bo'shliqni yopadigan testni qo'shing. Sinovlar: [qo'yish]
4) Sinov sifatini tekshirish:
Sifat uchun ushbu test to'plamini tekshiring. Har bir test uchun belgi qo'ying:- Haqiqiy tasdiq bormi yoki bu rekvizitmi?- Kutilgan qiymat mustaqilmi, koddan olinganmi?- U biznes qoidasini yoki ahamiyatsiz narsani tasdiqlaydimi? Nihoyat, taxminiy "haqiqiy tasdiqlash balli" va 3 ta eng zaif testni bering. Sinovlar: [qo'yish]
uchta mini holat
1-holat - Qoplash 92%, mutatsiya ko'rsatkichi 38%. Bir jamoa yuqori qamrovga tayandi. Mutatsion test Stryker bilan o'tkazilganda, ball 38% ni tashkil etdi: hosil bo'lgan mutatsiyalarning aksariyati omon qoldi. Bu testlar ketma-ket ishlamayotganligi va xatti-harakatni tekshirmasligining isboti edi. Jamoa sinov sifatiga uch hafta sarmoya kiritdi; Mutatsiya ko'rsatkichi 81% gacha ko'tarildi va keyingi versiyada ushbu kuchaytirilgan testlar orqali ikkita haqiqiy hisoblash xatosi aniqlandi.
2-holat - AI testni aldab qo'ydi. "Qizil jamoa" shabloniga ega bo'lgan mutaxassis sun'iy intellektdan mavjud testlardan o'tgan, lekin chegirma qoidasini buzgan kodni so'radi. AI har doim nolga teng chegirmani qaytaradigan kod yozdi - va barcha testlar yashil bo'lib qoldi, chunki hech qanday test chegirmaning haqiqiy qiymatini tasdiqlamadi. Bo'shliq ko'rindi, haqiqiy tasdiqlar qo'shildi.
3-holat - maqtov tuzog'i. Kichik tester AIdan: "Mening testlarim yaxshimi?" “Juda keng qamrovli” degan javobni eshitib, yengil tortdi. Uning katta hamkasbi "sifat sinovi" shablonidan foydalangan holda xuddi shu testlarni tekshirgan; Ma'lum bo'lishicha, 20 ta testdan 12 tasi dekor (assert yoki keraksiz) bo'lgan. To'g'ri savol to'g'ri javob berdi.
Umumiy xatolar
- Sifatni xato qilish. Yuqori qatorli qamrovga tayanib, mutatsiyalar reytingiga umuman qaramaslik.
- AIning maqtoviga ishonish. "Testlaringiz yaxshimi?" va ijobiy javobni kafolat sifatida qabul qilish.
- Koddan kutilgan qiymatni olish. Noto'g'ri kodni tasdiqlovchi o'z-o'zini tekshirish testlari.
- Arzimas gaplar bilan qanoatlaning. Haqiqiy qoidani tasdiqlamaydigan tekshiruvlar, masalan, "null emas", "200 qaytarildi".
- Omon qolgan mutatsiyalarga e'tibor bermaslik. Mutatsiya hisobotida ushlanmagan narsaga e'tibor bermaslik.
- Hatto tanqidiy kodni qo'lda o'zgartirishga urinmang. Agar asbob mavjud bo'lmasa, "kodni sindirish va sinab ko'rish" bosqichini o'tkazib yuborish.
qisqa bayoni; yakunida
Pseudo-trust - bu dasturiy ta'minotning to'g'riligiga ishonish, chunki testlar yashil; holbuki testlar hech narsani tasdiqlamasligi mumkin. Buni o'lchashning oltin standarti mutatsiya testidir: kodni ataylab buzish va testlar uni ushlab turishini o'lchash. Mutatsiya ko'rsatkichi foizli qamrovga qaraganda ancha halolroq sifat ko'rsatkichidir. AI ikkalasi ham psevdo-ishonch hosil qiladi va uni ovlashda kuchli qizil jamoaga aylanadi - "ushbu sinovlardan o'tgan xatoni ishlab chiqaring" deb so'rang. Sinovlaringizni sinab ko'ring: haqiqiy tasdiqlash, mustaqil kutilgan qiymat, biznes qoidalarini tekshirish va o'ldirilgan mutatsiyalar.
Ilova vazifasi
Oʻz loyihangizdan biznes qoidasi va uning testlarini oʻz ichiga olgan funksiyani import qiling. Iloji bo'lsa, mutatsiya vositasini (Stryker/Pitest/mutmut) ishga tushiring va mutatsiya ballini o'lchang; Hech qanday vosita bo'lmasa, "qo'lda mutatsiyani boshqarish" shabloniga ega kamida 8 ta mutatsiyani yarating va ularni qo'lda sinab ko'ring. Har bir tirik qolgan mutatsiya uchun "omon qolgan mutatsiyani o'ldirish" shabloniga ega yangi test yozing. Nihoyat, "qizil jamoa" namunasi bilan AI testlaringizni aldab qo'yadigan kod ishlab chiqarishi mumkinligini tekshiring. Mutatsiyaning boshlang'ich va yakuniy ko'rsatkichi (yoki tutilgan/umumiy mutatsiya tezligi) haqida xabar bering.
nazorat ro'yxati
- [ ] Men sinov sifatini qamrab olish emas, balki mutatsiya balli bilan baholadim.
- [ ] Men muhim kod uchun mutatsiya testini (asbob orqali yoki qo'lda) o'tkazdim.
- [ ] Men har bir omon qolgan mutatsiya uchun yangi testlar yozdim.
- [ ] Men qizil jamoa sifatida sun'iy intellektdan foydalandim va testlarimda bo'shliqlarni qidirdim.
- [ ] AIning "sinovlaringiz yaxshi" degan maqtovini ishonch sifatida qabul qilmadim.
- [ ] Men har bir test haqiqiy tasdiq, mustaqil kutilgan qiymat va biznes qoidasini tekshirishini tekshirdim.