Birlik 6 / 11

Sun'iy intellekt bilan test yaratish: birlik, interfeys va avtomatlashtirish testlari

Daromadlar:

  • Sinov piramidasiga muvofiq sun'iy intellekt bilan birlik, integratsiya va UI testlarini ishlab chiqarish va chegara va xatolik holatlarini, shuningdek baxtli stsenariylarni qoplash qobiliyati
  • Yaratilgan har bir test aslida xatti-harakatni tasdiqlashini tekshirish orqali bo'sh/foydasiz testlarni va shishgan qamrovni yo'q qilish qobiliyati
  • Sinov xatoni aniqlashini ta'minlash va AIga kod nima qilish kerakligini aytib, xatoni tuzatishga yo'l qo'ymaydi

Kod yozish - bu ishning yarmi; Kodning to'g'ri ishlashini isbotlash ikkinchi yarmidir. Mobil ilovalar yuzlab turli xil qurilmalar, ekran o'lchamlari, operatsion tizim versiyalari va foydalanuvchi xatti-harakatlariga duch keladi. Bularning barchasini qo'lda sinab ko'rish mumkin emas; Shuning uchun avtomatlashtirilgan testlar (kodni tekshirish kodi — odam bosmasdan ishlaydigan test) mobil telefon sifatining asosidir. AI testlarni yozishda juda samarali, chunki testlarni yozish aynan o'ziga yoqadigan ish turi: ma'lum kirishlar uchun muayyan xatti-harakatni tasdiqlash. Ushbu bo'limda biz birlik sinovini, interfeys sinovini va AI bilan avtomatlashtirishni qanday tezlashtirishni o'rganamiz, ammo test sifatini inson ko'zlari bilan ta'minlash.

Sinov piramidasi: nimani sinab ko'rish kerak va qancha

Sog'lom sinov strategiyasi piramidaga o'xshaydi. Baza ko'p sonli birlik testlarini o'z ichiga oladi (bitta funktsiyani yoki sinfni alohida sinovdan o'tkazadigan tezkor test); ular tez va arzon. O'rtada kamroq integratsiya testi (bir nechta qismlar qanday ishlashini sinab ko'rish). Yuqori qismida minimal UI/end-to-end testi mavjud (test foydalanuvchi kabi ekranni bosish orqali amalga oshiriladi); ular realistik, lekin sekin va mo'rt. AI har bir qatlamda yordam beradi, lekin eng katta qiymat asosda: biznes mantig'ining birlik testlarini tezda ishlab chiqarish.

Sinov turi

Qo'llash doirasi

tezlik

AI samaradorligi

birlik sinovi

Yagona funktsiya/sinf

juda tez

juda yuqori

integratsiya

oraliq qatlam

o'rta

yuqori

UI / oxirigacha

Barcha ekran oqimi

sekin

O'rtacha (mo'rt)

Maslahat: AIga "ushbu funktsiya uchun testlarni yaratish"ni aytayotganda, aniq cheklov holatlarini so'rang: bo'sh kirish, null, salbiy raqam, juda katta qiymat, tarmoq xatosi. AI osonlikcha baxtli yo'lni ishlab chiqaradi; Haqiqiy xatolar chegaralarda yashirinadi va agar xohlamasangiz, ular tashqariga otilib chiqadi.

AI bilan testlarni yozish bosqichlari

  1. Sinov qilinadigan xatti-harakatni aniqlang. "Ushbu funktsiya bu chiqishni ushbu kirishga berishi kerak."
  2. Ramkani belgilang. Android uchun JUnit + MockK, iOS uchun XCTest, UI uchun Espresso (Android) yoki XCUITest (iOS).
  3. Cheklangan holatlarni so'rang. Baxtli stsenariy + xato + to'xtash nuqtalari.
  4. Soxta ob'ektlarni boshqarish. Tarmoq va ma'lumotlar bazasi kabi tashqi bog'liqliklar sinov uchun taqlid qilinadi (haqiqiy xizmat o'rniga soxta - boshqariladigan masxara).
  5. Sinovni bajaring va tasdiqlang. Sinov o'tadimi, u haqiqatan ham mazmunli narsani tasdiqlaydimi?

