CS373S Software Design
Spring 2017


Announcements


H7: Subject-Observer in Java Swing 
Due Tuesday March 28, 10pm


P7: Model Refactoring 2
Due Sat  April 1,10pm


Class Photo




 
Professor Don Batory batory@cs.utexas.edu
office hours Tues 3:30-4:30pm GDC 5.826
TA Zoe
 Wheeler

zoe.donnellon.wheeler@gmail.com
office hours M, Th  3:30-5pm GDC 5.828
"Lobby"
Room Calhoun 100
Days and Time TTH 2:00-3:30
Unique # 52205
Ground Rules UTCS Rules to Live By
Your Grades Canvas
Final Friday, May 12, 9-12noon, Calhoun 100

 Prerequisites, Overview, and Goals

Prerequisites: Minimum C- grade CS429 or CS429H.

The 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 required

The more programming experience you have, the more you will get out of this course.

Overview. 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 think about 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).

This is rather 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 (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 refactorings map source code to refactored source code.  There are even refactorings that map bytecodes to bytecodes.

These 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 into executables).

Goals. The 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:
The 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.  The course covers examples from compilers and databases , so if you have any experience writing compilers or databases, you're that much further ahead than others.  A course on compilers or databases or software engineering is not a prerequisite, but it is good to have before you complete your undergraduate education.

As this is gateway course to further undergraduate courses in CS on Software Development, there will be many small programming assignments and written homework assignments.

 Course Materials

The PPTX 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 were converted from .AVI files and (unfortunately) are not as sharp.

Lecture 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.

A useful list of web pages are collected below:

Software

All 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 Microlab.  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!

CS Accounts

If 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.

Quizzes

There 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.
.

Homework, Programming Assignments, and Submissions

Submissions 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.

Issues with Netbeans and Eclipse. Programming assignments will require the 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:
You should read these postings carefully, and don't forget reading how to set a classpath.

Examinations

There 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.

Class Grades

Final grades will be determined approximately by the following scheme:

  1. Your accumulative programming assignment grade will determine the maximum final grade for the course.  Ex: if you get a "B" average across all of your projects, your final grade will be no greater than a "B", approximately.
  2. Final counts 40%, each midterm 30%, approximately.

Homework grades and class participation will be used to decide final grades in grade-borderline cases.

Extenuating Circumstances

If 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.

Schedule

Numbers in [brackets] 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.  Given 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] Written Assignments Programming Assigments
1. Introduction [1]
  • design vs programming, model driven engineering, models, transformations, automated software development

H0: Pre-Course Survey
Th Jan 19 noon

P0: Setting Classpaths
Due Fri Jan 20, 10pm


P1: Java Reflection
Fri, Jan 27, 10pm
2. Unified Modeling Language [5]
  • class diagrams, cardinalities, associations object diagrams, constraints, meta-models and meta-modeling, writing constraints in Java Streams, in class examples
H1: UML Class Diagrams
Thu Jan 26, 10pm


H2: Class Diagrams With Constraints
Thur Feb 2, 10pm


H3: MetaGrammars
Thurs Feb 9, 10pm


P2: Writing MetaModel Constraints
Sat, Feb 4, 10pm


P3: Writing M2T Transformations
Feb 11, 10:15pm
3. Refactorings [5]
  • model refactorings
  • OO program refactorings: rename, extract method, substitute, move member, factory method, pull-up, push-down, singleton, extract class (normalization, partition), extract superclass, extract interface
  • Guest Lecture on Grammars
H4: Model Refactoring
Thurs, Feb 16, 10pm


H5: Java Refactoring
Mon, Feb 20th 10pm
P4: Incremental Development
Sat, Feb 18, 10pm

Midterm #1  (Thursday, Feb 23, in class, closed notes) Extra Problems   Solutions
Midterm Extension/Quiz  solutions
4. Design Patterns [8]
  • R3 refactoring engine
  • basic patterns: facade, adapter, flyweight
  • delegates: visitors, command, memento
  • separation of concerns: observer, model-view-controller, mediator
  • grammars: composite, decorator, intepreter
  • frameworks: template method, factory, abstract factory
  • in-class examples
H6: Model Refactoring II
Due March 4th, 10pm


H7: Subject-Observer in Java Swing 
Due Tuesday March 28, 10pm


H? :Transparent vs Safe Design
Due TBD
P5: Visitors By Eclipse
Sun Mar 19, 10pm


P6: Visitors by R3
Sat Mar 25, 10pm


P7: Model Refactoring 2 (The Sequel)
Due Sat  April 1,10pm


P?: Object Oriented Frameworks
Due TBD


P?: HP35 Calculator:
Composite and Interprer In Action
Due TBD
Midterm #2  (Tentative, Thursday April 6, in class, closed notes)
5. Architectural Patterns [2]
  • layers, multi-tiered and 3-tiered architectures, object-oriented virtual machines, symmetric vs. asymmetric layers
  • dataflow architectures, components and connectors, Java pipes
6. Parallel Architectures [2]
  • derivation of dataflow applications, 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 extensions
P?: Gamma: Parallelizing Sequential Streaming Applications
Due TBD
7. Service Oriented Architectures [2]
  • historical development (CORBA, COM) and evolution to present-day concepts
  • JAX web servers


8. Optional Topics (if there is time) and Course Recap [1]

Final   Friday, May 12, 9-12noon, Calhoun 100