Как сделать младших программистов писать тесты?

У нас есть младший программист, который просто не пишет достаточно тестов.
Я должен называть его каждые два часа, "ты написал тесты?"
Мы пробовали:

  • Показывая, что дизайн становится проще
  • Показывать, что это предотвращает дефекты.
  • Сделать это эго, говоря, что только плохие программисты не
  • В этот уик-энд 2 участника команды должны были приступить к работе, потому что у его кода была ссылка NULL, и он не тестировал его.

Моя работа требует высококачественного стабильного кода, и обычно каждый получает его, и нет необходимости проходить тесты. Мы знаем, что можем заставить его писать тесты, но мы все знаем, что полезные тесты - это те, которые были написаны, когда вы в нее входите.

Знаете ли вы больше мотивов?

Ответ 1

Это одна из самых сложных вещей. Получение ваших людей, чтобы получить его.

Иногда один из лучших способов помочь программистам младшего уровня "получить его" и выучить правильные методы от пожилых людей - это сделать пару парных программ.

Попробуйте следующее: в предстоящем проекте, пара младшего парня с собой или другим старшим программистом. Они должны работать вместе, поочередно "управляя" (будучи одним из них на клавиатуре) и "коучинг" (глядя через плечо водителя и указывая на предложения, ошибки и т.д.). Это может показаться пустой тратой ресурсов, но вы найдете:

  • То, что эти ребята вместе могут генерировать код очень быстро и качественно.
  • Если ваш младший парень учится достаточно, чтобы "получить его" с старшим парнем, направляющим его по правильному пути (например, "Хорошо, теперь, прежде чем мы продолжим, давайте писать при тестировании для этой функции".) Это будет хорошо стоит ресурсы, которые вы передаете ему.

Возможно, также, чтобы кто-то из вашей группы дал Unit Testing 101 презентацию Кейт Роудс, я думаю, что это отличный способ заставить людей взволновать тестирование, если доставлено хорошо.

Еще одна вещь, которую вы можете сделать, это заставить вашего младшего разработчика использовать Bowling Game Kata, который поможет им изучить Test Driven Development. Он находится в java, но может быть легко адаптирован к любому языку.

Ответ 2

Проведите проверку кода перед каждой фиксацией (даже если это 1 минута "Я изменил это имя переменной" ), и как часть обзора кода просмотрите все модульные тесты.

Не отключайте фиксацию до тех пор, пока тесты не будут выполнены.

(Кроме того, если его работа не была проверена - почему это было в производстве, в первую очередь? Если оно не проверено, не впускайте его, тогда вам не придется работать в выходные дни)

Ответ 3

Для себя я начал настаивать на том, что каждая ошибка, которую я нахожу и исправляю, выражается как тест:

  • "Хммм, это не так..."
  • Найти возможную проблему
  • Напишите тест, покажите, что сбой кода
  • Исправить проблему
  • Покажите, что новый код проходит
  • Петля, если исходная проблема сохраняется

Я пытаюсь сделать это даже в то время, когда ударяю, и я делаю примерно в то же время, только с частичным набором тестов уже на месте.

(Я не живу в среде коммерческого программирования и часто являюсь единственным кодером, работающим над конкретным проектом.)

Ответ 4

Представьте, что я макет программист, которого зовут... Марко. Представьте себе, что я окончил школу не так давно, и мне никогда не приходилось писать тесты. Представьте, что я работаю в компании, которая на самом деле не применяет или не требует этого. ОК? хорошо! Теперь представьте себе, что компания переключается на использование тестов, и они пытаются заставить меня присоединиться к этому. Я дам несколько мерзкую реакцию на упомянутые до сих пор предметы, как если бы я не проводил никаких исследований по этому вопросу.

Пусть это началось с создателя:

Показывается, что дизайн упрощается.

Как писать больше, сделать вещи проще. Теперь мне нужно будет следить за тем, чтобы получить больше дел и т.д. Это осложняет ситуацию, если вы спросите меня. Дайте мне подробные сведения.

Показывает, что это предотвращает дефекты.

Я знаю это. Вот почему они называются тестами. Мой код хорош, и я проверил его на наличие проблем, поэтому я не вижу, где эти тесты помогут.

Сделать это эго, говорящего, что только плохие программисты этого не делают.

