Главная страница

Метрика Холстеда


Скачать 98.16 Kb.
НазваниеМетрика Холстеда
Дата25.09.2022
Размер98.16 Kb.
Формат файлаdocx
Имя файла1.docx
ТипЛабораторная работа
#694650


ЛАБОРАТОРНАЯ РАБОТА №1

по дисциплине: Метрология и квалиметрия программного обеспечения

тема: «Метрика Холстеда»

ОГЛАВЛЕНИ

ЦЕЛЬ РАБОТЫ И ЗАДАНИЕ 2

1МЕТРИКА ХОЛСТЕДА ДЛЯ ОЦЕНКИ СЛОЖНОСТИ ПРОГРАММ 3

2ПРОЦЕСС РАСЧЁТА МЕТРИКИ 4

3АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ 8

ЗАКЛЮЧЕНИЕ 10

ЦЕЛЬ РАБОТЫ И ЗАДАНИЕ 3

1 МЕТРИКА ХОЛСТЕДА ДЛЯ ОЦЕНКИ СЛОЖНОСТИ ПРОГРАММ 4

2 ПРОЦЕСС РАСЧЁТА МЕТРИКИ 5

3 АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ 9

ЗАКЛЮЧЕНИЕ 11

СПИСОК ЛИТЕРАТУРЫ 12


ЦЕЛЬ РАБОТЫ И ЗАДАНИЕ


Целью работы является изучение метрики Холстеда для оценки сложности размера кодов трех компьютерных программ. Результатом лабораторной работы № 1 является отчёт, в котором должны быть приведена метрика Холстеда в табличном виде для трех видов программ.

Для выполнения лабораторной работы № 1 студент должен изучить приведённый ниже теоретический материал на тему «Метрика Холстеда». Для вычисления параметров метрики Холстеда необходимо подсчитать число используемых в программе операторов и операндов (общее число и число различных). Далее в соответствии с формулами из теоретического материала рассчитать все метрические параметры. Отчёт сдаётся в электронном (файл Word) виде.
  1. МЕТРИКА ХОЛСТЕДА ДЛЯ ОЦЕНКИ СЛОЖНОСТИ ПРОГРАММ


При оценке сложности программ, как правило, выделяют три основные группы метрик: метрики размера программ, метрики сложности потока управления программ и метрики сложности потока данных программ. Оценки первой группы наиболее просты и поэтому получили широкое распространение.

Основу метрики Холстеда составляют четыре измеряемые характеристики программы: – число уникальных операторов программы, включая символы-разделители, имена процедур и знаки операций (словарь операторов); – число уникальных операндов программы (словарь операндов); – общее число операторов в программе – общее число операндов в программе.

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

— теоретический словарь программы,

— длина программы,

— теоретический словарь программы,

— теоретическая длина программы,

— объем программы,

потенциальный объем программы,

— уровень качества программирования,

— уровень качества программирования,

— средний коэффициент сложности,

— информационное содержание программы,

— оценка необходимых интеллектуальных усилий при разработке программы, характеризующая число требуемых элементарных решений при написании программы.

При применении метрик Холстеда частично компенсируются недостатки, связанные с возможностью записи одной и той же функциональности разным количеством строк и операторов.
  1. ПРОЦЕСС РАСЧЁТА МЕТРИКИ


Программа 1. Найти наименьшее число, большее заданного N, такое, что сумма квадратов его десятичных цифр есть полный квадрат (например, таким является число 442: 42+42+22=36=62).

Листинг 1

int check_number(unsigned long value) {

unsigned long checkSum = 0;

int numeral;

while (value) {

numeral = value % 10;

checkSum += pow(numeral, 2);

value = (value - numeral) / 10;

}

long double trueQuad;

trueQuad = sqrt(checkSum);

if (trueQuad * trueQuad == checkSum) return 1;

else

return 0;

}

Проведём подсчёт операторов и операндов программы 1.

Таблица 1 – Операторы и операнды программы 1

Операторы

Число вхождений

Операнды

Число вхождений

int

2

check_number

1

()

6

value

5

while

1

checkSum

4

unsigned long

2

0

2

{}

2

numeral

4

=

4

10

2

;

9

trueQuad

4

%

1

1

1

+=

1







pow

1







,

1







-

1







/

1







long double

1







sqrt

1







if

1







*

1







==

1







return

2







else

1







Программа 2. Найти в заданном диапазоне от N1 до N2 (N2>N1) два простых числа, имеющие минимальное и максимальное значения произведений начала и конца своего десятичного представления.

Листинг 2

