Introduction to Software Evolution and Maintenance
Lecture 1 of SE602 Software Re-Engineering introduces the foundational concepts of software evolution and maintenance in modern enterprise software engineering. In industrial practice, software systems spend the vast majority of their operational lifetimes in an evolutionary state where continuous modifications are required to adapt to changing business environments, platform upgrades, and emerging user requirements. Empirical software engineering studies demonstrate that software maintenance and evolution consume between seventy and eighty percent of the total lifecycle costs of an enterprise system. Students examine the historical drivers of software aging, where continuous ad-hoc fixes, developer turnover, and architectural erosion degrade internal code maintainability over time. The lecture distinguishes routine maintenance from strategic re-engineering, establishing how re-engineering restores lost architectural integrity, reduces maintenance overhead, and extends system longevity without necessitating high-risk complete system rewrites. Course milestones, examination objectives, and syllabus guidelines are introduced. The curriculum systematically aligns theoretical software evolution principles with practical source code modernization across industrial codebases. Reviewing the accompanying lecture handouts and metric tables reinforces understanding of coupling, cohesion, and architectural decay. Consistent evaluation of control flow graphs, call graph hierarchies, and database schemas ensures robust preparation for academic assessments. Students investigate the trade-offs between system replacement, wrapping legacy components, and iterative code refactoring transformations. The discussion highlights how Lehman laws of evolution, system complexity growth, and declining quality necessitate continuous code restructuring. Key concepts including static program analysis, dynamic execution tracing, and characterization test safety nets are thoroughly demystified. The lecture details classical object-oriented re-engineering patterns demonstrated across standard enterprise software architectures. Structured refactoring methodologies are demonstrated using Martin Fowler catalogs, method extraction, and polymorphism replacement. Software quality attributes, maintainability index equations, and technical debt principal valuations are evaluated alongside empirical benchmarks. Architectural recovery processes are explored through module dependency analysis, component clustering, and high-level design reconstruction. Database schema normalization, legacy record migration, and automated ETL extraction pipelines are systematically analyzed. Monolithic application decomposition strategies including service-oriented architecture (SOA) and the Strangler Fig pattern are examined in depth.
No questions available yet.
There are currently no examination questions published for Introduction to Software Evolution and Maintenance. Explore other curriculum units or build a custom quiz with the practice builder.