Vahid 6 / 12

Testin avtomatlaşdırılması və keyfiyyətin təminatı

Qazanclar:

  • AI ilə mənalı təsdiqlə vahid, inteqrasiya və kənar vəziyyət testləri hazırlamaq bacarığı
  • AI dəstəyi ilə test əhatəsini, limit dəyərləri və mənfi ssenariləri sistematik şəkildə çıxarmaq bacarığı
  • Süni intellekt tərəfindən istehsal edilən testlərin əslində davranışı yoxladığını və sadəcə mövcud kodu təkrarlamadığını yoxlamaq imkanı

Test proqram təminatının həqiqətən vəd edildiyi kimi davrandığını sübut edən mexanizmdir. Yaxşı bir test dəsti sizə bir neçə saniyə ərzində dəyişikliyin nəyisə pozub-dağıdmayacağını söyləyir və mühəndisə inamla hərəkət etmək azadlığı verir. Süni intellekt test yazısının ən yorucu və ən çox atlanan hissəsini sürətləndirir: çoxlu ssenarilər, kəsilmə nöqtələri və mənfi hallar yaradır. Ancaq burada gizli bir tələ var: AI kodun ehtimal edilən davranışını deyil, cari (bəlkə də səhv) davranışını yoxlayan testlər yaza bilər; ya da əslində heç nəyi yoxlayan yox, həmişə keçən boş testlər yarada bilər. Testin dəyəri onun keçib-keçməməsində deyil, doğru şeyi yoxlayıb-yaxşılamamasında və səhv olanda qırmızıya çevrilməsindədir.

Bu bölmədə siz mənalı ifadələrlə vahid, inteqrasiya və kənar vəziyyət testlərinin necə hazırlanacağını öyrənəcəksiniz; test əhatə dairəsini, kəsilmə nöqtələrini və mənfi ssenariləri sistematik şəkildə necə çıxarmaq olar; və biz AI-nin istehsal etdiyi testlərin həqiqətən davranışı təsdiq etdiyini necə yoxlaya biləcəyinizi görəcəyik.

Konsepsiyalar: Vahid sınağı: Tək funksiyanı/sinfi təcrid olunmuş halda sınaqdan keçirir. İnteqrasiya sınağı: Birdən çox hissələrin birlikdə düzgün işlədiyini yoxlayır. Təsdiq: Nəticənin gözlənilə bərabər olduğunu yoxlayan bəyanat; Bu imtahanın ürəyidir. Əhatə dairəsi: Kodun nə qədəri testlər tərəfindən idarə olunur; Yüksək əhatə keyfiyyətinə zəmanət vermir.

Mənalı Testlər Hazırlamaq

Yaxşı bir sınaq üç şeyi aydın şəkildə yerinə yetirir: bir vəziyyət yaradır, bir hərəkəti yerinə yetirir, nəticəni təsdiqləyir. Testləri AI-yə çap edərkən, yoxlamaq istədiyiniz davranışı və hansı ssenariləri əhatə etməsini göstərin; Əks halda, həmişə keçən səthi testlər çıxarır.

  1. Test ediləcək davranışı müəyyənləşdirin. "Nə doğru hesab olunur?" Suala aydın cavab verin.
  2. Ssenari növlərini soruşun. Normal, limit, mənfi, xəta vəziyyəti.
  3. Mənalı təsdiqi idxal edin. Bu, sadəcə "səhv atmaq" deyil, "düzgün dəyəri qaytardı".
  4. Testin düzgünlüyünü yoxlayın. Şüurlu şəkildə kodu pozduqda test qırmızıya çevrilirmi?

Kompleks test yaratma əmri: "Aşağıdakı "endirim tətbiq et(məbləğ, kupon)" funksiyası üçün vahid testləri yazın. Aşağıdakı kateqoriyalarda AZAL bir ssenariyə sahib olun: (1) normal etibarlı kupon, (2) kəsilmə nöqtələri (0 məbləğ, 100% endirim), (3) mənfi (etibarsız kupon, gözlənilən səhv məbləği (COTEu) səhv dəyəri). hər bir testdə (yalnız 'işləmiş' deyil, oxuna bilən testləri adlandırın: [kod]".

