250 likes | 380 Views
The Umple Model-Oriented Programming Technology: Easy-to-Use Open-Source Code Generation. Code Generation 2013, Cambridge UK Timothy C. Lethbridge, University of Ottawa tcl@eecs.uottawa.ca http://www.eecs.uottawa.ca/~tcl http://www.umple.org. My background. Once worked at Northern Telecom
E N D
The Umple Model-Oriented Programming Technology: Easy-to-Use Open-Source Code Generation Code Generation 2013, Cambridge UK Timothy C. Lethbridge, University of Ottawa tcl@eecs.uottawa.ca http://www.eecs.uottawa.ca/~tcl http://www.umple.org
My background • Once worked at Northern Telecom • Collaborated with originators of ObjecTime / IBM Rational Tools since early 1990’s • Professor of software engineering at University of Ottawa • Have taught software engineering since 1991 • Research focuses • Usability of software engineering tools • Empirical studies • Recent research support: IBM, Ericsson, General Motors, Defense Deptartment Code Generation 2013 - Umple
Motivation • From our studies of practitioners • Code generation is weak in widely-deployed tools • Tools are awkward, do not interoperate • Modellers mostly • do it for documentation • make important errors • From our teaching of modeling • Students learned syntax, but failed to learn • Semantics • Pragmatics • To create implementable models due to lack of feedback Code Generation 2013 - Umple
Umple: Simple, Ample,UML Programming Language • 1. Open source code generator for UML • The only one that has • Infinitely nested state machines, with concurrency • Proper referential integrity and multiplicity constraints on associations • 2. Textual modelling tool set • Command line compiler • Web-based tool (UmpleOnline) for demos and education • Eclipse plugin • 3. Pre-processor to add UML, patterns and other features on top of Java, PhPand other languages Code Generation 2013 - Umple
Exercise: Compiling and Changing a Model • Go to http://helloworld.umple.org • Look at the example at the bottom • Observe: attribute, association, class hierarchy, mixin • Click on Load the above code into UmpleOnline • Observe and modify the diagram • Add an attribute • Make a multiplicity error, then undo • Generate code and take a look • Download, compile and run if you want Code Generation 2013 - Umple
Demo of the command line Umple compiler • Follows conventions of gcc • Used by ant scripts for building Code Generation 2013 - Umple
Umple Philosophy 1-4 • P1. Modeling is programming and vice versa • P2. An Umple programmer should never need to edit generated code to accomplish any task. • P3. The Umple compiler can accept and generate code that uses nothing but UML abstractions. • The above is the inverse of the following • P4. A program without Umple features can be compiled by an Umple compiler. • e.g. input Java results in the same as output Code Generation 2013 - Umple
Umple Philosophy 5-8 • P5. A programmer can incrementally add Umple features to an existing program • Umplification • P6. Umple extends the base language in a minimally invasive and safe way. • P7. Umple features can be created and viewed diagrammatically or textually • P8. Umple goes beyond UML Code Generation 2013 - Umple
A look at selected Umple features • Attributes • http://attributes.umple.org • Associations • http://associations.umple.org • Notice the inline and independent state machines • State Machines • http://statemachines.umple.org • Switch to ‘GraphViz state diagram’ in the options menu Code Generation 2013 - Umple
Umple Architecture 1 • Grammar DSL: Online • http://grammar.umple.org • (we migrated from Antlr to better handle embedded code blocks and gain flexibility) • Umple is written in itself • Key to testing and reliability • http://code.google.com/p/umple/source/browse/trunk/cruise.umple/src/Umple.ump Code Generation 2013 - Umple
Umple Architecture 2 • Umple’s own class diagram generated by itself from itself: • http://metamodel.umple.org • Colours represent key subsystems • Click on classes to see Javadoc, and then Umple Code Code Generation 2013 - Umple
Testing:TDD with100% pass always required • Multiple levels: • Parsing tests: basic constructs • Metamodel tests: ensure it is populated properly • E.g. http://code.google.com/p/umple/source/browse/trunk/cruise.umple/test/cruise/umple/compiler/AssociationTest.java • Implementation template tests: to ensure constructs generate code that looks as expected • Testbed semantic tests: Generate code and make sure it behaves the way it should Code Generation 2013 - Umple
Continuous integration • Small increments compiled frequently http://cc.umple.org • Single trunk, no branches for now • Online QA report:http://qa.umple.org Code Generation 2013 - Umple
Code Generation Approach 1 • Generation relies on ‘walking’ the metamodel • Where possible, new features are added by layering on top of the existing ones • e.g. • There was an existing ‘code injection’ feature • Constraints were implemented almost entirely at the metamodel level by adding ‘before’ and ‘after’ code injections Code Generation 2013 - Umple
Code Generation Approach 2 • Each generator is a separate plugin and can have a different architecture • Use Jet templates • Language independent common templates • http://code.google.com/p/umple/source/browse/#svn%2Ftrunk%2FUmpleToTemplate%2Ftemplates • Language-specific templates • http://code.google.com/p/umple/source/browse/#svn%2Ftrunk%2FUmpleToJava%2Ftemplates • Language-specific translation functions • http://code.google.com/p/umple/source/browse/trunk/cruise.umple/src/Generator_CodeJava.ump Code Generation 2013 - Umple
Code generation lessons from Umple 1 • Process of developing Umple • Agile continuous integration • Language written in itself • Multi-level test-driven development • Process for all users of Umple • Modeling and programming at the same level • Many semantic model checks produce warnings & errors • Round trip engineering is banished • Generation of diagrams from text and text from diagrams • IDE Flexibility: Eclipse / Web / Command line • Incremental umplification Code Generation 2013 - Umple
Code generation lessons from Umple 2 • Language features • Deep attention to detail in state machines and UML associations • Mixins for separation of concerns • Multi-lingual generation and embedding • Generated code looks nice • No ‘Umple runtime’ • Can be inspected to gain confidence • No risk adoption Code Generation 2013 - Umple
Evidence of benefit • Umple in use an a couple of small companies • Umple development in itself • 20+ developers • Empirical studies show • Umple code is easier to understand than Java • Helps students learn to model: CSEE&T Code Generation 2013 - Umple
Results of survey Prof. Lethbridge should use it in future courses Umple in the lab helped me understand concepts Other tools would have been just as effective I would use Umple in the future, assuming bugs fixed I will get bettergrades because of Umple Umple in the classroom helped me understand concepts As of Dec 2010, Umple is too incomplete or buggy CSEE&T 2011
Ability to generate code to represent the model Availability of a textual form for models and diagrams Ability to edit diagram or text & have the other reflect changes CSEE&T 2011
Comparison of Grades • Comparison of 4 offerings of the same course before introducing Umple, and 2 offerings afterwards • Midterm examination grades on UML modeling question rose from 75.8% to 82.3% • 8.6% improvement • Final exam grades on UML modeling questions rose from 76.4% to 83.6% • 9.4% improvement • Highly statistically significant p<0.00002 on T Test • n=332 prior to Umple; n=137 afterwards • Similar results in 4th year course SEG4110 • No difference in non-UML questions CSEE&T 2011
The Near Future • Real time UML/Autosar extensions • Robust C/C++ generation • Application for Eclipse Foundation hosting • Seek industrial uptake Code Generation 2013 - Umple
A Few Direct Web Links • UmpleOnline • http://try.umple.org • User Manual • http://manual.umple.org • Google Code Hosting Site • http://code.umple.org • This presentation: • http://www.site.uottawa.ca/~tcl/presentations/UmpleTutorial-CodeGeneration.ppt Code Generation 2013 - Umple
Questions? Code Generation 2013 - Umple