Ой, поэтому вы думаете, что я плохой программист, потому что я не делаю так много использованного тестирования. Я оскорблен и вас раздражает. Я бы предпочел оказать помощь и поддержку, чем высказывания.

@Justin Standard: при запуске новой пары propect младший парень с собой или другим старшим программистом.

О, это так важно, что ресурсы будут потрачены, чтобы убедиться, что я вижу, как дела обстоят, и помогите мне в том, как все делается. Это полезно, и я могу просто начать делать это больше.

@Justin Standard: прочитайте Unit Testing 101 презентация Кейт Роудс.

А, это была интересная презентация, и это заставило меня задуматься о тестировании. Это забило некоторые моменты в том, что я должен рассмотреть, и это могло бы немного повлиять на мои взгляды.

Мне бы хотелось увидеть более убедительные статьи и другие инструменты, которые помогут мне понять, что это правильный способ сделать что-то.

@Dominic Cooney: Проведите некоторое время и делитесь методами тестирования.

Ahh, это помогает мне понять, что от меня ожидается, насколько это возможно, и это добавляет больше предметов в мою сумку знаний, которые я мог бы использовать снова.

@Доминик Куни: Отвечайте на вопросы, примеры и книги.

Если человек, отвечающий за вопрос (люди) ответить на вопрос, полезен, это может сделать меня более вероятным. Хорошие примеры велики, и это дает мне что-то для достижения цели и что-то, чтобы найти ссылку. Книги, имеющие отношение к этому напрямую, являются отличной ссылкой.

@Адам Хейл: Обзор сюрпризов.

Скажите, что вы создали, что я совершенно не готов. Я чувствую себя некомфортно с этим, но сделаю все возможное. Теперь я буду бояться и слегка опасаться этого, спасибо. Тем не менее, тактика паники, возможно, сработала, но у нее есть стоимость. Однако, если ничего не работает, это может быть просто нажатием, которое необходимо.

@Rytmis: Элементы считаются выполненными только тогда, когда у них есть тестовые примеры.

О, интересно. Я вижу, что мне действительно нужно это делать сейчас, иначе я ничего не завершу. Это имеет смысл.

@jmorris: получите Rid/Sacrifice.

блики, блики, блики - есть шанс, что я могу научиться, и при поддержке и помощи я могу стать очень важной и функциональной частью команд. Сейчас это один из моих недостатков, но это будет недолго. Однако, если я просто не получу его, я пойму, что пойду. Думаю, я это получу.


В конце концов, поддержка моей команды играет большую роль во всем этом. Если человек не спешит помогать, и мне нужно начинать с хороших привычек, всегда приветствуется. Тогда, имея хорошую сеть поддержки, было бы здорово. Всегда было бы признательно, что кто-то придет несколько раз после этого, и перейдет через какой-то код, чтобы посмотреть, как все течет, а не в обзоре как таковом, но больше как дружеский визит.

Рассуждение, подготовка, обучение, сопровождение, поддержка.

Ответ 5

Я заметил, что многие программисты видят ценность тестирования на рациональном уровне. Если вы слышали такие вещи, как "да, я знаю, что я должен проверить это, но мне действительно нужно сделать это быстро", тогда вы знаете, что я имею в виду. Однако на эмоциональном уровне они чувствуют, что они что-то делают, только когда они пишут настоящий код.

Таким образом, цель должна заключаться в том, чтобы каким-то образом заставить их понять, что тестирование на самом деле является только способом измерения, когда что-то "сделано", и, таким образом, дает им внутреннюю мотивацию для написания тестов.

Я боюсь, что это намного сложнее, чем должно быть. Вы услышите много оправданий по строкам "Я очень спешу, я переписал/реорганизую это позже, а затем добавлю тесты" - и, конечно, последующие действия никогда не происходят, потому что, что удивительно, они как и занят на следующей неделе.

Ответ 6

Вот что я буду делать:

  • Первый тайм-аут... "мы собираемся сделать этот проект совместно. Я собираюсь написать тесты, и вы собираетесь написать код. Обратите внимание на то, как я пишу тесты, потому что мы делаем что-то здесь и то, что я ожидаю от вас".

  • После этого... "Вы закончили? Отлично! Сначала давайте посмотрим на тесты, которые управляют вашей разработкой. О, нет тестов? Сообщите мне, когда это будет сделано, и мы перепланируем взгляды на ваш код. Если вам нужна помощь в формулировании тестов, дайте мне знать, и я помогу вам".

