Harvest, Evolve, and Reuse Models Easily and Seamlessly
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).
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.
The prototypical solution takes the concepts and implements them in an Eclipse environment as sets of plugins and features. Altogether, they build an Eclipse product.
This video shows the basic functionality how models can be stored into a model library. The process takes "known" parts into account and links them to the newly stored.
This video shows how the evolution approach assesses model quality and offers a staged approach that guides model quality.
This video shows how models can be "applied", i.e., reused. They are loaded from a model library and inserted into the open editor. Several libraries and several editors are supported.