Унифицированный подсчет кода (UCC) - Википедия - Unified Code Count (UCC)

Единое количество кодов
USC Unified CodeCount (UCC) v.201007. Инструмент с графическим интерфейсом пользователя, находящийся в стадии разработки, от указанного разработчика (в настоящее время не выпущен).
USC Unified CodeCount (UCC) v.201007. Инструмент с графическим интерфейсом пользователя, находящийся в разработке, от указанного разработчика (в настоящее время не выпущен).
Оригинальный автор (ы)Ву Нгуен
Разработчики)USC CSSE
изначальный выпуск2009; 11 лет назад (2009)
Написано вC ++
Операционная системаКроссплатформенность
Доступно ванглийский
ТипИнструмент сравнения файлов
ЛицензияОграниченная общественная лицензия USC-CSSE
Интернет сайтзакат солнца.usc.edu/исследование/ CODECOUNT/

В Единый счетчик кода (UCC) - это комплексный программный счетчик строк кода, созданный Центром системной и программной инженерии USC. Он доступен для широкой публики как Открытый исходный код код и может быть скомпилирован с любым стандартом ANSI C ++ компилятор.

Вступление

Одна из основных проблем в оценка программного обеспечения размер, который также является одним из наиболее важных атрибутов программного продукта. Это не только ключевой показатель стоимости программного обеспечения и времени, но и базовая единица для получения других показателей для оценки статуса проекта и качества программного обеспечения. Метрика размера используется как важный входной параметр для большинства моделей оценки затрат.[1] Такие как КОКОМО, СТРОЙНЫЙ, SEER-SEM, и ЦЕНА TruePlanning на ПО. Хотя исходные строки кода или SLOC является широко принятой метрикой калибровки, в целом отсутствуют стандарты, обеспечивающие единообразие того, что и как считать SLOC.

Центр системной и программной инженерии (CSSE) на Университет Южной Калифорнии разработала и выпустила набор инструментов для подсчета кода под названием Unified CodeCount (UCC), который обеспечивает согласованность между независимыми организациями в правилах, используемых для подсчета строк программного кода.

Блок-схема UCC.
Блок-схема UCC

