Revised Jan. 28, 2014
CS 247: Software Engineering Principles
General description
This course introduces systematic methods for designing, coding, testing, and documenting medium-sized programs. Major topics include abstraction, modularity, software modeling, object-oriented programming and design, generic programming, and testing and debugging.
Logistics
Audience
- 2B Software Engineering students
Normally available
Related courses
- Predecessors: CS 241, Software Engineer students only
- Successors: CS 457 and most 3rd year CS major courses
- Co-requisites:
- Conflicts:
For official details, see the UW calendar.
Software/hardware used
Typical reference(s)
- Bruce Eckel, Chuck Allison, Thinking in C++ Volumes 1 and 2, Prentice Hall, 2003
Required preparation
At the start of the course, students should be able to
- Demonstrate knowledge learned in CS 137/138 and CS 241 by being able to program in C/C++ (structures, strings, procedural abstractions, pointers, addresses, recursion). No knowledge of object-oriented programming is assumed.
- Explain container Abstract Data Types (lists, stacks, queues, trees) as they were used in CS 138 and CS 241.
- Write functional specifications (pre / post conditions) as they were used in CS 138.
Learning objectives
At the end of the course, students should be able to
Design and implement data abstractions (ADTs, polymorphic objects, generic functions) in C++
Critique designs with regards to cohesion, coupling, generality, robustness, information hiding
Create software designs that are modular, general, robust, flexible
Express software designs and behaviour using basic UML models
Express the structure of an OO program as a class model
Express the state of a dynamic data structure as an object model
Express interactions between objects using a sequence diagram
Develop and test programs incrementally
Test and debug programs systematically
Use simple software tools effectively, including makefiles, gdb, version control
Typical syllabus
Module Design (12 hours)
- ADT design, function and operator overloading
- Modules and interfaces
- Namespaces
- Interface specification
Object-Oriented Design and Programming (12 hours)
- Composite objects
- OO design principles and patterms
- Multiple inheritance and mixins
Software Engineering and Tools (5 hours)
- UML modelling
- Incremental development (make)
- Testing and debugging (gdb)
- Version control (e.g., svn)
Generic Programming (5 hours)