Сложность разработки программного обеспечения
Термин «сложность» означает состояние событий или вещей, которые имеют множество взаимосвязанных звеньев и очень сложные структуры. В программировании программного обеспечения, по мере того, как проектируется программное обеспечение, количество элементов и их взаимосвязей постепенно становится огромным, что становится слишком трудно понять сразу.
Сложность разработки программного обеспечения трудно оценить без использования метрик и мер сложности. Давайте посмотрим на три важных показателя сложности программного обеспечения.
Меры сложности Холстеда
В 1977 году Морис Ховард Холстед представил метрики для измерения сложности программного обеспечения. Показатели Холстеда зависят от фактической реализации программы и ее показателей, которые статическим образом вычисляются непосредственно из операторов и операндов из исходного кода. Это позволяет оценить время тестирования, словарный запас, размер, сложность, ошибки и усилия для исходного кода C / C ++ / Java.
По словам Холстеда, «компьютерная программа - это реализация алгоритма, который считается набором токенов, которые можно классифицировать как операторы или операнды». Метрики Холстеда рассматривают программу как последовательность операторов и связанных с ними операндов.
Он определяет различные индикаторы для проверки сложности модуля.
Параметр | Имея в виду |
---|---|
n1 | Количество уникальных операторов |
n2 | Количество уникальных операндов |
N1 | Количество общих вхождений операторов |
N2 | Общее количество вхождений операндов |
Когда мы выбираем исходный файл для просмотра сведений о его сложности в Metric Viewer, в Metric Report будет виден следующий результат:
Метрическая | Имея в виду | Математическое представление |
---|---|---|
п | Запас слов | п1 + п2 |
N | Размер | N1 + N2 |
V | Объем | Длина * Log2 Словарь |
D | Сложность | (n1 / 2) * (N1 / n2) |
E | Усилия | Сложность * Объем |
B | Ошибки | Объем / 3000 |
Т | Время тестирования | Время = Усилия / S, где S = 18 секунд. |
Цикломатические меры сложности
Каждая программа включает в себя операторы, которые нужно выполнить для выполнения некоторых задач, и другие операторы принятия решений, которые определяют, какие операторы необходимо выполнить. Эти конструкции принятия решений изменяют ход программы.
Если мы сравним две программы одинакового размера, то программа с большим количеством операторов принятия решений будет более сложной, поскольку управление программой часто переключается.
МакКейб в 1976 году предложил Cyclomatic Complexity Measure для количественной оценки сложности данного программного обеспечения. Это модель на основе графов, основанная на конструкциях программы для принятия решений, таких как операторы if-else, do-while, repeat-until, switch-case и goto.
Процесс построения графика управления потоком:
- Разбейте программу на более мелкие блоки, разграниченные конструкциями принятия решений.
- Создайте узлы, представляющие каждый из этих узлов.
- Подключите узлы следующим образом:
Если управление может перейти от блока i к блоку j
Нарисуйте дугу
От узла выхода к узлу входа
Нарисуйте дугу.
Для расчета цикломатической сложности программного модуля мы используем формулу -
V(G) = e – n + 2
Where
e is total number of edges
n is total number of nodes
Цикломатическая сложность указанного выше модуля равна
e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
= 4
По словам П. Йоргенсена, цикломатическая сложность модуля не должна превышать 10.
Функциональная точка
Он широко используется для измерения размера программного обеспечения. Function Point концентрируется на функциональности, предоставляемой системой. Возможности и функциональные возможности системы используются для измерения сложности программного обеспечения.
Функциональная точка рассчитана на пять параметров: внешний ввод, внешний вывод, логические внутренние файлы, файлы внешнего интерфейса и внешний запрос. Чтобы учесть сложность программного обеспечения, каждый параметр делится на простые, средние или сложные.
Посмотрим параметры функциональной точки:
Внешний вход
Каждый уникальный вход в систему извне рассматривается как внешний вход. Измеряется уникальность ввода, так как никакие два ввода не должны иметь одинаковый формат. Эти входные данные могут быть данными или параметрами управления.
Simple - если количество входных данных мало и влияет на меньшее количество внутренних файлов
Complex - если количество входных данных велико и влияет на большее количество внутренних файлов
Average - промежуточное между простым и сложным.
Внешний выход
В эту категорию засчитываются все типы вывода, предоставляемые системой. Вывод считается уникальным, если их формат вывода и / или обработка уникальны.
Simple - если количество выходов мало
Complex - если количество выходов велико
Average - между простым и сложным.
Логические внутренние файлы
Каждая программная система поддерживает внутренние файлы для поддержания своей функциональной информации и правильного функционирования. Эти файлы содержат логические данные системы. Эти логические данные могут содержать как функциональные данные, так и данные управления.
Simple - если количество типов записей мало
Complex - если количество типов записей велико
Average - между простым и сложным.
Файлы внешнего интерфейса
Программной системе может потребоваться поделиться своими файлами с каким-либо внешним программным обеспечением или может потребоваться передать файл для обработки или в качестве параметра какой-либо функции. Все эти файлы считаются файлами внешнего интерфейса.
Simple - если количество типов записей в общем файле мало
Complex - если количество типов записей в общем файле велико
Average - между простым и сложным.
Внешний запрос
Запрос - это комбинация ввода и вывода, когда пользователь отправляет некоторые данные для запроса в качестве ввода, а система отвечает пользователю обработанным выводом запроса. Сложность запроса больше, чем внешний ввод и внешний вывод. Запрос считается уникальным, если его ввод и вывод уникальны с точки зрения формата и данных.
Simple - если запрос требует низкой обработки и дает небольшой объем выходных данных
Complex - если запрос требует высокой обработки и дает большой объем выходных данных
Average - между простым и сложным.
Каждому из этих параметров в системе присваивается вес в соответствии с их классом и сложностью. В таблице ниже указан вес, присвоенный каждому параметру:
Параметр | просто | В среднем | Сложный |
---|---|---|---|
Входы | 3 | 4 | 6 |
Выходы | 4 | 5 | 7 |
Запрос | 3 | 4 | 6 |
Файлы | 7 | 10 | 15 |
Интерфейсы | 5 | 7 | 10 |
В приведенной выше таблице приведены исходные функциональные баллы. Эти функциональные точки настраиваются в соответствии со сложностью окружающей среды. Система описывается четырнадцатью различными характеристиками:
- Передача данных
- Распределенная обработка
- Цели производительности
- Загрузка конфигурации работы
- Скорость транзакции
- Ввод данных онлайн,
- Эффективность конечного пользователя
- Онлайн-обновление
- Сложная логика обработки
- Re-usability
- Легкость установки
- Простота эксплуатации
- Несколько сайтов
- Желание способствовать изменениям
Затем эти характеристические коэффициенты оцениваются от 0 до 5, как указано ниже:
- Нет влияния
- Incidental
- Moderate
- Average
- Significant
- Essential
Затем все оценки суммируются как N. Значение N находится в диапазоне от 0 до 70 (14 типов характеристик x 5 типов оценок). Он используется для расчета поправочных коэффициентов сложности (CAF) по следующим формулам:
CAF = 0.65 + 0.01N
Потом,
Delivered Function Points (FP)= CAF x Raw FP
Затем этот FP можно использовать в различных показателях, таких как:
Cost = $ / FP
Quality = Ошибки / FP
Productivity = FP / человеко-месяц