Сложность разработки программного обеспечения

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

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

Меры сложности Холстеда

В 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 / человеко-месяц