Vahid 5 / 12

Test istehsalı və keyfiyyət təminatı

Qazanclar:

  • Süni intellekt ilə vahid sınağı, kənar vəziyyətlər və əhatə dairəsi boşluğu təhlili hazırlamaq bacarığı
  • Kodun cari davranışına deyil, spesifikasiyaya əsaslanaraq test gözləntilərini çap etmək imkanı
  • Bir testin səhvləri daxil etməklə həqiqətən qoruyub saxlamadığını yoxlamaq imkanı

Testlərin yazılması əksər tərtibatçıların təxirə saldığı ən dəyərli işlərdən biridir. Yaxşı bir test dəsti kodun gözlənildiyi kimi işləməsinin sübutudur və gələcək dəyişikliklər üçün həyat xəttidir. Problem ondadır ki, testlərin yazılması təkrarlanır və vaxt aparır - məhz AI-nin parladığı iş növü. Ancaq bir məqam var: AI tez-tez kodun mövcud davranışını yoxlayır, olması lazım olan davranışı yox. Bu fərqi idarə etmək bu bölmənin mahiyyətini təşkil edir.

Bu bölmədə siz vahid testini (bir funksiyanı ayrı-ayrılıqda yoxlayan sınaq), kənar vəziyyət testlərini və AI ilə test məlumatlarının yaradılmasını öyrənəcəksiniz; test əhatəsində boşluqların bağlanması; və AI testlərinə kor-koranə etibar etmək niyə təhlükəlidir.

Testin iki tərəfi: Davranışın düzəldilməsi və yoxlanması

Test iki fərqli məqsədə xidmət edə bilər. Birincisi yoxlamadır: kodun düzgünlüyünü, spesifikasiyaya uyğunluğunu yoxlayır. İkincisi, reqressiyadan qorunmadır: bu gün kodun davranışını dondurur, buna görə də sabah kimsə təsadüfən onu dəyişdirsə, test pozulacaq və xəbər verəcəkdir.

AI sonuncuda çox yaxşıdır; O, koda baxır və "hazırda nə etdiyini" sınaqdan keçirən hallar yaradır. Lakin kod əvvəldən səhvdirsə, AI bu səhv davranışı "düzgün" olaraq təyin edə bilər. Beləliklə, AI-nin yaratdığı hər bir testin təsdiqini nəzərdən keçirməlisiniz: "Kod 42-ni qaytarır və test 42-ni gözləyir" demək deyil ki, 42 düzgün cavabdır.

Diqqət: Süni intellekt testdən keçərsə, bu, kodun "işlədiyi" demək deyil; bu, sadəcə olaraq "AI-nin gözlədiyi kimi davranır" deməkdir. Spesifikasiyaya baxaraq gözləntinin doğru olub olmadığına qərar verirsiniz.

Addım-addım: AI ilə Güclü Testlər Yazmaq

  1. Yalnız kodu deyil, spesifikasiyanı verin. "Bu funksiya bunu etməlidir" məlumatını əlavə etsəniz, AI düzgün gözlənti yaza bilər; Sadəcə kodu təqdim etsəniz, cari davranışı sınayacaq.
  2. Kənar hallarda tələb edin. Boş, sıfır, sıfır, mənfi, çox böyük, pis format, paralellik - açıq şəkildə xoşbəxt yoldan kənara çıxın.
  3. Test çərçivəsini və üslubunu təyin edin. "pytestdən istifadə edin", "Nümunəni təşkil et-akt-təsdiq edin", "hər test bir şeyi sınamağa icazə verin" və s.
  4. Gözləntiləri yoxlayın (təsdiq). Hər təsdiqin düzgün dəyəri yoxladığı spesifikasiya ilə müqayisə edin.
  5. Sahədə boşluqları bağlayın. Mövcud testləri verin və "hansı filiallar və hallar sınaqdan keçirilməyib?" soruşmaq; sonra hazırlanmış əlavə testləri yoxlayın.

Üç mini qutu

1-ci hal — Əhatə 52%-dən 85%-ə qədər. Bir xidmət modulunun sınaq əhatə dairəsi 52% təşkil edib. Komanda mövcud testləri AI-yə verdi, sınaqdan keçirilməmiş filialları siyahıya aldı və onlar üçün testlər yaratdı. İnsan baxışı ilə əhatə dairəsi 85%-ə yüksəldi; Prosesdə süni intellekt əvvəllər heç vaxt sınaqdan keçirilməmiş səhv bölməsində faktiki səhvi (səhv səhv kodunu qaytaran yol) aşkar etdi.

