Скачиваний:
13
Добавлен:
15.06.2014
Размер:
414.04 Кб
Скачать

Министерство образования Республики Беларусь

Учреждение образования «Белорусский государственный университет

информатики и радиоэлектроники»

Факультет компьютерных систем и сетей

Кафедра программного обеспечения информационных технологий

ОТЧЁТ по лабораторной работе

«Построение метрики уровня языка программирования» по курсу МССвИР

Анализируемый язык программирования – Pascal Язык написания программного средства – С#

Проверил:

Выполнил:

Данилова Г.В.

студент гр. 851001

 

Касперович В.Л.

Минск, 2010

Содержание

 

 

Стр.

1.

Введение

3

2.

Теоретические сведения

4

3.

Описание программы

7

 

3.1 Описание функциональной части программы

7

 

3.2. Описание интерфейса

8

4.

Вывод

13

5.

Литература

14

Приложение А. Исходный код главного модуля программы

15

Приложение Б. Пример кода, проанализированного данным ПС.

29

Приложение В. Пример базы данных статистики вычислений уровня

 

языка программирования.

30

2

1. Введение

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

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

В данной работе рассматривается метрика «Уровень языка программирования», которая, в общем случае, оценивает среднюю сложность программирования на данном языке.

3

2. Теоретические сведения

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

Для вычисления этих величин используются четыре измеряемых характеристики программы:

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

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

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

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

словарь программы:

 

 

1

2 ,

(2.1)

длину программы:

 

 

N N1

N2 ,

(2.2)

объѐм программы:

 

 

V N log 2 .

(2.3)

Количество символов, используемых при реализации некоего алгоритма, определяется в числе прочих параметров, и словарем программы , представляющим собой минимально необходимое число символов, обеспечивающих реализацию алгоритма. Объем программы V характеризует число двоичных разрядов, т. е. бит, необходимых для записи программы. Под битом подразумевается логическая единица информации – символ, оператор, операнд, т. е. то, чем непосредственно оперирует программист при создании

программ.

При измерении уровня языка программирования также используется величина * — теоретический словарь программы, т. е. словарный запас, необходимый для написания программы, с учетом того, что необходимая функция уже реализована в данном языке и, следовательно, программа сводится к вызову этой функции. Величина * определяется по следующей формуле:

* 1* 2*,

(2.4)

4

где 1 *

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

(имплиментарных)

функций, использованных в данной программе; 1 *

количество параметров данных функций.

 

 

Исходя из этого, М. Холстед вводит оценку V * :

 

 

 

V*

* log 2 *,

 

(2.5)

с помощью которой описывается потенциальный объем программы,

соответствующий

максимально

компактному

тексту

программы,

реализующей данный алгоритм.

 

 

 

Используя данные величины, можно получить численное значение величины метрики уровня языка программирования.

По аналогии с высказыванием, согласно которому уровень программы, реализуемой конкретным алгоритмом, не зависит от используемого языка программирования, М. Холстед утверждает, что изменение алгоритма при кодировании на одном и том же языке, в одинаковой степени увеличивая потенциальный объем программы, снижает ее уровень. На этом основании была выдвинута гипотеза о постоянстве для одного языка программирования

выражения

 

 

 

 

 

 

 

 

 

 

LV * ,

(2.6)

где - оценка уровня языка; L—уровень программы, который задаѐтся

формулой L

V *

; V* — потенциальный объем программы.

 

V

 

 

 

 

 

 

 

Используя выражения для вычисления уровня программы, можно

записать:

 

 

 

 

 

 

 

 

 

 

(V *)2

.

(2.7)

 

 

 

 

 

 

 

 

 

V

 

Данная метрика не является строго фиксированной для языка. Она зависит, в том числе, от поставленной задачи, конкретного алгоритма, а также от квалификации программиста.

Постоянство определяется синхронным изменением объема программы при изменении ее потенциального объема. Иными словами, увеличение объема программы должно быть на два порядка больше увеличения количества информации по внешним связям. Следовательно, алгоритмически сложные программы вычисления единичных значений переменных будут давать значительно более низкое значение , чем программы вычисления большого объема информации по элементарным соотношениям. Если программа использует только стандартные инструкции языка и не связана с созданием управляющих структур (развилок и циклов), уровень языка такой программы будет значительно выше среднестатистического.

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

5

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

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

Эмпирически уровень языка программирования можно определить следующим образом: чем больше функций реализовано в языке программирования, а следовательно, чем большее количество задач можно решить, используя лишь встроенные возможности языка программирования, тем выше уровень данного языка.

6

3. Описание программы

Для измерения метрики уровня языка программирования была написана программа на языке С#, анализирующая исходные коды программ на языке Pascal. К ПС были сформулированы следующие требования:

ПС должно адекватно оценивать уровень заданной программы на языке Pascal, для этого должны быть использованы формулы (2.1–2.7), а также подсчитаны необходимые ля этого данные программного кода;

ПС должно накапливать статистическую информацию об измеренных значениях уровня языка программирования в базе данных, с подсчѐтом среднего значения;

