====== Course "Automation of Programming" ====== The course is delivered to MIPT DIHT first year graduate students in Spring 2014 groups 993, 994. Professor: Anton Khritankov (contact: prog.autom (at) gmail.com) TAs: Sergey Tsarkov ===== Course Syllabus ===== Course includes three major topics that automate software development: * model driven software development (MDSD) via generic modeling techniques (e.g. Executable UML, xtUML etc.) * MDSD via domain-specific models (DSM) * model-based testing (MBT) Lectures are complemented with three labs: * UML Basics lab introduces students to UML modeling * in xUML Lab students develop a sample application using model-driven technology with UML * in DSL Lab students build a metamodel and implement a custom domain-specific language There are 30 lecture hours and 16 lab hours in the course (a 2-hour lab each two weeks). Course starts **February 27th, 2014**. Extended course syllabus can be downloaded {{:apmdd:apmdd-spring2014.doc|here}} (in Russian). Exam questions can be found {{:apmdd:билеты.doc|here}} (in Russian) ===== Schedule ===== ^Date^Topic^Lab (odd)^Lab (even)^ |02/27|Introduction to Model-Driven Software Development|UML Basics| | |03/06|Executable UML.| |UML Basics| |03/13|Foundational UML (fUML). Action Language for fUML (ALF)|UML Basics Due| | |03/20|Meta-modeling. Model-to-Model Transformation. Query-View-Transformation| | UML Basics Due| |03/27|Developing Model-to-Text transformations |xUML Lab| | |04/03|Invited lecture - Implementing business strategy in architecture | |xUML Lab| |04/10|Introduction to DSM and Domain-Driven Design|xUML Lab Due| | |04/17|Applications of MDD. Software Factories. Embedded software. Case studies| |xUML Lab Due| |04/24|Software testing. Model-based Testing overview. Test generation| |DSL Lab| |05/01|No class| No class |No class| |05/08|Testing from state-based and rule-based models. | |DSL Lab| |05/15|Course review |DSL Lab Due | | |05/22|Additional class - Labs| |DSL Lab Due| |05/29|Preparation for exam| Assignments due | Assignments due | |06/03|Final Exam| | | ===== Individual assignments ===== Individual assignments are given throughout the course. A list of available assignments to choose from is TBD (e.g. read a paper). ===== Grading ===== There is a final exam for the course. Exam schedule will be specified later. Unless a "fast win" the final grade CG includes: * labs - 50% * attendance - 25% * exam - 25% * individual assignments - 25% (sum is 125%) ===== Fast wins ===== Fast win is an assignment, completion of which is equivalent to getting the final grade. **Code generator** Implement an MDA tool chain for UML 2 using XMI, XML and Groovy as target platform. Follow the ideas of Executable UML. Note: A proof-of-concept implementation (PoC) is sufficient **DDD framework** Implement a DDD framework that generates Web pages and DB schema from ECore data model. **State-transition test generator** Develop a test generator tool from state machines that uses SCXML and support all-states coverage criteria. Assume that conditions and triggers are written in Java. **Functional test generator** Develop a DSL for specifying use-cases and develop a functional test generator from models in this DSL **Statechart code generator** Implement a UML-like statechart execution engine using Java, SCXML, xText and xTend2. **Configuration generator** Implement a Spring XML configuration code generator from UML structure diagrams (via XMI) using M2M transformation or XML toolkit **Model mutator** Implement model-level mutations for Lab3 (entities + gherkin) models using Ecore and QVT. **ERD model editor and generator** Implement an ERD model editor with GMF and a code generator to SQL DDL using xText and xTend2. ===== Course books ===== Main books: - Mellor S.J., Balcer M.J. Executable UML. A Foundation for Model-Driven Architecture - M. Fowler. Domain-Specific Languages - M. Utting, B. Legeard. Practical Model-Based Testing. A Tools Approach Additional books: - Greenfield J., Kent S. Software Factories Assembling Applications with Patterns, Models, Frameworks, and Tools. - Evans E. Domain-Driven Design Tackling Complexity In The Heart Of Software - L. Bettini. Implementing Domain Specific Languages with Xtext and Xtend