Оценивание качества программного обеспечения САПР на основе метрических характеристик

© Е.Е. Карпович, 2013

УДК 681.324.067 Е.Е. Карпович

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

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

Ключевые слова: сложность программ, программные метрики, языки программирования высокого уровня, язык М001ЛА-2.

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

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

Термин «метрика программного обеспечения» означает числовую характеристику некоторого свойства программы. Метрики обеспечивают количественный подход к оцениванию качества программного обеспечения и процесса его разработки.

Одной из важнейших проблем метрологии программных продуктов является формализация характеристик качества и методология их оценки. Для определения адекватности качества функционирования программ, наличия технических возможностей программных средств к взаимодействию, совершенствованию и развитию необходимо использовать стандарты в области оценки характеристик их качества. Основой регламентирования показателей качества программных средств ранее являлся международный стандарт ISO 9126:1991 (ГОСТ Р ИСО/ МЭК 9126-93) "Информационная технология. Оценка программного продукта. Характеристики качества и руководство по их применению".

Завершается разработка и формализован последний проект состоящего из четырех частей стандарта ISO 9126-1-4 для замены небольшой редакции 1991 года. Проект состоит из следующих частей под общим заголовком "Информационная технология — характеристики и метрики качества программного обеспечения": "Часть 1. Характеристики и субхарактеристики качества" Часть

2. Внешние метрики качества" "Часть 3. Внутренние метрики качества" "Часть 4. Метрики качества в использовании" (см. публикации Липаева В.В. [1,2]).

Результаты исследования метрических характеристик качества представлены в SWEBOK (Software Engineering Body of Knowledge), в документ, издаваемый комитетом Software Engineering Coordinating Committee, в который вовлечено сообщество IEEE Computer Society. Назначение SWEBOK состоит в объединении знаний по инженерии программного обеспечения (разработке программного обеспечения) [3].

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

> метрики программного продукта, которые используются при измерении его характеристик — свойств;

> метрики процесса, которые используются при измерении свойства процесса ЖЦ создания продукта.

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

Метрики программного продукта включают:

• внешние метрики, обозначающие свойства продукта, видимые пользователю;

• внутренние метрики, обозначающие свойства, видимые только команде разработчиков.

• Внешние метрики продукта — это метрики:

• надежности продукта, которые служат для определения числа дефектов;

• функциональности, с помощью которых устанавливаются наличие и правильность реализации функций в продукте;

• сопровождения, с помощью которых измеряются ресурсы продукта (скорость, память, среда); применимости продукта, которые способствуют определению степени доступности для изучения и использования;

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

• Внутренние метрики продукта включают:

• метрики размера, необходимые для измерения продукта с помощью его внутренних характеристик;

• метрики сложности, необходимые для определения сложности продукта;

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

Внутренние метрики позволяют определить производительность продукта и являются релевантными по отношению к внешним метрикам.

Внешние и внутренние метрики задаются на этапе формирования требований к программному обеспечению предметом планирования и управления достижением качества конечного программного продукта.

Метрики продукта часто описываются комплексом моделей для установки различных свойств, значений модели качества или прогнозирования. Стандарт ISO/IEC 9126-2 определяет следующие типы мер:

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

• мера времени (функционирования системы, выполнения компонента и др.);

• мера усилий (производительность труда, трудоемкость и др.);

• мера учета (количество ошибок, число отказов, ответов системы и др.).

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

метрики Холстеда — это характеристики программ, выявляемые на основе статической структуры программы на конкретном языке программирования: число вхождений наиболее часто встречающихся операндов и операторов; длина описания программы как сумма числа вхождений всех операндов и операторов и др.

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

• общее время разработки и отдельно время для каждой стадии;

• время модификации моделей;

• время выполнения работ на процессе;

• число найденных ошибок при инспектировании;

• стоимость проверки качества;

• стоимость процесса разработки.

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

Рассмотрим подробно метрики программного продукта, базирующиеся на статистическом анализе текстов программ. К ним относятся:

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

• метрики структурной сложности.

