Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 20

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

Как се пишат тестове за система, чийто отговор се променя: фалшив модел за логиката, проверки по свойства за отговорите и златен набор.

Тестът, който не работи тук

Обичайният модулен тест сравнява резултат с очаквана стойност. При езиков модел това е безсмислено — един и същ вход дава различен текст, а и добрият отговор може да е формулиран по десет начина.

Обикновен кодСистема с модел
Изходедин и същразличен всеки път
Проверкаравенствосвойства на отговора
Проваледнозначенпонякога граничен
Скоростмилисекундисекунди и пари

Разделете двете

Логиката около модела (търсене, права, лимити, запис, разчитане) е обикновен код и се тества обикновено. Само самият отговор изисква друг подход.

Фалшив модел

Фалшив клиент (fake / stub)

Заместител на клиента към модела, който връща предварително зададен отговор, без да излиза в мрежата.

С него се тества цялата верига без цена и без несигурност: правилно ли е сглобен промптът, записва ли се разговорът, обработват ли се грешките, спазва ли се лимитът.

  • Фалшив клиент, който връща фиксиран текст → тества се потокът.
  • Фалшив клиент, който хвърля 429 → тества се повторният опит.
  • Фалшив клиент, който връща невалиден JSON → тества се проверката.
  • Фалшив клиент, който се бави 40 секунди → тества се таймаутът.

Оттук идва слоят от урок 15

Ако извикванията са разпръснати из целия проект, фалшив клиент не може да се вмъкне. Отделеният слой прави тестването възможно.

Проверки по свойства

За самия отговор не проверяваме текста, а неговите свойства:

СвойствоПроверкаНадеждност
Съдържа ключова стойност„7:45“ е в отговорависока
Валиден форматразчита се като JSON по схемависока
Признава незнаниесъдържа договорената фразависока
Посочен източникима цитат в квадратни скобивисока
Дължина и езикпод 200 думи, на българскивисока
Не съдържа забраненоняма лични данни, няма обидни думисредна
Основано на текстаоценка от модел-съдиясредна

Праг вместо равенство

Тестът за качество не е „минава / не минава“ за един въпрос, а дял минали за целия набор: „поне 17 от 20“. Отделен въпрос може да се провали случайно; спад на целия набор е сигнал.

Златен набор

Златен набор

Фиксиран списък от входове с приети отговори или свойства, който не се променя, докато настройвате системата.

  1. 20–50 реални случая, включително гранични и такива без отговор.
  2. За всеки — проверка, която може да се изпълни автоматично.
  3. Пуска се преди всяка промяна и след нея.
  4. Резултатът се записва с дата, версия на промпта и версия на модела.
  5. Спад под договорения праг спира промяната.

Температурата при тестване

За тестовете температурата се сваля до 0. Останалата разлика между пусканията идва от самата услуга и е добре да се вижда — пуснете набора три пъти и вижте разсейването, преди да обявите праг.

Цената на тестовете

  • Тестовете с фалшив модел са безплатни и бързи — те са мнозинството.
  • Тестовете с истински модел струват пари и се пускат по-рядко: преди пускане в употреба, не при всяко записване на файл.
  • Кеширайте отговорите на златния набор, за да сравнявате без ново извикване.