315.98K
Категория: ПрограммированиеПрограммирование

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

1.

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

2.

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

3.

Сводка метрик по Холстеду
Название метрики
длина программы
объем программы
оценка длины
реализации программы
уровень языка
программирования
интеллектуальное
содержание программы
3
Формула для подсчета
N = η1 × log2 η1 + η2 × log2 η2
V = N × log2 η
L* = (2 × n2 )/ (n1 × N2)
λ=L×V*
I= L*×V

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);
}
}
}
j
Оператор
1 =
2 []
3 ()
4 >
5 <
6 ;
7 ++
8 {}
9 .
10 ""
11 Readline
12 Parse
13 +='
14 writeline
15 for
16 if
17 +'
η1 = 17 N1 = 44
f1i
7
7
6
1
2
5
2
2
3
1
1
1
1
1
2
1
1
Словарь программы: n = 17 + 7 = 24
Длина программы: N = 44+26 = 70
Объем программы: V = log2n = 320
i
Операнд
1 x
2 i
3 max
4 10'
5 0'
6 s
7 1'
η2 = 7
f2j
5
10
4
2
2
2
1
N2 = 26

5.

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

6.

7.

#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;
sum_y2 = 0;
for (i=0; i<n; i++)
{
xi=x[i];
yi=y[i];
sum_x += xi;
sum_y += yi;
sum_xy += xi*yi;
sum_x2 += xi*xi;
sum_y2 += yi*yi;
}
sxx = sum_x2-sum_x*sum_x/n;
sxy = sum_xy-sum_x*sum_y/n;
syy = sum_y2-sum_y*sum_y/n;
*b=sxy/sxx;
*a=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx;
for (i=0;i<n;i++)
*(y_calc+i) = *a + *b * x[i];
}
void main(void)
{
int i;
double a,b,x[size],y[size],y_calc[size];
randomize();
printf("Input Data: \n");
for (i=0;i<size;i++)
{
x[i] = 10+i*10;
y[i] = 10+i*10 + random(20) - 10;
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]);
}

8.

Statistics for module output.lxm
=====================================
The number of different operators : 21
The number of different operands : 25
The total number of operators
: 114
The total number of operands
: 141
Dictionary
( D) : 46
Length
( N) : 255
Length estimation
( ^N) : 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 (lambda) : 0.4089
Work on programming
( E) : 82662.3178
Error
( B) : 0.469515
Error estimation
( ^B) : 0.406327

9.

Operators:
| 1
| 7
| 2
| 11
| 3
| 5
| 4
| 4
| 5
| 5
| 6
| 4
| 7
| 5
| 8
| 6
| 9
| 4
| 10
| 19
| 11
| 9
| 12
| 3
| 13
| 5
| 14
| 5
| 15
| 3
| 16
| 4
| 17
| 2
| 18
| 1
| 19
| 4
| 20
| 1
| 21
| 1
| ()
|*
|+
| ++
| +=
| {}
||/
|<
|=
| []
| _&
| _*
| _[]
| __*
| for
| linfit1
| main
| printf
| random
| randomize
Operands:
| 1
| 1
| 2
| 1
| 3
| 1
| 4
| 1
| 5
| 10
| 6
| 5
| 7
| 1
| 8
| 6
| 9
| 6
| 10
| 27
| 11
| 7
| 12
| 8
| 13
| 7
| 14
| 5
| 15
| 5
| 16
| 7
| 17
| 4
| 18
| 4
| 19
| 3
| 20
| 2
| 21
| 7
| 22
| 6
| 23
| 6
| 24
| 5
| 25
| 6
| "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

10.

Summary:
=====================================
The number of different operators : 21
The number of different operands : 25
The total number of operators
: 114
The total number of operands
: 141
Dictionary
( D) : 46
Length
( N) : 255
Length estimation
( ^N) : 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 (lambda) : 0.4089
Work on programming
( E) : 82662.3178
Error
( B) : 0.469515
Error estimation
( ^B) : 0.406327

11.

Пример на Excel
English     Русский Правила