Sərhəd dəyərinin çıxarılması sorğusu: "Bu funksiyanın girişləri üçün sərhəd təhlili aparın. Hər bir parametr üçün 'yalnız sərhəddə', 'sərhədin altında', 'sərhəddən bir qədər yuxarıda' dəyərləri cədvəl kimi çıxarın. Sonra bu sərhədləri əhatə edən test ssenarilərini sadalayın. Hələlik kod yazmayın: io təhlili və skript yazmayın."

Diqqət: Yüksək test əhatəsi (məsələn, 90%) kodun düzgün olduğunu sübut etmir. Əhatə dairəsi neçə sıranın icra olunduğunu ölçür; o xətlərin düzgün nəticə verməsi deyil. Mənalı təsdiqi olmayan test əhatə dairəsini artırır, lakin heç nəyə zəmanət vermir. Təsdiqin məzmunu təsdiqlərin sayını deyil, keyfiyyəti müəyyən edir.

Testin özünü sınamaq: mutasiya məntiqi

Süni intellekt tərəfindən yaradılan testin həqiqətən işlədiyini başa düşməyin ən praktik yolu kodu qəsdən pozmaqdır (mutasiya testi məntiqi). Şərti tərsinə çevirin, + işarəsi qoyun -; Heç bir test qırmızıya çevrilmirsə, testləriniz əslində bu davranışı saxlamır.

Zəifliyin axtarışı ilə bağlı sorğu: "Mənə deyin ki, bu kodda hansı potensial səhvlər var, aşağıdakı testlər DAXİL OLA BİLMƏYƏ bilər. Koda edilə bilən 5 kiçik mutasiya təklif edin (məsələn, > əvəzinə >=, + əvəzinə) və hər biri üçün mövcud testlərin onu tuta bilməyəcəyini göstərin. Tutulmayanlar üçün əlavə edilməli olan testi təklif edin. Test kodu: [kod]"

Zəif Tələb / Güclü Tələb

ZƏFS: "Bu funksiyaya test yazın." (Nəticə: adətən bir xoşbəxt ssenari, zəif təsdiq; səhvləri qaçırır.) GÜÇLÜ: "Bu 'passwordStrong' funksiyasına test yazın. Qayda: ən azı 8 simvol, 1 böyük hərf, 1 rəqəm tələb olunur. Aşağıdakı ssenariləri AYRI testlər kimi əhatə edin: tam olaraq 8 simvol (limit), 7 rəqəm, hərf yoxdur, hərf yoxdur boş sətir, yalnız boşluqlar, çox uzun (1000 simvol) Hər testdə gözlənilən doğru/yanlış dəyərini açıq şəkildə təsdiqləyin və yoxladığına uyğun olaraq testi adlandırın."

Güclü göstəriş qaydalar və tam sərhəd ssenariləri verir. "Tam olaraq 8/7 simvol" kimi sərhəd cütləri səhv etmək üçün ən çox rast gəlinən yerlərdir (>= ilə çaşdırılır). Zəif sürət bu sərhədləri aşır və səhvi istehsala aparır.

Test növləri və harada istifadə olunmalı

Test növü

Nəyi təsdiqləyir?

AI töhfəsi

Diqqət

vahid

Tək funksiya/sinif

Sürətli çoxlu ssenarilər yaradır

Mənalı təsdiq tələb olunur

inteqrasiya

Parçalar birlikdə işləyir

Ssenari və saxta məlumat layihəsi

Əsl asılılıq davranışı

bitir/qəbul et

Bütün istifadəçi axını

Addım siyahısı və gözlənti

kövrəkliyə meyllidir

reqressiya

Köhnə xəta geri qayıtmır

Arızanın xüsusi testi

Hər düzəlişə əlavə edilməlidir

Mini Çantalar

