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.