Ответ 7

Как младший программист, я все еще пытаюсь привыкнуть писать тесты. Очевидно, что нелегко подбирать новые привычки, но, думая о том, что сделало бы эту работу для меня, я должен добавить +1 к комментариям кодов и коучингу/парному программированию.

Можно также подчеркнуть долгосрочную цель тестирования: обеспечить, чтобы вчера работала работа, а также на следующей неделе и в следующем месяце. Я только говорю, что, поскольку в сглаживании ответов я этого не видел.

При выполнении обзоров кода (если вы решите это сделать), убедитесь, что ваш молодой разработчик не знает об этом, не говоря о том, чтобы сделать код лучше. Потому что его доверие с меньшей вероятностью будет повреждено. И это важно. С другой стороны, так зная, насколько мало вы знаете.

Конечно, я ничего не знаю. Но я надеюсь, что слова были полезны.

Изменить: [Justin Standard]

Не ставьте себя на место, что вы должны сказать, это почти правильно.

Подумайте о том, что вы узнаете о том, что не только юниоры смогут учиться в процессе, но и рецензенты. Все в обзоре кода узнают, если вы делаете это совместным процессом.

Ответ 8

Он уже делает это. В самом деле. Он просто не записывает это. Не убежден? Посмотрите, как он проходит стандартный цикл разработки:

  • Напишите фрагмент кода
  • Скомпилировать его
  • Запустите, чтобы посмотреть, что он делает
  • Напишите следующий фрагмент кода

Шаг №3 - это тест. Он уже тестирует, он просто делает это вручную. Задайте ему этот вопрос: "Как вы узнаете завтра, что код с сегодняшнего дня все еще работает?" Он ответит: "Это такой маленький код!"

Спросите: "Как насчет следующей недели?"

Когда у него нет ответа, спросите: "Как бы вы хотели, чтобы ваша программа рассказывала вам, когда изменение нарушает что-то, что работало вчера?"

Что такое автоматическое тестирование модулей.

Ответ 9

Честно говоря, если вам нужно приложить все усилия, чтобы заставить его что-то сделать, вам, возможно, придется примириться с мыслью, что он может просто не быть подходящим для команды, и, возможно, ему придется идти. Теперь это не обязательно означает увольнение его... это может означать, что где-то еще в компании его навыки более подходят. Но если нет места еще... вы знаете, что делать.

Я предполагаю, что он также довольно новый наем (< 1 год) и, возможно, недавно вне школы... в этом случае он, возможно, не привык к тому, как все работает в корпоративной среде. Такие вещи, как большинство из нас, могут уйти в колледж.

Если это так, одна вещь, которую я нашел, - это иметь "неожиданный новый обзор аренды". Неважно, если вы никогда этого не делали раньше... он этого не узнает. Просто сядьте и скажите ему, что вы собираетесь пережить его выступление и показать ему реальные цифры... возьмите свой обычный обзорный лист (у вас есть формальный процесс обзора?) И измените заголовок, если хотите, чтобы он выглядел и показать ему, где он стоит. Если вы продемонстрируете ему в очень формальной обстановке, что не делать тесты, это отрицательно сказывается на его рейтинге производительности, а не просто "ворчит" ему об этом, он, надеюсь, получит смысл. Вы должны показать ему, что его действия на самом деле повлияют на него, будь оно платным или иным.

Я знаю, вы можете остаться в стороне от этого, потому что это не официальное... но я думаю, что у вас есть основания для этого, и это, вероятно, будет намного дешевле, чем его уволить и нанять кого-то новый.

Ответ 10

Будучи младшим программистом, я подумал, что Id показывает, как это было, когда я оказался в похожей ситуации с вашим младшим разработчиком.

Когда я впервые вышел из uni, я обнаружил, что он сильно не укомплектовал меня, чтобы иметь дело с реальным миром. Да, я знал некоторые основы JAVA и некоторую философию (не спрашивайте), но это было так. Когда я впервые получил свою работу, это было немного сложнее сказать. Позвольте мне сказать вам, что я, вероятно, был одним из самых больших ковбоев, я бы взломал небольшое исправление ошибок/алгоритм без комментариев/тестирования/документации и отправил его в дверь.

