(Это не вопрос для изучения достоинств TDD. Есть и другие места для таких обсуждений. Заранее спасибо.)
Я сталкивался со слишком многими разработчиками, которые являются новичками в технике, которые также сообщают о неудовлетворенности разработкой, управляемой тестированием, и NUnit.
Я слышу негативные комментарии, такие как:
" Мне не нравится NUnit. Я пробовал год назад, , но я забыл, как его использовать . Давайте просто использовать это приложение Windows Form, я просто вместо этого я написал ad-hoc как тестовый комплект. В любом случае, тестовый код - это одноразовый код, в чем разница? В любом случае, мой способ работал достаточно хорошо в прошлом. "
" У меня есть оговорки по поводу TDD . По нашему последнему проекту (который был мой первый и единственный опыт работы с TDD , между прочим ), мы даже не знаем, что это за дизайн. "
«Больше кодовых комментариев ПЛОХО? Вы с ума сошли? У меня действительно есть работа, если вы не против». (Из старой школы больше комментариев - лучшие комментарии, и вы никогда не можете иметь слишком много комментариев.)
Когда новичок жалуется, что якобы TDD «не сработал» к их удовлетворению в их первом в мире проекте с использованием TDD, действительно ли TDD провалил их , или это сам разработчик чьи навыки еще не достаточны, чтобы получить хорошие результаты ?
И как я могу сообщить, что они не ненавидят меня за это?
Суть вопроса в том, что можно дипломатическим образом сообщить разработчикам, чтобы побудить их более честно оценивать свои зарождающиеся и недостаточные возможности с помощью новых технологий разработки, не подвергая опасности наши важные рабочие отношения?
Как правило, многие разработчики явно еще не обладают рабочим мастерством многих важных элементов TDD, чтобы очень хорошо справляться с ним, когда они находятся на своем самом первом проекте.
Например, типично, что жалобы в сообществе разработчиков, с которыми я разговаривал:
Никогда даже не пытался посмотреть или запомнить список запахов кода.
Никогда даже не пытались изучать каталог рефакторингов, и они никогда не практиковали ни один из них ни в реальных проектах, ни в игрушечных проектах для обучения. Для некоторых людей там может быть гораздо больше ООП, чтобы просто научиться проводить рефакторинг очень хорошо. Рефакторинг - это гораздо больше, чем просто «метод переименования» и «переменная переименования», которые отображаются как элементы в меню рефакторинга Visual Studio 2005.
Никогда даже не пытался изучать или участвовать в реальных проектах, реализованных с использованием Emergent Design (посредством рефакторинга), по сравнению с выполнением всего проекта с использованием дизайна заранее, по сравнению с целым проектом, написавшим модульные тесты только после написания кода и знание различий, компромиссов и применимости между ними.
Кажется, они все использовали NUnit, один раз , так что, что бы они ни делали с ним, это был TDD, черт возьми, они, кажется, думают. Наличие NUnit или модульных тестов просто не подразумевает TDD, но они еще недостаточно понимают, чтобы даже это знать.
Это умные люди. Разработчики умные люди, потому что это бар для входа на всю профессию. В противном случае вы не можете быть в оккупации слишком долго. Конечно, они могли бы понять это, если бы какое-то время применили себя для изучения этих материалов.
Как люди могут честно сказать себе, что методология слаба, когда их сумма опыта и знаний явно слишком слаба, чтобы можно было даже оценить методологию или ее результаты?
И все же они ... Это самооборонительное поведение, я считаю. Или это лень. Если вы даже не можете назвать три рефакторинга из каталога книги Рефакторинга Фаулера, или если вы не можете назвать несколько запахов кода, вы новичок в рефакторинге, а также, вероятно, и вся методология TDD, и ваша так называемая 1 или 2 опыта проекта явно недостаточно.
Что я могу сказать людям или на какие материалы я могу обратить внимание людей, чтобы заставить их делать то, что нужно, чтобы узнать гораздо больше о навыках, от которых зависит успех TDD, например:
- модульное тестирование,
- рефакторинг,
- шаблонов проектирования,
- ОО дизайн и анализ?
Есть целые книги на каждую из этих тем, некоторые очень хорошие. Может быть, есть и более простые методы обучения? Я могу учить людей на собственном примере, но мое собственное время для них ограничено, и, кроме того, я еще не являюсь черным поясом во всех этих техниках.
Кроме того, они идут вместе. Они не очень хорошо работают друг без друга. Модульное тестирование и рефакторинг идут вместе, как арахисовое масло и желе. Если вы не можете выполнить модульное тестирование, то с рефакторингом у вас наверняка не будет очень хороших результатов !! (Спросите меня, почему, если вы еще не знаете, я с удовольствием объясню это новым людям.)
Также жизненно важно, чтобы что бы я ни делал или говорил, чтобы оно не имело обратной силы:
Я не должен отталкивать моих коллег от концепций TDD ; и более того, я не должен отталкивать своих коллег от меня. Мне придется работать с ними каждую неделю в течение еще многих лет.
Особенно трудно не огорчать других давних старших разработчиков, которые уже зарекомендовали себя как высококвалифицированные в других аспектах программирования. Они по праву гордятся своими прошлыми достижениями, но их эго или их самооценка владения всеми вещами в программировании могут быть почти непреодолимыми, без ущерба для их чувств. Некоторые старшие разработчики не готовы признать, что они не знают каких-то более новых методов, которым они должны научиться у кого-то еще. Старшие разработчики могут более привыкнуть и чувствовать себя комфортно в качестве экспертов, когда дело доходит до программирования, и иногда они требуют, чтобы их считали таковыми, даже если это совершенно нереально, когда дело доходит до TDD и связанных с ним методов и технологий.
Я с радостью сообщаю, что одним из способов добиться приличного успеха в том, чтобы обернуть одного из наших постоянных "противников" при написании структурированных автоматических модульных тестов, является использование парного программирования с ними, один на один. Я полагаю, что парное программирование дает слушателям несколько реальных примеров и опыта, а также непосредственное руководство более опытным и знающим практиком.
Но парного программирования недостаточно. Есть еще много рефакторингов, запахов кода, концепций ООП и концепций OOD & A, которые они должны изучить, и я не могу научить их всех в одном проекте, даже близко.