LECTURE NOTE 1
INTRODUCTION TO SOFTWARE ENGINEERING
‘The term software engineering is composed of two words, software and engineering,
Software is more than just a program code. A program is an executable code, which serves
some computational purpose. Software is considered to be a collection of executable
programming code, associated libraries and documentations. Software, when made for a
specific requirement is called software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific
principles and methods.
So, we can define software engineering as an engineering branch associated with the
development of software product using well-defined scientific principles, methods and
procedures, The outcome of software engineering is an efficient and reliable software product,
IBEE defines software engineering as:
The application of a systematic, disciplined, quantifiable approach to the development,
operation and maintenance of software.
We can alternatively view it as a systematic collection of past experience. The experience is
arranged in the form of methodologies and guidelines. A small program can be written without
using software engineering principles. But if one wants to develop a large software product, then
software engineering principles are absolutely necessary to achieve a good quality software cost
effectively.
‘Without using software engineering principles it would be difficult to develop large programs. In
industry it is usually needed to develop large programs to accommodate multiple functions. A
problem with developing such large commercial programs is that the complexity and difficulty
levels of the programs increase exponentially with their sizes. Software engineering helps to
reduce this programming complexity. Software engineering principles use two important
techniques to reduce problem complexity: abstraction and decomposition. The principle of
abstraction implies that a problem can be simplified by omitting irrelevant details. In other
words, the main purpose of abstraction is to consider only those aspects of the problem that are
relevant for certain purpose and suppress other aspects that are not relevant for the given
purpose, Once the simpler problem is solved, then the omitted details can be taken into
consideration to solve the next lower level abstraction, and so on. Abstraction is a powerful way
of reducing the complexity of the problem. The other approach to tackle problem complexity is
‘his documents avilable roe charge on © studocu
Downloaded by 2070 MD FARHAN (mafarhanatmedS00%@gmall.codecomposition. In this technique, a complex. problem is divided into several smaller problems
and then the smaller problems are solved one by one. However, in this technique any random
decomposition of a problem into smaller parts will not help. The problem has to be decomposed
such that each component of the decomposed problem can be solved independently and then the
solution of the different components can be combined to get the full solution. A good
decomposition of a problem should minimize interactions among various components. If the
different subcomponents are interrelated, then the different components cannot be solved
separately and the desired reduction in complexity will not be realized.
NEED OF SOFTWAREENGINEERING
The need of software engineering arises because of higher rate of change in user requirements
and environment on which the software is working.
+ Large software - It is easier to build a wall than to a house or building, likewise, as the
size of software become large engineering has to step to give it a scientific process.
+ Scalability- If the software process were not based on scientific and engineering
concepts, it would be easier to re-create new software than to scale an existing one.
+ Cost- As hardware industry has shown its skills and huge manufacturing has lower down
the price of computer and electronic hardware, But the cost of software remains high if
proper process is not adapted.
+ Dynamic Nature- The always growing and adapting nature of software hugely depends
upon the environment in which the user works. If the nature of software is always
changing, new enhancements need to be done in the existing one. This is where software
engineering plays a good role.
+ Quality Management- Better process of software development provides better and
quality software product.
CHARACTERESTICS OF GOOD SOFTWARE,
A software product can be judged by what it offers and how well it can be used, This software
must satisfy on the following grounds:
+ Operational
+ Transitional
+ Maintenance
Downloaded by 2070 MD FARHAN (
[email protected])Well-engincered and crafted software is expected to have the following characteristics:
Operational
This tells us how well software works in operations. It can be measured on:
+ Budget
«Usability
+ Efficiency
+ Correctness
+ Functionality
«Dependability
+ Security
«Safety
Transitional
This aspect is important when the software is moved from one platform to another:
«Portability
+ Interoperability
+ Reusability
+ Adaptability
Maintenance
This aspect briefs about how well a software has the capabilities to maintain itself in the ever-
changing environment:
+ Modularity
‘+ Maintainability
+ Flexibility
+ Scalability
In short, Software engineering is a branch of computer science, which uses well-defined
engineering concepts required to produce efficient, durable, scalable, in-budget and on-time
software products
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]LECTURE NOTE 2
SOFTWARE DEVELOPMENT LIFE CYCLE
LIFE CYCLE MODEL
A software life cycle model (also called process model) is a descriptive and diagrammatic
representation of the software life cycle. A life cycle model represents all the activities required
to make a software product transit through its life cycle phases. It also captures the order in
which these activities are to be undertaken. In other words, a life cycle model maps the different,
activities performed on a software product from its inception to retirement. Different life cycle
models may map the basic development activities to phases in different ways. Thus, no matter
which life cycle model is followed, the basic activities are included in all life cycle models,
though the activities may be carried out in different orders in different life cycle models. During
any life cycle phase, more than one activity may also be carried out.
THE NEED FOR A SOFTWARE LIFE CYCLE MODEL
The development team must identify a suitable life cycle model for the particular project and
then adhere to it. Without using of a particular life cycle model the development of a software
product would not be in a systematic and disciplined manner. When a software product is being
developed by a team there must be a clear understanding among team members about when and
what to do. Otherwise it would lead to chaos and project failure, This problem can be illustrated
by using an example. Suppose a software development problem is divided into several parts and
the parts are assigned to the team members. From then on, suppose the team members are
allowed the freedom to develop the parts assigned to them in whatever way they like. It is
possible that one member might start writing the code for his part, another might decide to
prepare the test documents first, and some other engineer might begin with the design phase of
the parts assigned to him, This would be one of the perfect recipes for project failure, A software
life cycle model defines entry and exit criteria for every phase. A phase can start only if its
phase-entry criteria have been satisfied. So without software life cycle model the entry and exit
criteria for a phase cannot be recognized. Without software life cycle models it becomes difficult
for software project managers to monitor the progress of the project.
Different software life cycle models
‘Many life cycle models have been proposed so far. Each of them has some advantages as well as
some disadvantages, A few important and commonly used life cycle models are as follows:
‘* Classical Waterfall Model
Downloaded by 2070 MD FARHAN (
[email protected])© Merative Waterfall Model
‘* Prototyping Model
+ Evolutionary Model
‘© Spiral Model
1. CLASSICAL WATERFALL MODEL
‘The classical waterfall mode! is intuitively the most obvious way to develop software. ‘Though
the classical waterfall model is elegant and intuitively obvious, it is not a practical model in the
sense that it cannot be used in actual software development projects. Thus, this model can be
considered to be a theoretical way of developing software. But all other life cycle models are
essentially derived from the classical waterfall model. So, in order to be able to appreciate other
life cycle models it is necessary to leam the classical waterfall model. Classical waterfall model
divides the life cycle into the following phases as shown in fig.2.1
Classical Waterfall Model
Fig 2.1: Classical Waterfall Model
Feasibility study - The main aim of feasibility study is to determine whether it would be
financially and technically feasible to develop the product
Tice eee © studocu
Downloaded by 2070 MD FARHAN (mdfarhanahmees002@gmailcom)‘© At first project managers or team leaders try to have a rough understanding of what is
required to be done by visiting the client side. They study different input data to the
system and output data to be produced by the system. They study what kind of processing
is needed to be done on these data and they look at the various constraints on the
behavior of the system.
‘© After they have an overall understanding of the problem they investigate the different
solutions that are possible. Then they examine each of the solutions in terms of what kind
of resources required, what would be the cost of development and what would be the
development time for each solution.
‘© Based on this analysis they pick the best solution and determine whether the solution is
feasible financially and technically. They check whether the customer budget would meet
the cost of the product and whether they have sufficient technical expertise in the area of
development.
Requirements analysis and specification: - The aim of the requirements analysis and
specification phase is to understand the exact requirements of the customer and to document
them properly. This phase consists of two distinct activities, namely
‘© Requirements gathering and analysis,
‘© Requirements specification
The goal of the requirements gathering activity is to collect all relevant information from the
customer regarding the product to be developed. This is done to clearly understand the customer
requirements so that incompleteness and inconsistencies are removed
‘The requirements analysis activity is begun by collecting all relevant data regarding the product
to be developed from the users of the product and from the customer through interviews and
discussions, For example, to perform the requirements analysis of a business accounting software
required by an organization, the analyst might interview all the accountants of the organization to
ascertain their requirements. The data collected from such a group of users usually contain
several contradictions and ambiguities, since each user typically has only a partial and
incomplete view of the system. Therefore it is necessary to identify all ambiguities and
contradictions in the requirements and resolve them through further discussions with the
customer. After all ambiguities, inconsistencies, and incompleteness have been resolved and all
the requirements properly understood, the requirements specification activity can start. During
this activity, the user requirements are systematically organized into a Software Requirements
Specification (SRS) document. The customer requirements identified during the requirements
gathering and analysis activity are organized into a SRS document. The important components of
this document are functional requirements, the nonfunctional requirements, and the goals of
implementation.
Downloaded by 2070 MD FARHAN (
[email protected])Design: - The goal of the design phase is to transform the requirements specified in the SRS
document into a structure that is suitable for implementation in some programming language. In
technical terms, during the design phase the software architecture is derived from the SRS
document. Two distinctly different approaches are available: the traditional design approach and
the object-oriented design approach.
‘+ Traditional design approach -Traditional design consists of two different activities; first
a structured analysis of the requirements specification is carried out where the detailed
structure of the problem is examined. This is followed by a structured design activity.
During structured design, the results of structured analysis are transformed into the
software design.
‘* Object-oriented design approach -In this technique, various objects that occur in the
problem domain and the solution domain are first identified, and the different
relationships that exist among these objects are identified. The object structure is further
refined to obtain the detailed design.
Coding and unit testing:-The purpose of the coding phase (sometimes called the
implementation phase) of software development is to translate the software design into source
code. Each component of the design is implemented as a program module. The end-product of
this phase is a set of program modules that have been individually tested. During this phase, each
module is unit tested to determine the correct working of all the individual modules. It involves
testing each module in isolation as this is the most efficient way to debug the errors identified at
this stage,
Integration and system testing: -Integration of different modules is undertaken once they have
been coded and unit tested. During the integration and system testing phase, the modules are
integrated in a planned manner. The different modules making up a software product are almost
never integrated in one shot. Integration is normally carried out incrementally over a number of
steps. During each integration step, the partially integrated system is tested and a set of
previously planned modules are added to it. Finally, when all the modules have been successfully
integrated and tested, system testing is carried out, The goal of system testing is to ensure that
the developed system conforms to its requirements laid out in the SRS document, System testing
usually consists of three different kinds of testing activities:
‘+ a—testing: It is the system testing performed by the development team.
‘+B testing: Itis the system testing performed by a friendly set of customers
‘© Acceptance testing: It is the system testing performed by the customer himself after the
product delivery to determine whether to accept or reject the delivered product.
System testing is normally carried out in a planned manner according to the system test plan
document. The system test plan identifies all testing-related activities that must be performed,
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]specifies the schedule of testing, and allocates resources. It also lists all the test cases and the
expected outputs for each test case.
‘Maintenan faintenance of a typical software product requires much more than the effort
necessary to develop the product itself. Many studies carried out in the past confirm this and
indicate that the relative effort of development of a typical software product to its maintenance
effort is roughly in the 40:60 ratios. Maintenance involves performing any one or more of the
following three kinds of activities:
‘* Correcting errors that were not discovered during the product development phase. This is,
called corrective maintenance.
‘+ Improving the implementation of the system, and enhancing the functionalities of the
system according to the customer’s requirements. This is called perfective maintenance.
* Porting the software to work in a new environment, For example, porting may be
required to get the software to work on a new computer platform or with a new operating
system, This is called adaptive maintenance.
Shortcomings of the classical waterfall model
‘The classical waterfall model is an idealistic one since it assumes that no development error is
ever committed by the engineers during any of the life cycle phases. However, in practical
development environments, the engineers do commit a large number of errors in almost every
phase of the life cycle. The source of the defects can be many: oversight, wrong assumptions, use
of inappropriate technology, communication gap among the project engineers, etc. These defects
usually get detected much later in the life cycle. For example, a design defect might go unnoticed
till we reach the coding or testing phase. Once a defect is detected, the engineers need to go back
to the phase where the defect had occurred and redo some of the work done during that phase
and the subsequent phases to correct the defect and its effect on the later phases. Therefore, in
any practical software development work, it is not possible to strictly follow the classical
waterfall model
Downloaded by 2070 MD FARHAN (
[email protected])2.
ITERATIVE WATERFALL MODEL
LECTURE NOTE 3
To overcome the major shortcomings of the classical waterfall model, we come up with the
iterative waterfall model.
Fig 3.1 : Iterative Waterfall Model
Here, we provide feedback paths for error correction as & when detected later in a phase.
Though errors are inevitable, but it is desirable to detect them in the same phase in which
they occur. If so, this can reduce the effort to correct the bug.
The advantage of this model is that there is a working model of the system at a very early
stage of development which makes it easier to find functional or design flaws. Finding issues
at an early stage of development enables to take corrective measures in a limited budget.
The disadvantage with this SDLC model is that it is applicable only to large and bulky
software development projects.
into further small serviceable increments/modules,
his is because it is hard to break a small software system
Tice eee © studocu
Downloaded by 2070 MD FARHAN (maar3. PRTOTYPING MODEL
Prototype
‘A prototype is a toy implementation of the system. A prototype usually exhibits limited
functional capabilities, low reliability, and inefficient performance compared to the actual
software. A prototype is usually built using several shortcuts. The shortcuts might involve
using inefficient, inaccurate, or dummy functions. The shortcut implementation of a function,
for example, may produce the desired results by using a table look-up instead of performing
the actual computations. A prototype usually turns out to be a very crude version of the
actual system.
Need for a prototype in software development
‘There are several uses of a prototype. An important purpose is to illustrate the input data
formats, messages, reports, and the interactive dialogues to the customer. This is a valuable
mechanism for gaining better understanding of the customer's needs:
‘how the screens might look like
‘how the user interface would behave
«how the system would produce outputs
Another reason for developing a prototype is that it is impossible to get the perfect product,
in the first attempt. Many researchers and engineers advocate that if you want to develop a
good product you must plan to throw away the first version. The experience gained in
developing the prototype can be used to develop the final product.
A prototyping model can be used when technical solutions are unclear to the development
team. A developed prototype can help engineers to critically examine the technical issues
associated with the product development. Often, major design decisions depend on issues
like the response time of a hardware controller, or the efficiency of a sorting algorithm, etc.
In such circumstances, a prototype may be the best or the only way to resolve the technical
issues.
A prototype of the actual product is preferred in situations such as
+ User requirements are not complete
+ Technical issues are not clear
Downloaded by 2070 MD FARHAN (
[email protected])(ort
Evaluation
ico
Requirements
Customer
Satisfied
Cees
Merten)
Nene)
Fig 3.2: Prototype Model
4, EVOLUTIONARY MODEL.
It is also called successive versions model or incremental model. At first, a simple working
model is built. Subsequently it undergoes functional improvements & we keep on adding new
functions till the desired system is built.
Applications:
‘© Large projects where you can easily find modules for incremental implementation, Often
used when the customer wants to start using the core features rather than waiting for the
full software.
‘+ Also used in object oriented software development because the system can be easily
portioned into units in terms of objects.
‘Advantages:
‘+ User gets a chance to experiment partially developed system
‘+ Reduce the error because the core modules get tested thoroughly.
Disadvantages:
© It is difficult to divide the problem into several versions that would be acceptable to the
customer which can be incrementally implemented & delivered
PReSaanant e eanan rene eran © studocu
Downloaded by 3070 MD FARHAN (mé
[email protected])rary
rene
od
Cay
Fig 3.3: Evolutionary Model
Downloaded by 3070 MD FARHAN (mé
[email protected])LECTURE NOTE 4
5, SPIRAL MODEL
‘The Spiral model of software development is shown in fig. 4.1. The diagrammatic representation
of this model appears like a spiral with many loops. The exact number of loops in the spiral is
not fixed. Each loop of the spiral represents a phase of the software process. For example, the
innermost loop might be concerned with feasibility study, the next loop with requirements
specification, the next one with design, and so on, Each phase in this model is split into four
sectors (or quadrants) as shown in fig. 4.1. The following activities are carried out during each
phase of a spiral model.
Alternate
Objective Evaluation
Next Phase
Planning
Product
Development
Release
Fig 4.1: Spiral Model
First quadrant (Objective Setting)
+ During the first quadrant, itis needed to identify the objectives of the phase
+ Examine the risks associated with these objectives.
PReSaanant e eanan rene eran © studocu
Downloaded by 2070 MD FARHAN (mdfarhanahmees002@gmailcom)Second Quadrant (Risk Assessment and Reduction)
+A detailed analysis is carried out for each identified project risk
+ Steps are taken to reduce the risks. For example, if there is a risk that the
requirements are inappropriate, a prototype system may be developed.
‘Third Quadrant (Development and Validation)
+ Develop and validate the next level of the product after resolving the identified
risks.
Fourth Quadrant (Review and Planning)
+ Review the results achieved so far with the customer and plan the next iteration
around the spiral.
+ Progressively more complete version of the software gets built with each iteration
around the spiral.
Circumstances to use spiral model
‘The spiral model is called a meta model since it encompasses all other life cycle models. Risk
handling is inherently built into this model. The spiral model is suitable for development of
technically challenging software products that ate prone to several kinds of risks. However, this
model is much more complex than the other models — this is probably a factor deterring its use in
ordinary projects
Comparison of different life-cycle models
‘The classical waterfall model can be considered as the basic model and all other life cycle
models as embellishments of this model. However, the classical waterfall model cannot be used
in practical development projects, since this model supports no mechanism to handle the errors
committed during any of the phases.
This problem is overcome in the iterative waterfall model. The iterative waterfall model is
probably the most widely used software development model evolved so far. This model is simple
to understand and use, However this model is suitable only for well-understood problems; it is
not suitable for very large projects and for projects that are subject to many risks,
The prototyping model is suitable for projects for which either the user requirements or the
underlying technical aspects are not well understood. This model is especially popular for
development of the user-interface part of the projects.
Downloaded by 2070 MD FARHAN (
[email protected])‘The evolutionary approach is suitable for large problems which can be decomposed into a set of
modules for incremental development and delivery. This model is also widely used for object-
oriented development projects. Of course, this model can only be used if the incremental delivery
of the system is acceptable to the customer.
‘The spiral model is called a meta model since it encompasses all other life cycle models. Risk
handling is inherently built into this model. The spiral model is suitable for development of
technically challenging software products that are prone to several kinds of risks. However, this
model is much more complex than the other models — this is probably a factor deterring its use in
ordinary projects.
The different software life cycle models can be compared from the viewpoint of the customer.
Initially, customer confidence in the development team is usually high irrespective of the
development model followed. During the lengthy development process, customer confidence
normally drops off, as no working product is immediately visible. Developers answer customer
queries using technical slang, and delays are announced. This gives rise to customer resentment.
On the other hand, an evolutionary approach lets the customer experiment with a working
product much earlier than the monolithic approaches. Another important advantage of the
incremental model is that it reduces the customer’s trauma of getting used to an entirely new
system, The gradual introduction of the product via incremental phases provides time to the
customer to adjust to the new product. Also, from the customer's financial viewpoint,
incremental development does not require a large upfront capital outlay. The customer can order
the incremental versions as and when he can afford them.
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]LECTURE NOTE 5
REQUIREMENTS ANALYSIS AND SPECIFICATION
Before we start to develop our software, it becomes quite essential for us to understand and
document the exact requirement of the customer. Experienced members of the development team
carry out this job. They are called as system analysts
‘The analyst starts requirements gathering and analysis activity by collecting all information
from the customer which could be used to develop the requirements of the system. He then
analyzes the collected information to obtain a clear and thorough understanding of the product to
be developed, with a view to remove all ambiguities and inconsistencies from the initial
customer perception of the problem. The following basic questions pertaining to the project
should be clearly understood by the analyst in order to obtain a good grasp of the problem:
+ What is the problem?
+ Why is it important to solve the problem?
+ What are the possible solutions to the problem?
+ What exactly are the data input to the system and what exactly are the data output by the
system?
‘+ What are the likely complexities that might arise while solving the problem?
+ If there are extemal software or hardware with which the developed software has to
interface, then what exactly would the data interchange formats with the external system
be?
After the analyst has understood the exact customer requirements, he proceeds to identify and
resolve the various requirements problems. The most important requirements problems that the
analyst has to identify and eliminate are the problems of anomalies, inconsistencies, and
incompleteness. When the analyst detects any inconsistencies, anomalies or incompleteness in
the gathered requirements, he resolves them by carrying out further discussions with the end-
users and the customers
Parts of a SRS document
+ The important parts of SRS document are:
Functional requirements of the system
Non-functional requirements of the system, and
Goals of implementation
Downloaded by 2070 MD FARHAN (
[email protected])Functional requirement
The functional requirements part discusses the functionalities required from the system. The
system is considered to perform a set of high-level functions (f}. The functional view of the
system is shown in fig. 5.1. Each function f of the system can be considered as a transformation
of a set of input data (j,) to the corresponding set of output data (0). The user can get some
meaningful piece of work done using a high-level function.
Fig, 5.1: View of a system performing a set of functions
‘Nonfunctional requirements:
Nonfunctional requirements deal with the characteristics of the system which cannot be
expressed as functions - such as the maintainability of the system, portability of the system,
usability of the system, etc
Goals of implementation:-
‘The goals of implementation part documents some general suggestions regarding development
These suggestions guide trade-off among design goals. The goals of implementation section
might document issues such as revisions to the system functionalities that may be required in the
future, new devices to be supported in the future, reusability issues, etc. These are the items
which the developers might keep in their mind during development so that the developed system
‘may meet some aspects that are not required immediately.
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]Identifying functional requirements from a problem description
The high-level functional requirements often need to be identified either from an informal
problem description document or from a conceptual understanding of the problem. Each high-
Jevel requirement characterizes a way of system usage by some user to perform some meaningful
piece of work. There can be many types of users of a system and their requirements from the
system may be very different. So, it is often useful to identify the different types of users who
might use the system and then try to identify the requirements from each user’s perspective.
‘Example: - Consider the case of the library system, where —
FI: Search Book function
Input: an author’s name
Output: details of the author's books and the location of these books in the library
So the function Search Book (F1) takes the author's name and transforms it into book details.
Functional requirements actually describe a set of high-level requirements, where each high-level
requirement takes some data from the user and provides some data to the user as an output. Also
cach high-level requirement might consist of several other functions.
Documenting functional requirements
For documenting the functional requirements, we need to specify the set of functionalities
supported by the system. A function can be specified by identifying the state at which the data is
to be input to the system, its input data domain, the output data domain, and the type of
processing to be carried on the input data to obtain the output data, Let us first try to document
the withdraw-cash function of an ATM (Automated Teller Machine) system. The withdraw-cash
is a high-level requirement. It has several sub-requirements corresponding to the different user
interactions. These different interaction sequences capture the different scenarios.
Example: - Withdraw Cash from ATM
Rl: withdraw cash
Description: The withdraw cash function first determines the type of account that the user has
and the account number from which the user wishes to withdraw cash. It checks the balance to
determine whether the requested amount is available in the account. If enough balance is
available, it outputs the required cash; otherwise it generates an error message.
Downloaded by 2070 MD FARHAN (
[email protected])R11 select withdraw amount option
Input: “withdraw amount” option
Output: user prompted to enter the account type
R12: select account type
Input: user option
Output: prompt to enter amount
R13: get required amount
Input: amount to be withdrawn in integer values greater than 100 and less than 10,000 in
multiples of 100.
Output: The requested cash and printed transaction statement.
Processing: the amount is debited from the user’s account if sufficient balance is
available, otherwise an error message displayed
Properties of a good SRS document
‘The important properties of a good SRS document ate the following:
* Concise. The SRS document should be concise and at the same time unambiguous,
consistent, and complete. Verbose and irrelevant descriptions reduce readability and also
increase error possibilities.
© Structured. It should be well-structured. A well-structured document is easy to
understand and modify. In practice, the SRS document undergoes several revisions to
cope up with the customer requirements, Often, the customer requirements evolve over a
period of time. Therefore, in order to make the modifications to the SRS document easy,
it is important to make the document well-structured.
‘+ Black-box view. It should only specify what the system should do and refrain from
stating how to do these, This means that the SRS document should specify the external
behavior of the system and not discuss the implementation issues. The SRS document
should view the system to be developed as black box, and should specify the externally
visible behavior of the system. For this reason, the SRS document is also called the
black-box specification of a system.
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]‘* Conceptual integrity. It should show conceptual integrity so that the reader can easily
understand it,
‘+ Response to undesired events. It should characterize acceptable responses to undesired
events, These are called system response to exceptional conditions.
‘+ Verifiable. All requirements of the system as documented in the SRS document should
be verifiable. This means that it should be possible to determine whether or not
requirements have been met in an implementation,
Problems without a SRS document
‘The important problems that an organization would face if it does not develop a SRS document
are as follows:
'* Without developing the SRS document, the system would not be implemented according
to customer needs.
‘© Software developers would not know whether what they are developing is what exactly
required by the customer.
© Without SRS document, it will be very much difficult for the maintenance engineers to
understand the functionality of the system.
‘+ It will be very much difficult for user document writers to write the users’ manuals
properly without understanding the SRS document.
Problems with an unstructured specification
+ It would be very much difficult to understand that document.
+ It would be very much difficult to modify that document.
+ Conceptual integrity in that document would not be shown.
+ The SRS document might be unambiguous and inconsistent.
Downloaded by 2070 MD FARHAN (
[email protected]SOFTWARE DESI!
Software design is a process to transform user requirements into some suitable form, which
helps the programmer in software coding and implementation
For assessing user requirements, an SRS (Software Requirement Specification) document is
created whereas for coding and implementation, there is a need of more specific and detailed
requirements in software terms. The output of this process can directly be used into
implementation in programming languages,
Software design is the first step in SDLC (Software Design Life Cycle), which moves the
concentration from problem domain to solution domain, It tries to specify how to fulfill the
requirements mentioned in SRS.
Software Design Levels
Software design yields three levels of results:
+ Architectural Design - The architectural design is the highest abstract version of the
system, It identifies the software as a system with many components interacting with
cach other. At this level, the designers get the idea of proposed solution domain,
+ High-level Design- The high-level design breaks the ‘single entity-multiple component”
concept of architectural design into less-abstracted view of sub-systems and modules and
depicts their interaction with each other. High-level design focuses on how the system
along with all of its components can be implemented in forms of modules. It recognizes
modular structure of each sub-system and their relation and interaction among each other.
+ Detailed Design- Detailed design deals with the implementation part of what is seen asa
system and its sub-systems in the previous two designs. It is more detailed towards
modules and their implementations. It defines logical structure of each module and their
interfaces to communicate with other modules.
Modularization
Modularization is a technique to divide a software system into multiple discrete and
independent modules, which are expected to be capable of carrying out task(s) independently.
These modules may work as basic constructs for the entire software. Designers tend to design
modules such that they can be executed and/or compiled separately and independently.
Modular design unintentionally follows the rules of ‘divide and conquer’ problem-solving
strategy this is because there are many other benefits attached with the modular design of a
software,
‘his documents avilable roe charge on © studocu
Downloaded by 2070 MD FARHAN (mafarhanatmedS00%@gmall.coAdvantage of modularization:
+ Smaller components are easier to maintain
+ Program can be divided based on functional aspects
‘+ Desired level of abstraction ca n be brought in the program
+ Components with high cohesion can be re-used again.
+ Concurrent execution can be made possible
+ Desired from security aspect
Concurrency
Back in time, all software were meant to be executed sequentially. By sequential execution we
‘mean that the coded instruction will be executed one after another implying only one portion of
program being activated at any given time. Say, software has multiple modules, and then only
one of all the modules can be found active at any time of execution.
In software design, concurrency is implemented by splitting the software into multiple
independent units of execution, like modules and executing them in parallel. In other words,
concurrency provides capability to the software to execute more than one part of code in
parallel to each other.
It is necessary for the programmers and designers to recognize those modules, which can be
made parallel execution.
Example
The spell check feature in word processor is a module of software, which runs alongside the
word processor itself,
Couplingand Cohesion
‘When a software program is modularized, its tasks are divided into several modules based on
some characteristics. As we know, modules are set of instructions put together in order to
achieve some tasks. They are though, considered as single entity but may refer to each other to
work together. There are measures by which the quality of a design of modules and their
interaction among them can be measured. These measures are called coupling and cohesion.
Cohes
Cohesion is a measure that defines the degree of intra-dependability within elements of a
module, The greater the cohesion, the better is the program design.
nm
Downloaded by 2070 MD FARHAN (
[email protected])‘There are seven types of cohesion, namely —
+ Co-incidental cohesion - It is unplanned and random cohesion, which might be the result
of breaking the program into smaller modules for the sake of modularization, Because it
is unplanned, it may serve confusion to the programmers and is generally not-accepted.
+ Logical cohesion - When logically categorized elements are put together into a module,
it is called logical cohesion.
+ Temporal Cohesion - When clements of module are organized such that they are
processed at a similar point in time, it is called temporal cohesion,
+ Procedural cohesion - When elements of module are grouped together, which are
executed sequentially in order to perform a task, it is called procedural cohesion,
+ Communicational cohesion - When elements of module are grouped together, which are
executed sequentially and work on same data (information), it is called communicational
cohesion.
‘+ Sequential cohesion - When elements of module are grouped because the output of one
element serves as input to another and so on, it is called sequential cohesion.
+ Functional cohesion - It is considered to be the highest degree of cohesion, and it is,
highly expected. Elements of module in functional cohesion are grouped because they all
contribute to a single well-defined function. It can also be reused.
Coupling
Coupling is a measure that defines the level of inter-dependability among modules of a
program. It tells at what level the modules interfere and interact with each other. The lower the
coupling, the better the program.
‘There are five levels of coupling, namely -
+ Content coupling - When a module can directly access or modify or refer to the content
of another module, it is called content level coupling.
+ Common coupling- When multiple modules have read and write access to some global
data, itis called common or global coupling.
+ Control coupling- Two modules are called control-coupled if one of them decides the
function of the other module or changes its flow of execution.
+ Stamp coupling- When multiple modules share common data structure and work on
different part of it, itis called stamp coupling.
+ Data coupling- Data coupling is when two modules interact with each other by means of
passing data (as parameter). If a module passes data structure as parameter, then the
receiving module should use all its components.
Ideally, no coupling is considered to be the best.
Tice eee © studocu
Downloaded by 2070 MD FARHAN (
[email protected]Design Verification
The output of software design process is design documentation, pseudo codes,
detailed logic diagrams, process diagrams, and detailed description of all functional
or non-functional requirements.
The next phase, which is the implementation of software, depends on all outputs
mentioned above.
It is then becomes necessary to verify the output before proceeding to the next
phase. The early any mistake is detected, the better it is or it might not be detected
until testing of the product. If the outputs of design phase are in formal notation
form, then their associated tools for verification should be used otherwise a
thorough design review can be used for verification and validation.
By structured verification approach, reviewers can detect defects that might be
caused by overlooking some conditions. A good design review is important for
good software design, accuracy and quality.