COSC 4351 Software Engineering - Spring 2004

Dr. Albert M. K. Cheng
Spring Office hours: MW 3:00-4:00pm and by appointment

Required textbooks:
Fundamentals of Software Engineering, 2ed, Carlo Ghezzi et al; and Real-Time Systems: Scheduling, Analysis, and Verification, 1ed, Albert Cheng.

Additional references: Software Engineering, 6ed, Ian Sommerville.

TA: Goel Lakshmi, 536-PGH, Office hours: T Th 2:00-3:00pm

Software Engineering (SE) is the application of a systematic, disciplined, quantifiable (engineering) approach to the development, operation, and maintenance of software [IEEE Std 610.12-1990]. SE often involves many programmers in the construction of complex, multiversion software. Almost any realistic, commercial software requires good software engineering techniques to develop and maintain. More recently, Computers and their software are increasingly used to monitor and control physical processes. These real-time embedded systems must satisfy stringent timing and reliability constraints in addition to functional correctness requirements. Examples of these embedded systems include the new generation of airplane avionics, the Space Station control software, high-performance network and telephone switching systems, medical monitoring instruments, Multimedia tools, virtual reality systems, robotic controllers, PDAs, and wireless phones. Building embedded software requires more specialized skills.

This course introduces the fundamentals of software engineering for both conventional and embedded/real-time software. These theoretical foundations are followed by hands-on practice in employing these advanced techniques to build, verify, and maintain these software systems in multi-person team projects. Specification and verification tools such as Statechart, Modechart, and model checkers will be described. It is very important that the fundamental principles must be studied before any project work starts, because once you start on the project, your attention and time will usually be devoted to the project details, preventing you from absorbing the general and basic principles being taught.

Course outline:
Introduction to SE
Software design issues
SE principles
Software architecture
SE of embedded software
Software production
Management of SE
Maintenance of software and tools

Recommended prerequisite:
Data Structures

Course requirements and grading:
team programming project with several modules (50%) and three open-book short tests (end of February, beginning of April, and last day of class) but no final exam (50%).