Эксперименты, коррелирующие метрики кода с плотностью ошибок

16

Мне интересно, проводил ли кто-нибудь эксперименты, связывающие метрики кода (SLOC, Cyclomatic Complexity и т. Д.) С плотностью ошибок в объектно-ориентированных приложениях.

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

Моя цель состоит в том, чтобы

  1. Измерьте все интересные метрики за 2-3 месяца (у нас уже немало от сонара).
  2. Найдите один показатель, который коррелирует с количеством новых ошибок.
  3. Проведите анализ основных причин, чтобы проверить, почему это происходит (например, не хватает ли у нас определенных навыков проектирования?).
  4. Улучшите навык и измерьте изменение за пару итераций.
  5. Промыть и повторить с 2.

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


До сих пор я нашел следующие ссылки с некоторой информацией по этому вопросу

Аугусто
источник
1
Если вы хотите избежать закрытия, вы должны изменить свой вопрос. Сайты Stack Exchange не являются поисковыми системами, а пользователи не являются личными научными сотрудниками . Вместо того, чтобы запрашивать ссылки на статьи, следует сделать упор на вопрос, какие типы метрик были связаны с дефектами и плотностью дефектов.
Томас Оуэнс
1
Я сожалею, что вопрос возник как просьба стать моим личным помощником по поиску , это определенно не то, что я хотел сделать, но поиск такого рода бумаг не является чем-то очень распространенным. Я изменил название, чтобы у других людей не было такого же впечатления.
Августо

Ответы:

11

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

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

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

Существует также группа показателей, известных как CK Metrics. Первое определение этого набора метрик, по-видимому, содержится в статье под названием «Набор метрик для объектно-ориентированного проектирования» Чидамбера и Кемерера. Они определяют взвешенные методы для каждого класса, глубину дерева наследования, количество дочерних элементов, связь между классами объектов, реакцию на класс и отсутствие единства в методах. Их статья предоставляет вычислительные методы, а также описание того, как анализировать каждый из них.

С точки зрения академической литературы, которая анализирует эти метрики, вас может заинтересовать эмпирический анализ метрик CK для объектно-ориентированной сложности проектирования: последствия для дефектов программного обеспечения, автором которых являются Раманат Субраманьям и М.С. Кришна. Они проанализировали три из шести метрик CK (взвешенные методы на класс, связь между классифицируемым объектом и глубиной дерева наследования). Просматривая статью, выясняется, что они обнаружили, что это потенциально допустимые показатели, но их следует осторожно интерпретировать как «улучшение», которое может привести к другим изменениям, которые также приводят к большей вероятности появления дефектов.

Эмпирический анализ объектно-ориентированных проектных метрик для прогнозирования сбоев высокой и низкой серьезности, автором которых являются Юминг Чжоу и Харетон Леунг, также исследует метрики CK. Их подход состоял в том, чтобы определить, могут ли они прогнозировать дефекты на основе этих метрик. Они обнаружили, что многие метрики CK, за исключением дерева глубины наследования и числа детей), имели некоторый уровень статистической значимости в прогнозировании областей, в которых могут быть обнаружены дефекты.

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

Томас Оуэнс
источник
Показано, что все метрики Холстеда тесно связаны с необработанным SLOC (числом строк исходного кода). В этот момент стало известно, что все, что связано с какой-либо метрикой Холстеда, соотносится с необработанным SLOC, и измерять SLOC легче, чем с любой метрикой Холстеда.
Джон Р. Штром
@ JohnR.Strohm Я не согласен с тем, что считать SLOC проще, чем вычислять метрики Хэлстеда, когда вы используете инструменты для вычислений. Предполагая, что метрики Холстеда являются действительными (что на самом деле обсуждается, но для недействительной метрики ничего не имеет значения), знание количества времени, необходимого для разработки кода или прогнозируемого количества дефектов в системе, является более полезным значением, чем знание суммы линий. Я могу строить графики с данными о времени, планы качества с данными о дефектах или выделять достаточно времени для проверки кода с трудом. Сложнее использовать сырой SLOC для этих вещей.
Томас Оуэнс
@ JohnR.Strohm Я уверен, что программа вычисления метрики Холстеда выполняется немного дольше, чем программа подсчета SLOC. Но если предположить, что действительный вывод станет верным входом в процесс принятия решений, я предпочел бы иметь значимые данные о времени, усилиях и дефектах, а не необработанный счетчик SLOC. Добавленная стоимость более сложной метрики часто стоит дополнительного времени вычисления, опять-таки, предполагая допустимые входные данные и действительные выходные данные вычислений.
Томас Оуэнс
@ThomasOwens, вопрос о том, были ли усилия по разработке программного обеспечения, а следовательно, стоимость и график, могут быть оценены непосредственно из оценок необработанного SLOC, были выполнены до смерти. После значительного исследования реальных данных проекта вопрос был решен утвердительно. См. «Экономика разработки программного обеспечения», Барри Бём, 1981.
Джон Р. Стром
@ThomasOwens: Кроме того, нужно признать, что метрики Холстеда по своей сути ретроспективны. Вы не можете измерить метрики Halstead программного обеспечения, которое вы еще не написали. С другой стороны, возможно оценить необработанный SLOC для данной задачи, и, учитывая достаточно подробные спецификации и небольшой опыт, сравнительно легко приблизиться к оценке. Кроме того, ОЧЕНЬ легко сравнивать оценки с фактическими данными, точно настраивать оценочную эвристику и калибровать оценщик стоимости. General Dynamics / Fort Worth проделали большую работу над этим в начале 1980-х годов.
Джон Р. Штром
7

Я обсуждал возможные корреляции в одном из моих постов в блоге :

Корреляция между цикломатической сложностью и плотностью ошибок: действительно ли это проблема?

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

Первый из них: сильно ли коррелирует СС с продолжительностью выявления и устранения дефектов? Другими словами, если CC ниже, мы бы потратили меньше времени на отладку и исправление дефектов?

Второй вопрос: сильно ли коррелирует CC с коэффициентом обратной связи по неисправностям (FFR, среднее число дефектов, возникающих в результате применения одного изменения или исправления одного дефекта)?

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

Это хороший эксперимент, чтобы сделать. Будьте в курсе результатов!

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

В книге Code Complete, стр.457, Стив Макконнелл говорит, что «сложность потока управления важна, потому что он коррелирует с низкой надежностью и частыми ошибками». Затем он упоминает несколько ссылок, поддерживающих эту корреляцию, включая самого МакКейба (которому приписывают разработку метрики цикломатической сложности). Большинство из них предшествуют широкому использованию объектно-ориентированных языков, но поскольку этот показатель применяется к методам в этих языках, ссылки могут быть тем, что вы ищете.

Эти ссылки:

  • МакКейб, Том. 1976. «Мера сложности». IEEE Транзакции по программной инженерии, SE-2, нет. 4 (декабрь): 308-20
  • Shen, Vincent Y., et al. 1985. «Определение подверженного ошибкам программного обеспечения - эмпирическое исследование». Операции IEEE по программной инженерии SE-11, № 4 (апрель): 317-24.
  • Уорд, Уильям Т., 1989. «Предотвращение дефектов программного обеспечения с использованием показателя сложности McCabe». Hewlett-Packard Journal, апрель, 64-68.

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

QuantumOmega
источник