COMP 303 - Software Development: Principles, mechanisms, techniques, and tools for object-oriented software development: encapsulation, design patterns, unit testing, etc.
COMP 529 - Software Architecture: Development, analysis, and maintenance of software architectures, with special focus on modular decomposition and reverse engineering.