Лингвистические исследования количественных характеристик текстов позволили установить ряд эмпирических закономерностей, имеющих важное значение и в текстах программ на языках высокого уровня. Результаты таких исследований впервые были опубликованы в работе М. Холстеда [4]. Любая программа определяет некоторое упорядоченное множество действий над операндами с помощью операторов. Операнд - это некоторая постоянная или переменная величина, обрабатываемая в программе, а оператор представляет собой обозначение конкретного действия, выполняемого по отношению к операнду.

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

• nul - число отдельных (уникальных) операторов в программе;

• nu2 - число отдельных (уникальных) операндов в программе;

• N1 - общее число всех операторов в программе;

• N2 - общее число всех операндов в программе;

• flj - частота встречаемости j-го оператора в программе, где j = 1,2, „.nul;

• f2i - частота встречаемости i-го операнда в программе, где i = 1,2, ...nu2.

Лля выше перечисленных характеристик справедливы следующие соотношения:

nul nu2

Nl = X flj N2 = x f2i

j=l i=l

Учитывая эти основные метрические характеристики для программы, можно определить:

n=nu1+nu2 — словарь программы,

N=N1+N2 — длина реализации программы,

N'= nu1*log2

V=N*log2n — объем программы,

L'=2*nu2/(nu1*N2) - уровень программы,

Ep = N'* log2n/L' - оценка трудоемкости разработки программы,

Ec = V/L' - оценка трудоемкости изучения программы.

Словарь программы - это сумма отдельных операторов и отдельных операндов программы, длина реализации равна сумме всех операторов и операндов. Длина реализации программы N может быть близко аппроксимирована как функция N'(n1,n2), эта аппроксимация является достаточно точной для хорошо написанных программ.

Оценка объема программы V представляет собой объем программы в битах, делая его независимым от набора символов языка, на котором написана программа. Уровень программы является мерой краткости реализации алгоритма. Наивысшим уровнем, на котором может быть представлен алгоритм, представляется в форме вызова процедуры. Уровень такого представления равен 1. Более длинные представления алгоритма, включающие много операторов и повторяющееся использование операндов, имеют более низкий уровень.

По определению уровень L=V/V*, где V* — объем операции, выраженной в виде вызова процедуры. Определение V* — непростая задача, поэтому используют оценку уровня L' по формуле: L'=2*nu2/(nu1*N2).

Предполагая, что трудоемкость программирования возрастает при увеличении объема программы и уменьшается при увеличении уровня, Холстед предложил в качестве трудоемкости разработки программы оценку Ep, получаемую по формуле: Ep =V/L = N'* log2n/L' .

Для оценки трудоемкости изучения текста программы была предложена оценка Ec, которая вычисляется по формуле: Ec=V/N'.

Были проведены эксперименты, подтверждающие практичность метрической теории программ для различных языков высокого уровня [5].

Структурная сложность программ определяется:

• количеством взаимодействующих компонентов;

• сложностью взаимодействия;

• числом связей между компонентами.

На уровне программной единицы (процедуры, подпрограммы) структурную сложность можно оценить с помощью метрики Мак-Кейба [6]. Мак-Кейб выполнял численные измерения независимых путей выполнения в программах на основе анализа их исходных текстов и предложил в качестве меры сложности тестирования программ использовать цикломатическое число управляющего графа программы.

Любая программа (или алгоритм) представляется в виде управляющего ориентированного графа G=(V,E) c V вершинами и E дугами, где вершины соответствуют операторам, а дуги определяют передачи управления от одного оператора к другому. Такой граф называется графом потока управления или управляющим графом программы. Цикломатическое число управляющего графа программы определяется по формуле: Cm=m-n+2,

где m — количество дуг графа, n - число вершин графа.

Метрика Мак-Кейба Cp или цикломатическая сложность программы (или подпрограммы) - это число линейно независимых маршрутов, проходящих через программный код, она равно цикломатическому числу управляющего графа программы, увеличенному на 1, Cp=Cm+1. Метрику Мак-Кейба можно определять на основе статического анализа текста программы следующим образом:

Ср=1, если программа линейной структуры, т. е. не включает операторы IF-ELSE, CASE и циклы.

В общем случае, если программа включает условные операторы и циклы, то

Ср = CI+CLOOP+ICASE +1;