Мне посчастливилось быть под наблюдением своего рода и очень терпеливого старшего программиста. К счастью для меня, он решил сесть со мной и потратить 1-2 недели на мой очень взломанный код togethor. Он объяснил, где я поступил неправильно, более тонкие точки c и указатели (мальчик это меня смутил!). Нам удалось написать довольно приличный класс/модуль примерно через неделю. Все, что я могу сказать, это то, что, если старший разработчик не инвестировал время, чтобы помочь мне на правильном пути, я, вероятно, не продержался бы очень долго.

К счастью, через 2 года я буду надеяться, что некоторые из моих коллег могут даже считать меня средним программистом.

Возьмите домашние очки

  • Большинство университетов очень плохо при подготовке студентов к реальному миру.
  • Сопряженное программирование действительно помогло мне. Это не значит, что это поможет всем, но это сработало для меня.

Ответ 11

Присвойте их проектам, которые не требуют "высококачественного стабильного кода", если это ваша проблема и пусть младший. разработчик не работает. Пусть они будут "входить в выходные", чтобы исправить свои ошибки. Пообедайте много и поговорите о методах разработки программного обеспечения (не в лекциях, а в дискуссиях). Со временем они приобретут и разработают лучшие практики для выполнения задач, которые им назначены.

Кто знает, они могут даже придумать что-то лучшее, чем методы, которые ваша команда использует в настоящее время.

Ответ 12

Я второй комментарий RodeoClown о проверке кода каждой фиксации. Как только он сделал это несколько раз, он привык тестировать материал.

Я не знаю, нужно ли вам блокировать такие коммиты. На моем рабочем месте у всех есть свободная фиксация ко всему, и все сообщения о передаче SVN (с разностями) отправляются по электронной почте в команду.

Примечание: вы действительно хотите thunderbird color-diffs addon, если вы планируете это делать.

Мой босс или я (2 'старшие' кодеры) в конечном итоге будут читать за коммиты, и если есть такие вещи, как "вы забыли добавить модульные тесты", мы просто пролистываем электронную почту или отправляемся и беседуем с человеком, объясняя, почему им нужны модульные тесты или что-то еще. Всем другим рекомендуется читать коммиты, так как это отличный способ увидеть, что происходит, но младшие разработчики не комментируют так много.

Вы можете помочь побудить людей привыкнуть к этому, периодически повторяя такие вещи, как "Эй, боб, вы видели это совершение, которое я сделал этим утром, я нашел этот опрятный трюк, где вы можете делать бла-бла все, прочитайте зафиксировать и посмотреть, как это работает!"

NB: У нас есть 2 'старших' разработчика и 3 младших. Это может не масштабироваться, или вам может потребоваться немного изменить процесс с большим количеством разработчиков.

Ответ 13

  • Сделайте код покрытия частью отзывов.
  • Сделайте "написать тест, который предоставляет ошибку", необходимое условие для исправления ошибки.
  • Требовать определенный уровень охвата до того, как код может быть проверен.
  • Найдите хорошую книгу по разработке, основанной на тестах, и используйте ее, чтобы показать, как тестирование может ускорить разработку.

Ответ 14

Много психологии и полезных методов "наставничества", но, честно говоря, это просто сводится к "написанию тестов, если вы хотите еще иметь работу завтра".

Вы можете уложить его в любых условиях, которые, по вашему мнению, уместны, жесткие или мягкие, это не имеет значения. Но дело в том, что программистам не платят за то, чтобы просто скомпоновать код и проверить его - им платят, чтобы тщательно собрать код, затем собрать тесты, а затем проверить их код, ТОГДА проверить все это. (По крайней мере что это похоже, из вашего описания.)

Следовательно, если кто-то откажется выполнять свою работу, объясните им, что они могут остаться дома, завтра, и вы наняли кого-то, кто выполнит эту работу.

Опять же, вы можете сделать все это аккуратно, если считаете, что это необходимо, но многим людям просто нужно очень тяжело похлопать Жизнь в реальном мире, и вы сделаете им одолжение, отдав их им.

Удачи.

Ответ 15

Измените свое описание работы на некоторое время, чтобы только писать тесты и поддерживать тесты. Я слышал, что многие компании делают это для новых новых неопытных людей некоторое время, когда они начинаются.

Кроме того, вызовите вызов, когда он в этой роли: запишите тесты, которые будут: а) сбой в текущем коде; а) выполнить требования программного обеспечения. Надеюсь, это заставит его провести тщательные и тщательные тесты (улучшение проекта) и сделать его лучше при написании тестов, когда он снова интегрируется в основное развитие.

