Unit 5

Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

Software Maintenance:

Software maintenance is a part of the Software Development Life Cycle. Its primary goal is to modify
and update software application after delivery to correct errors and to improve performance.
Software is a model of the real world. When the real world changes, the software require alteration
wherever possible.
Software Maintenance is an inclusive activity that includes error corrections, enhancement of
capabilities, deletion of obsolete capabilities, and optimization.
It is the process of modifying the software after it has delivered to customer.
Need for Maintenance:
Software Maintenance is needed for:-
1. Change in user requirement with time
2. Changing hardware/software requirements
3. To improve system efficiency
4. To optimize the code to run faster
5. To modify the components
6. To reduce any unwanted side effects.
7. Correct errors
8. Interface with other system
9. improve the design.
Thus the maintenance is required to ensure that the system continues to satisfy user requirements.
Types of Software Maintenance:
1. Corrective Maintenance
Corrective maintenance aims to correct any remaining errors regardless of where they may cause
specifications, design, coding, testing, and documentation, etc.
it is the maintenance in which we found a bug and try to remove and fix the issue instantly .it is
an essential type of maintenance which we must perform instantly , or the software will stop its
regular working.
2. Adaptive Maintenance
It contains modifying the software to match changes in the ever-changing environment.
May be user was using windows now he is planning to move on Mac OS . He may ask you to
some perform some adaptive change in the s/w that’s the adaptive maintenance.
3. Preventive Maintenance
It is the process by which we prevent our system from being obsolete. It involves the concept of
reengineering & reverse engineering in which an old system with old technology is re-engineered
using new technology. This maintenance prevents the system from dying out.
In this category we always try to predict the problems that can create issue for us in future and
we try to over come those problem in advance.
4. Perfective Maintenance
It defines improving processing efficiency or performance or restricting the software to enhance
changeability. This may contain enhancement of existing system functionality, improvement in
computational efficiency, etc.
New features keep coming in the field of IT and software. You must keep your software
compatible with the new features to do that you perform perfective maintenace.
Causes of Software Maintenance Problems:
1.Lack of Traceability
Codes are rarely traceable to the requirements and design specifications.
It makes it very difficult for a programmer to detect and correct a critical defect affecting
customer operations.
Like a detective, the programmer pores over the program looking for clues.
Life Cycle documents are not always produced even as part of a development project.
2.Lack of Code Comments
Most of the software system codes lack adequate comments. Lesser comments may not be
helpful in certain situations.
3.Obsolete Legacy Systems
In most of the countries worldwide, the legacy system that provides the backbone of the nation's
critical industries, e.g., telecommunications, medical, transportation utility services, were not
designed with maintenance in mind.
They were not expected to last for a quarter of a century or more!
As a consequence, the code supporting these systems is devoid of traceability to the
requirements, compliance to design and programming standards and often includes dead, extra
and uncommented code, which all make the maintenance task next to the impossible.
Software Maintenance Process :
1.Program Understanding
The first step consists of analyzing the program to understand.
2.Generating a Particular maintenance problem
The second phase consists of creating a particular maintenance proposal to accomplish the
implementation of the maintenance goals.
3.Ripple Effect
The third step consists of accounting for all of the ripple effects as a consequence of program
modifications.
4.Modified Program Testing
The fourth step consists of testing the modified program to ensure that the revised application
has at least the same reliability level as prior.
5.Maintainability
Each of these four steps and their associated software quality attributes is critical to the
maintenance process. All of these methods must be combined to form maintainability.
Software Maintenance Cost Factors
There are two types of cost factors involved in software maintenance.
These are
a) Non-Technical Factors
b ) Technical Factors
1. Application Domain
If the application of the program is defined and well understood, the system requirements may be definitive
and maintenance due to changing needs minimized.
If the form is entirely new, it is likely that the initial conditions will be modified frequently, as user gain
experience with the system.
2. Staff Stability
It is simple for the original writer of a program to understand and change an application rather than some
other person who must understand the program by the study of the reports and code listing.
If the implementation of a system also maintains that systems, maintenance costs will reduce.
In practice, the feature of the programming profession is such that persons change jobs regularly. It is
unusual for one user to develop and maintain an application throughout its useful life.
3. Program Lifetime
Programs become obsolete when the program becomes obsolete, or their original hardware is replaced, and
conversion costs exceed rewriting costs.
4. Dependence on External Environment
If an application is dependent on its external environment, it must be modified as the climate changes.
For example:
Changes in a taxation system might need payroll, accounting, and stock control programs to be modified.
Taxation changes are nearly frequent, and maintenance costs for these programs are associated with the
frequency of these changes.
A program used in mathematical applications does not typically depend on humans changing the
assumptions on which the program is based.
5. Hardware Stability
If an application is designed to operate on a specific hardware configuration and that configuration does not changes
during the program's lifetime, no maintenance costs due to hardware changes will be incurred.
Hardware developments are so increased that this situation is rare.
The application must be changed to use new hardware that replaces obsolete equipment.
Module Independence
It should be possible to change one program unit of a system without affecting any other unit.
Programming Language
Programs written in a high-level programming language are generally easier to understand than programs
written in a low-level language.
Programming Style
The method in which a program is written contributes to its understandability and hence, the ease with
which it can be modified.Program Validation and Testing
Generally, more the time and effort are spent on design validation and program testing, the fewer bugs in
the program and, consequently, maintenance costs resulting from bugs correction are lower.
Maintenance costs due to bug's correction are governed by the type of fault to be repaired.
Coding errors are generally relatively cheap to correct, design errors are more expensive as they may include
the rewriting of one or more program units.
Bugs in the software requirements are usually the most expensive to correct because of the drastic design
which is generally involved.
Documentation
If a program is supported by clear, complete yet concise documentation, the functions of understanding the
application can be associatively straight-forward.
Program maintenance costs tends to be less for well-reported systems than for the system supplied with
inadequate or incomplete documentation.
Configuration Management Techniques
One of the essential costs of maintenance is keeping track of all system documents and ensuring that these
are kept consistent.
Effective configuration management can help control these costs.
Reverse Engineering
Reverse Engineering is a process of recovering the design, requirement specifications and
functions of a product from an analysis of its code. It builds a program database and generates
information from this.
The purpose of reverse engineering is to facilitate the maintenance work by improving the
understandability of a system and to produce the necessary documents for a legacy system.
Reverse Engineering Goals:
1. Cope with Complexity.
2.Recover lost information.
3.Detect side effects.
4.Synthesise higher abstraction.
5.Facilitate Reuse.
Steps of Software Reverse Engineering:

