Введение
Языки описания архитектуры (ADL) применяются в различных областях: системной инженерии, разработке программного обеспечения, а также моделировании и инженерии предприятий. В системной инженерии язык описания архитектуры используется как язык и/или концептуальная модель для описания и представления архитектуры системы. В разработке программного обеспечения язык описания архитектуры используется как компьютерный язык для создания описания архитектуры программного обеспечения. В случае так называемой технической архитектуры, архитектура должна быть донесена до разработчиков программного обеспечения, а функциональная архитектура – до различных заинтересованных сторон и пользователей. Среди разработанных ADL можно выделить: Acme (разработанный CMU), AADL (стандартизированный SAE), C2 (разработанный UCI), SBC ADL (разработанный Национальным университетом Сунь Ятсен), Darwin (разработанный Имперским колледжем Лондона) и Wright (разработанный CMU).
Обзор
В документе ISO/IEC/IEEE 42010 «Системы и программная инженерия — Описание архитектуры» язык описания архитектуры определяется как «любая форма выражения, используемая в описаниях архитектуры», и устанавливаются минимальные требования к ЯОА (ADL). Сообщество специалистов по моделированию и инженерии предприятий также разработало языки описания архитектуры, ориентированные на уровень предприятия. Примеры включают ArchiMate (в настоящее время стандарт The Open Group), DEMO и ABACUS (разработанный Сиднейским технологическим университетом). Эти языки не обязательно описывают компоненты программного обеспечения и т. п. Однако большинство из них рассматривают архитектуру приложения как архитектуру, которая передается разработчикам программного обеспечения. Большая часть представленного ниже материала рассматривает преимущественно точку зрения сообщества разработчиков программного обеспечения. Стандартизированная нотация (ЯОА/ADL) для представления архитектур способствует взаимопониманию, реализации ранних проектных решений и созданию переносимой абстракции системы. В прошлом архитектуры часто представлялись в виде схем, состоящих из блоков и линий, с пояснениями, касающимися природы компонентов, свойств, семантики связей и общего поведения системы. ЯОА являются результатом лингвистического подхода к формальному представлению архитектур и, как таковые, решают присущие ему недостатки. Кроме того, развитые ЯОА позволяют проводить ранний анализ и проверку реализуемости архитектурных проектных решений.
История
ADL классифицируются на три основные категории: неформальные схемы «блок-схема», формальные языки описания архитектуры и нотации на основе UML (Unified Modeling Language). Схемы «блок-схема» долгое время были наиболее распространенным способом описания СА. Хотя они и предоставляли полезную документацию, уровень неформальности ограничивал применимость описания архитектуры. Требовался более строгий подход к описанию СА. Как отмечают Аллен и Гарлан (1997), «хотя эти [схемы «блок-схема»] описания могут предоставлять полезную документацию, текущий уровень неформальности ограничивает их полезность. Поскольку часто неясно, что подразумевается под такими архитектурными описаниями, может оказаться невозможным проанализировать архитектуру на предмет согласованности или определить ее нетривиальные свойства. Более того, нет способа проверить, соответствует ли реализация системы ее архитектурному проекту». Схожий вывод делают Перри и Вольф (1992), указывая, что: «Помимо предоставления четкой и точной документации, основная цель спецификаций – обеспечить автоматический анализ документов и выявить различные проблемы, которые в противном случае остались бы незамеченными». С тех пор ведется ряд исследований, посвященных формальным языкам для описания СА. Было предложено несколько десятков формальных ADL, каждый из которых характеризуется различными концептуальными архитектурными элементами, синтаксисом или семантикой, ориентирован на конкретную область применения или подходит только для определенных методов анализа. Например, специализированные ADL для конкретных областей были представлены для работы со встроенными и системами реального времени (такими как AADL, EAST ADL и EADL), приложениями управления замкнутым циклом (DiaSpec), архитектурами семейств продуктов (Koala) и динамическими системами (Π ADL). ADL, ориентированные на анализ, были предложены для решения задач обеспечения доступности, надежности, безопасности, потребления ресурсов, качества данных и анализа производительности в реальном времени (AADL, поведенческий анализ (Fractal) и анализ доверия (TADL)). Однако эти усилия не получили ожидаемого распространения в промышленной практике. Некоторые причины отсутствия внедрения в промышленности были проанализированы Вудсом и Хиллиардом, Пандеем, Клементсом и другими: формальные ADL редко интегрируются в жизненный цикл разработки программного обеспечения, они редко поддерживаются зрелыми инструментами, недостаточно документированы, ориентированы на очень специфические потребности и не предусматривают возможности расширения для добавления новых функций. В качестве способа преодоления некоторых из этих ограничений UML был предложен в качестве возможного преемника существующих ADL. Было представлено множество предложений по использованию или расширению UML для более точного моделирования программных архитектур. Исследование 2013 года показало, что специалисты в целом удовлетворены возможностями проектирования используемых ими ADL, но у них есть несколько серьезных опасений: им не хватает аналитических функций и возможности определения дополнительных функциональных свойств; те, которые используются на практике, в основном происходят из промышленной разработки, а не из академических исследований; им требуется большая формальность и лучшая удобство использования.
informality limited the usefulness of the architecture description. A more rigorous way for describing SAs was required. Quoting Allen and Garlan (1997), "while these [box and line] descriptions may provide useful documentation, the current level of informality limits their usefulness. Since it is generally imprecise what is meant by such architectural descriptions, it may be impossible to analyze an architecture for consistency or determine non trivial properties of it. Moreover, there is no way to check that a system implementation is faithful to its architectural design." A similar conclusion is drawn in Perry and Wolf (1992), which reports that: "Aside from providing clear and precise documentation, the primary purpose of specifications is to provide automated analysis of the documents and to expose various kinds of problems that would otherwise go undetected." Since then, a thread of research on formal languages for SA description has been carried out. Tens of formal ADLs have been proposed, each characterized by different conceptual architectural elements, different syntax or semantics, focusing on a specific operational domain, or only suitable for different analysis techniques. For example, domain specific ADLs have been presented to deal with embedded and real time systems (such as AADL, EAST ADL, and EADL), control loop applications (DiaSpec), product line architectures (Koala), and dynamic systems (Π ADL)). Analysis specific ADLs have been proposed to deal with availability, reliability, security, resource consumption, data quality and real time performance analysis (AADL, behavioral analysis (Fractal)), and trustworthiness analysis (TADL). However, these efforts have not seen the desired adoption by industrial practice. Some reasons for this lack of industry adoption have been analyzed by Woods and Hilliard, Pandey, Clements, and others: formal ADLs have been rarely integrated in the software life cycle, they are seldom supported by mature tools, scarcely documented, focusing on very specific needs, and leaving no space for extensions enabling the addition of new features. As a way to overcome some of those limitations, UML has been indicated as a possible successor of existing ADLs. Many proposals have been presented to use or extend the UML to more properly model software architectures. A 2013 study found that practitioners were generally satisfied with the design capabilities of the ADLS they used, but had several major concerns with them: they lacked analysis features and the ability to define extra functional properties; those used in practice mostly originated from industrial development rather than academic research; they needed more formality and better usability.
Общие понятия архитектуры
Сообщество ADL в целом соглашается, что архитектура программного обеспечения представляет собой набор компонентов и связи между ними. Однако существуют различные виды архитектур, такие как:
Архитектура против дизайна
Архитектура, в контексте программных систем, грубо подразделяется на категории, в первую очередь архитектура программного обеспечения, сетевая архитектура и архитектура систем. В каждой из этих категорий существует ощутимое, но размытое различие между архитектурой и проектированием. Чтобы сделать это различие максимально универсальным и ясным, лучше рассматривать проектирование как существительное, а не как глагол, чтобы сравнение велось между двумя существительными. Проектирование – это абстракция и спецификация шаблонов и элементов функциональности, которые были или будут реализованы. Архитектура находится на более высоком уровне как абстракции, так и детализации. Следовательно, архитектура также более топологична по своей природе, чем проектирование, поскольку она определяет, где взаимодействуют основные компоненты и как они связаны друг с другом. Архитектура фокусируется на разделении основных областей функциональности на компоненты верхнего уровня, на их физическом или виртуальном размещении, на том, какие готовые компоненты могут быть эффективно использованы, в целом, на интерфейсах, которые будет предоставлять каждый компонент, на протоколах, которые будут использоваться для взаимодействия между ними, а также на практиках и высокоуровневых шаблонах, которые наилучшим образом соответствуют требованиям к расширяемости, сопровождаемости, надежности, долговечности, масштабируемости и другим нефункциональным характеристикам. Проектирование – это детализация этих решений и более конкретное уточнение того, как функциональные требования будут реализованы посредством делегирования частей функциональности более детальным компонентам и как эти меньшие компоненты будут организованы внутри более крупных. Часто часть архитектурного проектирования выполняется на этапе концептуализации приложения, системы или сети и может быть отражена в нефункциональных разделах документации по требованиям. В соответствии с общепринятыми нормами, проектирование не указывается в требованиях, а, скорее, вытекает из них. Процесс определения архитектуры может включать в себя эвристические методы, приобретенные архитектором или архитектурной командой благодаря опыту в данной области. Как и в случае с проектированием, архитектура часто развивается в ходе серии итераций, и так же, как целесообразность высокоуровневого проектирования часто проверяется при низкоуровневом проектировании и реализации, целесообразность архитектуры проверяется при спецификации высокоуровневого проектирования. В обоих случаях, если целесообразность спецификации подвергается сомнению в процессе детализации, может потребоваться новая итерация либо архитектуры, либо проектирования, в зависимости от ситуации. В итоге, основные различия между архитектурой и проектированием заключаются в степени детализации и абстракции, а также (как следствие) во временной последовательности. (Архитектура обычно предшествует проектированию, хотя перекрытия и циклические итерации – обычное явление.)