Unit5_L1_Software maintenance
Software Maintenance and Software Project Management
Software Maintenance as an Evolutionary Entity
Software maintenance encompasses various tasks such as:
Error correction
Enhancements of capabilities
Deleting obsolete capabilities
Optimization
Since changes are inevitable in software, mechanisms must be developed for evaluating, controlling, and implementing these modifications.
Any modification made post-deployment is classified as maintenance work.
The term "evolution" has been associated with software since the 1960s to describe its dynamic growth.
Key Aspects of Software Maintenance
Software maintenance is a broad field that involves:
Correcting errors
Enhancing features
Porting software to new platforms
Approximately 70% of software costs are allocated to maintenance.
Need for Software Maintenance
Users demand that existing software run on newer platforms and in updated environments with enhanced features.
Changes in hardware platforms may necessitate maintenance, especially for software that performs low-level functions.
The significance of software maintenance continues to grow among software organizations.
Reasons for Maintenance
Software maintenance is essential for several reasons:
Correcting errors
Adapting to changing user requirements over time
Adjustments due to changes in hardware or software environments
Improving system efficiency
Optimizing code for better performance
Modifying components
Eliminating unwanted side effects
Overall, maintenance is critical for ensuring that systems consistently meet user requirements.
Categories of Maintenance
Corrective Maintenance: Focused on fixing bugs present during system usage.
Adaptive Maintenance: Necessary when software needs to run on new platforms or interface with updated hardware/software.
Perfective Maintenance: Involves making changes to support new features or enhance system performance.
Preventive Maintenance: Addressing complex changes to reduce software complexity over time.
Distribution of Maintenance Effort
The efforts in software maintenance are categorized as follows:
Corrective: 21%
Adaptive: 25%
Perfective: 4%
Preventive: Remaining efforts
Challenges in Maintenance
Common issues during maintenance include:
Programs often written by different developers
Changes made by individuals unfamiliar with the overall code
Unstructured program listings
High turnover rates among staff
Gaps in information
Systems poorly designed for change
Solutions to Maintenance Problems
Potential solutions include:
Reallocating budget and effort
Complete system replacement
Ongoing maintenance for existing systems
The Maintenance Process
Correct program errors
Add new capabilities
Determine maintenance objectives
Delete obsolete features
Optimize existing functionalities
Complexity in Maintenance
Phase 1: Understanding program documentation and its self-descriptiveness.
Phase 2: Generating a specific maintenance proposal with consideration for extensibility.
Phase 3: Addressing the ripple effect of changes.
Phase 4: Testing new implementations to ensure quality.
Maintenance Models
Quick-fix Model:
An ad-hoc, reactive maintenance approach that prioritizes speed over thoroughness.
Iterative Enhancement Model:
Analyzes existing systems and characterizes proposed modifications for better design and implementation.
Boehm's Model:
Evolved from economic theories, portraying maintenance processes as a continuous cycle of management decisions, proposed changes, evaluations, and implementations.
Estimation of Maintenance Costs
Software maintenance can consume 40-70% of the total lifecycle costs. Investing early in development phases can reduce ongoing maintenance expenses.
Employing good software engineering practices positively impacts maintenance cost ratios.
Regression Testing
Definition: The process of retesting modified software parts to ensure no new errors were introduced.
Purposes of regression testing:
Increase confidence in modified programs
Identify errors in modified code
Maintain software quality and reliability
Ensure ongoing software functionality
Regression Test Selection Strategies
Regression testing can be costly; however, techniques to minimize this include:
Reusing entire test suites
Utilizing regression test selection techniques to apply the most relevant subsets of tests.
Comparison of Development and Regression Testing
Development Testing vs. Regression Testing:
Development testing involves creating new tests from the ground up.
Regression testing uses existing tests, often under constrained budgets and time limits.
Development testing is typically a one-time occurrence, while regression testing is repeated throughout a software's lifecycle.
Software Reverse Engineering
Definition: The process of deriving a product's design and specifications from its source code analysis.
Primary goal: Improve maintainability and understandability of legacy systems, facilitating necessary documentation.
Scope and Tasks of Reverse Engineering
Activities include:
Redocumentation and document generation
Identifying reusable components
Analyzing system designs and business rules
Understanding overall system architecture.
The Reverse Engineering Process
Consists of several levels of abstraction from requirements to design and implementation phases.
A systematic approach aims to recover meaningful abstractions from source code, integrating various data sources.
Advantages of Software Re-engineering
Focuses on enhancing legacy systems to improve maintainability without altering core functionalities significantly.
Highlights the reduced risks and costs associated with altering existing systems rather than building new software from scratch.
Computer-Aided Software Engineering (CASE)
CASE involves the use of computer tools and methods in software development to ensure high-quality outcomes.
Benefits include keeping customers engaged throughout the development process to align outputs with real-world requirements.
Types of CASE Tools
Various tools serve different purposes:
Diagramming Tools: Assist in visually depicting system processes and data flows.
Analysis Tools: Evaluate specifications and requirements for inconsistencies.
Documentation Generators: Facilitate the creation of user and technical documentation.
Benefits of Utilizing CASE
Includes cost savings of 30-40% across development phases and improved overall quality.
Encourages a structured and systematic approach to software development, enhancing company workflow.
Characteristics of CASE Tools
Essential features include documentation support, project management integration, reverse engineering capabilities, and external interfaces for compatibility.
Advantages of the CASE Approach
Emphasizes redesign and testing, leading to reduced servicing costs and improved product quality, ultimately supporting competitive advantage within organizations.