CS378 Software Design -- Spring 2010
formerly software system architecture
updated 11/17/2009

 

Instructor Prof. Don Batory   batory@cs.utexas.edu
TA    
Office Hours Batory ACES 5.252
   
Room  
Time TTh 11:00 to 12:15
Unique# 54355
Ground Rules Rules of Conduct and Academic Honesty
Your Grades EGradeBook
Final Exam

 

 

Overview

This course is now under construction --the name was originally "software system architecture" but "software design" is more accurate. Whatever the name, the contents are shaping up.

Prerequisites: Minimum C grade in CS 310 or 310H, 336 or 336H, and M 408D or 408M.  You must know how to program in Java; if Java is new to you, don't take this course!

Overview. Software design and construction is not hacking; it is governed by fundamental principles. Model driven design (MDD) gives us a general way to think about software design and construction -- not as a giant mass of hacked code, but  as a principled collection of concepts architected in a thoughtful  way. MDD deals with the creation of models and transformations of these models to other models, eventually yielding executables (yet other models).

Now, this is pretty abstract, but if you think about it, we express a program in the Java language (that's our concrete model of this program).  The javac compiler transforms source code to bytecode (i.e., it maps a Java representation of a program to a corresponding representation of that program in bytecode). That's pretty familiar transformation to us all. javadoc, as another example, maps Java source to html (both the input and output are models).  Refactorings map source code to refactored source code.  There are even refactorings that map bytecodes to bytecodes.

These are just a few examples of software engineering representations of programs and the tools that transform them from one representation to another. But virtually *all* of software design deals with the creation of models (program representations) and their transformation into other representations. Note that most work in Engineering (with a capital "E") deals with model development -- ex. Boeing creates and analyzes models of aircraft long before they actually build a physical plane. Similarly, the software next generation Space Shuttle is being built solely from models; no one is writing code! (These models are transformed to ugly C++ by commercial tools and then commercial C++ compilers transform source into executables).

The goal course is to give students a big picture of what we as programmers, system architects are doing, and how to reason about program design and construction.  This course will:

The course will include lectures on the following topics: Basic UML models and modeling, Categories, Refactorings, Object Oriented Design Patterns, Architectural Patterns, Incremental Design of Architectures, Service Oriented Architectures, and (if there is time) Software Product Lines. And of course, concepts from Model Driven Design which all of the above are seen as special cases.

As this is gateway course to further undergraduate courses in CS on Software Development, you should expect many small programming assignments,  written homework assignments, and a course project. The course is intended to be both hands-on practical and to expose you to principles of software design.

Preliminary Course Outline (updated every few weeks until January)

Numbers in [brackets] indicates the estimated number of lectures on a topic. The number indicated is a lower-bound, as there may be class room discussions to work on problems and review of homework assignments.  There will be (at least) one midterm and a final.