Introduction To Software Architecture
Introduction To Software Architecture
Objectives
Introduce the relationship between software requirements and architecture Introduce the relationship between architectural styles and architecture Introduce the elements of software architecture Describe quality attributes trade-off analysis
Software Architecture
Software Architecture
Architects use various design strategies in software construction
To divide and conquer the complexities of a problem domain To solve the problem.
Software Architecture
Definitions
IEEE Std 1471
the system architecture as the fundamental organization of a system
embodied in its components, their relationships to each other, and to the environment the principles guiding its design and evolution.
Software Architecture
The input of software design
Software Requirements Specification (SRS)
is the result of requirement analysis
functional and non-functional requirements that must be met by the software system.
Software Architecture
The output of software design
Software Design Description (SDD).
Includes
the software architecture or high-level design the detailed design of the system.
=>The system is then implemented using programming language, debugging, testing, and maintenance.
Software Architecture
Sample outline of SDD based on IEEE Std 1016.
Design overview, purpose, scope Decomposition description
Module Data Process
Software Architecture
Software design stage can be split into 2 steps
Architectural design step
we describe
user accessible components the interconnections among them visible to stakeholders
Software Architecture
Software Architecture
Software Architecture
Architectural Styles
Abstracts the common properties of a family of similar designs. Also known as architecture pattern contains a set of
rules, constraints, and patterns of how to structure a system into a set of
elements and connectors.
Architectural Styles
Key components of an architectural style are:
Elements
that perform functions required by a system
Connectors
that enable communication, coordination, and cooperation among elements
Constraints
that define how elements can be integrated to form the system
Architectural Styles
In this course, we will discuss about:
Batch Sequence, Pipe & Filter, Process Control (Data Flow) Repository, Blackboard (Data Centered) Object-Oriented Layered, Virtual Machine, Main/Subroutine (Hierarchy) Multi-tier, Client/Server (Distributed) Event-Based, Buffered Messaging (Asynchronous Communication) MVC, PAC (Presentation-Abstraction-Control, ) (Interaction Oriented)
Quality Attributes
Are closely related to architectural styles.
Each architectural style
supports some quality features. has its advantages, disadvantages and potential risks.
Choosing the right architectural style to satisfy required quality attributes is also very important in addition to function satisfaction.
Are identified in the requirement analysis process. An architectural style encapsulates tradeoffs among many conflicting quality attributes.
Quality Attributes
List of sample quality attributes: Maintainability Performance Adaptability Reliability Modifiability Portability Interoperability Usability Scalability. Security Testability
Quality Attributes
Classifications
Implementation attributes
not observable at runtime
Runtime attributes
observable at runtime
Business attributes
Implementation attributes
Interoperability:
Refers to the universal accessibility and The ability to exchange data with internal components and the outside world. It needs loose dependency of infrastructure.
Testability:
Refers to the degree
to which the system facilitates the establishment of test cases.
Usually requires a complete set of documentation accompanied with system design and implementation.
Implementation attributes
Portability:
Refers to the level of independence of the system on software and hardware platforms.
Systems developed using high-level programming languages usually have good portability. Ex : Java
most Java programs need only be compiled once and can run everywhere.
Scalability:
Refers to the ability to adapt to an increase of user requests volume. It disfavors bottlenecks in system design.
Implementation attributes
Flexibility:
Refers to the ease of modification of a system to cater for different environment or problems
for which the system is originally not designed.
Ex : Systems developed using the component based architecture or the service-oriented architecture usually possess this property.
Runtime attributes
Availability:
Refers to the ability of a system to be available 24x7.
Availability can be achieved via replication and careful design to cope with failures of hardware, software, or the network
Security:
Refers to the ability to cope with malicious attacks from outside or inside of the system.
Security can be improved by installing firewalls and establishing authentication and authorization processes, and using SSL and encryption.
Runtime attributes
Performance
Refers to increasing efficiencies such as
Response time Throughput Generally resource utilization -> which most of the time conflict with each other.
Usability
Refers to the level of satisfaction from a human perspective in using the system.
Includes
completeness Correctness Compatibility more critically user friendliness.
Business attributes
Time to market
Refers to the time it takes from requirement analysis to the date product is released.
Cost
Refers to expense of building, maintaining, and operating the system.
Lifetime
Refers to the period of time that the product is alive before retirement.
Summary
Software architectural design has emerged as an important part of software development. A software architecture specification consists of software elements, connections and collaborations among the elements, and desired software quality attributes.
An architectural style is a set of rules, constraints, or patterns that guide how to structure a system into a set of elements and connectors, and how to govern overall structure design patterns of constituent element types and their runtime interaction. One specific architectural style may not be able to honor all quality attributes of the system.
There are always quality attribute tradeoffs between different styles. Hence how to keep a balance on quality attributes is an important design issue.
Try to promote high cohesion within each element and loose-coupling between elements. A highly coherent sub-system, component, or module performs sole function only. A similar concern is that each architectural style should show a very clear division between elements to guarantee loosecoupling.