Метрика программного обеспечения ABC
Программная метрика ABC была введена Джерри Фитцпатриком в 1997 году для преодоления недостатков LOC . [1] Метрика определяет оценку ABC как тройку значений, которые представляют размер набора операторов исходного кода. Оценка ABC рассчитывается путем подсчета количества заданий (A), количества ветвей (B) и количества условных предложений (C) в программе. Оценка ABC может применяться к отдельным методам , функциям , классам , модулям или файлам внутри программы.
Оценка ABC представлена трехмерным вектором <Назначения (A), Ветви (B), Условные обозначения (C) >. Его также можно представить как скалярное значение, которое представляет собой величину вектора < Присвоения (A), Ветви (B), Условные обозначения (C) > и рассчитывается следующим образом:
По соглашению, значение величины ABC округляется до ближайшей десятой.
История
[ редактировать ]Концепция измерения размера программного обеспечения была впервые предложена Морисом Холстедом. [2] из Университета Пердью в 1975 году. Он предположил, что каждая компьютерная программа состоит в основном из токенов : операторов и операндов . Он пришел к выводу, что подсчет количества уникальных операторов и операндов дает нам меру размера программы. Однако это не было принято в качестве меры размера программы.
Строки кода (LOC) были еще одним популярным показателем размера программы. LOC не считался точным показателем размера программы, поскольку даже программа с одинаковой функциональностью может иметь разное количество строк в зависимости от стиля кодирования. [3]
Другая метрика, называемая метрикой функциональных точек (FP), была введена для расчета количества транзакций пользовательского ввода и вывода. Расчеты функциональных точек не дали информации ни о функциональности программы, ни о подпрограммах, которые были задействованы в программе. [4]
Метрика ABC предназначена для устранения недостатков подсчета LOC, FP и токенов (операций и операндов). Однако показатель FP также можно использовать в дополнение к показателю ABC.
Хотя автор утверждает, что метрика ABC измеряет размер, некоторые полагают, что она измеряет сложность. [5] Способность метрики ABC измерять сложность зависит от того, как определяется сложность.
Определение
[ редактировать ]Три компонента оценки ABC определяются следующим образом:
- Назначение: хранение или перенос данных в переменную .
- Ветви: явная прямая ветвь программы, выходящая за рамки .
- Условные обозначения: логическое значение или логический тест.
Поскольку базовые языки, такие как C, C++, Java и т. д., содержат только такие операции, как присвоение переменных, вызовы функций и условия тестирования, оценка ABC состоит из этих трех компонентов. [1]
Если вектор ABC обозначен как ⟨5,11,9⟩ для подпрограммы , это означает, что подпрограмма имеет 5 присваиваний, 11 ветвей и 9 условных операторов. В целях стандартизации значения следует заключать в угловые скобки и записывать в том же порядке, согласно обозначениям ⟨A, B, C⟩ .
Зачастую удобнее сравнивать размеры исходного кода, используя скалярное значение. Отдельные значения ABC различны, поэтому, по мнению Джерри Фитцпатрика, мы считаем три компонента ортогональными , что позволяет вычислить скалярную величину ABC, как показано выше.
Скалярные оценки ABC теряют некоторые преимущества вектора. Вместо вычисления величины вектора взвешенная сумма векторов может поддерживать более точное сравнение размеров. Скалярные оценки ABC не следует представлять без сопровождающих векторов ABC, поскольку скалярные значения не являются полным представлением размера.
Теория
[ редактировать ]Конкретные правила подсчета значений вектора ABC должны интерпретироваться по-разному для разных языков из-за семантических различий между ними.
Поэтому правила расчета вектора ABC немного различаются в зависимости от языка. Ниже мы определяем правила расчета метрик ABC для C, C++ и Java. На основе этих правил можно интерпретировать правила для других императивных языков. [1]
Правила ABC для C
[ редактировать ]Следующие правила дают количество назначений, ветвей и условий в метрике ABC для C :
- Добавьте единицу к числу назначений, если:
- Появление оператора присваивания ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^= ).
- Появление оператора инкремента или декремента ( ++, -- ).
- Добавьте единицу к количеству ветвей, если:
- Возникновение вызова функции .
- Появление любого оператора перехода , цель которого находится на более глубоком уровне вложенности , чем уровень перехода.
- Добавьте единицу к количеству условий, если:
- Появление условного оператора ( <, >, <=, >=, ==, != ).
- Появление следующих ключевых слов (« еще », « случай », « по умолчанию », « ? »).
- Появление унарного условного оператора.
Правила ABC для C++
[ редактировать ]Следующие правила дают количество назначений, ветвей и условий в метрике ABC для C++ :
- Добавьте единицу к числу назначений, если:
- Появление оператора присваивания (исключая объявления констант и назначения параметров по умолчанию ) ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^= ).
- Появление оператора инкремента или декремента (префикса или постфикса) ( ++, -- ).
- Инициализация переменной или непостоянного члена класса .
- Добавьте единицу к количеству ветвей, если:
- Возникновение вызова функции или вызова метода класса.
- Появление любого оператора перехода, цель которого находится на более глубоком уровне вложенности, чем уровень перехода.
- Появление операторов «нового» или «удаления».
- Добавьте единицу к количеству условий, если:
- Появление условного оператора ( <, >, <=, >=, ==, != ).
- Появление следующих ключевых слов (' else ', ' case ', ' default ', ' ? ', ' try ', ' catch ').
- Появление унарного условного оператора.
Правила ABC для Java
[ редактировать ]Следующие правила дают количество назначений, ветвей и условий в метрике ABC для Java :
- Добавьте единицу к числу назначений, если:
- Появление оператора присваивания (исключая объявления констант и назначения параметров по умолчанию) ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^=, > >>= ).
- Появление оператора инкремента или декремента (префикса или постфикса) ( ++, -- ).
- Добавьте единицу к количеству ветвей, когда
- Возникновение вызова функции или вызова метода класса.
- Появление «нового» оператора.
- Добавьте единицу к количеству условий, если:
- Появление условного оператора ( <, >, <=, >=, ==, != ).
- Появление следующих ключевых слов (' else ', ' case ', ' default ', ' ? ', ' try ', ' catch ').
- Появление унарного условного оператора.
Приложения
[ редактировать ]Независимость от стиля кодирования
[ редактировать ]Поскольку метрика оценки ABC основана на идее, что такие задачи, как хранение данных, ветвление и условное тестирование , эта метрика не зависит от стиля кодирования пользователя.
Оценка времени проекта
[ редактировать ]Расчет оценки ABC помогает оценить количество времени, необходимое для завершения проекта. Это можно сделать путем приблизительной оценки ABC-оценки проекта и расчета ABC-оценки программы в конкретный день. Количество времени, затраченное на завершение проекта, можно получить, разделив оценку ABC проекта на оценку ABC, полученную за один день.
Расчет количества ошибок
[ редактировать ]Первоначально процент ошибок рассчитывался как Число ошибок / LOC . Однако LOC не является надежным показателем размера программы, поскольку он зависит от стиля кодирования. Более точный способ измерения количества ошибок – это подсчет количества ошибок/оценки ABC .
Сравнение программ
[ редактировать ]Программы, написанные на разных языках, можно сравнивать с помощью ABC-оценки, поскольку в большинстве языков используются присваивания, ветвления и условные операторы.
Информация о количестве отдельных параметров (количество присваиваний, ветвей и условий) может помочь классифицировать программу как «надежную по данным», «сильную функцию» или «сильную логику». Векторная форма оценки ABC может дать представление о движущих принципах приложения , тогда как в скалярной форме оценки детали теряются.
Линейная метрика
[ редактировать ]Оценки ABC линейны , поэтому можно оценить любой файл, модуль, класс, функцию или метод. Например, (векторная) оценка ABC для модуля представляет собой сумму оценок его подмодулей. Однако скалярные оценки ABC нелинейны.
См. также
[ редактировать ]- Сложность программного обеспечения
- Меры сложности Холстеда
- Цикломатическая сложность
- Сложность синхронизации
- Метрика программного обеспечения
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д Фитцпатрик, Джерри (1997). «Применение метрики ABC к C, C++ и Java» (PDF) . Отчет С++ .
- ^ Холстед, Морис (1977). Элементы науки о программном обеспечении . Северная Голландия: Эльзевир.
- ^ Фентон, Норман Э. (1991). «Метрики программного обеспечения: успехи, неудачи и новые направления» (PDF) . Чепмен и Холл .
- ^ Китченхэм, Барбара (декабрь 1995 г.). «На пути к системе валидации измерений программного обеспечения». Транзакции IEEE по разработке программного обеспечения . 21 (12): 929–944. дои : 10.1109/32.489070 . S2CID 8608582 .
- ^ Фитцпатрик, Джерри (2017). «Приложение А». Вечные законы разработки программного обеспечения . Корпорация обновления программного обеспечения. ISBN 978-0999335604 .