где CI — число условных операторов; CLOOP — число операторов цикла; ICASE — число ветвей в операторах CASE.

Рассмотрим возможности автоматизации определения, анализа и визуализации метрических характеристик программ. Примеры практического освоения методов метрического оценивания программ и задания для лабораторных работ представлены в практикуме Черникова Б.В. и Поклонова Б.Е. [7]. В данном учебном пособии студентам предлагается вручную просматривать тексты простых программ и оценивать их с использованием метрик. Лля более сложных программ объем ручных расчетов существенно возрастает, что приводит к ошибкам в оценке программного обеспечения. В связи с этим становится актуальной проблема разработки инструментальных программных средств поддержки процесса оценивания качества программного обеспечения. Примером такой программы является разработанная автором программа MERA, предназначенная для оценивания сложности программ на языке MODULA-2 и описанная в [8, 9].

Язык MODULA-2 - это паскаль — подобный язык программирования, разработанный Н. Виртом для создания системного программного обеспечения в 1977 году в Институте информатики г. Цюриха. Язык Модула-2 — структурный, модульный язык программирования, с синтаксисом, основанным на языке

Паскаль. Компиляторы языка Модула-2 были разработаны для персональных ЭВМ, работающих под управлением операционной системы MS DOS, в начале 90-х годов прошлого века.

Программа MERA предназначена для автоматизации вычисления метрических характеристик сложности программ на языке Модула-2. Исходными данными для подсистемы является синтаксически правильный текст программного модуля или модуля реализации, содержащий произвольное количество вложенных процедур. Программа MERA является статическим анализатором исходного текста программ и выполняет следующие функции:

— определение метрических характеристик модуля;

— определение метрических характеристик вложенных процедур;

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

Результаты записываются текстовый файл, имя которого совпадает с именем модуля, а расширение — .mtr. Пример файла метрик приведен ниже.

Программа MERA выполняет следующие действия:

1. Вводит имя файла, в котором находится измеряемая программа пользователя. Файл имеет расширение ".mod"

2. Формирует имя файла, в который записывается метрические характеристики. Файл имеет имя <имя программы>.т^

3. Текст программы пользователя считывается в оперативную память в массив TEXTPGM и формируется таблица внутренних процедур с помощью процедуры VVODMOD.

4. Затем в цикле производится анализ текста модуля и входящих в него процедур и расчет метрик.

5. Тексты процедур считываются в оперативную память с помощью процедуры VVODPRC.

6. Для модуля подсчитывается число импортируемых процедур с помощью процедуры CHETIMP; для процедуры — число параметров KPAR с помощью процедуры PARPROC.

7. Определение числа констант NCS производится с помощью процедуры CHETCONS.

8. Анализ описаний переменных и построение таблицы переменных производится процедурой CHETVAR.

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

ETA1 — ЧИСДО ОТДЕДЬНЫХ ОПЕРАТОРОВ;

ETA2 — ЧИСДО ОТДЕДЬНЫХ ПЕРЕМЕННЫХ;

NO1 — ОБЩЕЕ ЧИСДО ОПЕРАТОРОВ;

NO2 — ОБЩЕЕ ЧИСДО ИСПОДЬЗОВАНИЙ ПЕРЕМЕННЫХ;

ICASE -ОБЩЕЕ ЧИСДО АДЬТЕРНАТИВ В ОПЕРАТОРАХ CASE.

10. На основе этих элементарных характеристик производится подсчет метрик Холстеда процедурой HMETRIC и топологических метрик с помощью процедуры FPMERA. Выходные результаты записываются в файл с именем <имя программы>.т^.

Пример файла метрических характеристик. MODULE TEST4;

(* ВСТРОЕННЫЕ ФУНКЦИИ ОБРАБОТКИ СТРОК *) FROM InOut IMPORT ReadString, WriteString, WriteCard, WriteLn, WriteInt; FROM Strings IMPORT Concat, CompareStr, Assign, Copy, Delete,

Insert, Length, Pos; VAR S1,S2: ARRAY[0..80] OF CHAR; STR: ARRAY[0..80] OF CHAR;

I: CARDINAL; CHR : CHAR; BEGIN

