Chapter-1 Introduction To Software Engineering
Chapter-1 Introduction To Software Engineering
Programming
Software Engineering
1. Programming
is
personal 1. Software engineering is essentially a
activity.
2. Program
team activity.
writes
program
programmers, who are not known about inside of the computer. So there was a
development of software crisis having following attributes.
1. software projects were failed
2. Many software projects ware over budget, expensive and unreliable.
3. Many software projects did not satisfy the user requirements.
4. Complexities of software projects were expensive to maintain.
5. Demand for new software projects had increased rather than its
production.
What is software Engineering?
The baseline definition in 1969 by Fritz Bauer as The establishment and use of
sound engineering principles in order to obtain economically, software that is
reliable and works efficiently on real machines.
The Goals of Software engineering are:
1. Improve quality of software products.
2. To increase productivity.
3. To give job satisfaction to software engineers.
Relationship of Software Engineering with other disciplines
The following disciplines provides foundation
1. Computer science
2. Management science
3. Economics
4. System engineering
5. Communication skills.
Computer science gives scientific foundation to the software as engineering is
engineering.
Since software engineering is a team activity it requires technical and
managerial control, which is provided by management science for project
management.
Economics provides the foundation for resources estimation and cost control.
System engineering is concerned with studying complex system. Since software
is a component of such a large system.
A good interpersonal communication skills is very important for
software engineers. Because software engineering is activity within organizational
context and among customers, managers, software engineering engineers.
SOFTWARE CHARACTERISTICS
1. Software engineering is engineering is engineered, not manufactured
software engineering is a logical, than a physical element.
2. High quality software engineering development can be achieved by good
design. Software engineering is not subject to manufacturing problems.
3. Software engineering does not wear out
There are no spare parts of software which can be plug into, when software
fails. A software engineering must be reengineered to remove software
engineering failures. All software failures are caused by design faults.
Off the shelf components: These are components developed by the team for
a past project.
components)
A Well-Engineered S/W?
A well engineered S/W system should have the following attributes:
S/W must be easy to maintain.
S/W must be reliable & efficient
S/W must provide an appropriate user-interface.
&
software
systems.
The
software
designers
design
maintenance
requires
modification
because
of
change
in
Meaning of process
Process is a step involving activities and resources that produce a needful
output. Concerned to software development, a process is called as life cycle,
because it is a set of tasks performed to develop the software.
A process comprised of tools and techniques to develop a product, which
should be documented and practiced which helps us to examine, understand and
improve the activities.
It also helps us to learn from the past development projects, to develop
more qualitative products than previous. It enables us to pass the experiences of
project to others.
The software development usually involves steps
Feasibility study
System design
Unit testing
Integration testing
System testing
Maintenance
5
Where each stage is a process or processes each has activities such as constraints
inputs, outputs and resources.
For example, requirement analysis look like a single process, but it is a collection
of
activities
i.e.
budget
and
scheduling
the
production,
collecting
the
WATERFALL MODEL:
The model is used by US defense. The beginning of a stage is after the
completion of previous stage. Thus providing completeness and consistency
Requirements
Analysis
System Design
Program Design
Codin
g
Unit & Integration
Testing
System Testing
Acceptance
Testing
Operation &
Maintenance
Disadvantages:
Next stage begins after completion of previous stage, which looks quite
difficulty.
Implementation is ignored.
2. PROTOTYPING MODEL:
Prototype is a partially developed product with key requirements of project,
which enables customer and developers to examine proposed system and decide it
is suitable for the product or not.
Before starting actual project, a working prototype is built. It is toy
implementation of the system with limited functionality and low reliability. This
helps
developers
to
pick
from
alternatives
for
the
project
and
better
Requirments Gathering
Refine Requirments
3. A prototype
modification is faster and cheaper than modification of final
Customer
software.
Suggestions
Disadvantages
Design
Maintenance
3. PHASED DEVELOPMENT
Cycle time: The time between the requirements documents was written and the
time the system was delivered to the customer.
In early days, the cycle time is higher, since users are lesser. But todays
business environment can not tolerate this long delay. So the phased development
module was used to reduce the cycle time.
In this model, system is designed so that it can be delivered in pieces,
enabling the users to have some functionality, while the rest is being developed.
Thus, production and development system are both running simultaneously.
Development System: The system which is next version that is developed to
replace current production system.
We refer to this system by release numbers developers build release 1, test
it and submit to users as first operational system. As the users release 1,
developers were building the release 2. Thus developers are working on N + 1
release while N is operational.
Developers
Build Release 1
Build Release 2
Build Release 3
Time
Users
Use Release 1
Use Release
2
9
Use Release 3
Incremental
Development
Iterative
Development
10
SPIRAL MODEL
Boehm (1988) viewed the software development process in terms of risks
and suggested the spiral model to minimize and control risk.
Here, the concept of operations document is prepared before the
development process begins, which contains an initial plan to evaluate risks to
describe how the system should work.
From that document, a set of requirements are specified and checked for
the complete and correctness.
11
Advantages:
1. Similarity to incremental & iterative model, but major focus on risks.
2. Each cycle has fixed number of activities.
3. The interesting idea used is customer communication and planning.
4. Customer evaluation is higher.
12
Disadvantages:
1. When to stop is not clear.
2. Lack of risk experts.
3. Technical difficulty must be solved at design stage not at the testing stage.
13
CHAPTER -2
SOFTWARE PROJECT PLANNING
Software Management:
The applications of knowledge, skills, tools and techniques to project
activities, in order to meet or exceed user needs and expectations of customer
from a project.
The software brooks stated that project management is an activity of
making visible which is invisible.
They also noted that processes and products of software project has certain
characteristics:
1. Invisibility: The software development is a logical work rather than physical,
the progress is invisible.
2. Complexity: The complexity of software project is higher than other
engineering works.
3. Flexibility: The software system has to be more flexible, since it has to
accommodate with physical or organizational structure and other components.
4. Standard process: The software development process is to be followed by
project managers to meet required standard of product.
They have to monitor the progress on time and within cost estimation.
15
requirements,
performance
requirements
for
hardware,
firmware, software and user interfaces. They should specify standards and quality
assurance standard for project and product.
The quality requirements are:
16
17
is
having
limited
functionality,
low
reliability
and
poor
performance.
When recommending a strategy, document is written defining reasons for
rejecting other strategies and justification of proposed strategy.
A solution strategy should include a priority list of product features .Since
at development cycle there may be some change, where we can indicate available
feature in priority list. Product priority is very useful is planning successive
versions to be built later.
a. People
c. Effort Resource,
c. Special Resources
6. Staff Organization
a. Team Structure
a. Risk Analysis
b. Management Reporting
b. Risk Identification
c. Risk Estimation
8. Miscellaneous plans
a. Process Tailoring
4. Schedule
b. Quality Assurances
c. Configuration Management
e. System Testing
CHAPTER-3
SOFTWARE REQUIREMENT
SPECIFICATION
19
21
The client doesnt know about software or software development & the
developers dont understand clients problem & application area. Hence there is a
communication gap between client & developers. Thus, SRS act as a bridge
between this communication gaps.
A good SRS should satisfy all parties. SRS also helps clients to understand
their needs.
Safety requirements
11)
6) Verification requirements
1) Functional Requirements:
This is a subset of overall system requirements. This consider trade-offs
(hardware & software) & also describes how the system operates under normal
conditions & response to software failures OR invalid inputs to system.
2) Performance Requirements:
This can be stated in measurable value i.e., rate, frequency, speeds & levels.
This can be extracted from system specifications.
3) Interface Requirements:
This
can be
specified
separately
These
6) Verification Requirements:
This specifies how customer accepts after completion of project. This specifies
how functional & performance requirements to be measured. This also states,
whether tests are to be staged or only under completion of the project and also
whether a representative of clients company should present or not.
7) Acceptance Testing:
This provides details of tests to be performed for customer acceptance in
document.
8) Documentation Requirements:
This specifies what documents are to be supplied to client, either through
the project OR at the end of the project. The document & other relevant
documentation
9) Quality Requirements:
This specifies whether product should meet international or local
standards. The quality factors are: Correctness, reliability, efficiency, integrity,
usability, maintainability, flexibility, portability, reusability
10) Safety Requirements:
23
Chapter-4
SOFTWARE COST ESTIMATION
Estimation of cost of the software products is an important task. There are
many factors which influence on cost of a software products development and
maintenance.
The primary cost factors are:
a) Programmer ability & familiarity of application area
25
b) Complexity of product
c) Size of the product & available time
d) Required level of reliability
e) Level of technology used
f) Familiarity & availability of technology.
1) PROGRAMMER ABILITY:
In 1968, Harold sack man conducted an experiment on colleges, to
determine influence of batch & time shared access on programmers productivity.
Twelve well experienced programmers were given with two programming
problems to solve. They have resulted that differences in individual performance
among programmers were much greater than batch.
On small projects (5 people) individual difference in ability is significant,
but for the large project that is not significant, cost is less when project involves
best programmers.
2) PRODUCT COMPLEXITY:
There are 3 categories of S/W products.
1. Application programs: Database processing or scientific programs
Usually application programs are developed using programming language
compiler such as C or PASCAL.
2. Utility programs: Compilers, linkers, loaders
Utility programs interacts with operating software management provides user
processing environment.
3. System programs: DBMS, operating systems, real-time system.
System Programs interacts directly with hardware,
Brooks states that writing utility programs is 3 times difficult than to write
application programs. System programs are 3 times difficult to write as utility
programs. Then complexity is
Application (1): utility (3): system programs (9)
Boehm, use three levels of complexity & gives equations to find programmer
months (pm) effort. In terms of thousands of delivered instructions (KDSI).
Application programs:
pm=2.4*(KDSI)**1.05
26
Utility programs:
pm=3.0*(KDSI)**1.12
System programs:
pm=3.6*(KDSI)**1.20
hardware
also
influence
on
programmer
productivity,
since
27
Requirements
Specification
Database
Part
Design
Graphical
Interface part
Coding
28
Database
Part
Test
Graphical
Interface part
Document
5) Activity Networks:
WBS representing interdependencies of various tasks, where as activity
network shows both interdependencies & also estimated duration.
Rectangular nodes represent tasks & duration shown alongside of each
task. WBS & activity networks are used for cost estimation.
6) Heuristics Techniques:
This technique uses mathematical expressions to mode the project
parameters. The heuristic estimation models divided into 3 classes,
Static multivariable
Static
single
variable
model
provides
mean
to
estimate
different
Resource = c1 x ed1
E previously estimated characteristic of S/W.
Resource to be predicted, i.e, effort, duration, staff size, etc
c1, d1 Constants derived by past experience.
The example is COCOMO model.
COCOMO MODEL
Constructive cost Estimation model was proposed by Boehm. He postulates
three classes of products:
1) Organic products Application programs (Data processing & scientific)
2) Semi- detached Utility programs ( Compilers, Linkers)
3) Embedded System programs
Boehm introduces three forms of COCOMO:
29
1) Basic COCOMO:
Computes development effort & cost, given program size in estimated lines of
code.
2) Intermediate COCOMO:
Computes effort as function of program size & various cost drivers that relates
to product, hardware, personnel, & project attributes
3) Advanced COCOMO:
This model incorporates all intermediate model characteristics with an
assessment of cost drivers impact on each step of Software engineering
process.
ab, cb co-efficients
bb, db components are in table.
From E & D, we can compute no of peoples required for project N, by equation, N
= N / D [People]
Software project
Organic
Semi-detached
Embedded
ab
2.4
3.0
3.8
bb
1.05
1.12
1.20
Cb
2.5
2.5
2.5
db
0.38
0.35
0.32
Intermediate COCOMO
This is an extended model with a set of cost drivers. The equation is
E= ai(LOC) exp(bi) x EAF
EAF effort adjustment Factor (range 0.9 1.4)
E- Effort applied in person months
ai
3.2
3.0
2.8
bi
1.05
1.12
1.20
DESCRIPTION
Required software reliability
Database size
Product complexity
Execution time constraints
Virtual machine volatility degree to which the
TURN
ACAP
Analyst capability
AEXP
Application experience
PCAP
Programmer capability
VEXP
Virtual machine (i.e operating system) experience
LEXP
Programming language experience
MODP
Use of modern programming practices
TOOL
Use of software tools
SCED
Required development schedule.
Staffing level estimation:
Modern studied different staffing patterns of different R & D projects and
uses Raleigh curve for staffing estimation.
This is the simplest way to determine numbers of software engineers is to
divide effort estimation. This is an important since all phases of development
doesnt require constant number of engineers. If a constant number of engineers
E=K/td2 x t x exp[-t2/2td2]
used may cause some phases will be over staffed and some under staffed.
He derived an equation
Where E- effort required at time t. This is also an indication of no of engineers at
particular time.
K Area under curve.
td- Time at which curve attains max, value.
E=K/td2 x t x exp[-t2/2td2]
Effort
Td=Design Time
Td
Time
32
Putnam studied staffing problem of software projects and says that Raleigh.
Modern curve can be used to relate the number of delivered lines of code to effort
and development time.
Putnam estimation model is a dynamic multivariable model. The derives an
equation.
L= CkK1/3 ta
4/3
CHAPTER-5
SOFTWARE DESIGN
This is the step of moving form problem domain towards solution domain.
Input to this stage is the SRS (Software Requirement Specification) document and
output of this stage is architecture design of system to be build.
Design is the stage in software development, which produces a model or a
representation of a system, which is used to build the system.
The design specification must be language independent and used in
implementation and testing.
Design objectives:
The major goal of this stage is to provide a best possible design, within
limitations by requirements, by social and physical environment constraints. The
criteria used to evaluate design are
1. Verifiability
a) Completeness
b) Consistency
c) Efficiency
2. Traceability
a) Simplicity / understandability
33
Architectural design:
The steps involved are:
a) system structuring: The system structure is decomposed into major
subsystems and each subsystem is an independent software product
b) Control modeling: The control relationship between different parts of
system is designed.
c) Modular decomposition: Decomposition of each subsystem into modules
and their interconnections.
34
Design Concepts
The design concepts are used to reduce the complexity of design process
and also reduce the errors that are introduced in the design stage.
Partitioning:
Partitioning process focuses on defining a large problem into number of
smaller tasks. That is termed as Fine grained decomposition of a problem.
A good partitioning divides problem into smaller pieces, both computation
and data associated with the problem is called domain decomposition.
The functional decomposition is an approach of first decomposing
computation and then data.
Abstraction:
Abstraction is a tool, that designer has to consider a component at an
abstract level without worrying the implementation details of the component.
Abstraction describes external behavior of system without bothering its internal
details.
Abstraction is the most important, since at this stage the component
doesnt exist. There are two abstract mechanisms are:
1) Functional abstraction: In this a model is specified with its function it
performs. For ex: searching of an element is specified as searching
2) Data abstraction: This is a process of binding data together with the
operations that can be performed on it. This technique is helpful in
35
preventing misuse of data from external objects. This is the basis for object
oriented design.
Information hiding:
In this approach, each module in the system hides the internal details of its
processing activities and modules communicate only through well defined
interfaces.
The information hiding includes:
a. Data abstraction
b. Control abstraction ( format of control blocks, queues, stacks)
c. Character codes
d. Machine dependents details
Structure:
The general fro of system structure is network. The design represents
network as directed graph, consists of nodes and arcs. Nodes representing
processing element that transform data and arcs represents link between nodes.
2)
Data coupling: In this coupling, only data will be passed from one
module to another.
3)
4)
5)
6)
Cohesion:
Cohesion of a module represents how tightly bound the internal elements of
the module to one another. This is an intra-module concept
There are different levels of cohesion, they are
1)
2)
3)
4)
5)
6)
7)
Design Notations
38
Pseudo
code:
pseudo
code
is
like
flow
charts.
They
describe
system
Process Id
Location of
Process
39
2. Data flows:
A data flows can be represented by an arrow depicts data flowing form one
process to another. The arrow head shows directions of flow and with a label as
identification.
3. Data stores:
A data store is a computer file, a manual record or a pile of documents. It
is a collection of related information a telephone book, patient records student
records.
ID
Sink name
A sink is a one which receives information form the information to the system. An
external entities are people, place, a manager a sales department
5. DFD leveling:
DFDs allows analyst or user to look a system at different levels of details.
DFD leveling is a practice where a DFD depend on its details into set of DFDs.
The DFD depend on its detail representation called as level 2 diagrams. If
necessary it is possible to design level 3 and level 4 etc for more detailed
representation.
Context diagrams (level 0 DFD):
40
process to from 3 to 10
Structured Charts:
This is used in functional oriented design. The structure of a program is
made up of modules and their interconnections.
A structured chart is a graphical representation of structure of a problem.
In this module is represented by a box, with its name. The flow of data
parameters are represented by arrows. The parameters can be shown as data by
unfilled circle of the arrow.
The invoking (calling) function is called superiordinates and called
function is called subordinate
Main
a, n
Read nums
Sum
Sort
Add - n
x, y
x, y
Swap()
Iteration
Decision
Design techniques
42
is
1. Stepwise refinement:
This is a top-down technique for decomposing a system from highlevel
specifications into more elementary levels. This is also called as stepwise
program development and successive refinement. This is originally descried by
WIRTH (WIR71).
This technique involves following activities:
1. Decomposing design decisions to elementary levels
2. Isolated design aspects that are not truly interdependent
3. Demonstrating each step as an explosion of previous step.
4. postponing design decisions
In each step postponing design decisions as long as possible provides
designer to build consistent design. The input to this technique is software
requirement specification and external deign. The problem is decomposed into few
43
major processing steps and process is repeated until each part of system contains
sufficient detail can be executed in programming language straightly.
This technique uses structured charts and pseudo code for representation,
pseudo code is consists as refinement proceed.
This technique makes problem into small, manageable pieces with
sufficient amount of detail, which can be learned at a particular time is
minimized. Hence designer makes proper time to proper concerns of the problem..
The success of this technique is purely depend upon understanding of the
problem and ability of design
2. Levels of Abstraction :
Described by dijkstra as for bottomup approach of design, he considers an
operating system design of layers (levels).
Each level of abstraction includes group of functions some functions are
externally visible i.e. invoked by function on higher levels of abstraction, some fins
are internal which can be invoked only by functions of the same level. Internal
functions are hidden to other levels.
The functions of higher level cannot be used by functions at lower level.
Thus function usage makes levels of abstraction.
Each level performs set of services to functions at next higher level. each
level uses certain resources such as Input / output devices , data structures ,
which are not permitted to access by other level .
Levels of abstraction in T.H.E operating system
Level 0
Level 1
Level 2
Level 3
I/O Buffering
Level 4
User programs
Level 5
Operator
This methodology though that overall activities is to identify the input and
output and the primary transformation by the software system. The primary
attention is given on the transformation process function. The goal of SDM is to
reduce coupling between models and enhance in different models. The
documentation tool used is structured charts.
The following are the major steps are:
1. Restate problem as DFD
2. identify input and output
3. first level factoring
4. factoring of input , output and transform branches
most specified
a subordinate
First level factoring is high level structure where subordinate module has
to do more than it look , hence in this stage , in more detail the input output
and central transformation is described. This step is nothing but more detailed
representation of factoring.
46
CHAPTER-6
CODING
This is the phase where you can see actual development of software
product. Coding is the phase where design is translated into some programming
language instructions. The goal of this phase is to reduce the work of tester and
maintainer. The programs constructed must be easy to write, read and
understand. The criterias used to judge a program as good are
1. readability
2. Program size
3. execution time
4. Required memory
The primary goals of coding are understandability and modifiability.
Structured coding technique
This technique is told as go-to less programming. The program has a
static structure I as well as dynamic. Static structure is the structure of the text
of program. Which is a liner organization of statements of program are executed
during execution. if the statements are linear then it is helpful in verification .
The program must have single exit and single entry.
Data encapsulation:
This involves the process of packaging of data structures and its access
routines in a single module. The data structure can only be accessed by access
routines. Routines are not known about the details of data structure. Thus forms
an abstract data type (objectives) an abstract data type is a user defined template
47
Coding Style
The
coding
style
enhances
the
readability
maintainability
and
Names: The module and variable names used must be appropriate to its
function that it performs the length names usage is not a good practice. The
names should be short, precise and closely reflect their activity. The
appropriate names helps in the referencing
2.
Control constructs: Single entry and single exit control statement must
be used fewer standard constructs must be used is desirable rather than
using a verify of control constructs , more control constructs may decrease
program understandability .
3.
48
6. Nesting: Control constructs can be nested, but the nesting should not be
deep, which decease understandability of program. Hence deep nesting
must be avoided , which leads to different to understand
7. Module size: less size models (less than 5 statements) will be unnecessary,
since compiler has to perform more actions when accessing a module and a
large size module will be less functionally cohesive.
8. Module interface: A module having complex interface must be examined.
Simple interface must be used. The parameters should not be more than 5 ,
since there may be difficulty in understanding
9. Program Layout: The program must be organized and presented well to
increase readability. proper indentation , blank spaces and program
automated tools it is a good practice to make clear layout of program
10. Side effects: A module function should not modify other module data or
function; the global data should be handled carefully by the modules. if a
module has side effects it should be documented ,
Internal documentation:
Internal documentation i.e. some statements about particular data or
function written in the program should be used to make better understandability.
Comments are statement used for this purpose in the program, which are not
executed but held within the program
Comments of module as called prologue of the module.
Verification:
This is the process of detecting errors introduced during coding. The goal is
to show the consistency of the code with the design.
Code Reading:
This is a process of careful reading the program by programmer to detect
any errors/ inconsistencies between design specification & implementation.
This also checks for abstraction of a module with design specification. This
is a process starting from inner-most structure towards abstract; specification of
a module code reading is useful, economical & can detect errors which are not
detected at testing.
Static Analysis:
Analysis of program by analyzing program text is called static analysis.
Some tools are used mechanically to detect errors. The program is not executed,
but program test is an input to the tools.
The aim of this analysis is to detect errors, potential errors (logical errors)
or generate information about structure of program for better documentation &
understanding the program.
Static analysis is very cost-effective. & determine violation of standard
programming standards. This process can reduce the effort of testing.
This also finds data flow anomalies, which is not detected by compiler.
Data flow anomalies are caused by carelessness in typing, error in coding. An
example for data flow anomalies is a variable is assigned a value but not used in
program later. Other examples are unreachable code, unused variables &
unreferenced labels. These are not technical errors but may cause inefficient
programs.
Code reviews:
50
Code review is done after code writing is completed, compile & passed out
of static analysis to detect errors.
The review is team includes programmer, designer & tester. The aim of
review is to detect errors that fail to implement design. This may be due to usage
of different module, interface that is not specified in the design.
unreachable code ,
operations
computations
and
computations
incorrect
access
of
errors:
array
Includes
components
defects
,
improper
CHAPTER-7
Testing and Maintenance
in
The verification and validation techniques are used to access and improve
quality of products this also checks for quality attributes such as correctness,
completeness, reliability, usefulness, efficiency, standards and over all cost
effectiveness.
specifications
implementation
include
requirement
language
standards,
specification,
project
design
standards,
53
Activities Performed
1. SQA plan is prepared according to document procedure at project planning
2. Activities performed as per plan
a. Responsibilities and authorities of SQA group
b. Staff , tools and facilities requirements of SQA group
c. Schedule and fund of SQA group activities
d. SQA group participation in planning , standards
e. its and reviews performed by SQA group
f. procedures to be used for documentation
g. Documentation to be produced by SQA group
3. Participation of group in preparation and review of plan standards and
procedures
4. verification of compliance of product by reviewing
participant
of
Debugging:
Debugging is the process of isolating and correcting causes of known
errors. Debugging methods include induction, deduction and backtracking.
Backtracking involves moving back from where error is observed, to the
actual error caused point.
Traditional debugging techniques are diagnostic output statements, snapshot dumps, selective traces on data values and control flow and instruction
breakpoints.
Integration testing:
Integration or subsystem testing is concerned with verifying design and
requirements. Units are integrated by a pre-defined strategy such as bottom-up or
top-down strategy.
The growing system and interfaces are checked for compatibility. i.e.,
function parameters tested for order and type.
System and acceptance testing:
56
System and acceptance testing concerns with the execution of test cases to
evaluate whole system with respect to requirements of user.
An acceptance testing is the process of executing test cases agreed with
customers as adequate representation of user requirements. This is called as
Black Box Testing.
Functional testing:
Functional testing is a black-box technique to verify functions are written
correctly and perform required operation.
Software Maintenance
Maintenance costs more than the budget of overall development process.
Somerville states that maintenance costs in between 1 and 4 times of
development costs.
Software maintenance is the process of changing a system after it has been
delivered to client and is in use.
The process begins with problem report or a modification request by users.
Thus, software maintenance can be defined as Process of changing of a system to
maintain its ability to survive.
Three types (categories) of software maintenance are:
1. Corrective maintenance:
This process is concerned with fixing reported errors in the software. Where
coding errors are cheaper to correct and design errors are expensive as new
programs to be written. Requirement errors are most expensive since system has
to be redesigned from the beginning.
2. Adaptive maintenance:
This concern with the process of changing software to new environment
such as different hardware platform or operating system.
3. Perfective maintenance:
This process involves implementing new features on customer demands.
57
58