Class overview
The course covers the following topics:
Software Evolution
- definition of software evolution
 - laws of software evolution
 - impact of software evolution on the software lifecycle
 
Software Maintenance
- definition of software maintenance
 - place of software maintenance in the software lifecycle
 - types of software maintenance (perfective, corrective, adaptive, preventive)
 - steps of software maintenance process
- requirements analysis
 - change requests
 - impact analysis
 - (re)design, (re)factoring, (re)coding
 - release planning
 
 
Program Comprehension
- definition and importance of program comprehension
 - types of program comprehension (top-down, bottom-up)
 - manual program comprehension
 - automated program comprehension
- static analysis
 - dependency graphs (call, inheritance, type-usage, dataflow, control flow)
 - program slicing
 
 - program comprehension tools
 
Software Quality
- definition of software quality
 - importance of software quality in maintenance
 - software quality taxonomies
 - software quality predictors
 - software quality metrics (code size, comment density, static/dynamic coupling, cohesion, complexity)
 - quality models
 - software quality tools
 
Software Maintenance in Practice
- a selection of real-world use-cases from the IT industry
 - explanation of analyses and tools/techniques used to address each case