Department of 
Computer Science

Search our Site

Line

ON THIS PAGE:

Assumptions

Prerequisites

Approach

Typical Text

Course Outline

  COMP 723 [204]: Software Design and Implementation
(3 hours)

Syllabus approved April 1984

Assumptions
Students should have

  • had a COMP 523-like course, been exposed to the basic lifecycle of requirements, specs, design, coding, testing, maintenance.
  • had an algorithms course, but no formal verification
  • had a languages course in which basic run-time structure is learned for basic imperative languages
  • learned basics of data abstraction
  • student are not assumed to have learned formal semantics

Prerequisites
COMP 550, 524.

Approach
This class is designed to provide students with knowledge of development of software, from formal specification through to working systems. The student will learn graduate level material that presumes an undergraduate preparation in programming languages and software engineering. The material, therefore, is heavy on formal methods for supporting software development, which are founded on formal semantics of programming languages. While we are leaving a deep treatment of formal language semantics for advanced courses, we will introduce some semantics and verification in support of commonly used specification methods. It also presents disciplined engineering practices such as design and testing.

The "software" part of the class covers specifications, design, coding (as mentioned), testing methods, and an overall look at methods for continuous improvement of the software development process. The overall goal is to give a broad introduction to SE techniques used in practice, along with an introduction to formal methods in SE and their current limitations.

The "languages" part of the class gives practical experience with module coding in different language paradigms, covering modern imperative object-oriented languages (Eiffel and C++), modern functional languages (Haskell), and logic-based languages (Prolog).

The intent is to treat very small problems using completely formal methods from spec to code, using axiomatic verification. Some larger, but still relatively simple and well-defined problems would be used to present functional design and to introduce Haskell (or ML) and Prolog as examples of languages that support the expression of these sorts of designs.

A larger portion of the time would be spent in describing object-oriented design methods and the support for the expression of such designs using object-oriented languages. We suggest using Eiffel as the carrier language because it is a clean language, simple to learn, that supports both formal and informal methods in OO software construction. An additional set of lectures could be used to relate the constructs and facilities of Eiffel to C++, the language that is most used in practice for this approach.

Typical Text
Ghezzi, Jazayeri, Mandrioli, Fundamentals of SE (General & some formal methods)
Gries, Science of Programming (Verification)
Betrand Meyer Object Oriented Software Construction (OO Design and Eiffel)
general Programming Language Texts (chapters of functional and logic programming)

Course Outline

  • specs: specs (Z, VDM, predicates--axiomatic semantics and verification)
  • design: OO, functional
  • coding: (language examples) Eiffel, Haskell, prolog
  • testing: black box, white box, mutation, statistical methods
  • process: process modeling methods (Marvel, Weaver, etc.) SEI CMM; continuous process improvement

      Week 1
      • class overview
      • software engineering
      • introduction to the development process
      • traditional process models like spiral, evolutionary

      Week 2

      • predicate logic
      • formal specifications (axiomatic)
      • axiomatic verification
      • axioms for ADTs
      • the Z specification language

      Week 4

      • Software design: functional methods
      • realizing functional design in Prolog
      • realizing functional design in Haskell

      Week 7

      • software design: object-oriented methods
      • realizing an OO design in Eiffel
      • realizing an OO design in C++

      Week 12

      • common testing methods (white box, black box, coverage metrics)
      • axiomatic testing
      • mutation testing
      • statistical methods

      Week 13

      • SEI Capability Maturity Model and process modeling
      • continuous process improvement
      • Cleanroom as an example of a non-traditional development process

Horizontal Line
Department of Computer Science
Campus Box 3175, Sitterson Hall
College of Arts & Sciences
The University of North Carolina at Chapel Hill
Chapel Hill, NC 27599-3175 USA
Phone: (919) 962-1700
Fax: (919) 962-1799

Content Manager: Associate Chairman for Academic Affairs
Server Manager: webmaster@cs.unc.edu
Last Content Review: 7 November 1995