WriteString(' ВВЕДИТЕ СТРОКУ '); WriteLn; ReadString(STR); WriteLn; WriteString(STR); WriteLn; WriteString(' ПРИСВАИВАНИЕ '); WriteLn; WriteString('Assing(STR,S1) S1= '); Assign(STR,S1); WriteString(Sl); WriteLn; WriteString(' КОНКАТЕНАЦИЯ СТРОК '); WriteLn; WriteString('Concat(STR,S1,S2) S2= '); Concat(STR,S1,S2); WriteString(S2); WriteLn;

WriteString(' ПЕРЕСЫЛКА СТРОКИ '); WriteLn; WriteString('Copy(S1,1,3,S2) S1,S2= ');

Copy(S1,1,3,S2); WriteString(S1); WriteLn; WriteString(S2); WriteLn; WriteString(' ДЛИНА СТРОКИ '); WriteLn; WriteString('Length(STR) '); WriteLn; I:=Length(STR); WriteString('STR= '); WriteString(STR); WriteString(' Length(STR)= '); WriteCard(I,4); WriteLn; WriteString(' УДАЛЕНИЕ СТРОКИ '); WriteLn; WriteString('Delete(STR,1,6) STR= '); Delete(STR,1,6); WriteString(STR); WriteLn; WriteString(' ВСТАВКА ПОДСТРОКИ '); WriteLn; WriteString('Insert("***",STR,4) STR= '); Insert('***',STR,4); WriteString(STR); WriteLn;

WriteString(' ОПРЕДЕЛЕНИЕ ПОЗИЦИИ ПОДСТРОКИ '); WriteLn; WriteString('Pos("***",STR) '); I:=Pos('***',STR); WriteCard(I,4); WriteLn; WriteString('Pos("***",S1) '); I:=Pos('***',S1); WriteCard(I,4); WriteLn; I:=Length(S1); WriteString('Length(S1) = '); WriteCard(I,4); WriteLn; WriteString(' СРАВНЕНИЕ СТРОК '); WriteLn; WriteString('CompareStr(S1,STR)= ' ); WriteInt(CompareStr(S1,STR),4); END TEST4.

МЕТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ МОДУЛЯ TEST4 В МОДУЛЕ TEST4 НЕТ ОПИСАНИЙ ПРОЦЕДУР ДЛИНА МОДУЛЯ = 1972 ЧИСЛО СТРОК ИСХОДНОГО ТЕКСТА = 52 ЧИСЛО ИМПОРТИРУЕМЫХ МОДУЛЕЙ = 2

ЧИСЛО ИМПОРТИРУЕМЫХ ПРОЦЕДУР И ДРУГИХ ОБЪЕКТОВ = 13 В МОДУЛЕ TEST4 НЕТ ОПИСАНИЙ КОНСТАНТ

ЧИСЛО КОНСТАНТ ЫСБ = 0

ЧИСЛО ОБЪЯВЛЕНИЙ ПЕРЕМЕННЫХ ЕТА2= 5

ЧИСЛО ОПЕРАТОРОВ ЕТА1= 11

ЧИСЛО ПЕРЕМЕННЫХ ЕТА2= 5

ОБЩЕЕ ЧИСЛО ОПЕРАТОРОВ N01= 66

ОБЩЕЕ ЧИСЛО ИСПОЛЬЗОВАНИЙ ПЕРЕМЕННЫХ N02= 32

МЕТРИКИ ХОЛСТЕЛА

СЛОВАРЬ ПРОГРАММЫ — ЕТА = 16

ЛЛИНА ПРОГРАММЫ — N = 98

ОБЪЕМ ПРОГРАММЫ — V = 265.38892

ОЦЕНКА ЛЛИНЫ ПРОГРАММЫ — NH = 31.92203

УРОВЕНЬ ПРОГРАММЫ — LN = 0.02273

УСИЛИЯ НА ИЗУЧЕНИЕ ПРОГРАММЫ — ЕС = 11677.11247

УСИЛИЯ НА РАЗРАБОТКУ ПРОГРАММЫ — ЕР = 21068.53679

ПОТОКОВЫЕ МЕТРИКИ

