об agile и tdd (программистское)
Dec. 29th, 2008 12:04 pmЭта запись будет интересна только программистам.
Свою точку зрения на Agile programming и TDD (Test-Driven Development), которую несколько раз в прошлом высказывал в комментариях, выношу в отдельную запись.
Agile, на мой взгляд - почти целиком вредная гиль. Даже в тех случаях, когда в рамках агиля говорят что-то разумное (а это случается, потому что агиль невероятно расплывчат и слабо-определен, будучи в основном феноменом маркетинга, и его можно повернуть в разные стороны), это все равно часто компрометируется съедающим мозг баззвордизмом и приводит к ердуне.
TDD я воспринимаю как крайний случай такой вообще говоря невероятно полезной штуки, как активное и тщательное тестирование (главным образом я говорю о юнит-тестах). Тесты - потрясающе полезная штука, когда их принимают всерьез; поддерживание юнит-тестов для всего вокруг высвобождает много времени и сил на осмысленные занятия, позволяет писать код смело, быстрее и свободнее, делает возможным активный рефакторинг.
TDD, как радикальный вид серьезного юнит-тестинга, на мой взгляд бывает очень полезен, но не всегда универсально применим. Я не убежден в этом до конца, но мне кажется (и встречались такие случаи), что есть проекты и ситуации, когда TDD просто "не идет", и лучше сначала заняться чем-то вроде зондирующего программирования: поиграть с несколькими основными возможностями, получить с помощью реального, пусть и очень простого и скелетного, кода лучшее представление о том, что мы собственно хотим сделать и какое поведение ожидаем от данного куска, а потом добавить к нему тесты. Если вместо этого силой тянуть TDD, может получиться медленно и более коряво. Так мне кажется (хотя опыта и наблюдений не так много, чтобы делать уверенные выводы). С другой стороны, несомненно есть ситуации, в которых TDD может быть полезен.
Я бы сказал, что активное и тщательное тестирование на порядок важнее выбора "TDD или не TDD".
Из-за того, что TDD часто представляют как часть agile (или extreme programming, предыдущей инкарнации той болезни, которая сейчас называет себя agile), литература по нему и энтузиасты его часто оказываются заражены агилевским баззвордизмом и радикализмом (т.е. считают, что нужно TDD всегда и везде, и тот, кто решил в каком-то конкретном случае написать сначала код, а потом тест к нему - всегда предатель и ренегат). Я же вижу интерес к тестированию как что-то, что здоровым образом выросло независимо от моды на всякие агили. У очень динамических с точки зрения типизации языков (perl, python, Smalltalk, Lisp итд.) еще с середины 90-х были развитые и полезные инфраструктуры для тестов, потому что в этих языках тесты ловят ошибки, которые в других языках ловит компилятор (а также и кучу других ошибок, конечно). Постепенно увлечение тестами перекинулось с этих языков на Джаву итд., без всяких агилей, которые нередко стремятся сейчас представить это как свое достижение.
Свою точку зрения на Agile programming и TDD (Test-Driven Development), которую несколько раз в прошлом высказывал в комментариях, выношу в отдельную запись.
Agile, на мой взгляд - почти целиком вредная гиль. Даже в тех случаях, когда в рамках агиля говорят что-то разумное (а это случается, потому что агиль невероятно расплывчат и слабо-определен, будучи в основном феноменом маркетинга, и его можно повернуть в разные стороны), это все равно часто компрометируется съедающим мозг баззвордизмом и приводит к ердуне.
TDD я воспринимаю как крайний случай такой вообще говоря невероятно полезной штуки, как активное и тщательное тестирование (главным образом я говорю о юнит-тестах). Тесты - потрясающе полезная штука, когда их принимают всерьез; поддерживание юнит-тестов для всего вокруг высвобождает много времени и сил на осмысленные занятия, позволяет писать код смело, быстрее и свободнее, делает возможным активный рефакторинг.
TDD, как радикальный вид серьезного юнит-тестинга, на мой взгляд бывает очень полезен, но не всегда универсально применим. Я не убежден в этом до конца, но мне кажется (и встречались такие случаи), что есть проекты и ситуации, когда TDD просто "не идет", и лучше сначала заняться чем-то вроде зондирующего программирования: поиграть с несколькими основными возможностями, получить с помощью реального, пусть и очень простого и скелетного, кода лучшее представление о том, что мы собственно хотим сделать и какое поведение ожидаем от данного куска, а потом добавить к нему тесты. Если вместо этого силой тянуть TDD, может получиться медленно и более коряво. Так мне кажется (хотя опыта и наблюдений не так много, чтобы делать уверенные выводы). С другой стороны, несомненно есть ситуации, в которых TDD может быть полезен.
Я бы сказал, что активное и тщательное тестирование на порядок важнее выбора "TDD или не TDD".
Из-за того, что TDD часто представляют как часть agile (или extreme programming, предыдущей инкарнации той болезни, которая сейчас называет себя agile), литература по нему и энтузиасты его часто оказываются заражены агилевским баззвордизмом и радикализмом (т.е. считают, что нужно TDD всегда и везде, и тот, кто решил в каком-то конкретном случае написать сначала код, а потом тест к нему - всегда предатель и ренегат). Я же вижу интерес к тестированию как что-то, что здоровым образом выросло независимо от моды на всякие агили. У очень динамических с точки зрения типизации языков (perl, python, Smalltalk, Lisp итд.) еще с середины 90-х были развитые и полезные инфраструктуры для тестов, потому что в этих языках тесты ловят ошибки, которые в других языках ловит компилятор (а также и кучу других ошибок, конечно). Постепенно увлечение тестами перекинулось с этих языков на Джаву итд., без всяких агилей, которые нередко стремятся сейчас представить это как свое достижение.
no subject
Date: 2008-12-29 10:32 am (UTC)Вредная - что? Гниль?
no subject
Date: 2008-12-29 10:34 am (UTC)no subject
Date: 2008-12-29 10:36 am (UTC)no subject
Date: 2008-12-29 10:37 am (UTC)no subject
Date: 2008-12-29 10:41 am (UTC)no subject
Date: 2008-12-29 10:44 am (UTC)no subject
Date: 2008-12-29 10:45 am (UTC)no subject
Date: 2008-12-29 11:07 am (UTC)no subject
Date: 2008-12-29 11:24 am (UTC)no subject
Date: 2008-12-29 11:37 am (UTC)no subject
Date: 2008-12-29 11:52 am (UTC)no subject
Date: 2008-12-29 11:58 am (UTC)С одной стороны - есть набор методологий и разнообразная жизнь. Подразумевается, что под конкретный проект всегда можно подобрать наиболее подходящую методологию, универсальных решений не бывает.
С другой стороны, практически не бывает универсальных людей, которые одинаково хорошо владеют всеми практиками, чтобы непредвзято выбирать в каждом конкретном случае - всегда человек тяготеет к какому-то определённому подходу и знает его лучше. Не говоря уже про маркетинговые и прочие денежные факторы, не дающие менеджеру развернуться.
Вот я например использовал всегда только что-то waterfall-образное, прибегая только к отдельным XP/agile практикам по обстановке и очень редко. Но это по большей части было обусловлено обстоятельствами и я понимаю, что по-настоящему я agile не знаю и подозреваю, что от этого сам выбираю не ту методологию, когда выбор возможен.
no subject
Date: 2008-12-29 12:56 pm (UTC)no subject
Date: 2008-12-29 01:21 pm (UTC)Но вот тут мы как-то разговаривали с кандидатом, который пришел из большой конторы, и в том числе очень подробно обсуждали с ним наш development process. В конце он сказал - "мне так нравится что у вас такой зрелый agile process!". Но позвольте, ответили мы, какой нафиг agile? Ну как же, вы же говорите, что у вас любой программист увидевший проблему в дизайне может все остановить, созвать митинг и попытаться с коллегами найти решение. Но ведь это же просто здравый смысл, сказали мы, никакой agile. А он и отвечает - да вы что, у нас бы надо было сообщить менеджеру чтобы он на следующем заседании steering committee обсудил бы проблему с архитектором и тот бы тогда подготовил презентацию для старшего архитектора и .. и бла-бла
Вот тогда я понял почему многие настолько хватаются за agile. Ну действительно, по сравнению с таким это действительно революция и лучшая вещь после sliced bread
no subject
Date: 2008-12-29 01:55 pm (UTC)но тут уж всё зависит от общей вменяемости высшего менеджмента
Agile
Date: 2008-12-29 01:55 pm (UTC)no subject
Date: 2008-12-29 02:21 pm (UTC)а можно "баззвордизм" перевести? 1 ссылка в гугле попалась, но мало помогла.
no subject
Date: 2008-12-29 02:23 pm (UTC)no subject
Date: 2008-12-29 03:13 pm (UTC)Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Не могли бы Вы пояснить, какой из этих пунктов вы считаете вредным и почему?
no subject
Date: 2008-12-29 03:30 pm (UTC)no subject
Date: 2008-12-29 03:41 pm (UTC)no subject
Date: 2008-12-29 06:10 pm (UTC)no subject
Date: 2008-12-29 06:24 pm (UTC)no subject
Date: 2008-12-29 06:47 pm (UTC)no subject
Date: 2008-12-29 07:09 pm (UTC)