Collection Information:
This step focuses on collecting all possible information (i.e., source design documents etc.)
about the software.
Examining the information:
The information collected in step-1 as studied so as to get familiar with the system.
Extracting the structure:
This step concerns with identification of program structure in the form of structure chart where
each node corresponds to some routine.
Recording the functionality:
During this step processing details of each module of the structure, charts are recorded using
structured language like decision table, etc.
Recording data flow:
From the information exA tracted in step-3 and step-4, set of data flow diagrams are derived to
show the flow of data among the processes.
Recording control flow:
High level control structure of the software is recorded.
Review extracted design:
Design document extracted is reviewed several times to ensure consistency and correctness. It
also ensures that the design represents the program.
Generate documentation:
Finally, in this step, the complete documentation including SRS, design document, history,
overview, etc. are recorded for future use.
Reverse Engineering Tools:
Reverse engineering if done manually would consume lot of time and human labour
and hence must be supported by automated tools. Some of tools are given below:
CIAO and CIA: A graphical navigator for software and web repositories along with a
collection of Reverse Engineering tools.
Rigi: A visual software understanding tool.
Bunch: A software clustering/modularization tool.
GEN++: An application generator to support development of analysis tools for the C++
language.
PBS: Software Bookshelf tools for extracting and visualizing the architecture of
programs.
Software Case Tools Overview
CASE stands for Computer Aided Software Engineering. It means, development and
maintenance of software projects with help of various automated software tools.
CASE Tools
CASE tools are set of software application programs, which are used to automate SDLC activities.
CASE tools are used by software project managers, analysts and engineers to develop software
system.
There are number of CASE tools available to simplify various stages of Software Development Life
Cycle such as Analysis tools, Design tools, Project management tools, Database Management
tools, Documentation tools are to name a few.
Use of CASE tools accelerates the development of project to produce desired result and helps to
uncover flaws before moving ahead with next stage in software development.
Components of CASE Tools
CASE tools can be broadly divided into the following parts based on their use at a particular SDLC
stage:
Central Repository - CASE tools require a central repository, which can serve as a source of
common, integrated and consistent information. Central repository is a central place of storage
where product specifications, requirement documents, related reports and diagrams, other
useful information regarding management is stored. Central repository also serves as data
dictionary.

