(Часть 2) Моя первая игра в планирование: планирование первой итерации.
В предыдущей части мы остановились на создании и предварительной обработке историй пользователя. Был пройден один из важнейших этапов разработки по методологии экстремального программирования. Тем не менее, на этом игра в планирование ещё не закончена. На очереди планирование первой итерации. Первая итерация является ключевой в работе над проектом. Она позволит проанализировать правильность предварительных оценок и подкорректировать их при необходимости. В процессе итерационного планирования истории будут разбиты на задачи, вследствие чего могут быть выявлены подводные камни разрабатываемого участка системы, уточнены предварительные оценки трудозатрат и получен материал непосредственно для начала разработки.
Читать всё...
Учимся XP на лету
Начинаем экстремально мыслить
Дружите с первым пользователем вашего кода
В реальной работе очень важно в каждый момент осознавать правильность своих действий. Экстремальное программирование учит нас работать именно так. Механизм поддерживается несколькими видами обратной связи. Модульное тестирование является одним из них. Ведь правильно построенный тест - первый микропользователь вашего кода. А множество таких тестов, накопленных в процессе работы, будут говорить вам о том, что их конкретно не устраивает. Если вы угодите тестам, то, скорее всего, этому будет рад и заказчик. Хорошо написанный тест часто неявно контролирует архитектуру системы. Он является дополнительной точкой опоры, позволяющей двигаться в строго заданном направлении. Для примера рассмотрим ситуацию из практики.
Есть класс, который определяет путь к четырём файлам по заданным ключам в системном реестре. Был написан тест, который искусственно заносил данные в реестр и сверял подставные данные с полученными из класса. Написание кода не составило труда. Впоследствии оказалось, что не все существующие системы поддерживают указанные ключи. Необходимо использовать альтернативные пути реестра, в случае отсутствия базовых. Возник вопрос о тестировании описанной логики. Да, действительно, проверка наличия и чтение данных из существующего или альтернативного ключа, без теста не сложна. Но охота ли вам потом будет вручную записывать, а затем стирать ключи реестра, чтобы воссоздать все возможные комбинации реальной системы? И повторите ли вы этот подвиг второй раз, если что-то в требованиях или логике изменится? Ответ очевиден. Результатом будет выпуск непроверенного кода и, как следствие, системы в целом. Целесообразнее
добавить тестовые случаи и немного изменить существующие. Логика работы тестов проста. Сначала записывались базовые ключи в реестр, которые сверялись с полученными из класса, затем эти ключи стирались, а записывались альтернативные, и проверка повторялась. Третьим тестовым случаем было определение порядка приоритетности ключей, для этого записывались оба типа ключей: базовые и альтернативные. Содержание их было заведомо различно. Проверка проходила успешно, если исследуемый класс возвращал значение базовых ключей. После добавления таких тестов можно было безболезненно вносить изменения в рабочий класс. Отладка не понадобилась в принципе: всё было сделано автоматически.
Упражнение
В программе используются три типа файлов. Необходимо написать класс, который бы определял тип по характерному расширению. Начните с написания теста к этому классу. Представьте, что когда вы всё сделали, приехал заказчик и решил, что типы файлов должны определяться ещё по одному признаку: по первым 10 байтам файла. Для каждого типа файлов они специфичны. Вам ничего не остаётся, как признать, что желание клиента - закон, и исправить логику работы класса. Начните с изменения или добавления тестового случая.