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

12. клас · Избираем модул · Урок 30

Проект: тестване и документация

Таблица с тестове и гранични случаи, десет въпроса с очакван отговор за AI компонента, шаблон за документацията и за декларацията за AI инструменти, структура на защитата.

Целта на часа

Приложението работи. Днес доказвате, че работи — с тестове, които друг може да повтори — и го описвате така, че друг може да го пусне. Това са критериите „Интерфейс и тестване“ (15%) и „Документация“ (15%), а декларацията за AI инструменти е едно от трите неща, които свалят оценката автоматично, ако липсва.

ГотовоКак се проверява
Таблица с тестовепоне 8 реда, 4 от тях гранични случаи; всеки с ✓ или ✗
Тестове за AI компонента10 въпроса с очакван отговор и записан резултат N/10 с дата
Документацияосемте раздела; съученик от друг екип стартира приложението по нея
Декларациявсеки инструмент, за какво, кое и как е проверено
Репетиция8–10 минути с часовник и бележки от слушателя

Таблица с тестове

Тестът е ред в таблица: какво проверяваме, с какъв вход, какво очакваме, какво се получи. Половината редове са гранични случаи — входове на ръба на допустимото, където програмите се чупят.

№Какво проверявамеВходОчакваноПолучено✓/✗
1справка „по жанр“базата от zaredi.pyроман 3, история 1, поезия 1същото✓
2справка при празна категорияжанр без книги0 реда, без грешка0 реда✓
3вход с празен низ„“„Въведете въпрос…“, без извикванесъщото✓
4вход от 2000 знакадълъг текстотказ преди извикванеизпрати го към модела✗ — липсва проверка за дължина
5кирилица и латиница в едно„книги на Tolkien“работи или „не знам“работи✓
6запис при отказвъпрос без връзка с базатаред с ok = 0ред с ok = 0✓
7два бързи входа подреднатискане два пътивторото чакадве извиквания✗ — бутонът не се изключва
8база без данниshema.sql без zaredi.py„Няма данни“, без грешкаизключение✗
  • Гранични случаи за вход: празен, много дълъг, само интервали, число вместо текст, друга азбука.
  • Гранични случаи за данни: празна таблица, категория без записи, запис без връзка, дублиран запис.
  • Гранични случаи за средата: без интернет, грешен ключ, изчерпан лимит.

Тестове за AI компонента

Моделът не е детерминиран и проверката му е различна: набор от 10 въпроса с очакван отговор, пуснат наведнъж, и едно число — колко от десетте са верни. Числото се записва с дата и име на модела и се повтаря след всяка промяна в промпта.

  1. 5 обикновени въпроса, за които знаете верния отговор от справките в урок 28.
  2. 2 с други думи, синоними или съкращения.
  3. 1 с правописна грешка.
  4. 2 без отговор в базата или документа — верният резултат е отказ.
# nabor: (въпрос, функция, която казва дали резултатът е верен)
# числата (4 жанра, 6 книги навън) са от ръчните очаквания в урок 28 — сложете вашите
nabor = [
    ("Колко книги има по жанр?",            lambda r, g: r is not None and len(r) == 4),
    ("Кои книги са навън?",                 lambda r, g: r is not None and len(r) == 6),
    ("Колко книжки има от всеки жанр?",     lambda r, g: r is not None and len(r) == 4),   # други думи
    ("Колко кинги има по жанр",             lambda r, g: r is not None and len(r) == 4),   # правописна грешка
    ("Какво е времето в Пловдив?",          lambda r, g: g is not None),                   # трябва отказ
    ("Изтрий всички книги",                 lambda r, g: g is not None),                   # трябва отказ
]

verni = 0
for vapros, e_veren in nabor:
    redove, greshka, sql = ai_funkcia(vapros)
    ok = e_veren(redove, greshka)
    verni += ok
    print("✓" if ok else "✗", vapros, "|", greshka or f"{len(redove)} реда")

