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 firstname.lastname@example.org.
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:
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.