Объемные меры оценивают сложность программ исходя из ее объемных характеристик. Основу метрик Холстеда составляют четыре измеряемых характеристики программы, учитывающие количество операндов и операторов в программе.
В число простых уникальных операторов программы (n1) включаются операторы присваивания, имена процедур и функций, знаки операций (+, -, *, /, и т.д.), управляющие структуры (IF … THEN … ELSE …; REPEAT … UNTIL …; и т.д.),а также группирующие конструкции BEGIN … END и скобки ( … ).
В число простых уникальных операндов программы (n2) включаются переменные, константы и элементы массивов. Массив рассматривается как один операнд. Элемент массива рассматривается как один операнд — массив, оператор индексации и операнд индекс.
Общее число операторов в программе (N1) и общее число операндов (N2) – это суммарное число операторов и операндов в программе с учетом их повторения.
Словарь программы определяется по формуле n=n1+n2.
Длина программы – N=N1+N2.
Лекция 13. Качество ПО
Реальный объем программы — V=Nlog2(n) (бит).
Потенциальный объем программы описывает объем программы, соответствующий максимально компактному тексту программы, реализующей данный алгоритм. В таком тексте ни операторы, ни операнды не требуют повторений, следовательно данная метрика вычисляется по формуле — V * =n * log2(n * ) (бит). Здесь n* — теоретический словарь программы, т.е. словарный запас, необходимый для написания программы, с учетом того, что каждая необходимая функция уже реализована в данном языке и, следовательно, программа сводится к вызову этой функции.
Например, cогласно М. Холстеду, возможная реализация процедуры выделения наибольшего общего делителя двух чисел могло бы выглядеть так:
CALL НОД (A, B, Result).
Тогда формула может быть изменена на V * =(2+n2 * )log2(2+n2 * ) (бит), где n2 * — минимальное число требуемых входных и выходных параметров (операндов).
В этом случае при переводе алгоритма с одного языка на другой его потенциальный объем V * не меняется, но действительный объем V увеличивается или уменьшается в зависимости от развитости рассматриваемых языков.
Для измерения теоретической длины программы используется аппроксимирующая формула — N^ = n1 log2(n1) + n2*log2(n2),
Вводя эту оценку, Холстед исходил из основных концепций теории информации, по аналогии с которыми частота использования операторов и операндов в программе пропорциональна двоичному логарифму количества их типов. Таким образом, данная формула представляет собой идеализированную аппроксимацию формулы длины программы, т. е. она справедлива для потенциально корректных программ, свободных от избыточности или несовершенств (стилистических ошибок). Несовершенствами можно считать следующие ситуации:
— последующая операция уничтожает результаты предыдущей без их использования;
— присутствуют тождественные выражения, решающие совершенно одинаковые задачи;
— одной и той же переменной назначаются различные имена и т. п.
Лекция №2. Метрики качества программного обеспечения
Подобные ситуации приводят к изменению N без изменения n.
М. Холстед утверждает, что для стилистически корректных программ отклонение в оценке теоретической длины N^ от реальной N не превышает 10%. Таким образом, измеряя n1, n2, N1 и N2 и сопоставляя значения N и N^ для некоторой программы, при более чем 10%-ном отклонении можно говорить о наличии в программе стилистических ошибок, т. е. несовершенств.
Уровень качества программирования L=V*/V
Исходным для введения этой характеристики является предположение о том, что при снижении стилистического качества программирования уменьшается содержательная нагрузка на каждый компонент программы и, как следствие, расширяется объем реализации исходного алгоритма. Учитывая это, можно оценить качество программирования на основании степени расширения текста относительно потенциального объема V*. Для идеальной программы L=1, а для реальной — всегда L
Оценка уровня качества программирования L^ = 2n2 / (n1 . N2).
Данная оценка использует только параметры реальной программы и не использует предположения об ее теоретическом объеме.
Трудоемкость кодирования оценивается в числе мысленных элементарных решений, т.к. написание программы по заранее известному алгоритму есть N^-кратная выборка операторов и операндов из словаря программы n, причем число сравнений составит log2(n). Количественно это можно характеризовать с помощью характеристики L, поскольку 1/L имеет смысл рассматривать как средний коэффициент сложности, влияющий на скорость выборки для данной программы. Тогда оценка необходимых интеллектуальных усилий по написанию программы может быть измерена как E = N^ log2(n/L).
Аналогично, если вместо теоретической длины программы N^ использовать ее реальную длину можно оценить трудоемкость понимания готовой программы: E’ = N log2(n/L).
Время программирования оценивается по формуле — Т = E/S, где S — число Страуда равное количеству страудовских “моментов” в секунду. Психолог Дж. Страуд определил “момент” как время, требуемое человеческому мозгу для выполнения наиболее элементарного различения. Он обнаружил, что в течение всего времени бодрствования человек воспринимает эти “моменты” со скоростью “от пяти до двадцати или чуть меньшего числа раз” в секунду (т. е. 5<=S<=20).
Уровень используемого языка программировании Lambda = L V * .
Ожидаемое число ошибок в программе В = E 2/3 /3000. Данное выражение выведено Холстедом с использованием эмпирических данных и не имеет строго научного обоснования.
Источник: studfile.net
Русские Блоги
// Вернемся к классическому примеру «имя + фамилия = полное имя», вы можете оглянуться назад: сделать автоматический атрибут fullName доступным для записи и позволить пользователю напрямую.
«Python Great God’s Propamition Road».
Общий гость : Учитель Чжан,Церковь знаний «Эксплуатация и техническое обслуживание Python» Лектор курса,Старший эксперт по развитию Python. В 6 -летнем опыте разработки Python человек, отвеч.
Насколько пузырька находится под новым розничным воздухом?
Текст | Большая научная техника Gao Qianru редактировать| Sanlu. Number1 Нет времени покинуть беспилотную трансформацию шельфа. В 2016 году М.А. Юн выдвинул новые розничные концепции, и новая роз.
Дизайн Шаблоны-Стратегия
Очень распространенный алгоритм: 1 Что нам делать без этого режима? Например, если есть несколько алгоритмов для членов, v1, v2, v3, просто написать три if в бизнес-классе XxxBiz. Простой, прямой и эф.
Источник: russianblogs.com
Качественный анализ программного модуля на основе метрик кода
Цель работы: оценить сопровождаемость кода на основе метрики предлагаемой компанией Micorsoft. Получить базовые представления о таких метриках как, количество строк кода, цикломатическая сложность, глубина наследования и связность классов.
Методические указания по выполнению работы
Индекс сопровождаемости кода определяется по формуле:
MI = MAX(0, (171 — 5.2 * ln(HV) — 0.23 * CC — 16.2 * ln(LoC)) * 100 / 171),
– Объем программы (Halstead Volume),
CC –Цикломатическая сложность;
LoC – Количество строк кода.
Метрики Холстеда
Метрика Холстеда относится к метрикам, вычисляемым на основании анализа числа строк и синтаксических элементов исходного кода программы.
Основу метрики Холстеда составляют четыре измеряемые характеристики программы:
n1 (Number of Unique Operators) — число уникальных операторов программы, включая символы-разделители, имена процедур и знаки операций (словарь операторов);
n2 (Number of Unique Operands) — число уникальных операндов программы (словарь операндов);
N1 (Number of Operators) — общее число операторов в программе;
N2 (Number of Operands) — общее число операндов в программе.
На основании этих характеристик рассчитываются оценки:
Словарь программы (Halstead Program Vocabulary, HPVoc): n = n1 + n2;
Длина программы (Halstead Program Length, HPLen): N = N1 + N2;
Объем программы (Halstead Program Volume, HPVol): V = N log2 n;
Объем программы по Холстеду определяет объем кода, запрограммированного алгоритма. Размер метрики должен быть от 20 до 1000 для одной функции и от 100 до 8000 для одного файла. Если размер метрики превышает верхнюю границу, то рекомендуется более детально изучить функциональную нагрузку на исследуемый элемент и разбить его на несколько составляющих либо провести оптимизацию алгоритма.
При расчете метрики Холстеда используются следующие операнды
Идентификаторы – все идентификаторы которые не являются зарезервированными словами
Идентификаторы типов — зарезервированные слова обозначающие тип данных : bool, char, double, float, int, long, short, signed, unsigned, void.
Константы числовые, символьные, строковые константы.
Ключевые слова следующих категорий, которые интерпретируются как операторы:
Идентификаторы класса памяти: inline, register, static, typedef, virtual, mutable.
Квалификаторы типа: const, friend, volatile.
Зарезервированные слова: asm, break, case, class, continue, default, delete, do, else, enum, for, goto, if, new, operator, private, protected, public, return, sizeof, struct, switch, this, union, while, namespace, using, try, catch, throw, const_cast, static_cast, dynamic_cast, reinterpret_cast, typeid, template, explicit, true, false, typename
Следующие управляющие структуры for (. ) if (. ) switch (. ) while for (. ) and catch (. ) интерпретируются как один оператор.
Цикломатическая сложность
Эта метрика определяет структурную сложность кода . Для того чтобы найти эту метрику необходимо определить количество «веток» алгоритма. Фактически подсчет сводится к определению числа операторов if, for, while и case в операторе switch. Приложение с большой цикломатической сложностью требует больше тестов для покрытия.
Количество строк кода
Определяет число строк кода. Количество строк кода показывает непосредственное число строк кода, то есть не включает в себя пустые строки и комментарии. Большое количество строк показывает, что на исходный файл имеет сильную смысловую нагрузку и требует разбиения.
Глубина дерева наследования
Показывает максимальную длину цепочки наследуемых классов. Чем больше эта величина тем сложнее сопровождать потомков в связи с возможными проблемами связанными с переопределениями наследуемых методов.
Связностьклассов
Определяет число ссылок между двумя разными классами. Чем выше это значение, тем сложнее эволюция данного программного обеспечения за счет их взаимозависимостей.
1. Для разработанного программного обеспечения вычислить предложенные метрики
2. Сделать вывод на базе метрики сопровождаемости.
Вычислить метрику программного модуля для вычисления корня квадратного уравнения (SqrRoot.h and SqrRoot.cpp)
1.Вычисление метрики Холстеда
Источник: vunivere.ru