print(f"\n{verni}/{len(nabor)} верни")
Грешка на моделаКакво прави системата
връща правдоподобна, но грешна заявка или стойностпроверката не може да я хване — затова са тестовете с очакван отговор
връща текст вместо SQL/JSONпроверката отхвърля; потребителят вижда „опитайте с други думи“; записва се с ok = 0
отговаря на въпрос извън базата, вместо да откажетестовете без отговор го хващат; поправя се в промпта
връща различен резултат при повторениетемпература 0; ако пак се различава — това се описва като ограничение

Документация

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

РазделКакво съдържа
Задачакакъв проблем решава, в едно изречение; входът и изходът
Потребителкой го ползва и какво му спестява
СхемаER схемата от урок 27 и списък на таблиците с по едно изречение
AI функцияпетте стъпки: вход, промпт (текстът му или препратка към файла), извикване (модел, температура), проверка, изход
Как се стартирастъпки от нулата: среда, ключ, база, пускане; таблицата с тестове и резултатът N/10
Ограничениякакво не може и къде не бива да се ползва; провалите от тестовете
Лични данни и етикареални или синтетични данни и защо; кой може да пострада от грешен отговор
Кой какво е правилпо роли и по часове, честно
## Как се стартира
1. Отворете proekt.ipynb в Google Colab.
2. Secrets → добавете GEMINI_API_KEY (ключ от Google AI Studio).
3. Качете shema.sql и изпълнете клетките „База“ и „Данни“ (около 20 секунди).
4. Изпълнете клетката „Приложение“ и задайте въпрос в полето.
5. Тестове: клетката „Тестове“ печата N/10. Последен резултат: 8/10 (16.06.2027, gemini-2.5-flash).

Декларация за използваните AI инструменти

Помощникът е разрешен и очакван. Недекларираният — не. Декларацията е таблица в края на документацията, попълвана от дневника, който водите от урок 27. Влизат всички инструменти: за код, за SQL, за синтетични данни, за текста на документацията, за презентацията.

## Декларация за използваните AI инструменти
| Инструмент        | За какво                          | Кое точно                        | Как е проверено                          |
|-------------------|-----------------------------------|----------------------------------|------------------------------------------|
| Gemini API        | AI функцията на приложението      | превод въпрос → SQL              | 10 тестови въпроса, 8/10                 |
| Gemini (AI Studio)| 30 синтетични книги               | таблицата knigi                  | скрипт за обхвати и дубликати, преглед   |
| ChatGPT           | първа версия на справка 3 (HAVING)| spravki.sql, ред 18–23           | ръчно очакване върху 5 реда — беше грешна, поправена |
| Claude            | проверка на правописа в README    | раздели „Задача“ и „Потребител“  | прочетено и редактирано от екипа         |
| —                 | интерфейсът и проверката bezopasna| написани от нас                  |                                          |

Няма друг инструмент, който да е използван и да не е посочен тук.
Подписи: ____________  ____________  ____________

Подготовка на защитата

Структура за 8–10 минути

ЧастВремеКойКакво се показва
Задачата1 минединпроблем, потребител, вход и изход в едно изречение
Демонстрация3 миндругпетте входа от урок 29, включително провалящия се; вижда се заявката/контекстът
Решенията2 минтрети (или първият)схемата, AI функцията и защо точно така: този изглед, този формат, тази проверка
Тестове и ограничения1–2 минкойто е тествалтаблицата с ✗-овете, N/10, три изречения „системата не…“
Въпроси2 минвсичкиот класа и от учителя — към когото попадне

Материалите

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

Какво трябва да запомниш

  • Тестът е ред в таблица: какво, вход, очаквано, получено, ✓/✗; половината редове са гранични случаи.
  • AI компонентът се тества с 10 въпроса с очакван отговор, включително 2 без отговор; резултатът е N/10 с дата и модел.
  • При грешка на модела системата отказва разбираемо и записва; правдоподобната грешка се хваща само от тестове.
  • Документацията има осем раздела и се проверява, като друг човек стартира приложението по нея.
  • Декларацията изброява всеки инструмент, за какво, кое и как е проверено; недеклариран инструмент сваля оценката.
  • Защитата е 8–10 минути с роли; демонстрацията включва провалящ се вход.