Операторы языка Паскаль в интерпретации Холстеда
Теоретические сведения к индивидуальным практическим работам
Общие сведения о метриках сложности программ
Качество программных средств во многом зависит от сложности их кодов. Например, чем сложнее программа, тем ниже ее надежность и сопровождаемость. Поэтому при оценке качества программ обычно оценивается и их сложность.
Метрики сложности программ принято подразделять на три основные группы [2]:
- метрики размера программ;
- метрики сложности потока управления программ;
- метрики сложности потока данных программ.
Метрики размера программ
Метрики этой группы основаны на анализе исходных текстов программ.
Существуют различные метрики, с помощью которых может быть оценен размер программы.
К наиболее простым метрикам размера программы относятся количество строк исходного текста программыи количество операторов программы.
Из метрик размера программ широкое распространение получили метрики Холстеда [3].
Основу метрик Холстеда составляют шесть базовых метрик программы:
- h1 – словарь операторов (число уникальных операторов программы);
- h2 – словарь операндов (число уникальных операндов программы);
- N1 – общее число операторов в программе;
- N2 – общее число операндов в программе;
- f1j – число вхождений j-го оператора, j = 1, 2, …, h1;
- f2i – число вхождений i-го операнда, i = 1, 2, …, h2.
Справедливы следующие соотношения:
Базовые метрики определяются непосредственно при анализе исходных текстов программ. На основе базовых метрик Холстед предложил рассчитывать ряд производных метрик программы. Среди них рассмотрим следующие:
- словарь программы (общее число уникальных операторов и операндов программы):

- длина программы (общее количество операторов и операндов программы):

- объем программы (число битов, т.е. логических единиц информации, необходимых для записи программы):

Операнды программы представляют собой используемые в ней переменные и константы.
Под операторами программы в метриках Холстеда подразумеваются входящие в ее состав символы операций, символ присваивания, символы-разделители точка и точка с запятой, круглая скобка (пара из открывающей и закрывающей скобок считается одним оператором), управляющие операторы, составной оператор, а также имена процедур и функций.
Несколько служебных слов, входящих в состав одного оператора (например, If…Then…Else), считаются одним оператором.
Метки не относятся ни к операторам, ни к операндам.
Очевидно, что совокупность операторов программы и их количество зависят от языка программирования, на котором написана программа.
Операторы языка Паскаль в интерпретации Холстеда приведены в табл. 1.
При подсчете количества операторов и операндов в программе, написанной на языке Паскаль, следует анализировать только ее раздел операторов, а также разделы операторов процедур и функций пользователя.
Таблица 1
Операторы языка Паскаль в интерпретации Холстеда
| Обозначение оператора | Назначение оператора |
| + | плюс (сложение, объединение множеств, сцепление строк) |
| – | минус (изменение знака, вычитание, разность множеств) |
| * | звездочка (умножение, пересечение множеств) |
| / | наклонная черта, слэш (знак деления, результат всегда имеет вещественный тип) |
| < | Меньше |
| > | Больше |
| = | Равно |
| . | точка (признак конца программы и модуля) |
| ; | точка с запятой (разделитель операторов программы) |
| ( ) | левая и правая скобки при выделении подвыражений |
| <= | меньше или равно |
| >= | больше или равно |
| <> | не равно |
| := | операция присваивания |
| ^ | знак карата (обращение к динамической переменной) |
| And | операция поразрядного логического сложения (И) |
| Not | операция поразрядного дополнения (НЕ) |
| Or | операция поразрядного логического сложения (ИЛИ) |
| Xor | операция поразрядного логического исключающего ИЛИ |
| Div | целочисленное деление |
| Mod | остаток от целочисленного деления |
| Shl | операция сдвига влево |
| Shr | операция сдвига вправо |
| In | операция проверки вхождения элемента в множество |
| Begin… End | составной оператор |
| Break | оператор безусловного выхода из цикла |
| Continue | оператор передачи управления на конец тела цикла |
| Goto < Метка> | оператор безусловного перехода |
| Case… Of… Else… End | оператор варианта |
| If… Then… Else | оператор условного перехода |
| Repeat… Until | оператор цикла с постусловием |
| While… Do | оператор цикла с предусловием |
| For… To… Do | оператор цикла с параметром (с увеличением параметра) |
| For… Downto… Do | оператор цикла с параметром (с уменьшением параметра) |
| With… Do | оператор присоединения |
Пример 1. Расчет метрик Холстеда для программы, вычисляющей значение функции
Y = sin X
через разложение функции в бесконечный ряд

с точностью Eps = 0,0001.
Текст программы, написанной на языке Паскаль, приведен ниже.
Program Sin1;
Const
eps = 0.0001;
Var
y, x: real; n: integer; vs: real;
Begin
Readln ( x);
y := x; {Начальные установки}
n := 2;
vs := x;
Repeat
vs := – vs * x * x / (2 * n – 1) / (2 * n –2); {Формирование слагаемого}
n := n + 1;
y := y + vs;
Until abs( vs) < eps; {Выход из цикла по выполнению условия}
Writeln (x, y, eps);
End.
Расчет базовых метрик Холстеда для данной программы приведены в табл. 2.
Таблица 2
Расчет базовых метрик Холстеда для программы, вычисляющей значение функции Y = sin X
| j | Оператор | f1j | i | Операнд | f2i |
| 1. | ; | 7 | 1. | x | 6 |
| 2. | := | 6 | 2. | n | 5 |
| 3. | * | 4 | 3. | vs | 5 |
| 4. | – | 3 | 4. | y | 4 |
| 5. | / | 2 | 5. | 2 | 4 |
| 6. | ( ) | 2 | 6. | 1 | 2 |
| 7. | + | 2 | 7. | eps | 2 |
| 8. | Begin…End | 1 | |||
| 9. | Readln ( ) | 1 | |||
| 10. | Repeat…Until | 1 | |||
| 11. | abs( ) | 1 | |||
| 12. | < | 1 | |||
| 13. | Writeln ( ) | 1 | |||
| 14. | . | 1 | |||
| h1 = 14 | N1 = 33 | h2 = 7 | N2 = 28 |
Словарь программы h =14 + 7 = 21.
Длина программы N = 33 + 28 = 61.
Объем программы V = 
Дата добавления: 2019-11-16; просмотров: 2965; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
