Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Терновой_КДЗ_БИ_371(2).doc
Скачиваний:
2
Добавлен:
22.09.2019
Размер:
1.49 Mб
Скачать

Оценка характеристик на основе метрик Холстеда

Составим таблицы, необходимые для вычисления характеристик программы по методике Холстеда:

Заполним каждую из таблиц для каждого файла:

Таблица 2 Словарь операторов и операций для файла MainWindow.xaml.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1

1

2

namespace

3

1

3

public

8, 10

2

4

partial

8

1

5

class

8

1

6

:

8

1

7

void

15, 21

2

8

object

15, 21

2

9

RoutedEventArgs

15, 21

2

10

new

17, 23

2

11

Task1_Window.Show();

18

1

12

Task2_Window.Show();

24

1

13

FirstTask

17

1

14

FirstTask()

17

1

15

SecondTask

23

1

16

SecondTask()

23

1

17

{ .. }

4..27, 9..26, 11..13, 16..19, 22..25

5

18

( .. )

10, 12, 15, 17, 18, 21, 23, 24

8

19

=

17, 23

2

20

;

12, 17, 18, 23, 24

5

21

.

18, 24

2

22

System

1

1

23

InitializeComponent()

12

1

Всего

23 оператора/операции

27 строк

45 повторений

Таблица 3 Словарь операндов для файла MainWindow.xaml.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System.Windows

1

1

2

MainWindow

8

1

3

Window

8

1

4

MainWindow()

10

1

5

FirstTaskButton_Click()

15

1

6

SecondTaskButton_Click()

21

1

7

sender

15, 21

2

8

e

15, 21

2

9

Task1_Window

17, 18

2

10

Task2_Window

23, 24

2

11

KDZ_Ternovoy

3

1

Всего

11 операндов

27 строк

15 повторений

Таблица 4 Словарь операторов и операций для файла FirstTask.xaml.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1,2,3

3

2

namespace

5

1

3

public

10,12

2

4

partial

10

1

5

class

10

1

6

:

10

1

7

void

19,26,37,52

4

8

object

19,26,52

3

9

RoutedEventArgs

26,52

2

10

TextChangedEventArgs

19

1

11

.

2,3,8,16,22,29,31,32,41,42,46,47,54

25

12

GeneralMethods.validateInputTextAsInteger()

22,29

2

13

Convert.ToInt64()

22,29,31

3

14

changeFormElementStates()

22,37

2

15

=

16,31,32,41,42,46,47

7

16

;

1,2,3,14,16,22,31,32,41,42,46,47,54

13

17

this

54

1

18

bool

37

1

19

if

29..33,39..44

2

20

else

44..49

1

21

private

19,26,37,52

4

22

nearest.ToString()

32

1

23

>

22,29

2

24

&&

22,29

2

25

InitializeComponent()

14

1

26

Task1MethodContainer.searchForNearestPerfect()

31

1

Всего

26 оператора/операции

57 строк

88 повторений

Таблица 5 Словарь операндов для файла FirstTask.xaml.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System

1

1

2

System.Windows

2

1

3

SystemWindows.Controls

3

1

4

KDZ_Ternovoy

5

1

5

FirstTask

10

1

6

Window

10

1

7

FirstTask()

12

1

8

searchForNearestPerfectButton.IsEnabled

16,42,47

3

9

false

16,42

2

10

inputNumberTextBox_TextChanged()

19

1

11

searchForNearestPerfectButton_Click()

26

1

12

changeFormElementStates()

37

1

13

closeFirstTaskButton_Click()

52

1

14

inputNumberTextBox.Text

22,29,31

5

15

sender

19,26,52

3

16

e

19,26,52

3

17

0

22,29

2

18

nearest

31,32

2

19

outputTextBox.Content()

32

1

20

validateState

37,39

1

21

wrongInputNumberLabel.Visibility

41,46

2

22

Visibility.Visible

41

1

23

Visibility.Hidden

46

1

24

searchForNearestPerfectButton.IsEnabled

42,47

2

25

true

47

1

Всего

25 операндов

57 строк

40 повторений

Таблица 6 Словарь операторов и операций для файла Task1MethodContainer.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1

1

2

namespace

3

1

3

public

8, 28

2

4

class

8

1

5

static

12, 28

