Блочно-иерархический подход к созданию сложных систем (СС)
Проблемы разработки сложных программных систем (ПС)
Тема 2
Большинство современных ПС объективно очень сложны. Эта сложность обусловлена многими причинами: главной, из которых является логическая сложность решаемых ими задач. Дополнительными факторами, увеличивающими сложность разработки ПС, являются:
- сложность определения требований к ПС;
- отсутствие удовлетворительных средств формального описания поведения дискретных систем с большим числом состояний при недетерминированной последовательности входных воздействий;
- коллективная разработка;
- необходимость увеличения степени повторяемости кодов.
Сложность определения требований к ПС обусловливается двумя факторами. Во-первых, при определении требований необходимо учесть большое количество различных факторов. Во-вторых, разработчики ПС не являются специалистами в автоматизируемых предметных областях, а специалисты в предметной области, как правило, не могут сформулировать проблему в нужном ракурсе.
Отсутствие удовлетворительных средств формального описания поведения дискретных систем. В процессе создания ПС используются языки сравнительно низкого уровня. Это приводит к ранней детализации операций в процессе создания ПО и увеличивает объем описаний. Средств, позволяющих детально описывать поведение сложных дискретных систем на более высоком уровне, чем универсальный язык программирования, не существует
Коллективная разработка: ее необходимость вызвана большим объемом проектов. Чем больше коллектив разработчиков, тем сложнее организовать процесс работы.
Необходимость увеличения степени повторяемости кодов. Для увеличения производительности труда компании стремятся к созданию библиотек компонентов, которые можно было бы использовать в дальнейших разработках. Но тогда компоненты приходится делать более универсальными, что в конечном итоге усложняет разработку.
Вместе взятые, перечисленные факторы существенно усложняют процесс разработки ПО и ПС.
Практика показывает, что подавляющее большинство СС (в природе и в технике) имеет иерархическую внутреннюю структуру. Это связано с тем, что обычно связи элементов СС различны как по типу, так и по силе, что и позволяет рассматривать эти системы как некоторую совокупность взаимозависимых подсистем. Внутренние связи элементов таких подсистем сильнее, чем связи между подсистемами. Примеры с ПК (процессор, память, внешние устройства) и Солнечной системой (солнце и планеты).
В свою очередь, аналогично можно каждую подсистему разделить на подсистемы и т.д., до самого нижнего «элементарного» уровня. На элементарном уровне система состоит из немногих типов подсистем, по-разному скомбинированных и организованных. Такие иерархии называются «целое-часть».
Поведение системы в целом сложнее поведения ее отдельных частей, причем особенности системы обусловлены отношениями между ее частями, а не собственно частями.
Существует еще один вид иерархии – иерархия «простое-сложное» или иерархия развития (усложнения) систем в процессе эволюции. В этой иерархии любая функциональная система является результатом развития более простой системы. Именно такая иерархия реализуется механизмом наследования ООП.
Поскольку ПС в значительной степени являются отражением природных и технических систем, они обладают описанными выше свойствами, т.е. являются иерархическими. Блочно-иерархический подход к исследованию или созданию ПС предполагает сначала создавать части (блоки, модули) ПС, а затем собирать из них саму ПС.
Процесс разбиения сложного объекта на сравнительно независимые части называется декомпозицией. При декомпозиции учитывают, что связи между частями должны быть слабее, чем связи элементов внутри частей. Кроме того, чтобы из частей можно было собрать разрабатываемый объект, в процессе декомпозиции необходимо определить все виды связей частей между собой.
Пошаговая детализация – метод разработки очень сложных систем, при котором процесс декомпозиции выполняется многократно.
Чтобы увеличить степень повторяемости кодов и, соответственно, снизить стоимость разработки, при декомпозиции стараются выделить схожие блоки, которые можно разрабатывать на общей основе.
Результат декомпозиции обычно представляют в виде схемы иерархии, на нижнем уровне которой располагают сравнительно простые блоки, а на верхнем – объект, подлежащий разработке. На каждом иерархическом уровне описание блоков выполняют с определенной степенью детализации, абстрагируясь от несущественных деталей. Следовательно, для каждого уровня используют свои формы документации и свои модели, отражающие сущность процессов, выполняемых каждым блоком. Блоки нижнего уровня должны быть специфицированы детально. Для объекта же в целом удается сформулировать лишь самые общие требования. Т.е. чем больше блок, тем абстрактнее должно быть его описание.
При соблюдении таких принципов разработчик может принимать оптимальные решения на каждом этапе, что называют локальной оптимизацией разработки.
Итак, в основе блочно-иерархического подхода лежат декомпозиция и иерархическое упорядочение. Важную роль играют также следующие принципы:
- непротиворечивость (контроль согласованности элементов между собой):
- полнота (контроль присутствия лишних элементов);
- формализация (строгость методического подхода);
- повторяемость (необходимость выделения одинаковых блоков для удешевления и ускорения разработки);
- локальная оптимизация (оптимизация в пределах уровня иерархии).
Совокупность языков моделей, постановок задач, методов описаний некоторого иерархического уровня принято называть уровнем проектирования.
Каждый объект в процессе проектирования приходится рассматривать с нескольких сторон. Различные взгляды на объект проектирования называют аспектами проектирования.