Метрология
.docx
Цель работы: Изучение метрик оценки качества программного обеспечения.
Функция на языке MATLAB
Входные параметры:
n-длинна формируемого массива случайных чисел
nac-начало диапазона случайных чисел
kon-конец диапазона случайных чисел
k_med-количество элементов массива для подсчёта медианы
function [X] = RandomSumMediana(n,nac,kon,k_med)
if(n>0 & nac<kon & k_med>0)
for i=1:n
A(i)= round(nac + (kon-nac)*rand);
B(i)= round(nac + (kon-nac)*rand);
end
k=n;
for i=1:n
if(A(i)<0 & B(k)<0)
AB(i)=A(i)*B(k);
else
AB(i)=A(i)+B(k);
end
k=k-1;
end
j=0;
x_k=0;
for i=1:n
j=j+1;
BUF(j)=AB(i);
if(j==k_med | i==n )
x_k=x_k+1;
X(x_k)=median(BUF);
clear BUF;
j=0;
end
end
else
error('Параметры заданы неверно');
end
end
Рисунок 1. Результаты работы профилировщика
Рисунок 2. Результаты работы профилировщика – строки кода, на выполнение которых затрачено наибольшее время выполнения, а так же покрытие программы
Рисунок 3. Результаты работы профилировщика – строки кода, на выполнение которых затрачено наибольшее время выполнения
Блок-схема алгоритма:
Граф потока данных и линейно-независимые маршруты прохождения программы:
Таблица – перечень операторов и операндов, использующихся в программе
№ |
Оператор |
Операнд |
Количество |
1 |
= |
|
16 |
2 |
+ |
|
5 |
3 |
- |
|
3 |
4 |
: |
|
3 |
5 |
; |
|
15 |
6 |
for |
|
3 |
7 |
< |
|
3 |
8 |
> |
|
2 |
9 |
() |
|
22 |
10 |
round |
|
2 |
11 |
rand |
|
2 |
12 |
median |
|
1 |
13 |
* |
|
3 |
14 |
clear |
|
1 |
15 |
error |
|
1 |
16 |
if |
|
3 |
17 |
& |
|
3 |
18 |
| |
|
1 |
19 |
== |
|
2 |
20 |
' |
|
1 |
21 |
|
n |
5 |
22 |
|
nac |
3 |
23 |
|
kon |
3 |
24 |
|
k_med |
1 |
25 |
|
A |
3 |
26 |
|
B |
3 |
27 |
|
k |
5 |
28 |
|
AB |
3 |
29 |
|
BUF |
3 |
30 |
|
i |
12 |
31 |
|
j |
5 |
32 |
|
x_k |
4 |
33 |
|
X |
1 |
34 |
|
0 |
3 |
Оценивание структурной сложности программного модуля по метрике Маккейба:
Для определения цикломатического числа Z исходного графа программы используется полное количество его вершин n, количество связывающих его дуг Y и число связных компонент Q:
Z = Y - n + Q
Z = 25 – 19 + 1 = 7
Оценивание логической сложности программного модуля по метрике Джилба:
В приведенной программе 3 условные конструкции типа IF-THEN-ELSE, это число характеризует абсолютную сложность CL программы по метрике Джилба. Общее число операторов в программе составляет 92 оператора, относительная сложность программы равна cl = CL / 92 = 3 / 92 = 0.033.
Оценивание сложности программного модуля по метрике Холстеда:
n1 = 20 (число уникальных операторов программы, включая символы-разделители,
имена процедур и знаки операций - словарь операторов);
n2 = 14 (число уникальных операндов программы - словарь операндов);
N1 = 92 (общее число операторов в программе);
N2 = 54 (общее число операндов в программе);
1) полный словарь n = n1 + n2 = 20 + 14 = 34 определяет, что для описания данного алгоритма на данном языке программирования требуется 34 операторов и операндов;
2) поскольку в данном примере представлена программа небольшого объема, длина программы определяется прямым подсчетом, косвенная оценка не производится. При определении полной длины программы Nс = N1 + N2 = 92 + 54 = 146 показана связь между длиной программы и размером словаря, то есть из словаря n, который составляет 34 операндов и операторов составлена программа, полная длина N которой составляет 146 операндов и операторов;
3) объем текста программы V = Nc*log2n = 146*log234 = 743 бита
4) поскольку обычно потенциальный объем неизвестен, для определения качества программирования производится косвенная оценка L = 2*n2 / n1*N2 = 2*14/20*54 = 0,026. Так как L = 0,026 < 1, уровень качества программы достаточно высокий, так как общее количество операндов N2 достаточно близко к минимально необходимому объему словаря n2;
5) уровень языка программирования = L^2*V = 0,5 низкий (по сравнению с уровнем языка программирования Ассемблер, для которого λ = 0,88);
6) оценка интеллектуальных усилий на создание программы объемом V = 724 бита E=V/L=28659 характеризует среднее количество различаемых элементов, которые составляют программу и которые необходимо разработать;
7) трудоемкость разработки программы может быть определена по формуле:
Nc^2 * log2n) / 4S,
где S – интенсивность анализа и принятия решения по каждой компоненте, 5 < S < 20. Пусть S = 10, тогда 146^2 * log232) / 4*10 = 817 секунд.