Јединица 6 / 12

Аутоматизација тестирања и осигурање квалитета

Добици:

  • Способност израде тестова јединица, интеграције и рубних случајева са смисленом тврдњом са АИ
  • Способност систематског издвајања покривености тестом, граничних вредности и негативних сценарија уз подршку АИ
  • Способност да се провери да ли тестови произведени од стране вештачке интелигенције заправо потврђују понашање, а не само да понављају постојећи код

Тестирање је механизам који доказује да се софтвер заиста понаша како је обећано. Добар пакет за тестирање вам у секунди каже да ли промена нешто квари и даје инжењеру слободу да делује са самопоуздањем. АИ убрзава најзаморнији и најпрескаканији део писања тестова: генерисање мноштва сценарија, тачака прекида и негативних случајева. Али овде постоји подмукла замка: АИ може писати тестове који потврђују тренутно (можда погрешно) понашање кода, а не његово наводно понашање; или може да произведе празне тестове који увек пролазе, не проверавајући ништа. Вредност теста није у томе да ли је прошао, већ у томе да ли проверава праву ствар и да ли постаје црвен када је погрешан.

У овој јединици ћете научити како да направите тестове јединица, интеграције и рубних случајева са смисленим тврдњама; како систематски издвојити покривеност тестом, тачке прекида и сценарије негативних страна; и видећемо како можете да проверите да ли тестови које АИ производи заиста потврђују понашање.

Концепти: Јединично тестирање: Тестира једну функцију/класу у изолацији. Интеграционо тестирање: Тестира да више делова исправно ради заједно. Тврдити: Изјава која проверава да ли је резултат једнак ономе што се очекивало; Ово је срце теста. Покривеност: Колико кода раде тестови; Висока покривеност не гарантује квалитет.

Израда смислених тестова

Добар тест чини три ствари јасно: успоставља стање, изводи акцију, потврђује резултат. Када штампате тестове на АИ, наведите какво понашање желите да проверите и које сценарије оно треба да покрије; У супротном, производи површне тестове који увек пролазе.

  1. Дефинишите понашање које треба тестирати. „Шта се сматра исправним?“ Одговорите јасно на питање.
  2. Питајте за типове сценарија. Нормално, гранично, негативно, стање грешке.
  3. Увезите смислено тврдње. Није само „избацио грешку“, већ је „вратио тачну вредност“.
  4. Проверите тачност теста. Да ли тест постаје црвен када свесно разбијете код?

Свеобухватни упит за генерисање теста: „Напишите јединичне тестове за следећу функцију „примени попуст(износ, купон)“. Имајте НАЈМАЊЕ један сценарио у следећим категоријама: (1) нормалан важећи купон, (2) тачке прекида (0 износ, 100% попуста), (3) негативан (неважећи купон, негативан износ), (4) очекивана вредност ЦОУ теста у случају грешке у сваком случају (4) ЦОУ ТЕ НЦ. (не само 'радио').

