Підтримувати великі макетні дані важко і нереально. Ще складніше, коли структура бази даних зазнає змін.
Помилковий.
Тестування блоку не вимагає "великих" макетних даних. Для тестування сценаріїв потрібні достатньо глузливих даних і нічого більше.
Крім того, по-справжньому ледачі програмісти просять спеціалістів-предметників створити прості таблиці з різних тестових випадків. Просто проста електронна таблиця.
Тоді ледачий програміст пише простий скрипт для перетворення рядків електронних таблиць в одиниці тестових випадків. Це дуже просто, насправді.
Коли продукт розвивається, електронні таблиці тестових випадків оновлюються та створюються нові тестові одиниці. Робіть це постійно. Це справді працює.
Навіть з MVVM та можливістю перевірити GUI, для відтворення сценарію GUI потрібно багато коду.
Що? "Відтворити"?
Сенс TDD полягає в розробці речей для встановлення тестабельності (тест-драйв). Якщо графічний інтерфейс настільки складний, він повинен бути перероблений, щоб він був простішим і перевіреним. Простіше також означає швидше, більш доглянуте і гнучкіше. Але в основному простіше буде означати більш перевірений.
У мене є досвід, що TDD добре працює, якщо обмежити його простою бізнес-логікою. Однак складну бізнес-логіку важко перевірити, оскільки кількість комбінацій тесту (тестового простору) дуже велика.
Це може бути правдою.
Однак, попросити експертів з тематики надати основні тестові приклади у простій формі (як електронна таблиця) справді допомагає.
Електронні таблиці можуть стати досить великими. Але це добре, оскільки я використовував простий скрипт Python для перетворення електронних таблиць у тестові випадки.
І. Мені довелося писати деякі тестові випадки вручну, оскільки електронні таблиці були неповними.
Однак. Коли користувачі повідомили про "помилки", я просто запитав, який тестовий випадок у електронній таблиці був неправильним.
У той момент фахівці з питань теми або виправлять таблицю, або додадуть приклади, щоб пояснити, що повинно відбутися. Звіти про помилки - у багатьох випадках - можуть бути чітко визначені як проблема тестового випадку. Дійсно, з мого досвіду, визначення помилки як розбитого тестового випадку робить дискусію набагато, значно простішою.
Замість того, щоб слухати експертів, які намагаються пояснити надскладний бізнес-процес, експерти повинні наводити конкретні приклади цього процесу.
TDD вимагає, щоб вимоги були на 100% правильними. У таких випадках можна очікувати, що під час створення тестів будуть враховані суперечливі вимоги. Але проблема в тому, що це не так у складному сценарії.
Не використання TDD абсолютно зобов’язує, щоб вимоги були 100% правильними. Деякі стверджують, що TDD може терпіти неповні та мінливі вимоги, коли не-TDD підхід не може працювати з неповними вимогами.
Якщо ви не використовуєте TDD, суперечність виявляється пізно на етапі впровадження.
Якщо ви використовуєте TDD, суперечність виявляється раніше, коли код проходить деякі тести і не дає інших тестів. Дійсно, TDD дає вам доказ суперечності на початку процесу, задовго до впровадження (та аргументи під час тестування прийняття користувачем).
У вас є код, який проходить деякі тести, а інші не дає змоги. Ви дивитесь лише на ці тести і виявляєте суперечність. На практиці це спрацьовує дуже, дуже добре, тому що тепер користувачі мають сперечатися про суперечності та створювати послідовні, конкретні приклади бажаної поведінки.