1. Software maintenance is an ongoing process that consumes 40-70% of development costs and includes fixing errors, improving performance, and adapting to changes.
2. Maintenance is needed to ensure systems continue satisfying user requirements as hardware, software, and needs evolve over time. It accounts for modifying code through corrective, adaptive, perfective, and preventive changes.
3. Reengineering and reverse engineering are processes to understand legacy systems and improve maintainability. They involve analyzing existing code and documentation to recover designs and requirements without changing functionality. This facilitates future maintenance.