Существенной чертой индустриально организованных программных систем является их большая сложность. Фактически невозможно охватить все тонкости системы одним человеком. Сложность таких систем превышает возможности человеческого интеллекта.
Сложность ПО определяется четырьмя основными причинами:
1.Сложность проблемы.
А) Трудность понимания.
Б) Дополнительные требования. (Удобство,Цена,Надежность)
В) Несовместимость областей знания.
Г) Изменение требований.
Д) Эволюция системы.
2.Сложность управления процессом разработки.
А) Рост числа строк программного кода.
Б) Необходимость в коллективной разработке.
В) Необходимость в координации и согласовании работ отдельных исполнителей.
Г) Целостность основной идеи.
3.Сложность обеспечения гибкости программного продукта.
4.Сложность описания поведения отдельных подсистем.
А) Предсказуемость поведения аналоговых систем.
Б) Дискретность программных систем.
В) Большое количество переменных, их значений, адресов, стеков.
Г) Комбинаторный взрыв.
Д) Стремление к независимости подсистем.
Е) Тестирование.
3) Гибкость ПО – в программировании разработчик может сам себя обеспечивать всеми необходимыми элементами, относящихся к любому уровню абстракции. В отличии от остальной индустрии здесь очень мало стандартов, поэтому П-разработки остаются очень кропотливым делом.
4) Сложность описания поведения отдельных подсистем.
Внутри большой прикладной программы могут существовать 100 и 1000 переменных, полный список этих переменных, их текущее значение, регистров и стеков описывает состояние прикладной программы в каждый момент времени. Т.к. исполнение нашей программы осуществляется на цифровом компьютере, мы имеем систему с дискретными состояниями.
Дискретные системы имеют по определению конечное число возможных состояний, но в очень больших системах это число в соответствии с правилами комбинаторики достигает громадных значений, поэтому нужно стараться проектировать систему так, чтобы поведение одной части системы оказывало минимальное воздействие на поведение другой.
Пути ограничения сложности.
1) Декомпозиция – способ управления сложными системами был известен еще в древности (разделяй и властвуй).
При проектировании сложной П-системы необходимо составить ее из небольших подсистем, каждую из которых можно отладить независимо от другой.
-алгоритмическая декомпозиция используется структурное проектирование по методу сверху-вниз. Мы разделяем алгоритм, каждый из которых выполняет один из важных этапов общего процесса.
-О О Декомпозиция. В этом случае мир представлен списком автономных действующих лиц, которые взаимодействуют друг с другом, чтобы обеспечить поведение системы, соответствующей более высокому уровню.
-Алгоритмическая и О О Декомпозиция. П-систему можно разбивать как по алгоритмам, так и по объектам. Разделение по алгоритмам концентрирует вникание на порядке происходящих событий, а разделение по объектам придает особое значение факторам, либо вызывающим действие, либо являющихся объектами приложения этих действий. Мы не можем сконструировать систему одновременно двумя способами. Опыт показывает, что полезнее сначала применить объектный подход. Для ограничения сложности системы так же используются абстракции и иерархический подход.
