Software Maintenance and Evolution
2.1 Types of Software Maintenance
  1. Corrective Maintenance – Fixing bugs and issues after
     deployment.
  2. Adaptive Maintenance – Modifying software to work in new
     environments.
  3. Perfective Maintenance – Improving performance, usability, and
     features.
  4. Preventive Maintenance – Reducing future risks by making
     proactive changes.
2.2 Software Evolution
     Software evolves over time due to new requirements and
      technological advancements.
     Lehman’s Laws of Software Evolution state that software will:
         o   Continuously change
         o   Become increasingly complex
         o   Self-regulate
2.3 Handling Software Change
     Patches – Small updates that fix specific issues.
     Upgrades – Major version changes that introduce new features.
2.4 Managing Legacy Systems and Technical Debt
     Old software can become difficult to maintain and secure.
     Solutions include:
         o   Refactoring – Improving code without changing
             functionality.
         o   Rewriting – Creating a new version of the software.
        o   Migration – Moving software to modern platforms.
2.5 Configuration Management
     Tracks software changes and ensures version control.
     Version control tools:
        o   Git, SVN, Mercurial
     Release management ensures stable deployments
Software Project Management
3.1 Project Planning and Estimation
     A clear plan is essential for project success.
     Work Breakdown Structure (WBS) – Divides a project into
      manageable parts.
     Estimation techniques:
        o   Function Point Analysis (FPA) – Measures software
            complexity.
        o   Use Case Points – Estimates effort based on use cases.
        o   Story Points (Agile) – Used in Scrum teams.
        o   COCOMO Model – Calculates cost based on project size.
3.2 Risk Management
     Identifying risks early helps prevent project failures.
     Risk mitigation strategies:
        o   Avoidance – Prevent the risk entirely.
        o   Reduction – Minimize the impact.
        o   Transfer – Shift risk to another entity (e.g., insurance).
        o   Acceptance – Acknowledge and prepare for the risk.
3.3 Team Dynamics and Collaboration
     Agile Team Roles:
        o   Product Owner – Defines requirements.
        o   Scrum Master – Facilitates Agile processes.
        o   Developer – Implements features.
        o   QA Engineer – Ensures quality through testing.
3.4 Effective Communication and Collaboration
     Clear communication is crucial for project success.
     Collaboration tools:
        o   JIRA, Trello – Project management
        o   Slack, Microsoft Teams – Communication
     Managing remote teams effectively requires strong
      communication and coordination.