2.51M
Category: programmingprogramming

Метрики Холстеда. Лабораторная работа №1

1.

Лабораторная работа 1
Метрики Холстеда
601-800
9
370
13

2.

Для выполнения работы:
601-800
9
370
13
1. Изучить содержимое презентации.
2. Самостоятельно выбрать код программы (не менее 40-50 строк)
содержащий классы, условия, циклы, присваивания, вычисления,
объявления, методы и т.п.
3. Спроектировать и составить работающую программу на любом
языке программирования для вычисления метрик Холстеда.
4. Выбранный код (п.2) считывать в программе (п.3) как текстовый и
вычислить метрики Холстеда (слайд 5).
4. Оформить отчет в формате соответствующей
оформлению курсовой работы.

3.

Метрики сложности по Холстеду
601-800
9
370
13
3
Базовые метрики реализации
η1 – размер словаря операторов – число различных операторов
языка программирования, включая символы-разделители, имена
процедур и знаки операций, встречающихся в тексте программы
η2 – размер словаря операндов – число различных операндов,
включая имена переменных и константы, встречающихся в тексте
программы
η = η1 + η2 – размер словаря реализации
N1 – общее число всех операторов в программе
N2 – общее число всех операндов в программ
N = N1 + N2 – размер (длина) реализации
Maurice Halstead

4.

Пример:
Расчет метрик Холстеда
using System;

namespace metrick
{
class Program
{
static void Main(string[] args)
{
int[] x = new int[10];
for (int i = 0; i < 10; i++)
x[i] = int.Parse(Console.ReadLine());
int max = x[0];
double s = 0;
for (int i = 1; i < 10; i++)
{
if (x[i] > max)
max = x[i];
s += x[i];
}
Console.WriteLine("max = " + max);
601-800
9
370
13
} }}
j
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
η1 = 17
Оператор
=
[]
()
>
<
;
++
{}
.
""
Readline
Parse
+='
writeline
for
if
+'
f1i
7
7
6
1
2
5
2
2
3
1
1
1
1
1
2
1
1
N1 = 44
i
Операнд
1
2
3
4
5
6
7
η2 = 7
x
i
max
10'
0'
s
1'
f2j
5
10
4
2
2
2
1
N2 = 26

5.

На основе данных:
Число уникальных операторов (η1),
Число уникальных операндов (η2),
Общее число операторов (N1),
Общее число операндов (N2).
601-800
9
370
13
Вычислить:
Алфавит (η):
η1+η2
Длина программы (N): N1+N2
Теоретическая длина программы (Nт):
η1∙log2(η1) + η2∙log2(η2)
Объём программы (V): N∙log2(η)
Потенциальный объём (V*):
(N1*+N2*)∙log2(η1* + η2*)
Уровень программы (L):
V* / V (от 0 до 1)
Сложность программы (S):
L-1
Ожидание уровня программы (L*): (2/η1)∙(η2/N2)
Интеллект программы (I):
L* ∙ V
Работа по программированию (Е): V∙S ≡ V/L
Время кодирования (T): E/St (St – число Страуда от 5 до 20, берем 10)
Ожидаемое время кодирования (T^):
η1∙N2 ∙ N∙log2(η) / (2∙St∙η2)
Уровень языка программирования (λ):
(V*)∙(V*)/V
Уровень ошибок (В):
V / 3000

6.

Контрольный
код для вычислений
на C++
1
2
3
601-800
9
370
13
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Operands
"Input Data: \n"
"a: %3.1f, b: %3.1f\n"
"x[%d] = %3.1f y[%d] =
%3.1f\n"
"y_calc = %3.1f\n"
0
10
20
a
b
i
n
size
sum_x
sum_x2
sum_xy
sum_y
sum_y2
sxx
sxy
syy
x
xi
y
y_calc
yi
1
1
1
1
10
5
1
6
6
27
7
8
7
5
5
7
4
4
3
2
7
6
6
5
6
#include <stdlib.h>
#define size 20
void linfit1(double x[size],double y[size], double* y_calc, double* a, double* b,int n)
{
int i; double sum_x,sum_y,sum_xy,sum_x2,sum_y2,xi,yi,sxy,sxx,syy;
sum_x = 0;
sum_y = 0;
sum_xy = 0;
sum_x2 = 0;
1
sum_y2 = 0;
for (i=0; i<n; i++)
2
{
xi=x[i];
3
yi=y[i];
4
sum_x += xi;
sum_y += yi;
5
sum_xy += xi*yi;
6
sum_x2 += xi*xi;
7
sum_y2 += yi*yi;
}
8
sxx = sum_x2-sum_x*sum_x/n;
9
sxy = sum_xy-sum_x*sum_y/n;
10
syy = sum_y2-sum_y*sum_y/n;
*b=sxy/sxx;
11
*a=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx;
12
for (i=0;i<n;i++)
13
*(y_calc+i) = *a + *b * x[i];
14
}
void main(void)
15
{
int i;
16
double a,b,x[size],y[size],y_calc[size];
17
randomize();
printf("Input Data: \n");
18
for (i=0;i<size;i++)
19
{
20
x[i] = 10+i*10;
y[i] = 10+i*10 + random(20) - 10;
21
printf("x[%d] = %3.1f y[%d] = %3.1f\n",i,x[i],i,y[i]);
}
linfit1(x,y,&y_calc[0],&a,&b,size);
printf("a: %3.1f, b: %3.1f\n",a,b);
for (i=0;i<size;i++)
printf("y_calc = %3.1f\n",y_calc[i]);
}
Operators
()
7
*
11
+
5
++
4
+=
5
{}
4
-
5
/
6
<
4
=
19
[]
9
_&
3
_*
5
_[]
5
__*
3
for
4
linfit1
2
main
1
printf
4
random
1
randomize
1

7.

Вычисленные метрики оформить в виде:
The number of different operators : 21
The number of different operands : 25
The total number of operators
: 114
The total number of operands
: 141
601-800
9
370
13
Dictionary
( D) : 46
Length
( N) : 255
Length estimation
(NT) : 208.335
Volume
( V) : 1408.5083
Potential volume
(V *) : 24
Limit volume
(V) : 23.2
Programming level
( L) : 0.0170
Programming level estimation ( L*) : 0.0169
Intellect
( I) : 23.7843
Time of programming
( T) : 8266.2318
Time estimation
(T ^) : 8341.1861
Programming language level (λ) : 0.4089
Work on programming
( E) : 82662.3178
Error
( B) : 0.469515
English     Русский Rules