2-ci hal - Yanlış gözlənti tələsi. Pulun yuvarlaqlaşdırılması funksiyası əslində səhv idi; 2.675-dən 2.67-yə yuvarlaqlaşdırmaq əvəzinə, 2.68 əvəzinə 2.67-yə yuvarlaqlaşdırıldı. Süni intellekt koda baxdı və assert round_money(2.675) == 2.67 yazdı - səhvi "doğru" olaraq dondurdu. Tərtibatçı spesifikasiyanı oxuyanda gözləntiləri düzəltdi və əsl səhvi tutdu. Kodu yox, qaydanı sınamaq fərqi yaratdı.

3-cü vəziyyət - Kənar vəziyyətin partlaması. AI-dən yalnız tarix diapazonu funksiyası üçün "kənar vəziyyətlər" üçün soruşduqda; Başlanğıc=bitmə, tərs interval, sıçrayış ili 29 fevral, müxtəlif vaxt qurşaqları və boş interval kimi 8 hal istehsal etdi. Bunlardan ikisi (əks aralıq və sıçrayış ili) əslində xətaya səbəb oldu. Bu halları əl ilə nəzərdən keçirmək çox vaxt atlanır; Süni intellekt burada “beyin fırtınası” tərəfdaşı oldu.

Dörd Kopyalana bilən Şablon

Spesifikasiyaya əsaslanan test istehsalı:

Rol: Testlər yazan bir tərtibatçı. Çərçivə: {{pytest/JUnit/Jest...}}.Funksiya NƏ ETMƏLİDİR (spesifikasiya): {{rule}}Aşağıdakı funksiya üçün testlər yazın. Kodun cari çıxışına DEYİL, spesifikasiyaya uyğun olaraq gözləntiləri yazın. Xoşbəxt yol + ən azı 4 kənar vəziyyət əlavə edin. Hər testin bir şeyi sınamasına icazə verin, təsviri addan istifadə edin. {{funksiya}}

Edge case beyin fırtınası:

Bu funksiya üçün sınaqdan keçirilməli olan kənar/uğursuzluq hallarını siyahıya salın (null, null, kəsilmə nöqtələri, pis format, paralellik, xarici xəta). Hər bir hal üçün: giriş, gözlənilən davranış. HƏLƏ KOD YAZMAYIN, sadəcə siyahıya salın.{{funksiya}}

Əhatə boşluğunun təhlili:

Aşağıda funksiyalar və mövcud testlər var. Hansı filiallar, şərtlər və hallar sınaqdan keçirilməyib? Çatışmazlıqları sadalayın və yalnız çatışmazlıqlar üçün yeni testlər yazın. Mövcud olanları təkrarlamayın. Funksiya:{{funksiya}}Testlər:{{mövcud_testlər}}

Test məlumatları / saxta obyekt generasiyası:

{{funksiya/xidmət}} testləri üçün real sınaq datası yaradın: etibarlı nümunələr, sərhəd nümunələri və etibarsız nümunələr ayrıca. Xarici asılılıq {{X}} üçün sadə saxta davranış təklif edin. Həqiqi məxfi məlumatlardan/PII-dən istifadə; Saxta məlumat yaradın.

Zəif məlumat / Güclü göstəriş

Zəif: "Bu funksiya üçün test yazın."
Güclü: "pytest ilə. apply_discount(ümumi, faiz) funksiyası — qayda: endirim 0%–30% olmalıdır, həddən kənar ValueError atmalıdır, nəticə 2 ondalığa yuvarlaqlaşdırılmalıdır. Gözləntiləri bu QAYDA ilə yazın (kodla deyil). Xoşbəxt yol + bu kənar hallar: 0%, 30% (total, faiz) [30%, mənfi (total), [1%=0),

Güclü buraxma qaydasını verir və “koda deyil, qaydaya görə gözləntiləri yazın” deyir; Bu tək cümlə süni intellektin səhv davranışını düzəltmək tələsini bağlayır.

Test növü

AI töhfəsi

insan nəzarəti

Xoşbəxt yol vahidi sınağı

sürətli skelet

