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

37 чел.

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

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


 

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

77287. О СОЗДАНИИ СРЕДЫ РАЗРАБОТКИ СИСТЕМ НАУЧНОЙ ВИЗУАЛИЗАЦИИ 33 KB
  При визуализации той или иной сущности специфическими являются выбор конкретного двух или трехмерного геометрического представления абстрактного объекта и разработка алгоритма построения этого представления на основе данных производимых вычислительной программой. Можно выделить три класса систем визуализации. Наконец к третьему классу относятся специализированные системы визуализации созданные специально для данного исследовательского проекта или даже конкретного пользователя.
77289. ON DEVELOPING ENVIRONMENT FOR CONTRUCTING SYSTEMS OF SCIENTIFIC VISUALIZATION 29 KB
  One cn distinguish three clsses of visuliztion systems. The first one consists of universl systems which include set of lgorithms for constructing wide rnge of typl representtions. For exmple wellknown systems PrView nd VS belong re of this kind.
77290. ENVIRONMENT FOR CONSTRUCTING SYSTEMS OF SCIENTIFIC VISUALIZATION 32 KB
  Ekterinburg The tlk dels with scientific visulistion system which is elborted by the uthors. One of the problems of trditionl visuliztion systems is tht some set of trnsformtion lgorithms is strictly prescribed nd cnnot be chnged. yer go the uthors presented this system lredy.
77291. Развитие программных средств научной визуализации 72.5 KB
  В связи с этим в арсенале визуализации создано множество программных средств. Но что делать если исследуемое явление настолько новое что нет готовых программ визуализирующих его Можно все же попытаться выразить визуальные сущности в терминах готовых систем визуализации. Можно создать программу для визуализации с нуля.
77292. Human-aware content elements as a base for website backend interfaces 24.5 KB
  This is especilly importnt for hosted CMS services becuse there is no personl trining provided for the user. For exmple to dd vcncy on site user often should perform the following steps: crete pge crete nd formt vcncy description dd links to tht pge from min menu nd dd nnounce to compnys news. So user wstes his time nd even my leve the service. t the beginning of site cretion process user is sked for his compny type: rel estte cr rentl DVD store etc.
77293. ВИЗУАЛИЗАЦИЯ ТРАССЫ ВЫПОЛНЕНИЯ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ 32.5 KB
  В литературе можно найти самые разные подходы к визуализации трасс выполнения параллельных программ. В докладе мы приведем как обзор существующих решений так и предложения по новым подходам к разработке средств визуализации трасс. Поэтому приемы хорошо помогавшие при визуализации данных лет двадцать назад например использование Visul Informtion Seeking Mntr ldquo;Overview first zoom nd filter then detilsondemndrdquo; не срабатывают. Активно используются методы визуализации трассы выполнения на базе разнообразных метафор...
77294. ВИЗУАЛЬНАЯ ПОДДЕРЖКА РАСПАРАЛЛЕЛИВАНИЯ ПОСЛЕДОВАТЕЛЬНОГО КОДА 26.5 KB
  Представляется что создание вспомогательных визуальных сред поддержки распараллеливания программ сможет облегчить работу специалистов и увеличить эффективность и надежность распараллеливания. Нами разработан макет средств визуальной поддержки распараллеливания в двух вариантах параллелизма на основе общей памяти и параллелизма на основе передачи сообщений с использованием библиотек OpenMP и MPI соответственно. Предполагается что пользователь по ходу анализа и обработки текста вносит изменения в текст последовательной программы для ее...
77295. Конструктор специализированных систем визуализации 1.13 MB
  Статья посвящена разрабатываемой авторами системы научной визуализации. Схема процесса визуализации Средства научной визуализации разделяются на три класса: Универсальные системы которые включают широкий набор алгоритмов построения различных типовых представлений. Например это известные системы PrView и VS. Универсальноспециализированные системы ориентированные на визуализацию объектов определенного типа.