<?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">Model-based Monitoring of Integrated UML State Machine Models and Code</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Marco</forename><surname>Ehl</surname></persName>
							<email>mehl@uni-koblenz.de</email>
							<affiliation key="aff0">
								<orgName type="department">Institute for Software Technology</orgName>
								<orgName type="institution">Universität Koblenz-Landau</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Marco</forename><surname>Konersmann</surname></persName>
							<email>konersmann@uni-koblenz.de</email>
							<affiliation key="aff1">
								<orgName type="department">Institute for Software Technology</orgName>
								<orgName type="institution">Universität Koblenz-Landau</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Model-based Monitoring of Integrated UML State Machine Models and Code</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">DA7B9FF9CD943C05D5E14A0E90DF7BC3</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-25T04:51+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>
			<textClass>
				<keywords>
					<term>model-based software engineering</term>
					<term>logging</term>
					<term>monitoring</term>
					<term>UML state machines</term>
					<term>Java</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Logging and monitoring are important in long-living software to understand how the software behaves in production. In current model-based software development technology, monitoring information is still either shown for the code level or the model level. The mapping between runtime information from the generated-and usually manually extended-code and the model has to be made manually. In this paper, we present an approach for creating integrated model/code runtime views for UML state machines in Java code, by exploiting code generation templates that allow for mapping models and code at runtime. We evaluated the applicability of our approach and the performance of our prototype tool in artificial use cases. We found that the approach is applicable in that context, but that there is a considerable performance overhead in the current implementation.</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>Logging and monitoring <ref type="bibr" target="#b30">[vHWH12]</ref> are central concepts for maintaining long-living software systems. While many software systems use logging and monitoring to collect information about the current status of the execution and its history, this information alone is insufficient in model-based software engineering (MBSE) <ref type="bibr" target="#b34">[Vö06]</ref>. Model-based systems are to some extend developed on a higher level of abstraction than the source code. These models of the system are used for generating code. Further code is implanted into the generated code as behavior descriptions, and contextual code links the generated code. Monitoring then happens via logging on the level of source code, by using source code log statements to capture state changes or similar events that happen during the execution of software. The information attached to a log event is usually a timestamp and brief description of the event in question. There are challenges with this type of logging in MBSE: (C1) Where and how to log events is usually not specified for a project but is left to the developers. When there is no such clear logging concept, the logging of events is not systematic and therefore often does not provide a good source of information. (C2) Log events can answer the question of what happened (observed behavior), but it does not answer why it happened and what should have happened (intended behavior). This is a problem because the deviations between the observed behavior and the intended behavior are of special interest.</p><p>A systematic logging with relations to the model and the code can help to overcome these challenges for a more efficient monitoring and debugging process of model-based systems. Model-based development has the potential to improve logging by employing code-generation techniques. When logging is implemented into code generation templates, log events can be systematically generated. But this log information only explains the model-based behavior. If the implanted or contextual code has issues or uses the generated code in a wrong way, code-based logging information is necessary. To holistically learn about the behavior, log information needs to explain the behavior on the model-level and on the code-level in combination. In this paper, we present our approach to integrated logging and monitoring of UML state machine models in Java source code. Our contributions are specifically: (1) a method for an integrated monitoring of UML state machines and the execution of Java code, (2) code generation templates for UML state machines, that incorporate systematic logging on the model and the code-level, (3) a prototype tool that implements the method and code-generation, and (4) an application and performance evaluation of our tool in artificial use cases.</p><p>We present an approach to create a unified view on the system behavior, that gives access to logged events at runtime, showing the code and model level, taking the meta model information into account for providing context information to developers. The remainder of this paper is structured as follows: Section 2 presents an example use case. Section 3 describes our approach on a conceptual level. Our implementation is sketched in Section 4. Section 5 shows the application on a model-based implementation of an ATM and discusses our approach. We describe related work in Section 6 before we conclude in Section 7.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Motivation Example</head><p>This section introduces a running example use case for showing the benefits of our approach for logging and monitoring with integrated UML state machine models and code. We will show the logging via the evaluation of state machine transition guards. For this event, we describe all the steps from the meta model specification to the monitoring system.</p><p>State machines are a powerful and intuitive tool for describing how a system reacts to events. It comprises states and transitions between states. Each state represents a specific behavior and transitions define changes between states depending on events and conditions. When the state of the state machine is changed, the observed behavior of the state machine changes too. Harel <ref type="bibr" target="#b15">[Ha87]</ref> introduced the concepts of nesting and orthogonality to state machines, which were adapted by Object Management Group (OMG) for the UML Unified Modeling Language (UML) <ref type="bibr" target="#b28">[OM17]</ref>. UML is a widely used general-purpose modeling language. In this work, we use UML state machines as the meta model for state machines.</p><p>As a use case, we have chosen an automated teller machine (ATM) which we want to monitor during its execution (see Fig. <ref type="figure">1</ref>). The ATM consists of multiple states and reacts to events. A customer of a bank using the ATM would usually find the machine in an idle state.</p><p>When a bank card is inserted, the machine will start serving the customer. The card will be read for authentication, a transaction will be selected and executed, and finally, the card is ejected. After this, the machine goes back to the idle state for the next customer. Other states define the behavior when the machine starts up or when an error occurs. Fig. <ref type="figure">1</ref>: UML state machine model of an automated teller machine (ATM). Guard and effect names are simplified for presentation purposes.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Integrating Runtime Information of UML State Machine Models and Code</head><p>In this section, we give an overview of the methods and artifacts used and generated in our work. Fig. <ref type="figure">2</ref> shows the artifacts of this work and their relations. The state machine elements must be mapped to corresponding code templates that implement the execution semantics.</p><p>Based on the templates, code can be generated, that implements two artifacts: code that contains the business logic and the instrumentation code for logging. We deliberately chose to separate both artifacts. This allows, e.g. a programmer, to only focus on the business logic. The instrumentation code is later weaved together with the business logic. The resulting artifact is instrumented code, which is an executable representation of the model. Executing the instrumented code will generate events that can be captured and analyzed by monitoring logic. We created a list of events to capture during the state machine execution from systematically analyzing the semantics of each element in the meta model. The monitoring</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Instrumented Code</head><p>Fig. <ref type="figure">2</ref>: The artifacts of this work and their relations.</p><p>logic takes events and resolves code, model, and meta model information that are related to the observed event.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Connecting model and code</head><p>Modeling is not new to software development. Models have long been used to document the inner structure of software. However, models do not always have the same status as code. Manually updating the model is time-consuming and therefore expensive. This leads-especially when deadlines have to be met-to neglecting to update the model. As a result the models become outdated and less useful <ref type="bibr" target="#b34">[Vö06]</ref>. MBSE gives the model the same meaning as the source code. The model is not only used as documentation, but as a part of the software that can increase the quality and the speed of software development <ref type="bibr" target="#b34">[Vö06]</ref>.</p><p>In this work, we build on the model integration concept (MIC) of Konersmann <ref type="bibr" target="#b26">[Ko18,</ref><ref type="bibr" target="#b22">KG20]</ref>, which defines mappings and transformations between model elements and modelrepresenting code, taking non-generated code into account. With the MIC, modeling languages can be used to describe abstract design aspects, while code describes implementation details. However, the MIC focuses on models at design time only and does not consider runtime information and monitoring. We propose a mapping between UML state machines and Java that is suitable for logging purposes. The resulting code is made be embedded into a contextual code and allows for embedding implanted code.</p><p>Existing patterns for implementing state machines (e.g., [Ga96, Fo04, Go15, HJ17]) do not consider integrated logging on the model and code level. In Tab. 1 we give a high-level overview of our mapping. A detailed definition can be seen in <ref type="bibr" target="#b11">[Eh19]</ref>. We represent states as classes, similarly to the state pattern from Gamma et al. <ref type="bibr" target="#b13">[Ga96]</ref>. While the state pattern gives hints to structure the code template, it leaves multiple challenges. The pattern does not account for nesting or orthogonality, since it uses a much simpler meta model that has no concept of regions. We use packages in Java to represent regions, which helps us to group nested states. Further, the state pattern raises questions on where the transitions are defined.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Connecting code and monitoring</head><p>Analyzing the semantics of the meta model gives us insights into critical points in the state machine execution. For each meta model element, we created a list of events that cover these critical points. Tab. 2 shows an excerpt of the list of events. The first column shows the name of the event, the second column shows when the event is registered, and the last column shows the point in the code where the event is registered in form of an AspectJ <ref type="bibr" target="#b9">[CCH04]</ref> notation in relation to the code representation in Tab. 1. Tab. 2: An excerpt of the captured events that concern transitions.</p><p>For each event, we create a description and a list of information that helps to understand the event. We distinguish the information by its origin. Runtime information is captured during runtime, while code, model, and meta model information can be obtained from the respective artifacts. In Fig. <ref type="figure" target="#fig_1">4</ref> we show the TransitionGuardEvaluationEvent as an example.</p><p>The evaluation of the guard is of special interest for monitoring, since this information explains why a transition is executed or not. All monitoring events contain a timestamp of the event's occurrence and the current state configuration. Both are runtime information. Additionally, each event will contain information about the current location in the code and the method signature.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>TransitionGuardEvaluationEvent</head><p>This event is generated when a transition guard is evaluated.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Attached Information</head><p>• Using a systematic model-based approach to instrument the code has multiple benefits: The first observation is that this step does not require manual interaction with the source code.</p><p>Rules can be defined for how the monitoring statements are inserted. When the code is automatically instrumented based on rules, the statements are generated in a uniform and systematic way. Defining these rules forces us to think about which events are relevant for monitoring.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Implementation</head><p>In this section, we describe how we implemented the tool prototype for our approach. The input of our tool is a UML state machine model. The outputs are instrumentation code and code that implements the business logic in Java. Both are woven together to get the instrumented code. During execution of the instrumented code, events are submitted to a monitoring system, which enriches the events with model information and allows us to query for specific information. We go on by describing each artifact and component in detail.</p><p>We use the Eclipse Papyrus Modeling environment3 version 4.8.0 to create our models. This allows us to graphically model and save UML state machines. The models are saved using the XML Metadata Interchange (XMI) <ref type="bibr" target="#b27">[OM15]</ref>, a standardized XML interchange format widely used in the industry for exchanging UML models.</p><p>The code template is defined with Xtend4 template expressions. Xtend is a general purpose programming language related to Java. Since we only use the template expressions of that language for code generation, we will not go further into detail about Xtend in general. When the code is generated, the code template will transform the previously defined state machines model into two artifacts. First, the business logic, which is a set of Java classes grouped in a package, that contains the the model code, including entry points the implanted code. And second, the instrumentation code is generated. The instrumentation code comprises AspectJ pointcuts and advices. The pointcut defines where an advice is applied.</p><p>List. 1 shows the pointcut (line 2-4) and advice (line 5-15) for the TransitionGuardEvalua-tionEvent. The purpose of the advice is to generate the event and pass it to the monitoring system. The first part of the advice (line 5-12) collects information that is common for all event types. After that (line 15) information specific to that event type is added, in this case, the return value of the guard evaluation. List. 2 shows the method in the business logic code that is matched by the pointcut shown in List. 1. When the method is executed the TransitionGuardEvaluationEvent is generated, populated with the desired information, and passed to the monitoring system.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Evaluation</head><p>We evaluated the applicability and functional correctness of our approach by creating a model of an artificial ATM system (see running example in Section 2) and applying the approach via the implemented tool prototype. We also evaluated the performance of the integrated monitoring in comparison to a non-monitored solution.</p><p>List. 3 shows the output of our monitoring system. This includes the information required to realize a unified view of the system that provides context information to monitoring  events. Fig. <ref type="figure" target="#fig_3">5</ref> shows the relationship between a logged event in the running example: the runtime information, the code that is executed, the model that is represented by the code, and the meta model that describes the model type. The arrows indicate how the event log has traces to each view of the system. The meta model information is used to resolve the model elements' type information. In our performance evaluation, we compared the execution times of multiple state machines without any monitoring; with collecting monitoring events, but without resolving model information; and with monitoring and resolving model information from the model. Without monitoring means that the code is not instrumented. This is done by removing the AspectJ    The performance test (see results in Fig. <ref type="figure" target="#fig_6">6</ref>) shows that the monitoring system has a considerable performance impact. With monitoring turned on, the execution time is about 200 times higher for a state machine with one state and about 12 times higher for a state machine with 500 states. The infrastructure introduces a constant delay of about 8000 µs (see the difference without and with monitoring for one state). Resolving model information introduces a performance overhead. This can be managed by resolving the model information only when needed. The monitoring system in the tool prototype was not optimized for performance. It was developed to show the advantages of model-based monitoring. Therefore, we suggest in future work to incorporate a monitoring framework that is optimized for performance.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6">Related Work</head><p>Monitoring of state machines has been subject to related work for many years. To the best of our knowledge, none provides an integrated view of runtime information on the model and code level. In this section we briefly discuss representatives of related approaches.</p><p>Balz <ref type="bibr" target="#b7">[Ba11]</ref> describes the integration of non-hierarchical state machines with code, without focusing on the integration of monitoring and debugging. The MIC underlying our approach can be considered an evolution of Balz' work. Tan et al. <ref type="bibr" target="#b29">[Ta08]</ref> describe an approach to analyze existing log files by deriving a state machine. This derived state machine is used to construct high-level analysis on the log data. Their approach shows that higher-level model information can be used to put log information into context, while it does not answer how state machines can be implemented or logged. Amar et al. <ref type="bibr" target="#b6">[Am18]</ref> extract state machines from log files to spot differences in different versions or different deployment context of one piece of software. Jung et al. <ref type="bibr" target="#b21">[JHS13]</ref> create an instrumentation aspect language (IAL) to specify monitoring probes based on model information. Using the IAL in our context could simplify the instrumentation. Heinrich et al. <ref type="bibr" target="#b18">[He15]</ref> proposes an extensions to the iObserve <ref type="bibr" target="#b16">[Ha13]</ref> monitoring and analysis approach, that integrates design time and run time views for cloud-based software. They focus on architectural models while our approach focuses on UML state machines. Bošković et al. <ref type="bibr" target="#b8">[BH09]</ref> suggest with MoDePeMART a declarative specification of performance metrics in a domain specific modeling language. They focus on performance metrics while our approach focuses on explaining behavior. Using a domain specific modeling language to configure the instrumentation can facilitate adapting our approach because implementation details, like the use of AspectJ, can be hidden.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7">Conclusion</head><p>This research aimed to improve debugging and monitoring of state machines with the unique information only the model can deliver, to the benefit of model-based long-living software systems. As challenges, we identified that (C1) logging is usually not systematic for a project, and (C2) code-based log events describe observed behavior, but it is difficult to derive the intended behavior when the code was generated from a model and extended manually.</p><p>To overcome these challenges we developed a method for monitoring state machine executions of integrated state machine models following the model integration concept of Konersmann <ref type="bibr" target="#b26">[Ko18]</ref>. For this, we developed model/code mappings that are specifically suited for logging purposes, for embedding them into contextual code, and for embedding implanted code. These mappings were extended with systematic logging, which resolves code, model, and meta model information at the given program state. We evaluated our prototype using an artificial use case and a performance evaluation. The approach was applicable in the example use case. The performance is promising, yet requires optimization for productive use.</p><p>The use of systematic model/code mappings enables us to systematically weave instrumentation code into the system (C1). In contrast to traditional logging that is focused on either the code level or the model level, our approach presents the data in an integrated fashion. It therefore provides the runtime information of the model-based system in the context of a model and the code (C2). In future work we plan to extend monitoring and debugging views in IDEs like Eclipse with the now technically joint information and employ user studies to evaluate how the integrated views affect debugging processes.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 3 Fig. 3 :</head><label>33</label><figDesc>Fig.3shows a visual representation of our code template for a transition. The left column shows the meta model for state machines, the center column shows the model and the right column shows the code. The solid boxes group elements belonging to a transition, the dashed boxes highlight the constraint (guard), the dotted boxes highlight the behavior (effect). Monitoring a guard is part of our running example.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 4 :</head><label>4</label><figDesc>Fig.4: An example of an event captured for monitoring, with a description of the event and attached information.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>1</head><label></label><figDesc>public boolean evaluateGuardT3() { 2 return (getContext().getImplantedCode().selfTestGuard()); 3 } List. 2: A code snippet representing the transition guard that will be matched by the TransitionGuardE-valuationEvent.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 5 :</head><label>5</label><figDesc>Fig. 5: Integrated view of model-based monitoring with linked views.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>List. 3 :</head><label>3</label><figDesc>The monitoring output of the TransitionGuardEvaluationEvent of the Transition T3. file. I.e., no monitoring statements are woven into the model representing code. With monitoring means, that the code is instrumented via AspectJ. I.e., monitoring statements are woven into the model representing code. With monitoring and model information resolution mean, that the code is instrumented and the model is used to resolve model information when the monitoring event is created. The model used for the performance test consists of an initial pseudostate, the displayed number states in between, and a final state. All the mentioned vertices are connected to the next vertex by a single transition.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head></head><label></label><figDesc>1</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head>Fig. 6 :</head><label>6</label><figDesc>Fig. 6: The results of the performance test.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>Table of the main elements of the meta model and their representation in code.</figDesc><table><row><cell>Meta Model Element</cell><cell>Representation in Code</cell></row><row><cell>StateMachine</cell><cell>Class</cell></row><row><cell>Region</cell><cell>Package</cell></row><row><cell>Vertex (Abstract)</cell><cell>Only concrete subclasses are represented in code</cell></row><row><cell>State (Subclass of Vertex)</cell><cell>Class</cell></row><row><cell>FinalState (Subclass of State)</cell><cell>Class</cell></row><row><cell cols="2">Pseudostate (Subclass of Vertex) Class</cell></row><row><cell>Transition</cell><cell>Method in source Vertex Class</cell></row><row><cell>Tab. 1:</cell><cell></cell></row></table><note>In our solution transitions are located in and handled by the source vertex. One condition to fire a transition is that the source vertex has to be active. Since we maintain the active vertices in a tree structure (state configuration) we can efficiently evaluate guards to check if a transition can fire. No check is required to test if a vertex is active.</note></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_0">Marco Ehl, Marco KonersmannModel</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_1">https://www.eclipse.org/papyrus/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_2">https://www.eclipse.org/xtend/</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgements:</head><p>The work presented in this paper is partially funded by the German Federal Ministry of Education and Research (BMBF) under the grant number 01IS19084D.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Bibliography</head></div>
			</div>


			<div type="availability">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Code Code Template Code Generator Weaver Information Flow Resolve Event Flow Model (State Machine) Meta Model (UML Spec.) Code (Business Logic) Instrumentation Code Monitoring Document Component</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<idno>---------------------</idno>
		<ptr target="---------" />
		<title level="m">TransitionGuardEvaluationEvent 3</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title/>
	</analytic>
	<monogr>
		<title level="j">Time</title>
		<imprint>
			<biblScope unit="page">1607620204856</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m">StateConfiguration: StateMachine: {SelfTest} 6 [Runtime] ReturnValue: true 7 [Code] Signature: boolean sm.bankATM</title>
				<imprint/>
	</monogr>
	<note>.regionTop.SelfTest.evaluateGuardT3</note>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">LineOfCode: SelfTest</title>
		<imprint>
			<biblScope unit="page">63</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
	</analytic>
	<monogr>
		<title level="m">ModelElementId: _478fMLfSEeqxh_nJ0zRETQ 10</title>
				<imprint/>
	</monogr>
	<note>Model] Source: SelfTest 11. Model] Target: Idle 12 [Model] ModelElementName: T3 13 [Model] NestingDepth: 0</note>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<ptr target="Type:org.eclipse.uml2.uml.Transition" />
		<title level="m">Meta Model</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Using Finite-State Models for Log Differencing</title>
		<author>
			<persName><forename type="first">Hen</forename><forename type="middle">;</forename><surname>Amar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Lingfeng</forename><forename type="middle">;</forename><surname>Bao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Nimrod</forename><forename type="middle">;</forename><surname>Busany</surname></persName>
		</author>
		<author>
			<persName><forename type="first">David</forename><forename type="middle">;</forename><surname>Lo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Shahar</forename><surname>Maoz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. ESEC/FSE 2018</title>
				<meeting>the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. ESEC/FSE 2018<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="49" to="59" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">Embedding Model Specifications in Object-Oriented Program Code: A Bottom-up Approach for Model-based Software Development</title>
		<author>
			<persName><forename type="first">Moritz</forename><surname>Balz</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011-05">May 2011</date>
		</imprint>
		<respStmt>
			<orgName>Universität Duisburg-Essen</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">PhD thesis</note>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Model Driven Performance Measurement and Assessment with MoDePeMART</title>
		<author>
			<persName><forename type="first">Marko</forename><forename type="middle">;</forename><surname>Bošković</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wilhelm</forename><surname>Hasselbring</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model Driven Engineering Languages and Systems</title>
				<editor>
			<persName><forename type="first">Andy</forename><forename type="middle">;</forename><surname>Schürr</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Bran</forename><surname>Selic</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin Heidelberg; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="62" to="76" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Adrian</forename><surname>Colyer</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">Eclipse AspectJ: Aspect-Oriented Programming with AspectJ and the Eclipse AspectJ Development Tools</title>
		<author>
			<persName><forename type="first">Andy</forename><forename type="middle">;</forename><surname>Clement</surname></persName>
		</author>
		<author>
			<persName><forename type="first">George</forename><surname>Harley</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2004">2004</date>
			<publisher>ADDISON WESLEY PUB CO INC</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<author>
			<persName><forename type="first">Marco</forename><surname>Ehl</surname></persName>
		</author>
		<title level="m">Model-based Monitoring of Integrated State Machines</title>
				<meeting><address><addrLine>Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
		<respStmt>
			<orgName>University of Koblenz and Landau</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Master&apos;s thesis</note>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">UML Distilled: a Brief Guide to the Standard Object Modeling Language</title>
		<author>
			<persName><forename type="first">Martin</forename><surname>Fowler</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2004">2004</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
	<note>3rd edition</note>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title level="m" type="main">John: Design Patterns: Elements of Reusable Object-oriented Software</title>
		<author>
			<persName><forename type="first">Erich</forename><forename type="middle">;</forename><surname>Gamma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Richard</forename><forename type="middle">;</forename><surname>Helm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ralph</forename><forename type="middle">;</forename><surname>Johnson</surname></persName>
		</author>
		<author>
			<persName><surname>Vlissides</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1996">1996</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
	<note>6th edition</note>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Knowledge-driven finite-state machines. Study case in monitoring industrial equipment</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">E</forename><surname>Gonzalez Moctezuma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">R</forename><surname>Ferrer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">X</forename><surname>Xu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Lobov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">L</forename><surname>Martinez Lastra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE 13th International Conference on Industrial Informatics (INDIN)</title>
				<imprint>
			<date type="published" when="2015">2015. 2015</date>
			<biblScope unit="page" from="1056" to="1062" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Statecharts: a visual formalism for complex systems</title>
		<author>
			<persName><forename type="first">David</forename><surname>Harel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Science of Computer Programming</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="231" to="274" />
			<date type="published" when="1987">1987</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Wilhelm</forename><forename type="middle">;</forename><surname>Hasselbring</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Robert</forename><forename type="middle">;</forename><surname>Heinrich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Reiner</forename><forename type="middle">;</forename><surname>Jung</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andreas</forename><forename type="middle">;</forename><surname>Metzger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Klaus</forename><surname>Pohl</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<author>
			<persName><forename type="first">Ralf</forename><forename type="middle">;</forename><surname>Reussner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eric</forename><surname>Schmieders</surname></persName>
		</author>
		<title level="m">iObserve: Integrated Observation and Modeling Techniques to Support Adaptation and Evolution of Software Systems</title>
				<meeting><address><addrLine>Kiel, Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2013-10">Oktober 2013</date>
		</imprint>
		<respStmt>
			<orgName>Christian-Albrechts-Universität Kiel</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Forschungsbericht</note>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Robert</forename><forename type="middle">;</forename><surname>Heinrich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Reiner</forename><forename type="middle">;</forename><surname>Jung</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eric</forename><forename type="middle">;</forename><surname>Schmieders</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andreas</forename><forename type="middle">;</forename><surname>Metzger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wilhelm</forename><surname>Hasselbring</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Architectural run-time models for operator-in-theloop adaptation of cloud applications</title>
		<author>
			<persName><forename type="first">Ralf</forename><forename type="middle">;</forename><surname>Reussner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Klaus</forename><surname>Pohl</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE 9th International Symposium on the Maintenance and Evolution of Service-Oriented Systems and Cloud-Based Environments, MESOCA 2015 -Proceedings. IEEE</title>
				<imprint>
			<date type="published" when="2015">2015. 2015</date>
			<biblScope unit="page" from="36" to="40" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Modeling and Monitoring of Hierarchical State Machines in Scala</title>
		<author>
			<persName><forename type="first">Klaus</forename><forename type="middle">;</forename><surname>Havelund</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rajeev</forename><surname>Joshi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Engineering for Resilient Systems</title>
				<editor>
			<persName><forename type="first">Alexander</forename><forename type="middle">;</forename><surname>Romanovsky</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Elena</forename><forename type="middle">A</forename><surname>Troubitsyna</surname></persName>
		</editor>
		<meeting><address><addrLine>Cham</addrLine></address></meeting>
		<imprint>
			<publisher>Springer International Publishing</publisher>
			<date type="published" when="2017">2017</date>
			<biblScope unit="page" from="21" to="36" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Model-driven Instrumentation with Kieker and Palladio to forecast Dynamic Applications</title>
		<author>
			<persName><forename type="first">Reiner</forename><forename type="middle">;</forename><surname>Jung</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Robert</forename><forename type="middle">;</forename><surname>Heinrich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eric</forename><surname>Schmieders</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings Symposium on Software Performance: Joint Kieker/Palladio Days 2013</title>
		<title level="s">CEUR Workshop Proceedings. CEUR</title>
		<meeting>Symposium on Software Performance: Joint Kieker/Palladio Days 2013<address><addrLine>KPDAYS</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2013-11">2013. November 2013</date>
			<biblScope unit="volume">1083</biblScope>
			<biblScope unit="page" from="99" to="108" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<monogr>
		<title level="m" type="main">Same but Different: Consistently Developing and Evolving Software Architecture Models and their Implementation</title>
		<author>
			<persName><forename type="first">Marco</forename><forename type="middle">;</forename><surname>Konersmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Goedicke</surname></persName>
		</author>
		<editor>Felderer, Michael</editor>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Wilhelm</forename><forename type="middle">;</forename><surname>Hasselbring</surname></persName>
		</author>
		<author>
			<persName><surname>Koziolek</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Florian</forename><forename type="middle">;</forename><surname>Heiko; Matthes</surname></persName>
		</author>
		<author>
			<persName><surname>Prechelt</surname></persName>
		</author>
		<author>
			<persName><surname>Lutz</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Ralf</forename><forename type="middle">;</forename><surname>Reussner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bernhard</forename><surname>Rumpe</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<monogr>
		<title level="m" type="main">Ernst Denert Award for Software Engineering 2019 -Practice meets Foundations</title>
		<editor>Schaefer, Ina</editor>
		<imprint>
			<date type="published" when="2020">2020</date>
			<publisher>Springer International Publishing</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<monogr>
		<title level="m" type="main">Explicitly Integrated Architecture -An Approach for Integrating Software Architecture Model Information with Program Code</title>
		<author>
			<persName><forename type="first">Marco</forename><surname>Konersmann</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
	<note type="report_type">PhD thesis</note>
