Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод.рекомендации по разработке и стандартизац...doc
Скачиваний:
27
Добавлен:
27.11.2019
Размер:
310.78 Кб
Скачать

1. Объемные метрики Холстеда

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

В число простых уникальных операторов программы (n1) включаются операторы присваивания, имена процедур и функций, знаки операций (+, -, *, /, и т.д.), управляющие структуры (IF … THEN … ELSE …; REPEAT … UNTIL …; и т.д.),а также группирующие конструкции BEGIN … END и скобки ( … ).

В число простых уникальных операндов программы (n2) включаются переменные, константы и элементы массивов. Массив рассматривается как один операнд. Элемент массива рассматривается как один операнд - массив, оператор индексации и операнд индекс.

Общее число операторов в программе (N1) и общее число операндов (N2) – это суммарное число операторов и операндов в программе с учетом их повторения.

Словарь программы определяется по формуле n=n1+n2.

Длина программы N=N1+N2.

Реальный объем программы - 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),

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

- последующая операция уничтожает результаты предыдущей без их использования;

- присутствуют тождественные выражения, решающие совершенно одинаковые задачи;

- одной и той же переменной назначаются различные имена и т. п.

Подобные ситуации приводят к изменению N без изменения n.

М. Холстед утверждает, что для стилистически корректных программ отклонение в оценке теоретической длины N^ от реальной N не превышает 10%. Таким образом, измеряя n1, n2, N1 и N2 и сопоставляя значения N и N^ для некоторой программы, при более чем 10%-ном отклонении можно говорить о наличии в программе стилистических ошибок, т. е. несовершенств.

Уровень качества программирования L=V*/V

Исходным для введения этой характеристики является предположение о том, что при снижении стилистического качества программирования уменьшается содержательная нагрузка на каждый компонент программы и, как следствие, расширяется объем реализации исходного алгоритма. Учитывая это, можно оценить качество программирования на основании степени расширения текста относительно потенциального объема V*. Для идеальной программы L=1, а для реальной - всегда L<1.

Оценка уровня качества программирования L^ = 2n2 / (n1.N2).

Данная оценка использует только параметры реальной программы и не использует предположения об ее теоретическом объеме.

Интеллектуальное содержание конкретного алгоритма, инвариантное по отношению к используемым языкам реализации: I = L^ . V.

Трудоемкость кодирования оценивается в числе мысленных элементарных решений, т.к. написание программы по заранее известному алгоритму есть 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*.

Ожидаемое число ошибок в программе В = E2/3/3000. Данное выражение выведено Холстедом с использованием эмпирических данных и не имеет строго научного обоснования.