TDD

Роберт Мартин предлагает использовать следующий алгоритм TDD:
«Сначала нужно добиться, чтобы код хоть как-то работал, и только потом улучшать его».

На практике эта рекомендация выглядит следующим образом:

  1. Написать модульный тест для какого-либо метода (на данный момент еще не реализованного). Вследствие того, что метод еще не реализован, тестовый проект даже не скомпилируется.
  2. Написать «заглушку» для этого метода. К примеру, если метод должен возвращать переменную типа boolean,
    то он должен содержать только строку вида «return false» (в случае, если при правильном выполнении метода должен быть возвращен true), то есть заглушка должна возвращать такое значение, чтобы тест
    «не проходил». Теперь тестовый проект компилируется, но тест по понятной причине не выполняется.
  3. Реализовать метод алгоритмически правильно, но не пытаться улучшить его — требуется просто сделать
    «чтобы работал». Убедиться, что все тесты проходят.
  4. Усовершенствовать код — привести к наиболее удобочитаемому виду, разбить метод на более мелкие части. Убедиться, что все тесты проходят.
  5. Перейти к реализации следующего метода.

 

Требования, предъявляемые к программному коду при разработке через тестирование

  • Код должен быть разделен на как можно более мелкие части
  • Должен выполняться принцип «один тест — одно действие», то есть один test case не должен проверять правильность выполнения более чем одного действия. Инициализация объектов должна производиться вне тестов.
  • Желательно выполнение принципа «один тест — один метод», то есть test case должен содержать 1-2 строки кода.
  • Должны быть соблюдены уровни абстракции классов программы, то есть логика программы не должна быть привязана к интерфейсу программы.
 

Преимущества разработки через тестирование

  • Отделение логики программного продукта от интерфейса пользователя
  • Как следствие из предыдущего пункта — упрощение процедуры повторного использования кода в других программных продуктах
  • Упрощение отладки, поддержки и доработки программного кода за счет разделения его на небольшие части
  • Меньшая вероятность неожиданного поведения программы

Опубликовано

в

от

Метки: