42718

ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ НА ОСНОВЕ ЛЕКСИЧЕСКОГО АНАЛИЗА

Лабораторная работа

Информатика, кибернетика и программирование

Определить значения метрик Холстеда на основе которых дать оценку качества разработанного исходного текста программы.1 Реализация программы Текст программы для реализации возможного решения поставленной задачи разработанной с использованием языка программирования С приведен в таблице 1: Таблица 1 Текст программы для вычисления значения функции F Номер строки Строки программы 1 using System; 2 nmespce holsted 3 { 4 clss Progrm 5 { 6 sttic void Minstring[] rgs 7 { 8 double x y F; 9 chr check; 10 do 11 { 12 Console.2 Словарь программы В...

Русский

2013-10-30

199.5 KB

30 чел.

Задание: Для любого приложения из лабораторной работы № 1 (часть 1) выполните оценку:

  1.  характеристик программы с помощью метрик Холстеда
  2.  функциональное тестирование

1 ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ НА ОСНОВЕ ЛЕКСИЧЕСКОГО АНАЛИЗА

1.1  Метрики Холстеда. Теоретическое введение

   См. книгу  Б.В. Черникова  и Б.Е. Поклонова «Оценка качества Программного обеспечения».

1.2 Задача «Расчет значений функции»

Разработать программу для вычисления значений функции F:

Значения аргументов функции ввести с клавиатуры. На экран монитора вывести значение функции.

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

1.2.1 Реализация программы

Текст программы для реализации возможного решения поставленной задачи, разработанной с использованием языка программирования С#, приведен в таблице 1:


Таблица 1 Текст программы для вычисления значения функции
F

Номер строки

Строки программы

1

using System;

2

namespace holsted

3

{

4

class Program

5

{

6

static void Main(string[] args)

7

{

8

double x, y, F;

9

char check;

10

do

11

{

12

Console.WriteLine("Введите значение переменной x");

13

Console.Write("x=");

14

x = double.Parse(Console.ReadLine());

15

Console.WriteLine("Введите значение переменной y");

16

     Console.Write("y=");

17

      y = double.Parse(Console.ReadLine());

18

       if (x < y)

19

            F = Math.Sin(x) + Math.Cos(y) * Math.Cos(y);

20

       Else

21

            if (x == y)

22

                    F = Math.Log(x);

23

            else

24

                    F = Math.Sin(x) * Math.Sin(x) + Math.Cos(y);

25

       Console.WriteLine("F=" + F);

26

       Console.WriteLine("Хотите запустить программу вновь?Y/N");

27

         check = char.Parse(Console.ReadLine());

28

} while (check == 'Y' || check == 'y');

29

    }

30

 }

31

}

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

В таблице  2 приведены операторы и операции, используемые в программе (столбец 2). Номера строк исходной программы, где встречается каждый оператор или операция, указаны в третьем столбце. В четвертом столбце указано число повторений каждого оператора или операции в исходном тексте программы.

Таблица 2. Словарь операторов и операций программы

№ пп

Операторы, операции

Номера строк

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

1

using...;

1

1

2

namespace ...

2

1

3

class ...

4

1

4

static void...

6

1

5

double...

8

1

6

char...

9

1

7

do...while()

10-28

1

8

Console. WriteLine()

12, 15, 25, 26

4

9

Console.Write()

13, 16

2

10

....Parse()

14, 17,27

3

11

Console. ReadLineQ

14, 17, 27

3

12

if ()...else...

18,21

2

13

Math.Sin()

19, 24, 24

3

14

Math.Cos()

19, 19, 24

3

15

Math.LogO

22

1

16

;

1, 8, 9, 12, 13, 14, 15, 16, 17, 19, 22, 24, 25, 26, 27, 28

16

17

,

8, 8

2

18

*

19, 24

2

19

=

14, 17, 19, 22,24,27

6

20

+

19, 24, 25

3

21

<

18

1

22

= =

21,28, 28

3

23

{}

3(31), 5(30), 7(29), 11(28)

4

24

()

6, 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 19, 19,21, 22, 24, 24,24,25, 26, 27, 27, 28

23

25

||

28

1

26

“ “

12,13,15,16,25,26

6

27

‘ ‘

28,28

2

28

.

12,13,14,14,15,16,17,17,19,19,19, 22,24,24,24,25,26,27,27

19

                                                                        Всего

116

Таким образом, количество строк этой таблицы есть число уникальных операторов и операций, появляющихся в данном тексте. Если вычислить сумму значений из четвертого столбца, то получим общее число всех операторов и операций, используемых в исходном тексте программы.

Для фигурных скобок, определяющих блок, приведены два номера строки. Первый определяет левую фигурную скобку, открывающую блок, а второй - закрывающую. Такая пара в словаре учитывается только один раз.

Словарь всех операторов в исходном тексте этой реализации программы сведен в столбце 2. В третьем столбце этой таблицы приведены номера строк исходной программы, где встречаются операторы. В последнем столбце приводится количество повторений (число вхождений) операторов в тексте программы.

Таким образом, количество строк этой таблицы есть число уникальных операторов программы. Сложив значения четвертого столбца, получим общее число вхождений всех операторов.

Проведем подробный анализ исходного текста программы в соответствии с полученной таблицей, начиная с первой позиции (первая строка программы - using System;).

Ключевое слово using представляет собой команду (инструкцию), обеспечивающую доступ к именам пространства имен System. Следовательно, команду using можно отнести к выполняемым операторам (см. таблицу 2, позиция 1). Оператор using встречается в программе всего один раз. Слово System  представляет собой имя, над которым осуществляется операция using.. Таким образом, имя System заносится в таблицу словаря операндов (см. табл. 3, позиция 1). Имя System встречается в программе один раз.

Следующая строка программы namespace holsted (см. таблицу 1, строка 2) состоит из оператора namespace и операнда holsted, которые также присутствуют в тексте программы в единственном экземпляре. Оператор занесен в таблицу операторов (см. таблицу 2, позиция 2), а операнд holsted - в таблицу операндов (см. таблицу 3, позиция 2).

Строки

class Program;

static void MainQ;

double x, y, F;

char check;

также представляют собой сочетание операторов и операндов, которые встречаются в тексте один раз (см. таблицу 1, строки 4, 6 и 8), где ключевые слова class, static void, double u char представляют соответственно операции, a Program, Main, x, y, F и check - имена (операнды). Все операции попадают в словарь операторов (см. таблицу 2), а имена - в словарь операндов (см. таблицу 3).

Следующий оператор do ... while() (см. таблицу 2, строки 10-28) представляет собой инструкцию реализации циклического алгоритма, которая используется в тексте программы один раз.

Рассмотрим тело цикла (блок операторов, заключенных между ключевыми словами do ... while). Первой строкой цикла является операция вызова функции вывода строк на экран монитора Console. WriteLine().

Данная операция повторяется в тексте программы 4 раза (см. таблицу. 1, строки 12, 15,25,26). В каждом из этих случаев применения оператора вызова функции (метода) Console.WriteLine() входным параметром функции является строка (строковая константа). Значение строковой константы в каждом случае применения оператора разное:

  •  "Введите значение переменной х ";
  •  "Введите значение переменной у";
  •  "F = ";
  •  "Хотите запустить программу вновь? Y/N".

Все перечисленные константы являются операндами и заносятся в таблицу 3. Каждый из перечисленных операндов используется один раз.

Следующим по ходу выполнения программы выполняется оператор Console.Write(); вызова функции вывода символов на экран (см. таблицу 1, строки 13, 16).

Оператор используется 2 раза с разными операндами:

  •  "х=";
  •  " у=".

каждый из которых используется в программе однократно.  Оператор включается в таблицу операторов, операнды - в таблицу операндов.

Следующая операция

х = double. Parse(Console.ReadLine());

включает три оператора:

  •  = - оператор присваивания (см. таблицу 1, строки 14, 17, 19, 22, 24, 27) используется в программе 6 раз;
  •  ... Parse() - оператор вызова функции преобразования строки в заданный тип (см. таблицу. 1, строки 14, 17, 27) используется в программе 3 раза;

Console.ReadLine() - оператор вызова функции считывания строки с клавиатуры (см. таблицу. 1, строки 14, 17, 27) используется в программе 3 раза.

Следующий оператор if ()...else... (см. таблицу  1, строки 18, 21) используется дважды в тексте программы для ветвления алгоритма.

Операции (см. таблицу 1, строки 19,22,24)

F = Math.Sin(x) + Math.Cos(у) * Math.Cos(y);

F = Math.Log(x);

F= Math.Sin(x) *Math.Sin(x) + Math.Cos(y)

включают следующие операторы:

  •  Math.Sin()- оператор вызова функции вычисления синуса, используется 3 раза;
  •  Math.Cos(y)- оператор вызова функции вычисления косинуса, применяется 3 раза;
  •  Math.Log(x) - оператор вызова функции вычисления логарифма, используется один раз.

Имена F, х и у являются операндами: F используется 5 раз, x - 8 раз, y - 7 раз.

Символы «;», «,», «*» и «+», используемые в программе, обозначают следующие операции:

  •  ; - операция определения завершения оператора, используется 16 раз;
  •  , - операция отделения элементов списка, используется 2 раза;
  •  - операция умножения, используется 2 раза;
  •  + - операция сложения (сцепления строк), используется 3 раза.

 Символы «<» и «= =» используются для определения логических  операций сравнения:

  •  < - операция сравнения «меньше», используется один раз;
  •  = = - операция сравнения «равно», используется 3 раза.

В позициях 23 и 24 таблицы 2. представлены символы, определяющие следующие операции:

  •  {} - операция начала и завершения блока инструкций, используется 4 раза;
  •  () - операция начала и завершения списка параметров или условия, используется 22 раза.

Оставшиеся четыре позиции таблицы 2 содержат символы:

  •  || - операция логического сложения (дизъюнкция), используется один раз;
  •  " " - операция определения строковых констант, используется 6 раз;
  •  ‘ ‘  - операция определения символьных констант, используется 2 раза;
  •  . - операция связывания имен, используется 19 раз.

В таблице 3 приведены операнды рассматриваемой программы.

Таблица 3. Словарь операндов программы

№ п/п

Операнды

Номера строк

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

1

System

1

1

2

holsted

2

1

3

Program

4

1

4

Main

6

1

5

x

8, 14, 18, 19,21,22, 24, 24

8

6

y

8, 17, 18, 19, 19,21,24

7

7

check

9, 27, 28, 28

4

8

"Введите значение переменной х"

12

1

9

"х="

13

1

10

"Введите значение переменной у"

15

1

11

"у="

16

1

12

F

8,19, 22, 24,25

5

13

"Хотите запустить программу вновь? Y/N"

26

1


Продолжение таблицы 3

Операнды

Номера строк

Колич. повт.

14

'Y'

28

1

15

y

28

1

16

"F = "

25

1

                                                                         Всего

36

Проанализируем содержание таблицы 3. Позиции 1, 2, 3 и 4 содержат имена операндов System, holsted, Program, Main(), которые используются в программе по одному разу.

Строковые константы (позиции 8, 9, 10, 11, 13 и 16 таблицы 3):

"Введите значение переменной х";

"х=";

"Введите значение переменной у ";

"у=";

"Хотите запустить программу вновь? Y/N";

"F = "

используются в тексте программы однократно (см. таблицу 1).

Символьные константы ’У’ и у’ применяются также по одному разу (см. таблицу 1). Имена переменных х, у, check и F повторяются в программе соответственно 8, 7, 4 и 5 раз.

Для рассматриваемой программы список входных и выходных параметров приведен в таблице 4. Входными параметрами являются значения переменных:

  •  х = double.Parse(Console.ReadLine());
  •  у = double.Parse(Console.ReadLine());
  •  check=char. Parse(Console. ReadLine()).

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

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

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

x

"Введите значение переменной х"

y

"х="

check

"Введите значение переменной у"

"y="

"F = "

"Хотите запустить программу вновь? Y/N"

F

Выходными значениями являются шесть констант, для которых имена совпадают со значениями, и одна переменная F:

  •  Console.WriteLine("Введите значение переменной х");
  •  Console. Write("x=");
  •  Console WriteLine ("Введите значение переменной у");
  •  Console. Write("y=");  •
  •  Console.WriteLine("F = "+F) - в этом случае два выходных параметра: строковая константа "F = " и переменная F;

Console.WriteLine("Хотите запустить программу вновь? Y/N").

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

Используя сформированные таблицы с необходимыми параметрами для расчета и применяя соотношения Холстеда, вычислим характеристики рассматриваемой программы:

  •  словарь программы:   n = n1 + n2 = 28 + 16 = 44;  
  •  длина реализации:      N = N1 + N2 = 116 + 36 = 152;
  •  длина программы:      N ~ = n1* log2 n1+ n2* log2n2 = 28* log228+16* log216=28*4,81+16*4=134,68+64=198,68;
  •  объем программы в битах:  V = (N2+ N1) * log2 (n1 + n2) =(116 + 36) * log2(28 + 16) = 152 * log244 = 152*5,46 = 829,92;
  •  потенциальный объем программы:  V* = (n2*+ 2) *log2(n2 + 2) = (10 + 2) * log2(10 + 2) = 12 *3,58 = 42,96;
  •  уровень программы: L = V*/ V= 42,96 / 829,92 = 0,052;
  •  уровень языка:              = L* V* = 0,052 * 42,96 = 2,23;
  •  интеллектуальное содержание программы: I= L *V =0,052 * 829,92 = 43,16;

работа по программированию:   E=V / L = 829,92 / 0,052 = 15960.

Сведем все результаты расчетов метрик Холстеда в таблицу 5.


Таблица 5 - результаты расчетов метрик Холстеда

Наименование характеристики

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

Значение

Число простых операторов и операций

n1

28

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

n2

16

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

N1

116

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

N2

36

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

n2*

10

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

n = n1 + n2

44

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

N = N1 + N2

152

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

V = (N2+ N1) * log2 (n1 + n2)

830

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

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

43

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

= L* V*

2,23

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

E=V / L

15960

ВЫВОД: Уровень исследуемой программы весьма низкий, так как потенциальный объем программы в значительной степени меньше ее реального объема.


 

А также другие работы, которые могут Вас заинтересовать

66916. Культура Московской Руси 40 KB
  Большое значение в возвышении Москвы имела удачная политика московских князей по отношению к монголотатарам. С 14 века князья демонстративно подчеркивают роль Москвы как национального лидера в борьбе с врагом. Этот храм должен был стать главной святыней Москвы.
66917. Культура и цивилизация, Теория культурогенеза 36 KB
  Второй подход характеризует цивилизацию как определённую ступень развития культуры. Первым эту точку зрения высказал Шотландский философ 18 века Адам Фергюссон в работе Опыт истории гражданского общества он разделил историю человеческой культуры на 3 стадии: дикость варварство цивилизованность.
66918. Болдинский период творчества 45 KB
  Это один из плодотворных периодов в творчестве А.С. Пушкина. Исследователи считают, что в это время в поэзии Пушкина доминируют 2 темы: тема поэта и поэзии («Румяный критик мой», «Ответ анониму»). Своеобразие этой темы заключается в том, что к традиционному видению...
66919. Опасности техносферы 175.12 KB
  К новым техносферным относятся условия обитания человека в городах и промышленных центрах производственные транспортные и бытовые условия жизнедеятельности. Практически все урбанизированное население проживает в техносфере где условия обитания существенно отличаются...
66920. Динамика антропологии как социальной науки 39 KB
  Просветительско-рационалистический идеал будущего развития культуры идея подхвачена от эпохи просвещения. Они пытались выстроить естественную историю культуры на закономерной основе пытались понять логику развития культуры. Он считал что многообразие культурных явлений можно свести к немногочисленным...
66921. МЕМБРАННЫЕ МЕХАНИЗМЫ ВОЗНИКНОВЕНИЯ И ПРОВЕДЕНИЯ ЭЛЕКТРИЧЕСКИХ СИГНАЛОВ 105 KB
  Для того, чтобы понять, как и почему возникает возбуждение в нервных или мышечных клетках, необходимо прежде всего уяснить основные правила обмена веществами между клеткой и окружающей её средой, поскольку ионы и небольшие молекулы одновременно растворены в водной среде клетки и во внеклеточном пространстве...
66922. ПОЛІТИЧНА ВЛАДА 124.5 KB
  Політична влада є одним з центральних понять політології. Сам термін «влада» не має однозначного визначення, що пояснюється його складністю та неоднозначністю. Загалом владу визначають як право і реальну можливість здійснювати свою волю, нав’язуючи її іншим людям.
66923. Способы выражения грамматических значений 177.5 KB
  В зависимости от того, выражаются ли лексическое и грамматическое значения внутри знаменательного слова или для выражения ГЗ используются другие единицы, грамматические способы делятся на синтетические (ЛЗ и ГЗ выражены внутри знаменательного слова) и аналитические (ГЗ выражается за пределами знаменательного слова).
66924. ГЕОГРАФІЧНИЙ ЧЕМПІОНАТ «УКРАЇНО МОЯ» 62 KB
  Як говорить М.Рильський: Хто не знає минулого, той не вартий майбутнього. Регіон, що об’єднує територію Харківської, частково Сумської і Луганської областей. Слобожанщина. Регіон, розташований на півдні Івано - Франківської області. Покутня. З. Назва регіону пов’язана з назвою ооласті. Волинь.