Промпт за екстракцију граничне вредности: „Извршите анализу граничних вредности за улазе ове функције. За сваки параметар извуците вредности 'баш на граници', 'одмах испод границе', 'одмах изнад границе' као табелу. Затим наведите тестне сценарије који покривају ове границе. Немојте још писати списак сценарија, само анализа за забаву: [забавна анализа:

Опрез: Висока покривеност тестом (нпр. 90%) не доказује да је код тачан. Покривеност мери колико је редова извршено; не да те линије дају тачан резултат. Тест без смислене тврдње повећава покривеност, али не гарантује ништа. Садржај тврдње одређује квалитет, а не број тврдњи.

Тестирање самог теста: логика мутације

Најпрактичнији начин да се разуме да ли тест генерисан од вештачке интелигенције заиста функционише јесте да се намерно разбије код (логика тестирања мутације). Обрните услов, направите знак + -; Ако ниједан тест не постане црвени, ваши тестови заправо не одржавају то понашање.

Промпт за тражење рањивости за тестирање: „Реците ми које потенцијалне грешке у овом коду следећи тестови МОЖДА НЕЋЕ ухватити. Предложите 5 малих мутација које би се могле направити у коду (нпр. >= уместо >, - уместо +) и назначите за сваку да ли ће постојећи тестови то ухватити. За оне који нису ухваћени, предложите тестирање: [код за тестирање] Тест: [код] Тест.

Слаба порука / јака промпт

СЛАБО: "Напишите тест за ову функцију." (Резултат: обично један срећан сценарио, слаба тврдња; пропуштају грешке.) СНАЖНО: „Напишите тест за ову функцију 'пассвордСтронг'. Правило: најмање 8 знакова, 1 велико слово, 1 цифра је потребна. Покријте следеће сценарије као ОДВОЈЕНИ тестови: тачно 8 знакова (ограничење), 7 знакова, без размака, без размака, без размака, слово испод, празно слово предугачак (1000 знакова) Експлицитно потврдите очекивану вредност тачно/нетачно у сваком тесту и именујте тест према ономе што проверава.“

Моћни промпт даје правила и сценарије пуне границе. Гранични парови попут „тачно 8/7 знакова“ су најчешћа места на којима се праве грешке (збуњујући > са >=). Слаб промпт заобилази ове границе и преноси грешку у производњу.

Врсте тестова и где их користити

Тип теста

Шта то потврђује?

АИ допринос

Пажња

јединица

Једна функција/класа

Брзо генерише више сценарија

Потребна је смислена тврдња

интеграција

Делови који раде заједно

Сценарио и лажни нацрт података

Истинско понашање зависности

завршити/прихватити

Цео ток корисника

Листа корака и очекивања

склон ломљивости

регресија

Стара грешка се не враћа

Испитивање специфичних грешака

Треба додати сваком поправку

Мини Цасес

Случај 1 — Тест који увек пролази. АИ уписује 12 тестова у функцију и сви они пролазе. Инжењер постаје сумњичав и намерно искривљује повратну вредност функције; Само 3 теста постају црвене. Осталих 9 тестова не садрже смислене тврдње. Тестирање је појачано ловом на мутације; права заштита се добија у 9 сценарија.

Случај 2 — Гранична грешка. Функција верификације узраста треба да каже „18 и више година је валидно“, али је написано >18, што значи да се старост од 18 година одбија. Грешка се одмах појављује у тестирању јер АИ генерише сценарио „тачно 18“ кроз анализу тачке прекида. Тест са једним ограничењем спречава било какве стварне жалбе корисника.

Случај 3 — Поправљање тренутног понашања. Када се АИ каже да „напише тест на основу овог кода“, он производи тест који прихвата као „тачну“ грешку заокруживања која већ постоји у коду. Када инжењер одштампа тест у складу са захтевом (очекивана тачна вредност), а не кодом, тест постаје црвен и долази до праве грешке. Тестови треба да буду изведени из очекивања, а не из кода.

Уобичајене грешке

  • Бесмислено тврдити. „Нисам избацио грешку“ није довољно; Тачна вредност мора бити потврђена.
  • Бркање обима са квалитетом. Висока покривеност није гаранција тачних резултата.
  • Штампање теста кодом. Поправља тренутну грешку на "тачно"; Тестови треба да произилазе из очекивања.
  • Прескакање граничних вредности. Збунити > са >= је најчешћа грешка; гранични парови морају бити тестирани.
  • Без ревизије самог теста. Тест који не постаје црвен када разбијете код не пружа заштиту.

Укратко

Добар пакет за тестирање је кључ за уношење промена са самопоуздањем. АИ брзо генерише мноштво сценарија, граница и негативних ситуација; Али ако изводи тестове из кода, а не из захтева, може да поправи постојеће грешке или да напише бесмислене тестове који увек прођу. Потврдите конкретну очекивану вредност у сваком тесту, укључите везане парове и проверите да ли ваши тестови заправо штите намерно разбијање кода. Садржај тврдње, а не број опсега, одређује квалитет.

Задатак апликације

Изаберите функцију и нека генерише тестове у четири категорије (нормално, ограничење, негативно, грешка) са свеобухватним упитом за генерисање теста; Нека конкретна очекивана вредност буде потврђена у сваком тесту. Затим покрените промпт за тражење рањивости за тестирање, предложите 5 малих мутација у коду и покрените тестове да бисте проверили које су ухватили. Додајте нови тест за најмање једну мутацију која није ухваћена и покажите да је сада у минусу.

контролна листа

  • [ ] Одштампао сам тестове на основу очекиваног/исправног понашања, а не кода.
  • [ ] Покрио сам нормалне, граничне, негативне и сценарије грешке.
  • [ ] Потврдио сам конкретну очекивану вредност у сваком тесту.
  • [ ] Тестирао сам граничне парове (одмах изнад-испод / мало изнад-испод).
  • [ ] Намерним разбијањем кода, потврдио сам да су тестови постали црвени.
  • [ ] Додао сам нови тест за неоткривене мутације.