edit > выполнить требования программного обеспечения, означающие, что он не просто пишет тесты, чтобы намеренно сломать код, когда код никогда не предназначался или не должен был учитывать этот тест.

Ответ 16

Если младший программист или кто-либо не видит значения в тестировании, тогда будет сложно заставить их сделать это... period.

Я бы сделал младшего программиста жертвой своих выходных, чтобы исправить ошибку. Его действия (или отсутствие там) не затрагивают его непосредственно. Кроме того, сделайте очевидным, что он не увидит улучшения и/или повышения заработной платы, если он не улучшит свои навыки тестирования.

В конце концов, даже при всей вашей помощи, поощрении, наставничестве он может не подходить для вашей команды, поэтому отпустите его и найдите того, кто его получит.

Ответ 17

Если вашему коллеге не хватает опыта написания тестов, возможно, он или она испытывают трудности при тестировании за пределами простых ситуаций, и это проявляется в качестве неадекватного тестирования. Вот что я хотел бы попробовать:

  • Проведите некоторое время и делитесь методами тестирования, такими как инъекция зависимостей, поиск краевых дел и т.д. со своим коллегой.
  • Предлагаем ответить на вопросы о тестировании.
  • Просматривайте тесты кода на некоторое время. Попросите своего коллегу просмотреть ваши изменения, которые являются образцом хорошего тестирования. Посмотрите их комментарии, чтобы узнать, действительно ли они читают и понимают ваш тестовый код.
  • Если есть книги, которые особенно хорошо подходят для вашей философии тестирования команды, дайте ему копию. Это может помочь, если ваша обратная связь или отзывы о просмотре кода ссылаются на книгу, чтобы он или она имели нить, чтобы ее подбирать и следовать.

Я бы не особо подчеркивал фактор позора/вины. Стоит отметить, что тестирование является широко принятой, хорошей практикой и что написание и поддержание хороших тестов - это профессиональная вежливость, поэтому вашим товарищам по команде не нужно проводить выходные дни на работе, но я не буду расстраивать эти моменты.

Если вам действительно нужно "стать жестким", тогда установите беспристрастную систему; никто не любит чувствовать, что их выделяют. Например, ваша команда может требовать, чтобы код поддерживал определенный уровень охвата тестированием (который можно было замаскировать, но, по крайней мере, можно было автоматизировать); требуют наличия нового кода для тестирования; требуют, чтобы рецензенты рассматривали качество тестов при проверке кода; и так далее. Учреждение этой системы должно происходить из командной консенсуса. Если вы тщательно обсудите дискуссию, вы можете выявить другие причины, по которым ваш коллега тестирует не то, что вы ожидаете.

Ответ 18

Это его обязанность Ментора Научить его/ее. Насколько хорошо вы учите его/ее КАК тестировать. Вы с ним работаете? Младший, скорее всего, не знает, КАК установить хороший тест для xyz.

Будучи младшим учеником школы, он знает много концепций. Некоторая техника. Некоторый опыт. Но, в конце концов, все Junior - ПОТЕНЦИАЛ. Почти каждая функция, над которой они работают, будет что-то новое, чего они никогда не делали раньше. Уверенный, что Junior, возможно, сделал простой образец штата для проекта в классе, открывая и закрывая "двери", но никогда не применяя образцы моделей в реальном мире.

Он/она будет только так хорошо, как хорошо вы учите. Если бы они смогли "просто получить", вы думаете, что они заняли бы младшую позицию в первую очередь?

По моему опыту Юниоры нанимаются и получают почти ту же ответственность, что и пожилые люди, но их платят меньше, а затем игнорируют, когда они начинают дрожать. Прости меня, если я кажусь горьким, потому что я.

Ответ 19

@jsmorris

У меня когда-то был старший разработчик, а "архитектор" избивал меня и тестировщика (это была моя первая работа в колледже) по электронной почте, чтобы не опаздывать и заканчивать такую ​​ "легкую" задачу накануне. Мы были в этом весь день и назвали его уходом в 7 вечера, я с тех пор ходил с 11 утра до обеда в тот день и каждый раз заставлял каждого члена нашей команды помогать хотя бы дважды.

Я ответил и cc'd команды: "Я был разочарован в тебе уже месяц, я никогда не получаю помощь от команды. Я буду в кофейне через дорогу, если понадобится. Мне жаль, что я не смог отладить параметр 12, 800, что почти все зависит от".