std::pair<int, int> find(int N1, int N2) {

int globalMax = 1;

int globalMin = N2;

int globalPrimeWithMinProduct = 0;

int globalPrimeWithMaxProduct = 0;

int i = 0;

for (i = N1; i <= N2; i++) {

if (isPrime(i)) {

std::pair<int, int> p = MaxMin(i);

if (p.first < globalMin) {

globalMin = p.first;

globalPrimeWithMinProduct = i;

}

if (p.second > globalMax) {

globalMax = p.second;

globalPrimeWithMaxProduct = i;

}

}

}

return std::make_pair(globalPrimeWithMinProduct, globalPrimeWithMaxProduct);

}

Проведём подсчёт операторов и операндов программы 2.

Таблица 2 – Операторы и операнды программы 2

Операторы

Число вхождений

Операнды

Число вхождений

int

11

i

8

()

8

p

5

{}

5

0

3

std

3

N2

3

if

3

globalMax

3

pair

2

globalMin

3

for

1

globalPrimeWithMinProduct

3

++

1

globalPrimeWithMaxProduct

3

return

1

N1

2

::

3

first

2

;

13

second

2

.

4

1

1

>

1

find

1

<=

1

isPrime

1

=

11

MaxMin

1

<

1

make_pair

1

,

4







Программа 3. Найти первые N последовательно возрастающих на величину k чисел, меньших заданного числа, все нетривиальные делители которых различны (два таких числа, возрастающих на 1 – это 14=2*7 и 15=3*5).

Листинг 3

void calcOnCPU(unsigned long long* answer, unsigned long long N, unsigned long long k, unsigned long long M)

{

unsigned long long allocationSize = sizeof(bool) * M;

bool *data = (bool*) malloc(allocationSize);

for(unsigned long long i = 0; i < M; i++)

{

unsigned long long number = i + 1;

data[number-1] = true;

for (unsigned long long j = 2; j <= sqrt(number); j++)

{

unsigned long long numberClone = number;

while (numberClone % j == 0 && numberClone != 0) numberClone /= j;

if(numberClone == 1)

{

data[number-1] = false;

break;

}

}

}

findSlove(answer, data, N, k, M);

free(data);

}

Проведём подсчёт операторов и операндов программы 3.

Таблица 3 – Операторы и операнды программы 3

Операторы

Число вхождений

Операнды

Число вхождений

void

1

data

5

()

11

number

5

unsigned long long

9

j

5

*

4

numberClone

5

{}

4

1

4

bool

3

M

4

for

2

i

4

++

2

0

3

[]

2

answer

2

-

2

N

2

,

7

k

2

;

14

allocationSize

2

false

1

2

1

Окончание таблицы 3

Операторы

Число вхождений

Операнды

Число вхождений

break

1

calcOnCPU

1

while

1

findSlove

1

sqrt

1







true

1







free

1







sizeof

1







malloc

1







+

1







%

1







&&

1







==

2







/=

8







!=

1







<

1







<=

1







/

1







if

1








  1. АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ


Проанализируем полученные результаты в таблицах 1-3 и проведём расчёт характеристик метрики Холстеда для всех программ. Результаты отобразим в таблице 4.

Таблица 4 – Сводная таблица характеристик метрики Холстеда

Характеристика

Обозначение

Программа 1

Программа 2

Программа 3

H1

Число уникальных операторов программы

20

17

30

H2

Число уникальных операндов программы

8

16

15

N1

Общее число операторов в программе

40

73

87

N2

Общее число операндов в программе

23

42

46

H*

Теоретический словарь программы

2

3

5

V*

Потенциальный объем программы

110,44

211,57

477,88

H

Словарь программы

28

33

45

N

Длина программы

63

115

133

V

Объем программы

302,86

580,11

730,42

N'

Теоретическая длина программы

110,44

133,49

205,81

L

Уровень качества программирования

0,36

0,36

0,65

L'

Фактический уровень программы

0,03

0,04

0,02

I

Интеллектуальное содержание алгоритма

10,53

26,00

15,88

D

Средний коэффициент сложности

28,75

22,31

46,00

E

Количество элементарных решений

691

867

1256



Рисунок 1 – Сравнение характеристик метрики Холстеда между 3 программами

Программы имеют приблизительно одинаковое количество уникальных операндов и операторов, однако при этом имеют различную сложность. Уровень качества программирования всех программ меньше единицы, содержательная нагрузка на каждый компонент программы небольшая, так как все три функции полностью реализуют уникальную логику. Интеллектуально содержание алгоритмов также примерно одинаково, только у программы 2 оно выше почти в 2 раза. Если сравнивать количество мысленных элементарных решений, принимаемых в процессе написания программ, то заметен рост этого показателя с усложнением исходной задачи алгоритма.

ЗАКЛЮЧЕНИЕ


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

Метод Холстеда хоть и позволяет выделить определённые закономерности и оценить эффективность программы, однако, на практике необходимо более комплексное исследование, которое не ограничивается лишь одним методом.







Новосибирск

2022 г.


написать администратору сайта