The Aspect-Oriented Software Architecture Design Portal

 Advanced Separation of Concerns at the Architecture Design Level
 Identifying and Specifying Early Aspects
 

Home
Software Architecture
AOSD
Architectural Aspects
Publications
Events
Related Links
AOSAD Project
E-Tutorial

Site Map
Search
Contact

Edited by:
Bedir Tekinerdogan

Definition Motivation Classification Synbad Escher

 

Why Software Architecture?

There are several reasons for applying software architecture design:

Faciliate communication between stakeholders
With the increasing complexity of current software systems the need for understanding has grown. Unlike lower-level design descriptions which are mainly used by the developers of the software systems, software architectures represent a common-high-level abstraction that needs to be understood not only by designers and maintainers but also by other stakeholders, such as project managers, customer, users etc. These stakeholders have different concerns that they would like to focus on. Modeling the system at a high-level using a common architecture language facilitates the communication with the different stakeholders and enables the analysis of the priorities. To the project managers the software architecture may be used to communicate the corresponding cost and schedule to build the software system. To the developers the software architecture may be used to provide a gross-level understanding of the software system so that they can grasp the responsibilities and interdependencies of the higher-level structures. To the users the software architecture may communicate the requirements that will be fulfilled by the software system. By abstracting away from much implementation detail, software architectures provide a common perspective of the whole system and as such support the communication between the different stakeholders.

Support effective work allocation and parallel development
A well-defined software architecture provides a structural decomposition of loosely coupled architectural components with clear responsibilities. The architecture design phase is generally followed by the analysis and system design phase. Since the architectural components are relatively independent from each other, the subsequent development work be partitioned rather easily and proceed in a parallel manner. Each partitioned component can be analyzed and developed by a team with specialized skills.

Provide a means for directing the subsequent development
The software architecture prescribes the structure of the software system and as such directs the subsequent phases of the software development process. Software architectures embody the first design decisions of the software system and put constraints on the design alternatives. This eases the job of the developers of the software systems who can faster analyze and select different design alternatives using the prescribed structure as a basis for their design decisions. 

Provide a means for evaluation
A software architecture may be used for evaluation before the system is actually built. Each software system is developed to fulfill particular requirements. The software architecture gives a clear insight in the requirements it can fulfill and the possible variations and constraints. In this way, it may be used to evaluate and prioritize the kind of requirements that need to be fulfilled. Software architectures can also serve in the evaluation of the desired changes after the system has been built.

Support quality factors
Software architecture support the quality factors such as reuse, adaptability and maintenance. Software architectures provide an abstract structure of the system and inherently anticipate different kinds of changes that will occur in the system. This will minimize the cost for evolution and maintenance because the maintainers will be directed to allowable changes.
    Software architectures provide the basis for understanding, development and maintenance, and evaluation and maintenance of the system in cost-effective ways. Since it abstracts away from many details it serves as a framework for a families of systems remaining relatively constant over time. This provides the opportunity to reuse the architecture for producing many similar systems in a rather predictable way.
    Architecture development partitions the system among relatively independent components that are generally developed separately. Besides of reusing the complete software architecture, this allows for reusing separate components to develop new architectures.

 
 
 
Facilitate Communication
 
 
 
 
 
 
 
Work Allocation
 
 
 
Directing Development
 
 
 
Means for Evaluation
 
 
 
Support Quality Factors