Как убедиться, что разработчики проводят модульное тестирование своего кода - PullRequest
4 голосов
/ 05 февраля 2009

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

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

Ответы [ 11 ]

12 голосов
/ 05 февраля 2009

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

6 голосов
/ 05 февраля 2009

Автоматический запуск отчетов о тестировании покрытия во время процесса сборки. Мы делаем это с CruiseControl. В противном случае вы должны фактически проверить, что тестируется в ваших отчетах о результатах тестирования.

3 голосов
/ 05 февраля 2009

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

Даже разработчики, которые получают TDD, далеко не защищены от пробелов в охвате. Зачастую код, который исправляет ошибку, нарушает боковой тест или создает ветку, которую первоначальный разработчик не ожидал, а разработчик обслуживания не осознавал, что это новое.

2 голосов
/ 05 февраля 2009

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

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

Еще один шаг, который вы можете сделать, это установить хук коммита в вашей системе управления версиями, который отправляет по электронной почте всю команду, когда коммит сделан, вместе с файлами и даже кодом, который составлял коммит. Это обеспечивает высокий уровень прозрачности и побуждает разработчиков «следовать правилам». Конечно, это работает, только если масштабируется до количества коммитов, которые ваша команда делает за день.

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

1 голос
/ 05 февраля 2009

Один из способов сделать это - написать скрипт для поиска всех проверок на наличие термина «test» или «testfixture» (очевидно, в зависимости от вашей среды). Если есть журнал фиксации или электронное письмо, отправленное менеджеру с подробным описанием внесенных изменений, то с вашим любимым языком обработки текста будет тривиально сканировать файлы кода на наличие признаков модульных тестов (ключевое слово Assert, вероятно, быть лучшей ставкой).

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

1 голос
/ 05 февраля 2009

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

1 голос
/ 05 февраля 2009

Здесь у нас просто есть тестовая папка со структурой пакета, которая отражает реальный код. Чтобы зарегистрировать класс, политика заявляет, что у него должен быть сопутствующий класс тестирования с определенными рекомендациями о том, какой / как каждый метод должен быть протестирован. (Пример: нам не нужно тестировать чистые геттеры и сеттеры)

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

0 голосов
/ 06 февраля 2009

Садитесь с ними и наблюдайте за тем, что они делают. Если они не проводят модульное тестирование, напомните им осторожно.

0 голосов
/ 06 февраля 2009

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

0 голосов
/ 05 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...