Сравнительный анализ библиотек, поддерживающих контрактное программирование

№61-1,

технические науки

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

Похожие материалы

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

Для реализации принципов контрактного программирования возможно использовать следующие библиотеки: Code Contracts, Contract++, PhpDeal, Cerny.js и jContractor.

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

  1. А1 – скорость работы;
  2. А2 – объём занимаемой памяти;
  3. А3 – объём результирующего кода;
  4. А4 – базовый функционал;
  5. А5 – качество документации.

Чтобы определить веса критериев, была использована аналитическая иерархическая процедура Саати. Данный метод нашёл применение в самых различных областях, таких как образование [2,3], наука и производство. В таблице 1 представлены правила заполнения матрицы парных сравнений.

Таблица 1. Значения коэффициентов матрицы парных сравнений

Xij

Значение

1

i-ый и j-ый критерий примерно равноценны

3

i-ый критерий немного предпочтительнее j-го

5

i-ый критерий предпочтительнее j-го

7

i-ый критерий значительно предпочтительнее j-го

9

i-ый критерий явно предпочтительнее j-го

В таблице 2 представлены матрица парных сравнений, средние геометрические и веса критериев.

Таблица 2. Матрица парных сравнений, средние геометрические и веса критериев

A1

A2

A3

A4

A5

Среднее

геометрическое

Веса

критериев

A1

1

5

7

1/5

1/5

1,09

0,14

A2

1/5

1

5

1/7

1/7

0,57

0,08

A3

1/7

1/5

1

1/9

1/7

0,24

0,03

A4

5

7

9

1

3

3,71

0,49

A5

5

7

7

1/3

1

2,01

0,26

Сумма

7,61

1

На рисунке 1 изображена диаграмма весовых коэффициентов для каждого из используемых критериев.

Весовые коэффициенты критериев
Рисунок 1. Весовые коэффициенты критериев

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

Суммы столбцов матрицы парных сравнений:

R1 = 11,34; R2 = 20,2; R3 = 29; R4 = 1,79; R5 = 4,49.

Путём суммирования произведений сумм столбцов матрицы на весовые коэффициенты альтернатив рассчитывается вспомогательная величина L = 4,46.

Индекс согласованности: ИС = (L - N)/(N - 1) = 0,154.

Величина случайной согласованности для размерности матрицы парных сравнений: СлС = 1,12.

Отношение согласованности ОС = ИС/СлС = 0,14 не превышает 0,2 – значит уточнение матрицы парных сравнений не требуется.

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

  1. Code Contracts для языка C#;
  2. Contract++ для языка C++;
  3. PhpDeal для языка PHP;
  4. Cerny.js для языка JavaScript;
  5. jContractor для языка Java.

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

Значения весовых коэффициентов αi, соответствующие функциональным возможностям продуктов:

  1. Скорость работы: α1 = 0,14;
  2. Объём занимаемой памяти: α2 = 0,08;
  3. Объём результирующего кода: α3 = 0,03;
  4. Базовый функционал: α4 = 0,49;
  5. Качество документации: α5 = 0,26.

Определим (по введённой шкале) количественные значения функциональных возможностей Xij (таблица 3). Вычислим интегральный показатель качества для каждого программного продукта.

Таблица 3. Интегральные показатели качества

Критерии

Весовые коэффициенты

Code Contracts

Contract++

PhpDeal

Cerny.js

jContractor

Базовые значения

Скорость работы

0,14

3

4

3

3

4

3,4

Объём занимаемой памяти

0,08

2

4

6

5

3

4

Объём результирующего кода

0,03

4

3

3

4

4

3,6

Базовый функционал

0,49

6

5

5

5

6

5,4

Качество документации

0,26

6

5

5

4

6

5,2

Интегральный показатель качества Qj

5,20

4,72

4,74

4,43

5,42

4,9

Интегральный показатель качества для j-ой библиотеки визуализации графов определим с помощью следующей формулы: Qj = ai * Zij.

На рисунке 2 изображена лепестковая диаграмма интегрального показателя качества каждого программного продукта.

Лепестковая диаграмма интегральных показателей качества
Рисунок 2. Лепестковая диаграмма интегральных показателей качества

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

Лепестковая диаграмма значений функциональных характеристик
Рисунок 3. Лепестковая диаграмма значений функциональных характеристик

После проведения сравнительного анализа было выяснено, что только 2 библиотеки имеют интегральный показатель качества, превышающий базовое значение. Наивысшим интегральным показателем качества обладает библиотека jContractor.

Список литературы

  1. Кулямин, В.В. Методы верификации программного обеспечения [Электронный ресурс] : статья / Кулямин В.В. // Институт системного программирования РАН / Режим доступа : http://www.ict.edu.ru/ft/005645/62322e1-st09.pdf.
  2. Рыбанов А. Определение весовых коэффициентов сложности тем учебного курса на основе алгоритма Саати // Педагогические измерения. 2014. № 4. С. 21-28.
  3. Рыбанов А.А., Макушкина Л.А. Технология определения весовых коэффициентов сложности тем дистанционного курса на основе алгоритма Саати // Открытое и дистанционное образование. 2016. № 1 (61). С. 69-79.