Слайд 2Оглавление
Классификация метрик сложности
Статические метрики сложности
Цикломатическая сложность
Анализ тестового покрытия
Различные методы оценки тестового покрытия,
![Оглавление Классификация метрик сложности Статические метрики сложности Цикломатическая сложность Анализ тестового покрытия](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-1.jpg)
их сравнение
Слайд 3Классификация метрик качества
Две группы признаков:
метрики производительности, качества продукции и технические характеристики продукта
Производительность
![Классификация метрик качества Две группы признаков: метрики производительности, качества продукции и технические](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-2.jpg)
– результирующий продукт
Качество - соответствие явным и подразумеваемым требованиям пользователя, т.е. пригодность изделия к использованию
Технические метрики в большей степени относятся к особенностям программного изделия, а не к процессу его разработки (например, логическая сложность изделия, модульность проекта и т.п.)
Слайд 4Классификация метрик качества
2. группы метрик по их ориентации
Размеро-ориентированные метрики
сбор результатов
![Классификация метрик качества 2. группы метрик по их ориентации Размеро-ориентированные метрики сбор](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-3.jpg)
прямых измерений программного продукта и его качества, а так же процесса разработки
Функционально-ориентированные метрики
косвенно характеризуют функциональное назначение продукта и особенности его входных и выходных данных
Человеко-ориентированные метрики
косвенно позволяют судить о том, как персонал (разработчики и пользователи) оценивают эффективность и качество работы программного продукта, удобство взаимодействия с ним, простоту обучения и т.д.
Слайд 5Статические метрики сложности
Объектно-ориентированные показатели:
число классов;
максимальная глубина класса в дереве наследования;
![Статические метрики сложности Объектно-ориентированные показатели: число классов; максимальная глубина класса в дереве](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-4.jpg)
число классов, связанных с данным классом (связь между классами
объектов);
число непосредственных подклассов (число дочерних классов);
число методов экземпляра;
число локальных методов (взвешенные методы на класс);
число методов, включая унаследованные;
число локальных дружественных методов;
число локальных общих методов;
число локальных частных методов;
число переменных экземпляра;
число используемых входных данных (параметров, глобальных
переменных);
число непосредственных базовых классов;
число используемых выходных данных (параметров, глобальных
переменных);
недостаток связности - 100% минус средняя связность для компонентов
данных класса.
Слайд 6Статические метрики сложности
Показатели сложности:
цикломатическая сложность;
«модифицированная» цикломатическая сложность;
«строгая» цикломатическая сложность;
![Статические метрики сложности Показатели сложности: цикломатическая сложность; «модифицированная» цикломатическая сложность; «строгая» цикломатическая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-5.jpg)
средняя цикломатическая сложность для всех вложенных функций или методов;
средняя «модифицированная» цикломатическая сложность для всех
вложенных функций или методов;
средняя «строгая» цикломатическая сложность для всех вложенных
функций или методов;
максимальная цикломатическая сложность для всех вложенных функций или методов;
максимальная «модифицированная» цикломатическая сложность для всех вложенных функций или методов;
максимальная «строгая» цикломатическая сложность для всех вложенных функций или методов;
максимальный уровень вложенности управляющих конструкций.
Слайд 7Статические метрики сложности
Показатели размера/объема
число файлов;
число функций;
число операторов;
число
![Статические метрики сложности Показатели размера/объема число файлов; число функций; число операторов; число](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-6.jpg)
декларативных операторов;
число выполняемых операторов;
полное число строк;
число пустых строк;
число строк, содержащих исходный код;
число строк, содержащих декларативный исходный код;
число строк, содержащих выполняемый исходный код;
число строк, содержащих комментарии;
число строк комментариев, деленное на число строк кода, умноженное на 100 (процент комментариев);
среднее число строк для всех вложенных функций или методов;
среднее число пустых строк для всех вложенных функций или методов;
среднее число строк, содержащих исходный код, для всех вложенных
функций или методов;
среднее число строк, содержащих комментарии, для всех вложенных
функций или методов.
Слайд 8Цикломатическая сложность
Цикломатическая сложность – это показатель сложности структуры модуля (число независимых маршрутов
![Цикломатическая сложность Цикломатическая сложность – это показатель сложности структуры модуля (число независимых](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-7.jpg)
в модуле).
Направления использования ЦС
Дает рекомендуемое число тестов для ПО.
Используется в течение всех фаз жизненного цикла ПО, начиная с разработки, для обеспечения необходимого уровня надежности, тестируемости и управляемости.
Слайд 9Цикломатическая сложность
графа управляющей логики (control flow graph) модуля ПО:
вычислительные операторы или выражения
![Цикломатическая сложность графа управляющей логики (control flow graph) модуля ПО: вычислительные операторы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-8.jpg)
изображаются в виде узлов
передача управления между узлами – в виде дуг
Формула вычисления ЦС:
С = e – n + 2,
где e и n – число ребер и число узлов на графе управляющей логики соответственно.
Слайд 10Цикломатическая сложность
Упрощенный метод вычисления ЦС:
модуль с прямолинейным графом управляющей логики (из каждого
![Цикломатическая сложность Упрощенный метод вычисления ЦС: модуль с прямолинейным графом управляющей логики](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-9.jpg)
узла, за исключением узла выхода, выходит ровно одна дуга) имеет цикломатическую сложность, равную 1
Каждый оператор двоичного выбора (на графе управляющей логики – узел, из которого выходят ровно 2 дуги; например, if, while) увеличивает цикломатическую сложность на 1
Формула вычисления:
C = 1 + P2,
где P2 – число операторов двоичного выбора.
Более общий случай:
C = 1 + P2 + 2*P3 + 3*P4 + …
где Pk – число операторов выбора из k альтернатив (на графе управляющей логики узел, из которого выходят k дуг).
Слайд 11Цикломатическая сложность
Вариации метрики ЦС:
«модифицированная ЦС»
при подсчете операторы выбора (case) не учитываются; считается,
![Цикломатическая сложность Вариации метрики ЦС: «модифицированная ЦС» при подсчете операторы выбора (case)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-10.jpg)
что оператор switch как одно целое увеличивает цикломатическую сложность на 1
Строгая ЦС
при подсчете учитываются операторы «&&» и «||» (считается, что каждый из них добавляет 1 к цикломатической сложности)
Слайд 12Цикломатическая сложность
Алгоритм вычисления
Мера сложности простого оператора равна 1;
М ({F1; F2; …;Fn}) =
![Цикломатическая сложность Алгоритм вычисления Мера сложности простого оператора равна 1; М ({F1;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-11.jpg)
Σin M(Fi);
М (IF P THEN F1 ELSE F2) = 2 MAX (M (F1), M (F2));
М (WHILE P DO F) = 2 M(F).
Классический подход к оценке результатов рассчета цикломатической сложности:
Слайд 13Анализ тестового покрытия
Оценивает не только тестируемую программу, но и набор тестов
Совмещает тестирование
![Анализ тестового покрытия Оценивает не только тестируемую программу, но и набор тестов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-12.jpg)
«черного» и «стеклянного» ящика
Решает следующие проблемы:
Локализация кода, не имеющего тестового покрытия;
Определение модулей, требующих дополнительное тестирование;
Определение тестовых наборов, которые покрывают наибольший и наименьший набор исходных тесктов; определение пересечений тестовых пакетов по проверяемому коду;
Определение численной меры покрытия, которая является косвенной характеристикой качества продукта
Слайд 14Анализ тестового покрытия
Определяется как отношением исполненных хоть раз единиц структурных единиц (блоков/узлов/дуг/…)
![Анализ тестового покрытия Определяется как отношением исполненных хоть раз единиц структурных единиц](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-13.jpg)
к их общему количеству
Оценки для разных структурных единиц взаимосвязаны, требуется четко определить какую из них использовать?
Рассмотрим с точки зрения следующих критериев:
Автоматизация
Достижимость
Понятность
Изменяемость
Тщательность
Слайд 15Покрытие строк
Покрытие строк = s/S
где:
s - число строк, выполненных по крайней мере
![Покрытие строк Покрытие строк = s/S где: s - число строк, выполненных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-14.jpg)
однажды.
S - общее количество выполнимых строк.
Характеристики:
Автоматизация 5
Достижимость 5
Постижимость 5
Изменяемость 5
Тщательность 1
Слайд 16Покрытие дуг
Покрытие дуг = d/D
где:
d - число дуг, выполненных по крайней мере
![Покрытие дуг Покрытие дуг = d/D где: d - число дуг, выполненных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-15.jpg)
однажды.
D - общее количество дуг.
Характеристика:
Автоматизация 5
Достижимость 5
Постижимость 5
Изменяемость 5
Тщательность 2
Слайд 17Покрытие линейных блоков
Под линейным блоком мы будем понимать непрерывную линейную последовательность строк:
А.
![Покрытие линейных блоков Под линейным блоком мы будем понимать непрерывную линейную последовательность](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-16.jpg)
которая начинается или в начале программы или в точке, к которой управление может перейти
B. который заканчивается или в конце программы или в точке, от которой управление может куда-либо перейти
C. и точку, к которой будет сделан переход после данной последовательности команд.
Покрытие линейных блоков = l/L
где:
l - число линейных блоков, выполненных по крайней мере однажды.
L - общее количество линейных блоков.
Характеристика:
Автоматизация 4
Достижимость 1
Постижимость 1
Изменяемость 2
Тщательность 3
Слайд 18Покрытие путей выполнения
Покрытие путей выполнения = p/P
где:
p - число путей, выполненных по
![Покрытие путей выполнения Покрытие путей выполнения = p/P где: p - число](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-17.jpg)
крайней мере однажды.
P - общее количество путей.
Покрытие путей исполнения рассматривает полные пути исполнения для всей программы. Например, если модуль содержит цикл, тогда существуют пути исполнения модуля для одной итерации, для двух итераций и так далее до n итераций цикла.
Только небольшое число путей исполнения в программе выполнимо.
Для того чтобы сделать охват путей исполнения достижимым, метрику следует ограничить покрытием выполнимых путей исполнения.
Слайд 19Покрытие выполнимых путей исполнения
Покрытие выполнимых путей исполнения = f/F
где:
f = число путей,
![Покрытие выполнимых путей исполнения Покрытие выполнимых путей исполнения = f/F где: f](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-18.jpg)
выполненных по крайней мере однажды.
F = общее количество выполнимых путей
Характеристика:
Автоматизация 1
Достижимость 1 (выполнимые 3)
Постижимость 2
Изменяемость 2 (выполнимые 1)
Тщательность 4
Слайд 20Покрытие условий
Покрытие условий = c/C
где:
c = число условий, выполненных по крайней мере
![Покрытие условий Покрытие условий = c/C где: c = число условий, выполненных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-19.jpg)
однажды.
C = общее количество условий.
Охват условий уязвим к набору флагов вне условного оператора. А так как использование булевых выражений с флагами для упрощения сложных условных операторов является распространенной практикой в программировании, тщательность покрытия условий оказывается не такой высокой, как могла бы быть.
Тщательность может быть улучшена, если включить все булевы выражений в охват условий.
Покрытие Булевых условий = e/E
где:
e = число значений булевых условий, выполненных по крайней мере однажды.
E = общее количество булевых условий
Характеристика:
Автоматизация 4
Достижимость 5
Постижимость 5
Изменяемость 5
Тщательность 2 (Булевые 3)
Слайд 21Покрытие условных операторов
Покрытие условных операторов = o/O
где:
o - число комбинаций условия, выполненных
![Покрытие условных операторов Покрытие условных операторов = o/O где: o - число](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-20.jpg)
по крайней мере однажды.
O - общее количество комбинаций условных операторов
Автоматизация 4
Достижимость 4
Постижимость 4
Изменяемость 5
Тщательность 3
Слайд 22Покрытие эффективности булевых операндов
Покрытие эффективности булевых операндов = b/B
где:
b = число булевых
![Покрытие эффективности булевых операндов Покрытие эффективности булевых операндов = b/B где: b](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/460569/slide-21.jpg)
операндов, независимо влиющих на результат выражения.
B = общее количество булевых операндов.
Характеристика:
Автоматизация 3
Достижимость 5
Постижимость 5
Изменяемость 5
Тщательность 4