Правильность работы любой информационной системы во многом зависит от качества программного обеспечения (ПО), входящего в её состав. Постоянное усложнение современного ПО и рост важности выполняемых им функций увеличивает ущерб от возможных ошибок [1]. Чтобы минимизировать количество ошибок, допущенных при разработке ПО, необходимо осуществлять верификацию его корректности, а также проверять соответствие спецификациям. Реализовать это на практике возможно с помощью методологии контрактного программирования.
Для реализации принципов контрактного программирования возможно использовать следующие библиотеки: Code Contracts, Contract++, PhpDeal, Cerny.js и jContractor.
Для проведения сравнительного анализа программных продуктов были выбраны следующие критерии:
- А1 — скорость работы;
- А2 — объём занимаемой памяти;
- А3 — объём результирующего кода;
- А4 — базовый функционал;
- А5 — качество документации.
Чтобы определить веса критериев, была использована аналитическая иерархическая процедура Саати. Данный метод нашёл применение в самых различных областях, таких как образование [2,3], наука и производство. В таблице 1 представлены правила заполнения матрицы парных сравнений.
Xij | Значение |
1 | i-ый и j-ый критерий примерно равноценны |
3 | i-ый критерий немного предпочтительнее j-го |
5 | i-ый критерий предпочтительнее j-го |
7 | i-ый критерий значительно предпочтительнее j-го |
9 | i-ый критерий явно предпочтительнее j-го |
В таблице 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 изображена диаграмма весовых коэффициентов для каждого из используемых критериев.

Выполним проверку матрицы попарных сравнений на непротиворечивость.
Суммы столбцов матрицы парных сравнений:
R1 = 11,34; R2 = 20,2; R3 = 29; R4 = 1,79; R5 = 4,49.
Путём суммирования произведений сумм столбцов матрицы на весовые коэффициенты альтернатив рассчитывается вспомогательная величина L = 4,46.
Индекс согласованности: .
Величина случайной согласованности для размерности матрицы парных сравнений: S = 1,12.
Отношение согласованности не превышает 0,2 — значит уточнение матрицы парных сравнений не требуется.
Используя полученные коэффициенты, определим интегральный показатель качества для библиотек, реализующих поддержку контрактного программирования:
- Code Contracts для языка C#;
- Contract++ для языка C++;
- PhpDeal для языка PHP;
- Cerny.js для языка JavaScript;
- JContractor для языка Java.
Выберем категориальную шкалу от 0 до 7 (где 0 — качество не удовлетворительно, 7 — предельно достижимый уровень качества на современном этапе) для функциональных возможностей программных продуктов.
Значения весовых коэффициентов αi, соответствующие функциональным возможностям продуктов:
- Скорость работы: α1 = 0,14;
- Объём занимаемой памяти: α2 = 0,08;
- Объём результирующего кода: α3 = 0,03;
- Базовый функционал: α4 = 0,49;
- Качество документации: α5 = 0,26.
Определим (по введённой шкале) количественные значения функциональных возможностей Xij (таблица 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-ой библиотеки визуализации графов определим с помощью следующей формулы: .
На рисунке 2 изображена лепестковая диаграмма интегрального показателя качества каждого программного продукта.

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

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