Рассчитать SLOC GCC C / C ++ Linux - PullRequest
       15

Рассчитать SLOC GCC C / C ++ Linux

3 голосов
/ 13 февраля 2009

У нас есть довольно большой (280 бинарных) программный проект под Linux, и в настоящее время он имеет очень разрозненную структуру кода - это означает, что невозможно [определить], какой код из дерева исходных текстов является допустимым (строится в развертываемые двоичные файлы) и что не рекомендуется. Но Makefiles хороши. Нам нужно рассчитать C / C ++ SLOC для всего проекта.

Вот вопрос - могу ли я узнать, что SLOC GCC скомпилирован? Или, может быть, я могу получить эту информацию из двоичного файла (вероятно, отладочная информация)? Или, может быть, я могу узнать, из каких исходных файлов был скомпилирован бинарный файл, и использовать эту информацию для расчета SLOC?

Спасибо Богдан

Ответы [ 6 ]

2 голосов
/ 13 февраля 2009

Это зависит от того, что вы подразумеваете под SLOC, что GCC скомпилировал. Если вы имеете в виду отслеживать исходные файлы из вашего проекта, которые использовал GCC, то вы, вероятно, использовали бы параметры отслеживания зависимостей, в которых перечислены исходные файлы и заголовки. Это -M и различные варианты. Остерегайтесь включения системных заголовков. Техника, которую я иногда использую, заключается в замене стандартного компилятора C соответствующим вариантом - например, чтобы обеспечить 64-битную компиляцию, я использую 'CC="gcc -m64"', чтобы гарантировать, что при использовании компилятора C он будет компилироваться в 64 -битный режим. Очевидно, что со списком файлов вы можете использовать wc для вычисления количества строк. Вы используете 'sort -u' для удаления дублирующихся заголовков.

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

Если у вас есть другое определение SLOC, вам нужно будет указать, что вы имеете в виду. Иногда люди ищут непустой SLOC, например, без комментариев - но вам все еще нужен список исходных файлов, который, я думаю, опции -M помогут вам определить.

1 голос
/ 29 декабря 2012

Здесь вы можете найти бесплатный (GPL) инструмент под названием sloccount, предназначенный для оценки SLOC в проектах любого размера:

http://www.dwheeler.com/sloccount/

1 голос
/ 13 февраля 2009

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

Второй список, который вам нужен, это список файлов, которые использовались для этого. Для этого обратитесь к списку зависимостей (как вы сказали, это было правильно). (Кажется, вам нужно создать --print-data-base)

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

1 голос
/ 13 февраля 2009

Что вы можете сделать, это выполнить компиляцию только перед процессором, используя флаг -E gcc: это приведет к выводу, который является фактическим компилируемым кодом. Сделайте простой подсчет строк (wc -l) или что-то более продвинутое.

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

0 голосов
/ 16 февраля 2009

Вы можете попробовать Resource Standard Metrics, так как он рассчитывает эффективные строки кода, которые исключают отдельные скобки и т. Д., Которые выполнены в стиле программиста и искусственно увеличивают количество SLOC на 10–33%. Попросите у них бесплатную лицензию, чтобы попробовать.

Их веб-страница http://msquaredtechnologies.com

0 голосов
/ 13 февраля 2009

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

Мы взяли около 40 КБ кода и рассчитали SLOC для этого кода, используя gcov. Затем мы вычислили метрику «исходных строк на байт» и использовали ее для получения приблизительного числа SLOC, используя размер исходного кода C. для всего проекта.

Это отлично сработало для наших нужд.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...