<?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">Influence of programming style in transformation bad smells: Mining of ETL Repositories</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Nicolás</forename><surname>Bonet</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">School of Engineering</orgName>
								<orgName type="institution">Universidad de los Andes</orgName>
								<address>
									<settlement>Bogota</settlement>
									<region>D.C</region>
									<country key="CO">Colombia</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">Department of Systems and Computing Engineering</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Kelly</forename><surname>Garcés</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">School of Engineering</orgName>
								<orgName type="institution">Universidad de los Andes</orgName>
								<address>
									<settlement>Bogota</settlement>
									<region>D.C</region>
									<country key="CO">Colombia</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">Department of Systems and Computing Engineering</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Rubby</forename><surname>Casallas</surname></persName>
							<email>rcasalla@uniandes.edu.co</email>
							<affiliation key="aff0">
								<orgName type="department">School of Engineering</orgName>
								<orgName type="institution">Universidad de los Andes</orgName>
								<address>
									<settlement>Bogota</settlement>
									<region>D.C</region>
									<country key="CO">Colombia</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">Department of Systems and Computing Engineering</orgName>
							</affiliation>
						</author>
						<author>
							<persName><roleName>María</roleName><forename type="first">Elsa</forename><surname>Correal</surname></persName>
							<email>mcorreal@uniandes.edu.co</email>
							<affiliation key="aff2">
								<orgName type="department">School of Engineering. Departament of Industrial Engineering</orgName>
								<orgName type="institution">Universidad de los Andes</orgName>
								<address>
									<settlement>Bogota</settlement>
									<region>D.C</region>
									<country key="CO">Colombia</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Ran</forename><surname>Wei</surname></persName>
							<email>ran.wei@cs.york.ac.uk</email>
							<affiliation key="aff3">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">The University of York</orgName>
								<address>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Influence of programming style in transformation bad smells: Mining of ETL Repositories</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">F8CDB7B52C85EACCEB2DA812D0F8A16F</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T01:17+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-Driven Engineering</term>
					<term>Model Transformation</term>
					<term>Quality</term>
					<term>Metric</term>
					<term>Bad Smells</term>
					<term>Epsilon Transformation Language (ETL)</term>
					<term>Educational Purpose</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Bad smells affect maintainability and performance of model-to-model transformations. A number of studies have defined a set of transformation bad smells, and proposed techniques to recognize and -according to their complexity-fix them in a (semi-)automated way. In education, it is necessary to make students aware of this subject and provide them with guidelines to improve the quality of their transformations. This paper presents some common bad smells in model transformations written by master students from Universidad de los Andes and compares them with that of publicly available repositories of ETL transformations, for the purpose of knowing whether programming style affects the incidence of smells. Three contributions are presented: i) Two new bad smell patterns enriching the existing catalogs; ii) A process that includes the automated extraction of transformation metrics and bad smells metrics from the repositories, and a statistical analysis that helps in identifying the relations between such metrics; and iii) A tool that supports the process. By applying our approach on the datasets, we discuss whether it is easier for students with imperative programming language background to make use of appropriate declarative constructs of a transformation language compared to imperative ones. We conclude that students must be encouraged and guided to use declarative constructs whereas possible when developing declarative transformations, that results in artifacts that are more maintainable and with a better performance.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>I. INTRODUCTION</head><p>Model-Driven Engineering (MDE) has gained some popularity in industry because companies and developers are beginning to adopt MDE approaches to reduce software complexity and improve its maintainability. In this context, universities play a major role since they teach MDE to students, who become software developers after they graduate. It is essential to teach and students about the best practice of MDE for them to become better software developers/architects in the future.</p><p>Whilst MDE becomes popular, it has pointed out that measuring the quality of model management programs, especially model-to-model (M2M) transformations, is crucial.</p><p>We have identified several studies <ref type="bibr" target="#b0">[1]</ref>- <ref type="bibr" target="#b5">[6]</ref> aiming to find a relation between traditional software quality attributes and M2M transformations, in effort to determine which aspects of the languages have a direct impact on these attributes. Additionally, we have found research that studies how bad smells (bad software practices) can affect the maintainability and performance of transformations <ref type="bibr" target="#b6">[7]</ref>- <ref type="bibr" target="#b10">[11]</ref>. Most of the available studies target transformations written in ATL, but a few tackle other languages such as Epsilon Transformation Language (ETL) <ref type="foot" target="#foot_0">1</ref> , QVT and Henshin.</p><p>To the best of our knowledge, there has been no research that studies how coding styles (either imperative or declarative) may affect the number of bad smells found in transformations. Thus, we propose an approach (Section II) that: i) statically analyzes repositories of transformations; ii) extracts transformation metrics (metrics of the language constructs); iii) detects bad smells based on a pre-defined catalog; and iv) establishes a relation between these two kind-of metrics, based on statistical techniques (Section IV). Other contributions of our work are: two new bad smells that enrich the existing catalog found in the literature and a tool that operationalizes the process and is built on top of the Epsilon languages and Haetae 2 .</p><p>We have applied the approach to a case study (Section III) that includes ETL transformations developed by students from Universidad de los Andes and by other stakeholders (the contributors of ETL from University of York and Github users) for the sake of comparison. From the results (Section V), we were able to identify the quality of the transformations made by our students, and code styles to increase such a quality. Section VI introduces the implications that the analysis has for instructors and students, and summaries future work.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II. MINING ETL REPOSITORIES: PROCESS OVERVIEW</head><p>The repository mining consists of three steps. In the first step, a set of transformation metrics are calculated and bad smells are identified on an available corpus of files. In the second step, a report is automatically generated discriminating the information obtained for each transformation of the corpus. Finally, the collected data is analyzed to identify relations between transformation metrics and bad smells to advise instructors about which could be the weakest points with respect to quality on their students work. In the remaining sections of this paper, we present how this process has been instantiated in a case study.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III. THE CASE STUDY SETUP A. Case study context</head><p>This study is part of a research which aims at improving the programming skills of masters-degree students that attend MDE lectures, a vast majority of the students (20 in average each semester since 2014) have no experiences on MDE. This lecture has been part of the MSc Software Engineering course and we are constantly looking for better ways of improving the teaching methodologies to increase the quality of the software produced by students. In this context, the following research questions were asked:</p><p>• RQ1: What is the distribution of bad smells across datasets? • RQ2: What is the variety of code smells in the model transformations involved in the case study? • RQ3: How the total number of bad smells are influenced by programming style (i.e., declarative or imperative)? The transformation metrics used as the base line of the study are the following: the number of: matched/lazy rules, operations with/without context, calls to lazy rules per rule, calls to operations per rule, variables per rule, if, loops, unused operations and unused parameters 3 .</p><p>These metrics were chosen as we wanted to identify how the transformation strategy was relevant to the amount of bad smells that could be found on the dataset. Based on <ref type="bibr" target="#b11">[12]</ref> and our own experience, we have identified that transformations developed using an imperative programming style tend to majorly use operations, if, and loops. This also involves transformations that have few matched rules, but the body of those rules is built using plenty of imperative constructs. On the other hand, transformations that contain matched rules, guards, and OCL queries show a more declarative approach.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Characteristics of the dataset</head><p>To perform the study we extracted a total of 286 ETL transformations from multiple sources, they were grouped in three different datasets referred to as Uniandes, York, and Github. In the Uniandes dataset, the transformations are used 3 Both matched and lazy rules specify the way in which target model elements must be generated from source model elements. The execution of matched rule is scheduled by the engine depending on the type of elements that are applicable, whereas the execution of lazy rules is determined by the programmer.</p><p>in reverse and forward MDE projects. This dataset is publicly available <ref type="foot" target="#foot_2">4</ref> and can be used for further investigation. In the York dataset, transformations are built by developers with vast experience in ETL, they were retrieved from the official Epsilon Website.</p><p>Finally, the transformations of the Github dataset are the ones found in public GitHub repositories. The metamodels involved in these transformations are unknown as well as the experience of developers. With respect to the datasets' size, Uniandes has 191 files and 27526 LOC, York 23 files and 1550 LOC, and Github 72 files and 26948 LOC.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV. BAD SMELLS DETECTION</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Catalog of bad smells</head><p>We followed 4 steps to build our bad smells catalog: i) Review the literature that categorizes transformation bad smells, i.e., <ref type="bibr" target="#b6">[7]</ref>, <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b12">[13]</ref> ; ii) Adapt bad smells in related works to ETL, since there are few differences between ETL constructs and the ones from other M2M transformation languages (e.g. ATL); iii) Perform code review of the dataset to identify new smells out of the scope of previous work; iv) Build a consolidated catalog.</p><p>Reviewing previous catalogs of bad smells <ref type="bibr" target="#b6">[7]</ref>, <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b12">[13]</ref> generates 27 bad smells (overlapped smells are omitted). In our work, we consider 6 of these previously categorized bad smells and contribute 2 new bad smells observed in our datasets. The reason for including just 6 of 27 is that these can be discovered via static analysis, in a fully automatic way. In contrast, for the discovery of the rest of bad smells, it is necessary to have more information such as execution traces (e.g., that indicate when an operation is computational intensive) or some knowledge about the transformation context (e.g., to know if rules have meaningful names).</p><p>The 8 bad smells of our catalog can be classified into two categories, defined in <ref type="bibr" target="#b6">[7]</ref>: i) Restructuring (these bad smells are related with how the transformation is built and structured); and ii) OCL Optimization (As ETL is an OCLbased language, optimization of those queries is extremely important to improve the transformation performance). For each bad smell we give an abbreviation, a description, and how it is discovered. In addition, for existing bad smells we mention the identifier managed in the original source <ref type="bibr" target="#b6">[7]</ref> for cross-referencing purposes, and for new bad smells we give an example. We summarized bad smells taken from previous work in a Table available in this link 5 , this section focuses on new smells.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. New bad smells 1) Restructuring: Imperative filtering:</head><p>• Abbreviation: IEO.</p><p>• Description: A for statement has an if to prevent the logic being applied to all elements, this is less efficient than an OCL first-order logic expression and is also harder to understand. • Discover Algorithm: The discoverer checks each for statement made on the transformation and if the for logic is wrapped inside an if, then it increases the count for this bad smell. • Example: An example is available at this link <ref type="foot" target="#foot_4">6</ref> .</p><p>2) OCL Optimization: Imperative element creation in loops:</p><p>• Abbreviation: CNL.</p><p>• Description: Creating elements inside loops are discouraged as the creation of multiple elements can be achieved by rules, the use of guards is useful to prevent it from happening over all elements if necessary. • Discovery Algorithm: The discoverer checks each loop statement (i.e., while and for) and verifies if at least one occurrence of the reserved word "new" -which is intended to create new elements-is found in the block. • Example: An example is available at this link 6 .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V. STATISTICS AND DATA ANALYSIS</head><p>In this chapter, we present the results of our case study taking into account the stated research questions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Distribution of bad smells</head><p>RQ1: What is the distribution of bad smells across the datasets?. We found that 118 out of 286, or 41.26% of the transformations, have no bad smells, while 13.64% present more than 10 occurrences. We also established the occurrencerate of bad smells by transformation (λ t ), which is defined as follows:</p><formula xml:id="formula_0">λ t = I i=0</formula><p>badSmells(i) i</p><p>; I = T ransf ormations We saw that Uniandes presents rates lower than Github and higher than York. From these results, and taking into account that the main promoters of ETL are at the University of York, it is worth to define patterns that favor quality in conjunction with them (Section VI describes three patterns as a starting point).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Variety of bad smells</head><p>RQ2: What is the variety of smells found in the transformations involved in the case study?. The discoverer detected the occurrences of the bad smells in the datasets and the results follow: There are three types of bad smells with the highest occurrences across all datasets (see Table 7 for a brief list of these smells): i) CSF (a chain of select/first in OCL is less efficient than using selectFirst); ii) IEO (if statements embedded into a for are less efficient than OCL filters), and iii) CNL (creation of new elements in loops). Each of these bad smells with more than 200 occurrences found in the entire set of transformations. On the other hand, the bad smells referred to as TOC (trivial operations called once) and REB (rule body is embedded into if blocks) were the less common ones, each one with less than 60 occurrences. When the data is interpreted dataset by dataset, it can be seen that for Uniandes the error DOE (duplicated and complex OCL expressions) is the most common one. For York, the most common smell is TOC (trivial operations called once). Note that the discoverer allows one to configure the number of lines that an operation should have to be considered are trivial. For this experiment, we set this threshold to 1-3 lines based on what we have observed in the developed code. Finally, in Github the occurrences are quite similar to the overall result.</p><p>C. Influence of programming style on bad smells incidence RQ3: How the total number of bad smells are influenced by the programming style (declarative or imperative)?. To answer this question we made a Negative Binomial Regression between the transformation metrics defined in Section III (matched/lazy rules, operations, etc.) and bad smells metrics. This regression helps us to measure the influence of a particular construct on the occurrence-rate of bad smells (i.e., λ t ) by means of a Relative Risk (RR). In our context, a RR is a way to compare occurrence-rate of bad smells in transformations that uses a certain language construct with that of transformations not using it. We calculated RR values for each construct, one at a time, based on a Negative Binomial Regression Model. Since RR is a quotient, an RR of 1.20 for a construct means that using that particular construct increases bad smells by 20%, while a RR of 1 means that the construct has not influence in bad smells. The influence is assessed testing if RR is equal to 1, significantly.</p><p>We applied the statistical model to metrics coming from the three datasets -as a whole set-and from each dataset, separately. Table <ref type="table">I</ref> shows the results for the entire set and they are similar to the results of each particular dataset. The table consists of the following three columns: the language construct, RR and significant effect. In fact, it is the latter that indicates a strong relation between the number of bad smells and the use of variables per rules, control statements like while, for, if and calls to operations per rule. There is a trade-off between the transformations quality and the time to produce a fully functional MDE code generator. For the students, it is easier to use an imperative style (which is the their background programming style) than a declarative approach that they do not manage to master in 4 months (duration of the course).</p><p>Table <ref type="table">I</ref> also shows a strong relation between unused parameters/operations and bad smells, this is due to the project of the course is developed in an incremental way and the students were going through the learning curve. Therefore, early versions of the transformation includes operations and parameters that become unused in the subsequent versions, however, these operations remain in the code resulting an increase of bad smells which hampers maintainability.</p><p>We have the following metrics which are not related with bad smells: matched rules, lazy rules, operations without In addition, it was interesting to notice that lazy rules have no significant impact on smells either, this could be because lazy rules are being invoked from matched rules and the lazy code is not necessarily imperative. The latter is necessary in some contexts, for example, when an input element has to be transformed into several output elements that share no references. Finally, the influence of OWC (operations without context) on smell incidence does come as an interesting fact. In principal, the use of context should lead to a proper invocation of the operation to avoid errors. However, some students abuse this kind-of operation to create output elements, instead of using matched/lazy rules.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI. CONCLUSIONS AND FUTURE WORK</head><p>It is important that instructors sensitize students about taking into consideration not only transformations functionality but also the quality of transformations for maintenance and performance whilst they develope model management programs. This work gives empirical evidence that a declarative programming style influences positively the quality because the transformations are less bad-smell-prone. In this context, instructors should present the catalog of bad smells to students and explain them how the imperative style increase the probability of smells occurrences in code. In addition, instructors should consider the quality in the evaluation criteria of practical work to motivate students to avoid bad smells. Finally, the following concrete tips can be given to students: i) Favor lazy rules compared to operations if matched rules do not allow to express certain mappings (e.g., a source element that have to be transformed to different target elements that share no references); ii) Prefer guards and declarative rules instead of if, loops, and creation of new elements in the statement block of rules; and iii) Keep the code updated and avoid dead code (such as unused operations/parameters).</p><p>The proposed discoverer is able to found occurrences of 8 types of bad smells. It would be worth to extend our discoverer to cover the remaining 21 bad smells categorized in the stateof-art <ref type="bibr" target="#b6">[7]</ref>, <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b12">[13]</ref>. In addition, our discoverer could also be</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>and calls to lazy rules per rule. In the case of matched rules, this should not come as a surprise since transformation languages are built to be used with this declarative construct.</figDesc><table><row><cell cols="2">TABLE I</cell><cell></cell></row><row><cell cols="3">INFLUENCE OF LANGUAGE CONSTRUCTS ON BAD SMELLS</cell></row><row><cell>Metric</cell><cell>IRR</cell><cell>Significant Effect</cell></row><row><cell>Matched rules</cell><cell>1.0093</cell><cell>No</cell></row><row><cell>Lazy rules</cell><cell>1.0130</cell><cell>No</cell></row><row><cell>Operations With Context</cell><cell>1.1219</cell><cell>Yes</cell></row><row><cell>Operations Without Context</cell><cell>1.0236</cell><cell>No</cell></row><row><cell>Ifs</cell><cell>1.0427</cell><cell>Yes</cell></row><row><cell>Loops</cell><cell>1.1631</cell><cell>Yes</cell></row><row><cell>Variables per rule</cell><cell>1.1989</cell><cell>Yes</cell></row><row><cell cols="2">Calls to operations per rule 1.0788</cell><cell>Yes</cell></row><row><cell>Calls to lazy rules per rule</cell><cell>1.0035</cell><cell>No</cell></row><row><cell>Unused operations</cell><cell>1.1527</cell><cell>Yes</cell></row><row><cell>Unused parameters</cell><cell>2.4112</cell><cell>Yes</cell></row><row><cell>context,</cell><cell></cell><cell></cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">Epsilon Transformation Language (ETL). URL: https://www.eclipse.org/ epsilon/doc/etl/. July 13,</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2017" xml:id="foot_1">.<ref type="bibr" target="#b1">2</ref> Epsilon Labs, haetae. URL: https://github.com/epsilonlabs/haetae. July 13, 2017.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_2">GITHUB, ETLMetrics. URL: https://github.com/NicolasBonet/ ETLMetrics/. July 13, 2017.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_3">GITHUB, Bad smell catalog. URL: https://github.com/phillipus85/ ETLMetrics/blob/master/EduSymp2017/resources/Catalog.pdf.July 13, 2017.   </note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_4">GITHUB, IEO and CNL code. URL: https://github.com/phillipus85/ ETLMetrics/blob/master/EduSymp2017/resources/IEOandCNL.pdf. July 13, 2017.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="7" xml:id="foot_5">GITHUB, Bad smell metrics. URL: https://github.com/phillipus85/ ETLMetrics/blob/master/EduSymp2017/resources/Metrics.pdf.July 13, 2017.    generalized to identify bad smells in transformations written in other languages such as QvT, ATL, ASF+SDF. Finally, since most of transformation developers use specific IDEs, it would be useful to integrate the discoverer to these IDEs in order to provide feedback to the programmers at implementation time. In addition, it would be useful to integrate the previous work made around (semi-)automated refactoring.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Evaluating Maintainability with Code Metrics for Model-to-Model Transformations</title>
		<author>
			<persName><forename type="first">L</forename><surname>Kapová</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Goldschmidt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Becker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Henss</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2010">2010</date>
			<publisher>Springer</publisher>
			<biblScope unit="page" from="151" to="166" />
			<pubPlace>Berlin, Heidelberg; Berlin Heidelberg</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Interactive Visual Analytics for Efficient Maintenance of Model Transformations</title>
		<author>
			<persName><forename type="first">A</forename><surname>Rentschler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Q</forename><surname>Noorshams</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Happe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Reussner</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2013">2013</date>
			<publisher>Springer</publisher>
			<biblScope unit="page" from="141" to="157" />
			<pubPlace>Berlin, Heidelberg; Berlin Heidelberg</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Using metrics for assessing the quality of asf+ sdf model transformations</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">F</forename><surname>Van Amstel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">F</forename><surname>Lange</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">G</forename><surname>Van Den</surname></persName>
		</author>
		<author>
			<persName><surname>Brand</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Theory and Practice of Model Transformations</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="239" to="248" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Using metrics for assessing the quality of atl model transformations</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">F</forename><surname>Van Amstel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Van Den</surname></persName>
		</author>
		<author>
			<persName><surname>Brand</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop on Model Transformation with ATL</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="19" to="33" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Vignaga</surname></persName>
		</author>
		<title level="m">Metrics for measuring atl model transformations</title>
				<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
	<note type="report_type">tech report</note>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Model transformation analysis: Staying ahead of the maintenance nightmare</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">F</forename><surname>Van Amstel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">G J</forename><surname>Van Den</surname></persName>
		</author>
		<author>
			<persName><surname>Brand</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 4th International Conference on Theory and Practice of Model Transformations, ser. ICMT&apos;11</title>
				<meeting>the 4th International Conference on Theory and Practice of Model Transformations, ser. ICMT&apos;11<address><addrLine>Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="108" to="122" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A catalogue of refactorings for model-to-model transformations</title>
		<author>
			<persName><forename type="first">M</forename><surname>Wimmer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Jouault</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Cabot</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Object Technology</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="2" to="3" />
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Automated analysis, validation and suboptimal code detection in model management programs</title>
		<author>
			<persName><forename type="first">R</forename><surname>Wei</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">S</forename><surname>Kolovos</surname></persName>
		</author>
		<ptr target=".org" />
	</analytic>
	<monogr>
		<title level="m">Big-MDE@STAF, ser. CEUR Workshop Proceedings</title>
				<imprint>
			<publisher>CEUR-WS</publisher>
			<date type="published" when="2014">2014</date>
			<biblScope unit="volume">1206</biblScope>
			<biblScope unit="page" from="48" to="57" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Detecting performance bad smells for henshin model transformations</title>
		<author>
			<persName><forename type="first">M</forename><surname>Tichy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Krause</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Liebel</surname></persName>
		</author>
		<ptr target="CEUR-WS.org" />
	</analytic>
	<monogr>
		<title level="m">AMT@MoDELS, ser. CEUR Workshop Proceedings</title>
				<imprint>
			<date type="published" when="2013">2013</date>
			<biblScope unit="volume">1077</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Automated refactoring of atl model transformations: A search-based approach</title>
		<author>
			<persName><forename type="first">B</forename><surname>Alkhazi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Ruas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Kessentini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Wimmer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">I</forename><surname>Grosky</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of MODELS &apos;16</title>
				<meeting>MODELS &apos;16<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="295" to="304" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Static analysis of model transformations</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">S</forename><surname>Cuadrado</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Guerra</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>De Lara</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Software Engineering</title>
		<imprint>
			<biblScope unit="issue">99</biblScope>
			<biblScope unit="page" from="1" to="1" />
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Mining correlations of atl model transformation and metamodel metrics</title>
		<author>
			<persName><forename type="first">J</forename><surname>Di Rocco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Di Ruscio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Iovino</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pierantonio</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Seventh International Workshop on Modeling in Software Engineering, ser. MiSE &apos;15</title>
				<meeting>the Seventh International Workshop on Modeling in Software Engineering, ser. MiSE &apos;15<address><addrLine>Piscataway, NJ, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Press</publisher>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="54" to="59" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Optimization patterns for ocl-based model transformations</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">S</forename><surname>Cuadrado</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Jouault</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">G</forename><surname>Molina</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Bézivin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Model Driven Engineering Languages and Systems</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="273" to="284" />
		</imprint>
	</monogr>
</biblStruct>

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