Gözlənti doğrudurmu?

Kənar hallarda

Geniş beyin fırtınası

Uyğun olmayanı aradan qaldırın

Sahə boşluğunun doldurulması

Atlanmış budaqları tapır

Əhəmiyyəti təsdiqləyin

Test məlumatları/istehza

Həqiqi nümunə yaradır

PII yoxdur, realizmə nəzarət

Testlər keyfiyyəti idarə edir, ona zəmanət vermir

Yüksək sınaq əhatəsi inam verir, lakin bu, həm də yanıltıcı ola bilər: 100 faiz əhatə dairəsi "hər sətir düzgündür" deyil, "hər sətir işlədilib" deməkdir. AI ilə əhatə dairəsini artırmaq asandır; Əsl dəyər mənalı gözləntilərin yazılmasındadır. Testin dəyəri kod pozulduqda onu pozmaq və sizi xəbərdar etmək qabiliyyətidir. Buna görə də süni intellekt tərəfindən yaradılan testlər “kod həqiqətən dəyişəndə ​​pozulurmu?” sualına əsaslanır. Bunu sualla yoxlayın; Qəsdən xətti qırmaq və test fasiləsini görmək (mutasiya ideyası) testin işlədiyinin sübutudur.

İpucu: AI-nin yazdığı testin işlədiyini görmək üçün kodda kiçik bir səhv yaradın (məsələn, a + hərfini - ilə dəyişdirin) və testin pozulduğuna baxın. Əgər pozulmazsa, o test sizi qorumur.

Ümumi səhvlər

  • Qayda vermədən test istəmək. Model cari davranışı dondurur; səhvi "doğru" olaraq düzəldir.
  • Gözləntiləri oxumadan qəbul etmək. Təsdiqlərin düzgün dəyəri yoxladığını yoxlamasanız, sınaq yanlışdır.
  • Sadəcə xoşbəxt yolu sınamaq. Real səhvlər kənarlarda yaşayır; Açıq şəkildə kənar halları soruşun.
  • Məqsəd üçün əhatə dairəsini səhv salmaq. Yüksək faiz düzgün davranışın zəmanəti deyil.
  • Real/gizli məlumatların test məlumatları kimi edilməsi. Müştəri məlumatları və ya sirləri sınaq və saxlanmaya daxil olmamalıdır; Sintetik məlumat yaradın.

Xülasə

Süni intellekt yazı testlərindən təkrarlanan yükün çox hissəsini götürür: o, sürətli skeletlər, kənar işlərin böyük siyahıları və əhatə dairəsi boşluğu təhlilləri yaradır. Ancaq ən kritik məqam gözləntilərdir: AI kodun cari davranışını sınamağa meyllidir, halbuki test spesifikasiyaya uyğun olaraq yazılmalıdır. Qayda verin, gözləntiləri yoxlayın, kənar halları tətbiq edin və testlərin bir səhv yeritməklə həqiqətən qoruyub saxlamadığını yoxlayın. Test əhatə dairəsi məqsəd deyil, bir vasitədir.

Tətbiq tapşırığı

Funksiya seçin və əvvəlcə kodunu verməklə AI-ya test çap edin; Gözləntilərə diqqət yetirin. Sonra eyni funksiya üçün spesifikasiyanı (tələb olunan davranış) verərək testi yenidən çap edin. İki test dəstinin gözləntilərini müqayisə edin: hansının əsl səhvini aşkar edən fərqli varmı? Nəhayət, koda qəsdən səhv əlavə etməklə və test fasiləsini görməklə yaradılan testlərdən birinin işlədiyini yoxlayın.

yoxlama siyahısı

  • [ ] Testin davranışı düzəltmək və ya yoxlamaq üçün olduğunu ayırd edirəm.
  • [ ] Mən test tələb edəndə kodu deyil, yerində olması lazım olan qaydanı (spesifikasiyanı) verirəm.
  • [ ] Mən hər yaradılan təsdiqi spesifikasiya ilə müqayisə edirəm.
  • [ ] Mən açıq şəkildə kənar və uğursuzluq hallarını tələb edirəm.
  • [ ] Mən faiz əhatəsinə məqsəd deyil, alət kimi baxıram.
  • [ ] Mən testin həqiqətən səhvlər vurmaqla qoruyub saxlamadığını yoxlayıram.