2

6

private

12

1

7

Int64

12,28,14,31

4

8

bool

12

1

9

if

15,20,37,41

4

10

else

41

1

11

return

16,23,39,43,51

5

12

int

17

1

13

while

35..46

1

14

try

33..47

1

15

catch

48..50

1

16

=

14,17,31,21

4

17

==

20,23

2

18

;

1,14,15,16,21,23,31,35,43,45,51

12

19

<=

15

1

20

<

17

1

21

++

4,17

2

22

%

20

1

23

+

21,41,43

3

24

-

37,39

2

25

? .. : ..

23

1

26

{..}

4..54, 9..53, 13..24, 18..22, 25..52, 34..47, 37..46, 38..40, 24..44, 49..50

10

27

( .. )

12,15,17,20,23,28,35,37,40

9

28

isPerfect

37,41

2

Всего

28 оператора/операции

54 строчки

77 повторений

Таблица 7 Словарь операндов для файла Task1MethodContainer.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System

1

1

2

Task1MethodContainer

3

1

3

isPerfect

12

1

4

number

12,15,17,20, 23

5

5

sum

14,21,23

3

6

0

14,20,31,51,15

5

7

false

16,23

2

8

i

17,20,23

3

9

1

17

1

10

true

23

1

11

searchForNearestPerfect

28

1

12

basicNumber

28,37,41,39,43

5

13

delta

31,37,39,41,43,45

6

Всего

13 операндов

54 строчки

35 повторений

Таблица 8 Словарь операторов и операций для файла Task2MethodContainer.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1,2,3,4

4

2

namespace

6

1

3

public

20,58,72,99,103,109,115

7

4

class

11,94

2

5

static

14,20,58,72

4

6

private

14,96,97

3

7

int

14,16,20,26,34,40,48,50,58,72,96,97,103,109,115

23

8

return

16,54,68,86

4

9

List<List<Point>>

20,22

3

10

List<Point>

23,36,,47,72

4

11

double

27,28,31

3

12

new

22,36,47,50,60,62,74,76,78

11

13

List<List<Point>>()

22

1

14

List<Point>()

36,47

2

15

=

22,26,27,28,31,34,36,38,43,37,38,60,61,62,63,64,65,66,74,75,76,78,85,105,106,112,118

27

16

getNumberOfPolyLines()

26

1

17

/

27,31

2

18

*

31,40,50

9

19

for

34..44,38..41,48..51

3

20

foreach .. in

80..83

1

21

<

38,48

2

22

+

16,27,38,48,82,84

9

23

++

34,38,48

3

24

Add

40,42,50,52,82,84

6

25

Math.Cos()

40,50

2

26

Math.Sin()

40,50

2

27

+=

43

1

28

{..}

7..121,12..89,15..17,21..55,35..44,39..41,49..51,59..69,73..88,81..83.95..120,100..12,104..107,110..113,116..119

19

29

(..)

14,16,20,22,26,27,34,36,38,40,42,46,47,48,50,52,58,60,62,72,74,76,78,80,82,84,99,103

46

30

,

20,33,40,50,58,72,82,84,103

12

31

.

2,3,4,31,40,42,50,52,61,62,63,64,65,66,75,76,82,84,85,105,106

38

32

;

1,2,3,4,16,22,23,26,27,28,31,34,36,38,40,42,43,47,48,50,52,54,60,61,62,63,64,65,66,68,74,75,76,78,82,84,86,96,96,105,106,111,112,117,118

49

Всего

28 оператора/операции

строк

304 повторения

Таблица 9 Словарь операндов для файла Task2MethodContainer.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System

1,2,3,4,82,84

6

2

KDZ_Ternovoy

6

1

3

Task2MethodContainer

11

1

4

getNumberOfPolyLines()

14

1

5

K

6,14,16,20,26,31,38,48

8

6

18

16

1

7

2

16,31,61

4

8

getPolylineList()

20

1

9

0

34,84

3

10

1

27,38

3

11

Math.PI

1

31

12

length

20,27,50

4

13

numberOfPolylines

26,27,34

3

14

deltaLength

27,28,43

3

15

tempDeltalength

28,40,40,43

4

16

polylineList

22,42,52,54

4

17

pointList

23,26,30,42,47,50,52,72,80,84

