SE Unit5
SE Unit5
(AKTU)
Software Evolution is a term which refers to the process of developing software initially,
then timely updating it for various reasons, i.e., to add new features or to remove obsolete
functionalities etc. The evolution process includes fundamental activities of change analysis,
release planning, system implementation and releasing a system to customers.
The cost an impact of these changes is accessed to see how much system is affected by the
change and how much it might cost to implement the change. If the proposed changes are
accepted, a new release of the software system is planned. During release planning, all the
proposed changes (fault repair, adaptation, and new functionality) are considered. A design
is then made on which changes to implement in the next version of the system. The process
of change implementation is an iteration of the development process where the revisions to
the system are designed, implemented and tested.
1. Law of continuing change: This law states that any software system that represents
some real-world reality undergoes continuous change or become progressively less
useful in that environment.
2. Law of increasing complexity: As an evolving program changes, its structure
becomes more complex unless effective efforts are made to avoid this
phenomenon.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
3. Law of conservation of organization stability: Over lifetime of s program, the rate
of development of that program is approximately constant and independent of the
resources devoted to system development.
4. Law of conservation of familiarity: This law states that during active lifetime of
program changes made in the successive release are almost constant.
Software Maintenance
1. Usually the system requirements are changing, and to meet these requirements, some
changes are incorporated in the system.
2. The maintained system remains useful in their working environment.
3. Maintenance is applicable to software developed using any software life cycle
model. The system changes / enhancement maintenance must be done in order to:
(a) Correct faults
(b) Improve the design
(c) Implement enhancements
(d) Adoption of environments (different H/W or SOFTWARE)
(e) Replacement of old software by new software
4. Errors undetected during software development may be found during the use and
require correction.
5. With time, new technologies are introduced such as new H/W, operating system, etc.
The software therefore must be modified to adopt the new modified environments.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Types of Software Maintenance
1. Corrective Maintenance
2. Adaptive Maintenance
3. Perfective Maintenance
4. Preventive Maintenance
1. Corrective Maintenance
Corrective maintenance includes modifying a software application to remove errors
and bugs that were not identified during initial development even with thorough
testing, some bugs may surface only after deployment.
Types of Errors:
(i) Coding errors: Errors in coding procedures; relatively inexpensive to fix.
(ii) Design errors: These occur in design and are costlier to fix, as they often
require rewriting several program components.
(iii) Requirement errors: These stem from incomplete requirement
specifications and are the most expensive, often requiring major redesign.
2. Adaptive Maintenance
It includes modifying the software to match changes in the ever-changing
environment, such as:
i. New hardware
ii. New operating systems
iii. Different computing environments
iv. Business rules
v. Government policies, etc.
3. Perfective Maintenance
Perfective maintenance is an activity that is undertaken to improve the processing
efficiency or performance of the application. It means modifying or enhancing the
system to meet the new requirements. It includes all changes (insertion, deletion,
modification) made to the application to extend and expand it to meet evolving user
needs. User requirements can take the form of enhancement of existing system
functionality.
Thus, perfective maintenance makes the product better, faster, smaller, better
documented with more reports and functions.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
4. Preventive Maintenance
Preventive maintenance is required to reduce complexity of the code that may results
from corrective, adaptive and perfective maintenance. This activity s usually initiated
from within the maintenance organization with the intention of making program
easier to understand. This includes code restructuring, code optimization and
documentation updating.
Cost of Maintenance
The cost of system maintenance represents a large proportion of the budget of most
organizations that use a software system. More than 65% of software lifecycle cost is
expanded in the maintenance activities. The cost and effort of software maintenance can vary
depending on the type of maintenance being performed and the complexity of the software
system.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Software Re-Engineering
• Quality
• Reliability
• Performance
• Robustness
• Usability
Old systems that must still be maintained are sometimes called legacy systems. Most
legacy systems may be poorly structured, and their documentation may be either out-of-
date or non-existent. The developers of these systems may have left the organization,
and there may be very few people who understand them in detail.
“Software re-engineering is concerned with taking existing legacy systems and Re-
implementing them to make them more maintainable.”
Techniques of Re-engineering
1. Reverse Engineering
2. Forward Engineering
1) Reverse Engineering
In forward engineering, we take the existing software product and re-design it as a new
system by:
• Driving it forward to a new architecture or new platform.
• Making efforts to improve overall behavioural quality such as:
o Performance
o Recovery
o Reliability, etc.
1️. Source Code Translation: In this the program is converted from an old programming
language to a more modern programming language, or to a different language. Source-level
translation may be required for the following reasons:
3. Program Modularization
Related parts of a program are grouped together, and where appropriate, redundancy is
eliminated. In some cases, this stage may involve architectural transformation. Example
A centralized system intended for a single computer is modified to run on a distributed
platform.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
4. Data Re-engineering
It helps in:
1. Cost
Evidence from a number of U.S. projects suggests that re-engineering an existing
software system costs significantly less than developing new systems from scratch.
2. Lower Risk
Software re-engineering is based on incremental improvement of the system
rather than total system replacement. This reduces the risk of losing critical
software knowledge.
3. Better Use of Existing Staff
The skills of existing staff can be better utilized through re-engineering.
4. Incremental Development
The development is carried out incrementally rather than as a whole
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Reverse Engineering
The process of reverse engineering is to extract the information from existing software.
Software reverse engineering is a process of analysing a system in order to:
• Identify its components and their relationships
• Produce a representation of the system in another form or at a higher level of
abstraction
The areas where reverse engineering is applicable include:
• Program comprehension
• Redocumentation and/or document generation
• Recovery of design approach
• Identifying reusable components
• Recovering business rules
• Understanding high level system description
There are some problems in re-implementation of existing software in new technology.
Following three approaches can be used to solve these problems:
1️. Re-writing the existing system manually
This approach allows precise changes to program structure but it is very time-consuming.
2. Use of Automated Source Translators
Use automated large translators to converts code quickly. But it results in poor structure,
poor quality, difficult to understand, and leads to higher maintenance costs
3️. Re-designing & Re-implementing the System
It produces high-quality software with lower maintenance cost.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
SOFTWARE CONFIGURATION MANAGEMENT ACTIVITIES
Software configuration management deals with effectively tracking and controlling the
configuration of a software during its life cycle. The software may be considered as
configurations of software components. These software components are released in the form
of executable code whereas supplier organization work with the source code. This source
code is the representation of an executable equivalent, but not itself executable. Source Code
can be modified without there being any effect upon executable version. If care is not used,
if strict controls are not kept, the source code which is the exact representation of the earlier
executable version may no longer exist. The means by which the process of software
development and maintenance is controlled is called configuration management.
• Project plan
• Software requirements specification document
• Software design description document
• Source code listings
• Test plans/procedures/test cases
• User manuals
All components of the system configuration are recorded along with all relationships and
dependencies between them. Any changes and corrections should be checked and tested
and then recorded and fed back upon the rest of the configuration.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Software Versions
During software maintenance, there will be at least two versions of the software system: the
operational software system and the software system on which changes are being carried out.
During the process of software evolution, several versions of software documents, source
code, executable code and test data are produced. It's important to maintain a detailed record
of every version of the software and its revisions. One task in place is to ensure a detailed
record of the variations and revisions. This comprises:
It will be appropriate if changes to software can be predicted. The software and associated
documentation are delivered to configuration management change request form, which
should record the proposed change, the supporting cost and how the change should be
implemented. This form is submitted to the Change Control Authority (CCA), which decides
whether or not the changes are to be accepted. If change is approved by the CCA, it is applied
to the software. The revised software is revalidated by the Software Quality Assurance
(SQA) team to ensure that the change has not adversely affected other parts of the software.
The changed software is handed over to the software configuration team and is incorporated
in a new version of the system.
The change control process ensures that changes to the system are controlled and their
effects on the system can be predicted.
The change control can be carried out using the following steps:
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
An Overview of CASE Tools
The use of CASE tools in the software development process reduces the significant amount
of effort and help to produce high-quality software efficiently.
CASE Environment
CASE tools are characterized by the stage or stages of SDLC on which they focus. Since
different toots covering different stages are share common information, it is required that
they integrate through some central repository. Through this all the CASE tools in CASE
environment share common information among themselves. Thus, a CASE environment
facilitates the automation of step-by-step methodologies for software development.
A central repository (data dictionary), which connects with the following tools:
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Architecture of CASE Environment
The figure given previously shows a general architecture of a CASE environment. The
central component of this architecture is the repository, which is the most critical and
important feature of a CASE environment. The repository stores complete information
about Meta-models, Methods, Fuse lines, Process models. This information is shared
across different team members, improving efficiency and project management.
The repository must maintain the data required by various tools that support different
stages of the software life cycle.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
(v) Software Maintenance Tool
Supports the maintenance of software post-deployment.
Cost Estimation
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Effort Estimation:
• Expert Judgment: Similar to cost estimation, expert judgment is commonly used for
effort estimation. Experienced team members assess the tasks involved in the
project and provide estimates based on their knowledge and past experiences
• Work Breakdown Structure (WBS): Effort estimation can be done using a WBS,
which breaks down the project into smaller, manageable tasks. Effort estimates are
then assigned to each task based on its complexity and required resources.
• Function Point Analysis: Function point analysis quantifies the functionality
provided by a software system based on user requirements. Effort estimates are
derived by converting function points into person-hours using productivity metrics.
• COCOMO (Constructive Cost Model): COCOMO is a parametric estimation model
that estimates effort based on project size, complexity, and other factors. It
provides different variants (e.g., Basic COCOMO, Intermediate COCOMO, and
Detailed COCOMO) for projects of varying sizes and complexities.
Schedule/Duration Estimation:
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Constructive Cost Models (COCOMO)
It stands for Constructive Cost Models. COCOMO is a regression model based on number
of Lines of Code (LOC). It is a procedural cost estimate model for software projects and is
often used as a process of reliably predicting the various parameters associated with making
a project such as size, effort, cost, time, and quality. It was proposed by Barry Boehm in
1981 and is based on the study of 63 projects, which makes it one of the best-documented
models. COCOMO is a hierarchy of software cost estimation models, which include Basic,
Intermediate, and detailed sub models.
Basic Model
The basic model estimates most of the small to medium sized projects. Software projects are
classified into three categories:
• Organic: In the organic type, the project size typically from 2 to 50 KLOC; the
project deals with developing a well-understood application program; the team size
is generally small. This category is for the small to medium size software product. In
this type, team members have good experience and knowledge.
• Semi-detached: In the semi-detached type, the project size typically from 50 to 300
KLOC; the essential elements are team-size, experience, and knowledge of the
multiple programming languages. The projects that come under the semi-detached
are less familiar and hard to develop. It also requires better guidance, more
experienced developers.
• Embedded: In the embedded type, the project size over 300 KLOC; a software
project requires the highest level of complexity, creativity, and experience. In this
category, the larger team size is needed as compared to the previous models.
Depending on the problem the team might include a mixture of experienced and less
experienced people with only a recent history of working together. The Basic COCOMO
equations are -
• Effort (E): E = ab × (KLOC)bb
• Duration (D): D = cb × (E)db
• Staff Size (SS): SS = E / D
• Productivity (P): P = KLOC / E
Where:
• KLOC = Thousands of Lines of Code P: Productivity
• ab, bb, cb, db = constants based on project type E: Effort in person-months
• D: Development time in months SS: Team size (total number of people)
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
The coefficients ab, bb, cb, db are given as -
Project ab bb cb db
Organic 2.4 1.05 2.5 0.38
Semi detached 3.0 1.12 2.5 0.35
Embedded 3.6 1.20 2.5 0.32
Intermediate Model:
Project ai bi ci di
Organic 3.2 1.05 2.5 0.38
Semi detached 3.0 1.12 2.5 0.35
Embedded 2.8 1.20 2.5 0.32
It offers a means for processing all the project characteristics to construct a software estimate.
The detailed model introduces two more capabilities:
Resource allocation models in software engineering refer to the approaches and techniques
used to effectively distribute and manage resources, such as human resources, time, budget,
and equipment, throughout the software development process. These models aim to optimize
resource utilization, minimize costs, and ensure project success.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
resources to avoid peaks and valleys in resource demand, thereby minimizing
overallocation and under allocation of resources.
6. Resource Allocation Matrices: Resource allocation matrices provide a visual
representation of resource assignments across different project tasks or activities.
These matrices help project managers identify resource conflicts, balance
workloads, and optimize resource allocation based on skills, availability, and
dependencies.
7. Capacity Planning: Capacity planning involves estimating future resource
requirements based on project forecasts, historical data, and business objectives.
By proactively planning resource allocation, organizations can ensure they have the
necessary resources in place to support current and future projects effectively.
8. Resource Pooling: Resource pooling involves centralizing resources, such as
development teams, tools, and infrastructure, to maximize resource utilization and
efficiency across multiple projects. By sharing resources across projects,
organizations can reduce costs, improve collaboration, and achieve economies of
scale.
What is Risk?
"Tomorrow problems are today's risk." Hence, a clear definition of a "risk" is a problem
that could cause some loss or threaten the progress of the project, but which has not
happened yet. These potential issues might harm cost, schedule or technical success of the
project and the quality of our software device, or project team morale.
In Software Development risk analysis involves identifying which application risks should
be tested first. Risk can include issues like project management, technical challenges,
resource constraints, changes in requirements, and more Finding every possible risk and
estimating are the two goals of risk analysis. Think about the potential consequences of
testing your software and how it could impact your software when creating a test plan. Risk
detection during the production phase might be costly. Therefore, risk analysis in testing is
the best way to figure out what goes wrong before going into production.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Software Risk Management
Risk Management is the system of identifying addressing and eliminating these problems
(risks) before they can damage the project. Capers Jones has identified the top five factors
that threaten projects in different applications. These are-
Dependencies
Many risks arise due to dependencies of project on outside agencies or factors. It is not
easy to control these partly experienced people. Some dependency-related risk factors are:
• Availability of trained, experienced people
• Intercomponent or inter-group dependencies
• Customer-furnished items or information
• Internal and external subcontractor relationships
Requirement Issues
Many projects face uncertainty and turmoil around the product’s requirements. If we do not
control requirement-related risk factors well, then either we build the wrong product or the
right project badly—either situation results in unpleasant surprises and unhappy customers.
Some typical factors are:
• Lack of clear product vision
• Lack of agreement on product requirements
• Unprioritized requirements
• New market with uncertain needs
• Rapidly changing requirements
• Inadequate impact analysis of requirements changes
Management Issues
Project Managers usually write the risk management plan, and most people do not wish to
air their weaknesses (assuming they even recognize them) in public. Nonetheless, issues
like those listed below can make it harder for projects to succeed.
• Inadequate planning and task identification
• Inadequate visibility into actual project status
• Unclear project ownership and decision making
• Unrealistic commitments made, sometimes for the wrong reasons
• Managers or customers with unrealistic expectations
• Staff personality conflicts
• Poor communication
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Lack of Knowledge
The rapid rate of change of technologies, and the increasing change of skilled staff, mean
that our project teams may not have the skills we need to be successful. The key is to
recognize the risk areas early enough so that we can take appropriate preventive actions.
Some of the factors are:
• Inadequate training
• Poor understanding of methods, tools, and techniques
• Inadequate application domain experience
• New technologies
• Ineffective, poorly documented, or neglected processes
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)
Risk Assessment includes:
• Risk Identification
• Risk Analysis
• Risk Prioritization
Risk Assessment
It is the process of examining a project and identifying areas of potential risk. Risk
identification can be facilitated with the help of a checklist of common risk areas of software
projects; or by examining the contents of an organizational database of previously identified
risks. Risk analysis involves examining how project outcomes might change with
modification of risk input variables. Risk prioritization helps the project focus on its most
severe risks by assessing the risk exposure.
It may be easier to simply estimate both probability and impact as High, Medium, or Low.
Those items having at least one dimension rated as High are the ones to worry about first.
Another way of handling risk is the risk avoidance. Do not do the risky things! We may
avoid risks by not undertaking certain projects, or by relying on proven rather than cutting-
edge technologies.
Risk Control
It is the process of managing risks to achieve the desired outcomes. Risk management
planning produces a plan for dealing with each significant risk. It is useful to record decisions
in the plan, so that both customer and developer can review how problems are to be avoided,
as well as how they are to be handled when they arise. Risk monitoring involves monitoring
of the project as development progresses, periodically reevaluating the risks, their
probability, and likely impact. Risk resolution is the execution of the plans for dealing with
each risk.
Prepared By:
Mr. Sandeep Kumar
Assistant Professor (MPEC)