The theory, techniques and technologies associated with the deconstruction and testing of software systems, particularly large software systems. Students learn various approaches to procedural decomposition and system architecture and build multiple large collaborative software projects. Explores the tools used for building and testing software systems, particularly in the context of open source software.