</biblStruct>

<biblStruct xml:id="b27">
	<monogr>
		<title level="m" type="main">OMG XML Metadata Interchange (XMI) Specification</title>
		<imprint>
			<date type="published" when="2015">2015</date>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
	</analytic>
	<monogr>
		<title level="m">OMG Unified Modeling Language Specification</title>
				<imprint>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">SALSA: Analyzing Logs as State Machines</title>
		<author>
			<persName><forename type="first">Jiaqi</forename><forename type="middle">;</forename><surname>Tan</surname></persName>
		</author>
		<author>
			<persName><surname>Pan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Soila</forename><forename type="middle">;</forename><surname>Xinghao; Kavulya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rajeev</forename><forename type="middle">;</forename><surname>Gandhi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Priya</forename><surname>Narasimhan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the First USENIX Conference on Analysis of System Logs. WASL&apos;08</title>
				<meeting>the First USENIX Conference on Analysis of System Logs. WASL&apos;08<address><addrLine>USA</addrLine></address></meeting>
		<imprint>
			<publisher>USENIX Association</publisher>
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">André</forename><surname>Van Hoorn</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Jan</forename><surname>Waller</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b32">
	<monogr>
		<title level="m" type="main">Kieker: a framework for application performance monitoring and dynamic software analysis</title>
		<author>
			<persName><forename type="first">Wilhelm</forename><surname>Hasselbring</surname></persName>
		</author>
		<editor>Kaeli, David R.</editor>
		<editor>Rolia, Jerry</editor>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b33">
	<monogr>
		<title level="m">Third Joint WOSP/SIPEW International Conference on Performance Engineering, ICPE&apos;12</title>
				<editor>
			<persName><forename type="first">Lizy</forename><forename type="middle">K</forename><surname>John</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Diwakar</forename><surname>Krishnamurthy</surname></persName>
		</editor>
		<meeting><address><addrLine>Boston, MA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2012">April 22 -25, 2012. 2012</date>
			<biblScope unit="page" from="247" to="248" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b34">
	<monogr>
		<author>
			<persName><forename type="first">Markus</forename><forename type="middle">;</forename><surname>Völter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Thomas</forename><forename type="middle">;</forename><surname>Stahl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jorn</forename><forename type="middle">;</forename><surname>Bettin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Arno</forename><forename type="middle">;</forename><surname>Haase</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Simon</forename><surname>Helsen</surname></persName>
		</author>
		<title level="m">Model-Driven Software Development -Technology</title>
				<meeting><address><addrLine>New York</addrLine></address></meeting>
		<imprint>
			<publisher>John Wiley &amp; Sons</publisher>
			<date type="published" when="2006">2006</date>
		</imprint>
		<respStmt>
			<orgName>Engineering, Management</orgName>
		</respStmt>
	</monogr>
</biblStruct>

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