Основная цель - поддержка определения количества программных продуктов и показателей для сбора исторических данных и отчетов. Он реализует структура подсчета кода опубликовано Институтом программной инженерии (SEI) и адаптировано КОКОМО. Логический и физический SLOC входят в число показателей, генерируемых набором инструментов. SLOC относится к исходным строкам кода и является единицей, используемой для измерения размера программного обеспечения на основе набора правил.[2] SLOC является ключевым входом для оценки усилий по проекту, а также используется для расчета производительности и других измерений. Существует два типа SLOC: физический и логический sloc. Физический SLOC (PSLOC). Один физический SLOC соответствует одной строке, начинающейся с первого символа и заканчивающейся возвратом каретки или маркером конца файла той же строки. Пустые строки и строки комментариев не учитываются. Логический SLOC (LSLOC) - строки кода, предназначенные для измерения «операторов», которые обычно заканчиваются точкой с запятой (C / C ++, Java, C #) или возвратом каретки (VB, Assembly) и т. Д. Логические SLOC не чувствительны к формату и стилистические соглашения, но они зависят от языка.

Возможность различать Unified CodeCount (UCC) позволяет пользователю подсчитывать, сравнивать и собирать логические различия между двумя версиями исходного кода программного продукта. Возможность сравнения позволяет пользователям подсчитывать количество добавленных / новых, удаленных, измененных и неизмененных логических SLOC текущей версии по сравнению с предыдущей версией.

История

В начале 2000-х годов существовало множество различных инструментов для подсчета кода. Однако из-за отсутствия стандартных правил подсчета и проблем с доступностью программного обеспечения Группа по улучшению анализа затрат (NCAIG) Национальная разведка выявила потребность в новом инструменте подсчета кода для анализа затрат на программное обеспечение. Чтобы избежать какой-либо предвзятости в отрасли, инструмент CodeCount[3] был разработан в центре под руководством Д-р Барри Бём, Мерили Уитон и А. Винзор Браун, с IV&V предоставленными Аэрокосмическая корпорация. Многие организации, включая Northrop Grumman и Компания Боинг пожертвовал несколько инструментов для подсчета кода в USC CSSE. Целью было разработать всеобщее достояние инструмент подсчета кода, который поддерживает несколько языков и дает согласованные результаты для больших и малых программных систем.

Планы проектов разрабатываются каждый семестр, и аспирантам USC, проводящим целевые исследования, поручаются проекты для обновления инструмента подсчета кода. Ву Нгуен, аспирант Университета Южной Калифорнии, в течение нескольких семестров руководил студенческими проектами. Все изменения проверяются и утверждаются командой Aerospace Corporation IV и V, которая тесно сотрудничает с инструктором USC над проектами. Бета-версии тестируются отраслевыми аффилированными лицами, а затем публикуются в виде открытого исходного кода.

В 2006 году была проведена работа по разработке разностного инструмента, который сравнивал бы две программные системы. исходные данные для определения различий между двумя версиями программного обеспечения. Набор инструментов CodeCount, который является предшественником UCC, был выпущен в 2007 году. Это был набор автономных программ, написанных на одном языке для измерения исходного кода, написанного на таких языках, как КОБОЛ, сборка, PL / 1, Паскаль, и Веселый.

Нгуен разработал дизайн системы Unified CodeCount (UCC) как рамки и существующие счетчики кода и инструмент сравнения были объединены в него. Дополнительные функции, такие как унифицированный подсчет и возможности сравнения, обнаружение повторяющихся файлов, поддержка текст и CSV также были добавлены выходные файлы и т.д. На 24-м Международном форуме по COCOMO в октябре 2009 г. была представлена ​​презентация «Унифицированное количество кодов с различными функциональными возможностями».[4]

Инструмент UCC был выпущен для общественности с лицензией[5] предоставление пользователям возможности использовать и изменять код; если модификации подлежат распространению, пользователь должен отправить копию изменений в USC CSSE.

Важность

Unified CodeCount (UCC) используется для анализа существующих проектов на предмет физических и логических подсчетов SLOC, которые напрямую связаны с выполненной работой. Собранные данные затем могут быть использованы моделями оценки стоимости программного обеспечения для точной оценки времени и затрат, затрачиваемых на аналогичные проекты для успешного завершения. На рынке доступно множество инструментов для подсчета кода, однако большинство из них имеют различные недостатки, такие как:

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

NCAIG обратилась к CSSE с предложением создать решение для подсчета кода, разработанное непредвзятым, уважаемым в отрасли учреждением и обеспечивающее следующие функции:

  • Подсчитайте программные строки кода
  • Последовательно
  • С задокументированными стандартами
  • Возможность легко добавлять новые языки
  • Поддержка и сопровождение
  • Сравните разные базовые версии программного обеспечения
  • Определить добавление, изменение, удаление
  • Определите повторяющиеся файлы
  • Определить сложность
  • Независимая платформа
  • Интерфейс командной строки
  • Режимы: только подсчет кода или подсчет плюс разность
  • Подсчитывает несколько файлов и языков за один проход
  • Отчеты о выходе
  • Надежная обработка
  • Варианты повышения производительности
  • Журнал ошибок

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

Функции

Unified CodeCount Toolset с функцией дифференцирования (UCC) - это набор инструментов, предназначенных для автоматизации сбора информации о размерах исходного кода и изменениях. UCC работает на нескольких языках программирования и фокусируется на двух возможных определениях исходных строк кода (SLOC), физических и / или логических. Функцию «Различие» можно использовать для сравнения двух исходные данные программных систем и определить показатели изменений: количество добавлений, удалений, модификаций и немодификаций SLOC.

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

Использование CodeCount

  • Возможности подсчета - UCC позволяет пользователям измерять информацию о размере базовой линии исходной программы, анализируя и производя подсчет для:
а) Логический SLOC
б) Физический SLOC
в) Комментарий
г) Исполняемый файл, объявление данных
д) Директива компилятора SLOC
е) Ключевые слова
  • Различия в возможностях - UCC позволяет пользователям сравнивать и измерять различия между двумя базовыми уровнями исходных программ. Эти различия измеряются количеством логических SLOC, добавленных / новых, удаленных, измененных и неизмененных. Эти результаты сравнения могут быть сохранены в текстовых файлах .txt или .csv. По умолчанию используется .csv, но .txt можно указать с помощью переключателя –ascii.
  • Подсчет и различие каталогов - UCC позволяет пользователям подсчитывать или сравнивать исходные файлы, указывая каталоги, в которых расположены файлы.
  • Поддержка различных языков программирования - возможности подсчета и разности допускают исходный код, написанный на C / C ++, C #, Ява, SQL, Ада, Perl, ASP.NET, JSP, CSS, HTML, XML, JavaScript, VB, PHP, VbScript, Баш, Сценарий оболочки C, Холодный синтез, Фортран, Мидас, NeXtMidas, Паскаль, Рубин, X-Midas, и Python.
  • Командные аргументы - инструмент принимает настройки пользователя через командные аргументы. UCC - это командная строка приложение, и оно компилируется в режиме консоли приложения.
  • Дублирование - для каждой базовой линии два файла считаются дубликатами, если они имеют одинаковое содержимое или разница меньше порогового значения, заданного параметром командной строки -tdup. Два файла могут быть идентифицированы как дубликаты, хотя у них разные имена файлов. Комментарии и пустые строки при обработке дублирования не учитываются.
  • Сопоставление - при сравнении файлы из базовой линии A сопоставляются с файлами из базовой линии B. Два файла сопоставляются, если у них одинаковое имя файла, независимо от того, к каким каталогам они принадлежат. Остальные файлы сопоставляются с использованием наиболее подходящего алгоритма.
  • Счетчик сложности - UCC производит подсчет сложности для всех файлов исходного кода. Подсчет сложности может включать количество математических, тригонометрических, логарифмических функций, вычислений, условных выражений, логических выражений, препроцессоров, присваиваний, указателей и цикломатическая сложность. При подсчете результаты сложности сохраняются в файл «outfile_cplx.csv», а при проведении разности результаты сохраняются в файлы «Baseline-A-outfile_cplx.csv» и «Baseline-B- outfile_cplx.csv».
  • Расширения файлов. Инструмент определяет, какой счетчик кода использовать для каждого файла из расширения файла.