11

18

degree

34

3

19

i

38,40,48,50

10

20

cornerDelta

31,40,50

5

21

getLine()

58

1

22

X

58,63,72,82,84,103,105,109

11

23

Y

58,65,72,82,84,103,106,115

11

24

X1

58,63,64

3

25

Y1

58,65,66

3

26

line

60,61,62,63,64,65,66,68

8

27

line.StrokeThickness

61

1

28

line.Stroke

62

1

29

Colors.Black

62,76

2

30

getPolyline

72

1

31

polyline

74,75,76,85,86

6

32

polyline.StrokeThickness

75

1

33

points

78,82,84,85

4

34

polyline.Stroke

76

1

35

Point

20,22,23,26,40,47,50,72,80,82,84,94,99,103

15

36

m_X

96,111,112

3

37

m_Y

97,118,119

3

Всего

37 операндов

122 строки

182 повторения

Таблица 10 Словарь операторов и операций для файла GeneralMethods.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1

1

2

namespace

3

1

3

class

8

1

4

static

11

1

5

public

11

1

6

bool

11

1

7

string

11

1

8

Int64

13

1

9

try

14

1

10

catch

18

1

11

return

20,22

2

12

Convert.ToInt64()

16

1

13

{..}

4..26,9..25,12..23,15..17,19..21

5

14

(..)

11,16,18

3

15

;

1,13,16,20,22

5

16

.

16

1

17

=

16

1

Всего

17 операторов/операций

26 строк

28 повторений

Таблица 11 Словарь операндов для файла GeneralMethods.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System

1

1

2

KDZ_Ternovoy

3

1

3

validateInputTextAsInteger

11

1

4

inputText

11,16

2

5

GeneralMethods

8

1

6

number

13,16

2

7

FormatException

18

1

8

false

20

1

9

true

22

1

Всего

9 операндов

26 строки

11 повторений

Таблица 12 Словарь операторов и операций для файла Task2MethodContainer.cs

№ п/п

Операторы,

операции

Номера строк

Количество повторений

1

using

1,2,3,4,5

5

2

namespace

7

1

3

public

12,14

2

4

partial

12

1

5

class

12

1

6

:

12

1

7

InitializeComponent()

16

1

8

drawPicture.RaiseEvent()

20

1

9

private

25,39,44,49,54,82

6

10

void

25,39,44,49,54,82

6

11

new

20

1

12

bool

25

1

13

Button

25

1

14

RoutedEventArgs

20,54,82

3

15

Label

25

1

16

object

20,54,82,39,44,49

6

17

TextChangedEventArgs

39,44,49

3

18

changeFormElementStates()

41,46,51

3

19

GeneralMethods.

validateInputTextAsInteger()

41,46,51,56

6

20

Task2MethodContainer

.getPolylineList()

64

1

21

List<List<Point>>

64

1

22

Convert.ToInt32()

60,61,64

3

23

&&

51,56

4

24

>

51

1

25

<

51

1

26

MyCanvas.Children.Add

70,76

2

27

Task2MethodContainer.getLine()

70

1

28

Task2MethodContainer.getPolyline()

76

1

29

this

84

1

30

this.Close()

84

1

31

.

2,3,4,5,10,17,18,19,20,29,30,34,35,41,46,51,56,59,60,61,64,65,70,76,84

54

32

;

1,2,3,4,29,30,34,35,65,74,74

12

33

{..}

8..88,13..87, …

14

34

(..)

20,25,39,41,46,49,51,54,56,60,61,64,68,70,74,76,82

31

35

if

27,56

2

36

else

32

1

37

for

74..79

1

38

foreach in

68

1

39

int

60,61,65,74

4

40

!

27

1

Всего

40 операторов/операций

88 строк

188 повторений

Таблица 13 Словарь операндов для файла Task2MethodContainer.cs

№ п/п

Операнды

Номера строк

Количество повторений

1

System;

1

1

2

System.Windows

2

1

3

System.Windows.Controls

3

1

4

System.Windows.Documents

4

1

5

System.Collections.Generic

5

1

6

KDZ_Ternovoy

7

1

7

SecondTask

12

1

8

Window

12

1

9

SecondTask()

14

1

10

XTextBox.Text

17,41,56,60

4

11

YTextBox.Text

