Understanding Software Engineering Basics
Understanding Software Engineering Basics
A discipline whose aim is the production of quality software, that is delivered on time,
within budget, and that satisfies its requirements.
Programs
Documentation
Operating
Procedures
System Overview
Reference guide
Operating
Procedures
Installation guide
Operational
Manuals System administration guide
Software Process: The software process is the way in which we produce software.
This differs from organization to organization. Surviving in the increasingly
competitive software business requires more than hiring smart, knowledgeable
developers and buying the latest development tools. We also need to use effective
software development processes, so that developers can systematically use the best
technical and managerial practices to successfully complete their projects. Many
software organizations are looking at software process improvement as a way to
improve the quality, productivity, predictability of their software development, and
maintenance efforts.
Productivity
Time
Organizations do not manage to achieve significant and lasting improvements in the
way they conduct their projects. Here the reasons why is it difficult to improve
software process.
1. Not enough time
2. Lack of knowledge
3. Wrong motivation
4. Insufficient commitment
Software Characteristics: The software has a very special characteristics, “it does
not wear out”. Its behaviour and nature is quite different than other products of human
life. Some of the important characteristics are discussed below:
1. Software does not wear out: Software becomes reliable overtime instead of
wearing out. It becomes obsolete, if the environment for which it was
developed, changes. Hence software may be retired due to environmental
changes, new requirements, new expectations, etc.
2. Software is not manufactured: The life of a software is from concept
exploration to the retirement of the software product. It is one time
development effort and continues maintenance effort in order to keep it
operational. However, making 1000 copies is not an issue and it does not
involve any cost.
3. Reusability of components: In software, every project is a new project. We
start from the scratch and design every unit of the software product. Huge
effort is required to develop a software which further increases the cost of the
software product. However, effort has been made to design standard
components that may be used in new projects. Software reusability has
introduced another area and is known as component based software
engineering.
Software Crisis: We all feel that software is flexible. A program can be developed to
do almost anything. Sometimes, this characteristic may be the best and may help us to
accommodate any kind of change. However, most of times, this “almost anything”
characteristics has made software development difficult to plan, monitor and control.
This unpredictability is the basis of what has been referred to for the past 30 years as
the “software crisis”.
Hardware versus Software Reliability: There is a well known “Bath tub curve” in
reliability studies for hardware products. The curve is given in figure below. The
shape of the curve is like “Bath tub”, and is known as Bath tub curve.
Burn In Wear out phase
Failure intensity
Time
Figure: Bath tub curve
There are three phases for the life of a hardware product. Initial phase is Burn-in
phase, where failure intensity is high. It is expected to test the product in the industry
before delivery. Due to testing and fixing faults, failure intensity will come down
initially and may stabilise after certain time. The second phase is the useful life phase
where failure intensity is approximately constant and is called useful life of a product.
After few years, again failure intensity will increase due to wearing out of
components. This phase is called wear out phase. We do not have this phase for the
software as it does not wear out. The curve for software is given in figure below:
Failure
intensity
Time
Important point is software becomes reliable overtime instead of wearing out. It
becomes obsolete, if the environment for which it was developed, changes. Hence,
software may be retired due to environmental changes, new requirements, new
expectations, etc.
Project Product
Process
Figure: Factors of management dependency
The people: Software development requires good managers. The managers, who can
understand the psychology of people and provide good leadership quality. A good
manager cannot ensure the success of the project, but can increase the probability of
success. The areas to be given priority are: proper selection, training, compensation,
career development, work culture etc.
The project: A proper planning is required to monitor the status of development and
to control the complexity. Most of the projects are coming late with cost overruns of
more than 100%. In order to manage a successful project, we must understand what
can go wrong and how to do it right. We should define concrete requirements
(although very difficult) and freeze these requirements. Changes should not be
incorporated to avoid software surprises. Software surprises are always risky and we
should minimise them. We should have a planning mechanism to give warning before
the occurrence of any surprise.
Software life cycle models:
Sometimes a product is constructed without specifications or any attempt at
design. Instead, the developer simply builds a product that is reworked as many times
as necessary to satisfy the client.
This is an adhoc approach and not well defined. Basically, it is a simple two-phase
model. The first phase is to write code and the next phase is to fix it as shown in figure
below. Fixing in this context may be error correction or addition of further
functionality.
Build
Code
Fix
Although this approach may work well on small programming exercise but this model
is totally unsatisfactory for software of any reasonable size. Code soon becomes
unfixable and un enhance able. There is no room for design or any aspect of
development process to be carried out in a structured or detailed way. The cost of the
development using this approach is actually very high as compared to the cost of a
properly specified and carefully designed product. In addition, maintenance of the
product can be extremely difficult without specification or design documents.
Water Fall Model: The most familiar model is the waterfall model, which is given in
figure below. This model has eight phases. The phases always occur in this order and
do not overlap. The developer must complete each phase before the next phase begins.
This model is named “Waterfall model”, because its diagrammatic representation
resembles a cascade of waterfall.
Detailed Design
System Design
Coding Testing
Installation Maintenance
Construction Phase: This phase combines the detailed design, coding and testing
phase of waterfall model. Here, we release the product to customer. It is expected to
use code generators, screen generators and other types of productivity tools.
Cutover Phase: This phase incorporates acceptance testing by the user, installation of
the system, and user training.
Prototyping Model: A disadvantage of waterfall model as discussed earlier is that the
working software is not available until late in the process, thus delaying the discovery
of serious errors. An alternative to this is to first develop a working prototype of the
software instead of developing the actual software. The working prototype is
developed as per current available requirements. Basically, it has limited functional
capabilities, low reliability, and untested performance (Usually low).
The developers use this prototype to refine the requirements and prepare the
final specification document. Because the working prototype has been evaluated by
the customer, it is reasonable to expect that the resulting specification document will
be correct. When the prototype is created, it is reviewed by the customer. Typically
this review gives feedback to the developers that helps to remove uncertainties in the
requirements of the software, and starts an iteration of refinement in order to further
clarify requirements as show in figure below:
Requirements
Refinement of
Quick Design
requirements as per
suggestions
Implement
Customer
Evaluation
Not accepted by customer
Accepted by customer
Design
Implementation &
Unit testing
Integration &
System Testing
Operation &
Maintenance
Spiral Model: The problem with traditional software process models is that they do
not deal sufficiently with the uncertainty, which is inherent to software projects.
Important software projects have failed because project risks were neglected and
nobody was prepared when something unforeseen happened. We incorporate the
“Project Risk” factor into a life cycle model. The result is the Spiral model.
The radial dimension of the model represents the cumulative costs. Each path around
the spiral is indicative of increased costs. The angular dimension represents the
progress made in completing each cycle. Each loop of the spiral from X-axis
clockwise through 3600 represents one phase. One phase is split roughly into four
sectors of major activities:
Planning: determination of objectives, alternative and constraints.
Risk Analysis: Analyze alternatives and attempts to identify and resolve
the risks involved.
Development: Product development and testing product.
Assessment: Customer evaluation.
During the first phase, planning is performed, risks are analyzed, prototype are built,
and customer evaluate the prototype. During the second phase, a more refined
prototype is built, requirements are documented and validated, and customers are
involved in assessing the new prototype. By the time third phase begins, risks are
known, and a somewhat more traditional development approach is taken. The figure
below describes the function and structure of the spiral model.
Size Estimation Metric: Here we use to different size estimation metric. Like,
1. Lines of Code (LOC)
2. Function Point Metric (FP metric)
1. Lines Of Code (LOC): LOC is the simplest among all metrics available to
estimate project size. This metric is very popular, being the simplest to use.
Using this metric, the project size is estimated by counting the number of
source instructions in the developed program. Obviously, while counting the
number of source instructions, the lines used for commenting the code and the
header lines are ignored.
Determining the LOC count at the end of a project is a very simple job.
However, accurate estimation of the LOC count at the beginning of a project is
very difficult. So project managers usually divided the problem into modules,
and each module into sub modules and so on, until the sizes of the different
leaf-level modules can be approximately predicted. To be able to do this, past
experience in developing similar products proves helpful. By using the
estimation of the lowest level modules, project managers arrive at the total size
estimation. However, LOC as a measure of problem size has several short
comings:
LOC gives a numerical value of problem size that can vary widely with
individual coding style- different programmers lay out their code in
different ways.
A good problem size measure should consider the overall complexity of
the problem and the effort needed to solve it. i.e., it should consider the
total effort needed to specify, design, code, test etc and not just the
coding effort.
LOC measure correlates poorly with the quality and efficiency of the
code. A larger code size does not necessary imply better quality or
higher efficiency.
2. Function Point Metric: One of the important advantages of using the function
point metric is that it can be used to easily estimate the size of a software
product directly from the problem specification. This is in contrast to the LOC
metric, where the size can be accurately determined only after the product has
fully been developed.
The conceptual idea underlying the function point metric is that the size of a
software product is directly dependent on the number of different functions or
features it supports. A software product supporting many features would
certainly be of larger size than a product with less number of features.
Besides using the number of inputs and output data values, function point
metric computes the size of a software product (in units of function point or
FPs) using three other characteristics of the product as shown in the following
expression. The size of a product in function points (FPs) can be expressed as
the weighted sum of these five problems characteristics were proposed
empirically and validated by observations over many projects. Function point is
computed in two steps. The first step is compute the Unadjusted Function Point
(UFP).
UFP= (Number of inputs)*4 + (Number of outputs)*5 + (Number of
inquiries)*4 + (Number of files)*10 + (Number of interfaces)*10
Once the UFP is computed, the Technical Complexity Factor (TCF) is
computed next. The TCF refines the UFP measure by considering fourteen
other factors. Such as high transaction rates, throughput, and response time
requirements, etc. Each of these 14 factor is assigned a value from 0 (not
present or no influence) to 6 (strong influence). The resulting numbers are
summed, yielding the total degree of influence (DI). Now the TCF is computed
as (0.65+0.01*DI). As DI can vary from 0 to 70, the TCF can vary from 0.65 to
1.35. Finally, FP= UFP* TCF.
But in this section we will discuss only the COCOMO and COCOMO II models in
details.
Risk Identification: The project manager needs to anticipate the risks in the project
as early as possible, so that the impact of the risks can be minimized by making
effective risk management plans. So, early risk identification is important. Risk
identification is somewhat similar to listing down your nightmares.
A project can get affected by a large variety of risks. In order to be able to
systematically identify the important risk which might affect a project, it is necessary
to categorize risks into different classes. There are three main categories of risks
which can affect a software project.
Project Risks: Project risks concern various forms of budgetary, schedule,
personnel, resource and customer related problems. An important project risk is
schedule slippage.
Technical Risks: Technical risks concern potential design, implementation,
interfacing, testing and maintenance problem.
Business Risks: Business risks include risks of building an excellent product
that no one wants, losing budgetary or personnel commitments etc.
Risk Assessment: The objective of risk assessment is to rank the risks in terms of
their damage causing potential. For risk assessment, each risk should first be rated in
two ways:
The likelihood of a risk coming true (r).
The consequence of the problems associated with that risk (s).
Based on these two factors, the priority of each risk can be computed as, p=r x s.
Where p is the priority with which the risk must be handled, r is the probability of the
risk becoming true. If all identified risks are prioritized, then the most likely and
damaging risks can be handled first.
Risk Containment: After all the identified risks of a project are assessed, plans must
be made to contain the most damaging and the most likely risks. Different risks
require different containment procedures.
There are three main strategies used for risk containment:
Avoid the risk: This may take several forms such as discussions with the
customer to reduce the scope of the work, and giving incentives to engineers to
avoid the risk of manpower turnover.
Transfer the risk: This strategy involves getting the risky component
developed by a third party, or buying insurance cover etc.
Risk reduction: This involves planning ways to contain the damage due to a
risk. For example, if there is risk that some key personnel might leave, new
recruitment may be planned.
To choose between the different strategies of handling a risk, the project manager
must consider the cost of handling the risk and the corresponding reduction in risk.
For this, we may compute the risk leverage of the different risks. Risk leverage is the
difference in risk exposure divided by the cost of reducing the risk.
Risk leverage = (Risk exposure before reduction-Risk exposure after reduction)/ Cost
of reduction.
Team Structure: Team structure addresses the issue of organization of the
individual project team. Let us examine the possible ways in which the individual
project teams are organized. In this text, we shall consider only three formal team
structures:
Chief Programmer Team
Democratic Team
Mixed Team
Project Manager
Software Engineering
Except this conventional structure, there is another structure of it which is slightly
different from the above structure. The structure is shown below:
Project Manager
Shadow programmer
Software Engineer
A democratic team structure is suitable for project requiring less than five or six
engineers and for research oriented projects.
Advantages: In this team structure every decision can be taken by a meeting between
the team members. So, for a complex project, this democratic team structure is very
essential.
Disadvantages: Here, every decision taken by all the members. So, for a time bound
project this type of team structure is not good.
3. Mixed team structure: The mixed team organization, as the name implies,
draws upon the ideas from both the democratic organization and the chief
programmer organization. The mixed control team structure is shown in figure
below.
Project Manager
Senior Engg.
Software Engg.
MIS
Database Database
GUI GUI
Activity network and Critical path method: In this topic we try to find out the
critical path from the diagram given below:
Integration &
Specification Test (120)
Task ES EF LS LF ST
Specification 0 15 0 15
Design 15 60 15 60
Database
Design GUI 15 45 90 120
Code Database 60 165 60 165
Code GUI 45 90 120 165
Integrate & 165 285 165
Test
Write User 15 75 225
Manual
Data flow
Process
Level 1 DFD: To develop the level 1 DFD, examine the high level functional
requirements. If there are between three to seven high level functional requirements,
then these can be directly represented as bubbles in the level 1 DFD. We can then
examine the input data to these functions and the data output by these functions, and
represent them appropriately in the diagram.
If a system has more than seven high level requirements, then some of the
related requirements have to be combined and represented in the form of bubble in the
level 1 DFD. These can be split in the lower DFD levels. If a system has less than
three high level functional requirements, then some of the high level requirements
need to be split into their sub functions so that we have roughly about five to seven
bubbles on the diagram.
RMS calculating software: A software system called RMS calculating software
reads three integer numbers from the user in the range between -1000 and +1000 and
determines the root mean square (rms) of the three input numbers and then display it.
The different levels of DFD for the software system mentioned above are given below
in the figure.
USER
Data-items
Display
Validate Comput results
input Valid data e rms rms 0.3
rms 0.1 0.2
Level 2 DFD:
Squar
A e Asq
0.2.1
Square
C 0.2.1 Csq
Classification of Cohesion:
1. Coincidental Cohesion: A module is said to have coincidental cohesion if it
performs a set of tasks that relate to each other very loosely, if at all. In this
case, the modules contains a random collection of functions.
2. Logical Cohesion: A module is said to be logically cohesive, if all elements of
the module perform similar operations, e.g., error handling, data input, data
output etc.
3. Temporal Cohesion: When a module contains functions that are related by the
fact that all the functions must be executed in the same time span, the module is
said to exhibit temporal cohesion.
Classification of Coupling:
1. Data Coupling: Two module are data coupled, if they communicate using an
elementary data items that is passed as a parameter between the two.
2. Stamp Coupling: Two modules are stamp coupled; if they communicate using
a composite data item such as a record in PASCAL or a structure in C.
3. Control Coupling: Control coupling exists between two modules, if data from
one module is used to direct the order of instruction execution in another. An
example of it is a flag set in one module and tested in another module.
Software Quality Assurance: A major aim of SQA is to help an organization
develop high quality software products in a repeatable manner. Traditionally, a quality
product is defined in terms of its fitness of purpose. That is, a quality product does
exactly what the users want it to do. For software products, the fitness of purpose is
usually interpreted in terms of satisfaction of the requirements laid down in the SRS
document.
Product Operation
Product Revision:
Maintainability: A software product is maintainable, if errors can be easily
corrected as and when they show up, new functions can be easily added to the
product and the functionabilities of the product can be easily modified etc.
Flexibility: Flexibility is the ability of software to add/modify/remove
functionalities without damaging current system.
Testability: Quality software requires quality testing. Source code should be
tested with the most coverage and with the most efficient testing methods.
Product Transition:
Portability: A software product is said to be portable, if it can be easily made
to work in different operating system environments, in different machines, with
other software products etc.
Interoperability: Interoperability is the ability of making systems and
organizations to work together.
Reusability: A software product has good reusability, if different modules of
the product can easily be reused to develop new products.
Product Operation:
Correctness: A software product is correct, if different requirements as
specified in the SRS document have been correctly implemented.
Usability: A software product has good usability, if different categories of
users can easily invoke the functions of the product.
Efficiency: Efficiency is the ability of software to support the resource
utilization.
Reliability: Reliability of software product can also be defined as the
probability of the product working correctly over a given period of time.
ISO 9000: The ISO 9000 standard specifies the guidelines for maintaining a quality
system. The ISO 9000 standard mainly address operational aspects and organizational
aspects such as responsibility, reporting etc. i.e., ISO 9000 specifies a set of guidelines
for repeatable and high quality product development.
ISO 9002: It applies to the organizations which do not design product but are only
involved in production. Example of these category industries include steel and car
manufacturing industries.
ISO 9003: It applies to the organizations that are involved only in installation and
testing of the product.
SEI/CMM classifies software development industries into the following five maturity
levels:
1. Initial: A software development organization at this level is characterized by
adhoc activities. Very few or no processes are defined and followed. Since
software production processes are not defined, different engineers follow their
own process and as a result development efforts become chaotic.
2. Repeatable: At this level, the basic project management practices such as
tracking cost and schedule are established. The necessary process discipline is
in place to repeat earlier success on projects with similar applications.
3. Defined: At this level, the processes for both management and development
activities are defined and documented. The processes though defined, the
process and product qualities are not measured. ISO 9000 aims at achieving
this level.
4. Managed: At this level, the focus is on software metrics. Two types of metrics
are collected:
Product metrics: At this metrics, we measure the characteristics of the
product being developed. Such as its size, reliability, time complexity,
understand ability etc.
Process metrics: It reflects the effectiveness of the process being used,
such as productivity, average number of defects found per hour, average
defects correction etc.
5. Optimizing: At this stage, process and product metrics are collected, process
and product measurement data are analyzed for continuous process
improvement.
Code Review:
Code Walk-through: Code walk-through is an internal code analysis
technique. In this technique, after a module has been coded, it is successfully
compiled and all syntax errors are eliminated. Some members of the development
team are given the code a few days before the walk-through meeting to read and
understand the code. Each member selects some test cases and simulates execution of
the code by hand. The main objectives of the walk-through are to discover the
algorithmic and logical errors in the code. The members note down their findings to
discuss these in a walk-through meeting where the coder of the module is also present.
The team performing the code walk-through should not be either too big or too
small. Ideally, it should consist of 3-7 members.
Discussion should focus on discovery of errors and not on how to fix the
discovered errors.
To avoid the feeling among the engineers that they are evaluated in the code
walk-through meeting, managers should not attend the walk-through meetings.
Driver Module
Stub Module
A Stub procedure is a dummy procedure that has the same I/O parameters as the given
procedure but has a highly simplified behaviour. For example, a Stub procedure may
produce the expected behaviour using a simple table look-up mechanism. A Driver
module would contain the nonlocal data structures accessed by the module under test,
and would also have the code to call the different functions of the module with
appropriate parameter values.
Integration Test: The primary objectives of integration testing is to test the module
interfaces in order to ensure that there are no errors in the parameter passing, when
one module invokes another module. There are four different types of integration
testing:
1. Big-bang approach
2. Top-down approach
3. Bottom-up approach
4. Mixed approach.
Suppose, we divide a project in different modules and these modules are in a
hierarchy given below:
B C
D E F G
Test A, B, C,
D, E, F, G
2. Top-Down integration testing: Top-down integration testing starts with
the main routine and one or two subordinate routines in the system. After
the top level ‘skeleton’ has been tested, the immediate subroutines of the
‘skeleton’ are combined with it and tested.
Test Test A, B, C,
Test D, E, F, G
A,B,
A
C
Example:
Test
D
Test
B,D,
E
Test Test
E A,B,C,D,E
,F,G
Test
F
Test
C,F,
Test G
G
Types of error
detected by
testing B
read x, read y
while (x!=y)
if x>y then
x=x-y
else
y=y-x
endif
endwhile
gcd=x
By choosing the test set {(x=3,y=3), (x=4,y=3), (x=3,y=4)}, we can exercise the
program such that all statements are executed at least once.
Edge Coverage Criteria: The edge coverage based testing strategy requires us to
design test case such that all edges of the control flow graph of this program covers at
least once. Therefore, in order to understand the edge coverage based testing strategy,
we need to first understand how the control flow graph of a program can be drawn.
When we try to draw the control flow graph of a program we must know to graphical
representation for the all elements of a program.
Statements: S1, S2
(Tips: For single statement and consecutive any number of statements we just
draw the diagram shown below)
while condition
statement
end while
For (i=1;i<n;i++)
statements
So, the control flow graph for the Euclid’s GCD computation algorithm is,
So, when we try to choose the test cases we does not bother about the numeric values,
we only depends on the condition. In the above GCD program, the conditions are,
While (x!=y)
From it we get, two conditions, x=y and x!=y. From x!=y, we get two more
conditions- one is x>y another is x<y. So the test set consists three conditions,
(x=y, x>y, x<y).
After that we see that when we trace the control flow graph using these test cases, all
of the edges of this control flow graph is covered.
McCabe’s Cyclomatic Complexity Metric: Cyclomatic complexity is a software
metric (measurement). It is quantitative measure of logical strength of the program. It
directly measures the number of linearly independent paths through a program’s
source code. We list three different ways to compute the cyclomatic complexity.
R2
R3
R1
There is two region R1 and R2 and outside of this control flow graph there is an infinite
region R3. So, cyclomatic complexity = 3.
Alternatively, Cyclomatic Complexity = Number of the bounded areas + 1= 2 (R1 and
R2) + 1= 3.
3 1 1
0 1
4
0
5 7
6 8
In this Control flow graph, the starting node is node 1 and the end or destination node
is node 11.
Path 1: 1-2-3-10-11
Path 2: 1-2-3-4-5-6-9-3-10-11
Path 3: 1-2-3-4-7-8-9-3-10-11
So, all the nodes from 1-11 has been covered. So, there is no way to find any other
independent path.
So, Cyclomatic Complexity = Number of independent path = 3.
System Testing: From we integrate different modules of a product to the product is
ready to use, this transformation done by system testing method. The diagram is
shown below:
Performance
Integrated Model Function Test Functioning Test
System
Performing System
Installation Acceptance
System in use Accepting
Test Test
System
Function Test: Here we check all kinds of functional requirements of the project. It is
one kind of black box testing. After completion of function test, the system is called
the functioning system.
Regression Test: Here we check the project with the previously developed product
and analyze which is the better one.
Compatibility Test: Here we test all the modules are compatible with each other or
not.
Security Test: Is any unauthorized user can access the project or not, has been
checked here. After completion of performance test the system is called performing
system.
Acceptance Test: Is the clients can accept the product or not. Here we use two testing
mechanism.
Benchmark test: In benchmark test the client give the developer a test set
(which is benchmark here) and say that if the project passed on this test set, he
buy it, otherwise not.
Pilot test: In pilot test client does not believe on any benchmark, he just used
the product for 7-15 days and give his feedback on it.
Pilot test has two types – Alpha test and Beta test.
Alpha Test: Here day to day testing is done by the own organization people
of the developer.
Beta Test: Here testing done on the client site.
Installation Test: Here developer install the project on client’s site and run it.
Tips: If pilot testing is used, then there is no need of installation test.
Mutation Testing: In mutation testing, the software is first tested by using an initial
test suite built up from different white box testing strategies discussed. After the initial
testing is complete, mutation testing is taken up. The idea behind mutation testing is to
make a few arbitrary changes to a program at a time. Each time the program is
changed, it is called a mutated program and the change effected is called a mutant. A
mutated program is tested against the full test suite of the program. If there exists at
least one test case in the test suit for which a mutant gives an incorrect result, then the
mutant is said to be dead. If a mutant remains alive even after all the test cases have
been exhausted, the test data is enhanced to kill the mutant. The process of generation
and killing of mutants can be automated by predefined a set of primitive changes that
can be applied to the program.
Software Reliability: Reliability of a software product essentially denotes its
trustworthiness or dependability. Reliability of a software product can also be defined
as the probability of the product working correctly over a given period of time.
Hardware Vs Software Reliability: Hardware failures are inherently different from the
software failure. Most hardware failures are due to component wear and tear. To fix
hardware faults, one has to either replace or repair the failed part.
Hardware Reliability: Initially the failure rate is high but decreases as the
faulty components are identified and removed. The system then enters it useful life.
After some time (called the product lifetime) the components wear out, and the failure
rate increases. This gives the plot of hardware reliability over time, and its
characteristics bath tub shape shown in figure below:
Useful life
Failure Rate
Time
Software Reliability: On the other hand, for software the failure rate is at its
highest during integration and testing phases. As the system is tested, more and more
errors are identified and moved resulting in a reduced failure rate. This error removal
continues at a slower pace during the useful life of the product. As the software
becomes obsolete, no more error correction occurs and the failure rate remains
unchanged. Its characteristics are shown in figure below:
Testing
Time
Reliability Metrics: The reliability requirements for different categories of software
products may be different. For this reason, it is necessary that the level of reliability
required for a software product should be specified in the SRS (Software Requirement
Specification) document. In order to be able to do this, we need some metrics to
quantitatively express the reliability of the software product.
1. Rate of occurrence of failure (ROCOF): It measures the frequency of
occurrence of unexpected behaviour. The ROCOF is obtained by observing the
behaviour of a software product in operation over a specified time interval and then
calculating the total number of failures during the interval.
2. Mean Time To Failure (MTTF): MTTF is the average time between
two successive failures, observed over a large number of failures. To measure MTTF,
we can record the failure data for n failures. Let the failure occur at the time instants
t1,t2,.....,tn. Then MTTF can be calculated as,
n
∑ ((ti+1 – ti)/ n-1)
i=1
Technical Feasibility
Operational Feasibility
Economical Feasibility
Suppose, a hardware mention in SRS not available in my country now. So, this is a
technical feasibility problem. Then we can import it from another country, which take
more time as well as cost. That violets the economical feasibility.
In SRS, the clients request portion is designed depends on the meeting with clients. In
this meeting developer mention a method by which the problem has been solved. But
original time we see the method is not the optimal one, so we must change it. This is
operational feasibility problem.