ПС должно быть совместимо с различными версиями ОС

Windows и платформы .NET;

ПС должно обладать удобным графическим пользовательским интерфейсом.

3.1.Описание функциональной части ПС

Исходный код главного программного модуля ПС приведен в приложении А.

Для написания программы была использована среда разработки программных приложений MS Visual Studio 2010, платформа .NET 4.0, язык программирования С#. Изначально была обеспечена совместимость с платформой .NET 3.0.

Программа имеет событийную архитектуру.

При запуске приложения производится загрузка файлов *.urf, содержащих имплиментарные функции модулей System, Crt, Dos, Graph языка Pascal. Модули Overlay, Turbo3 и Graph3 не включаются по причине их устарелости (программы с использованием этих модулей обеспечивают совместимость с версией TP 3.0). В случае, если данные файлы не найдены, выводится сообщение, и ПС прекращает выполнение.

Анализировать программы можно двумя способами: вводя текст исходного кода в окно программы или загружая его из файла *.pas.

После ввода кода программы ПС загружает его в память и разбирает. Разбор кода осуществляется функцией Analyze, которая вызывает в свою очередь для каждой строки кода функцию ParseString. Данная функция выделяет из строки кода токены, и в соответствии с грамматикой языка Pascal разбивает строку на операторы, операнды, разделители, имена функций и знаки операций. Результат сохраняется в таких структурах данных, как:

dictOperand(хранит словарь операндов); dictOperator(хранит словарь операторов);

numOperand(хранит количество обращений к каждому операнду);

7

numOperator(хранит количество обращений к каждому оператору).

На основании этих данных формируются значения 1 размерность массива dictOperand; 2 размерность массива dictOperator; N1 сумма элементов массива numOperand; N2 сумма элементов массива numOperator.

Также подсчитывается количество функций, реализованных в языке программирования, и их аргументов, и эти значения используются зля вычисления значения *. После чего по формулам (2.1–2.7) подсчитывается значение уровня языка программирования, которое и является результатом работы программы.

В программе реализован ряд функций, необходимых для работы с базой данных результатов вычислений, которая имеет формат *.pll, а именно: открытие БД, добавление элемента, вывод среднего значения (статистики) уровня языка программирования, а также функции справки.

3.2.Описание интерфейса ПС

При запуске интерфейс программы имеет вид, показанный на рис.3.1.

Рис.3.1. Интерфейс ПС при загрузке После ввода исходного кода в окно редактора путѐм открытия файла с

помощью меню или нажатием кнопки ПС имеет следующий вид:

8

Рис.3.2. Интерфейс ПС с загруженным исходным кодом

Анализ кода производится с помощью нажатия кнопки (Analyze) или выбора соответствующего пункта меню. В результате вычислений выводится сообщение следующего типа:

Рис.3.3. Сообщение о подсчитанном уровне ЯП

С помощью кнопки (Open Result Database) или соответствующего пункта меню можно открыть базу результатов вычислений уровня ЯП. При этом будет выведено следующее сообщение:

9

Рис.3.4. Сообщение о среднем уровне ЯП, хранящемся в БД

Новая БД создается нажатием кнопки (Open Result Database) или выбором соответствующего пункта меню.

Загрузка подсчитанного результата уровня ЯП производится нажатием кнопки (Open Result Database) или выбором соответствующего пункта меню. При этом производится пересчет среднего уровня ЯП в данной БД, о чем выводится сообщение следующего типа:

Рис.3.5. Сообщение о среднем уровне языка программирования с учѐтом только что полученного текущего значения

Для закрытия БД служит кнопка (Close Database), для закрытия файла с исходным кодом – кнопка (Close Source Code). Эти действия также можно выполнить с помощью меню.

Меню Help cодержит информацию об использованной метрике, краткое руководство пользователя и информацию о разработчике. Ниже приводится данная информация и вид соответствующих диалоговых окон.

– использованная метрика:

PLL definition bases on Halstead's formulas. We use the following calculations: program language: h = h1 + h2;

program length: N = N1+N2;

where h1 is the number of unique operators, including separators, procedure identifiers and operation signs (operator vocabulary); h2 is the number of unique operands (operand vocabulary); N1 is total operator quantity; N2 is total operand quantity.

program theoretical volume: V = N log2h.

Also we use h* which stands for theoretical program vocabulary (the quantity of functions already implemented in the PL (h1*) and their arguments(h2*): h* = h1* + h2*). Using this value we get potential program volume: V* = h* log2h*, which shows the volume of the most optimal code implementing the needed algorithm.

PLL is calculated according to the formula λ = (V*)2/V.

– краткое руководство пользователя:

Programming Language Level Metrics (PLLM) is a piece of software that allows calculation of PLL according to Halstead's formulas. This program works with Pascal source codes, which are loaded to program like *.PAS files.

The interface

Consists of a menu and a textbox where code for analyzing is shown. You may not change the code directly in the window - you should change source file.

Surfing the menu File menu

-Open Source Code

You should use this item to choose *.PAS file with Pascal source code. After your choice the code will be loaded to the program.

-Analyze

10