Software architecture is not just a phase or an activity in the software development life cycle, but a discipline pervading all phases of development. We believe that integrating the discipline of architecture into the development process has the potential to increase the quality of software produced while reducing both the costs of development and the time to market. — Institute for Software Research, UCI
Design starts not only with UML diagrams, but much earlier when a system is initially being specified. Design decisions are adopted early on, even while requirements are being elicited, to achieve a system's desired goals.
An architecture captures the set of principal design decisions about a system. Principal design decisions might answer questions such as: Is the system centralized, decentralized, or distributed? In what ways will it be extensible? Will it be layered, secure? What styles will be used? What components and connectors will be used? etc. Capturing the early, principal design decisions increases the probability of high quality software while reducing both the costs of development and the time to market.
Which design decisions are principal depends on the concerns of the stakeholders involved and will likely vary from architecture to architecture. Such design decisions don't have to relate directly to the code, but may address other stakeholder concerns, such as including a Gantt chart for a stakeholder concerned with the development time line, or specifying architectural points of variability for product lines.
Capturing and reusing knowledge increases the probability of success. Reusing successful design decisions and processes aids an architect in achieving the desired goals. Making design decisions explicit reduces the probability that later changes will not violate them.
Find problems early in the life cycle to prevent costly repairs later on. The earlier in a products life cycle problems are found, the less expensive it will be to fix them.
Maintain consistency between the architecture and other artifacts. Architecture is more than a communication medium for people, it can be analyzed, instantiated, and dynamically modified during runtime. An architecture is ideally a part of the resulting system.
Use an extensible architecture description language (ADL). To allow an architect to capture diverse design issues, we created xADL, an extensible, XML-based architecture description language. xADL comes with schema capturing structural (components, connectors, links, topology), hierarchical (sub-architectures), and other common architectural concepts (PLA's, implementation mappings, etc.). Additional schema can been created to capture additional, principal design issues.
Utilize architecture styles. Architectural styles are reusable 'packages' of design decisions and constraints that are applied to induce chosen desirable qualities. They capture and reapply knowledge about architectures, often addressing many principal design issues. REST, PACE, and C2 are example of internet scale architecture styles.
Visualize architectures providing different views for different stakeholders. Archipelago, a part of ArchStudio 3.0, presents a modifiable, graphical depiction of an architecture, and is extensible to address future concerns.
Analyze and test architectures early and throughout the development cycle. TRON, a part of ArchStudio 3.0, analyzes an architecture description to identify problems and inconsistencies.
Maintain architecture to implementation mappings using a combination of analysis techniques, instantiating a system using the architecture description, and integrating development into the architecture environment. ArchEvol unifies architectural development with implementation by providing the means of maintaining a consistent linking between architectural and source code entities throughout software evolution.
Use an architecture-based environment that integrates different tools addressing different principal design issues. ArchStudio 3.0 is an architecture-based environment built in the C2 architectural style. Because of the C2 style, ArchStudio 3.0 is extensible to incorporate new architecture-based tools. EASEL focuses on exploration of alternative design decisions to support the process of architecting a system.
- ArchStudio 3.0 - Archipelago, TRON
- xADL 2.0 - Highly-extensible Architecture Description Language for Software Systems
- EASEL- Extensible Architecture Support Environment with Layers
- PACE reference architecture - used to implement decentralized auctioning, file-sharing, and common-operational picture prototypes
- ArchEvol - Architecture-based Software Evolution
- Ménage [LEGACY] - an environment for managing evolving product line architectures
- Our architecture-based publications
- A Comprehensive Approach for the Development of Modular Software Architecture Description Languages (TOSEM 2005)
- A Component and Message-based Architectural Style for GUI Software (ICSE 1995)
- Issues Encountered in Building a Flexible Software Development Environment (Software Development Environments 1992)