Добивки:
- Способност за производство на единица, интеграција и тестови за рабови со значајно тврдење со вештачка интелигенција
- Способност за систематско извлекување на покриеноста на тестот, граничните вредности и негативните сценарија со поддршка за вештачка интелигенција
- Способност да се потврди дека тестовите произведени од вештачката интелигенција всушност го потврдуваат однесувањето и не го повторуваат само постоечкиот код
Тестирањето е механизмот кој докажува дека софтверот всушност се однесува како што вети. Добар тест пакет ви кажува за неколку секунди дали промената крши нешто и му дава слобода на инженерот да дејствува со доверба. Вештачката интелигенција го забрзува најдосадниот и најпрескокнуваниот дел од пишувањето тест: генерирање на мноштво сценарија, точки на прекин и негативни случаи. Но, тука има една подла замка: вештачката интелигенција може да пишува тестови кои го потврдуваат тековното (можеби неисправно) однесување на кодот, а не неговото наводно однесување; или може да произведе празни тестови кои секогаш поминуваат, а всушност не проверуваат ништо. Вредноста на тестот не е во тоа дали ќе помине, туку во тоа дали ја проверува вистинската работа и дали станува црвено кога е погрешна.
Во оваа единица, ќе научите како да произведувате тестови за единица, интеграција и рабови со значајни тврдења; како систематски да се извлече покриеноста на тестот, точките на прекин и сценаријата на негативни страни; и ќе видиме како можете да проверите дали тестовите што ги произведува вештачката интелигенција всушност го потврдуваат однесувањето.
Поими: Единица тестирање: Тестира една функција/класа изолирано. Тестирање за интеграција: Тестови дека повеќе делови правилно работат заедно. Потврдете: изјава која проверува дали резултатот е еднаков на очекуваниот; Ова е срцето на тестот. Покриеност: Колку од кодот се извршува со тестови; Високата покриеност не гарантира квалитет.
Производство на значајни тестови
Добриот тест прави три работи јасно: воспоставува состојба, врши дејство, го потврдува резултатот. Кога печатите тестови на вештачката интелигенција, наведете какво однесување сакате да потврдите и кои сценарија треба да ги покрие; Во спротивно, произведува површни тестови кои секогаш поминуваат.
- Дефинирајте го однесувањето што треба да се тестира. „Што се смета за правилно? Одговорете јасно на прашањето.
- Побарајте типови на сценарија. Нормална, граница, негативна, состојба на грешка.
- Увезете значајно тврдење. Не само што „фрли грешка“, туку „ја врати точната вредност“.
- Проверете ја точноста на тестот. Дали тестот станува црвен кога свесно го прекршувате кодот?
Сеопфатно известување за генерирање тестови: „Напишете единечни тестови за следнава функција „примени попуст (износ, купон). Имајте НАЈМАЛКУ едно сценарио во следните категории: (1) нормален валиден купон, (2) точки на прекин (0 износ, 100% попуст), (3) негативен (неважечки купон, очекуван износ на грешка (4 COLL). вредност во секој тест (не само „работен“
Промпт за извлекување на гранична вредност: „Извршете анализа на граничните вредности за влезовите на оваа функција. За секој параметар, извлечете ги вредностите „само на границата“, „веднаш под границата“, „веднаш над границата“ како табела. Потоа наведете ги сценаријата за тестирање што ги покриваат овие граници. Не пишувајте сè уште кодови: сè уште ги анализирате и ги анализирате.
Внимание: Високата покриеност на тестот (на пр. 90%) не докажува дека кодот е точен. Покриеноста мери колку редови се извршени; не дека тие линии даваат точен резултат. Тест без значајно тврдење ја зголемува покриеноста, но не гарантира ништо. Содржината на тврдењето го одредува квалитетот, а не бројот на тврдењата.
Тестирање на самиот тест: Логиката на мутација
Најпрактичниот начин да се разбере дали тестот генериран со вештачка интелигенција навистина функционира е намерно да се скрши кодот (логика за тестирање на мутација). Свртете го условот, направете знак + -; Ако ниту еден тест не стане црвено, вашите тестови всушност не го одржуваат тоа однесување.
Тестирајте го предупредувањето за ловење ранливост: „Кажете ми кои потенцијални грешки во овој код МОЖЕ НЕ да ги фатат следните тестови. Предложете 5 мали мутации што би можеле да се направат на кодот (на пр. >= наместо >, - наместо +) и наведете за секоја дали постоечките тестови ќе го фатат. За оние што не се фатени, предложете тестирање што треба да се додаде. Тест: [cotest]"
Слаба навестување / Силен навестување
СЛАБО: „Напишете тест за оваа функција“. (Резултат: обично едно среќно сценарио, слабо тврдење; промашува грешки.) СИЛНО: „Напишете тест за оваа функција „passwordStrong“. Правило: најмалку 8 знаци, 1 голема буква, потребна е 1 цифра. Покријте ги следните сценарија како ПОСЕБНИ тестови: точно 8 знаци (ограничување нагоре, празни букви), 7 знаци низа, само празни места, премногу долги (1000 знаци) Експлицитно наведете ја очекуваната точно/неточна вредност во секој тест и именувајте го тестот според она што го проверува."
Моќното известување дава правила и сценарија за целосна граница. Граничните парови како „точно 8/7 знаци“ се најчестите места за правење грешки (збунувачки > со >=). Слабиот промпт ги заобиколува овие граници и ја носи грешката до производството.
Видови тестови и каде да се користат
Тип на тест
Што потврдува?
Придонес за вештачка интелигенција
Внимание
единица
Единечна функција/класа
Брзо генерира повеќе сценарија
Потребно е значајно тврдење
интеграција
Делови кои работат заедно
Сценарио и нацрт на лажни податоци
Вистинско однесување кое предизвикува зависност
крај/прифати
Целосен кориснички тек
Список на чекори и очекувања
склони кон кршливост
регресија
Старата грешка не се враќа
Специфично тестирање на дефекти
Треба да се додаде на секоја поправка
Мини футроли
Случај 1 - Тестот кој секогаш поминува. AI пишува 12 тестови на функција и сите тие поминуваат. Инженерот станува сомнителен и намерно ја искривува повратната вредност на функцијата; Само 3 од тестовите стануваат црвени. Останатите 9 тестови не содржат значајни тврдења. Тестирањето се зајакнува со лов на мутации; вистинската заштита се добива во 9 сценарија.
Случај 2 - Гранична грешка. Функцијата за проверка на возраста треба да каже „18 и повеќе е валидна“, но >18 е напишана, што значи дека возраста 18 е одбиена. Грешката се појавува веднаш при тестирањето бидејќи вештачката интелигенција го генерира сценариото „точно 18“ преку анализа на точката на прекин. Тестот со единечна граница спречува какви било реални кориснички поплаки.
Случај 3 - Поправање на тековното однесување. Кога на вештачката интелигенција ќе и се каже да „напише тест врз основа на овој код“, тој произведува тест што ја прифаќа како „точна“ грешката за заокружување што веќе постои во кодот. Кога инженерот ќе го отпечати тестот според барањето (очекуваната точна вредност), а не според кодот, тестот станува црвено и се јавува вистинската грешка. Тестовите треба да се изведат од очекување, а не од код.
Вообичаени грешки
- Бесмислено тврдење. „Не направив грешка“ не е доволно; Точната вредност мора да се потврди.
- Збунувачки опсег со квалитет. Високата покриеност не е гаранција за точни резултати.
- Печатење на тестот со код. Ја поправа тековната грешка на „точно“; Тестовите треба да произлегуваат од очекувањата.
- Прескокнување на граничните вредности. Збунувањето > со >= е најчеста грешка; мора да се тестираат граничните парови.
- Не ревизија на самиот тест. Тестот што не поцрвенува кога ќе го прекршите кодот не обезбедува заштита.
Сумирано
Добриот пакет за тестирање е клучот за правење промени со доверба. ВИ брзо генерира мноштво сценарија, граници и негативни ситуации; Но, ако ги изведува тестовите од кодот наместо од барањата, може да ги поправи постоечките грешки или да напише бесмислени тестови кои секогаш поминуваат. Потврдете ја конкретната очекувана вредност во секој тест, вклучете ги врзаните парови и проверете дали вашите тестови навистина штитат со намерно кршење на кодот. Содржината на тврдењето, а не бројот на опфати, го одредува квалитетот.
Задача за апликација
Изберете функција и нека генерира тестови во четири категории (нормално, ограничување, негативно, грешка) со сеопфатна порака за генерирање тестови; Конкретната очекувана вредност нека биде наведена во секој тест. Потоа извршете го тестот за лов на ранливост, предложете 5 мали мутации во кодот и извршете ги тестовите за да проверите кои од нив ќе ги фатат. Додадете нов тест за барем една мутација што не е фатена и покажете дека сега е во минус.
листа за проверка
- [ ] Ги испечатив тестовите врз основа на очекуваното/правилното однесување, а не на кодот.
- [ ] Покрив сценарија за нормални, гранични, негативни и грешки.
- [ ] Ја потврдив конкретната очекувана вредност во секој тест.
- [ ] Ги тестирав граничните парови (само над-долу / веднаш над-долу).
- [ ] Со намерно кршење на кодот, потврдив дека тестовите станаа црвено.
- [ ] Додадов нов тест за неоткриени мутации.