<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Support for Evolution of Software Systems using Embedded Models</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
							<email>michael.goedicke@s3.uni-due.de</email>
							<affiliation key="aff0">
								<orgName type="department">Specification of Software Systems Institute of Computer Science and Business Information Systems</orgName>
								<orgName type="institution">University of Duisburg-Essen</orgName>
								<address>
									<settlement>Campus Essen Essen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Michael</forename><surname>Striewe</surname></persName>
							<email>michael.striewe@s3.uni-due.de</email>
							<affiliation key="aff0">
								<orgName type="department">Specification of Software Systems Institute of Computer Science and Business Information Systems</orgName>
								<orgName type="institution">University of Duisburg-Essen</orgName>
								<address>
									<settlement>Campus Essen Essen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Moritz</forename><surname>Balz</surname></persName>
							<email>moritz.balz@s3.uni-due.de</email>
							<affiliation key="aff0">
								<orgName type="department">Specification of Software Systems Institute of Computer Science and Business Information Systems</orgName>
								<orgName type="institution">University of Duisburg-Essen</orgName>
								<address>
									<settlement>Campus Essen Essen</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Support for Evolution of Software Systems using Embedded Models</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">D6B096F3DB7B500D9D5138B8AC2F655B</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T23:32+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In this paper we show a new approach to evolution of software systems. We embed high-level specification information into program code patterns, so that such program code is interpretable at different abstraction levels. Since these model information is also acessed at run time for execution, we can avoid the situation that program code and high-level specifications are out of synch. Since the program code is thus a valid notation for the model syntax, we can apply transformations based on model semantics to it. An example will be provided that transforms software based on state machines to process models. This leads to a new perspective of software evolution in which the program code can be considered at higher levels of abstraction.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>In many cases software systems are in use longer than their developers anticipate. This implies especially for larger software systems that essential structural information regarding the overall software architecture and the way operations inside the system actually work is needed beyond the initial development of the system. Usually this kind of information is called documentation and is notoriously out of synch with the actual system after some development time.</p><p>Model-driven software development (MDSD) approaches have been advocated to remedy some part of this problem which means that models at a higher level of abstraction containing less detail are used to design a system and generate the actual running version by means of a sequence of transformations. Such transformations take care of mapping the high level concepts to low level details at the programming language level in order to obtain an efficiently running software system. Such transformations can be executed during development time or during run time which means direct execution of the specified models.</p><p>Such approaches do not take into account the issues of evolution over a long period of time. Software systems being in use and in constant development over decades is by now the common case while green field developments are very rare these days. Such a long development time requires tight synchronisation between the abstract models on the one side and the code which is actually executed on the other side. This is due to the fact that the abstract models contain the main part of the essential information regarding system structure and system operation. This abstract specification information contained in the models experiences less change and is thus more stable than the actual program code which has to keep up with changing hardware and software platforms. To make this issue of volatility even worse, hand coded pieces are necessary to overcome some limitations of the automatic transformations. The inevitable evolution of the software system requires then a careful and difficult evolution of the transformations and re-coding of the hand coded pieces and fine tuning related additions.</p><p>A common observation is that although all stake-holders in the development process know about these interdependencies between the various development stages, at the end of the day the only piece of information being up to date and available is the program code.</p><p>Given these circumstances one would expect tools which help the developers to infer the abstract information of a software system from the actual code. In fact, many approaches [Ant07, Mef06, Mik98, EBM07, SD05, Nec02] pursue this goal. However, it is very difficult to distinguish automatically between program code which represents essential statements regarding business logic and system structure on the whole and code which exists only due to some complicated requirements of some frameworks or libraries which were used or had to be used in the code. So the result of these tools comes in many cases attached with a degree of precision of less than 100 percent. This is not satisfying especially in large software systems since additional analysis has to be done in order to assess the outcome of changes to the source code or models (in case of MDSD).</p><p>The need to support long living evolving software systems thus requires a tight integration of program code with its specification (the model) at an abstract level. An additional benefit would be that the specification is contained in the program code in such a way that the specification can be extracted and interpreted during runtime. Such a feature would allow to analyse many important aspects during runtime. This is especially useful in systems which need to run non-stop 24x7. An important aspect, for example, is the set of dependencies a system has on other systems. Modern software systems come with mechanisms like plug-ins which allow to add additional functionality at deployment or even during runtime of the system. Thus the analysis of the interdependencies in a whole landscape of software systems can only be done at a specific point in time regarding an actual set of running systems containing all plug-ins etc.</p><p>If the model and the code is tightly intertwined a specific step of evolving a software system entails various checks and (mostly local) transformations which ensure the desired integration of program code and its model. Of course, this also means that not arbitrary program code structures are possible. Such a concept has been described in our earlier work <ref type="bibr" target="#b3">[BSG08,</ref><ref type="bibr" target="#b1">BG09]</ref>. Here we show an additional benefit of our approach. This is illustrated by the problem to transform the model which belongs to a specific class of models into an equivalent model of another model class. Of course, this is only possible for compatible model classes e.g. those specifying actions. Here we consider the class of state machine models and process models. This is useful when there is a need to create a new view on the system which has been recognised as an important need in the research field of views and viewpoints in software engineering.</p><p>Below we describe our approach and illustrate it with the example transformation from state machine models to process models. In section 2 we describe our general approach which is not limited to models specifying actions. However, the specific approach using state machines and process models is explained as well. In section 3 we show how the actual program code based on a state machine model is transformed into a corresponding program code based on an equivalent process model derived by a small set of transformation rules. This presentation is complemented with a brief discussion of related work in section 4 and discusses pros and cons in the concluding section 5.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Embedded Models</head><p>Model-driven software development approaches have the objective of relating high-level models to executable systems. Thus, when high-level models are transformed between different notations, a mechanism must exist that derives algorithmic program code from these models. This development step is unidirectional since models cannot be unambiguously extracted from arbitrary program code again. While working with different abstraction levels is desirable for model-driven software development, this unidirectional step constitutes a break of the principle of using model transformations at a higher level of abstraction for software development.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Concept</head><p>We earlier proposed the concept of embedded models <ref type="bibr" target="#b4">[BSG09]</ref> to overcome these problems. The basic idea of embedded models is to define program code patterns in objectoriented general-purpose programming languages that represent the abstract syntax of high-level models. The program code is thus interpretable at different levels of abstraction, that of the programming language itself and that of the formal model. For this purpose, only static object-oriented structures are used that are not only available at development time, but also at run time. We make especially use of the ability of modern programming languages to decorate object-oriented structures with type-safe meta data <ref type="bibr" target="#b23">[Sch04]</ref>, thus adding information to program code fragments relating them to high-level models.</p><p>Thus it is possible to consider the program code at development time with respect to a formal model. At run time, the same program code is executed by small frameworks that access the program code fragments by means of structural reflection <ref type="bibr" target="#b7">[DM95]</ref>. According to the model semantics, acting on the static program code structures creates sequences of actions. Since the program code pattern is part of arbitrary program code, well-defined interfaces to the code outside the pattern must be defined to access the application's state and to invoke business logic. The complete definition of an embedded model thus consists of the following:</p><p>• A precise formal model definition.</p><p>• A program code pattern that is formed after the abstract syntax of this formal model.</p><p>• An appropriate execution semantics.</p><p>• Interfaces to arbitrary program code that are interpretable at the level of the model semantics and also provide an appropriate functionality at run time. With such embedded model definitions, the program is no longer unidirectionally derived from models. Instead, it is another notation carrying the semantics of the formal model, but includes the possibility to be executed by an appropriate framework while at the same time being integrated in arbitrary applications. Considering model transformations, this means that the program code can be fully integrated: When an embedded model exists, the related code can be source or target of a model transformation. This makes transformations a much more powerful tool for model-driven software development: Models can not only be transformed for communication and design purposes, but also to create and re-engineer executable systems. The principle of this approach is sketched in figure <ref type="figure" target="#fig_0">1</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Example</head><p>An example for such a program code pattern is shown in figure <ref type="figure" target="#fig_1">2</ref>. The program code fragments represent a part of a state machine model we described in previous publications <ref type="bibr" target="#b3">[BSG08]</ref>. The language chosen for this implementation is Java <ref type="bibr" target="#b10">[GJSB05]</ref> with its annotations enhancement for meta data inclusion <ref type="bibr" target="#b28">[Sun04]</ref>.</p><p>The class at the top represents a state where the class name equals the name of the state. The method in the state class represents a transition. It is decorated with meta data referring to the target state class and a "contract" class containing guards and updates. An interface type referred to as "actor" is passed to transition methods. Its methods are interpreted as action labels which can be called when the transition fires.</p><p>Guards and updates are implemented as two methods in a "contract" class which is shown at the bottom of the figure. Both evaluate boolean expressions which serve as guards. These guards use the current variable values of the state machine to determine if a transition can fire, the update compares the current values with the values from the point in time before the transition fired to determine the changes to the state space. For this purpose both methods access a "variables" type which is a facade type representing the variables constituting the state space of the state machine. This type contains "get" methods for each variable, which are by this means defined with a label and a data type.</p><p>The execution framework can access the classes, methods and annotations by means of reflection. It invokes guards and determines a transition that can fire. After the transition method has been invoked, the update is called and the next state is reached. For this embedded model we already developed a transformation into the input language of the state machine model checker UPPAAL <ref type="bibr" target="#b13">[LPY97]</ref> which enabled graphical design and verification of the model.</p><p>The complete example state machine consists of 10 states, 27 transitions and 8 variables. It belongs to a load generator application for performance tests and entails a user interface, networking functionality for remote controlled load generation and statistical evaluation of measurement results. These issues are hard to express in models, so that a complete model-driven development of the system was not feasible. However, the core of the load generation process is the strategy used to generate load. It can be modeled as an embedded state machine because it has a well-defined behavior, works with a limited set of variables and initiates the execution of business logic depending on the current state.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Program Code Evolution by Model Transformation</head><p>In this section we are going to discuss a concrete example on how software evolution can be supported by embedded models. In this example the core behaviour of a software system is designed as a finite state machine. At the level of models this state machine can be transformed into a process model automatically while losing only just a few features of state machines that cannot be expressed in process models. Such an automatic transformation is only possible if the program code adheres to the rules and complies with the model semantics. Thus, embedded models are needed, which define program code structures that are unambiguous.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Sketch of Concept</head><p>Program code can be expressed as its syntax tree generated by a parser. This tree can be enriched by additional semantic information (e.g. edges denoting references) and this way be extended to an attributed graph. Since embedded models rely on static structures, these parts of a model are reflected by the generated graph. Thus model transformation rules that are able to transform a state machine model into a process model or vice versa can be rewritten in order to transform program code with an embedded state machine into program code with an embedded process model or vice versa respectively. From state machines to process models, this transformation consists of several steps:</p><p>• All states of the state machine have to be converted to decision nodes in the process model.</p><p>• All transitions in the state machine have to be converted to activity nodes properly connected to decision nodes in the process model.</p><p>• Each activity node that contains more than one action label has to be split up into a sequence of activity nodes. This step can be performed here or at any later point in time.</p><p>• Each decision node having exactly one incoming and one outgoing transition can be discarded, connecting the nodes of the incoming and outgoing transition directly.</p><p>• Each decision node without incoming transitions is changed to a start node.</p><p>• Each decision node without outgoing transitions is changed to an end node.</p><p>• Each descision node with multiple incoming transitions and only one outgoing transition is changed to a merge node.</p><p>While this list of steps applies to the model transformation itself, using embedded models requires additional steps because formal aspects of program code (e.g. import statements) have to be taken into account. Note that special concepts like state machines communicating over channels, that have to be expressed by parallel and joining processes, are not considered here in order to keep this example short.</p><p>All rules can be implemented as graph transformation rules acting on the graph generated by parsing program code. All changes can be written back as local changes without overriding program code statements that are not part of the model. For example, methods can be moved, copied or renamed and even modified by adding or removing annotations or parameters without touching the body of the method. However, if the transformation requires additional code, new source files can be generated.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Graph Transformation Rules</head><p>The actual set of graph transformation rules used to implement the concept sketched above consists of 21 rules. The implementation has been done using AGG 1.6.4 [AGG] as graph transformation engine with GGX-Toolbox <ref type="bibr">[GGX]</ref> for parsing and rewriting Java files. The algorithmic steps listed in the previous section could be implemented by transformation rules straight forward. At first, two rules are concerned with converting states to decision nodes and transitions to activity nodes, implementing the first two steps. After that, a set of six minor rules do some necessary housekeeping to the graph like reordering imports or removing unnecessary annotations. The next two rules remove source code not longer needed and useless decision nodes according to the fourth step of the algorithm. A set of three simple rules is the next to be executed, implementing the last three steps of the algorithm. Afterwards only one major rule is left for splitting up activitiy nodes, which was deferred until here. Another set of seven rules is finally concerned with some adjustments to the code.</p><p>One of the most important rules -changing states to process nodes and creating activity nodes -is shown in figure <ref type="figure" target="#fig_2">3</ref> in a simplified manner. Due to the use of embedded models, elements to be moved can easily be identified by their annotations on the left hand side of the rule and thus reassembled on the right hand side. Similarities between state machines and process models allow to reuse larger parts of existing program code, e.g. complete method bodies. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3">Generalization of the Approach</head><p>In order to gain reusability these rules can be grouped into five different categories. The main criterion is whether they are concerend with elements of the embedded model before transformation (source model), elements of the embedded model after transformation (target model), arbitrary source code or graph elements that are not relevant for the syntax of program code.</p><p>The first category contains rules that act both on elements of the source model as well as of the target model like the rule shown above. These rules can hardly be reused in a general approach since they are specific for a transformation between a specific pair of model types.</p><p>The second category contains rules that are responsible for deleting elements from the source model. They can possibly be reused if a transformation starts from this type of source model and has to delete these elements, independent from the target model. Similary, the third category contains rules that create elements from the target model without considering the source model. They can possibly be reused if a transformation has to create the same type of target model.</p><p>The fourth category contains rules that work on arbitrary source code elements that are not related to embedded models directly. They might be useful in general, even without working with embedded models. The same applies to the fifth category, containing rules that work on the structure of syntax graphs itself.</p><p>Besides rules from the first category, all other rules are reusable at least in some other transformations, thus the approach can easily be generalized. Building a larger library of rules would allow to define different transformations between embedded models, e.g. from process models back to state machine models, by combining rules in the right way.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Related Work</head><p>Approaches exist that try to relate program code to higher-level specifications. When these specification are formal models, round-trip engineering <ref type="bibr" target="#b27">[SK04]</ref>  Integrating models in code has also been studied in <ref type="bibr" target="#b2">[BM06]</ref>. Compared to our approach, the references to model elements are generic and not related to specific properties of formal models.</p><p>The main issue discussed in this presentation refers to model transformation. This area of research is very active and well explored. A good overview of bidirectional transformations can be found in [CFH + 09]. In addition, the field of program transformation is addressing similar goals. In most cases program transformation is performed in form of refactorings which is a different case compared to our approach here: In refactoring approaches a program is (locally) restructured in order to avoid bad code smells. Here we transfer a given program which has a specific structure into an equivalent program with another specific structure.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Conclusion</head><p>In this paper we described an approach which reports on the benefits of tight integration between program code and its specification in form of a given class of models. The approach transforms a software system based on a state machine model into an equivalent program code again with a model based on the class of process models. This could be then the basis for further developments. The tool chain to support this kind of high level transformation builds on graph transformation and a graph representation of the programs which contains additional model information in form of annotations as available in Java.</p><p>The actual set of transformation rules is surprisingly small. Of course, there are the usual preparation and house keeping transformations which provide the necessary build up and cleaning process. The actual transformation is done by just a few transformation rules. Of course, it can be argued that this is due to the small conceptual distance between state machines and process models. But it is also clear from the discussion on views and viewpoints in the literature that each view is a legitimate and useful way in its own right to provide a specification of a system or a system part.</p><p>Tools have been implemented to support the actual transformations for multiple purposes, as we described in our previous publications. The objective to recover specifications unambiguously can be used to transform between models as presented in this contribution, but also for visual design and verification. Since embedded models are based on static program code structures that are accessible by means of reflection at run time, they can also be extracted from running systems and transformed into abstract representations, for example for monitoring.</p><p>If the approach is applied to model classes being more apart than the two classes used in this paper we envisage still a great part of the transformation process being supported automatically. The parts which have to be supported manually is very small and has clear interfaces to the rest of the system. Thus specific support can be created for these manual steps as well.</p><p>Support for additional model classes is currently in development. This will extend the approach to structural models of the systems and widens the support for more runtime related monitoring, refurbishment and evolution of software systems.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Model transformations with embedded models: The chain of possible bidirectional transformations does not terminate with program code generation. Instead, program code can carry different abstraction levels, thus making it another notation for embedded models and part of the related transformations .</figDesc><graphic coords="4,124.80,211.64,357.18,136.16" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: A state definition with an outgoing transitions and its contract. The first method of the contract checks a pre-condition with respect to the current variable values, while the second method checks a post-condition and may thus compare the current values to the previous values.</figDesc><graphic coords="5,160.52,125.80,285.73,280.78" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Simplified graph transformation rule for transforming states into process nodes. Nodes deleted from the syntax graph are marked in red while newly created nodes are marked in green. Some of the preserved nodes are renamed during transformation. Note, how contents from the original state node are moved to a newly created activity node, while contents from the original extra contract node are moved to the existing process node.</figDesc><graphic coords="8,124.80,125.80,357.16,185.89" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>concepts can be applied. Informal specifications can inferred from program code by detecting patterns [PSRN05, Shi07]. Although specifications can be extracted from program code based on design patterns [NWZ01, DLDvL08, WBHS07, NKG + 07, Mef06, GSJ00, MCL04, MEB05], all of these approaches still require manual effort or are based on heuristics and are thus errorprone. Approaches to formalize design patterns [SH04, Mik98, MDE97] work at a lower level of abstraction and are not related to abstract specifications. Approaches which consider the program code itself as a model [VHB + 03, HJG08, Vol06], for example using model checking techniques, also work with program code semantics at a low level of abstraction and do not consider abstract specifications.</figDesc><table /></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Round-trip engineering using framework-specific modeling languages</title>
		<author>
			<persName><forename type="first">Michal</forename><surname>Antkiewicz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">OOPSLA &apos;07: Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion</title>
				<meeting><address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="927" to="928" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Embedding Process Models in Object-Oriented Program Code</title>
		<author>
			<persName><forename type="first">Moritz</forename><surname>Balz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the First Workshop on Behavioural Modelling in Model-Driven Architecture (BM-MDA)</title>
				<meeting>the First Workshop on Behavioural Modelling in Model-Driven Architecture (BM-MDA)</meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Introspective Model-Driven Development</title>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Büchner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Florian</forename><surname>Matthes</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Architecture, Third European Workshop, EWSA 2006</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<meeting><address><addrLine>Nantes, France</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2006">September 4-5, 2006. 2006</date>
			<biblScope unit="volume">4344</biblScope>
			<biblScope unit="page" from="33" to="49" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Embedding State Machine Models in Object-Oriented Source Code</title>
		<author>
			<persName><forename type="first">Moritz</forename><surname>Balz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Striewe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 3rd Workshop on Models@run.time at MODELS 2008</title>
				<meeting>the 3rd Workshop on Models@run.time at MODELS 2008</meeting>
		<imprint>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="6" to="15" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Embedding Behavioral Models into Object-Oriented Source Code</title>
		<author>
			<persName><forename type="first">Moritz</forename><surname>Balz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Striewe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Engineering 2009</title>
		<title level="s">Fachtagung des GI-Fachbereichs Softwaretechnik</title>
		<meeting><address><addrLine>Kaiserslautern</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2009">2009. 2009</date>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Bidirectional Transformations: A Cross-Discipline Perspective-GRACE meeting notes, state of the art, and outlook</title>
		<author>
			<persName><surname>Cfh + ; Krzysztof</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">Nathan</forename><surname>Czarnecki</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Zhenjiang</forename><surname>Foster</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ralf</forename><surname>Hu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andy</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">James</forename><forename type="middle">F</forename><surname>Schürr</surname></persName>
		</author>
		<author>
			<persName><surname>Terwilliger</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICMT2009 -International Conference on Model Transformation, Proceedings, LNCS</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
	<note>To appear</note>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">The QSM Algorithm and its Application to Software Behavior Model Induction</title>
		<author>
			<persName><forename type="first">Pierre</forename><surname>Dupont</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bernard</forename><surname>Lambeau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Christophe</forename><surname>Damas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Axel</forename><surname>Van Lamsweerde</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Applied Artificial Intelligence</title>
		<imprint>
			<biblScope unit="volume">22</biblScope>
			<biblScope unit="issue">1-2</biblScope>
			<biblScope unit="page" from="77" to="115" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Reflection in logic, functional and object-oriented programming: a short comparative study</title>
		<author>
			<persName><forename type="first">François-Nicola</forename><surname>Demers</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jacques</forename><surname>Malenfant</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IJCAI &apos;95 Workshop on Reflection and Metalevel Architectures and their Applications in AI</title>
				<imprint>
			<date type="published" when="1995">1995</date>
			<biblScope unit="page" from="29" to="38" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">A model-driven framework for representing and applying design patterns</title>
		<author>
			<persName><forename type="first">Ghizlane</forename><surname>El</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Boussaidi</forename></persName>
		</author>
		<author>
			<persName><forename type="first">Hafedh</forename><surname>Mili</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">COMPSAC &apos;07: Proceedings of the 31st Annual International Computer Software and Applications Conference</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="97" to="100" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<ptr target="http://www.s3.uni-duisburg-essen.de/research/ggx-toolbox.html" />
		<title level="m">GGX-Toolbox website</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">Java TM Language Specification, The 3rd Edition</title>
		<author>
			<persName><forename type="first">James</forename><surname>Gosling</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bill</forename><surname>Joy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Guy</forename><surname>Steele</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gilad</forename><surname>Bracha</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005">2005</date>
			<publisher>Addison-Wesley Professional</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Precise Modeling of Design Patterns</title>
		<author>
			<persName><forename type="first">Alain</forename><surname>Le Guennec</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gerson</forename><surname>Sunyé</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jean-Marc</forename><surname>Jézéquel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">UML 2000 -The Unified Modeling Language, Advancing the Standard, Third International Conference</title>
				<meeting><address><addrLine>York, UK</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2000">October 2-6, 2000. 2000</date>
			<biblScope unit="page" from="482" to="496" />
		</imprint>
	</monogr>
	<note>Proceedings</note>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Model driven code checking</title>
		<author>
			<persName><forename type="first">Gerard</forename><forename type="middle">J</forename><surname>Holzmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rajeev</forename><surname>Joshi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Alex</forename><surname>Groce</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Automated Software Engineering</title>
		<imprint>
			<biblScope unit="volume">15</biblScope>
			<biblScope unit="issue">3-4</biblScope>
			<biblScope unit="page" from="283" to="297" />
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">UPPAAL in a Nutshell</title>
		<author>
			<persName><forename type="first">G</forename><surname>Kim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Paul</forename><surname>Larsen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wang</forename><surname>Pettersson</surname></persName>
		</author>
		<author>
			<persName><surname>Yi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Int. Journal on Software Tools for Technology Transfer</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">1-2</biblScope>
			<biblScope unit="page" from="134" to="152" />
			<date type="published" when="1997-10">Oct 1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Precise Modeling of Design Patterns in UML</title>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">H</forename><surname>Jeffrey</surname></persName>
		</author>
		<author>
			<persName><surname>Mak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">T</forename><surname>Clifford</surname></persName>
		</author>
		<author>
			<persName><surname>Choy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">K</forename><surname>Daniel</surname></persName>
		</author>
		<author>
			<persName><surname>Lun</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSE &apos;04: Proceedings of the 26th International Conference on Software Engineering</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="252" to="261" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Making Design Patterns Explicit in FACE</title>
		<author>
			<persName><forename type="first">Theo</forename><surname>Dirk Meijler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Serge</forename><surname>Demeyer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Robert</forename><surname>Engel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM SIGSOFT Software Engineering Notes</title>
		<imprint>
			<biblScope unit="volume">22</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="94" to="110" />
			<date type="published" when="1997">1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Representing and Applying Design Patterns: What Is the Problem?</title>
		<author>
			<persName><forename type="first">Hafedh</forename><surname>Mili</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ghizlane</forename><surname>El-Boussaidi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">MoDELS</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">Lionel</forename><forename type="middle">C</forename><surname>Briand</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Clay</forename><surname>Williams</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="volume">3713</biblScope>
			<biblScope unit="page" from="186" to="200" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Supporting Design Patterns with Annotations</title>
		<author>
			<persName><forename type="first">Klaus</forename><surname>Meffert</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ECBS &apos;06: Proceedings of the 13th Annual IEEE International Symposium and Workshop on Engineering of Computer Based Systems</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="437" to="445" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Formalizing Design Patterns</title>
		<author>
			<persName><forename type="first">Tommi</forename><surname>Mikkonen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSE &apos;98: Proceedings of the 20th international conference on Software engineering</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="1998">1998</date>
			<biblScope unit="page" from="115" to="124" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Proof-Carrying Code. Design and Implementation</title>
		<author>
			<persName><forename type="first">George</forename><forename type="middle">C</forename><surname>Necula</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proof and System Reliability</title>
				<imprint>
			<date type="published" when="2002">2002</date>
			<biblScope unit="page" from="261" to="288" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Example-Driven Reconstruction of Software Models</title>
		<author>
			<persName><forename type="first">Markus</forename><surname>Nkg + ; Oscar Nierstrasz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Tudor</forename><surname>Kobel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michaele</forename><surname>Girba</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Horst</forename><surname>Lanza</surname></persName>
		</author>
		<author>
			<persName><surname>Bunke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 11th European Conference on Software Maintenance and Reengineering (CSMR) 2007</title>
				<meeting>the 11th European Conference on Software Maintenance and Reengineering (CSMR) 2007</meeting>
		<imprint>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="275" to="286" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Recovering UML Diagrams from Java Code using Patterns</title>
		<author>
			<persName><forename type="first">Jörg</forename><surname>Niere</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jörg</forename><forename type="middle">P</forename><surname>Wadsack</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Albert</forename><surname>Zündorf</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2nd Workshop on Soft Computing Applied to Software Engineering</title>
				<editor>
			<persName><forename type="first">The</forename><surname>Enschede</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">(</forename><forename type="middle">J H</forename><surname>Netherlands</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">C</forename><surname>Jahnke</surname></persName>
		</editor>
		<editor>
			<persName><surname>Ryan</surname></persName>
		</editor>
		<meeting>the 2nd Workshop on Soft Computing Applied to Software Engineering</meeting>
		<imprint>
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">An approach for reverse engineering of design patterns</title>
		<author>
			<persName><forename type="first">Ilka</forename><surname>Philippow</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Detlef</forename><surname>Streitferdt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Matthias</forename><surname>Riebisch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sebastian</forename><surname>Naumann</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Software and Systems Modeling</title>
		<imprint>
			<biblScope unit="volume">4</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="55" to="70" />
			<date type="published" when="2005-02">February 2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<monogr>
		<title level="m" type="main">Peeking Inside the Box: Attribute-Oriented Programming with Java 1</title>
		<author>
			<persName><forename type="first">Don</forename><surname>Schwarz</surname></persName>
		</author>
		<ptr target="http://www.onjava.com/pub/a/onjava/2004/06/30/insidebox1.html" />
		<imprint>
			<date type="published" when="2004-06">June 2004</date>
			<publisher>ONJava</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">Specification-Carrying Code for Self-Managed Systems</title>
		<author>
			<persName><forename type="first">Giovanna</forename><surname>Di</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marzo</forename><surname>Serugendo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michel</forename><surname>Deriaz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IFIP/IEEE International Workshop on Self-Managed Systems and Services</title>
				<imprint>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Responsibilities and Rewards: Specifying Design Patterns</title>
		<author>
			<persName><forename type="first">Neelam</forename><surname>Soundarajan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jason</forename><forename type="middle">O</forename><surname>Hallstrom</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSE &apos;04: Proceedings of the 26th International Conference on Software Engineering</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="666" to="675" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<monogr>
		<title level="m" type="main">Reverse Engineering of Design Patterns from Java Source Code</title>
		<author>
			<persName><forename type="first">Nija</forename><surname>Shi</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2007">2007</date>
		</imprint>
		<respStmt>
			<orgName>University of California, Davis</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">PhD thesis</note>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">Taming Model Round-Trip Engineering</title>
		<author>
			<persName><forename type="first">Shane</forename><surname>Sendall</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jochen</forename><surname>Küster</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of Workshop on Best Practices for Model-Driven Software Development</title>
				<meeting>Workshop on Best Practices for Model-Driven Software Development</meeting>
		<imprint>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<monogr>
		<title level="m" type="main">A Metadata Facility for the Java TM Programming Language</title>
		<author>
			<persName><surname>Sun Microsystems</surname></persName>
		</author>
		<author>
			<persName><surname>Inc</surname></persName>
		</author>
		<author>
			<persName><surname>Jsr</surname></persName>
		</author>
		<ptr target="http://jcp.org/en/jsr/detail?id=175" />
		<imprint>
			<date type="published" when="2004">2004</date>
			<biblScope unit="volume">175</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Model Checking Programs</title>
		<author>
			<persName><surname>Vhb + ; Willem</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Klaus</forename><surname>Visser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Guillaume</forename><surname>Havelund</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Seungjoon</forename><surname>Brat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Flavio</forename><surname>Park</surname></persName>
		</author>
		<author>
			<persName><surname>Lerda</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Automated Software Engineering Journal</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="issue">2</biblScope>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<analytic>
		<title level="a" type="main">A Portable Compiler-Integrated Approach to Permanent Checking</title>
		<author>
			<persName><forename type="first">Nic</forename><surname>Volanschi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 21st IEEE/ACM International Conference on Automated Software Engineering</title>
				<meeting>the 21st IEEE/ACM International Conference on Automated Software Engineering<address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="103" to="112" />
		</imprint>
	</monogr>
	<note>ASE &apos;06</note>
</biblStruct>

<biblStruct xml:id="b31">
	<analytic>
		<title level="a" type="main">Reverse Engineering State Machines by Interactive Grammar Inference</title>
		<author>
			<persName><forename type="first">Neil</forename><surname>Walkinshaw</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Kirill</forename><surname>Bogdanov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mike</forename><surname>Holcombe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sarah</forename><surname>Salahuddin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">WCRE &apos;07: Proceedings of the 14th Working Conference on Reverse Engineering</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="209" to="218" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
