Unit 5 - Software Architecture
Unit 5 - Software Architecture
Unit 5 - Software Architecture
Refinement
Refinement is the idea that software is developed by moving through the levels of abstraction, beginning
at higher levels and, incrementally refining the software through each level of abstraction, providing more
detail at each increment. At higher levels, the software is merely its design models; at lower levels there
will be some code; at the lowest level the software has been completely developed.
At the early steps of the refinement process the software engineer does not necessarily know how the
software will perform what it needs to do. This is determined at each successive refinement step, as the
design and the software is elaborated upon.
Refinement can be seen as the compliment of abstraction. Abstraction is concerned with hiding lower
levels of detail; it moves from lower to higher levels. Refinement is the movement from higher levels of
detail to lower levels. Both concepts are necessary in developing software.
Context Diagram
The system context diagram (also known as a level 0 DFD) is the highest level in a data flow diagram and
contains only one process, representing the entire system, which establishes the context and boundaries
of the system to be modelled. It identifies the flows of information between the system and external
entities (i.e. actors). A context diagram is typically included in a requirements document. It must be read by
all project stakeholders and thus should be written in plain language, so the stakeholders can understand
items.
Purpose of a System Context Diagram
The objective of the system context diagram is to focus attention on external factors and events that
should be considered in developing a complete set of systems requirements and constraints. A system
context diagram is often used early in a project to determine the scope under investigation. Thus, within
the document. A system context diagram represents all external entities that may interact with a system.
The entire software system is shown as a single process. Such a diagram pictures the system at the centre,
with no details of its interior structure, surrounded by all its External entities, interacting systems, and
environments.
Variability
Variability is the ability of a software artifact to be changed (e.g., configured, customized, extended,
adapted) for a specific context, in a pre-planned manner. This means, variability can be understood as
“anticipated change”.
• It helps manage commonalities and differences between systems.
• It supports the development of different versions of software by allowing the implementation of
variants within systems.
• It facilitates planned reuse of software artifacts in multiple products,
• It allows the delay of design decisions to the latest point that is economically feasible.
• It supports runtime adaptations of deployed systems.
Reasons for variability include the deferral of design decisions, multiple deployment / maintenance
scenarios.
Software Interfaces
Software interfaces (programming interfaces) are the languages, codes, and messages that programs use
to communicate with each other and to the hardware. An interface is a boundary across which two
independent entities meet and interact or communicate with each other. The characteristics of an
interface depend on the view type of its element. If the element is a component, the interface represents a
specific point of its potential interaction with its environment. If the element is a module, the interface is a
definition of services. There is a relation between these two kinds of interfaces, just as there is a relation
between components and modules.
By the element’s environment, we mean the set of other entities with which it interacts. We call those
other entities actors: An element’s actors are the other elements, users, or systems with which it interacts.
In general, an actor is an abstraction for external entities that interact with the system. Interaction is part
of the element’s interface. Interactions can take a variety of forms. Most involve the transfer of control
and/or data. Some are supported by standard programming-language constructs, such as local or remote
procedure calls (RPCs), data streams, shared memory, and message passing.
Some principles about interfaces:
• All elements have interfaces. All elements interact with their environment.
• An element’s interface contains view-specific information.
• Interfaces are two ways.
• An element can have multiple interfaces.
• An element can interact with more than one actor through the same interface.
An interface is documented with an interface specification: An interface specification is a statement of
what an architect chooses to make known about an element in order for other entities to interact or
communicate with it.
Documenting the behaviour of software elements and software systems
A software component simply cannot be differentiated from other software elements by the programming
language used to implement the component. The difference must be in how software components are
used. Software comprises many abstract, quality features, that is, the degree to which a component or
process meets specified requirement for example, an efficient component will receive more use than a
similar, inefficient component. It would be inappropriate, however, to define a software component as "an
efficient unit of functionality." Elements that comprise the following definition of the term software
component are described in the "Terms" sidebar. A software component is a software element that
conforms to a component model and can be independently deployed and composed without modification
according to a composition standard. A component model defines specific interaction and composition
standards. A component model implementation is the dedicated set of executable software elements
required to support the execution of components that conform to the model. A software component
infrastructure is a set of interacting software components designed to ensure that a software system or
subsystem constructed using those components and interfaces will satisfy clearly defined performance
specifications.
The main goal of effective documentation is to ensure that developers and stakeholders are headed in the
same direction to accomplish the objectives of the project. To achieve them, plenty of documentation
types exist.