Alpine Institute of Technology
Index
S. No. Title Signature
1 Describe the fundamentals of software architecture,
qualities and terminologies
2 Understand the fundamental principles and
guidelines for software architecture design, styles,
patterns and frameworks
3 Use implementation techniques of software
architecture for effective software development
1
Alpine Institute of Technology
Case Study - 1
Describe the fundamentals of Software Architecture, Qualities and Terminologies?
Software Architecture defines fundamental organization of a system and more simply defines
a structured solution. It defines how components of a software system are assembled, their
relationship and communication between them. It serves as a blueprint for software
application and development basis for developer team. Software defines a list of things which
results in making many things easier in the software development process. • A software
architecture defines structure of a system.
• A software architecture defines behavior of a system.
• A software architecture defines component relationship.
• A software architecture defines communication structure.
• A software architecture balances stakeholder's needs.
• A software architecture influences team structure.
• A software architecture focuses on significant elements.
• A software architecture captures early design decisions.
Characteristics of Software Architecture:
Architects separate architecture characteristics into broad categories depending upon
operation, rarely appearing requirements, structure etc. Below some important characteristics
which are commonly considered are explained.
• Operational Architecture Characteristics:
1. Availability
2. Performance
3. Reliability
4. Low fault tolerance
5. Scalability
• Structural Architecture Characteristics:
1. Configurability
2. Extensibility
3. Supportability
4. Portability
5. Maintainability
2
Alpine Institute of Technology
• Cross-Cutting Architecture Characteristics:
1. Accessibility
2. Security
3. Usability
4. Privacy
5. Feasibility
Terminologies of Software Architecture:
Black/White Box Testing:
1. In Black BOX testing is done without the knowledge of the internal structure of
program or application whereas in White Box, testing is done with knowledge of the
internal structure of program
2. Black Box test doesn't require programming knowledge whereas the White Box test
requires programming knowledge,
3. Black Box testing has the main goal to test the behavior of the software whereas
White Box testing has the main goal to test the internal operation of the system.
4. Black Box testing is focused on external or end-user perspective whereas White Box
testing is focused on code structure, conditions, paths and branches.
5. Black Box test provides low granularity reports whereas the White Box test provides
high granularity reports.
6. Black Box testing is a not time-consuming process whereas White Box testing is a
time-consuming process.
Idempotence:
In computing, an idempotent operation is one that has no additional effect if it is called more
than once with the saine input parameters. An operation is idempotent if it produces the same
result when called over and over. An identical request should return an identical result when
done twice, two thousand, or two million times. The source of most confusion around this
concept comes with the idea of identical results, however. What we expect to see is identical
results in the return form rather than in the return value.
A function looking up a customer's name and address in a database is typically idempotent,
since this will not cause the database to change. Similarly, changing a customer's address to
XYZ is typically idempotent, because the final address will be the same no matter how many
times XYZ is submitted. However, placing an order for a cart for the customer is typically
not idempotent, since running the call several times will lead to several orders being placed.
Cancelling an order is idempotent, because the order remains cancelled no matter how many
requests are made.
3
Alpine Institute of Technology
Swarming:
Swarming is the act of all development team members working on only one requirement at a
time during the sprint. Although not a principle specific to scrum, it is such an effective way
for teams to execute their sprint backlog that it warrants some more discussion.
Again, one of the main benefits of scrum is that development teams start and finish
requirements to satisfy their definition of done to produce a potentially shippable product
increment within a relatively short time box and to repeat that cycle with lessons learned
again and again. The goal is to finish, not just start, as many Requirements as possible.
It enables teams with the following benefits, but not limited to:
1. Maximized chances for success with the skills and abilities of the entire team focused
on a single requirement.
2. Complete the entire cycle of plan, design, develop, and test to completion for each
requirement.
3. Dramatically decrease the introduction of defects into a product upfront through pairing
and single-tasking (versus multitasking).
4. Eliminate single points of failure in knowledge, process, and skillsets.
5. The most important requirements get done, done completely, and get done first.
Cross-cutting concerns:
Wiki reference says: Cross-cutting concerns are parts of a program that rely on or must affect
many other parts of the system. They form the basis for the development of aspects.
Cross-cutting concerns can be directly responsible for tangling, or system inter-dependencies,
within a program. Because procedural and function constructs consist entirely of procedure
calling, there is no semantic through which two goals (the capability to be implemented and
the related cross-cutting concern) can be addressed simultaneously. As a result, the code
addressing the cross-cutting concern must be scattered, or duplicated. across the various
related locations, resulting in a loss of modularity.
There are a variety of different types of cross-cutting concerns that may be part of a software
application. This IS by no means an exhaustive list, but some common examples of
crosscutting concerns include the following:
• Caching
• Configuration management
• Auditing
4
Alpine Institute of Technology
• Security
• Exception management
• Logging
Non-Functional Requirement (NFRs):
A non-functional requirement is any requirement that cannot be derived by examination of a
process (for example, use case modelling).
Non-functional requirements can include security, performance, usability, reliability,
scalability, testability, maintainability, and constraints.
Non-functional requirements specify how and in what quality the functionalities in a system
shall be implemented. Whenever you are architecting a system, you need to consider self
imposed NFRs in your architecture. by default.
5
Alpine Institute of Technology
Case Study – 2
Understand the fundamental principles and guidelines for Software Architecture design,
styles, patterns, and frameworks architectural design:
The software needs the architectural design to represents the design of software. IEEE defines
architectural design as "The process of defining a collection of hardware and software
components and their interfaces to establish the framework for the development of a computer
system." The software that is built for computer-based systems can exhibit one of these many
architectural styles. Each style will describe a system category that consists of:
• A set of components (e.g.: a database, computational modules) that will perform a function
required by the system.
• The set of connectors will help in coordination, communication, and cooperation between
the components.
• Conditions that how components can be integrated to form the system.
• Semantic models that help the designer to understand the overall properties of the system.
Taxonomy of Architectural styles:
1. Data centered architectures:
A data store will reside at the center of this architecture and is accessed frequently by the
other components that update, add, delete or modify the data present within the store.
Variation of this approach is used to transform the repository into a blackboard when data
related to client or data of interest for the client change the notifications to client software.
It promotes inerrability. This means that the existing components can be changed and new
client components can be added to the architecture without the permission or concern of
other clients. Data can be passed among clients using blackboard mechanism.
2. Data flow architectures:
This kind of architecture is used when input data to be transformed into output data
through a series of computational manipulative components. It uses both pipe and filter and
it has a set of components called filters connected by pipes. Pipes are used to transmit data
from one component to the next. Each filter will work independently and is designed to take
data input of a certain form and produces data output to the next filter of a specified form.
The filters don't require any knowledge of the working of neighboring filters, If the data flow
degenerates into a single line of transforms, then it is termed as batch sequential. This
6
Alpine Institute of Technology
structure accepts the batch of data and then applies a series of sequential components to
transform it. 3. Call and Return architectures:
It is used to create a program that is easy to scale and modify. Many sub-styles exist within
this category. Two of them are explained below.
• Remote procedure call architecture: This component is used to present in a main
program or sub program architecture distributed among multiple computers on a
network.
• Main program or Subprogram architectures: The main program structure decomposes
into number of subprograms or function into a control hierarchy. Main program
contains number of subprograms that can invoke other component
ARCHITECTURE STYLES:
An architectural style is a set of characteristics and features that make a building or other
structure notable or historically identifiable. Most architecture can be classified within a
chronology of styles which changes over time, reflecting changing fashions, beliefs and
religions, or the emergence of new ideas, technology, or materials which make new styles
possible.
An architectural style defines: a family of systems in terms of a pattern of structural
organization, a vocabulary of components and connectors, with constraints on how they can
be combined.
1. Layered Architecture:
In Layered architecture, different components are organized in layers. Each layer
communicates with its adjacent layer by sending requests and getting responses. The
layered architecture separates components into units. Any layer cannot directly
communicate with another layer. A layer can only communicate with its neighboring layer
and then the next layer transfers information to another layer and so on the process goes
on.
2. Object-Oriented Architecture:
In this type of architecture, components are treated as objects which convey information
to each other. Object-Oriented Architecture contains an arrangement of loosely coupled
objects. Objects can interact with each other through method calls. Objects are connected
to each other through the Remote Procedure Call (RPC) mechanism or Remote Method
Invocation (RMI) mechanism. Web Services and REST API are examples of object
oriented architecture.
3. Data Centered Architecture:
7
Alpine Institute of Technology
Data Centered Architecture is a type of architecture in which a common data space is
present at the centre. It contains all the required data in one place a shared data space. All
the components are connected to this data space and they follow publish/subscribe type
of communication. It has a central data repository at the centre. Required data is then
delivered to the components.
4. Event-Based Architecture:
Event-Based Architecture is almost similar to Data centered architecture just the
difference is that in this architecture events are present instead of data. Events are present
at the centre in the Event bus and delivered to the required component whenever needed.
In this architecture, the entire communication is done through
events. When an event occurs, the system, as well as the receiver, gets notified. Data,
URLs etc. are transmitted through events. The components of this system are loosely
coupled that's why it is-easy to add, remove and modify them. Heterogeneous components
can communicate through the bus.
ARCHITECTURE PATTERNS:
Software architecture is the blueprint of building software. It shows the overall structure
of the software, the collection of components in it, and how they interact with one another
while hiding the implementation. This helps the software development team to clearly
communicate how the software is going to be built as per the requirements of customers.
There are various ways to organize the components in software architecture. And the
different predefined organization of components in software architectures is known as
software architecture patterns. A lot of patterns were tried and tested. Most of them have
successfully solved various problems. In each pattern, the components are organized
differently for solving a specific problem in software architectures.
Different Software Architecture Patterns: l.
Layered Pattern
2. Client-Server Pattern
3. Event-Driven Pattern
4. Microkernel Pattern
5. Micro services Pattern
8
Alpine Institute of Technology
1. Layered Pattern:
In this pattern are separated into layers of subtasks and they are arranged one above
another.
Each layer has unique tasks to do and all the layers are independent of one another. Since
each layer is independent, one can modify the code inside a layer without affecting others.
It is the most commonly used pattern for designing the majority of software. This layer is
also known as 'N-tier architecture'. Basically, this pattern has 4 layers.
1. Presentation layer (The user interface layer where we see and enter data into an
application.)
2. Business layer (this layer is responsible for executing business logic as per the
request.)
3. Application layer (this layer acts as a medium for communication between the
'presentation layer' and 'data layer'.
4. Data layer (this layer has a database for managing data.) Ideal for: E-commerce
web applications development like Amazon.
2. Client-Server Pattern:
The client-server pattern has two major entities. They are a server and multiple clients. Here
the server has resources (data, files or services) and a client requests the server for a particular
resource. Then the server processes the request and responds back accordingly.
Examples of software developed in this pattern:
1. Email. 2. WWW. 3. File sharing apps. 4. Banking, etc...
3. Event-Driven Pattern:
Event-Driven Architecture is an agile approach in which services (operations) of the software
are triggered by events. When a user takes action in the application built using the EDA
approach, a state change happens and a reaction is generated that is called an event.
i.e.: A new user fills the signup form and clicks the signup button on Face book and then a FB
account is created for him, which is an event.
Ideal for: Building websites with JavaScript and e-commerce websites in general.
9
Alpine Institute of Technology
4. Microkernel Pattern:
Microkernel pattern has two major components. They are a core system and plug-in modules.
• The core system handles the fundamental and minimal operations of the application.
• The plug-in modules handle the extended functionalities (like extra features) and
customized processing.
Microkernel pattern is ideal for: Product based applications and scheduling applications. We
love new features that keep giving dopamine boost to our brain. Such as Instagram reels,
YouTube Shorts and a lot more that feasts us digitally. So this pattern is mostly preferred for
app development.
5. Micro services Pattern:
The collection of small services that are combined to form the actual application is the concept
of micro services pattern. Instead of building a bigger application, small programs are built
for every service (function) of an application independently. And those small programs are
bundled together to be a full-fledged application. Modules in the application of micro services
patterns are loosely coupled. So they are easily understandable, modifiable and scalable.
Ideal for: Netflix is one of the most popular examples of software built-in micro services
architecture. This pattern is most suitable for websites and web apps having small
components.
ARCHITECTURE FRAMEWORK:
A software architecture framework is a set of reusable design patterns that are aligned with
the business goals of the system. The patterns are not just about technology, but also about
business rules and policies. A good software architecture framework should cover all the areas
of concern for the system being built, such as security, performance, scalability, availability
and usability.
Functions of a Software Architecture Framework
There are a number of key functions that a Software Architecture framework can perform.
These functions ensure that the architecture will be easy-to-learn and flexible for future
generations of developers.
• Flexibility
• Reusability
• Simplicity
• Scalability
10
Alpine Institute of Technology
Architectural Models for Architectural Systems
• Object-Oriented Model
• Spiral Model
• Waterfall Model
11
Case Study- 3
Use implementation technique of software architecture for effective software development.
Software architecture implementation technique:
Software architecture exposes the structure of a system while hiding the implementation
details. Architecture also focuses on how the elements and components within a system
interact with one other. Software design delves deeper into the implementation details of the
system. Design concerns include the
selection of data structures and algorithms, or the implementation details of individual
components.
Software architecture description language (ADLs):
Software architecture The Software architecture of a program or computing system is the
structure or structures of the system, which comprise software components, the externally
visible properties of those components and the relationships among them.
Architecture description languages (ADLs) are formal languages that can be used to
represent the architecture of a software-intensive system. As architecture becomes a
dominating theme in large system development, methods for unambiguously specifying
architecture will become indispensable
Advantages of (ADLs)-
1. ADLs represent a formal way of representing architecture.
2. ADLs are intended to be both human and machine readable.
3. ADLs support describing a system at a higher level than previously possible.
4. ADLs permit analysis of architecture completeness, consistency, ambiguity and
performance.
5. ADLs can support automatic generation of software systems.
Disadvantages of (ADLs) -
1. There is not universal agreement on what ADLs should represent , particularly as regards
the behaviour of the architecture .
2. Representation currently in use are relatively difficult to parse and are not supported by
commercial tools.
12
3. Most ADL work today has been undertaken with academic rather than commercial goals
in mind.
4. Most ADLs tend to be very vertically optimized toward a particular kind of analysis.
Struts:
Struts is an opensource framework that extends the Java Servlet API and employs a Model,
View, Controller (MVC) architecture. It enables you to create maintainable, extensible, and
flexible web applications based on standard technologies, such as JSP pages, JavaBeans,
resource bundles, and XML
Hibernate:
Hibernate is a framework which is used to develop persistence logic which is independent of
Database software. In JDBC to develop persistence logic we deal with primitive types.
Whereas Hibernate framework we use Objects to develop persistence logic which are
independent of database software.
Node JS:
Node JS is an extremely powerful JavaScript-based platform that's built on Google Chrome's
JavaScript V8 Engine, used to develop 1/0 intensive web applications like video streaming
sites, single-page applications online chat applications, and other web apps.
Node.js is used by large, established companies and newly-minted startups alike. Open-
source and completely free, the platform is used by thousands of developers around the world.
It brings plenty of advantages to the table, making it a better choice than other server-side
platforms like Java or PHP in many cases.
Advantages of Node JS:
1. High-performance for Real-time Applications.
2. Easy Scalability for Modern Applications.
3. Cost-effective with FULLSTACK JS.
4. Community Support to Simplify Development.
5. Easy to Learn and Quick to Adapt.
6. Helps in building Cross-functional Teams.
13
Angular JS:
Angular JS is an open-source Model-View-Controller framework that is similar to the
JavaScript framework. Angular JS is probably one of the most popular modern-day web
frameworks available today. This framework is used for developing mostly Single Page
applications. This framework has been developed by a group of developers from Google
itself. Because of the sheer support of Google and ideas from a wide community forum, the
framework is always kept up to date. Also, it always incorporates the latest development
trends in the market.
Advantages of Angular JS:
1. It provides the capability to create Single Page Application in a very clean and
maintainable way.
2. It provides data binding capability to HTML. Thus, it gives user a rich and responsive
experience.
3. Angular JS code is unit testable.
4. Angular JS uses dependency injection and make use of separation of concerns.
5. Angular JS provides reusable components.
6. With Angular IS, the developers can achieve more functionality with short code.
7. In Angular JS, views are pure html pages, and controllers written in JavaScript do the
business processing.
Disadvantages of Angular JS:
1. Not Secure -Being JavaScript only framework, application written in Angular JS are
not safe. Server side authentication and authorization is must to keep an application secure,
2. Not degradable – If the user of your application disables JavaScript, then nothing would
be visible, except the basic page.
J2EE - JSP:
The JavaT M
2 Platform, Enterprise Edition (J2EE) provides a standard for developing
multitier, enterprise applications.
The economy and technology of today have intensified the need for faster, more efficient, and
larger-scale information management solutions. The J2EE specification satisfies these
challenges by providing a programming model that improves development productivity,
standardizes the platform for hosting enterprise applications, and ensures portability of
developed applications with an extensive test suite.
14
J2EE architecture supports component-based development of multi-tier enterprise
applications. A J2EE application system typically includes the following tiers:
• Client tier
In the client tier, Web components, such as Servlets and Java Server Pages (JSPs), or
standalone Java applications provide a dynamic interface to the middle tier.
• Middle tier
In the server tier, or middle tier, enterprise beans and Web Services encapsulate
reusable, distributable business logic for the application. These server-tier
components are contained on a J2EE Application Server, which provides the platform
for these components to perform actions and store data.
• Enterprise data tier
In the data tier, the enterprise's data is stored and persisted, typically in a relational
database.
Servlets:
Servlets are programs that run on a Web or Application server and act as a middle layer
between a requests coming from a Web browser or other HTTP client and databases or
applications on the HTTP server.
Using Servlets, you can collect input from users through web page forms, present records
from a database or another source, and create web pages dynamically.
Java Servlets often serve the same purpose as programs implemented using the Common
Gateway Interface (CGI). But Servlets offer several advantages in comparison with the CGI.
• Performance is significantly better. Servlets execute within the address space of a Web
server. It is not necessary to create a separate process to handle each client request.
• Servlets are platform-independent because they are written in Java.
• Java security manager on the server enforces a set of restrictions to protect the
resources on a server machine. So servlets are trusted.
• The full functionality of the Java class libraries is available to a servlet. It can
communicate with applets, databases, or other software via the sockets and RMI
mechanisms that you have seen already.
15
EJBs:
Java beans incorporate a set of objects into one accessible object that can be accessed easily
from any application. This single accessible object is maintainable, customizable, and
reusable. The setter/getter method and the single public constructor are used to govern that
single accessible object. We can update and read the value of any variable of any object by
using the setter and getter, respectively.
The EJB stands for Enterprise Java beans that is a server-based architecture that follows the
specifications and requirements of the enterprise environment. EJB is conceptually based on
the Java RMI (Remote Method Invocation) specification. In EJB, the beans are run in a
container having four-tier architecture. This architecture consists of four layers, i.e., Client
layer, Web layer, Application layer, and Data layer.
Middleware:
Middleware is software that provides common services and capabilities to applications
outside of what's offered by the operating system. Data management, application services,
messaging, authentication, and API management are all commonly handled by middleware.
Technology is constantly evolving. The introduction of affordable and flexible cloud solutions
has allowed businesses to evolve along with these new technologies. The rapid pace of
innovation in cloud services gives companies employing them a huge competitive edge.
Cloud adoption rates have soared at such a rapid pace
in the last few years that IDC forecasts cloud spending to surpass $1 trillion in 2024. Today's
consumers have also evolved with technology
JDBC:
Java Database Connectivity (JDBC) architecture is an API specifying interfaces for accessing
relational databases. JDBC helps to connect to a database, send queries and updates to the
database, and retrieve and process the results obtained from the database for queries.
JNDI:
The Java Naming and Directory Interface (JNDI) is an application programming interface
(API) that provides naming and directory functionality to applications written using the Java
programming language. It is defined to be independent of any specific directory service
implementation.
16
JMS:
The Java Message Service (JMS) API is a messaging standard that allows application
components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive,
and read messages. It enables distributed communication that is loosely coupled, reliable, and
asynchronous.
RMI:
RMI stands for Remote Method Invocation. It is a mechanism that allows an object residing
in one system (JVM) to access/invoke an object running on another JVM.RMI is used to build
distributed applications, it provides remote communication between Java programs. It is
provided in the package java.rmi .
CORBA:
Common Object Request Broker Architecture (CORBA) could be a specification of a regular
design for middleware. It is a client-server software development model. Using a CORBA
implementation, a shopper will transparently invoke a way on a server object, which may air
a similar machine or across a network. The middleware takes the decision, associated is to
blame for finding an object which will implement the request, passing it the parameters,
invoking its methodology, and returning the results of the invocation. The shopper doesn't
need to remember of wherever the item is found, its programming language, its software
package or the other aspects that don't seem to be a part of the associated object's interface.
17
18
19