Ввиду того, что на конференции появилось много очень вопросов по моему докладу, хочу сделать небольшое дополнение. Общий смысл будет таков – необходимо воспринимать мой (да и Павла тоже) доклад именно в рамках TDD, а не как список тезисов правильного ООП. Может быть я поступил неправильно, что в самом начале под-темы называл выводы, а потом показывал, откуда они взялись. Многие кроме этих вывовов для себя ничего не уяснили и совершенно потеряли контекст доклада.
1) Психологический фактор в вопросе о целесообразности.
Можно опустить все факторы, которые говорят о том, что количество ошибок падает, их легче искать, что дизайн получается лучше и все такое. Но вот то, что общее настроение разработчика улучшается – это факт и очень важный. Не зря Павел начал свой доклад с этого. С TDD появляется уверенность, что твоя работа выполнена действительно на должном уровне, и все действительно работает. Именно это состояние называют Test Infected. Сейчас меня бросает в дрожь, если я не вижу зеленой полосы дольше 15 минут при разработке чего-либо. Уверенность в коде и в себе – это и есть болезнь тестами. Может мне не хватает слов, чтобы объяснить, это нужно испытать каждому на себе и сравнить свое состояние до и после. Я если пока не понятно – то как говорится, приходите, когда найдете настоящую работу.
2) TDD – это самый легкий способ находить места наиболее сильных зависимостей между классами.
Так уж повелось, что статические методы, наследование и смесь различных ролей в одном классе – самые явные признаки зависимостей, и тесты показывают это очень явно ростом размера фикстур и замедлением. Я не хотел сказать, что нужно отказываться от наследования. Вовсе нет. Пользуйтесь на здоровье. Но как только в иерархии появляются зависимости от внешних ресурсов – это признак того, что скоро иерархию придется ломать. То же самое касается и статических методов. Я кстати об этом говорил в самом начале своего второго доклада.
Еще я очень рекомендую прочитать вот эту статейку – в ней перечислены 11 принципов, которые лежат в основе объектной парадигмы и ООП вообще:
http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfObjectOrientedDesign
Я думаю, что после этой статьи и разбора каждого принципа по отдельности вопросов по целесообразности тестирования будет намного меньше.
-~{}~ 18.05.05 12:11:
3) Ну и наконец, я обещал многим книги и ссылки. Решил, что пока можно их выложить именно сюда.
Сначала книги:
* ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ… ВЫСТРЕЛИТЬ СЕБЕ В НОГУ
Правила программирования на Си и Си++
Ален И. Голуб.
Как писать качественный код. Многие вещи спорны и уже устарели, но все равно книга
очень полезная.
Рекомендуется.
* Fowler - Refactoring_Improving the Design of Existing Code.
М. Фаулер - Рефакторинг. Есть на русском языке. У нас есть в печатном виде.
Рекомендую преобрести в личное пользование, благо сейчас она сильно подешевела.
Обязательно к прочтению.
* Приемы объектно-ориентированного проектирования: паттерны проектирования by Э.Гамма и др. (GoF).
обязательно к прочтению. У нас есть в печатном и электронном виде.
* М. Фаулер - Patterns of Enterprise Application Architecture. На русском уже есть перевод,
но я не знаю, как он называется. На books.ru по-любому есть. У нас есть в оригинале печатный вариант.
Обязательно к прочтению.
* Экстремальное программироваие - целая серия различных авторов, но пока хватит:
* Экстремальное программирование by Кент Бек.
* Экстремальное программирование: с первых шагов и до победного конца by Кен Ауэр, Рой Миллер.
Обе очень рекомендуются.
* Экстремальное программирование - разработка через тестирование. К.Бек.
Введение в автоматизированное модульное тестирование. Обязательно к прочтению.
* JUnit in Action - автора не помню. Одна из первых книг, которые мы читали про TDD. Очень доходчивые примеры. Очень рекомендуется, несмотря на то, что написана для Java.
* Working Effectively with Legacy Code
by M. Feathers – рефакторинг кода на пути к pure TDD. Очень рекомендуется для тех, у кого сложное наследие.
* JUnit Recipes by J.B.Rainsberger – сборник рецептов по написанию модульных тестов. Очень рекомендуется, хотя и для Java.
* Domain Driven Design Tackling Complexity In The Heart Of Software by Eric Evans - больше книга по бизнес-моделированию, однако очень ценная как сборник приеров использования шаблонов проектирования в разработке бизнес-проектов. Требует серьезных навыков ООП.Очень рекомендуется.
* Горький вкус Java. Брюс Тейт. Очень рекомендуется, особенно глава I и глава III. Введение в анти-паттерны. Несмотря на то, что написана для Java - применимо к любому другому языку.
* Pattern-Oriented Analysis and Design: Composing Patterns to Design Software Systems
by Sherif M. Yacoub, Hany H. Ammar. Ну это чтобы вообще крутым стать
Очень рекомендуется.
* Object Design: Roles, Responsibilities, and Collaborations
by Rebecca Wirfs-Brock, Alan McKean - сам еще не читал. Говорят, что очень полезная в деле совершенствования ООП знаний.
Теперь ссылки:
http://www.sitepoint.com/forums/showthread.php?t=261656 – отдельная тема на Sitepoint.com, посвященная ссылкам на источники по TDD.
http://martinfowler.com/articles.html
http://www.objectmentor.com/resources/articleIndex
http://www.xprogramming.com/XP_links.htm
http://wact.sf.net
http://simpletest.sf.net