<?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">Hypermodelling Live OLAP for Code Clone Recommendation</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Tim</forename><surname>Frey</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Otto-von-Guericke-University Magdeburg</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Veit</forename><surname>Köppen</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Otto-von-Guericke-University Magdeburg</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Hypermodelling Live OLAP for Code Clone Recommendation</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">1F1C184DEED5B5A4C60F76C5435F3546</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T19:42+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>Data warehousing</term>
					<term>software engineering</term>
					<term>hypermodelling</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Code bases contain often millions lines of code. Code recommendation systems ease programming by proposing developers mined and extracted use cases of a code base. Currently, recommender systems are based on hardcoded sets what makes it complicate to adapt them. Another research area is adaptable live detection of code clones. We advance clone detection and code recommender systems by presenting utilization of our Hypermodelling approach to realize an alternative technique. This approach uses Data Warehousing technology that scales for big data and allows for flexible and adaptable queries of source code. We present the generic idea to advance recommendation and clone detection based on queries and to evaluate our application with industry source code. Consequently, recommender systems and clone detection can be customized with flexible queries via Hypermodelling. This enables further research about more complex clone detection and context sensitive code recommendation.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Introduction</head><p>Code recommender systems advance integrated development environments. They are based on the idea to extract and mine information from code bases to generate recommendations. Recommendation data contains information, which method calls occur commonly together or which methods of a super class get overwritten <ref type="bibr" target="#b0">[1]</ref>. This data is compared to current coding of a developer and proposals are offered. The extraction and mining process limits recommendation to be easily adjusted to specific requirements. For instance, it is desirable to have recommendation information available for diverse APIs and also for an own project. Furthermore, project requirements often differ. In one project, it is required that the recommendation code base just comes out of a specific project and in another setting all available code should be used for recommendation. However, this type of flexible recommendation is currently not available. One main reason for this may be the immense size of modern code bases, resulting in difficulties to adjust the extraction process: It is necessary to scan the code base for different recommendation information every time.</p><p>Another challenge is the detection of code clones <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b2">3]</ref>. Thereby, code bases are scanned for duplicates. One main challenge is the different type of code bases and clone detection methods. Sometimes, a certain package should be excluded because replicas are allowed. Furthermore, clones may be exact duplicates of a code fragment or similar pieces of code. Hence, clone detection faces the challenge to provide an easy adjustable infrastructure that allows detecting different kinds of clones and different code base configurations. 1  Altogether, recommender systems and clone detection face the challenge to provide an adaptable infrastructure for large code bases that allow by flexible means to detect code clones and recommendations. In order to overcome these current limitations, we propose to use our Hypermodelling approach <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b4">5,</ref><ref type="bibr" target="#b5">6]</ref> for flexible code recommendation and clone detection. Through this approach both techniques can be covered with Data Warehouse (DW) and Online Analytical processing (OLAP) technology <ref type="bibr" target="#b6">[7]</ref> that scales well for large data sets and is easily adjustable for multidimensional queries. Therefore, our contribution is to describe, how the Hypermodelling approach can be used to advance recommender systems and clone detection at the same time. We also provide an evaluation, in which we demonstrate the approach on a real world source code excerpt.</p><p>The remainder of the paper is structured as follows: First, we recap important facts about our Hypermodelling approach. Next, we describe the general approach, how Hypermodelling can be used to detect clones and recommend code fragments. Afterwards, we describe the approach with a concrete example. In Section 4, we refer to related work and point out differences.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Hypermodelling</head><p>Hypermodelling is the idea to combine program analysis and DW. A more detailed description of the Hypermodelling approach is available in <ref type="bibr" target="#b3">[4]</ref>. <ref type="foot" target="#foot_1">2</ref>DW systems are an integrative component in business computing <ref type="bibr" target="#b6">[7]</ref>.</p><p>In <ref type="bibr" target="#b4">[5,</ref><ref type="bibr" target="#b5">6]</ref> different reporting possibilities of this approach are presented.</p><p>They are used to assemble data of different sources together. The integrated data are arranged into multi-dimensional data structures, i.e., data cubes, which serve as base for queries <ref type="bibr" target="#b3">[4]</ref>. Queries can be used to aggregate different measures and dimensions (within their hierarchies) that occur in the data. For instance, sales for an employee can be computed for a given time period. Thereby, this query aggregates the region, the products (sales) and the time in relation to financial indicators. Likewise, hierarchies can be abstracted. For instance, the region can be split into continents, countries, counties, as well as cities and the aggregates are associated with the distinct sales for those. This can be done for other hierarchies, e.g., customer group, year, or department. Generally, the idea is that different aggregations enable detailed investigations. With Hypermodelling, we introduce the idea that programming elements, like annotations or classes, are similar to data that are used within a DW. For instance, classes are defined within a package hierarchy. Annotations are associated with classes and their members. They are also defined in their own package. This is like the association of a salesman to a region, time period, and revenues. Hierarchies in code are similar to hierarchies of region or time. All together, we load source code into a DW and realize associations of classes, their inheritance, packages, and annotations as a DW cube and execute queries on it. For this paper, we combine cubes that are used in <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b4">5,</ref><ref type="bibr" target="#b5">6]</ref>. We present the results of exemplarily queries on our aggregated cube as reports in this paper, see Section 3.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Clone Recommendation with Hypermodelling</head><p>First, we describe the overall idea to use OLAP queries for code analysis. Afterwards, we refer to recommendation and clone detection.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.">Overall Idea</head><p>We propose a query based approach to advance recommendation and clone detection. We use OLAP queries and our data warehouse approach, out of the size of modern code bases. Additionally, DW technology has many best practices and tuning methods at hand. Queries allow flexibility, adaptability, and DW technology scales for big data. Thus, our live query approach should help to avoid clones and give recommendations at the same time. A developer encodes functionality (coding) and in the background, her written code is used to execute an OLAP query against the Code-DW that contains coded structure and elements. For instance, such code can be parameters of methods. Then, the query result gets presented to the developer. This may be in the form of recommendation or in a notification of a code clone. Hence, this query result influences ongoing coding process. From the result, the programmer goes on and encodes more functionality. With this additional functionality, again a query can be executed that contains more information than the first. Every time, as more and more code exists, the query is more and more detailed. If the programmer finishes her current coding, the query is quite detailed with all code fragments that are belonging to a method. If another method shares enough similarities, the corresponding code is presented to the developer and she has to decide if a code clone exists.</p><p>Currently, recommendation is not done live and neither is based on a query approach. Even more, code recommenders are inflexible and do not support slicing and dicing data for specific needs. This is often likewise the same for clone detection. So, with our Hypermodelling approach to load code into a DW, every query could be customized to meet specific requirements or just be sliced by a specific viewpoint.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.">Recommendation</head><p>Code recommendation systems mine facts that plenty of programmers have done out of a code base. Imagine, a developer overrides a method. The written method is compared with the recommendation data and she gets proposed which methods were called by others that did an override of this method. Exactly the same information can be revealed with an OLAP query. This information can be presented to a developer to recommend her what others did.</p><p>What we describe is a typical application of a code recommender system. Therefore, we propose a query process for recommender systems in Figure <ref type="figure" target="#fig_0">1</ref>. A developer encodes functionality and queries containing this encoded functionality are done. These queries reveal similar code artifacts and most things that others have done in those are proposed to a developer. The developer continues to encode functionality. This encoded functionality can be added as refinement to the query to get more detailed information on what most others did in a similar situation. With these queries, the recommendation data can be generated live and adapted easily. The Hypermodelling approach ensures that different code bases can be loaded into a DW. This allows us to reuse infrastructure that is designed for big data.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.">Clone Detection</head><p>Similarly to recommendation, we also realize live clone detection. Imagine a developer encodes a method, sharing a high similarity or equality to another method. Today, she continues her work. However, in this moment, she has knowledge at hand what she has programmed and can easily compare it with potential clones. This step fits perfectly into workflow and potential clones can be avoided easily. We propose to use our Hypermodelling approach to detect code clones live though a query based approach as described in Section 2.2. Through queries the detection process can be easily adjusted to project specific requirements.</p><p>For clone detection, imagine a developer is encoding functionality in a method. She creates the method declaration with all method parameters and then she encodes logic into the method. Methods of objects are called and other constructs are realized. Like for recommenders, regularly queries are executed to determine duplicates. If similarity is too high, code is presented to the developer so that she can decide if she has produced a clone. We show this process in Figure <ref type="figure" target="#fig_0">1</ref>, that also describes a clone detection cycle.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Evaluation</head><p>In order to evaluate the application ability of recommendation and clone detection based on queries, we select a method of a program that we describe in <ref type="bibr" target="#b5">[6]</ref>. Data in our DW and queries on a real project demonstrate that our approach enables recommendation not only with prepared data. We depict a class (AVMShareMapper) that implements two interfaces that are implemented by other classes of the application. Thereby, we query if others also implement these interfaces to ensure a valid example that shares similarities with other classes. We select the afterpropertiesSet method for investigation and divide the method in four different parts. For every part, we execute queries to simulate how a developer would encode this method and queries would be executed in the background. Our scenario is mainly based on live clone detection. However, the same approach of queries can be used for recommendation.</p><p>Figure <ref type="figure" target="#fig_2">2</ref> shows the extended coding process that can be supported by queries. We imagine the coding process there as follows: In the first step a developer encodes the class body. Then, she goes on and encodes step by step a method. We split the afterpropertiesSet method and arranged it above, corresponding to the process of a developer. We describe exemplary queries in natural language beneath the process. Those queries can be executed with the DW query languages from the development environment in the background, while the developer is coding. Behind queries is their  result or at least an excerpt. At the bottom, possible ensuing actions are described. In the following, we go through the process of Figure <ref type="figure" target="#fig_2">2</ref>: First (1), a developer starts encoding the class and implements the ShareMapper and the InitializingBean interface. These two interfaces are used to create a query for the most common method names of the classes that implement one of the interfaces. <ref type="foot" target="#foot_3">4</ref>The result shows the amount of children types with the same method name. The result is sorted following the occurrence of method names of ShareMapper implementers. It would be possible to sort the result after the occurrence in InitializingBean or to merge most common method names in both interface implementers. Anyway, the result information can be used to show developers which methods other developers implemented by extending a certain interface. For our scenario, we that developers see plenty of times the afterPropertiesSet method is implemented and start encoding this. Thereby, it can be recognized that a developer uses a method name based on the InitializingBean and the following queries can be specialized on this interface. To give a better impression about the technique, we present the query in Listing In the second step (2), the developer starts encoding logic of the afterPropertiesSet method. She calls a method of what is used to refine the former query. It is enriched with information which methods are called to reveal which types also obtain same methods, implement the interface and have the same method name. Such kind of similarity can be an indicator that the developer produces a clone. Furthermore, maybe the developer is putting effort and thoughts into implementing a method that is already implemented. Therefore, a developer gets presented other methods that share a high similarity. If a user rejects the proposals and wants to encode further functionality, the information about similar methods can also be used to present methods that are called in the similars. We show the corresponding query in Listing 2. The result types of this query that share a similarity (MultiTenantShareMapper, HomeShareMapper) can also be used in another query to generate recommendation information. Exemplarily, such a recommender query is shown in Listing 3. The called methods of two similar types (MultiTenantShareMapper, HomeShareMapper) are computed based on a query. This can be used to propose a user which other methods are called by other developers in a similar situation. Succeeding (3), a developer encodes more functionality. In the background the query is extended to compare method calls of the current method with the ones of other extenders. It is like a fail save detector that tries to uncover if there is a clone produced.</p><p>With every new method call, the query is extended and executed again. After six shared method calls and the super interface, enough indicators are collected to remind the user with a traffic light or a pop up about similarity. <ref type="foot" target="#foot_5">6</ref>Finally, in the forth step (4), the user finishes the method. This is recognized in the background and a complete query for all method calls is executed. Out of the high similarity of the method calls, it is assumed that the method logic is maybe "externalizable" and customizable through parameters. However, the easiest way is to present methods with a high similarity to the user and let him decide if this is a clone.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Related Work</head><p>Our prior works describes a general approach how code structure can be processed with a DW and queries <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b4">5,</ref><ref type="bibr" target="#b5">6]</ref>. In this paper, we focused on a concrete application.</p><p>Others describe different clone detection methods <ref type="bibr" target="#b1">[2]</ref>. One clone detection method <ref type="bibr" target="#b2">[3]</ref> proposes live clone detection with a client-server architecture. In comparison to our approach, the described detection <ref type="bibr" target="#b2">[3]</ref> is not customizable. Another one, CloneDetective <ref type="bibr" target="#b7">[8]</ref>, offers an advanced framework and tool chain for clone detection, which is especially geared towards flexibility of clone detection research. Hypermodelling, on the contrary, targets to utilize DW technology. In general, we see the use of DWs as an addition to known clone detection mechanisms and not as competitor. DWs often already exist in enterprises where they are used for business applications. Therefore, our approach makes a reuse of DW technology for clone detection possible. Hence, further research should determine in detail if and which of those other clone detection approaches can be realized with DW technology.</p><p>Other related work can be found in the area of code recommender systems <ref type="bibr" target="#b0">[1]</ref>. They provide methods to mine data out of code bases and generate recommendations out of it. The whole recommendation is hard wired and fixed. Further, no scaling technology for live recommendations with a client server infrastructure is proposed. With our approach, through DW query based recommendations a more flexible and adjustable infrastructure is at hand. Therefore, we see the emerging need to investigate DW technology further to advance the recommender systems.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion and Future Work</head><p>We described the problem of large code bases and the inflexibility of current code recommendation and challenges of clone detection systems. We proposed to overcome these limitations through a query based approach that uses DW technology. Our approach is evaluated and its application ability is shown by queries to a real code base. So, the next generation recommendation and clone detection techniques can be based on DW technology. Related work reveals possible synergies with other research and indicates that DW technology is a promising area to advance software engineering.</p><p>In general, we see the need to describe our method in more details. Additionally, the use of DW technology enables further research on DW based clone detection. We showed the capability to find "full method clones". However, clones can also be copied code fragments within different methods. Therefore, further investigations can focus on identification of queries for these clones. Thereby, we see ways to compute similarity indicators based on queries and the clone granularity level (method or fragment based) as important questions. The precision of our technique is fixed to method calls, discarding method parameters. Hence, the same called methods that take different parameters and are considered as clones. For that reason, the possibility to enhance or adjust the precision of our queries through additional facts should be considered. Therefore, we see the need to work together with industry developers to evaluate which level of precision and granularity is desired in practice.</p><p>Furthermore, we connect code recommendation with clone detection. Therefore, our work makes it possible to regard both areas together and investigate possible synergies in the future. This connection is an additional difference to previous research. Generally, our approach shows a rudimentary and first scenario with primitive queries. More complex queries, scenarios, and areas are of interest for further investigations. For instance, the area of refactoring is also near clone detection and relations to it can be investigated. We also see an advanced trail by integrating the context (e.g., the package, the prior studied code, or the task) wherein a developer encodes functionality to advance recommendation systems. Currently, code recommenders are dull and based on the same rule set. Our dynamic query based approach enables further research, how recommendations need to be altered and adjusted to different contexts of a developer to respect his current programming tasks within the recommendation.</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. Query refinement throughout the coding process</figDesc><graphic coords="3,229.98,310.73,154.83,71.95" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>{</head><label></label><figDesc>the list of available AVM share names m_avmShareNames = new StringList(); SharedDeviceList shrList = m_filesysConfig.getShares(); Enumeration&lt;SharedDevice&gt; shrEnum = shrList.enumerateShares(); while ( shrEnum.hasMoreElements()) { // Get the current shared device and check if it is an AVM filesystem device SharedDevice curShare = shrEnum.nextElement(); try{ if ( curShare.getInterface() instanceof AVMDiskDriver) Present the method with the highest similarity to the user Remind the user that there is a similar method and he should a void the clone Show the user which methods others implement Finish the method and get presented the most similar method to decide if a clone has been produced method calls with the same method name and superinterface Tell the user that 2 other implementors called the same method Implement more logic and recat on the reminding Implement the method logic Start encoding a new class</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 2 .</head><label>2</label><figDesc>Figure 2. Query based recommendation and clone detection process</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>1 .Listing 1 .</head><label>11</label><figDesc>The parent class or interface is named ParentType and the CodeStructure is the OLAP cube. The query is based on multi-dimensional expressions standard 5 SELECT { [ParentType].[Name].&amp;[ShareMapper], [Parent].[Name].&amp;[InitializingBean] } ON COLUMNS , { [Method].[Name].[All].CHILDREN } ON ROWS and shows that the amount of methods for children is computed for extenders of the ShareMapper and InitializingBean. FROM [Code-Structure] WHERE ( [Measures].[Method-Count] ) Query for method names of interfaces children</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>2 . 3 .</head><label>23</label><figDesc>SELECT { [CalledMethod].[Name].&amp;[getConfigSection]} ON COLUMNS , {[Type].[Name].[All].CHILDREN} ON ROWS FROM [Code-Structure] WHERE ( [Measures].[Method Calls],[ParentType].[Name].&amp;[InitializingBean], [Method].[Name].&amp;[afterPropertiesSet] ) Listing Determining similar code SELECT NON EMPTY { [Measures].[Method Calls Anzahl] } ON COLUMNS , { [Called Method].[Name].[All].CHILDREN } ON ROWS FROM [Code-Structure] WHERE ( [Type].[Name].&amp;[HomeShareMapper], [Parent -Type].[Name].&amp;[InitializingBean], [Method].[Name].&amp;[afterPropertiesSet] ) Listing Determining what similar code did for recommendation</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_0"><ref type="bibr" target="#b0">1</ref> Note, clone detection methods can be configured and live detection is possible<ref type="bibr" target="#b2">[3]</ref>. However, it still is a challenge. Thus, we present alternative approach as complementary subsidiary to code recommendation.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">http://hypermodelling.com</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">Note, there are also open source Data Warehouse solutions available. For instance: http://pentaho.com.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">Note, a query can be sliced by a project or a specific package. Plenty of customizations are thinkable.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_4">We show a few queries to give an impression of the query language. For further information, see the MDX language reference: http://msdn.microsoft.com/en-us/library/ms145595.aspx / http://xmlforanalysis.com</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_5">Note, at this moment such kind of queries can also be used to propose method calls like in step 2.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Mining subclassing directives to improve framework reuse</title>
		<author>
			<persName><forename type="first">M</forename><surname>Bruch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Mezini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Monperrus</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 7th IEEE Working Conference on Mining Software Repositories</title>
				<meeting>the 7th IEEE Working Conference on Mining Software Repositories</meeting>
		<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="141" to="150" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Comparison and evaluation of code clone detection techniques and tools: a qualitative approach</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">K</forename><surname>Roy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">R</forename><surname>Cordy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Koschke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Science of Computer Programming</title>
		<imprint>
			<biblScope unit="volume">74</biblScope>
			<biblScope unit="issue">7</biblScope>
			<biblScope unit="page" from="470" to="495" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m" type="main">Shinobi: a Real-Time Code Clone Detection Tool for Software Maintenance</title>
		<author>
			<persName><forename type="first">T</forename><surname>Yamashina</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Uwano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Fushida</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Kamei</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Nagura</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Kawaguchi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Iada</surname></persName>
		</author>
		<idno>NAIST-IS- TR2007011</idno>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
		<respStmt>
			<orgName>Graduate School of Information Science, Nara Institute of Science and Technology</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Hypermodelling -introducing multi-dimensional concern reverse engineering</title>
		<author>
			<persName><forename type="first">T</forename><surname>Frey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Köppen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Saake</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">2nd International ACM/GI Workshop on Digital Engineering (IWDE)</title>
				<meeting><address><addrLine>Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="58" to="66" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Hypermodelling for drag and drop concern queries</title>
		<author>
			<persName><forename type="first">T</forename><surname>Frey</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of Software Engineering 2012 (SE2012)</title>
				<meeting>Software Engineering 2012 (SE2012)<address><addrLine>Berlin, Germany</addrLine></address></meeting>
		<imprint>
			<publisher>Gesellschaft für Informatik</publisher>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="107" to="118" />
		</imprint>
	</monogr>
	<note>(GI)</note>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Exploring software variance with hypermodelling -an exemplary approach</title>
		<author>
			<persName><forename type="first">T</forename><surname>Frey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Köppen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Engineering 2012: Fachtagung des GI-Fachbereichs Softwaretechnik</title>
				<editor>
			<persName><forename type="first">S</forename><surname>Jähnichen</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><surname>Küpper</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">S</forename><surname>Albayrak</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin, Germany</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="121" to="140" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m" type="main">Building the Data Warehouse</title>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">H</forename><surname>Inmon</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005">2005</date>
			<publisher>J.Wiley &amp; Sons</publisher>
			<pubPlace>New York, USA</pubPlace>
		</imprint>
	</monogr>
	<note>4th ed</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">CloneDetective -a workbench for clone detection research</title>
		<author>
			<persName><forename type="first">E</forename><surname>Juergens</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Deissenboeck</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Hummel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 30th International Conference on Software Engineering</title>
				<meeting>the 30th International Conference on Software Engineering</meeting>
		<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="603" to="606" />
		</imprint>
	</monogr>
</biblStruct>

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