МЕТРИКА МАК-КЕЙБА СР = 1

ОБОБЩЕННАЯ ПОТОКОВАЯ МЕТРИКА ГР = 41

* ТАБЛИЦА ПЕРЕМЕННЫХ

* ИМЯ ПЕРЕМЕННОЙ * ЧИСЛО ИСПОЛЬЗОВАНИЙ

и«

* Б1 * 8 *

* Б2 * 4 *

* БТН * 12 *

* I * 8 *

* CHR * 0 *

* ТАБЛИЦА ОПЕРАТОРОВ

* ИМЯ ОПЕРАТОРА 51! * ЧИСЛО ИСПОЛЬЗОВАНИЙ

* WriteString * 29 *

* WriteLn * 22 *

* ReadString * 1 *

* Assign * 1 *

* Concat * 1 *

* Copy * 1 *

!I! # _ * 4 *

* WriteCard * 4 *

* Delete * 1 *

* Insert * 1 *

* WriteInt * 1 *

СУММАРНЫЕ ЗНАЧЕНИЯ МЕТРИК

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ УСИЛИЙ НА РАЗРАБОТКУ ЕРБиМ = 21068.53679

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ УСИЛИЙ НА ИЗУЧЕНИЕ

БСБиМ = 11677.11247

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ МАК-КЕЙБА СРБиМ = 1 СУММАРНОЕ ЗНАЧЕНИЕ ОБОБЩЕННОЙ ПОТОКОВОЙ МЕТРИКИ ЕРБиМ = 41

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ "ЧИСЛО СТРОК В ПРОГРАММЕ НБТНБиМ = 52

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ "ЛЛИНА ПРОГРАММЫ" ОЕБиМ = 1972

СУММАРНОЕ ЗНАЧЕНИЕ МЕТРИКИ "ЧИСЛО ОПЕРАТОРОВ" ШБУМ = 66

Заключение

Язык MODULA-2 не получил такого широкого применения, как языки программирования Pascal, C++ и C#. Тем не менее, выше описанный алгоритм анализа исходного кода и определения метрических характеристик сложности программ является основой для разработки статических анализаторов программного кода на языках Pascal, C++ и C# современных версий. Такие статические анализаторы могут использоваться в учебном процессе при проведении практических и лабораторных занятий по дисциплинам «Технология программирования» и «Метрология программного обеспечения».

- СПИСОК ЛИТЕРАТУРЫ

1. Липаев В. В. Выбор и оценивание характеристик качества программных средств. Методы и стандарты. М: СИНТЕГ, 2001, -228 с.

2. Липаев В. В. Программная инженерия. Методологические основы. Учебник. — Москва: Теис, 2006.- 608 с.

3. http //swebok.sorlik.ru/10_software_quality.html

4. M. Halstead Elements of software science. 1977. Purdue University/ Имеется русский перевод — Холстед М. Начала науки о программах: пер. с англ. М.: Финансы и статистика, 1981. - 128 с.

5. Gordon R. D. Measuring improvement in program clarity. - IEEE Transations of software engineering, v. SE-5, N 2, 1979, c. 79-90.

6. McCabe T. J. A complexity measure. - IEEE Transations of software engineering, v. SE-2, N 4, 1976, c. 308-320.

7. Черников Б.В., Поклонов Б.Е. Оценка качества программного обеспечения: Практикум: Учебное пособие. М.: ИД ФОРУМ, 2012.- 400 с.

8. Инструментальная система тестирования, отладки и оценки качества программ на языке Модула-2. Отчет о НИР. ДЕП.№ 90.Г20428. НИОВТ МЭИ, 1990, 2-й, промежуточный — 41 с. Научный руководитель: Рякин О.М.

9. Программная документация по инструментальной системе программирования на языке Модула-2. Отчет о НИР. ДЕП. №91.Г27021. НИОВТ МЭИ, 1991, 3-й, заключительный, 61 с. Научный руководитель: Рякин О.М. ШНЭ

КОРОТКО ОБ АВТОРЕ -

Карпович Елена Евгеньевна - доцент кафедры САПР, Московский государственный горный университет, informatik08@mail.ru