Рекомендация: Уменьшение сложности с помощью абстракций
Взаимосвязи
Основное описание

Одной из неотъемлемых характеристик разработки программного обеспечения является сложность. Сложность может проявляться в виде необходимости соответствия сложным требованиям, в виде использования сложных технологий, в виде сложных процессов внутри группы разработки. Повышение уровня абстракции помогает управлять этой сложностью и измерять продвижение вперед вне зависимости от сложности задачи.

Ниже приведены предложения по нескольким стратегическим подходам, помогающим уменьшить сложность с помощью абстракции.

Использовать шаблоны (patterns)

Шаблоны помогают использовать проверенные способы решения часто встречающихся проблем. С помощью шаблонов, можно применять опыт ведущих специалистов и не изобретать велосипед снова и снова. Использование шаблонов является центральным аспектом "архитектурно-центрического" подхода к разработке, т.к. это помогает уменьшить новизну и специфичность решения, тем самым увеличивая качество.

Дополнительную информацию см. в Концепция: Pattern.

Проектируйте архитектуру с использованием компонентов и сервисов

Эта стратегия помогает управлять сложностью программного обеспечения с помощью деления системы на множество слабо зависимых (coupled) друг от друга, но сильно связанных (cohesive) подсистем. Такой подход позволяет, во-первых, организовать команду вокруг набора небольших управляемых целей, а во-вторых, подменять части системы без отслеживания взаимосвязей в масштабах всей системы. Публикация служб делает функциональность системы более понятной и, таким образом, поощряет повторное использование. Концентрация на службах позволяет понять, что система делает с технической точки зрения, без вникания в детали технической реализации.

Дополнительную информацию см. в Концепция: Component.

Поощряйте повтоное использование

Интеграция существующего программного обеспечения в общую архитектуру помогает уменьшить стоимость и увеличить качество путем повторного использования уже работающего ПО. Также это помогает уменьшить объем работ по сопровождению за счет уменьшения общего количества ПО. Не смотря на сложность управления, проект может получить большие преимущества от хорошо реализованной стратегии повторного использования.

Моделируйте ключевые особенности

Моделирование помогает повысить уровень абстракции, так как вы упрощаете сложные идеи и представляете их визуально, как иллюстрациии. Хорошие модели могут нести информацию, помогающую команде представлять, описывать, конструировать и документировать программное обеспечение. Унифицированный язык моделирования (Unified Modelling Language, UML) предоставляет подход к моделированию, ставший де-факто отраслевым стандартом.

При применении этой стратегии можно использовать несколько подходов:

  • Определение ключевых направлений моделирования: Концентрация на моделировании наиболее важных сущностей. Очень немного проектов (если такие есть) могут похвастаться положительным эффектом, полученным от моделирования всей системы в подробностях. Всегда необходимо добиваться понимания, почему вы моделируете что-либо, и кто от этого выиграет.
  • Описывайте ключевые особенности архитектуры: Даже если вы захотите моделировать только небольшую часть вашего проекта, часто бывает полезно создать несколько диаграмм, описывающих ключевые особенности архитектуры системы. Эта "укрупненная картина" поможет остальной команде понять общие подходы и разработать связную систему.
  • Рисуйте дизайн: Не все модели требуется детально описывать и представлять с помощью программных средств моделирования. Часто вполне приемлемым (если не желательным) для объяснения архитектуры команде оказывается изображение простых диаграмм на листе бумаги или на доске. Чтобы сохранить нарисованные диаграммы, можно воспользоваться цифровым фотоаппаратом или электронной доской. Для многих небольших проектов часто именно это и нужно. Дополнительную информацию см на http://www.agilemodeling.com/.
  • При необходимости используйте программные инструменты для моделирования: Если участники команды в течение проекта изменяют модели, обмениваются паттернами и структурой, отлаживают дизайн, описывают поведение и т.п., то работать со статическими фотографиями или листами бумаги становится сложно. Тогда команда может попробовать сохранять дизайн с помощью специального программног инструментация. Помимо предоставления команде информации о дизайне, другим положительным моментом от использования таких инструментов является возможность генерирования структуры кода из моделей. Многие средства разработки позволяют рассматривать код как модель, облегчая понимание динамических и статических аспектов исходных текстов программ.
  • Используйте стандартные обозначения: При работе в команде важно, чтобы другие могли понимать ваши диаграммы без дополнительных объяснений. Использование стандартных обозначений позволяет быстро и однозначно понимать ваши диаграммы. Одним из примеров широко распространенной системы стандартных обозначений является UML.
Дополнительные сведения