Birlik 5 / 12

Sinov ishlab chiqarish va sifatni ta'minlash

Daromadlar:

  • AI bilan birlik sinovlari, chekka holatlar va qamrov bo'shliqlari tahlilini ishlab chiqarish qobiliyati
  • Kodning joriy xatti-harakati emas, balki spetsifikatsiya asosida test taxminlarini chop etish imkoniyati
  • Sinov haqiqatan ham xatolarni kiritish orqali himoya qiladimi yoki yo'qligini tekshirish qobiliyati

Testlarni yozish ko'pchilik ishlab chiquvchilar kechiktiradigan eng qimmatli vazifalardan biridir. Yaxshi test to'plami kod kutilganidek ishlayotganining isboti va kelajakdagi o'zgarishlar uchun hayot chizig'idir. Muammo shundaki, testlarni yozish takroriy va ko'p vaqt talab etadi - aynan AI porlayotgan ish turi. Ammo bir narsa bor: sun'iy intellekt ko'pincha kodning mavjud xatti-harakatlarini sinab ko'radi, balki u bo'lishi kerak bo'lgan xatti-harakatni emas. Ushbu farqni boshqarish ushbu birlikning mohiyatidir.

Ushbu bo'limda siz birlik testini (funksiyani alohida, yakka holda sinab ko'radigan test), chekka holatlar testlarini va AI yordamida test ma'lumotlarini yaratishni o'rganasiz; testlarni qamrab olishdagi bo'shliqlarni yopish; va nega AI testlariga ko'r-ko'rona ishonish xavfli.

Sinovning ikki tomoni: Xulq-atvorni tuzatish va tekshirish

Sinov ikki xil maqsadga xizmat qilishi mumkin. Birinchisi, tekshirish: kodning to'g'riligini, spetsifikatsiyaga muvofiqligini tekshiradi. Ikkinchisi - regressiyadan himoyalanish: bugungi kunda kodning harakatini muzlatib qo'yadi, shuning uchun ertaga kimdir tasodifan uni o'zgartirsa, test buziladi va xabar beradi.

AI ikkinchisida juda yaxshi; U kodni ko'rib chiqadi va "hozir nima qilayotganini" tekshiradigan holatlar yaratadi. Ammo agar kod boshidan noto'g'ri bo'lsa, AI bu noto'g'ri xatti-harakatni "to'g'ri" deb belgilashi mumkin. Shunday qilib, siz AI tomonidan ishlab chiqarilgan har bir testning tasdiqini ko'rib chiqishingiz kerak: "Kod 42 ni qaytaradi va test 42 ni kutadi" bu 42 to'g'ri javob degani emas.

Diqqat: Agar AI testdan o'tgan bo'lsa, bu kod "ishlayotganini" anglatmaydi; Bu shunchaki "u AI kutganidek harakat qiladi" degan ma'noni anglatadi. Siz spetsifikatsiyaga qarab, kutish to'g'ri yoki yo'qligini hal qilasiz.

Bosqichma-bosqich: AI bilan mustahkam testlarni yozish

  1. Faqat kodni emas, balki spetsifikatsiyani bering. Agar siz "Ushbu funktsiya buni qilishi kerak" ma'lumotlarini qo'shsangiz, AI to'g'ri kutishni yozishi mumkin; Agar kodni taqdim qilsangiz, u joriy xatti-harakatni sinab ko'radi.
  2. Kengaytirilgan holatlarni so'rang. Bo'sh, null, nol, salbiy, juda katta, yomon format, parallellik - baxtli yo'ldan aniq da'vo qiling.
  3. Sinov tizimi va uslubini belgilang. "pytestdan foydalaning", "Tartibga solish-harakat-tasdiqlash", "har bir test bitta narsani sinab ko'rishga ruxsat bering" va boshqalar.
  4. Kutishlarni tekshiring (tasdiqlash). Har bir tasdiq to'g'ri qiymatni tekshiradigan spetsifikatsiya bilan solishtiring.
  5. Ko'lamdagi bo'shliqlarni yoping. Mavjud testlarni bering va "qaysi filiallar va holatlar sinovdan o'tmagan?" sizni so'rashga majbur qiling; keyin ishlab chiqarilgan qo'shimcha testlarni tekshiring.

Uchta mini korpus

