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

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

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

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

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

Дисциплина: «Управление программными проектами»

студентка гр. ИКПИ-51

________________

Павшева М.В.

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

________________

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

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

2018

Постановка задачи

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

положительных элементов двух исходных массивов А и В в массив С. Размер исходных массивов А и В ввести с клавиатуры. Массивы А и В заполняются случайными числами в диапазоне от -100 до 100. Сформированный массив С вывести на экран.

Операторы

Оператор

Число

 

 

операторов

1.

using

1

2.

class

1

3.

public static

4

4.

return

1

5.

new

5

6.

Random

2

7.

.Length

8

8.

.Next

1

9.

Console.WriteLine()

2

10.

Console.Write()

1

11.

Console.ReadLine()

3

12.

Console.Clear()

1

13.

for ()

3

14.

do { } while ()

1

15.

if

2

16.

int[]

5

17.

string

2

18.

char

1

19.

Fill()

2

20.

.Parse

3

21.

Print()

3

22.

Copy()

2

23.

Array.Copy()

2

24.

=

14

25.

>=

1

26.

!=

1

27.

==

2

28.

<

3

29.

++

4

30.

[ ]

16

31.

{ }

35

32.

( )

13

33.

,

25

34.

;

38

35.

.

32

36.

int[…]

4

37.

Random()

1

38.

“ ”

8

39.

‘ ’

2

Операнды

 

 

 

 

1.

j

2

2.

b

7

3.

i

13

4.

g

5

5.

a

16

6.

c

5

7.

str

3

8.

str1

1

9.

p

5

10.

r

3

Метрики Холстеда

n1 – число уникальных операторов программы, включая символыразделители, имена процедур и знаки операций (словарь операторов).

n2 – число уникальных операндов программы (словарь операндов). N1 – общее число операторов в программе.

N2 – общее число операндов в программе.

n1 = 39

n2 = 10

N1 = 60

N2 = 253

Словарь программы: n = n1 + n2 = 49

Длина программы: N = N1 + N2 = 313

Объём программы: V = N * log2 n = 313*log2 49 = 313 * 5,615 = 1757,495

Оценка реализации: L*= (2 * n2 )/ (n1 * N2) = 20/9867 = 0,002

Трудность понимания: Ec = V/ L* = 1757,495/0,002 = 8787,5

Трудоемкость кодирования: D = (n1 * N2) (2n2) = 1/ L* = 493,35

Уровень языка выражения: * = V/ D2 = 1757,495/493,35^2 = 1757,495/243394,2225 = 0,007

Информационное содержание I = V / D = 1757,495/493,35= 3,56

Оптимальная модульность: M = n2*/6 = 10/6 = 1,67

Метрики Джилба

Значение характеристики определяется количеством используемых операторов if:

= 2

Значение характеристики определяется количеством используемых в программе

циклов:

= 4

Значение характеристики определяется количеством используемых в программе

модулей в решении.

= 4

Общее количество операторов условия 6, из них 2 оператора if и четыре оператора цикла

(3 for, 1 do {} while ()).

Общее число всех используемых операторов: L = 1*11 + 2*8 + 3*5 + 4*3 + 5*2 + 8*2 + 32 + 38 + 25 + 13 + 35 + 16 + 14 = 253.

Абсолютная сложность программы: CL=6

Cl=CL/L=6/263=0.0228.

Количество связей между модулями: = 3 (по одной связи между основным и каждым из дополнительных модулей.)

Отношение числа связей между модулями к числу модулей: f = N4SV / L mod = 81/4 = 20.25

Заключение

Из полученных результатов анализа текста программы следует, что исходный код имеет невысокую сложность, так как на 253 оператора текста приходится 6 операторов условий. Общее число программных модулей решения также невелико (4 модуля), что подтверждает низкий уровень сложности программы.

Приложение 1. Листинг программы

1.using System;

2.class Programm

3.{

4.public static int[] Copy(int[] a)

5.{

6.int[] b = new int[a.Length];

7.int j = 0;

8.for (int i = 0; i < a.Length; i++)

9.{

10.if (a[i] >= 0) { b[j] = a[i]; j++;}

11.}

12.return b;

13.}

14.

15.public static void Fill (ref int[] a, Random g)

16.{

17.for (int i = 0; i < a.Length; i)

18.{

19.a[i] = g.Next(-100, 100);

20.}

21.}

22.

23.public static void Print(int[] a, string str, string str1)

24.{

25.Console.WriteLine(str);

26.for (int i = 0; i < a.Length; i++)

27.{

28.if (a[i] != 0) Console.Write(str, a[i]);

29.}

30.Console.WriteLine();

31.}

32.

33.static void Main(string[] args)

34.{

35.int[] a, b, c, p;

36.Random g = new Random();

37.char r;

38.do

39.{

40.Console.Clear();

41.Console.WriteLine("Определите размер первого массива");

42.a = new int[int.Parse(Console.ReadLine())];

43.Console.WriteLine("Определите размер второго массива");

44.b = new int[int.Parse(Console.ReadLine())];

45.c = new int[a.Length + b.Length];

46.Fill(ref a, g);

47.Fill(ref b, g);

48.Print(a, "{0,5}", "Первый массив");

49.Print(b, "{0,5}", "Второй массив");

50.p = Copy(a);

51.Array.Copy(p, 0, c, 0, a.Length);

52.p = Copy(b);

53.Array.Copy(p, 0, c, a.Length, b.Length);

54.Print(c, "{0,5}", "Результирующий массив");

55.Console.WriteLine();

56.Console.WriteLine("Выполнить повторение программы? Y/N");

57.r = char.Parse(Console.ReadLine());

58.} while (r == 'Y' || r == 'y');

59.}

60.}