Reusing Domain Engineered Artifacts for Code Generation
Software development has undergone several changes over decades and evolved from manual typing up source code to (partially) generating source code from diagrams. However, some of the motivating motives remained constant over time. One of which is the urge to reduce time necessary for developing a system. This is because development will remain a partially manual executed task as long as no way for completely generating software is found. Another motivation is the need for a certain quality which can be guaranteed upfront, if some parts of the system are generated from diagrams.
These and more motivating aspects have been extensively developed in the industries and largely discussed in science until model driven architecture (MDA, OMG), and model driven engineering (MDE) emerged. Both address the above mentioned aspects and comprise several methodologies which include a domain specific modeling (DSM). This methodology brings about figures that map the objects under consideration to models. Among these models are class diagrams as know from UML which are called domain models in these contexts.
While both approaches take these domain models as inputs for code generation, only MDE includes reuse in DSM. But this reuse remains rather rudimentary. Taking a closer look at model repositories one might suppose that these repositories are meant to store models so they can be reused rather easily in different projects. But the goals for these tools are totally different! All the available repositories (by and large) only consider versioning, migration, transformation, conflict detection, merging and search. This means, models are not related to each other, there is barely a description of models, no examples are present how the models could be used or no interfaces are defined which point to the most important aspects that could help reusing a particular model.
The goal of this research project is to bolstered model reuse by providing a holistic approach. This means, the three steps in a reuse process need to be supported on a conceptual and on a tool level. First, reusable model parts need to be identified and “harvested” (hermes.harvest) so they can be put away for later reuse (hermes.store). Second, the stored model parts need to undergo evolutions so they can enhance over time and preserve the benefits (hermes.evolve). Last, the stored model parts need to be found and recommended to interested users (hermes.reuse).
To do so, we developed an enhanced knowledge libraries (MoCCa and hermes.store) which build the foundation for harvesting, evolving, and reusing. They do not treat models as in an isolated world, but relate them to each other by describing how they were used together. These relationships cross borders and overcome the usual reuse obstacles and enable the full power of previously modeled knowledge.
But, as this enhanced knowledge library grows, the demand for efficient querying and retrieving emerges begging for a recommender mechanism (hermes.reuse). We built a framework that enables to build easy model recommendation strategies working on several data back ends; MoCCa and hermes.store are among them.
Unfortunately, libraries need to evolve over time and we support this (hermes.evolve). As a result a model added to an enhanced knowledge library undergoes quality stages indicating its reusability. From vague over decent to fine, a model can progress adhering to quality gates and loosing it if it does not fulfill the quality requirements any more.
Last, but not least, an enhanced knowledge library needs to be filled with data what is kind of tedious for models. Due to that we realized conceptual and algorithmic approach how to find reusable parts of models and how to integrate them into the knowledge library.
A proof of concept is our hermes-Eclipse (Linux 32 Bit GTK, Linux 64 Bit GTK, Windows, Windows 64 Bit) that is a fully fledged Eclipse with everything necessary to experiment. For installing the plugins, we offer an update site and an additional 3rd party update site.