Функциональность CodeCount

  • Скорость исполнения:
CodeCount написан на C / C ++ и использует относительно простые алгоритмы для распознавания комментариев и физических / логических строк. Тестирование показало, что UCC работает достаточно быстро, за исключением экстремальных ситуаций. При необходимости доступен ряд переключателей, запрещающих определенные типы обработки. Пользователи могут иметь возможность компилировать, используя переключатели оптимизации для более быстрого выполнения; см. руководство пользователя используемого компилятора.
  • Надежность и правильность
CodeCount был тщательно протестирован в лаборатории и используется во всем мире. Существует возможность сообщать о дефектах, и любые обнаруженные дефекты оперативно исправляются. Пользователи нередко добавляют функциональность или исправляют дефекты и уведомляют менеджеров UCC вместе с предоставлением кода для изменений.
  • Документация
Дистрибутив с открытым исходным кодом UCC содержит Примечания к выпуску, Руководство пользователя, и Стандарты подсчета кода для языковых счетчиков. Исходный код содержит заголовки файлов и встроенные комментарии. План разработки программного обеспечения UCC, Спецификация требований к программному обеспечению и План тестирования программного обеспечения доступны по запросу.
  • Простота обслуживания
UCC - это монолитный, объектно-ориентированный набор инструментов, призванный упростить его обслуживание.
  • Легкость расширения
Вариант «CSCI» CodeCount позволяет легко расширять. Пользователи могут легко добавить еще один счетчик языка самостоятельно. Пользователи также могут указать, какие расширения файлов будут выбирать тот или иной счетчик языка.
  • Совместимость
CodeCount разработан для совместимости с КОКОМО механизм оценки требуется или желателен.
  • Портативность
CodeCount был протестирован на большом количестве операционных систем и аппаратных платформ и должен быть переносимым в любую среду, в которой есть компилятор C ++ стандарта ANSI.
  • Доступность исходного кода
Исходный код CodeCount доступен в виде загружаемого zip-файла.
  • Лицензирование
Исходный код CodeCount предоставляется в соответствии с условиями Ограниченной общественной лицензии USC-CSE, которая позволяет любому вносить изменения в код. Однако, если они распространяют этот измененный код среди других, это лицо или агентство должно вернуть копию в USC, чтобы набор инструментов можно было улучшить на благо всех. Полный текст лицензии можно посмотреть на сайте Лицензия UCC.

Стандарты языка

Основная цель Unified CodeCount (UCC) - предоставить методы подсчета, которые определяют согласованное и повторяемое измерение SLOC. Существует более 20 приложений для подсчета SLOC, каждое из которых производит различный физический и логический подсчет SLOC, а на сегодняшнем рынке имеется около 75 коммерчески доступных инструментов оценки стоимости программного обеспечения. Различия в результатах затрат от различных инструментов показывают недостатки текущих методов оценки размера кода, особенно это верно для проектов большого масштаба,[6] где оценка стоимости зависит от автоматических процедур для создания достаточно точных прогнозов. Это привело к необходимости универсального стандарта подсчета SLOC, который давал бы стабильные результаты.

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

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

