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

  1. Correct program errors

  2. Add new capabilities

  3. Determine maintenance objectives

  4. Delete obsolete features

  5. 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.