I. Introduction
The emergence of Model-Driven Engineering (MDE) and General-Purpose Modeling languages (GPMLs), such as the UML, have assisted software engineers in raising the level of abstraction in their designs. In addition, software engineers are able to generate implementations automatically from models by combining model transformation and source code generation techniques. Although GPMLs offer several benefits (e.g., productivity improvement, better portability, and quality improvement), one of the drawbacks of using a GPML is the investment of time and effort needed to learn a large set of GPML constructs, which may not be relevant or needed for a specific problem domain and may be too challenging to use for end-users who are not computer scientists.