Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / Лабораторная работа 3 (demo)

.pdf
Скачиваний:
23
Добавлен:
05.06.2021
Размер:
200.4 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ Федеральное государственное бюджетное образовательное учреждение

высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. проф. М. А. Бонч-Бруевича»

(СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

Отчет по лабораторной работе №3 по дисциплине «Управление программными проектами»

Метрики оценки программных систем

Классификация точек

студент гр. ИКПИ-85

 

Коваленко Л. А.

преподаватель каф. ПИиВТ

 

д.т.н., проф. Фомин В. В.

Санкт-Петербург 2021

Постановка задачи Требуется оценить характеристики программы на основе метрик.

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

Рисунок 1 — Классификация точек, функции расстояния «Октиль» и Манхэттена

Рисунок 2 — Классификация точек, функции расстояния Чебышёва и Евклида

2

Рисунок 3 — Классификация точек, функции расстояния Махаланобиса и Евклида-Махаланобиса

Данные представлены в виде фигур разного типа, по размеру больших, чем тестовые точки, представленные в виде маленьких кругов. Спорные точки, которые могут быть отнесены к нескольким классам, выделены черным цветом.

Расстояние «Октиль» (Octile) (диагонали). Расстояние измеряется диагоналями от начальной до конечной точки.

dO(( x1 , y1) ,(x2 , y2))=max(|y2y1|,|x2x1|)+(2−1) min(|y2y1|,|x2x1|)

Расстояние Манхэттена L1 (4 направления). Расстояние измеряется 4 направлениями от начальной до конечной точки.

dL 1((x1 , y1),(x2 , y2))=|y2y1|+|x2x1|

Расстояние Чебышёва (4 направления и диагонали). Расстояние измеряется 4 направлениями и диагоналями от начальной до конечной точки.

dCh((x1 , y1),( x2 , y2))=max(|y2y1|,|x2x1|)

Расстояние Евклида (прямая линия). Расстояние измеряется по прямой линии от начальной до конечной точки.

dE ((x1 , y1),(x2 , y2))=( y2y1) (x2x1)

Расстояние Махаланобиса.

dM ((x1 , y1),( x2 , y2),COV )=( x1x2 , y1y2) COV−1 ( x1x2 , y1y2)T

3

где COV — матрица ковариаций размера 2×2 того класса, к которому относится точка (x1 , y1) и/или точка (x2 , y2) , COV−1 — обратная матрица ковариаций.

Расстояние Евклида-Махаланобиса.

dM ((x1 , y1),( x2 , y2),COV )=( x1x2 , y1y2) (COV +E)−1 (x1x2 , y1y2)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