Have a good Summer!

Professor Don Batory
GDC 5.826
contact by email

office hours tbd
Days and Time
Unique #
Ground Rules UTCS Rules to Live By
Your Grades Canvas
Final Friday May 17th from 7-10pm in GDC 4.304

Prerequisites, Overview, and Goals

This course explores leading edge paradigms for automated software design. Topics/paradigms include:

A spectacular example of the integration of most of these areas was realized almost fourty years ago: relational query optimization (RQO). A relational query is specified in SQL, a parser maps it to an inefficient relational algebra expression, a query optimizer optimizes the expression automatically, and an efficient query evaluation program is generated from the optimized expression. SQL is a prototypical declarative DSL. Query evaluation programs are specified as compositions of relational algebra operations; relational algebra is a prototype for compositional programming. Query optimizers achieve automatic programming by rewriting an inefficient expression/program to a semantically equivalent but more efficient expression/program. The cost models that drive expression optimization are examples of program analysis. Translating a relational algebra expression to an efficient program is generative programming and translating an SQL statement into an efficient Java program is an elementary example of model driven engineering.

A "holy grail" of Software Engineering is to replicate the success of RQO in other domains. Feature Oriented Software Development is a generalization, and its ideas are at the confluence mainstream research topics in software modularity, program design and program generation: OO design, product-lines, program refactoring, model driven engineering, program evolution, and program transformations.

 Programming Assignments

All programming assignments will use Java. We will use the following software, all of which is free to UTCS students, and all of which has been installed in the UTCS public labs.  The following is for Windows Platforms.  If you use Apple or Linux machines, well, I will try to help as much as I can, but no promises!

Please note that some Java programs will be released and updated during the Semester.  These programs are NOT installed on the UTCS public labs.  You will have to install these updates yourself.  Their links will be posted on assignments.

Course Prerequisites

Basic familiarity with the following topics are assumed -- all that is needed will be covered, but some prior experience helps a lot!

Lecture Notes and Texts

Lecture notes posted online after the lecture as downloadable PPTX files.  Links to the lectures are given below in the Course Outline. There are two required texts for this course:

The Automated Software Design text is free but not yet published. Access is password protected; I'll provide the password to you in class. The text encodes my lecture notes from my undergraduate class and its material is the preparation for this class.  There are chapters that I'll cover from this text (and then some) in this graduate class. Use it as a reference for additional background material.

Hint: I am unimpressed with today’s ebooks.  They are as expensive as hard copies and ebook software sucks.  Your call.  As a free alternative -- a progenitor of this text is Pierce's 1988 CMU Tech Report "A taste of category theory for computer scientists", which  I have annotated. Use it.

Class Grades, Projects, and Homework

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 programming projects, your final grade will be no greater than a "B".
  2. Final counts 40%; midterm counts 40%; class (room+piazza) participation 20%,  approximately.

All programming projects are to be submitted through Canvas.  A PDF file explaining your solution must be included on all assignments.

Extenuating Circumstances

If you have difficulty meeting the requirements of this course, fail to hand in an assignment, or miss an exam because of extenuating circumstances, 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.


Numbers in [brackets] indicates the estimated number of lectures on a topic. The number indicated is a lower-bound, as there will be classroom discussions to work on problems and review of homework assignments. Papers that are listed below are required readings and are accessible via its web link.  The order in which topics are presented might be changed as the class progresses.

The syllabus on the first day of class is here (to be posted here after the first class), as I do modify this page as the course progresses, like posting new assignments, readings, and lectures.

[# of lectures + days of discussion]




0. PreCourse Survey
 Precourse Survey

1. Introduction to Model Driven Engineering  [5] 
  1. UML class diagrams, MDE models and metamodels, T2M transformations
  2. Metamodel Constraints and M2M transformations
  3. Building Domain-Specific Tools with MDE, bootstrapping MDE Tools
  4. Metamodel Equivalence and Metamodel Refactorings
  5. In Class Exercises
 Ch1 & 2


Wikipedia MDE Article

H1: Mappings to Tables

H2: Metamodels
Solutions Feb 8

H3: Metamodel Refactoring
 Feb 13, 10pm

P1: Constraints, M2M,
and M2T Xforms
Feb 7, 10pm


P2: Creating MDELite Tools with Catalina
Feb 15, 10pm


2. Feature Models of Software Product Lines (SPLs) [3] 

  1. Feature models, attribute grammars, propositional formulas,
    SAT solvers
  2. Feature model analyses, reasoning about edits
  3. Optimizing configurations in SPLs

Ch 5.1 - 5.3

Mining Config Constraints

(Sec 7.2 and 7.3)

P3: Violet to OOSchema Tool
Feb 22, 10pm

3. Feature Oriented Software Development (SPLs) [3] 

  1. Layered designs, OO virtual machines, collaborations, extensions,
    mixins, mixin-layers
  2. FOSD, Principles of Uniformity and Scalability,
    generalized modularity, composition
  3. example in FeatureHouse
Ch 5.4



P4: Incremental Development
of a Java SPL
Due March 11


4. Feature Interactions and Product Lines of Product Lines [2]
  1. Featue interactions, quarks, formal models of interactions
  2. Multi product lines, product lines of rank n>1, kubes (if time)
Feature Interactions,
and Composition
 H4: Feature Interaction Algebras
 Due Apr 1

P5: FeatureHouse
 Java SPL
Due Apr 3

5. Refactorings and Design Patterns  [4] 

  1. Review of Classical Refactorings
  2. Review of Classical Design Patterns
  3. Reflective Refactoring - Part 1
  4. Reflective Refactoring - Part 2
 Ch 3+4

6. Design by Transformation (DxT) [2] 

  • Map reduce, Liskov and Perry substitution principles,
    refinement, optimization, correct-by-construction
  • Parallel architectures, product lines of streaming applications
  • Product lines of streaming applications (optional)
 Ch 6
P8 Gamma
Due May 9th

7. Category Theory [4]

score card for categories

  1. Domains, instances, arrows and MDE
  2. Pragmatics, inheritance, SPLs, functors, examples,
    commuting diagrams
  3. Products, product families, products of categories, pushouts
  4. Applications: portlet synthesis, geodesics, lifting,
    homomorphisms, test generation
 Ch 7

Pierce's  Text
(pgs 1-27, 36-39, 41-47)
H5: BNF of BNF
Due Apr 22

8. Final Review [1]