Software Architecture
Software Architecture
SOFTWARE Architecture
2023/2024 Session
● Every system has its own architecture and they are not identical.
● Discuss
●
In the beginning of Software Development
Versus
Today’s Software Development
● .
● Question: Software development has evolved drastically such that our society highly
depends on software. Despite this advancement, is there a single software that can be used
in all sectors?
● In the beginning software, software was small both physically and in scope. e.g FORTRAN a
language for scientific computing, COBOL, BASIC, PASCAL
● As software started to grow up;
● Languages like C introduce file linking -Enables organization of code and reuse of code.
● SIMULA-67, Smalltalk introduce objects -Enables organization of code into focused units that
work with other objects to perform larger tasks.
● And Today – We have more object-oriented programming languages like Java, Python, etc
● Frameworks, Containers, etc
● All that above have different software architectures on which they were constructed
- Our Society Highly Depends on Software
● Software development has been the fastest-growing technology in human history. Despite the
advancement, there is not single software that can be used in all sectors.
● Why?
● Answer: Software requirements varies from one system to another, therefore, there is no
architecture that encompasses the entire spectrum of software design and development
possibilities, hence no single software that can function in all sectors for different purposes.
What is Software Architecture?
● The word “architecture” means many different things to
many different people, and there are many different
definitions published on the Internet.
● If you look at most software systems, they’re actually
composed of multiple deployable units (e.g. applications
or datastores), each of which might be built using different
technologies.
What is Software Architecture?
● Software architecture (SA) defines (describes):
● The components of the software system and how the components use each other’s
functionality and data.
● I.e The major components of SUT and how well these components communicate
● A software architecture is a creative activity that describes the various software
components and their relationships based on customers’ requirements.
● An example: client-server Architecture
● Servers provide some kind of service; clients request and consume services
applications are located with clients
● E.g. running on PCs and workstations;
For example, some architecture pattern naturally lend themselves toward highly scalable applications, whereas
other architecture naturally lend themselves toward applications that are highly agile.
Though systematic way, knowing the design principle, characteristics, strengths, and weaknesses of each
architecture style is necessary in order to choose the one that meets the specific business needs and goals.
Architecture styles are templates for concrete software architectures. They specific the system-wide structure
properties of an application, and have an impact on the architecture level of its sub system. To choose the right
architectural style, architect have to rely on business goals and quality attributes.
The selection of an architectural style is therefore a fundamental design decision when developing a software
system.
The easiest way to describe the methodology of your research, is through the used of a well structured
architecture.
Why Architectural-based development
a. Choose the architectural drivers from the set of concrete quality scenarios and functional requirements. This step determines what is important for this
decomposition.
b. Choose an architectural style/pattern that satisfies the drivers. Create (or select) the style/pattern based on the tactics that can be used to achieve the drivers.
Identify child modules required to implement the tactics.
c. Instantiate modules and allocate functionality from use cases, and represent the results using multiple views.
d. Define interfaces of the child modules. The decomposition provides modules and constraints on the types of module interactions. Document this information in
the interface document of each module.
e. Verify and refine the use cases and quality scenarios and make them constraints for the child modules. This step verifies that nothing important was forgotten
and prepares the child modules for further decomposition or implementation.
3. Repeat the steps 2 and 3 for every module that needs further decomposition.
Architectural Views
● Less Scalability
● Less reusability
● Tight coupling between components
● Maintenance cost is high
● Slow deployment
Characteristics of a Microservice Architecture
● Highly Scalable
● Highly maintainable
● Rapid deployment
● Reusability of services
● Fault tolerant in case one service goes down, the other
service keep working.
The Microservice Way
● Speed and safety are the two key aspect of the
microservices.
● These two keys are affected with the every single decision
made about the software.
● The microservices way is about finding the balance
between these two key aspect at scale: