In short:
Software: process and product.
Requirements analysis and specification.
Design by contract.
Object-oriented design, design patterns.
Verification and validation.
Maintenance, refactoring.
More comprehensively:
- Software: process and product
Software qualities. Software lifecycle: phases and activities. Software processes (waterfall, iterative). Spiral meta model.
- Requirements analysis and specification
Languages and methods for software specification
Formal specification languages: automata and Petri nets. Semiformal specification languages: UML (all diagrams).
- Design
Modules, interfaces, relations. Design principles, design by contract, defensive design.
- Object-oriented design
Encapsulation, inheritance, polymorphism, dynamic binding. Inheritance vs. delegation. Design patterns.
- Verification and validation
Testing and debugging. Structural and functional testing. Unit testing. Code inspections and walkthrough. Testing of object-oriented systems.
- Maintenance
Legacy systems. Refactoring of object-oriented systems.