
Готовые отчеты / Лабораторная работа 3 (demo)
.pdfФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ Федеральное государственное бюджетное образовательное учреждение
высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. проф. М. А. Бонч-Бруевича»
(СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
Отчет по лабораторной работе №3 по дисциплине «Управление программными проектами»
Метрики оценки программных систем
Классификация точек
студент гр. ИКПИ-85 |
|
Коваленко Л. А. |
преподаватель каф. ПИиВТ |
|
д.т.н., проф. Фомин В. В. |
Санкт-Петербург 2021

Постановка задачи Требуется оценить характеристики программы на основе метрик.
Работа программы заключается в решении задачи классификации тестовых точек по имеющимся классам при использовании функций расстояния «Октиль», Манхэттена, Чебышёва, Евклида, Махаланобиса, Евклида-Махаланобиса. Входные данные — список классов с точками и тестовые точки для классификации. Результатом работы программы являются 6 графиков с результатами классификации, примеры которых представлены на рис. 1-3.
Рисунок 1 — Классификация точек, функции расстояния «Октиль» и Манхэттена
Рисунок 2 — Классификация точек, функции расстояния Чебышёва и Евклида
2

Рисунок 3 — Классификация точек, функции расстояния Махаланобиса и Евклида-Махаланобиса
Данные представлены в виде фигур разного типа, по размеру больших, чем тестовые точки, представленные в виде маленьких кругов. Спорные точки, которые могут быть отнесены к нескольким классам, выделены черным цветом.
Расстояние «Октиль» (Octile) (диагонали). Расстояние измеряется диагоналями от начальной до конечной точки.
dO(( x1 , y1) ,(x2 , y2))=max(|y2− y1|,|x2−x1|)+(√2−1) min(|y2− y1|,|x2−x1|)
Расстояние Манхэттена L1 (4 направления). Расстояние измеряется 4 направлениями от начальной до конечной точки.
dL 1((x1 , y1),(x2 , y2))=|y2− y1|+|x2−x1|
Расстояние Чебышёва (4 направления и диагонали). Расстояние измеряется 4 направлениями и диагоналями от начальной до конечной точки.
dCh((x1 , y1),( x2 , y2))=max(|y2− y1|,|x2−x1|)
Расстояние Евклида (прямая линия). Расстояние измеряется по прямой линии от начальной до конечной точки.
dE ((x1 , y1),(x2 , y2))=√( y2− y1) (x2−x1)
Расстояние Махаланобиса.
dM ((x1 , y1),( x2 , y2),COV )=√( x1−x2 , y1− y2) COV−1 ( x1−x2 , y1− y2)T
3

где COV — матрица ковариаций размера 2×2 того класса, к которому относится точка (x1 , y1) и/или точка (x2 , y2) , COV−1 — обратная матрица ковариаций.
Расстояние Евклида-Махаланобиса.
dM ((x1 , y1),( x2 , y2),COV )=√( x1−x2 , y1− y2) (COV +E)−1 (x1−x2 , y1− y2)T
где COV — матрица ковариаций размера 2×2 того класса, к которому относится точка (x1 , y1) и/или точка (x2 , y2) , COV−1 — обратная матрица ковариаций, E — единичная матрица (того же размера, что и COV ).
Выбранные метрики оценки качества ПО Применение метрик позволяет изучить сложность разработанного или
разрабатываемого проекта, оценить объем работ, стилистику разрабатываемой программы и усилия, затраченные каждым разработчиком для реализации того или иного решения. Однако метрики могут служить лишь рекомендательными характеристиками, ими нельзя полностью руководствоваться.
Оператор — синтаксическая единица императивного языка программирования, которая выражает действие, которое необходимо выполнить.
Операнд — аргумент операции.
Метрики Холстеда
•Словарь программы определяется по формуле:
n=n1+n2
• Длина программы определяется по формуле:
N=N1+N2
• Объем программы определяется по формуле:
V=N log2 n
•Оценка реализации программы определяется по формуле:
L = 2 n2 n1 N2
4

• Сложность понимания программы определяется по формуле:
Ec= LV
• Трудоемкость кодирования программы определяется по формуле:
D= L1
• Уровень языка выражения программы определяется по формуле:
I = DV2
• Информационное содержание программы определяется по формуле:
I= VD
• Оптимальная модульность программы определяется по формуле:
M= n62
• Оценка количества ошибок в реализации определяется по формуле:
B=3000V
Описание некоторых обозначений:
•n1 — число уникальных операторов (словарь операторов);
•n2 — число уникальных операндов (словарь операндов);
•N1 — общее число операторов;
•N2 — общее число операндов.
Метрики Джилба
•L — общее число операторов;
•Lloop — количество операторов цикла;
•Lif — количество операторов условия;
•Lmod — количество модулей или подсистем;
•Относительная насыщенность программы операторами цикла:
Eloop= LloopL
5

• Относительная насыщенность программы операторами условия:
Eif = LLif
• Отношение числа связей между модулями к числу модулей:
N4
f mod = L M mod
Исходные и расчетные данные Операторы программы приведены в табл. 1.
Таблица 1 — Операторы программы
№ |
Оператор |
Число операторов |
|
|
|
1 |
import |
7 |
|
|
|
2 |
def |
14 |
|
(объявление подпрограммы) |
|
3 |
try except |
3 |
|
|
|
4 |
raise |
1 |
|
|
|
5 |
return |
15 |
|
|
|
6 |
for in |
36 |
|
|
|
7 |
if |
14 |
|
|
|
8 |
= |
41 |
|
|
|
9 |
+ |
9 |
|
|
|
10 |
- |
13 |
|
|
|
11 |
* |
2 |
|
|
|
12 |
** |
9 |
|
|
|
13 |
/ |
5 |
|
|
|
14 |
== |
9 |
|
|
|
15 |
!= |
3 |
|
|
|
16 |
< |
1 |
|
|
|
17 |
or |
1 |
|
|
|
18 |
+= |
1 |
|
|
|
19 |
* |
3 |
|
(оператор распаковки) |
|
6

20 |
[] |
29 |
|
(оператор индексации) |
|
21 |
class |
3 |
|
|
|
22 |
() |
150 |
|
(вызов функции) |
|
23 |
. |
52 |
|
|
|
24 |
break |
2 |
|
|
|
25 |
continue |
1 |
|
|
|
26 |
assert |
2 |
|
|
|
27 |
<= |
1 |
|
|
|
28 |
and |
3 |
Операнды программы приведены в табл. 2. Таблица 2 — Операнды программы
№ |
Операнд |
|
Число операндов |
|
|
|
|
1 |
"" |
|
36 |
|
(строковые операнды) |
|
|
2 |
classes |
|
8 |
|
|
|
|
3 |
points |
|
17 |
|
|
|
|
4 |
classify_function |
|
3 |
|
|
|
|
5 |
points_distances |
|
2 |
|
|
|
|
6 |
x |
|
29 |
|
|
|
|
7 |
y |
|
7 |
|
|
|
|
8 |
class_ |
|
17 |
|
|
|
|
9 |
1e-6 |
|
2 |
|
|
|
|
10 |
ZeroDivisionError |
|
2 |
|
|
|
|
11 |
error |
|
2 |
|
|
|
|
12 |
0 |
|
15 |
|
|
|
|
13 |
-1 |
|
4 |
|
|
|
|
14 |
1 |
|
12 |
|
|
|
|
15 |
classification |
|
8 |
|
|
|
|
16 |
controversial |
|
6 |
|
|
|
|
17 |
i |
|
17 |
|
|
|
|
18 |
j |
|
16 |
|
|
|
|
19 |
a |
|
5 |
|
|
|
|
20 |
mt |
|
7 |
|
|
|
|
|
|
7 |
|
21 |
f |
3 |
|
|
|
22 |
z |
9 |
|
|
|
23 |
np.inf |
2 |
|
|
|
24 |
m |
15 |
|
|
|
25 |
temp |
3 |
|
|
|
26 |
indexes |
9 |
|
|
|
27 |
function |
2 |
|
|
|
28 |
func |
2 |
|
|
|
29 |
u |
16 |
|
|
|
30 |
v |
14 |
|
|
|
31 |
ut |
6 |
|
|
|
32 |
point |
18 |
|
|
|
33 |
c |
14 |
|
|
|
34 |
p |
4 |
|
|
|
35 |
True |
2 |
|
|
|
36 |
False |
3 |
|
|
|
37 |
octile |
1 |
|
|
|
38 |
manhattan |
1 |
|
|
|
39 |
chebyshev |
1 |
|
|
|
40 |
euclidean |
1 |
|
|
|
41 |
np.array |
2 |
|
|
|
42 |
mean_u |
2 |
|
|
|
43 |
list |
1 |
|
|
|
44 |
classify_function |
2 |
|
|
|
45 |
classify_functions |
2 |
|
|
|
46 |
classify_function_str |
2 |
|
|
|
47 |
classify_functions_str |
2 |
|
|
|
48 |
(0,) |
1 |
|
|
|
49 |
.shape |
3 |
|
|
|
50 |
5 |
2 |
|
|
|
51 |
100 |
1 |
|
|
|
52 |
markers |
2 |
|
|
|
53 |
colors |
3 |
|
|
|
54 |
marker |
2 |
|
|
|
8

55 |
color |
4 |
|
|
|
56 |
0.5 |
5 |
|
|
|
57 |
2 |
5 |
|
|
|
58 |
epsilon |
4 |
|
|
|
59 |
ma |
2 |
|
|
|
60 |
mb |
2 |
|
|
|
61 |
standard_deviation |
2 |
|
|
|
62 |
delta |
6 |
|
|
|
63 |
inverse_covariance_matrix |
5 |
|
|
|
64 |
is_euclidean_mahalanobis |
2 |
|
|
|
65 |
tp |
2 |
|
|
|
66 |
expected_values |
4 |
|
|
|
67 |
covariance_matrix |
7 |
|
|
|
68 |
j1 |
4 |
|
|
|
69 |
j2 |
4 |
|
|
|
70 |
dtype |
3 |
|
|
|
71 |
distances |
4 |
|
|
|
72 |
mean_by_class |
3 |
|
|
|
73 |
diffs |
3 |
Число логических строк кода: 160. Число физических строк кода: 315.
Расчет размера программы с помощью метрик Холстеда
•Число уникальных операторов: n1=28 ;
•Число уникальных операндов: n2=73 ;
•Общее число операторов: N1=430 ;
•Общее число операндов: N2=439 ;
•Словарь программы: n=n1+n2=28+73=101 ;
•Длина программы: N=N1+N2=869 ;
•Объем программы: V =N log2 n=869 log2 101≈5786 ;
•Оценка реализации программы:
|
2 n2 |
|
2 73 |
≈0.0118 |
L = |
|
= |
|
|
n1 N2 |
28 439 |
9

• Сложность понимания программы:
Ec= LV = 05786.0118 ≈490 339
•Трудоемкость кодирования программы:
D= |
1 |
= |
1 |
≈85 |
|
L |
0.0118 |
||||
|
|
|
• Уровень языка выражения программы:
I = DV2 =5786852 ≈0.8
• Информационное содержание программы:
I= VD =578685 ≈68
• Оптимальная модульность программы:
M= n62 =736 ≈12
• Оценка количества ошибок в реализации:
B=3000V =57863000 ≈1.93
Расчет размера программы с помощью метрик Джилба
•Общее число операторов: L=430 ;
•Количество операторов цикла: Lloop=36 ;
•Количество операторов условия: Lif =14 ;
•Количество модулей или подсистем: Lmod =4 ;
•Относительная насыщенность программы операторами цикла:
Eloop= LloopL = 43036 ≈0.084
•Относительная насыщенность программы операторами условия:
Eif = LLif = 43014 ≈0.033
•Отношение числа связей между модулями к числу модулей:
f |
mod |
= |
NM4 |
= |
34 |
=20.25 |
|
Lmod |
4 |
||||||
|
|
|
|
10