Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development - разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелых выводов! Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой новой методики. В книге рассматриваются два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования.
Author(s): Бек Кент (Beck Kent)
Series: Библиотека программиста
Publisher: Питер
Year: 2003
Language: Russian
Commentary: увеличил контрастность, подчистил мусор, 600dpi
Pages: 224
Tags: Программирование
Предисловие 10
Храбрость 11
Благодарности 15
От издательства 16
Введение 17
Часть I. На примере денег 21
Глава 1. Мультивалютные деньги 22
Глава 2. Вырождающиеся объекты 29
Глава 3. Равенство для всех 32
Глава 4. Данные должны быть закрытыми 36
Глава 5. Поговорим о франках 39
Глава 6. Равенство для всех, вторая серия 42
Глава 7. Яблоки и апельсины 47
Глава 8. Создание объектов 49
Глава 9. Потребность в валюте 53
Глава 10. Избавление от двух разных версий times() 58
Глава 11. Корень всего зла 63
Глава 12. Сложение, наконец-то 66
Глава 13. Делаем реализацию реальной 71
Глава 14. Обмен валюты 76
Глава 15. Смешение валют 81
Глава 16. Абстракция, наконец-то! 85
Глава 17. Ретроспектива денежного примера 89
Что дальше? 89
Метафора 90
Использование JUnit 91
Метрики кода 92
Процесс 92
Качество тестов 93
Последний взгляд назад 95
Часть II. На примере xUnit 97
Глава 18. Первые шаги на пути к xUnit 98
Глава 19. Сервируем стол (метод setup) 104
Глава 20. Убираем со стола (метод tearDown) 108
Глава 21. Учет и контроль 112
Глава 22. Обработка несработавшего теста 115
Глава 23. Оформляем тесты в набор 118
Глава 24. Ретроспектива xUnit 123
Часть III. Паттерны для разработки через тестирование 125
Глава 25. Паттерны разработки, основанной на тестах 126
Тест 126
Изолированный тест (Isolated Test) 128
Список тестов (Test List) 129
Вначале тест (Test First) 131
Вначале оператор assert (Assert First) 132
Тестовые данные (Test Data) 134
Понятные данные (Evident Data) 135
Глава 26. Паттерны красной полосы 136
One Step Test (Тест одного шага) 136
Starter Test (Начальный тест) 137
Explanation Test (Объясняющий тест) 139
Learning Test (Тест для изучения) 139
Another Test (Еще один тест) 140
Regression Test (Регрессионный тест) 141
Break (Перерыв) 141
Do over (Начать сначала) 143
Cheap Desk, Nice Chair (Дешевый стол, хорошие кресла) 144
Глава 27. Паттерны тестирования 145
Дочерний тест (Child Test) 145
Mock Object (Поддельный объект) 146
Self Shunt (Самошунтирование) 147
Log String (Строка-журнал) 149
Crush Test Dummy (Тестирование обработки ошибок) 149
Broken Test (Сломанный тест) 151
Clean Check-in (Чистый выпускаемый код) 151
Глава 28. Паттерны зеленой полосы 153
Fake It (Подделка) 153
Triangulate (Триангуляция) 155
Obvious Implementation (Очевидная реализация) 156
One to Many (От одного ко многим) 157
Глава 29. Паттерны xllnit 159
Assertion 159
Fixture (Фикстура) 161
External Fixture (Внешняя фикстура) 163
Test Method (Тестовый метод) 164
Exception Test (Тест исключения) 166
All Tests (Все тесты) 166
Глава 30. Паттерны проектирования 168
Command (Команда) 170
Value Object (Объект-значение) 170
Null Object (Нуль-объект) 172
Template Method (Шаблонный метод) 173
Pluggable Object (Встраиваемый объект) 175
Pluggable Selector (Встраиваемый переключатель) 176
Factory Method (Фабричный метод) 178
Imposter (Самозванец) 179
Composite (Компоновщик) 180
Collecting Parameter (Накопление в параметре) 182
Singleton (Одиночка) 183
Глава 31. Рефакторинг 184
Reconcile Differences (Согласование различий) 184
Isolate Change (Изоляция изменений) 185
Migrate Data (Миграция данных) 186
Extract Method (Выделение метода) 188
Inline Method (Встраивание метода) 189
Extract Interface (Выделение интерфейса) 190
Move Method (Перемещение метода) 191
Method Object (Метод в объект) 192
Add Parameter (Добавление параметра) 193
Method Parameter to Constructor Parameter (Параметр метода в параметр конструктора) 193
Глава 32. Развитие навыков TDD 195
Насколько большими должны быть шаги? 195
Что не подлежит тестированию? 196
Как определить качество тестов? 196
Каким образом TDD ведет к созданию инфраструктур? 197
Сколько должно быть тестов? 198
Когда следует удалять тесты? 200
Каким образом язык программирования и среда разработки влияют на TDD? 201
Можно ли использовать TDD для разработки крупномасштабных систем? 201
Можно ли осуществлять разработку приложения исходя из тестов уровня приложения? 202
Как можно перейти к использованию TDD в середине работы над проектом? 203
Для кого предназначена методика TDD? 204
Зависит ли эффективность TDD от начальных условий? 205
Каким образом методика TDD связана с паттернами? 205
Почему TDD работает? 206
Что означает имя? 208
Как методика TDD связана с практиками экстремального программирования? 208
Нерешенные проблемы TDD 210
Послесловие 211
Приложение I. Диаграммы взаимовлияния 213
Обратная связь 214
Контроль над системой 215
Приложение II. Фибоначчи 217
Алфавитный указатель 220