Какую степень дефектности я могу ожидать в кодовой базе C++, написанной для встроенного процессора (DSP), учитывая, что не было никаких единичных тестов, нет обзоров кода, нет статического анализа кода и что компиляция проект генерирует около 1500 предупреждений. Является ли 5 дефектов/100 строк кода разумной оценкой?Вкладное программное обеспечение Степень дефекта
ответ
Несмотря на мой скептицизм достоверности любой оценки в этом случае, я обнаружил некоторые статистические данные, которые могут иметь отношение.
В статье 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. Поэтому на этой основе ваша оценка кажется справедливой в отсутствие какой-либо другой информации. Однако я должен взять на себя уровень профессионализма среди этой команды (просто из-за того, что они чувствовали необходимость проведения исследования), и что они, по крайней мере, будут следить за предупреждениями; ваш уровень дефекта может быть намного выше.
Вопрос о предупреждениях заключается в том, что некоторые из них являются доброкачественными, а некоторые из них являются ошибками (т. Е. Приводят к нежелательному поведению программного обеспечения), если вы проигнорируете их в предположении, что они все доброкачественны, вы введете ошибки. Кроме того, некоторые из них будут стать ошибок при обслуживании при изменении других условий, но если вы уже приняли решение принять предупреждение, у вас нет защиты от введения таких ошибок.
Большое спасибо за хорошо испрошенный ответ. Я должен признать, что раньше никогда не слышал о функциональных точках. – geschema
Это также зависит от того, кто написал код (уровень опыта) и насколько велика база кода.
Я буду рассматривать все предупреждения как ошибки.
Сколько ошибок вы получаете, когда запускаете инструмент статического анализа кода?
EDIT
Run сссс и проверить циклическую сложность в Маккейба. Он должен сказать, насколько сложным является код.
http://sourceforge.net/projects/cccc/
Run другие инструменты статического анализа.
Я даже не пытался запустить инструмент статического анализа на кодовой базе. Я думаю, мы должны сначала попытаться подсчитать количество предупреждений до нуля. Это кажется разумным? – geschema
@geschema Да, конечно. На мой взгляд, код должен компилироваться без предупреждений, так как большинство предупреждений действительно. –
Также добавьте как можно больше модульных тестов. –
Посмотрите на качество кода. Это быстро даст вам указание на количество проблем, скрывающихся в источнике. Если источник уродливый и требуется много времени, чтобы понять, что в коде будет много ошибок.
Хорошо структурированный код с последовательным стилем и который легко понять, будет содержать меньше проблем. Код показывает, сколько усилий и мысли ушло в него.
Я предполагаю, что источник содержит много предупреждений о том, что в коде будет много ошибок.
Качество кода относительное, и очень трудно измерить. Просто просмотр кода не даст много информации. –
Правда, но это дает вам представление о том, что происходит в программном обеспечении. – Gerhard
Ваш вопрос: «Имеет ли 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. Обычно это может быть достигнуто исключительно путем написания хорошего кода, но иногда предупреждения об использовании компилятора/линта необходимо настроить, чтобы успокоить инструмент для вещей, которые не являются проблемами (используйте разумно).
Но важный момент, который я хочу сделать это: быть очень осторожным при переходе в & фиксирующее компилятор & линт предупреждения. Это замечательная цель, но вы также можете непреднамеренно нарушить рабочий код и/или выявить неопределенное поведение, которое случайно срабатывало в «сломанном» коде. Да, это действительно так. Так что осторожно шагайте.
Наконец, если у вас есть солидный набор тестов уже на месте, которые помогут вам определить, если вы случайно сломать что-то в то время как рефакторинга.
Удачи вам!
+1 для осторожного совета. См. Также эту книгу, чтобы помочь сделать переход от незаказанного кода к дружественному рефактору коду: http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – Matthieu
@matthieu: это замечательная книга. Он также настоятельно рекомендует его. – geschema
Спасибо за отличный совет и за то, что указали на риск появления новых ошибок при установке, казалось бы, безобидных предупреждений, особенно когда тестов нет. – geschema
Если вы хотите, чтобы получить оценку числа дефектов, обычный способом статистического estimatation является субсемплировать данные. Я бы выбрал три подпрограммы среднего размера наугад и тщательно их проверял на наличие ошибок (исключить предупреждения компилятора, запустить инструмент статического анализа и т. Д.). Если вы обнаружите три ошибки в 100 общих строках кода, выбранных случайным образом, представляется разумным, что подобная плотность ошибок находится в остальной части кода.
Проблема упоминается здесь введения новых ошибок является важной проблемой, но вам не нужно, чтобы проверить измененный код обратно в отрасль производства, чтобы запустить этот тест. Я хотел бы предложить тщательный набор модульных тестов перед изменением любых подпрограмм и очистку всего кода, за которым следует тщательное тестирование системы, прежде чем выпустить новый код для производства.
Если ему не повезет, его образец может быть очень хорошим ... –
@VJo: * Подзадача * не означает * один образец *! Это статистика для вас. – Clifford
@ Клиффорд Статистика в порядке, но закон мурми выше статистики;) –
Если вы хотите продемонстрировать преимущества модульных тестов, обзоров кода, инструментов статического анализа, я предлагаю провести экспериментальное исследование.
Проведите некоторые модульные тесты, просмотрите код и запустите инструменты статического анализа на части кода. Покажите руководству, сколько ошибок вы найдете с помощью этих методов. Надеюсь, результаты говорят сами за себя.
Следующая статья имеет некоторые цифры, основанные на реальных проектах, к которым статический анализ был применен к: http://www.stsc.hill.af.mil/crosstalk/2003/11/0311German.html
Конечно критерии, по которым аномалия подсчитано может повлиять на результаты резко, что приводит к большому изменение в цифрах, приведенных в таблице 1. В этой таблице количество аномалий на тысячу строк кода для C колеблется от 500 (!) до примерно 10 (сгенерировано автоматически).
- 1. Как программное обеспечение работает другое программное обеспечение
- 2. Программное обеспечение: как программное обеспечение распознает песню?
- 3. Программное обеспечение IP-переадресация
- 4. биржевое программное обеспечение
- 5. MonoTorrent распространять программное обеспечение
- 6. Промежуточное программное обеспечение, кроме
- 7. Программное обеспечение контекстной рекламы
- 8. Программное обеспечение Fault Tolerance
- 9. Программирование Модульное программное обеспечение
- 10. облако готовое программное обеспечение
- 11. Программное обеспечение 3D-визуализации
- 12. Бесплатное программное обеспечение UML
- 13. Программное обеспечение и биомимика
- 14. Автономное программное обеспечение
- 15. Параллельное программное обеспечение?
- 16. Программное обеспечение «Data Repository»
- 17. Программное обеспечение PHP + MySQL
- 18. Программное обеспечение Packet Blocker
- 19. Трек устанавливает программное обеспечение
- 20. Программное обеспечение шаблонов видео?
- 21. Программное обеспечение назад андроид
- 22. приобрел программное обеспечение
- 23. Программное обеспечение Business Workflow
- 24. программное обеспечение нейронной сети
- 25. Программное обеспечение проверки орфографии
- 26. Программное обеспечение TRAC-Like
- 27. Программное обеспечение смешивания аудио
- 28. Серверное программное обеспечение SMPP
- 29. Издательское программное обеспечение
- 30. Программное обеспечение GIS IMS
Почему вы хотите знать? – Jan
Очень сложно сказать, насколько важно количество предупреждений. Большинство предупреждений, исходящих из заголовка, будут сообщены во всех единицах трансляции, которые включают этот заголовок. – MSalters
@Jan: показать управление, что, вероятно, много ошибок в кодовой базе, и что мы должны начать что-то делать с этим прямо сейчас. – geschema