Upper Case Tools - Upper CASE tools are used


in planning, analysis and design stages of SDLC.
Lower Case Tools - Lower CASE tools are used
in implementation, testing and maintenance.
Integrated Case Tools - Integrated CASE tools
are helpful in all the stages of SDLC, from
Requirement gathering to Testing and
documentation.
CASE tools can be grouped together if they
have similar functionality, process activities and
capability of getting integrated with other tools.
Scope of Case Tools
The scope of CASE tools goes throughout the SDLC.
Case Tools Types
Now we briefly go through various CASE tools
Diagram tools
These tools are used to represent system components, data and control flow among various
software components and system structure in a graphical form. For example, Flow Chart Maker
tool for creating state-of-the-art flowcharts.
Process Modeling Tools
Process modeling is method to create software process model, which is used to develop the
software. Process modeling tools help the managers to choose a process model or modify it as
per the requirement of software product. For example, EPF Composer

Project Management Tools


These tools are used for project planning, cost and effort estimation, project scheduling and
resource planning. Managers have to strictly comply project execution with every mentioned
step in software project management. Project management tools help in storing and sharing
project information in real-time throughout the organization. For example, Creative Pro Office,
Trac Project, Basecamp.
Documentation Tools
Documentation in a software project starts prior to the software process, goes throughout all
phases of SDLC and after the completion of the project.
Documentation tools generate documents for technical users and end users. Technical users are
mostly in-house professionals of the development team who refer to system manual, reference
manual, training manual, installation manuals etc. The end user documents describe the
functioning and how-to of the system such as user manual. For example, Doxygen, DrExplain,
Adobe RoboHelp for documentation.
Analysis Tools
These tools help to gather requirements, automatically check for any inconsistency, inaccuracy in
the diagrams, data redundancies or erroneous omissions. For example, Accept 360, Accompa,
CaseComplete for requirement analysis, Visible Analyst for total analysis.
Design Tools
These tools help software designers to design the block structure of the software, which may
further be broken down in smaller modules using refinement techniques. These tools provides
detailing of each module and interconnections among modules. For example, Animated Software
Design
Configuration Management Tools
An instance of software is released under one version. Configuration Management tools deal
with –
Version and revision management
Baseline configuration management
Change control management
CASE tools help in this by automatic tracking, version management and release management. For
example, Fossil, Git, Accu REV.
Change Control Tools
These tools are considered as a part of configuration management tools. They deal with changes
made to the software after its baseline is fixed or when the software is first released. CASE tools
automate change tracking, file management, code management and more. It also helps in
enforcing change policy of the organization.
Programming Tools
These tools consist of programming environments like IDE (Integrated Development
Environment), in-built modules library and simulation tools. These tools provide comprehensive
aid in building software product and include features for simulation and testing. For example,
Cscope to search code in C, Eclipse.
Prototyping Tools
Software prototype is simulated version of the intended software product. Prototype provides
initial look and feel of the product and simulates few aspect of actual product.
Prototyping CASE tools essentially come with graphical libraries. They can create hardware
independent user interfaces and design. These tools help us to build rapid prototypes based on
existing information. In addition, they provide simulation of software prototype. For example,
Serena prototype composer, Mockup Builder.
Web Development Tools
These tools assist in designing web pages with all allied elements like forms, text, script, graphic
and so on. Web tools also provide live preview of what is being developed and how will it look
after completion. For example, Fontello, Adobe Edge Inspect, Foundation 3, Brackets.
Quality Assurance Tools
Quality assurance in a software organization is monitoring the engineering process and methods
adopted to develop the software product in order to ensure conformance of quality as per
organization standards. QA tools consist of configuration and change control tools and software
testing tools. For example, SoapTest, AppsWatch, JMeter.
Maintenance Tools
Software maintenance includes modifications in the software product after it is delivered.
Automatic logging and error reporting techniques, automatic error ticket generation and root
cause Analysis are few CASE tools, which help software organization in maintenance phase of
SDLC. For example, Bugzilla for defect tracking, HP Quality Center.

You might also like