1-holat - 52% dan 85% gacha qamrov. Bitta xizmat modulining test qamrovi 52% ni tashkil etdi. Jamoa mavjud testlarni sun'iy intellektga topshirdi, sinovdan o'tmagan filiallarni ro'yxatga oldi va ular uchun testlar yaratdi. Insoniy tekshiruv bilan qamrov 85% gacha ko'tarildi; Bu jarayonda AI hech qachon sinovdan o'tmagan xato bo'limidagi haqiqiy xatoni (noto'g'ri xato kodini qaytargan yo'l) aniqladi.

2-holat - noto'g'ri kutish tuzog'i. Pulni yaxlitlash funktsiyasi aslida noto'g'ri edi; 2.675 ni 2.67 ga yaxlitlash oʻrniga 2.68 oʻrniga 2.67 yaxlitlash edi. AI kodni ko'rib chiqdi va assert round_money(2.675) == 2.67 deb yozdi - xatoni "haqiqiy" deb muzlatib qo'ydi. Ishlab chiquvchi spetsifikatsiyani o'qib chiqqach, u taxminni tuzatdi va haqiqiy xatoni aniqladi. Kodni emas, qoidani sinab ko'rish farq qildi.

3-holat - Edge holati portlashi. Sana diapazoni funksiyasi uchun AIdan faqat "chekka holatlar"ni so'raganda; U 8 ta holat yaratdi, masalan, start=end, teskari interval, kabisa yili, 29 fevral, turli vaqt zonalari va null interval. Ulardan ikkitasi (teskari interval va kabisa yili) aslida xatoga sabab bo'lgan. Ushbu holatlarni qo'lda ko'rib chiqish ko'pincha o'tkazib yuboriladi; AI bu erda "aqliy hujum" sherigiga aylandi.

To'rt nusxa ko'chirish shablonlari

Spetsifikatsiyaga asoslangan test ishlab chiqarish:

Rol: Testlarni yozuvchi dasturchi. Framework: {{pytest/JUnit/Jest...}}.FUNKSIYA QILISHI KERAK (spetsifikatsiyasi): {{qoida}}Quyidagi funksiya uchun testlarni yozing. Kodning joriy chiqishi EMAS, spetsifikatsiyaga muvofiq taxminlarni yozing. Baxtli yo'l + kamida 4 ta chekka holatlar qo'shing. Har bir test bitta narsani sinab ko'ring, tavsiflovchi nomdan foydalaning. {{funksiya}}

Edge case aqliy hujum:

Bu funksiyani sinab koʻrish kerak boʻlgan cheklov/muvaffaqiyatsizlik holatlarini roʻyxatlang (null, null, uzilish nuqtalari, notoʻgʻri format, parallellik, tashqi xato). Har bir holat uchun: kiritish, kutilgan xatti-harakatlar. Hali kod yozmang, faqat roʻyxat qiling.{{function}}

Qoplash bo'shlig'ini tahlil qilish:

Quyida funksiyalar va mavjud testlar keltirilgan. Qaysi filiallar, shartlar va holatlar sinovdan o'tkazilmagan? Kamchiliklarni sanab o'ting va faqat kamchiliklar uchun yangi testlarni yozing. Mavjudlarini takrorlamang. Funktsiya:{{function}}Testlar:{{existing_tests}}

Sinov ma'lumotlari / soxta ob'ekt yaratish:

{{funksiya/xizmat}} testlari uchun haqiqiy test maʼlumotlarini yarating: yaroqli namunalar, chegara namunalari va yaroqsiz namunalar alohida. Tashqi qaramlik {{X}} uchun oddiy soxta xatti-harakatni taklif qiling. Haqiqiy maxfiy ma'lumotlardan/PIIdan foydalanish; Soxta ma'lumotlarni yarating.

Zaif taklif / Kuchli taklif

Zaif: "Ushbu funksiya uchun test yozing."
Kuchli: "pytest bilan. apply_discount(jami, foiz) funksiyasi — qoida: chegirma 0%–30% boʻlishi kerak, chegaradan tashqari ValueError chiqishi kerak, natija 2 kasrga yaxlitlanishi kerak. Bu QOIDA boʻyicha kutilganlarni yozing (kod boʻyicha emas). Baxtli yoʻl + bu chekka holatlar: 0%, 30% (toʻliq), [30%, manfiy (toʻliq) , 3”

U kuchli ozod qilish qoidasini beradi va "kodga emas, balki qoidaga ko'ra kutishni yozing" deydi; Ushbu bitta jumla AIning noto'g'ri xatti-harakatlarini tuzatish tuzog'ini yopadi.

Sinov turi

AI hissasi

inson nazorati

Baxtli yo'l birligi sinovi

tez skelet

Kutish to'g'rimi?

Kengaytirilgan holatlar

Keng qamrovli aqliy hujum

Ahamiyatsiz narsani yo'q qiling

Bo'shliqni to'ldirish

O'tkazib yuborilgan shoxlarni topadi

Muhimligini tasdiqlang

Sinov ma'lumotlari / soxta

Haqiqiy namunani ishlab chiqaradi

PII yo'q, realizm nazorati

Sinovlar sifatni boshqaradi, kafolat bermaydi

Yuqori sinov qamrovi ishonch beradi, lekin u ham noto'g'ri bo'lishi mumkin: 100 foiz qamrov "har bir satr to'g'ri" emas, balki "har bir qator ishga tushirildi" degan ma'noni anglatadi. AI bilan qamrovni oshirish oson; Haqiqiy qiymat mazmunli umidlarni yozishda. Sinovning ahamiyati uning buzilishi va kod buzilganda sizni ogohlantirish qobiliyatidir. Shuning uchun sun'iy intellekt tomonidan yaratilgan testlar "kod o'zgarganda haqiqatan ham buziladimi?" degan savolga asoslanadi. Buni savol bilan sinab ko'ring; Qasddan chiziqni buzish va test tanaffusini ko'rish (mutatsion g'oya) test ishlaganligining isbotidir.

Maslahat: AI yozadigan test ishlayotganligini bilish uchun kodda kichik xatolik yarating (masalan, + ni - ga o'zgartiring) va sinov buzilganligini tekshiring. Agar u buzilmasa, bu sinov sizni himoya qilmaydi.

Umumiy xatolar

  • Qoidani bermasdan test so'rash. Model joriy xatti-harakatni muzlatib qo'yadi; xatoni "to'g'ri" deb tuzatadi.
  • Umidlarni o'qimay turib qabul qilish. Tasdiqlar to'g'ri qiymatni tekshirayotganligini tekshirmasangiz, test noto'g'ri.
  • Faqat baxtli yo'lni sinab ko'ring. Haqiqiy xatolar chegaralarda yashaydi; Kengaytirilgan holatlarni aniq so'rang.
  • Maqsad uchun qamrovni xato qilish. Yuqori foiz to'g'ri xatti-harakatning kafolati emas.
  • Haqiqiy/yashirin ma'lumotlarni test ma'lumotlari sifatida yaratish. Mijoz ma'lumotlari yoki sirlari sinov va saqlashga kirmasligi kerak; Sintetik ma'lumotlarni yaratish.

Xulosa

AI takroriy yukning ko'p qismini yozish testlaridan oladi: u tezkor skeletlarni, chekka holatlarning katta ro'yxatini va qamrov bo'shlig'ini tahlillarini ishlab chiqaradi. Ammo eng muhim nuqta - bu taxminlar: AI kodning joriy harakatini sinab ko'rishga intiladi, test esa spetsifikatsiyaga muvofiq yozilishi kerak. Qoidalarni bering, taxminlarni tekshiring, cheklov holatlarini bajaring va testlar xatoni kiritish orqali haqiqatan ham himoya qiladimi yoki yo'qligini tekshiring. Test qamrovi maqsad emas, balki vositadir.

Ilova vazifasi

Funktsiyani tanlang va avval uning kodini berish orqali AIga testni chop eting; Kutishlarga e'tibor bering. Keyin xuddi shu funksiya uchun spetsifikatsiyani (kerakli xatti-harakatni) berib, testni yana chop eting. Ikki test to'plamining taxminlarini solishtiring: farq bormi, qaysi biri haqiqiy xatoni aniqlaydi? Va nihoyat, kodga qasddan xato qo'shish va sinov tanaffusini ko'rish orqali yaratilgan testlardan biri ishlaganligini tekshiring.

nazorat ro'yxati

  • [ ] Men test xatti-harakatlarni tuzatish yoki tekshirish uchun ekanligini ajrataman.
  • [ ] Men test talab qilganda, kodni emas, balki joyida bo'lishi kerak bo'lgan qoidani (spetsifikatsiyani) beraman.
  • [ ] Men har bir yaratilgan tasdiqni spetsifikatsiya bilan solishtiraman.
  • [ ] Men chek va nosozlik holatlarini aniq so'rayman.
  • [ ] Men foiz qamrovini maqsad emas, balki vosita sifatida ko'raman.
  • [ ] Men sinov haqiqatan ham xatolarni kiritish orqali himoya qiladimi yoki yo'qligini tekshiraman.