Как определить эффективность процесса проверки кода?

14

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

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

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

Johnv2020
источник
7
Поиск ошибок - не единственная цель проверки кода. Они также полезны для усиления стандартов кодирования, перекрестного обучения, перекрестного опыления идей и технологий и т. Д.
Джейсон
Спасибо Jason & понял, однако в этом случае я пытаюсь выяснить, как обеспечить, чтобы процесс достиг своей основной цели по предотвращению дефектов как можно раньше на этапе разработки
@ Johnv2020 Это не его основная цель ... Вы полностью упускаете смысл пересмотра кода. Это все равно, что добавить новую замечательную функцию безопасности в парк реактивных самолетов, а затем попытаться оценить ее эффективность по количеству аварий. Существует слишком много переменных и других факторов, которые необходимо учитывать, чтобы точно утверждать, что функция безопасности улучшила вероятность возникновения аварии.
maple_shaft
@maple_shaft: Слабая аналогия. Попытка измерить частоту появления ошибок больше похожа на попытку измерить количество гробов, используемых для мертвых людей от аварий.
С.Лотт
1
Во всех обзорах кода, которые я посетил, многие ошибки были исправлены уже в модульном и высокоуровневом тестировании. То есть код не готов к просмотру только потому, что он компилируется.
Пит Уилсон

Ответы:

7

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

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

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

При использовании любого из этих показателей важно понять их влияние на процесс. Анализ первопричин с использованием таких методов, как « почему-потому» , диаграммы Five Whys или Исикавы могут быть использованы для определения причин, по которым проверки кода (или любые другие методы улучшения качества) (не) эффективны.

Вас также может заинтересовать эта статья об инспекциях The Ganssle Group и статья Capers Jones в Crosstalk о возможностях дефектов и DRE .

Томас Оуэнс
источник
2

Хотя в значительной степени верно, что проверка кода выявляет проблемы, которые являются довольно скрытыми, что тестирование может или не может поймать. Тем не менее, по моему мнению, у вас может быть действительно стабильный (практически без ошибок) код, но все же написанный таким образом, что он крайне не читается или не совсем поддерживается. Таким образом, может случиться так, что проверка кода НЕ МОЖЕТ найти ошибок, если в коде нет реальных проблем.

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

Как вы хотели измерить эффективность - вот что я хотел бы предложить:

  1. Метрика, относящаяся к количеству переделок - Количество времени, в которое переделка применяется в одном и том же модуле / объекте / рабочем элементе, является показателем того, насколько плох этот код с точки зрения удобства сопровождения. Когда применяется эффективный пересмотр кода, как часто мы можем сократить количество запросов на повторную обработку в одном модуле?

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

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

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

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

Дипан Мехта
источник
1
Хотя это и не «ошибка», отсутствие читабельности, возможности сопровождения или развития является дефектом в коде и должно рассматриваться как таковое. Нет причин, по которым их нельзя отследить в трекере дефектов, наряду с реальными ошибками в функциональности. Делая это, вы также открываете возможность отслеживать ряд других связанных с дефектами метрик на этапе кодирования.
Томас Оуэнс
1
Как разработчик, я уверен, что хотел бы видеть чистый код. Тем не менее, проверки кода очень дороги. Поэтому, как менеджер, финансирующий проект, чистый код на самом деле не является веской причиной, чтобы добавить 5-10% затрат и времени в мой бюджет на разработку. Особенно, когда (как менеджер) мой бонус / отзыв привязан к завершению текущего проекта в срок / в рамках бюджета. Таким образом, ваше мнение о том, что основная причина проверок кода - получить чистый код, заставит любого хорошего менеджера сказать, что окупаемость инвестиций не стоит. Вы можете поспорить о долгосрочном возврате, но к тому времени менеджер, который доставляет вовремя / в бюджет, будет повышен от этой проблемы
Dunk
... проблема. В то время как у менеджера, который продвигал обзоры кода, будут успешные проекты по сопровождению, но он будет подготовлен для того, чтобы не завершить первоначальный проект вовремя / в рамках бюджета, как менеджер, который этого не сделал. OTOH, если проверки кода помогли найти ошибки, которых не было в результате отсутствия проверки и которые позволили менеджеру по проверке кода завершить свой проект в более сжатые сроки / в рамках бюджета, то это уже другая история. Это история, которую нужно продать. Это также означает, что чистый код не может быть причиной для проверки кода.
Данк
@Dunk Стоимость проверки кода зависит от типа проверки кода. Формальный осмотр с 3-5 читателями, модератором и присутствием автора (5-7 человек в комнате) обходится дорого. Контрольная проверка, состоящая из того, что другой разработчик просматривает код в течение 10-15 минут, также является проверкой кода, но гораздо менее формальной и намного более дешевой. Даже парное программирование можно считать своего рода техникой «обзора кода». Соответствующий метод определяется факторами, включая (но не ограничиваясь ими) критичность кода, желаемую частоту появления дефектов и количество времени / денег, которые необходимо инвестировать.
Томас Оуэнс
@Dunk - Я думаю, что вы привели аргумент в пользу того, что решение «следует ли нам проверять код» из рук руководителя проекта и передать его в руки менеджера, который несет ответственность за программную платформу в долгосрочной перспективе. ИМО, вообще говоря, тратить дополнительные 5-10% на разработку для достойных проверок кода - это выгодное вложение с точки зрения долговечности разрабатываемой системы. Но, вероятно, не с точки зрения бюджета и сроков текущего проекта.
Дауд говорит восстановить Монику