CU website

ECEN 4/5043





Class Lectures


ECEN 5043/4043

Software Engineering of Multi-Program Systems

This web site reflects the course as offered in Spring, 2007. If there is a problem, contact me at 303-492-8369 or email me at

NOTE: If you are looking at this web site to learn a little about the course in consideration for registering for it in the future, be aware that there will be changes in future courses, such as textbooks. Do not purchase textbooks for course offerings in Spring 2008 or later on the basis of these pages.

The Software Engineering Certificate is a graduate-level certificate program consisting of three courses: Software Engineering of Stand-Alone Programs, Software Engineering of Multi-Program Systems, and Software Engineering of Distributed Software Systems. Each course carries 3 semester hours of academic credit at the graduate level. All credits earned in the certificate can be transferred to an appropriate graduate engineering program at CU-Boulder.

Historically, "software engineering" has been an oxymoron. Software engineering has come of age as a body of fundamental engineering knowledge applied to software -- product requirements definition and analysis, design for performance and testability, design for field diagnosis and maintenance, test coverage, etc. Professionals who understand this body of knowledge are able to develop products more predictably and reliably for stand-alone programs as well as for programs that will be part of a more complex environment.

The second course in the series addresses issues of multiprogramming. Many of these problems were initially encountered when operating systems first managed more than one user program in the job mix at the same time. Today, if one writes a Java application involving multiple threads in a computing environment where individual threads are not seen by the CPU kernel, then it is up to the developer to provide process management including selecting a scheduling algorithm to get a predictable behavior from those threads. A real time system is expected to concurrently absorb and process dozens of different asynchronous external signals and operator commands. Furthermore, many embedded system environments have limited "operating systems" (a supervisor process, a resident monitor, or the like). Whether evaluating a real time operating system for adoption in a product design, supplementing a resident monitor with in-house developed supporting software, or writing the product's code to process asynchronous signals, one needs to understand multiprogramming issues to make intelligent choices. Topics in the second course include:

  • requirements interface definition, notation, and analysis of systems of programs
  • systems architecture issues such as
  • synchronization of independent processes
  • critical sections
  • managing shared data stores
  • scheduling
  • availability and recovery
  • common software architectures for common categories of software systems
  • design for testability
  • design for field diagnostic capability.
  • security

For the second course, the prerequisites are that you understand the concepts of programming, fundamentals of OO software engineering methods, state diagrams and basic UML notation, especially for class diagrams and sequence diagrams.

Instructor Revision 1.44 (2001/10/13 20:43:15)