После охлаждения в кафе в течение часа я вернулся в офис, схватил свое дерьмо и ушел. Через несколько дней они позвонили мне, спрашивая, приеду ли я, я сказал, что буду, но у меня было интервью, может быть, завтра.

"Итак, вы уходите?"

Ответ 20

В исходном репозитории: используйте крючки перед каждым коммитом (например, привязка для фиксации для SVN)

В этом крючке проверьте наличие по крайней мере одного варианта использования для каждого метода. Используйте соглашение для организации unit test, которую можно легко выполнить с помощью привязки до фиксации.

На сервере интеграции скомпилируйте все и регулярно проверяйте тестовое покрытие с помощью инструмента для тестирования. Если охват тестирования не составляет 100% для кода, заблокируйте фиксацию разработчика. Он должен отправить вам тестовый пример, который охватывает 100% кода.

Только автоматические проверки могут хорошо масштабироваться в проекте. Вы не можете проверить все вручную.

Разработчик должен иметь возможность проверить, покрывает ли его тестовые примеры 100% кода. Таким образом, если он не совершает 100% протестированный код, это его собственная ошибка, а не ошибка "oops, sorry, котор я забыл".

Помните: люди никогда не делают то, что вы ожидаете, они всегда делают то, что вы проверяете.

Ответ 21

Основываясь на вашем комментарии, "Показывая, что дизайн становится проще", я предполагаю, что вы, ребята, практикуете TDD. Выполнение обзора кода после того, как факт не будет работать. Все о TDD заключается в том, что это дизайн, а не философия тестирования. Если бы он не писал тесты как часть дизайна, вы не получили бы большой пользы от написания тестов после факта - особенно от младшего разработчика. В конце концов ему не хватит большого количества угловых случаев, и его код все равно будет дерьмовым.

Лучше всего иметь старшего разработчика пациента очень, чтобы посидеть с ним и сделать пару программ. И просто держись, пока он не узнает. Или не учится, и в этом случае вам нужно переназначить его к задаче, к которой он лучше всего подходит, потому что вы просто разочаровываете своих настоящих разработчиков.

Не у всех одинаковый уровень таланта и/или мотивации. Команды развития, даже гибкие, состоят из людей в "A-Team" и людей на "B-Team". A-Team - это тот, кто архитектор решения, напишет весь нетривиальный код производства и общается с владельцами бизнеса - всю работу, требующую мышления вне коробки. B-Team обрабатывает такие вещи, как управление конфигурацией, написание сценариев, исправление ошибок в работе и выполнение работ по техническому обслуживанию - вся работа, которая имеет строгие процедуры, которые имеют небольшие последствия для отказа.

Ответ 22

Это может быть немного бессердечным, но, как вы описываете ситуацию, похоже, что вам нужно уволить этого парня. Или, по крайней мере, дать понять: отказ следовать методам развития дома (включая письменные тесты) и проверять код ошибки, который другие люди должны очистить, в конечном итоге заставит вас уволить.

Ответ 23

Основная причина, по которой младшие инженеры/программисты не занимают много времени, чтобы проектировать и выполнять тестовые сценарии, заключается в том, что большинство сертификатов CS не требуют этого, поэтому другие области техники охвачены в программах колледжа, таких как дизайн скороговорки.

По моему опыту, лучший способ получить младших специалистов в привычку - сделать его частью процесса явно. То есть, оценивая время, которое должна выполнить итерация, время проектирования, записи и/или выполнения дел должно быть включено в эту временную оценку.

Наконец, рассмотрение тестового проекта script должно быть частью обзора проекта, а фактический код должен быть просмотрен в обзоре кода. Это заставляет программиста отвечать за правильное тестирование каждой строки кода, которую он/она пишет, а старший инженер и сверстники могут предоставить отзывы и рекомендации по написанию кода и теста.

Ответ 24

Во-первых, как отмечают большинство респондентов, если парень не видит ценности в тестировании, вы вряд ли сможете это сделать, и вы уже указали, что вы не можете запустить этого парня. Тем не менее, отказ здесь не вариант, так что о каких немногих вещах вы можете делать?