Beshinchi bosqich juda muhim. AI ba'zan "har doim o'tib ketadigan" foydasiz testlarni ishlab chiqaradi; masalan, hech narsani tasdiqlamaydigan yoki o'zining soxta ma'lumotlarini tekshiradigan test. Sinovdan o'tish va qimmatli sinov - bu boshqa narsalar.

Diqqat: AI ishlab chiqarishi mumkinligi test to'g'ri ekanligini anglatmaydi. Ba'zida AI kodning joriy (ehtimol noto'g'ri) xatti-harakatlarini "to'g'ri" deb qabul qiladi va shunga mos ravishda testlarni yozadi. Bunday sinov xatoni qo'lga olish o'rniga tuzatadi. Sinov nimani kutayotganini siz aniqlaysiz; AIga kod nima qilishini emas, nima qilishi kerakligini ayting.

Sinov qamrovi o'lchovi va xatolik

Test qamrovi (kodning necha foizi testlar tomonidan boshqariladi) foydali, ammo chalg'ituvchi ko'rsatkichdir. 90% qamrov kodning 90% bajarilganligini ko'rsatadi; lekin bu chiziqlar to'g'ri ishlayotganligi tasdiqlanmagan. Chiziqni boshqaradigan va natijani tekshirmaydigan test qamrovni kengaytiradi, lekin xavfsizlikni ta'minlamaydi. Maqsad yuqori raqamlar emas, balki mazmunli tasdiqlash. Siz sun'iy intellekt yordamida tezlikni oshirishingiz mumkin, lekin har bir test aslida xatti-harakatni sinab ko'rishiga ishonch hosil qiling.

uchta mini holat

1-holat - chegaradagi vaziyat aniqlandi. AIdan bank ilovasida pul o'tkazmalari funksiyasi uchun testlar so'ralgan va xususan, "salbiy miqdor" va "balansdan ko'proq" stsenariylari qo'shilgan. Sinov shuni ko'rsatdiki, transfer salbiy miqdor bilan bloklanmagan; bu ishlab chiqarishdagi asosiy xavfsizlik zaifligi bo'ladi. Bir qatorli boshqaruvni qo'shish orqali yopildi. Dars: chegara testlari eng qimmatli testlardir.

2-holat - Soxta test. Bir jamoa AI tomonidan ishlab chiqarilgan 40 birlik sinovlari bilan qamrovni 85% ga oshirish uchun yengillashdi. Tekshiruv davomida ko'rinib turibdiki, testlarning aksariyati hech qanday natijani tasdiqlamagan, ular faqat funktsiyani chaqirishgan va assertTrue (true) deb yozishgan. Qoplama yuqori edi, lekin himoya nolga teng edi. Sinovlar qayta ko'rib chiqildi va haqiqiy tekshiruvlar bilan qayta yozildi. Dars: qamrov raqamlari yolg'on gapirishi mumkin.

3-holat - UI testi tezlashtirildi. Elektron tijorat jamoasi 20 daqiqada AI bilan savatga qo'shish oqimining XCUITest skriptini yozdi; Agar qo'lda yozilsa, yarim kun kerak bo'lardi. AI taxmin qilingan ekran elementi identifikatorlari; Jamoa ularni haqiqiy kod bilan moslashtirdi va ularni tuzatdi. Qoralama tezligi haqiqiy, ammo identifikatorni tekshirish inson ishi.

Zaif taklif / Kuchli taklif

Zaif taklif: "Ushbu funksiya uchun test yozing."

Kuchli taklif: "JUnit5 + MockK bilan ushbu Kotlin funksiyasi uchun birlik testlarini ishlab chiqing. Funktsiya: pul o'tkazmasi (summa, manba, maqsad). Sinov uchun xatti-harakatlar (kod nima qilishi kerak):- Yaroqli o'tkazma muvaffaqiyatli bo'lishi kerak - Salbiy yoki nol miqdori rad etilishi kerak - Balansdan kattaroq miqdor rad etilishi kerak - Har bir narsaning nomidan tashqari, tegishli tarmoq xatosi bo'lishi kerak. tavsiflovchi, tashqi xizmatni masxara qilish bo'sh tasdiqni yozmang."

Nusxalanadigan shablonlar

Birlik testi shabloni: "[Til] uchun ushbu funktsiya uchun [JUnit/XCTest] birlik testlarini yarating. Kutilayotgan xatti-harakatlar: [nima qilish kerak]. O'z ichiga: baxtli stsenariy, nol kiritish, to'xtash nuqtalari, xato holatlari. Har bir test bitta xatti-harakatni tekshirishiga ruxsat bering; mazmunli tasdiqdan foydalaning; masxara. [kod]"