UCC рассматривает исходные операторы как независимые единицы на уровне исходного кода, где программист полностью конструирует оператор и его под-операторы. UCC предполагает, что исходный код будет компилироваться; в противном случае результаты ненадежны. Большой проблемой было определить окончание каждого оператора для подсчета логических SLOC. Точка с запятой может показаться привлекательной, но не все популярные языки используют точку с запятой (например, SQL, JavaScript, языки сценариев UNIX и т. Д.). Институт программной инженерии (SEI) в Университете Карнеги-Меллона и COCOMO II SLOC определили способ подсчета «сколько и каких элементов программы». Таблицы 1 и 2 иллюстрируют сводку правил подсчета SLOC.[7] для логических строк кода для языков программирования C / C ++, Java и C #. Правила подсчета кода UCC для каждого языка распространяются вместе с выпуском с открытым исходным кодом.

Измерительное устройствоПорядок приоритетаФизический SLOC
Исполняемые строки
Заявления1По одному на строку
Неисполняемые строки
Строки декларации (данных)2По одному на строку
Директивы компилятора3По одному на строку
Таблица 1. Правила подсчета физических SLOC


СтруктураПорядок приоритетаЛогический SLOC
ВЫБОРНЫЕ ЗАЯВЛЕНИЯ:1Считайте один раз в каждом случае.
если, иначе, если, иначе, "?" оператор, попробовать, поймать, переключитьВложенные операторы подсчитываются аналогичным образом.
ЗАЯВЛЕНИЯ ПО ИТЕРАЦИИ:2Считайте один раз в каждом случае.
Пока ... покаИнициализация, условие и приращение в конструкции «for» не учитываются. т.е.
for (i = 0; i <5; i ++)…

Кроме того, не учитываются любые необязательные выражения в конструкции "for", например

for (i = 0, j = 5; i <5, j> 0; i ++, j -)…

Фигурные скобки {…}, заключенные в операторы итерации, и точка с запятой, следующая за «while» в структуре «do.. while», не учитываются.

Заявления о прыжках:3Считайте один раз в каждом случае.
Вернуться, прервать, перейти, выйти, продолжить, броситьЯрлыки, используемые с операторами goto, не учитываются.
ЗАЯВЛЕНИЯ ВЫРАЖЕНИЯ:4Считайте один раз в каждом случае.
Вызов функции, присвоение, пустой операторПустые операторы не влияют на логику программы и обычно служат заполнителями или потребляют ресурсы ЦП для целей синхронизации.
ЗАЯВЛЕНИЯ В ОБЩЕМ:5Считайте один раз в каждом случае.
Заявления, заканчивающиеся точкой с запятойТочки с запятой в операторе «for» или как указано в разделе комментариев для оператора «do.. while» не учитываются.
РАЗЪЕДИНИТЕЛИ БЛОКИРОВКИ6Считайте один раз на пару фигурных скобок {..},
за исключением случаев, когда закрывающая скобка ставится после точки с запятой, т. е.
 };.
Фигурные скобки, используемые с операторами выбора и итерации, не учитываются. Определение функции считается один раз, так как за ним следует набор скобок.
ДИРЕКТИВА КОМПИЛЯТОРА7Считайте один раз в каждом случае.
ДЕКЛАРАЦИЯ ДАННЫХ8Считайте один раз в каждом случае.
Включает прототипы функций, объявления переменных, typedef заявления. Ключевые слова вроде структура, учебный класс не в счет.
Таблица 2. Логические правила подсчета SLOC для C / C ++, Java и C #

Разработка программного обеспечения

Unified CodeCount (UCC) производит подсчет путем захвата строк LSLOC из файла на основе документа спецификации подсчета, созданного для каждого языка; эта спецификация предлагается в качестве стандарта. Функция сравнения сравнивает строки LSLOC из двух файлов, захваченных в процессе подсчета, с помощью общего механизма.

Архитектура UCC

Основную архитектуру UCC можно рассматривать как иерархическую структуру из следующих компонентов:

Архитектура UCC
Начальные классы UCC.

1. MainObject