18,46,56,61

4

12

KTextBox.Text

19,51,56,64

6

13

"0"

17,18

2

14

"5"

19

1

15

Button.ClickEvent

20

1

16

validateState

25,27

2

17

button

25,30,35

3

18

label

25,29,34

3

19

label.Visibility

29,34

2

20

Visibility.Visible

29

1

21

Visibility.Hidden

34

1

22

button.IsEnabled

30,35

2

23

true

35

1

24

false

30

1

25

sender

39,44,49,54,82

5

26

e

39,44,49,54,82

5

27

XTextBox_TextChanged

39

1

28

YTextBox_TextChanged

44

1

29

KTextBox_TextChanged

49

1

30

drawPicture_Click

54

1

31

wrongXLabel

41

1

32

wrongYLabel

46

1

33

wrongKLabel

51

1

34

X

60,70,76

5

35

Y

61,70,76

5

34

numberOfFigures

65,68,74

3

35

polyLineList.Count

65

1

36

polyLineList

64,65,68,76

4

35

numberOfFigures

65,68,74

3

36

closeSecondTaskButton_Click

82

1

34

pointList.X

70

1

35

pointList.Y

70

1

34

250

64

1

35

1

65

1

36

0

74

1

Всего

36 операндов

88 строк

89 повторений

Таблица 14 Входные и выходные переменные программы

Входные переменные

Выходные переменные

inputNumberTextBox.Text

outputTextBox.Content

XTextBox.Text

YTextBox.Text

KTextBox.Text

Расчет характеристик программы:

Таблица 15 Значения метрик Холстеда для программы

Наименование

характеристики

Обозначение

и формула для вычисления

Значение

Число простых (уникальных) операторов и операций

n1

162

Число простых (уникальных) операндов

n2

131

Общее число всех операторов и операций

N1

730

Общее число всех операндов

N 2

372

Число входных и выходных переменных (параметров)

n 2*

5

Словарь программы

n = n n

293

Длина реализации программы

N = N1 + N2

1102

Объем программы (в битах)

V = (N1 + N2)  log2(n 1 + n 2)

8211,15

Потенциальный объем программы

V* = (n2* + 2) · log2(n2* + 2)

19,65

Уровень реализации программы

L = V*/V

0,002

Уровень реализации языка

= L V*

0,0393

Работа программирования

E = V / L

4105575

Вывод

Уровень реализации исследуемой программы весьма низкий, так как потенциальный объем программы в значительной степени меньше ее реального объема (V* = 19,65; V = 8211,15).

Оценка структурной сложности трех критериев и метрики Маккейба

Исходный граф

Исходный управляющий граф, построенный по алгоритму программы:

Рис. 2 Управляющий граф разработанной программы

Найдем цикломатическое число:

Z = m – n +2 = 28 – 22 + 2 = 8,

Где m – количество дуг, а n – количество вершин.

Модифицированный граф

Как видно, некоторые из вершин можно убрать, так как они образуют линейную последовательность операторов:

Рис. 3 Модифицированный управляющий граф разработанной программы

Цикломатическое число осталось таким же:

Z = m – n +2 = 22 – 16 + 2 = 8,

Первый критерий

Определяем минимальный набор маршрутов, проходящих через каждый оператор ветвления и по каждой дуге:

M1: 1-2-3-4-6-7-4-6-9-10-13-4-6-9-10-11-12-9-10-11-13-4-2-3-14-16-20-14-16-19-14-2-22; p1=22

Вычислим уровень сложности:

S1= p 1 = 22

Второй критерий

Определяем число проверок каждого линейно независимого цикла и линейно независимого циклического участка программы:

Общее число проверок = Z = 8 Таким образом, общее число циклических и ациклических участков в графе равно 8.

Циклические участки:

M1: 2-3-4; p1=3

M2: 2-3-14; p2=3

M3: 4-6-7; p3=2

M4: 4-6-9-10-11-13; p4 =4

M5: 9-10-11-13; p5 =2

M6: 14-16-20; p6=2

M7: 14-16-19; p7=2

Ациклические маршруты:

M8: 1-2-22; p8=1

Метрика структурной сложности:

S2 = p1+p2+p3+p4+p5+p6+p7+p8 = 3+3+2+4+2+2+2+1 = 19