2010-10-29 2 views
7

Какую степень дефектности я могу ожидать в кодовой базе C++, написанной для встроенного процессора (DSP), учитывая, что не было никаких единичных тестов, нет обзоров кода, нет статического анализа кода и что компиляция проект генерирует около 1500 предупреждений. Является ли 5 ​​дефектов/100 строк кода разумной оценкой?Вкладное программное обеспечение Степень дефекта

+0

Почему вы хотите знать? – Jan

+0

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

+0

@Jan: показать управление, что, вероятно, много ошибок в кодовой базе, и что мы должны начать что-то делать с этим прямо сейчас. – geschema

ответ

4

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

В статье this article автор приводит цифры из «большого объема эмпирических исследований», опубликованного в Software Assessments, Benchmarks, and Best Practices (Jones, 2000). На уровне SIE CMM Level 1, который звучит как уровень этого кода, можно ожидать, что коэффициент дефекта 0,75 на function point. Я оставлю это вам, чтобы определить, как функциональные точки и LOC могут относиться к вашему коду - вам, вероятно, понадобится metrics tool для выполнения этого анализа.

Steve McConnell in Code Complete cites a study из 11 проектов, созданных этой командой, 5 без отзывов о кодах, 6 с обзорами кода. Коэффициент дефекта для неоцененного кода составлял 4,5 на 100 LOC, а для рассмотренного - 0,82. Поэтому на этой основе ваша оценка кажется справедливой в отсутствие какой-либо другой информации. Однако я должен взять на себя уровень профессионализма среди этой команды (просто из-за того, что они чувствовали необходимость проведения исследования), и что они, по крайней мере, будут следить за предупреждениями; ваш уровень дефекта может быть намного выше.

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

+0

Большое спасибо за хорошо испрошенный ответ. Я должен признать, что раньше никогда не слышал о функциональных точках. – geschema

4

Это также зависит от того, кто написал код (уровень опыта) и насколько велика база кода.

Я буду рассматривать все предупреждения как ошибки.

Сколько ошибок вы получаете, когда запускаете инструмент статического анализа кода?

EDIT

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

http://sourceforge.net/projects/cccc/

Run другие инструменты статического анализа.

+0

Я даже не пытался запустить инструмент статического анализа на кодовой базе. Я думаю, мы должны сначала попытаться подсчитать количество предупреждений до нуля. Это кажется разумным? – geschema

+0

@geschema Да, конечно. На мой взгляд, код должен компилироваться без предупреждений, так как большинство предупреждений действительно. –

+0

Также добавьте как можно больше модульных тестов. –

4

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

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

Я предполагаю, что источник содержит много предупреждений о том, что в коде будет много ошибок.

+0

Качество кода относительное, и очень трудно измерить. Просто просмотр кода не даст много информации. –

+0

Правда, но это дает вам представление о том, что происходит в программном обеспечении. – Gerhard

10

Ваш вопрос: «Имеет ли 5 ​​дефектов/100 строк кода разумную оценку?» Этот вопрос чрезвычайно сложно ответить, и он сильно зависит от кодовой базы & сложности кода.

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

Для того, чтобы открыть глаза фигуративные руководства, я хотел бы предложить, по крайней мере, 3-двойственный подход:

  • принять конкретные предупреждения компилятора, и показать, как некоторые из них могут привести к неопределенному/катастрофическое поведение. Не все предупреждения будут столь же весомыми. Например, если у вас есть кто-то, использующий неинициализированный указатель, это чистое золото. Если у вас есть кто-то, набивающий беззнаковое 16-битное значение в 8-битное значение без знака, и можно показать, что 16-битное значение всегда будет < = 255, что не поможет сделать ваш случай так сильно.
  • запустить инструмент статического анализа. PC-Lint (или Flexelint) дешево & обеспечивает хороший «удар по доллару». Это почти наверняка поймает компилятор, и он также может работать через единицы перевода (объединить все вместе, даже с двумя или более проходами) и найти более тонкие ошибки. Опять же, используйте некоторые из них в качестве показаний.
  • запустите инструмент, который даст другие показатели сложности кода, еще один источник ошибок. Я бы рекомендовал M Squared's Resource Standard Metrics (RSM), который даст вам больше информации и показателей (включая сложность кода), чем вы могли бы надеяться. Когда вы сообщите руководству, что a complexity score over 50 is "basically untestable", и у вас есть оценка 200 в одной рутине, это должно открыть глаза.

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

Но важный момент, который я хочу сделать это: быть очень осторожным при переходе в & фиксирующее компилятор & линт предупреждения. Это замечательная цель, но вы также можете непреднамеренно нарушить рабочий код и/или выявить неопределенное поведение, которое случайно срабатывало в «сломанном» коде. Да, это действительно так. Так что осторожно шагайте.

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

Удачи вам!

+0

+1 для осторожного совета. См. Также эту книгу, чтобы помочь сделать переход от незаказанного кода к дружественному рефактору коду: http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – Matthieu

+0

@matthieu: это замечательная книга. Он также настоятельно рекомендует его. – geschema

+0

Спасибо за отличный совет и за то, что указали на риск появления новых ошибок при установке, казалось бы, безобидных предупреждений, особенно когда тестов нет. – geschema

3

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

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

+0

Если ему не повезет, его образец может быть очень хорошим ... –

+0

@VJo: * Подзадача * не означает * один образец *! Это статистика для вас. – Clifford

+0

@ Клиффорд Статистика в порядке, но закон мурми выше статистики;) –

2

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

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

1

Следующая статья имеет некоторые цифры, основанные на реальных проектах, к которым статический анализ был применен к: http://www.stsc.hill.af.mil/crosstalk/2003/11/0311German.html

Конечно критерии, по которым аномалия подсчитано может повлиять на результаты резко, что приводит к большому изменение в цифрах, приведенных в таблице 1. В этой таблице количество аномалий на тысячу строк кода для C колеблется от 500 (!) до примерно 10 (сгенерировано автоматически).

Смежные вопросы