SADP
SADP
EnvisioningArchitecture:TheArchitectureBusinessCycle,WhatisSoftwareArchitecture,Architectu
ralpatterns,referencemodels,reference architectures,architectural structures and views
A Software Architecture is the result of Technical ,Business and Social influences .the following
diagram illustrate the ABC
1.Stakeholders:
The persons or organizations who are going to use after development of this product.
Simply we can remember Stakeholders are Users
Stakeholdres:
a)The customer
b)The end users
c)The developers
d)The project manager
e)The maintainers
2.Devoloping organization:
The organization who is going to develop this particular product or services is consider as developing
organization
Reference model:
A reference model is a division of functionality together with data flow between the pieces.
A reference model is a standard decomposition of a known problem into parts that cooperatively
solve the problem.
Reference Architecture:
Reference architecture is a reference model mapped onto software elements (that cooperatively
implement the functionality defined in the reference model) and the data flows between them.
Where as a Reference model divides the functionality, reference architecture is the mapping of
that functionality onto system decomposition.
The relationship among these design elements is shown in Figure
3.Architectural structures and views
View: A view is coherent set of architectural elements, as written by and read by system stakeholders
1.moduler structures:
3.Allocation structures:
.
Figure5:Common software architecture structures
Views:
View is a coherent set of architectural elements, are write and read by corresponding stakeholders
Views are divided into following types:
1.Moduler view
2.Component and Connector view
3.Allocation view
Moduler view:
A module is an implementation unit that provides a coherent set of responsibilities.
Module views are decomposition, uses, and layers. Every module has a collection of properties assigned
to it.
Module views contains the following properties.
Name:
A module’s name is , of course, the primary means to refer to it.name is used to identify module
Responsibilities:
Each and every module have their responsibilities depend on the module
Visibility of interface: when a module has sub modules some interfaces are public, some may be private
and some may be protected
Implementation information:
modules are units of implementation
mapping to source code units:
this identifies the files that constitute the implementation of a module
test information:
the modules test plan, test cases and test data
implementation constraints:
in many cases the architect will have an implementation strategy in mind for a module
Revision history:
Knowing the history of a module including authors and particular changes may help to perform
maintenance activities
Component and connector views:
component and connector views shows elements that have some run time presence such as processes,
objects, clients, servers and data stores
c &c views contains the following properties
Reliability:
This property might be used to help determine overall system availability
Performance:
This property is used with others to determine system wide properties such as response times
Resource requirements:
This property is used to determine if proposed hardware configuration will be required
Functionality:
This property can be used to reason about overall computation performed by a system.
Security:
This property can be used to be determined system security vulnerabilities.
Concurrency:
This property can help to analyse the performance of concurrent components and identify possible
deadlocks.
Modifiability:
This property can be defined to extend the functionality of a component.
Tier:
This property can define the build and deployment procedures, as well as platform requirements for each
tier.
Allocation views:
Allocations views describe the mapping of a software units to elements of an environment in which the
software is developed. Allocation views consist of software elements and environmental elements.
5.Software Architecture Quality attributes
Quality Attribute:
i)Achieving quality attributes must be considered throughout design, implementation, and deployment.
ii)No quality attribute is entirely dependent on design, nor is it entirely dependent on implementation or
deployment.
iii)Satisfactory results are a matter of getting the big picture (architecture) as well as the details
(implementation) correct.
Quality attributes:
1)maintainability
2)Usability
3)performance
4)security
5)testability
6)availability
1.Maintainability:
This quality attribute defines the degree of efficiency to which a software solution can be modified for its
improvement or adaptation to the evolving requirements or changes in the environment.
Take a look at the following sub-characteristics of this quality attribute:
i)Reusability defines the degree to which a system component or an asset can be utilized on
several systems or in building other components or assets.
ii)Modifiability means the degree to which a software system can be effectively modified without
causing defects or bugs or decreasing the quality of the existing system.
iii)Testability shows the degree to which test criteria can be used for the software system, and
tests can be performed to determine whether these criteria have been satisfied.
2.Usability
This software quality attribute helps define the ease with which users can perform a specific task
on the system (registering an account or adding an item to the shopping cart). What issues can be
seen as usability problems? These may include inconsistency, too complicated signup process,
poor error handling, or unclear navigation, to name a few.
This software characteristic consists of the following sub-characteristics:
Operability denotes the degree to which a software system or a digital product has qualities that
simplify its operation and control.
User error protection is the degree to which a software system or its components protect users
from committing errors.
User interface aesthetics means the degree to which users get pleasing and satisfying interaction
with a software solution or digital product.
3.Performance efficiency
This software quality attribute shows a software product’s performance relative to the number of
resources applied under predefined conditions.
When checking the performance efficiency, consider the following sub-characteristics:
Time behavior means the degree to which an operating software solution’s response and
processing time meet the predefined requirements.
Capacity is the degree to which the maximum limit of a software product or parameters satisfies
the established requirements.
Resource utilization defines the degree to which the amount of resources utilized by a working
software system satisfies the main requirements.
4.Security
This attribute of product quality refers to the degree to which a software system safeguards the
information or data so that users or other systems have the degree of access to these data based on
the authorization level.
The main sub-characteristics of this software quality attribute are as follows:
Confidentiality is the degree to which a software system guarantees that only authorized users
can access the data.
Integrity is the degree to which a software system prevents unauthorized access to a program or
data.
Authenticity is the degree to which the identity of the user or resource can be verified when
required.
Accountability means the degree to which the actions of a particular entity can be monitored and
tracked uniquely to this entity.
5.Testability
In simple terms, testability determines how easy a software solution is to test to find bugs or
ensure that it meets all predefined criteria.
Testability can result from efficient collaboration between the development, product, and testing
teams. The development team should consider the testing ability when implementing a new
feature. Thus, the input of testers is required to ensure efficient testing.
6.avilability:
Availability is part of reliability and is expressed as the ratio of the available system time to the
total working time. Important indicators for this attribute are: Availability, Planned downtime,
An architectural style is a set of principles and patterns that guide the organization of a software
system.
It dictates how components and modules within the system interact and communicate.
In essence, it comprises a set of principles and patterns that dictates how component within the
system communicate.
1. Client Server
The client-server architecture is a model in which the client, a user or an application, sends a
request to the server, which in turn responds with the requested data or service. The client and
server can be on the same machine or on different machines connected through a network.
The client is responsible for initiating communication with the server and sending a request. The
server, on the other hand, listens for incoming requests from clients, processes them, and
returns a response.
Scalability: Client-server architecture is highly scalable, as it allows multiple clients to connect to the
same server and share resources.
Security: Client-server architecture provides better security than other network models, as the server
can control access to resources and data.
Reliability: Client-server architecture is highly reliable, as the server can provide backup and recovery
services in case of failures.
2. Layering
It’s a common way to design complex software systems, and it involves breaking down the system into
layers, where each layer is responsible for a specific set of functions. This approach helps to organize
code and makes it easier to maintain and modify the system over time.
Presentation Layer: The presentation layer is responsible for displaying information to the user and
gathering input. This layer includes the user interface and any other components that interact directly
with the user. The user interface is what the user sees and interacts with, such as buttons, text boxes, and
menus. The presentation layer also includes any logic related to the user interface, such as event handlers
and validation.
Business Logic Layer: The business logic layer is responsible for implementing the business rules
of the application. This layer contains the code that processes and manipulates data, as well as any other
application logic. The business logic layer is where the magic happens, so to speak. It’s where the
software performs calculations, makes decisions, and carries out tasks. This layer is where the software
Data Access Layer: The data access layer is responsible for interacting with the database or other
external data sources. This layer contains the code that reads and writes data to and from the database.
The data access layer is where the software retrieves data from the database, makes changes to the data,
and saves the changes back to the database. This layer is critical to the functioning of the software, as it
The Pipe and Filter Architecture is based on the idea of a pipeline, where data flows through a series of
processing steps, each of which performs a specific task. Each processing step is implemented as a
separate component, or filter, that accepts data as input, performs some operation on the data, and
produces output data. The output data is then passed on to the next filter in the pipeline.
The filters in the pipeline are independent of each other, which means that they can be developed, tested,
and deployed separately. This makes it easy to add new filters to the pipeline or modify existing ones
without affecting the rest of the system.
Benefits
Scalability: The architecture can be scaled horizontally by adding more filters to the pipeline, which
allows the system to handle larger amounts of data.
Performance: The architecture can be optimized for performance by parallelizing the processing of
data across multiple filters.
Maintainability: The architecture promotes modularity and separation of concerns, which makes it
easier to maintain and update the system over time.
Pipe and Filter Architecture is a design pattern that allows software systems to process data by
separating the processing tasks into multiple independent components. This architecture is
particularly useful for systems that need to handle large amounts of data, as it can help to
series of processing steps, each of which performs a specific task. Each processing step is
implemented as a separate component, or filter, that accepts data as input, performs some
operation on the data, and produces output data. The output data is then passed on to the next
The filters in the pipeline are independent of each other, which means that they can be
developed, tested, and deployed separately. This makes it easy to add new filters to the pipeline
Benefits
Scalability: The architecture can be scaled horizontally by adding more filters to the pipeline,
4. Master-Slave
Master-Slave architecture is a design pattern used in distributed systems, where one node (the
master) controls one or more nodes (the slaves) to perform specific tasks. The master node is
responsible for distributing the workload across the slaves and for coordinating their activities.
The slave nodes do not have the same level of control as the master node and only perform tasks
One of the most significant advantages is that it allows for the efficient distribution of workload
across multiple nodes. This helps to reduce the load on any one node and ensures that the
Another advantage of using a master-slave architecture is that it provides fault tolerance. If one
of the slave nodes fails, the master node can redistribute its workload to the other slave nodes.
This ensures that the system can continue to function even if one or more nodes fail.
5. MicroKernel
MicroKernel architecture is a software design pattern that allows developers to build more
modular and flexible systems. It separates the core system functionality from additional features,
which are implemented in separate modules. The core functionality of the system is
implemented in the MicroKernel, a minimalistic core system that provides only the most
essential services required to run the system. It is plug and play concept.
Example:
Let’s consider the example of an e-commerce website. The MicroKernel would provide essential
services such as handling user authentication, managing user sessions, and processing
payments. Additional features, such as product recommendations, user reviews, and social
If the website wants to add a new feature, such as a loyalty program, it can be developed and
added as a separate module without affecting the core functionality of the system. This
modularity makes it easier to add new features or remove existing ones without affecting the
Furthermore, if the website wants to customize its system to meet the specific needs of different
users, it can choose the modules it needs for each user. For example, a user who frequently buys
electronics can be provided with a module that recommends electronic products. On the other
hand, a user who frequently buys cosmetics can be provided with a module that recommends
cosmetic products.
Finally, if the website wants to scale its system to handle more users or changes in hardware, it
can easily add or remove modules as needed. This scalability makes it easier to adapt the system
At its core, DDD is a way of thinking about software architecture that emphasizes the domain or
problem space of a project. This means that developers focus on the business logic of the
In practice, this means that developers start by understanding the domain they are working in
and break it down into smaller, more manageable parts. They then use this understanding to
create a domain model, which is a representation of the different entities within the domain and
Once the domain model is created, developers can use it to guide the rest of the architecture of
the software. This includes creating bounded contexts, which are areas of the software that are
defined by a specific language and context, and aggregates, which are collections of related
and development that emphasizes the use of reusable software components. The idea behind
CBA is that software development can be made more efficient and effective by breaking down
What is a component?
A software component is a modular, self-contained unit of software that can be reused across
different systems. A component typically has a well-defined interface, which specifies how other
components can interact with it. This interface includes information about the component’s
Components can be classified into different types based on their functionality, such as user
interface components, data access components, and business logic components. Each type of
component has a specific role in the software system and can interact with other components
8. SOA
SOA is an architectural style that aims to create modular, reusable services that can be easily
integrated with other services to create a larger system. In this approach, services expose their
At its core, SOA is about building software by breaking it down into smaller pieces, or modules,
that can be reused across different applications. This modular approach allows developers to
focus on building specific pieces of functionality and then integrating them with other pieces to
Service Provider: The service provider is responsible for creating and exposing services to the
outside world. These services can be used by other services, applications, or end-users. For
example, a payment processing service provider might create and expose a service that allows
Service Registry: The service registry is a directory of available services that can be accessed by
other services or applications. The service registry provides information about the service, such
as its name, location, and interface. For example, if an application needs to process payments, it
can use the service registry to find the payment processing service and access its interface.
Service Requestor: The service requestor is responsible for consuming the services exposed by
the service provider. This can be done by using the service registry to find the appropriate service
and then invoking its interface. For example, an application might use the service registry to find
the payment processing service and then use its interface to process payments.
9. Monolithic
Monolithic architecture is a software design pattern that has been around for decades. It’s a way
of structuring an application as a single, cohesive unit, rather than splitting it up into individual,
smaller components.
In a monolithic architecture, the entire application is built as a single, self-contained unit. All of
the code and dependencies are packaged together, so the application can be deployed and run on
a single server.
This makes it easy to develop and deploy the application, since everything is in one place. It also
One of the biggest advantages of monolithic architecture is its simplicity. Since everything is
contained in a single unit, there are fewer moving parts to worry about. This makes it easier to
Another advantage is that it’s easier to maintain and debug a monolithic application. Since
everything is in one place, it’s easier to track down issues and fix them.
One of the biggest disadvantages of monolithic architecture is that it can be difficult to scale the
application vertically. Since everything is running on a single server, there’s a limit to how much
Another disadvantage is that it can be difficult to adopt new technologies and languages in a
10. Microservice
collection of small, independent services that communicate with each other over a network. Each
service is focused on a specific business capability and can be developed, deployed, and scaled
into smaller, more manageable services. This approach brings several benefits, such as improved
scalability, increased flexibility, and quicker time-to-market for new features. With a
microservice architecture, each service can be scaled independently, making it easier to handle
traffic spikes or changes in demand. Developers can also modify or add new services without
affecting other parts of the system, which speeds up the development process.
Despite the benefits of microservice architecture, it also introduces additional complexity. One of
discover each other and communicate effectively, which can be difficult to do at scale. Load
balancing and fault tolerance are also more complex in a microservice architecture.
Another challenge is ensuring that each service has its own data store. In a monolithic
application, all data is typically stored in a single database. With microservices, each service
should have its own data store to ensure that changes to one service do not affect other services
in the system. This can lead to increased complexity in data management and synchronization.
Event Driven Architecture (EDA) is an approach to designing software systems that enables
rapid and efficient communication between different components or services. In this paradigm,
different software components communicate with each other using events, rather than through
interface or a backend service. These events are then broadcast to other components of the
As software development becomes more complex and demands greater scalability, traditional
architectures are becoming less and less effective. Stream-based architecture is emerging as a
promising alternative that enables developers to build systems that can handle massive amounts
of data in real-time.
real-time. This allows developers to build systems that can respond to changes in data with
minimal latency
• Any organization that embraces architecture as a foundation for its software development
processes needs to understand its place in the life cycle.
• Several life-cycle models exist in the literature, but one that puts architecture squarely in
the middle of things is the Evolutionary Delivery Life Cycle model shown in Figure.
• The intent of this model is to get user and customer feedback and iterate through several
releases before the final release.
• The model also allows the adding of functionality with each iteration and the delivery of a
limited version once a sufficient set of features has been developed.
Evolutionary Delivery Life Cycle
This principle is useful because it breaks the problem of architecture documentation into more
tractable parts, which provide the structure for the remainder of this chapter:
• Choosing the relevant views
• Documenting a view
• Documenting information that applies to more than one view
Software architecture views are divided views into these three groups: module, component-and-
connector (C&C), and allocation. This three-way categorization reflects the fact that architects
need to think about their software in at least three ways at once:
• How it is structured as a set of implementation units
• How it is structured as a set of elements that have runtime behavior and interactions
• How it relates to non-software structures in its environment
There is no industry-standard template for documenting a view, but the seven-part standard
organization that we suggest in this section has worked well in practice.
1. Primary presentation
2. Element catalog
3. Context diagram
4. Variability guide
5. Architecture background
6. Glossary of terms
7. Other information
Reconstructing Software Architecture:
Architecture reconstruction has been used in a variety of projects ranging from MRI scanners to
public telephone switches and from helicopter guidance systems to classified NASA systems. It has
been used
• To redocument architectures for physics simulation systems.
• To understand architectural dependencies in embedded control software for mining
machinery.
• To evaluate the conformance of a satellite ground system's implementation to its reference
architecture.
• To understand different systems in the automotive industry.
Reconstruction Activities
Software architecture reconstruction comprises the following activities, carried out iteratively:
• Information extraction. The purpose of this activity is to extract information from various
sources.
• Database construction. Database construction involves converting this information into a
standard form such as the Rigi Standard Form (a tuple-based data format in the form of
relationship
<entity1><entity2>) and an SQL-based database format from which the database is created.
• View fusion. View fusion combines information in the database to produce a coherent view of
the architecture.
• Reconstruction. The reconstruction activity is where the main work of building abstractions
and various representations of the data to generate an architecture representation takes place.