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

33 чел.

Задание: Для любого приложения из лабораторной работы № 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

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


 

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

20621. Этап генерация кода исполняемой машины 58 KB
  1 a:=bc d:=ac mov R0 b add R0 c → mov a R0 mov R0 b add R0 c mov d R0 2 t:=ab t:=tc t:=t d mov R0 a add R0 b mov R1 c mul R0 R1 mov R1 d div R0 R1 mov t R0 не помещая переменные в регистры Характеристики описывающие целевую машину: набор инструкций вида op destination source способы адресации прямая регистровая абсолютная косвенная Адресация Обозначение Адрес Добавочная стоимость абсолютная регистровая индексированная косвеннорегистровая косвенноиндексированная константа в команде M R CR R CR C M...
20622. Базовые блоки 111.5 KB
  Говорят что трехадресная инструкция вида определяет x и использует y и z. Выход: список базовых блоков такой что каждая трех адресная инструкция принадлежит только одному блоку. Правила: первая инструкция является лидером. любая инструкция являющаяся целевой инструкцией условного или безусловного переходов является лидером.
20623. Многообразие и единство мира 92 KB
  Элементарные частицы фундаментальные частицы и частицы – переносчики фундаментальных взаимодействий3. В соответствии с этими представлениями выделяются следующие уровни: Уровни Условные границы Размер м Масса кг Микромир r =108 m = 1010 Макромир r 108 107 m 1010 – 1020 Мегамир r 107 m 1020 Понятие микромир охватывает фундаментальные и элементарные частицы ядра атомы и молекулы. Элементарные частицы фундаментальные частицы и частицы – переносчики фундаментальных взаимодействий Элементарные частицы – это частицы входящие в состав...
20624. Мегамир, основные космологические и космогонические представления 115 KB
  – среднее расстояние от Земли до Солнца равное 15×1011м. Все планеты – остывшие тела светящиеся отраженным от Солнца светом. Солнечная система Девять планет вращающиеся вокруг Солнца принято делить на две группы: планеты Земной группы Меркурий Венера Земля Марс и планетыгиганты Юпитер Сатурн Уран Нептун Плутон. Считается что диаметр Солнечной системы равен приблизительно 6×1016 м: на этом расстоянии планеты удерживаются силой тяготения Солнца.
20625. Мегамир. Основные космогонические представления 81.5 KB
  Звезды их характеристики источники энергии2. Звезды их характеристики источники энергии Более 90 видимого вещества Вселенной сосредоточено в звездах. Именно звезды и планеты были первыми объектами астрономических исследований. Пожалуй лишь диск нашего солнца позволяет реально наблюдать процессы происходящие на поверхности звезды.
20626. Мегамир, основные космогонические представления 107 KB
  Имеются многочисленные данные подтверждающие предположение что звезды образуются при конденсации облаков межзвездной пыли и газа. Глобула становится зародышем будущей звезды протозвездой и начинает светиться так как энергия движения частиц переходит в тепло. Дальнейшее сжатие протозвезды приводит к такому повышению температуры и давления что становятся возможными термоядерные реакции синтеза гелия из водорода. При этом силы тяготения стремящиеся сжать вещество звезды уравновешиваются силами внутреннего давления.
20627. Химическая эволюция Земли 81.5 KB
  Общая теория химической эволюции и биогенезаТеории возникновения жизниГипотеза ОпаринаХолдейна Контрольные вопросыЛитература Ранее уже говорилось о том что использование ЭВМ позволило строить и рассчитывать образование и развитие солнечной системы и Земли в частности на различных моделях. Химическая эволюция Земли В процессе эволюции Земли складывались определенные пропорции различных элементов. Земля наиболее массивная среди внутренних планет прошла сложнейший путь химической эволюции. Следует подчеркнуть что геологическая история Земли...
20628. Специфика живого 72 KB
  Предмет изучение задачи и методы биологииТри образа биологииАксиомы биологии 2. Предмет изучения задачи и методы биологии Биология – совокупность или система наук о живых системах. Предмет изучения биологии – все проявления жизни а именно: строение и функции живых существ и их природных сообществ; распространение происхождение и развитие новых существ и их сообществ; связи живых существ и их сообществ друг с другом и с неживой природой. Задачи биологии состоят в изучении всех биологических закономерностей и раскрытии сущности жизни.
20629. Термодинамика живых систем. Жизнь как информационный процесс 76.5 KB
  Термодинамика живых систем Состояние живых систем в любой момент времени динамическое состояние характерно тем что элементы системы постоянно разрушаются и строятся заново. Это означает что живые системы обязательно должны быть открытыми системами. Именно на этом неравновесии основана работоспособность живой системы направленная на поддержание высокой упорядоченности своей структуры а. Переход живо системы в такое состояние означает для нее смерть.