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

  • Spring

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

  • UNIX, C++, Java

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)
    • STL algorithms
    • Iterators