UI test shabloni: "Quyidagi oqimning UI testini [Espresso/XCUITest] bilan yozing: [foydalanuvchi oqimi bosqichma-bosqich]. Maxsus imkoniyatlar identifikatoriga ega ekran elementlarini tanlang, matn o‘rniga id dan foydalaning. Kutish strategiyasini qo‘shing. Element identifikatorlarini haqiqiy kodga moslashtirishni eslating."

Sinov tekshiruvi shablonlari:"Ushbu testlarni tekshirib ko'ring: 1) Ular haqiqatda natijani/xulq-atvorni tasdiqlaydimi yoki ular nullmi?2) Ular chegaralangan holatlarni qamrab oladimi?3) Ular kodni xato tuzatadimi yoki to'g'ri xatti-harakatni kutadimi? Zaif testlarni belgilang va kuchaytiring. [testlar]"

Qoplashni optimallashtirish shabloni: "Ushbu sinfning sinovdan o'tmagan qismlarini aniqlang va mazmunli testlarni taklif qiling. Faqat qamrovlar sonini emas, balki haqiqiy xavfga ega bo'lgan yo'llarga ustunlik bering. [kod]"

Umumiy xatolar

  • Faqat baxtli stsenariyni sinab ko'rish. Xatolar chegaralangan holatda saqlanadi; Ularni ochiqchasiga so'rang.
  • Bo'sh/foydasiz testni qabul qilish. assertTrue(true) tipidagi testlar qamrovni kengaytiradi va himoya qilmaydi.
  • AI kod nima qilayotganini tekshiradi. Sinov kodning nima qilishi kerakligini kutishi kerak; aks holda u xatoni tuzatadi.
  • Maqsad uchun doira raqamini xato qilish. 90% qamrov 90% aniqlik degani emas.
  • UI testida matnga ulanish. Matn o'zgarganda test buziladi; Barqaror identifikatordan foydalaning (id).
  • Masxaralarni noto'g'ri o'rnatish. Haqiqiy xizmatni chaqiradigan "birlik testi" sekin va mo'rt bo'ladi.

qisqa bayoni; yakunida

Sinov mobil sifatning asosidir va AI bu sohada, ayniqsa birlik testida juda samarali. Sinov piramidasiga rioya qiling: ko'p birliklar, o'rtacha integratsiya, kichik UI testi. AIdan baxtli stsenariyni, shuningdek, holatlar va xato yo'llarini cheklashni aniq so'rang. Yaratilgan har bir test aslida xatti-harakatni tasdiqlashiga ishonch hosil qiling; Bo'sh testlar va shishirilgan qamrov noto'g'ri. Eng muhimi, AIga kod nima qilishini emas, nima qilishi kerakligini ayting, shuning uchun test xatoni aniqlaydi, uni tuzatmaydi.

Ilova vazifasi

Biznes mantiqiy funksiyasi (masalan, chegirmalarni hisoblash yoki shaklni tekshirish) uchun “Birlik testi shablonidan” foydalanib, AIdan testlarni talab qiling va chegara holatlarini aniq belgilang (nol, salbiy, juda katta). Yaratilgan testlarni ishga tushiring, so'ngra xuddi shu testlarni "Test tekshiruvi shabloni" bilan tekshirib ko'ring. Kamida bitta zaif testni toping, uni mustahkamlang va testlar funktsiyaning haqiqiy xatosini aniqlang yoki yo'qligini tekshiring (kichik xato qo'shish orqali).

nazorat ro'yxati

  • [ ] Men sinov piramidasi uchun mos qatlamni tanladim (ustuvor birlik)
  • [ ] Men baxtli stsenariydan tashqari cheklov va xato holatlarini xohlardim
  • [ ] Men har bir testda mazmunli tasdiq borligini tasdiqladim
  • [ ] Men AIga kod nima qilishi kerakligini aytdim, u nima qilishini emas
  • [ ] Men qoplamalar soniga emas, balki haqiqiy xavf yo‘llariga e’tibor qaratdim
  • [ ] Men UI testlarida barqaror identifikatordan foydalandim, matnga bog'lamadim