CS373S Software Design
Due to a recent and unforeseen emergency,
CS373S has been cancelled for Fall 2016 and
has been rescheduled for Spring 2017.
Apologies, but this event was unavoidable.
Minimum C- grade in CS 429 or 429H.
Overview, and Goals
UT course catalog says CS 373 (software engineering), CS 347
(databases), and CS 375 (compilers) are required for this course ---
this is wrong.
It would be great if you took these courses concurrently or
later, but software engineering, databases, and compilers are NOT
you have, the more you will get out of this
Software design and construction is not
programming; it is a set of fundamental concepts that architects follow
to create easy-to-change, easy-to-maintain applications. We see these
concepts at work in Model
Driven Engineering (MDE), which gives us a general way to
software design and construction -- not as a mass of spaghetti code,
but as a principled collection of ideas architected in a
thoughtful way. MDE deals with the creation of models and
transformations of these models to other models, eventually yielding
source and executables (yet other models).
is rather abstract, but if you think about it, we express a program in
the Java language (that's our concrete model of this
compiler transforms source code to bytecode (it maps a
Java representation of a program to a corresponding representation of
that program in bytecode). javadoc,
as another example, maps Java
source to html (both are models). Object oriented
map source code to refactored source code. There are even
refactorings that map bytecodes to bytecodes.
are just a few examples of program representations and the tools that
transform them from one representation to another. Virtually all of
software design deals with the creation of models (program
representations) and their transformation into other representations.
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
goals of this course are to give students the basics for what system
architects do, and how to reason about application design and
construction; there is programming but this is NOT a programming
course. This course will:
course includes lectures on the following topics: UML models and
metamodels, metamodel constraints, categories, refactorings, object
oriented design patterns, architectural patterns, parallel
architectures, and service oriented architectures (SOA). And of course,
concepts from MDE which all of the above are special cases.
course covers examples from compilers and databases , so if you have
experience writing compilers or databases, you're that much further
ahead than others. A course on compilers or databases or
engineering is not
a prerequisite, but it is good to have before you complete your
- teach you basic skills in reasoning about and expressing
- give you experience in writing programs to exercise these
- expose you to the fundamental ideas of software design,
- provide an insight on where software design technology is
- give you a framework to understand what Software Design
will become in the future.
this is gateway course to further undergraduate courses in CS on
Software Development, there will be many small programming assignments
and written homework assignments.
file and its PDF for each lecture will be posted after class.
(I change the
notes every time I teach the course). Links to these files
are given in the syllabus below.
Should you choose to create a hard
copy of these files, do
not use CS printers
-- take the files to Kinkos (or whatever Kinkos is called now). I have
created several instructional web
pages with accompanying .AVI or .MOV videos. Note: The .AVI
videos work only in a Windows-based environment. The .MOV
converted from .AVI files and (unfortunately) are not as sharp.
material is taken from the following texts, which are NOT
required for this course. All of them are worth having in a
library, but often, much of their content is posted for free on the web.
useful list of web pages are collected below:
programming assignments (except one) are in Java. We will be using the
following software, all of which is free to UTCS students, and all of
which has been installed in the UTCS
The following is for Windows Platforms. If you use Apple
machines, well, I will try to help as much as I can, but no promises!
SourceMaking.com -- for
patterns, anti-patterns, refactorings, and UML
-- this is a neat,
free, web-based tool for drawing UML diagrams.
-- a Java GUI program to draw class diagrams.
you need an account, follow this
link to create a CS account and to find the names of public
machines to which you can log in.
EE IDE 8.1
and/or Eclipse Luna SR2 (4.4.2)
-- I prefer NetBeans to
Eclipse for program development as it is a simpler environment.
-- to view .MOV videos shown in class. (You can use Windows
Player, but its video resolution is awful). No need for this
software if you are a Mac user.
- SWI Prolog
-- for writing metamodel constraints.
may be unannounced in-class quizzes on course lecture material,
readings from the course texts, and/or homework. Missed quizzes will be
given a grade of zero unless there are extenuating circumstances.
are via Canvas. A
PDF file must be submitted on all assignments -- it lists
your name and
email address -- the address must be hyperlinked so that I can
easily send my
comments of your assignment back to you. Click here for
an example of what is expected.
Homework, Programming Assignments, and Submissions
with Netbeans and Eclipse. Programming assignments will
writing of clear documentation and Unit tests. There are some
problems/issues in writing javadoc documentation and running regression
tests with JUnit, which are described below:
should read these postings carefully, and don't forget reading how to set a classpath.
are two midterms and a final. These exams must be taken on the
specified date and at the specified time. If you miss an exam due to extenuating circumstances,
a grade will be negotiated for the exam based on a percentage of your
homework, quizzes, and other exam scores. Otherwise missed exams will
be given a grade of zero.
Final grades will be determined
approximately by the following scheme:
accumulative programming assignment grade will determine the maximum final
grade for the course. Ex: if you get a "B" average across all
your projects, your final grade will be no greater than a "B", approximately.
counts 40%, each midterm 30%, approximately.
grades and class participation will be used to decide final grades in
you have difficulty meeting the requirements of this course, fail to
hand in an assignment, or miss an exam because of an unforeseen
situation, please advise the instructor in writing at the earliest
possible date so that your situation can be discussed. If you encounter
an unexpected medical or family emergency or a random act of Nature
that causes you to miss the due date for homework or miss a quiz or
exam, you must present suitable documentation in writing to the
instructor before special consideration will be given. A file of all
written correspondence will be kept by the instructor and decisions
regarding them will be made at the end of the semester.
indicates the estimated number of lectures per topic.
The number indicated is a lower-bound,
as there will be class room
discussions to work on problems and review of homework assignments.
PPTX and PDF copies of the lectures are hyperlinked below.
this, the exact dates of a lecture are unknown. The order in
which topics are presented is below. A PDF of the syllabus
distributed on the first day of class is here.
|Topic [# of lectures + days of discussion]
design vs programming, model
engineering, models, transformations, automated software development
|P0: Setting Classpaths
Unified Modeling Language 
diagrams, cardinalities, associations object diagrams, constraints,
meta-models and meta-modeling, writing constraints in Prolog, in class
|P1: Java Reflection
Object Oriented Refactorings 
- model refactorings
- OO program refactorings: rename,
extract method, substitute, move member, factory method,
pull-up, push-down, singleton, extract class (normalization,
superclass, extract interface
|4. Design Patterns
- basic patterns: facade, adapter, flyweight
- separation of concerns, observer,
- frameworks, template, factory, abstract
- grammars, composite, decorator, intepreter
- delegate patterns: visitors, command, memento
- in-class examples
Architectural Patterns 
- layers, multi-tiered and 3-tiered architectures,
object-oriented virtual machines, symmetric vs. asymmetric layers
- pipe and filter architectures, components and
connectors, Java pipes
Parallel Architectures 
- program derivation, refinements, optimizations, map
reduce, substitution principles, architectural optimization,
architecture refinement and correctness, parallel architectures,
parallel hash join architectures
- design of byzantine fault tolerant servers, program
Service Oriented Architectures 
- historical development (CORBA, COM) and evolution to
- JAX web servers
Optional Topics (if there is time) and Course Recap