Как мне помогло модульное тестирование.
Возникла задача сохранения позиций и размеров окон между сессиями. Для этого потребовалось считывать задействованные атрибуты форм и контролов с последующей записью в системном реестре. Правила объектно-ориентированного программирования подсказали, что лучше для этой задачи выделить специальный класс. Так был создан класс WindowStatePersistence, на вход которого передавались ссылка на главную форму приложения и путь к ключу реестра, где будет сохранена информация. Казалось бы, ничего сложного в этом нет, но заставить себя писать модульные тесты всё равно пришлось. Благо, что форма в .Net не обязательно должна отображаться. Это позволило использовать класс Form прямо в тестовых случаях. Первым тестом была проверка сохранения позиции и размера главной формы относительно рабочего стола. Для этого создавался объект класса Form, заполнялось свойство DesctopBounds вымышленными данными. Этот объект
передавался классу, отвечающему за сохранение, и инициировалась сама процедура сохранения. Затем создавалась ещё одна форма и производилась процедура считывания. Заключающей была обычная операция сравнения заданной позиции с восстановленной. Ошибки не заставили себя долго ждать, но благодаря наличию модульного теста, они были мгновенно выявлены и исправлены!
Историю поведал Александр Федоренко.
Изучаем методики XP
Представление приёмочных тестов.
В предыдущем уроке мы рассмотрели написание историй пользователя. Но один вопрос остался открытым: "Как определить, что история выполнена именно в том объёме, который требуется заказчику?" В экстремальном программировании наряду с историями пользователя для сбора требований применяются и приёмочные тесты. Они, как никто другой, своевременно укажут на концептуальные ошибки в программе и наметят кратковременные цели для программистов. Приёмочные тесты позволяют заказчику следить за реальностью своих ожиданий и контролировать как новые особенности программы, так и реализованные ранее. Это хорошо работает благодаря накоплению приёмочных тестов и периодическому их выполнению. Рекомендуется строить тесты автоматизированными, хотя для начала достаточным будет формализовать тестовый случай или описать последовательность действий и ожидаемый результат. Каждая история пользователя или, по крайней мере,
включённые в очередную итерацию, должны быть дополнены одним или несколькими приёмочными тестами в простом словесном исполнении. Например, история звучит так: "Сформировать бланк заказа на основе выбранных клиентом товаров, указав их перечень с ценой, количеством и суммарной стоимостью всего заказа". Тест может быть записан как: "Добавить три единицы одного товара, две единицы другого и четыре третьего. Проверить соответствие позиций товара, их количества и стоимости в получившемся заказе". Приёмочные тесты, как и тесты модулей, должны быть созданы до начала работы над конкретной историей. Это может быть как момент после создания истории, так и следующая встреча с заказчиком.
Упражнение.
Придумать максимальное число независимых тестовых случаев с возможностью дальнейшей автоматизации для следующей истории: "Заполнение определённого бланка договора данными клиента, такими как фамилия, имя, адрес, банковские реквизиты".
Адресуйте свои решения нам, lessons@xprogramming.com.ua.
Будем рады увидеть не только их, но и ваши отзывы и пожелания.