Case 1 - Həmişə keçən test. Süni intellekt bir funksiyaya 12 test yazır və hamısı keçir. Mühəndis şübhələnir və funksiyanın qaytarılması dəyərini qəsdən təhrif edir; Testlərdən yalnız 3-ü qırmızıya çevrilir. Digər 9 testdə mənalı təsdiqlər yoxdur. Test mutasiya ovu ilə gücləndirilir; real müdafiə 9 ssenaridə əldə edilir.

Hal 2 - Sərhəd xətası. Yaş doğrulama funksiyası "18 və daha yuxarı etibarlıdır" deməlidir, lakin >18 yazılır, yəni 18 yaş rədd edilir. Səhv test zamanı dərhal özünü göstərir, çünki AI kəsilmə nöqtəsi təhlili vasitəsilə “dəqiq 18” ssenarisini yaradır. Tək limit testi istənilən real istifadəçi şikayətlərinin qarşısını alır.

Case 3 - Cari davranışın düzəldilməsi. Süni intellektə "bu kod əsasında test yaz" deyildikdə, kodda artıq mövcud olan yuvarlaqlaşdırma xətasını "düzgün" kimi qəbul edən bir test istehsal edir. Mühəndis testi koda deyil, tələbə uyğun olaraq (gözlənilən düzgün dəyər) çap etdikdə, test qırmızıya çevrilir və əsl xəta baş verir. Testlər koddan deyil, gözləntilərdən alınmalıdır.

Ümumi səhvlər

  • Mənasız iddia. "Səhv atmadım" kifayət deyil; Düzgün dəyər yoxlanılmalıdır.
  • Keyfiyyətlə əhatə dairəsini qarışdırmaq. Yüksək əhatə dəqiq nəticələrə zəmanət vermir.
  • Testin kodla çap edilməsi. Cari səhvi "doğru" olaraq düzəldir; Testlər gözləntilərdən irəli gəlməlidir.
  • Limit dəyərlərin atlanması. > ilə >= qarışdırmaq ən çox yayılmış səhvdir; sərhəd cütləri sınaqdan keçirilməlidir.
  • Testin özünü yoxlamaq. Kodu pozduqda qırmızıya çevrilməyən test qorunma təmin etmir.

Xülasə

Yaxşı sınaq dəsti inamla dəyişikliklər etmək üçün açardır. Süni intellekt tez bir zamanda çoxlu ssenarilər, sərhədlər və neqativ hallar yaradır; Ancaq testləri tələblərdən çox koddan əldə edərsə, mövcud səhvləri düzəldə bilər və ya həmişə keçən mənasız testlər yaza bilər. Hər bir testdə gözlənilən konkret dəyəri təsdiqləyin, əlaqəli cütləri daxil edin və kodu qəsdən pozaraq testlərinizin həqiqətən qoruduğunu yoxlayın. Keyfiyyəti əhatə dairələrinin sayı deyil, məzmunu müəyyənləşdirir.

Tətbiq tapşırığı

Funksiyanı seçin və hərtərəfli test yaratma əmri ilə dörd kateqoriyada (normal, limit, mənfi, səhv) testlər yaratsın; Hər testdə konkret gözlənilən dəyər təsdiqlənsin. Sonra test açığı axtarış sorğusunu işə salın, kodda 5 kiçik mutasiya təklif edin və hansını tutduqlarını yoxlamaq üçün testləri həyata keçirin. Tutulmamış ən azı bir mutasiya üçün yeni bir test əlavə edin və onun indi qırmızı olduğunu göstərin.

yoxlama siyahısı

  • [ ] Testləri koda deyil, gözlənilən/düzgün davranışa əsaslanaraq çap etdim.
  • [ ] Normal, limit, mənfi və səhv ssenarilərini əhatə etdim.
  • [ ] Mən hər testdə konkret gözlənilən dəyəri təsdiqlədim.
  • [ ] Sərhəd cütlərini sınaqdan keçirdim (yalnız yuxarıda/aşağıda).
  • [ ] Kodu qəsdən pozaraq, testlərin qırmızıya çevrildiyini təsdiqlədim.
  • [ ] Aşkar olunmamış mutasiyalar üçün yeni test əlavə etdim.