Automated Software Design: Volume 1
~340 pages + Videos

Don Batory
Department of Computer Science
University of Texas at Austin
Austin, Texas 78746

To All:

This text was derived from my lectures in upper-division (3rd
and 4th year) Undergraduate Software Design at the University of Texas at Austin. I wanted to record their spirit and visuality as both contribute to my presentations.

This class and now this text fits a unique need in an undergraduate Computer Science curriculum. In reviewing undergraduate courses in Software Engineering (SE) at other schools, I haven't found a comparable course that covers the topics of Model Driven Engineering (MDE), Refactorings, Design Patterns (DPs) and Software Architectures, Software Product Lines (SPLs), Dataflow Program Design by Transformation (DxT), and an essential bit of Category Theory (CT), with illustrations from compilers and interpreters and databases in an integrated way.   Further, there is novel material in every chapter of this tex.

Yes, I've seen individual courses on domain-specific design (e.g., compiler design, operating system design), and courses covering Design Patterns or Foundations of Software Engineering, but rarely see MDE, SPLs, or anything like DxT mentioned. This is regrettable, as all of these paradigms are exemplars of future software development and are topics undergraduates should have familiarity before they graduate. Bluntly, programming and data structures is not software design, just like carpentry and plumbing is not architecture. They are substantially different.


I once said to a class that the material of this text is difficult. It is not. It was difficult for me to integrate the countless isolated ideas and results unearthed by decades of software pioneers to make it look simple in a coherent whole. I hope it is simple for you.

I had a satisfying career collecting and distilling this information for you. Enjoy!

To Instructors:

I have a complete set of lecture notes in the form of Powerpoint slides that you are welcome to use. The first versions of this text do not have exercises at the end of chapters. In later versions, I hope to add them. If you need the lecture notes and/or exercises, please contact me via email.


batory@cs.utexas.edu
November 2020

Publically released November 2020

Click the above image to download
zip file (PDF+videos) of current text.



Price for PDF+Videos  FREE!  Click on image above or here.

Note: Lulu may have several versions of this text; all are the same content.  The price differences are due to global distribution costs (e.g. a text appearing on Amazon); middlemen want their cut.  By from the Lulu.com bookstore by following the link above.


Chapter and Text Contents:

         1  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 17
         What is software Design?  How to think about Design
         and Incremental Design, Model Driven Engineering, UML class
         diagrams, refactorings and graph identities, dataflow
         programs, software product lines, and category theory.

      2  Model Driven Engineering . . . . . . . . . . . . . . . . . . 41
         UML class diagrams (associations, association classes
         n-way associations, inheritance and generalizations), UML
         object diagrams, constraints, metamodeling, class diagrams
         to schemas, object diagrams to databases, MDELite (an MDE
         platform in Java), Aocl (a pure Java package for writing
         constraints), Java streams, traversing an association is a
         rightsemijoin, constraints and error reporting, model-to-text,
         model-to-model, text-to-model transformations, creating
         MDE tools, Model Based Systems Engineering

      3  Refactorings . . . . . . . . . . . . . . . . . . . . . . . . 97
         Physics of Refactoring, Basis Operations for Refactoring,
        
metamodel refactorings, Reflective refactoring (composing
         basis refactorings to construct compound refactrogins),
         object-oriented refactorings, the Java metamodel, transations
         member refactorings (rename and delegate single methods,
         rename and delegate polymorphic methods, change method
         signature, ... fundamental limitations of refactorings and
         refactoring engines.

      4  OO Design Patterns . . . . . . . . . . . . . . . . . . . . . 143
         Classical gang-of-four patterns, scripting refactorings
         to implement design patterns using Reflective Refactoring,
         GenVoca grammars, software layer partitioning, object-oriented
         virtual machines, module partitioning, frameworks.

      5  Software Product Lines . . . . . . . . . . . . . . . . . . . 193
         Progam families, preprocessing, features, feature models,
         feature diagrams, propositional formulas, GenVoca grammars,
         feature constraints, propagation of constraints, boolean
         constraint propagation and SAT solvers, unit testing feature
         models, feature model analyses (dead code, presence conditions,
         debugging feature models and back-propagation, X15 Java SPL
         refactoring engine.

      6  DataFlow by Transformation . . . . . . . . . . . . . . . . . 241
         Dataflow transformation basics: refinements, optimizations,
         map reduce, correct-by-construction, testing, graph grammars,
         Gamma Hash Join and Upright Crash Fault Tolerant Server
         example, abstract interpretation, algebraic specificiations.

      7  Category Theory. . . . . . . . . . . . . . . . . . . . . . . 273
         Domains and instances, units, recursion, arrows, laws of
         Category Theory (CT), constructive and non-constructive arrows,
         CT uses in model driven engineering, refactorings and design
         patteerns, software product lines, dataflow by transformations.

      A  Symbols and Terms of This Text . . . . . . . . . . . . . . . 309
      B  Class Diagram Creation Guidelines. . . . . . . . . . . . . . 313
      C  Grammars and Parsing . . . . . . . . . . . . . . . . . . . . 315
         BNF Grammars, Other Grammar Notations, Parse Trees, Abstract
         Syntax Trees and Attribute Grammars

      D  Bad SPL Designs using Preprocessors. . . . . . . . . . . . . 323
      E  OO Refactoring Preconditions . . . . . . . . . . . . . . . . 329
         Detailed explanations of preconditions for OO refactorings.