MainObject - это класс верхнего уровня, который выполняет синтаксический анализ командной строки для извлечения списка файлов из параметров команды, а затем считывает каждый файл в память для подсчета или различения. MainObject вызывает CodeCounters для обработки встроенных языков. Выходные данные функции подсчета предоставляют следующие наборы файлов (.txt) для повторяющихся результатов и результатов подсчета / сложности:

<ЯЗЫК> _outfile.txt, - это файл, в котором Main отображает результаты подсчета для исходных файлов . - это имя языка исходных файлов, например, C_CPP для файлов C / C ++ и Java для файлов Java.
Outfile_cplx.txt, который показывает результаты сложности для исходного файла.
Дубликаты- _outfile.txt, отображает список повторяющихся файлов для языка <ЯЗЫК>.
Дубликаты-outfile_cplx.txt, содержит результаты сложности для повторяющихся файлов.
DuplicatePairs.txt, представляет собой текстовый файл, в котором перечислены совпадения исходного файла и его дубликата.

2. DiffTool

DiffTool является производным от MainObject, который анализирует параметры командной строки и обрабатывает список файлов для каждой базовой линии. Класс DiffTool предоставляет следующие наборы файлов (.txt, .csv) по базовым показателям:

Базовый уровень- - _outfile.txt, считает результаты для исходных файлов для базового уровня A и базового уровня B.
Базовый уровень- - _cplx.txt, Результаты по сложности для исходного уровня A и исходного уровня B.
Соответствующие пары, Список текстовых файлов совпадает между файлами в базовом варианте A и базовом B.
Outfile_diff_results.txt, Основные результаты сравнения в текстовом формате.
Outfile_diff_results.csv, Основные результаты сравнения в формате .csv, который можно открыть с помощью MS Excel.

DiffTool выполняет сравнение базовых показателей с помощью класса CmpMngr.

3. CmpMngr

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

4. CCodeCounter

CCodeCounter используется для обработки предварительного подсчета, где он выполняет следующие операции:

• Подсчитывает пустые строки и комментарии,
• Фильтрует буквальные строки,
• Подсчитывает сложность ключевых слов, операторов и т. Д.
• Подсчитывает директиву компилятора SLOC (с использованием метода CountDirectiveSLOC).
• Выполняет обработку для конкретного языка (создает подклассы).

Будущие улучшения и выпуск

Планы на будущее для UCC включают улучшение вычисления метрик сложности, обеспечение поддержки существующих счетчиков кода и добавление новых счетчиков для дополнительных языков, улучшение отчетности и повышение производительности. Счетчики текста, сборки, Cobol, Jovial, Matlab и Pascal находятся в разработке. Также создается графический пользовательский интерфейс, который можно использовать вместо текущего интерфейса командной строки.

Системные Требования

A. Оборудование

  • ОЗУ: минимум 512 МБ. Рекомендуется: 1024 МБ
  • Жесткий диск: минимум 100 МБ свободного места на диске. Рекомендуется: 200 МБ.

Б. Программные операционные системы

  • Linux 2.6.9
  • Unix
  • Mac OS X
  • Windows 9x / Me / XP / Vista
  • Солярис

C. Поддерживаемые компиляторы

  • Компилятор ANSI C / C ++

Смотрите также

Рекомендации

  1. ^ Б. Бем; C. Abts; С. Чулани. «Подходы к оценке стоимости разработки программного обеспечения: обзор». Анналы программной инженерии, 2000.; Б. Бем; Э. Горовиц; Р. Мадачи; Д. Рейфер; Б. К. Кларк; Б. Стис; А. В. Браун; С. Чулани и К. Абтс. «Оценка стоимости программного обеспечения с COCOMO II».
  2. ^ Институт программной инженерии. «Измерение размера программного обеспечения: основа для подсчета исходных утверждений» (PDF). Технический отчет CMU / SEI-92-TR-20 ESC-TR-92-020, 1992.
  3. ^ «CodeCount, Центр системной и программной инженерии USC». Csse.usc.edu.
  4. ^ «CSSE - Главная». Csse.usc.edu. Получено 28 декабря 2018.
  5. ^ «Архивная копия». Архивировано из оригинал на 2011-03-06. Получено 2010-11-30.CS1 maint: заархивированная копия как заголовок (связь)
  6. ^ G.E. Kalb. «Подсчет строк кода, заблуждений, выводов и рекомендаций» (PDF). Брифинг к 3-й ежегодной конференции группы пользователей REVIC, 1990 г..
  7. ^ «Стандарт подсчета SLOC» (PDF). Sunset.usc.edu. Получено 28 декабря 2018.

внешняя ссылка