SE Unit 3
SE Unit 3
1. Correctness:
A good design should be correct i.e. it should correctly implement all the functionalities of the system.
2. Efficiency:
A good software design should address the resources, time, and cost optimization issues.
3. Understandability:
A good design should be easily understandable, for which it should be modular and all the modules are
arranged in layers.
4. Completeness:
The design should have all the components like data structures, modules, and external interfaces, etc.
5. Maintainability:
A good software design should be easily amenable to change whenever a change request is made from the
customer side
Different levels of Software Design:
There are three different levels of software design. They are:
1. Architectural Design:
The architecture of a system can be viewed as the overall structure of the system & the way in which
structure provides conceptual integrity of the system. The architectural design identifies the software as a
system with many components interacting with each other. At this level, the designers get the idea of the
proposed solution domain.
3. Detailed design:
Once the high-level design is complete, a detailed design is undertaken. In detailed design, each module is
examined carefully to design the data structure and algorithms. The stage outcome is documented in the form
of a module specification document.
Methodological Expertise
Expert on software development methodologies that may be adopted during SDLC (Software Development
Life Cycle).
Choose the appropriate approaches for development that helps the entire team.
Hidden Role of Software Architect
Facilitates the technical work among team members and reinforcing the trust relationship in the team.
Information specialist who shares knowledge and has vast experience.
Protect the team members from external forces that would distract them and bring less value to the project.
Deliverables of the Architect
A clear, complete, consistent, and achievable set of functional goals
A functional description of the system, with at least two layers of decomposition
A concept for the system
A design in the form of the system, with at least two layers of decomposition
A notion of the timing, operator attributes, and the implementation and operation plans
A document or process which ensures functional decomposition is followed, and the form of interfaces is
controlled
Quality Attributes
Quality is a measure of excellence or the state of being free from deficiencies or defects. Quality attributes are the
system properties that are separate from the functionality of the system.
Implementing quality attributes makes it easier to differentiate a good system from a bad one. Attributes are overall
factors that affect runtime behavior, system design, and user experience.
They can be classified as −
Static Quality Attributes
Reflect the structure of a system and organization, directly related to architecture, design, and source code. They are
invisible to end-user, but affect the development and maintenance cost, e.g.: modularity, testability, maintainability,
etc.
Dynamic Quality Attributes
Reflect the behavior of the system during its execution. They are directly related to system’s architecture, design,
source code, configuration, deployment parameters, environment, and platform.
They are visible to the end-user and exist at runtime, e.g. throughput, robustness, scalability, etc.
Components:-Components are generally units of computation or data stores in the system. A component has a
name, which is generally chosen to represent the role of the component or the function it performs.
A component is of a component-type, where the type represents a generic component, defining the general
computation and the interfaces a component of that type must have. Note that though a component has a type, in the
C&C architecture view.
In a diagram representing a C&C architecture view of a system, it is highly desirable to have a different
representation for different component types, so the different types can be identified visually. In a box-and-line
diagram, often all components are represented as rectangular boxes. Such an approach will require that types of the
components are described separately
Connectors: - The different components of a system are likely to interact while the system is in operation to provide
the services expected of the system. After all, components exist to provide parts of the services and features of the
system, and these must be combined to deliver the overall system functionality. For composing a system from its
components, information about the interaction between components is necessary.
Interaction between components may be through a simple means supported by the underlying process execution
infrastructure of the operating system. For example, a component may interact with another using the procedure call
mechanism (a connector,) which is provided by the runtime environment for the programming language.
6. Accommodate change –
The software should be designed in such a way that it accommodates the change implying that the software
should adjust to the change that is required to be done as per the user’s need.
7. Degrade gently –
The software should be designed in such a way that it degrades gracefully which means it should work
properly even if an error occurs during the execution.
8. Assessed or quality –
The design should be assessed or evaluated for the quality meaning that during the evaluation, the quality of
the design needs to be checked and focused on.
Conceptual design is an initial/starting phase in the A Technical design is a phase in which the event team
process of planning, during which the broad outlines of writes the code and describes the minute detail of either
function and sort of something are coupled. the whole design or some parts of it.
It is written in the customer’s language and designed It describes any other thing that converts the
according to the client’s requirements. requirements into a solution to the customer’s problem.
At the end of this phase, the solutions to the problems At the end of this phase, and after analyzing the
are sent for review. technical design, the specification is initiated.
3.7 Cohesion:
Cohesion is the indication of the relationship within the module. It is the concept of intra-module. Cohesion has
many types but usually, high cohesion is good for software.
Coupling:
Coupling is also the indication of the relationships between modules. It is the concept of the Inter-module. The
coupling has also many types but usually, the low coupling is good for software.
In other words, once a software entity (such as a class) is defined and implemented, it should be possible to extend
its behavior without modifying its source code. This can be achieved by using inheritance, interfaces, or other
techniques that allow new functionality to be added to a software entity without changing its existing
implementation.
The OCP promotes a modular and flexible design approach, which enables software systems to evolve over time
without breaking existing functionality. By designing software entities that are open for extension but closed for
modification, developers can reduce the risk of introducing bugs or unintended side effects when making changes to
existing code. Additionally, this principle can help to improve the maintainability and scalability of software
systems, as it encourages the use of loosely coupled components that can be easily modified or replaced without
affecting the rest of the system.
3.10 Function Oriented Design :
Function oriented design is the result of focusing attention to the function of the program. This is based on the
stepwise refinement. Stepwise refinement is based on the iterative procedural decomposition. Stepwise
refinement is a top-down strategy where a program is refined as a hierarchy of increasing levels of details.
We start with a high level description of what the program does. Then, in each step, we take one part of our high
level description and refine it. Refinement is actually a process of elaboration. The process should proceed from a
highly conceptual model to lower level details. The refinement of each module is done until we reach the
statement level of our programming language.
COMPARISON
FACTORS FUNCTION ORIENTED DESIGN OBJECT ORIENTED DESIGN
The basic abstractions, which are The basic abstractions are not the real world
Abstraction given to the user, are real world functions but are the data abstraction where the
functions. real world entities are represented.
Functions are grouped together by Function are grouped together on the basis of the
Function which a higher level function is data they operate since the classes are associated
obtained. with their methods.
This approach is mainly used for This approach is mainly used for evolving
Use
computation sensitive application. system which mimics a business or business
COMPARISON
FACTORS FUNCTION ORIENTED DESIGN OBJECT ORIENTED DESIGN
case.
High Level Design is the general system design Low Level Design is like detailing HLD means
01.
means it refers to the overall system design. it refers to component-level design process.
02. High Level Design in short called as HLD. Low Level Design in short called as LLD.
03. It is also known as macro level/system design. It is also known as micro level/detailed design.
It describes the overall description/architecture of the It describes detailed description of each and
04.
application. every module.
High Level Design expresses the brief functionality Low Level Design expresses details functional
05.
of each module. logic of the module.
09. In HLD the input criteria is Software Requirement In LLD the input criteria is reviewed High Level
S.No. HIGH LEVEL DESIGN LOW LEVEL DESIGN
High Level Solution converts the Business/client Low Level Design converts the High Level
10.
requirement into High Level Solution. Solution into Detailed solution.
In HLD the output criteria is data base design, In LLD the output criteria is program
11.
functional design and review record. specification and unit test plan.
3.14 Verification
As mentioned, verification is the process of determining if the software in question is designed and
developed according to specified requirements. Specifications act as inputs for the software development process.
The code for any software application is written based on the specifications document.
Verification is done to check if the software being developed has adhered to these specifications at every stage of the
development life cycle. The verification ensures that the code logic is in line with specifications.
Depending on the complexity and scope of the software application, the software testing team uses different
methods of verification, including inspection, code reviews, technical reviews, and walkthroughs. Software testing
teams may also use mathematical models and calculations to make predictive statements about the software and
verify its code logic.
2. It enables software teams to develop products that meet design specifications and customer needs.
3. It saves time by detecting the defects at the early stage of software development.
4. It reduces or eliminates defects that may arise at the later stage of the software development process.
3.15 Metrics:
A software metric is a measure of software characteristics which are measurable or countable. Software metrics are
valuable for many reasons, including measuring software performance, planning work items, measuring
productivity, and many other uses.
Within the software development process, many metrics are that are all connected. Software metrics are similar to
the four functions of management: Planning, Organization, Control, or Improvement.
1. Product Metrics: These are the measures of various characteristics of the software product. The two important
software characteristics are:
1. Size and complexity of software.
2. Quality and reliability of software.
These metrics can be computed for different stages of SDLC.
2. Process Metrics: These are the measures of various characteristics of the software development process. For
example, the efficiency of fault detection. They are used to measure the characteristics of methods, techniques, and
tools that are used for developing software.
Advantage of Software Metrics
Comparative study of various design methodology of software systems.
For analysis, comparison, and critical study of different programming language concerning their
characteristics.
In comparing and evaluating the capabilities and productivity of people involved in software development.
In the preparation of software quality specifications.
In the verification of compliance of software systems requirements and specifications.
In making inference about the effort to be put in the design and development of the software systems.
In getting an idea about the complexity of the code.
In taking decisions regarding further division of a complex module is to be done or not.
In guiding resource manager for their proper utilization.
In comparison and making design tradeoffs between software development and maintenance cost.
In providing feedback to software managers about the progress and quality during various phases of the
software development life cycle.
In the allocation of testing resources for testing the code.
Disadvantage of Software Metrics
The application of software metrics is not always easy, and in some cases, it is difficult and costly.
The verification and justification of software metrics are based on historical/empirical data whose validity
is difficult to verify.
These are useful for managing software products but not for evaluating the performance of the technical
staff.
The definition and derivation of Software metrics are usually based on assuming which are not
standardized and may depend upon tools available and working environment.
Most of the predictive models rely on estimates of certain variables which are often not known precisely.