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