Daromadlar:
- Qabul qilish qoidasidan mustaqil ravishda birlik testlarida kutilgan qiymatni hisoblash orqali sun'iy intellektning noto'g'ri xatti-harakatlarni "to'g'ri" deb qabul qilishiga yo'l qo'ymaslik qobiliyati
- AAA va FIRST tamoyillarini qo'llash va tashqi bog'liqliklarni masxara qilish orqali tez, mustaqil va takrorlanadigan testlarni chop etish qobiliyati
- Mutatsiya (kodni buzish) bilan testlarni sinab ko'rish va sinovdan o'tkazish qiyin bo'lgan kodni dizayn hidi sifatida tan olish qobiliyati
Sinov piramidasining eng katta va eng tezkor qatlami birlik testidir - bu funksiyani yoki kodning kichik qismini hamma narsadan ajratilgan holda tekshiradigan test. Minglab birlik sinovlari bir necha soniya ichida ishlaydi va kod hali ishlab chiquvchi ekranida bo'lganda xatoni aniqlaydi. Sun'iy intellekt (AI) birlik testlarini ishlab chiqarishda eng malakali bo'lishi mumkin: siz unga funktsiyani berasiz, AI o'nlab testlarni ishlab chiqaradi. Ammo bu qulaylik eng katta tuzoqqa sabab bo'ladi: AI osonlikcha "yashil rangda yonayotgan, lekin hech narsani tasdiqlamaydigan" testlarni ishlab chiqaradi yoki kodning joriy (ehtimol noto'g'ri) harakatini "to'g'ri" deb qabul qiladi. Ushbu bo'limda siz AI bilan haqiqiy himoya birligi testlarini qanday yozishni va sinovdan o'tkaziladigan kod va AI o'rtasidagi munosabatni o'rganasiz.
Yaxshi birlik testining fazilatlari: BIRINCHI
Yaxshi birlik testlari BIRINCHI tamoyillarga amal qiladi: Tez, Mustaqil (testlar bir-biriga bog'liq bo'lmasligi kerak), Takrorlanadigan (takrorlanishi mumkin - har qanday muhitda bir xil natija), O'z-o'zini tekshirish (aniq o'tish / muvaffaqiyatsiz), O'z vaqtida (o'z vaqtida). AI testlarni ishlab chiqarishda ushbu tamoyillarni eslatib turing; testning tashqi dunyoga (haqiqiy ma'lumotlar bazasi, tarmoq, soat) bog'liq bo'lmasligini, xususan, "mustaqil" va "takrorlanadigan" bo'lishini so'rang.
AAA namunasi va ifodali tasdiq
Qattiq birlik testi AAA tuzilmasidan so'ng amalga oshiriladi: Tartibga solish (tayyorlash - kirishlar va bog'liqliklarni o'rnatish), Amal qilish (bajarish - tekshirilayotgan funktsiyani chaqirish), Tasdiqlash (tasdiqlash - natijani kutilgan qiymat bilan solishtirish). Eng muhimi - bu tasdiq. Sun'iy intellektning eng keng tarqalgan xatosi sinovdan o'tayotgan kodning chiqishidan tasdiqni olishdir - "kod nima qaytarsa, haqiqatdir" mantig'i. Bu testni ma'nosiz qiladi. To'g'ri yo'l - kutilgan qiymatni mustaqil ravishda aniqlash (qabul qilish mezonlaridan, uni qo'lda hisoblash).
Diqqat: Agar siz AIga "ushbu funktsiya uchun test yozing" desangiz, AI funksiyani ishga tushirishi va uning chiqishini "kutilgan" deb yozishi mumkin. Funktsiya noto'g'ri bo'lsa ham, bu sinovdan o'tadi. Buning o'rniga, "siz kutilgan natijalarni ushbu qoidalarga muvofiq hisoblaysiz, funktsiyaning joriy chiqishiga havola qilmang" deb ayting.
Masxaralar, stublar va qaramliklar
Birlik sinovi izolyatsiyani talab qiladi. Agar funktsiyangiz ma'lumotlar bazasi yoki API-ga bog'liq bo'lsa, ular sinovda soxta ob'ektlar bilan almashtiriladi (mock/stub - boshqariladigan, haqiqiy bog'liqlik o'rnini bosuvchi). Bu testni tez, mustaqil va takrorlanuvchan qiladi. AI soxta o'rnatishni ishlab chiqishi mumkin; Ammo haddan tashqari masxara qilishdan ehtiyot bo'ling: agar siz hamma narsani masxara qilsangiz, test haqiqiy mantiqni emas, balki faqat "masxara nima qaytarishini" tekshiradi. Balans: tashqi dunyoga taqlid qiling, sinov ostidagi haqiqiy mantiqni bajaring.
Sinov qobiliyati va AI
Qiziqarli fikr bor: sinab ko'rish qiyin bo'lgan kod ko'pincha yomon ishlab chiqilgan koddir. Agar AI funksiyaga test yozishda muammoga duch kelsa (juda ko'p bog'liqliklar, yashirin global holat, nojo'ya ta'sirlar), bu dizayn hididir. AIdan "uni sinovdan o'tkazish uchun ushbu kodni qanday qayta tahrirlaysiz" deb so'rash yaxshi sinov va yaxshi kodga olib keladi.
Parametrlashtirilgan testlar va ma'lumotlar xilma-xilligi
Har safar bir xil qoidani turli ma'lumotlar bilan tekshirish uchun alohida test yozish zerikarli va uni saqlab qolish qiyin. Parametrlashtirilgan test - kirishlar ro'yxati va kutilgan natijalar bo'yicha bir xil test mantig'ini qayta-qayta ishlatadigan tuzilma - bu takrorlanishni bartaraf qiladi: bitta sinov tanasi o'nlab kirish juftlari bilan oziqlanadi. Qabul qilish qoidalarini berganingizda, AI ushbu kiritishdan kutilgan natijalar jadvallarini yaratishda juda samarali; Xususan, u limit qiymatlari va ekvivalentlik sinflarini muntazam ravishda jadvalga kiritadi.
Ammo bu erda ham tuzoq bor: AI sinov ostidagi koddan yaratilgan jadvalda kutilgan natijalarni olishga intiladi. Parametrlashtirilgan testlarda bu xato yanada xavflidir, chunki bitta noto'g'ri mantiq o'nlab qatorlarni bekor qiladi. Shuning uchun, har doim kutilgan natija ustunini qabul qilish qoidasiga muvofiq mustaqil ravishda hisoblab chiqing va kamida bir nechta qatorlarni qo'lda tasdiqlang. Shuningdek, "har bir satr nimani anglatadi" tavsif ustunini so'rang; Shunday qilib, bir qator buzilganda, qaysi holat buzilganligini darhol ko'rasiz.
Maslahat: Parametrlangan test jadvaliga ataylab "tuzoq qatori" qo'shing - ya'ni natijani bila turib noto'g'ri yozing. Agar testni o'tkazganingizda bu chiziq qizil rangga aylanmasa, sizning testingiz aslida bu vaziyatni tasdiqlamaydi. Bu tez soxta tekshiruv.
Zaif taklif / Kuchli taklif
Zaif: "Ushbu funksiya uchun birlik testini yozing."
Kuchli: "taxCalculate(summa, stavka) funksiyasi uchun [til/ramka] birlik testlarini yozing. Qabul qilish qoidasi: natija = summa * stavka, 2 kasrga yaxlitlanadi; salbiy miqdor yoki stavka xatoga yo'l qo'yadi; agar stavka 0 bo'lsa, 0 qaytaradi. AAA tuzilmasidan foydalaning. BU qoidalarga muvofiq kutilgan qiymatlarni qo'lda hisoblang. BU qoidalarga ko'ra kutilgan qiymatlarni qo'lda hisoblang, joriy Cover0, manfiy holatlarga murojaat qilmang, bound0. O'nli kasrgacha bo'lgan davr).
Kuchli tezkor; U qabul qilish qoidasini, mustaqil kutilgan qiymatni kutishni, tuzilmani va chekka holatlarni beradi. Shunday qilib, test kodning oynasi emas, balki qoidaning qo'riqchisi bo'ladi.
Birlik sinovi sifati jadvali
simptom
Yomon sinov (soxta ishonch)
yaxshi sinov
da'vo qilish
Yo'q yoki "null emas"
Kutilayotgan aniq qiymat
Kutilayotgan qiymat manbai
Funktsiyaning chiqishi
Qabul qilish qoidasi / qo'lda hisoblash
giyohvandlik
Haqiqiy JB/tarmoq/soat
Soxta/stub bilan izolyatsiyalangan
chekka korpus
Faqat baxtli yo'l
chegara, salbiy, xato
Kodni buzganingizda
yashil qoladi
qizil rangga aylanadi
Ism
test1, test usuli
tasdiqlaydigan qoidani tavsiflaydi
To'rt nusxa ko'chirish shablonlari
1) Qoidalarga asoslangan birlik sinovi:
Sizning rolingiz: dasturiy ta'minotni sinovdan o'tkazish bo'yicha katta muhandis. Quyidagi funksiya bo'yicha birlik testini [til/ramka] bilan yozing: [imzo]. Qabul qilish qoidalari: [qoidalar].- AAA tuzilmasidan foydalaning.- BU qoidalarga muvofiq kutilgan qiymatlarni qo'lda hisoblang; Funktsiyaning joriy chiqishiga murojaat qilmang. - Alohida testlar bilan chegara, salbiy, xato va baxtli yo'lni yoping. - Har bir test nomi tekshiradigan qoidani tasvirlab bersin. - tashqi bog'liqliklarni soxtalashtirish; Haqiqiy mantiqni ishlang.
2) Mutatsiyaga qarshilikni boshqarish:
Ushbu birlik sinovlarini ko'rib chiqing. Sinov ostidagi kodga kiritishim mumkin bo'lgan 5 ta kichik tuzatishlarni sanab bering (+ o'rniga a -, > o'rniga a >=, chegara siljishi) va har bir test uchun QAYSISI qizil rangga aylanishini ayting? Hech biri qaytarilmasa, test etarli emas. Kod + testlar: [qo'yish]
3) Sinov qobiliyatini tekshirish:
Nima uchun bu funksiya uchun birlik testini yozish qiyin? Yashirin qaramlik, global holat, yon ta'sirlar, ko'p mas'uliyat bormi? Uni sinab ko'rish uchun minimal qayta ishlashni taklif qiling; xatti-harakatini o'zgartirmang. Kod: [qo'yish]
4) stsenariyning tugallanmaganligi:
Quyidagi funksiya va mavjud testlar berilgan. Qaysi xatti-harakat/chekka HECH QACHON sinovdan o‘tmaganligini ro‘yxatlang (ko‘lamdagi bo‘shliq) va har biri uchun test qo‘shing. Funktsiya + testlar: [qo'yish]
uchta mini holat
1-holat - Kodni aks ettirishni sinab ko'ring. Ishlab chiquvchi AI yaxlitlash funktsiyasi uchun test yozishni buyurdi; 10 ta test yashil rangga ega edi. Aslida, funktsiya noto'g'ri yo'nalishda yaxlitlashdi, ammo AI funktsiyaning chiqishidan kutilgan qiymatlarni oldi, shuning uchun testlar xatoni "to'g'ri" deb hisobladi. Kutilgan qiymatlar "qoidaga asoslangan" shablon bilan qo'lda hisoblanganda, 4 ta test qizil rangga aylandi va haqiqiy xato aniqlandi.
2-holat - Mutatsiyani boshqarish qiymati. Bitta jamoa 45 birlik testlariga tayandi. "Mutatsiyaning mustahkamligini tekshirish" yordamida kodga 20 ta kichik o'zgartirishlar kiritildi; testlar ulardan atigi 11 tasini ushladi. Qolgan 9 ta buzilish jimgina o'tdi. Jamoa zaif testlarni kuchaytirdi; Haqiqiy hisoblash xatosi keyingi versiyada ushbu kengaytirilgan testlar tomonidan aniqlandi.
3-holati - Tekshirilmaslik - bu dizayn hidi. AI buyurtma funktsiyasi uchun testlarni yoza olmadi, unga doimiy ravishda haqiqiy ma'lumotlar bazasi kerak edi. "Sinov qobiliyatini ko'rib chiqish" shablonini ko'rsatdiki, funktsiya ma'lumotlar bazasiga kirishni o'z ichiga oladi. Bog'liqlik in'ektsiyasi olib tashlanganida, testlar yozilishi mumkin edi va kod toza bo'ldi.
Umumiy xatolar
- Koddan kutilgan qiymatni olish. AI funksiya chiqishini "to'g'ri" deb qabul qiladi; noto'g'ri kodni tasdiqlovchi test.
- Tasdiqlashsiz yoki arzimas tasdiq bilan test qiling. "U xato qilmadi, o'tdi" mantig'i; Bu hech narsani tasdiqlamaydi.
- Ekstremal masxara. Hamma narsani masxara qilish va faqat masxara qaytaradigan narsani sinab ko'rish; haqiqiy mantiq sinovdan o'tkazilmaydi.
- Faqat baxtli yo'l. Cheklov, salbiy va xato holatlarini chetlab o'tish.
- Kodni buzish orqali sinovdan o'tkazilmaydi. Mutatsiyani tekshirmasdan yashil rangga ishonish.
- Tekshirish mumkin bo'lmagan holatlarga e'tibor bermaslik. Qattiq sinovdan o'tish o'rniga yomon dizaynni tan olmaslik va tuzatish.
Xulosa
Birlik testlari sinov piramidasining eng tezkor va eng katta qatlamidir; U xatoni eng arzon daqiqada ushlaydi. AI birlik testlarini ishlab chiqarishga qodir, ammo uning eng katta xatosi kodning o'zidan kutilgan qiymatni olish orqali noto'g'ri xatti-harakatlarni "to'g'ri" deb hisoblaydigan testlarni yozishdir. Yechim: qabul qilish qoidalarini bering, kutilgan qiymatlarni qo'lda hisoblang, AAA va BIRINCHI tamoyillarini qo'llang, tashqi dunyoni masxara qiling va haqiqiy mantiqni bajaring va har bir testni mutatsiya bilan sinab ko'ring (kodni buzish). Sinov qilish qiyin bo'lgan kod tuzatilishi kerak bo'lgan dizayn belgisidir.
Ilova vazifasi
O'z loyihangizdan biznes qoidasini o'z ichiga olgan funksiyani tanlang. Qabul qilish qoidalarini yozing va AI testlarini "qoidalarga asoslangan test sinovi" shabloniga ega bo'ling; Kutilgan qiymatlarni qo'lda hisoblang. Keyin "mutatsiyaning mustahkamligini tekshirish" ni qo'llang: kodda kamida 5 ta kichik tanaffus qiling va qancha test qizil rangga aylanishini o'lchang. Tugallanmagan korruptsiya uchun yangi test qo'shing. Qancha buzilishlar aniqlanganligi haqida xabar bering (masalan, mutatsiyalar reytingi).
nazorat ro'yxati
- [ ] Men qabul qilish qoidalarini berdim va kutilgan qiymatlarni qo'lda hisoblab chiqdim.
- [ ] Testlar koddan kutilgan qiymatni olmaganligiga ishonch hosil qildim.
- [ ] Men AAA va FIRST ko'rsatmalariga muvofiq mustaqil test o'tkazdim.
- [ ] Men tashqi bog'liqliklarni masxara qildim va haqiqiy mantiqni ishlatdim.
- [ ] Men chegara, salbiy va xato holatlarini koʻrib chiqdim.
- [ ] Kodni (mutatsiya) buzish orqali men testlar haqiqatan ham himoya qilishini isbotladim.