XP Тема 4 eXtreme Programming

advertisement
Тема 4
XP
eXtreme Programming
Тест – это процедура, которая позволяет
либо подтвердить, либо опровергнуть
работоспособность кода.
Тесты должны быть изолированы, т.е.
результаты одного теста не должны влиять
на другие тесты. Отсюда появляется
возможность любой последовательности
выполнения тестов.
XP
«Никогда не делайте шага вперед до тех пор,
пока не узнаете, в каком месте ваша нога
должна коснуться земли»
Ведется список всех задач, которые требуется
решить (для каждой задачи пишется тест).
Отдельно ведется список задач для текущего
сеанса программирования.
XP
Для более тщательного рассмотрения задачи
тест пишется вначале. В результате:
снижается уровень стресса;
 лучше контролируется объем работ;
 лучше продумывается интерфейс
использования.

XP
При написании теста в первую очередь
следует написать оператор assert. Это
позволяет:
Определить, частью чего должна стать новая
функциональность
 Какие имена следует использовать
 Какой результат следует считать правильным
 Как этот результат проверить
 Какие другие виды тестов следует написать

XP
Используйте данные, которые делают тест
простым в прочтении и понимании.



если в разных местах теста используются разные
данные, разница должна быть осмысленной;
Не следует писать тест для обработки 10
элементов, если ту же функциональность можно
получить с помощью 3-х элементов;
Попытайтесь не использовать одну и ту же
константу для обозначения двух разных понятий.
XP
В тесте должна быть осуществлена проверка
соответствия ожидаемого и реально
полученного результата.
Это делает тест понятным для других
разработчиков и способствует пониманию,
что нужно запрограммировать.
XP
Какой тест из списка выбрать для
выполнения в конкретный момент времени?
Тот, который чему-либо научит и который
можно легко реализовать (за один шаг).
XP
С чего начать формировать список тестов?
Начните с тестирования варианта операции,
которая не подразумевает выполнение
каких-либо серьезных и осмысленных
действий – лучше начать с простых и
предварительных тестов.
XP
Для любых объяснений используйте тесты и
спрашивайте тесты у тех, кто пытается вам
что-либо объяснить.
XP
В случае использования программного
обеспечения стороннего разработчика
пишутся тесты для изучения.
Цель – убедиться, что ваше понимание
работы того программного обеспечения
совпадает с действительностью.
XP
В процессе обсуждения некоторой темы
может возникнуть идея относительно
совсем другой задачи.
Нельзя отвлекаться от основной темы, но
нужно записать в список задач новую идею.
XP
Если в программе обнаружен дефект, надо
написать самый маленький из всех
возможных тестов, который не срабатывает,
и восстановить его работоспособность.
XP
Как заставить работать тест, который
оказался слишком большим по объему?
Напишите тест меньшего размера, который
представляет собой часть большого теста.
XP
Как выполнять тестирование объекта,
который базируется на сложном и
тяжеловесном ресурсе, например, на базе
данных?
Создайте поддельную версию ресурса,
который будет возвращать константы.
XP
Каким образом можно убедиться в том, что
один объект корректно взаимодействует с
другим?
Заставьте
тестируемый
объект
взаимодействовать не с целевым объектом,
а с тестом.
XP
Каким образом можно убедиться в том, что
обращение у методам осуществляется в
правильном порядке?
Создайте строку, используйте ее в качестве
журнала (каждый раз при обращении к
методу добавляйте в нее некоторое
символьное сообщение). Далее ее можно
будет сравнить с ожидаемой
последовательностью сообщений.
XP
Каким образом можно протестировать работу
кода, обращение к которому происходит в
случае ошибки, возникновение которой
маловероятно? (Например, ошибка
переполнения диска).
Создайте специальный объект, который
вместо реальной работы генерирует
исключение.
XP
Как следует завершить сеанс
программирования, чтобы на следующий
день долго не вспоминать, на чем
произошла остановка?
Оставьте последний тест неработающим.
XP
Когда считается, что интеграция выполнена
успешно?
Когда все тесты сработали.
Если этого не произошло, то требуется либо
отказаться от всех новых изменений, либо
переделать всю работу и снова осуществить
интеграцию.
XP
Если есть сломанный тест, какой должна
быть его первая реализация?
Сделайте так, чтобы тестируемый метод
возвращал константу. После того, как тест
начал срабатывать, постепенно
трансформируйте константу в выражение с
использованием переменных.
XP
Как сформировать абстракцию при помощи
тестов?
Делайте код абстрактным только в случае,
если у вас есть два или большее количество
примеров.
Например,
assertEquals(4,plus(3,1));
Начальная реализация может быть:
int plus(int a, int b) {return 4;}
При добавлении еще одного теста (7=4+3) можно сделать метод plus
абстрактным.
XP
Для простых и очевидных операций можно
сразу реализовывать код корректно.
Опасно использовать тогда, когда часто при
использовании очевидной реализации вы
сталкиваетесь в «красной полосой» при
тестировании.
XP
Как реализовать операцию, которая работает
с коллекцией объектов?
Сначала реализуйте эту операцию в
отношении одного объекта, затем
модернизируйте ее для работы с
коллекцией этих объектов.
XP
Что делать, если выполнение некоторой
операции представляет собой нечто более
сложное, чем простое обращение к методу?
Создайте объект, соответствующий этой
операции, и обратитесь к этому объекту
(например, через метод run).
XP
Каждая операция должна возвращать новый
объект. Исходный объект должен остаться
неизменным.
XP
Каким образом реализовать специальные
случаи использования объектов?
Создать специальный объект, реализующий
специальный случай. Он должен обладать
тем же интерфейсом, что и обычный
объект, но вести себя он должен
специальным образом.
XP
Каким образом можно запрограммировать
инвариантную последовательность
операций, обеспечив при этом возможность
модификации или замены отдельных
действий в будущем?
Напишите метод, который реализуется
исключительно в терминах других методов.
XP
Каким образом можно выразить несколько
разных вариантов поведения кода?
Если встречаются одинаковые проверки, то
их реализуют в виде отдельного
встраиваемого объекта. Который обладает
несколькими реализациями.
XP
Как обеспечить отличающееся поведение для
разных экземпляров одного и того же
класса?
Сохранить имя метода в переменной и
динамически обращайтесь к этому методу.
XP
Как лучше всего создавать объекты в случае,
если мы хотим обеспечить гибкость при
создании объектов?
Вместо использования конструктора создайте
объект внутри специального метода.
XP
Каким образом можно добавить в программу
новую вариацию некоторой
функциональности?
Создайте новый объект с точно таким же
интерфейсом, как и существующий объект,
но с отличающейся реализацией.
XP
Каким образом лучше реализовать объект,
чье поведение является композицией
функций некоторого набора других
объектов?
Заставьте этот объект вести себя подобно
тому, как ведут себя отдельные объекты,
входящие в набор.
XP
Каким образом вы можете сформировать
результат операции, если она
распределена между несколькими
объектами?
Используйте параметр, в котором будут
накапливаться результаты операции.
XP
Download