Dec 9, 2011

Экстремальное программирование. Разработка через тестирование

Качество разработанных тестов оценивается методами:
  • Покрытие операторов кода (statement coverage)
  • Намеренное добавление дефекта (defect insertion)
Паттерны разработки основанной на тестах
  • Тест. Отговорка что на тесты нет времени не совсем коректна, так как приложение все равно тестируется, но руками. Но автоматические тесты намного быстрее! Кроме того тесты снижают уровень стресса
  • Изолированный тест (Isolated Test) - основная причина производительность
  • Список тестов (Test List)
  • Вначале тест (Test First)
  • Вначале оператор assert (Assert First)
  • Тестовые данные (Test Data)
  • Понятные данные (Evident Data). Иногда, если данные используются только в одном методе, для лучшей читабельности можно использовать магические числа
Паттерны красной полосы
  • One Test Step
  • Starter Test (Начальный тест)
  • Explanation Test (Объясняющий тест). Тесты могут служить для объяснения кода
  • Learning Test (Тест для обучения)
  • Another Test
  • Regression Test
  • Break
  • Do Over (Начать сначала). Иногда лучше начать заново, чем пытаться довести до ума кривой код
  • Cheap Desk, Nice Chear. Ну, в общем, хорошее кресло решает..
Паттерны тестирования
  • Дочерний тест (Child Test)
  • Mock Object
  • Self Shunt (Самошунтирование). Как можно убедиться что один объект корректно взаимодействует с другим? Можно заставить тестируемый объект взаимодействовать не с целевым объектом, а с тестом.
        def testNotification(self):
            self.count = 0
            result = TestResult()
            result.addListener(self)
            WasRun('testMethod').run(result)
            self.assertEqual(1, self.count)
    
        def startTest(self):
            self.count = self.count + 1
  • Log String (Строка журнал). Полезен когда важен порядок операций. Хорошо сочетается с Self Shunt. Объект-тест реализует методы шунтируемого интерфейса таким образом, что каждый из них добавляет строку в журнал, затем проверяется корректность этих записей.
  • Crush Test Dummy (Тестирование обработки ошибок). Применяется когда надо протестировать как отрабатывает код по обработке ошибки, возникновение которой маловероятно. Для этого создается фэйковый объект который вместо реальной работы генерирует исключение.
  • Broken Test
  • Clean Check-In
Паттерны зеленой полосы
  • Fake It (Подделка)
  • Triangulate
  • Obvious Implemetnation (Очевидная реализация)
  • One To Many (От одного ко многим). Как реализовать работу с коллекцией объектов? Сначала реализуется для одного объекта, затем модернизируется для работы с коллекцией. 
Паттерны xUnit
  • Assertion
  • Fixture
  • External Fixture. Ресурсы освобождаются в tearDown()
  • Test Method
  • Exception Test
  • All Tests

No comments: