Коэффициент дефектности встроенного программного обеспечения - PullRequest
7 голосов
/ 29 октября 2010

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

Ответы [ 7 ]

10 голосов
/ 29 октября 2010

Ваш вопрос "Является ли 5 ​​дефектов / 100 строк кода разумной оценкой?"На этот вопрос очень сложно ответить, и он сильно зависит от кодовой базы и сложности кода.

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

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

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

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

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

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

Удачи!

4 голосов
/ 30 октября 2010

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

В этой статье автор приводит цифры из "большого объема эмпирических исследований", опубликованные в Оценки программного обеспечения, эталонные тесты и передовые практики (Джонс, 2000) .При SIE CMM Level 1 , который звучит как уровень этого кода, можно ожидать частоту дефектов 0,75 на функциональную точку .Я оставлю это вам, чтобы определить, как функциональные точки и LOC могут быть связаны в вашем коде - вам, вероятно, понадобится инструмент метрики для выполнения этого анализа.

Стив Макконнелл в Code Complete цитирует исследование 11 проектов, разработанных одной и той же командой, 5 без проверок кода, 6 с проверками кода.Уровень дефектности для не проверенного кода составлял 4,5 на 100 LOC, а для проверенного - 0,82.Таким образом, на этом основании ваша оценка кажется справедливой в отсутствие какой-либо другой информации.Однако я должен предположить уровень профессионализма среди этой команды (только из-за того, что они чувствовали необходимость в проведении исследования), и что они хотя бы следили за предупреждениями;Ваша частота дефектов может быть намного выше .

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

4 голосов
/ 29 октября 2010

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

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

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

4 голосов
/ 29 октября 2010

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

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

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

EDIT

Запустите cccc и проверьте циклическую сложность mccabe. Это должно сказать, насколько сложный код.

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

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

3 голосов
/ 29 октября 2010

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

2 голосов
/ 01 ноября 2010

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

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

1 голос
/ 01 ноября 2010

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

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

...