Если ваша организация достаточно велика, чтобы иметь более 6 разработчиков, я настоятельно рекомендую иметь отдел обеспечения качества (даже если его только один человек начнет работать). В идеале у вас должно быть соотношение 1 тестер до 3-5 разработчиков. Дело в том, что программисты... это программисты, а не тестеры. Мне еще предстоит взять интервью у программиста, который формально преподавал правильные методы QA.

Большинство организаций делают фатальный недостаток назначения роли тестирования новому прокату, человеку с наименьшим количеством воздействия на ваш код - в идеале старшие разработчики должны быть переведены в роль QA, поскольку они имеют опыт в коде и (надеюсь) разработали шестой смысл для запахов кода и точек отказа, которые могут возникнуть.

Кроме того, программист, допустивший ошибку, вероятно, не найдет дефект, потому что обычно это не синтаксическая ошибка (которую получают в компиляции), а логическая ошибка - и та же логика работает, когда они пишут тест, как при написании кода. Не нужно, чтобы человек, который разработал код, проверил этот код - они найдут меньше ошибок, чем кто-либо другой.

В вашем случае, если вы можете позволить себе перенаправленные усилия, сделайте этого нового парня первым членом вашей команды QA. Попросите его прочитать "Тестирование программного обеспечения в реальном мире: улучшение процесса", потому что ему, очевидно, потребуется некоторое обучение в его новой роли. Если ему это не нравится, он уйдет, и ваша проблема будет решена.

Немного менее мстительный подход позволил бы этому человеку делать то, на что они хороши (я предполагаю, что этот человек нанят, потому что он действительно компетентен в программирующей части задания), и нанять тестера или два, чтобы сделать тестирование (студенты университета часто имеют практические или "кооперативные" условия, любят разоблачение и дешевы)

Боковое примечание. В конце концов, вы захотите, чтобы команда QA отчитывалась перед директором QA или, по крайней мере, не с менеджером разработчика программного обеспечения, потому что, имея отчет команды QA для менеджера, главной целью которого является получение продукта, является конфликт интересов.

Если ваша организация меньше 6 или вы не можете уйти с созданием новой команды, я рекомендую парное программирование (PP). Я не полный конвертер всех экстремальных методов программирования, но я определенно верю в парное программирование. Тем не менее, оба члена парной команды программирования должны быть посвящены или просто не работают. Они должны следовать двум правилам: инспектор должен полностью понять, что кодируется на экране, или он должен попросить кодера объяснить это; кодер может только кодировать то, что он может объяснить - никакие "вы не увидите" или "не доверяете мне" или ручные махинации не будут допущены.

Я рекомендую только PP, если ваша команда способна на это, потому что, как и тестирование, никакое количество аплодисментов или угроз не убедит пару инфовертов, заполненных эго, чтобы работать вместе, если они не чувствуют себя комфортно. Тем не менее, я считаю, что между выбором написания подробных функциональных спецификаций и выполнением обзоров кода против парного программирования PP обычно выигрывает.

Если PP не для вас, то TDD - ваш лучший выбор, но только если его взять буквально. Test Driven Development означает, что вы пишите тесты FIRST, запускайте тесты, чтобы доказать, что они действительно терпят неудачу, а затем напишите простейший код, чтобы заставить его работать. Компромисс теперь вам (должен) иметь набор из тысяч тестов, который также является кодом, и так же вероятен, как и производственный код, содержащий ошибки. Я буду честен, я не большой поклонник TDD, главным образом из-за этой причины, но он работает для многих разработчиков, которые предпочитают писать тестовые сценарии, чем тестовые документы - некоторые тесты лучше, чем ни один. Пара TDD с PP для лучшей вероятности тестового покрытия и меньше ошибок в script.

Если все остальное терпит неудачу, пусть у программистов эквивалентность ругательства - каждый раз, когда программист ломает сборку, они должны ставить $20, $50, $100 (что очень болезненно для вашего персонала) в банку, которая идет на вашей любимой (зарегистрированной!) благотворительности. Пока они не заплатят, избегайте их:)

Все шутя в сторону, лучший способ заставить программиста писать тесты - это не позволить ему программировать. Если вы хотите программиста, нанять программиста - если вы хотите тестов, нанять тестера. 12 лет назад я начал работать младшим программистом, и он превратился в мой карьерный путь, и я бы не стал торговать им ни за что. Твердый отдел QA, который должным образом взращивается и получает полномочия и мандат на совершенствование программного обеспечения, столь же ценен, как разработчики, пишущие программное обеспечение в первую очередь.