<?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">A Graph Transformation Approach to Introducing Aspects into Software Architectures</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Md</forename><forename type="middle">Nour</forename><surname>Hossain</surname></persName>
							<email>hossaimn@mcmaster.ca</email>
						</author>
						<author>
							<persName><forename type="first">Tom</forename><surname>Maibaum</surname></persName>
						</author>
						<author>
							<affiliation key="aff0">
								<orgName type="department">Dept. of Computing and Software</orgName>
								<orgName type="institution">McMaster University Hamilton</orgName>
								<address>
									<country key="CA">Canada</country>
								</address>
							</affiliation>
						</author>
						<author>
							<affiliation key="aff1">
								<orgName type="department">Wolfram Kahl Dept. of Computing and Software</orgName>
								<orgName type="institution">McMaster University Hamilton</orgName>
								<address>
									<country key="CA">Canada</country>
								</address>
							</affiliation>
						</author>
						<author>
							<affiliation key="aff2">
								<orgName type="department">Dept. of Computing and Software</orgName>
								<orgName type="institution">McMaster University Hamilton</orgName>
								<address>
									<country key="CA">Canada</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">A Graph Transformation Approach to Introducing Aspects into Software Architectures</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">B30764DCFF848D4A951B3FB52D49820C</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>Software architecture</term>
					<term>aspect introduction</term>
					<term>graph transformation</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>While aspect-oriented programming (AOP) addresses introduction of "aspects" at the code level, we argue that addressing this at the level of software architecture is conceptually more adequate, since many aspects, that is, "crosscutting concerns", are formulated already in the requirements, and therefore can be dealt with in a more controlled manner in the "earlier" phase of software architecture design.</p><p>We use Fiadeiro and Maibaum's [11]  precise concept of software architectures organized as diagrams over a category of component specifications, where architecture semantics is defined as the colimit specification of the diagram. The diagram structure suggests aspect introduction via an appropriate variant of graph transformation. Single-pushout rewriting in categories of total homomorphisms has previously already been used for different kinds of "enrichment" transformations; we identify "zigzag-path homomorphisms" as underlying a category where many practically useful aspect introductions turn out to be such single-pushout transformations, and present the relevant theorems concerning pushout existence and pushout construction.</p><p>Practical aspect introduction (e.g., privacy) always breaks some properties (e.g., "message can be read in transit"); therefore, aspect introduction transformations cannot be designed to be semantics preserving. Our special categorical setting enables selective reasoning about property preservation in the transformed specifications, and property introduction from the introduced aspects. This method enables us to detect and resolve both conflicts and undesirable emergent behaviors that arise from aspect introduction or interaction.</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>The relationship between the requirements and the components of a system is not always straightforward. Regardless of the size of the system, sometimes in practice a single requirement might not be implemented by a single component and some components might implement more than one requirement <ref type="bibr" target="#b25">[26]</ref>. This is because functional decomposition "cuts across" other kinds of decomposition.</p><p>In spite of the wide acceptance of separation of concerns as a good software engineering principle, most attempts to define concerns try to relate them to programs <ref type="bibr" target="#b25">[26]</ref>. "In fact, as discussed by Jacobsen and Ng (2004), concerns are really reflections of the system requirements and priorities of stakeholders in the system" <ref type="bibr" target="#b25">[26]</ref>. If we relate concerns with requirements, then aspects are cross-cutting concerns/system concerns that cross-cut through different core concerns or apply to a whole system <ref type="bibr" target="#b17">[18]</ref>. Some good examples of aspects are performance, reliability, security, authorization, synchronization, error handling <ref type="bibr" target="#b18">[19]</ref>, <ref type="bibr" target="#b25">[26]</ref>.</p><p>Aspect-oriented programming <ref type="bibr" target="#b17">[18]</ref>, <ref type="bibr" target="#b20">[21]</ref> is a complementary programming technique to generalized-procedural programming languages ( <ref type="bibr" target="#b17">[18]</ref>). It allows design and code to be more modular to reflect the developers' view of the system by modularizing away the cross-cutting functionality from the base program into a separate module (also called aspect) <ref type="bibr" target="#b6">[7]</ref>, <ref type="bibr" target="#b8">[9]</ref>, <ref type="bibr" target="#b17">[18]</ref>, <ref type="bibr" target="#b20">[21]</ref>.</p><p>Though the aspect-oriented community claims that AOP has some commendable characteristics, unfortunately, it has some significant drawbacks as well. For the very same reason for which <ref type="bibr" target="#b7">[8]</ref> in his famous letter considered goto statements harmful, <ref type="bibr" target="#b2">[3]</ref> characterize AOP as the modern-day "OOP goto" and provocatively asks "AOP considered harmful?". Besides that, rather than making the system simpler, sometimes AOP may increase the complexity of the system (to a certain degree) and lead to almost untraceable problems <ref type="bibr" target="#b20">[21]</ref>. However, not only the methodology, but also having to deal with aspects at the programming language level, is one of the reasons that inevitably leads AOP to many of these problems.</p><p>We can mitigate the problems in aspect-oriented software development by introducing aspects in the earlier stages of software development, in particular at the software architecture level (a comprehensible higher level abstraction of an overall system structure).</p><p>Introducing aspects at the architecture level streamlines the process of aspect-oriented software development and has some other potential advantages. Our methodology mitigates the complexity of system evolution by making the system evolution mechanical instead of manual. Aspects at the architecture level allow developers and other stakeholders to recognize, represent, analyze and evaluate its abstract representation at the earlier stages of software development. As a consequence, the system representation at this level is more comprehensive/all inclusive, and the design decisions will be clearly captured in the actual code. It also induces some other benefits in terms of documentation (i.e., user, system, and design documentation) and cost. The technique we are using to define the system specification from component and connector specifications will allow us not only to reuse small components but also the whole system, i.e., make it a part of a larger system. Finally, we will be able to analyze the new architecture by proving its safety and liveness properties, check its conformance with the old architecture, and detect conflicts, if any exists, due to feature interactions.</p><p>In this paper, we address the following problem: "How to introduce aspects at the software architecture level?". Our solution is to develop a technique to deal with aspects by encapsulating them as graph transformation rules on the diagram representing the architecture and applying the aspect by performing the graph transformation. In order to implement our solution, we need to answer the following challenging question:</p><p>Research Question (How to Introduce Aspects). What transformation technique will allow us to introduce aspects at the architecture level and verify the properties that need to be preserved from the old architecture and the properties introduced by the aspect? An effective solution to our research question depends on a few considerations, such as how do we specify the components and connectors, and how do we define the architecture or system specification. Fiadeiro and Maibaum introduce a logic to describe (specify) architecture components and connectors and a technique to specify the system or architecture specification as a diagram involving component and connector specifications <ref type="bibr" target="#b9">[10]</ref>, <ref type="bibr" target="#b10">[11]</ref>. The logic they introduce is similar to Modal Dynamic Logic, except that here actions are propositions. The language has a special logical principle called "locality". This notion of "locality" has been used successfully to represent the software engineering principle of data abstraction, scope and encapsulation. In order to combine the components, the category theoretic notion of colimit is used. The technique used to specify the system specification from components and connectors is independent of the underlying logic and successfully modeled software engineering principles such as modularity, inheritance, incrementality, reusability, and other related concepts <ref type="bibr" target="#b10">[11]</ref>- <ref type="bibr" target="#b12">[13]</ref>. Therefore diagram transformation implies aspect introduction.</p><p>Since none of the present graph transformation approaches (i.e., double-pushout, single-pushout, hyperedge replacement graph grammars) are applicable in our case, in order to perform the graph transformation, we are proposing a new transformation technique. This technique is somewhat inspired by the hyperedge replacement graph transformation technique. Besides that, the category-theoretic notions of Kleisli category, monad, and pushout also have some contribution to define the transformation, and, finally, help us to figure out a structured way to introduce an aspect at the architecture level by performing a diagram transformation. This paper will proceed as follows: In Section II we briefly introduce the logic and formally define some of the essential terminology as a prerequisite for a better understanding of our research goal. Then, in Section III, we illustrate our research challenge and analyze the application of the established graph transformation techniques in our setting, followed by Section IV, where we formally introduce our zigzag graph homomorphism concept and its instantiation for system architectures. Section V contains two graph transformation rules and an example of aspect introduction. How to construct the resulting architecture by applying our transformation technique is explained in Section VI. The conformance check of the new system architecture to the old system architecture is introduced in Section VII.</p><p>In Section VIII, we discuss some related work along with the similarities and dissimilarities between different approaches. Finally, future work and conclusions are presented in Sections IX and X.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II. FORMAL DEFINITION OF SYSTEM ARCHITECTURES</head><p>The logic we are using was introduced by Fiadeiro and Maibaum <ref type="bibr" target="#b10">[11]</ref>. The specification of a component is a pair (θ, Φ) where θ is the signature of the component and Φ is a finite set of formulas over θ.</p><p>A signature homomorphism σ from θ 1 to θ 2 identifies the symbols in θ 2 that correspond to the symbols in θ 1 .</p><p>A specification homomorphism between two component specifications (θ 1 , Φ 1 ) and (θ 2 , Φ 2 ) is a signature homomorphism σ from θ 1 to θ 2 such that for every axiom p ∈ Φ 1 and also for the locality axiom <ref type="bibr" target="#b10">[11]</ref> which asserts a useful kind of local control for the state transition semantics of θ 1 , the translation σ(p) is a semantic consequence of Φ 2 .</p><p>Fact 1: x[11, Prop. 3.1.7] Component specifications and their specification morphisms form a category SPEC.</p><p>Following Fiadeiro and Maibaum <ref type="bibr" target="#b10">[11]</ref>, we use colimits to define the semantics of system architectures, which are defined to be diagrams over this category. A diagram over a category is a "shape graph" together with an assignment of objects to vertices, and of compatible morphisms to edges -the following definitions follow standard practice: Definition 1: A (directed) graph G = (V , E , src, tgt) consists of a vertex set V , and edge set E , and the source and target mappings src, tgt : E → V .</p><p>Definition 2: A diagram in a category C is a graph homomorphism D : I → |C | for some graph I . The graph I is called the shape graph of the diagram <ref type="bibr" target="#b1">[2]</ref>.</p><p>In the following, we assume a choice of colimits in SPEC, and follow <ref type="bibr" target="#b10">[11]</ref> in referring to the logical consequences of the axioms of a specification as its properties: Definition 3: A system architecture is a diagram in the category SPEC.</p><p>The properties of a system architecture are the properties of the colimit of the diagram.</p><p>In the view that considers diagrams as functors instead of just graph homomorphisms, the standard homomorphisms concept for these diagrams is just that of natural transformations: Definition 4: A system architecture homomorphism H :</p><formula xml:id="formula_0">A 1 → A 2 from architecture A 1 to architecture A 2 is a triple H : (H V ,H E ,H SpecMap ) consisting of: • node mapping H V : A 1 .V → A 2 .V , • edge mapping H E : A 1 .E → A 2 .E ,</formula><p>• transformation H SpecMap selecting for each node n 1 :</p><p>A 1 .V a specification homomorphism</p><formula xml:id="formula_1">H SpecMap n 1 : SpecHom (A 1 n 1 ) (A 2 (H V n 1 ),</formula><p>such that for each edge e : A 1 .E we have the following:</p><formula xml:id="formula_2">A 2 .src(H E e) = H V (A 1 .src e) A 2 .tgt(H E e) = H V (A 1 .tgt e) H SpecMap (tgt e) • A 1 e = A 2 (H E e) • H SpecMap (src e)</formula><p>H SpecMap (src e) is an isomorphism Definition 5: SysArchs is the category where objects are system architectures and morphisms are system architecture homomorphisms.</p><p>The last condition of Def. 4 is sufficient to ensure that SysArchs has pushouts.</p><p>With this concept of system architecture in hand, introducing aspects at the system architecture level is now easily understood as a kind of diagram transformation.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III. ASPECT INTRODUCTION AS DIAGRAM TRANSFORMATION</head><p>For the system architectures as defined in the previous section, we now explore how aspect introduction can be performed via diagram transformation; in the current section we concentrate on the shape graph aspect of this. By considering a concrete example, we will demonstrate that the kind of aspect introduction we aim for is not covered by existing graph transformation concepts; in the following sections, we will then find an appropriate formalization for the kind of diagram transformation we need. Literally, transformation of something means change in its shape or appearance. In graph transformation, the underlying entity whose form is changed is a graph, and this change is controlled by rules r = (L → R) (often called production rules). The graph on which we apply the transformation rule is called the application graph (A). Rule application to some application graph (A) requires finding an occurrence of an instance of a left-hand side (L). The graph that is the outcome of the transformation is called the result graph (B).</p><p>Graph transformation is a powerful tool and it can be used to resemble all the common terminologies associated with aspect oriented programming. The term "aspect" has the same meaning for both AOP and the graph transformation technique, i.e., cross-cutting concerns. A graph rewriting rule can be considered as an aspect program. The join point and advice of AOP can be represented as the left-hand side and righthand side of a rule in the graph transformation technique. The matching of a left-hand side into the application graph corresponds to the term pointcut. The way a transformation step is generated is equivalent to weaving, and the combination of both the base and aspect programs is resembled by the result graph.</p><p>The primary motivation for our work is to streamline the process of aspect-oriented software development by developing a technique to introduce aspects in the early stages of software development, i.e., at the software architecture stage.</p><p>To recall, aspects are concerns (priorities of stakeholders) that cross-cut through different core/functional concerns. Through the following example, we will illustrate what we mean by aspect introduction.</p><p>Consider the diagram in Figure <ref type="figure">1</ref>. This diagram is an architecture for sender-receiver communication. Here the com-</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Sender</head><p>Trans Receiver</p><p>SendTrans TransRec ST2S ST2T TR2T TR2R So, what did we do here? We introduced a security aspect into an architecture where unsecured communication existed and made the architecture "secured". But the challenging question is: How can we systematically introduce such aspects into software architectures? Simple cases of this, as the one shown in Figure <ref type="figure">3</ref>, suggest that standard categorical graph transformation concepts, such as the double-pushout (DPO) approach <ref type="bibr" target="#b3">[4]</ref>, should be applicable. Different style and color edges are used in the diagrams to make the matching obvious.</p><p>However, with more complex application architectures, we find situations where we consider aspect introduction to still make sense, even though no total shape graph homomorphism exists from the left-hand side of the rule, and such total matchings would be required both for the single-pushout approach and for the double-pushout approach to graph transformation.</p><p>For example, given an architecture containing a "secure" communication channel, if we want to introduce reliability Fig. <ref type="figure">4</ref>. Adding reliability to secure communication However, we notice that there is no structure-preserving matching X L from the "Rule LHS" to the "Application Architecture", since we cannot find in the "Application Architecture" any match for the edges ST2S and TR2R of the LHS. Hence, in this kind of setting, the conventional graph homomorphism "does not work", and therefore the DPO and SPO approaches cannot be used directly.</p><p>The type of matching we require is pictured in Figure <ref type="figure" target="#fig_1">5</ref>; the fact that we need this kind of "indirect" matching is the most obvious reason why conventional DPO/SPO is not directly applicable. Here, a single edge can map to a zigzag path and mappings between vertices are specification homomorphism. For further illustration see section IV.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV. ZIGZAG PATH HOMOMORPHISMS</head><p>Although we are using directed graphs to underpin our system architectures, the paths we will be considering for • the first and last element are always vertices, called the source and the target of the path;</p><formula xml:id="formula_3">• k ≥ 0 is the length of p; • e i is incident with v i−1 and v i for i ∈ 1..., k − 1.</formula><p>The set of all zigzag paths in G will be written Zpath G .</p><p>Definition 7: Given two graphs</p><formula xml:id="formula_4">G i = (V i , E i , src i , tgt i ) for i = 1, 2, a Zpath homomorphism H : G 1 → G 2 consists of two functions, H v : V 1 → V 2</formula><p>, and H ep : E 1 → Zpath G2 such that the two diagrams in Figure <ref type="figure">6</ref> </p><formula xml:id="formula_5">commute. V 1 E 1 Zpath G 2 V 2 src 1 H ep source 2 H v V 1 E 1 Zpath G 2 V 2 tgt 1 H ep target 2 H v Fig. 6. Zpath Graph Homomorphism</formula><p>For the matchings as explained in the previous section, we now allow edges to be matched to zigzag paths. In the example there, this corresponds to identifying the zigzag path SendTrans → Encipherer ← SendEnci → Sender in the secured communication architecture in Figure <ref type="figure">4</ref> as "reasonably matching" the communication setup ST2S : SendTrans → Sender in the rule LHS.</p><p>Definition 8: A system architecture Zpath homomorphism is a tuple H = (H V , H Z , H SpecMap ) consisting of a shape graph Zpath homomorphism (H V , H Z ) , and the mapping H SpecMap that assigns to each vertex n : V 1 a specification homomorphism H SpecMap n : A 1 n → A 2 (H V n), such that source node specifications are preserved, that is, for each edge e : A 1 .E , the specification homomorphism H SpecMap (src e) is an isomorphism.</p><p>Note that we included no conditions on interaction between the range of H SpecMap and the specification homomorphisms labelling the edges of the image paths of H Z -for different kinds of property preservation, different and rather specialized conditions are necessary, which are beyond the scope of the current paper.</p><p>Definition 9: We define ZpathGraphs is the category where objects are graphs and morphisms are Zpath graph homomorphisms.</p><p>There is an obvious embedding functor from Graphs into ZpathGraphs, and this preserves pushouts:</p><p>Theorem 1: For every span in Graphs, a pushout in Graphs for that span is also a pushout in ZpathGraphs.</p><p>For defining graph transformations, we now move to the category that allows simple connections in architectures to be matched to zigzag paths over several components:</p><p>Definition 10: SysArchsZ is the category where objects are system architectures and whose morphisms are system architecture Zpath homomorphisms.</p><p>Theorem Theorem 1 carries over to this category: Theorem 2: For every span in SysArchs, a pushout in SysArchs for that span is also a pushout in SysArchsZ.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V. ASPECT INTRODUCTION RULES</head><p>Using the well-known example of sender-receiver communication <ref type="bibr" target="#b0">[1]</ref> that we already employed for the examples in section III, we will now illustrate our Zpath graph transformation based technique.</p><p>Definition 11: A Zpath architecture transformation rule consists of two system architectures L and R connected by a single Zpath system architecture homomorphism Φ : L → R.</p><p>Such a rule can be applied to system architecture A via the matching Zpath system architecture homomorphism Ξ : L → A with result system architecture B if a pushout in SysArchZ of the following shape exists:</p><formula xml:id="formula_6">L Φ -R Ξ ? X ? A Ψ</formula><p>-B Such a pushout is also called a Zpath architecture transformation step from A to B via the rule Φ : L → R.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Security Introduction:</head><p>For any given architecture where sender-receiver communication exists, if we want to introduce security into it by performing a Zpath graph transformation, the transformation rule we will apply is shown in Figure <ref type="figure" target="#fig_2">7</ref>. In fact, transformation via this rule explains the security introduction shown in Figure <ref type="figure">3</ref>. For any given architecture where sender-receiver communication exists, the rule for introducing reliability into it is depicted in Figure <ref type="figure">8</ref>. This is the rule we "tried to apply" in Figure <ref type="figure">4</ref>, where the right-hand-side is not drawn. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Introduce Reliability on Secure Communication</head><p>Consider we have a secured communication architecture as application graph, and we wish to introduce reliability on top of this to make the architecture both secured and reliable. Applying the rule of Figure <ref type="figure">8</ref> succeeds, since this pushout in SysArchZ exists; this is shown in Figure <ref type="figure">9</ref>.</p><p>However, SysArchZ does not have all pushouts, so that aspect introduction via a chosen rule and matching may be Nevertheless, even if both rule and matching map LHS edges to non-trivial zigzag paths, SysArchZ pushouts still exist, as we investigate in more detail in the next section.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI. AMALGAMATING SysArchZ PUSHOUTS</head><p>Although SysArchZ does not have all pushouts, many aspect introduction rule applications are still possible, and can be completed via pushouts, due to the typical shape of aspect introduction rules that can be observed already in the examples provided so far: The left-hand side is usually a single zigzag path, and some of the edges of the LHS are replaced with zigzag paths on the RHS, while other LHS edges are preserved. These preserved edges can be matched to zigzag paths without creating conflicts -technically, without creating a rule-matching-span that has no pushout.</p><p>The general reason for this is that SysArchZ pushouts can be amalgamated along SysArch pushouts.</p><p>Theorem 3: If the span A ← L → R in SysArchZ can be factored via three pushouts in SysArchs as shown in Figure <ref type="figure">10</ref>, and if the two SysArchsZ spans</p><formula xml:id="formula_7">A 1 ← L 1 → R 1 and A 2 ← L 2 → R 2 have pushouts in SysArchsZ, then A ← L → R has a pushout in SysArchsZ, too. L 0 L 1 L 2 L R 0 R 1 R 2 R Φ R A 0 A 1 A 2 A P 0 P 1 P 2 P X P Φ 0 X 2 Ψ Ξ L Ψ A Ξ 1</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Fig. 10. Amalgamation Theorem</head><p>This amalgamation theorem allows us to decompose prospective rule application pushouts of rules like those of Figs. <ref type="figure" target="#fig_2">7 and</ref> 8 into little pieces induced by the subgraphs of the left-hand side induced by single edges, or by node sets. We discuss the different kinds of pieces in Sects. VI-A-VI-C.</p><p>The situation is further simplified if we restrict ourselves to architectures with a connector-component bipartition, where each node of the shape graph either is a "connector" that has only outgoing edges, or is a "component" that has only incoming edges. For system architecture (Z-path) homomorphisms, we then restrict the specification homomorphisms associated with source nodes of edges in the source diagram to be isomorphisms. In this paper, for the sake of simplicity we strengthen this restriction further to only allow identity homomorphisms. For example, source2source in Figure <ref type="figure" target="#fig_1">5</ref> has to be an identity.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Discrete LHS</head><p>Working with subgraphs induced by node sets of the lefthand side is necessary for separating the context of a rule application from the modifications introduced by the rule, and also for parts of the RHS that are not in the (zigzag-) image of the LHS, as for example the monitor components of the reliability introduction rules of Figure <ref type="figure">8</ref>, for which we show the corresponding rule fragment in Figure <ref type="figure" target="#fig_3">11</ref>. In the situations we encountered so far, the following (rather obvious) theorem is sufficient, although it excludes context that is attached to connectors:</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Left Architecture</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Sender Trans</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Right Arch</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Sender Res TransPlus</head><note type="other">MontrSend</note><formula xml:id="formula_8">Theorem 4: A SysArchsZ span A Ξ L Φ -R</formula><p>where L is discrete (no edges) and both Ξ and Φ do not map any node of L to a source node of an edge in A respectively R always has a pushout in SysArchsZ.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Unproblematic Single-Edge LHS</head><p>If a single-edge LHS is mapped via a non-zigzag homomorphism containing only identity specification homomorphism for the components, a pushout obviously always exists, as indicated in Figure <ref type="figure" target="#fig_0">12</ref>. If we restrict both rule and matching to non-zigzag homomorphisms, but allow the target of the LHS edge to be mapped with arbitrary specification homomorphisms on both sides, we get an architecture pushout where that target is assigned the corresponding specification pushout, as sketched in Figure <ref type="figure" target="#fig_5">13</ref>. These two cases can actually be combined, as depicted in Figure <ref type="figure" target="#fig_6">14</ref>:</p><formula xml:id="formula_9">Theorem 5: A SysArchsZ span A Ξ L Φ -R where • the shape of L is • → •, • one of Ξ and Φ is a non-zigzag homomorphism,</formula><p>• the source node of the edge in L is associated with identity specification homomorphisms in both Ξ and Φ, always has a pushout in SysArchsZ.</p><p>(The identity specification homomorphisms can be replaced with isomorphisms, which however would make the drawings more confusing.)</p><p>For the above scenario in Figure <ref type="figure" target="#fig_6">14</ref> </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>C. Ambiguous Matchings</head><p>Now, let us say, an edge is relaxed in both the Application and the Right hand side graph (relax-relax) by adding a couple of components and connectors and we want to contract them to a single zigzag path. If we preserve the connector-component alternating pattern and consider the mapping between architectures as a System Architecture Zpath Homomorphism then there are only two possibilities to contract them to a single zigzag path with the minimal components and connectors such that the above diagram commutes. These two possibilities are as follows:</p><p>1) Disconnect the target of the Application architecture and the source of the Right hand-side architecture and glue them to a single zigzag path (Res-2). 2) Disconnect the source of the Application architecture and the target of the Right hand-side architecture and glue them together (Res-1). So, in this scenario, two design choices are available and the result architecture varies depending on the design decision (choice) one makes. Whether this transformation is possible or not depends on the relationship between the connectors associated to establish a connection (in the result architecture) between the application and the right hand-side architecture. A connection is established in the result architecture by breaking two connections, one each for the application and the right hand-side architecture. In the above example, for Res-1 the connection SE A → S A in the application architecture and ST → E R in the right hand side architecture got disconnected to establish a connection SE A toE R in the result architecture. This transformation is obvious if a specification homomorphism SE A → ST exists. In the other case, i.e., Res-2, the obvious transformation depends on the existence of the specification homomorphism SE → ST. If neither of the homomorphisms exists, then we have to introduce new components and connectors to let the transformation take place and one of this scenario is pictured by Res-3 of the figure <ref type="figure" target="#fig_7">15</ref>.</p><p>Theorem 6: For "both-relax" case spans, the SysArchsZ category does not have any pushouts.</p><p>We have two potential pushout candidates with minimal components and connectors, but neither of them is a pushout object. There are system architecture homomorphisms that exist between them but they are not unique up to isomorphism. In reality these two architectures could be completely different. Though we do not have a pushout, if we select/consider one of our design decisions, then the construction of the result architecture would be systematic and it could be one of the pushout candidates.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>D. User-Guided Rule Application</head><p>As far as pushouts can be constructed for single edges as discussed above, these can be amalgamated for rules with more complex left-hand sides due to Theorem Theorem 3.</p><p>For a defined set of production rules (e.g., security introduction, reliability introduction) and given an application architecture, if we apply our transformation technique, in all cases except one (Sect. VI-C), the result architecture we obtain after the transformation is a pushout object. If an aspect introduction matches an LHS-edge to a zigzag path with new components in the right-hand side architecture, and the matching of the edge into the application architecture is also a zigzag path, then the category SysArchsZ does not have a pushout for the span consisting of that rule with that matching. In this case, the transformation is semi-automatic. The designer will have to make design decisions, which may result in different desirable and undesirable properties becoming valid for the transformation result.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VII. CONFORMANCE CHECK</head><p>One of the great advantages of our research work is that it makes the analysis of the system architecture properties feasible.</p><p>Conformance of the result system architecture with the application system architecture is not straight-forward.  − −−−−−− → Result, does not necessarily imply the existence of a specification homomorphism between the colimits of these diagrams. Proving properties of the result system architecture to check its conformance with the application system architecture is not exhaustive either. Depending on different scenarios, how aspect introduction modifies an edge, in some cases we can systematically (even automatically) check the conformance of the new result system architecture to the old application system architecture without proving any proof obligations. Propagation of RHS properties into the result architecture, also conforms to the same scenario.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VIII. RELATED WORK</head><p>The paradigm of aspect-oriented software development (AOSD) first appeared at the University of Twente in the Netherlands at the code level. However, work in aspects is no longer limited to the implementation phase of the software development. Over the last decade, the AOSD community has tried to transfer this idea into earlier phases of the software development life cycle; namely in domain analysis, requirement analysis, architecture design, and modeling.</p><p>The modeling community is doing a large amount of work to weave aspects in models, specifically, UML models <ref type="bibr" target="#b4">[5]</ref>, <ref type="bibr" target="#b13">[14]</ref>- <ref type="bibr" target="#b16">[17]</ref>, <ref type="bibr" target="#b21">[22]</ref>- <ref type="bibr" target="#b24">[25]</ref>, <ref type="bibr" target="#b26">[27]</ref>. Since model weaving is a special case of transformation; some interesting works in weaving aspects in models are explained in the following sections along with their similarities and dissimilarities with our work.</p><p>Whittle and Jayaraman <ref type="bibr" target="#b26">[27]</ref> developed an aspect-oriented modeling tool MATA (Modeling Aspects Using a Transformation Approach) that uses an existing graph transformation technique over the concrete syntax of the UML modeling language to weave aspects. In order to write a graph rule, rather than using general LHS and RHS, they defined three stereotypes, i.e., create, delete, and context (unchanged), (similar to the approach applied in VIATRA developed by Csertán et al. <ref type="bibr" target="#b5">[6]</ref>) which allowed them to write a rule on a single model instead of repeating unchanged elements in both the LHS and the RHS.</p><p>Morin et al. <ref type="bibr" target="#b23">[24]</ref> worked on a generic AOM approach called GeKo (generic composition with Kermeta) to weave aspects into any model with a well-defined metamodel. Here, two models, the base and the advice are weaved with the help of a third model and two morphisms. The third mode is called the pointcut, and the two morphisms are defined from the pointcut to the base and the advice respectively. The morphisms prescribe the deletion, preservation/edition, and addition. This weaving process is similar to defining a rule in the Double-pushout graph transformation approach explained in <ref type="bibr" target="#b3">[4]</ref>.</p><p>The work we are doing is to introduce aspects at the earlier phase of the software development life-cycle, i.e., in the architecture level, by performing a graph transformation. Although in terms of goals, we have some similarity with the work of the AOM community, our approach is completely different from their approaches. The way <ref type="bibr" target="#b19">[20]</ref>, <ref type="bibr" target="#b23">[24]</ref> explained aspects contradicts their traditional definition. A couple of vital points that make our method divergent from AOM weaving are the following:</p><p>• Weaving is not a general transformation; it is a special type of transformation. It is usually a non-automatic laborious operation where both base and aspect models get composed to get a weaved model. In contrast, a transformation is automatic where predefined rules are applied to a bigger application system. • Most of the above AOM approaches claim that they can detect conflicts (unavailability to weave an aspect with a woven base) and resolve them by sequencing aspects or changing the rules. But the way they define the conflict does not work for system architecture. After introducing an aspect to an application architecture, further aspect introduction to the resultant architecture by general weaving/transformation technique might be unavailable to some of the re-defined rules though neither the rules nor the resultant architecture is wrong. One of the potential solutions to this problem is to introduce a new transformation technique by keeping the nature of aspect introductions in mind. Our Zpath graph transformation technique is capable of addressing this issue. Besides that, it allows us to systematically verify the conformance (property preservation) of the old system architecture to the new.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IX. FUTURE WORK</head><p>Besides identifying the "Zigzag-path homomorphisms" and elaborating the "Zigzag transformation", we have provided some meta-theorems that make it (sometimes) unnecessary to re-prove properties for transformation results, or make it easier to obtain result properties from component and aspect properties. From our example, we have experienced that proving the well-definedness and validating the properties of system architecture is a tedious redundant job. So, we are currently developing some tool support that will make our methodology mechanical and make our evaluation and validation process feasible. Since our methodology is independent of the underlying logic, one of the potential future steps would be application of the theory in industrial settings by applying widely used architecture languages, e.g., AADL, EAST-ADL.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>X. CONCLUSION</head><p>Working with aspect introduction at the architecture level has many benefits including for documentation, product risk management, understandability, reusability and maintainability. The nature of aspects makes it impossible to apply any of the conventional graph transformation approaches, since those work with exact matchings. Our "Zigzag matching" and the "Zigzag transformation" methodology streamline the process of software system evolution by making aspect introduction into system architectures systematic. Besides, in terms of property preservation, it makes the conformance check of the new system architecture along with the detection and resolution of conflicts and undesirable emergent behaviors semi-automatic.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 .Fig. 2 .</head><label>12</label><figDesc>Fig. 1. Unsecured communication ponent Sender sends a message to the component transmitter (Trans), and the transmitter transmits it to the component Receiver. In order to synchronize/communicate, Sender and Trans share the sub-component SendTrans. The connection via this sub-component along with the two arrows ST2S, ST2T identifies the commonalities between Sender and Trans, and allows them to communicate. Similarly, the components Trans and Receiver synchronize by sharing the connector TR2T ← −− − TransRec TR2R − −− →. Now, consider the architecture in Figure 2. Here the component Sender sends an enciphered message to the component transmitter (Trans), and the transmitter transmits it to the component Receiver, but the Receiver deciphers the message before its final acceptance.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 5 .</head><label>5</label><figDesc>Fig. 5. Matching single edge to undirected path</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>ΦFig. 7 .</head><label>7</label><figDesc>Fig. 7. Rule: Security Introduction</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 11 .</head><label>11</label><figDesc>Fig. 11. Discrete-LHS Fragment of Reliab. Intro.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Fig. 12 .</head><label>12</label><figDesc>Fig. 12. Component addition / identity matching</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head>Fig. 13 .</head><label>13</label><figDesc>Fig. 13. Component expansion both ways</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head>Fig. 14 .</head><label>14</label><figDesc>Fig. 14. Component addition / component expansion</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_7"><head>Fig. 15 .</head><label>15</label><figDesc>Fig. 15. Component addition both ways</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_8"><head></head><label></label><figDesc>Figure 16 illustrates this statement: A system architecture Zpath homomorphism between two system architectures, e.g., system arch. zigzag hom. system arch. zigzag hom. s.a.z.hom. s.a.z.hom. colimit colimit colimit s . a r c h . h o m . s . a r c h . h o m . specification hom. specification hom.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_9"><head>Fig. 16 .</head><label>16</label><figDesc>Fig. 16. System Architecture and System Specification</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">A directed path is a sequence of vertices connected by directed edges where all the edges are traversed along their direction.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Extension morphisms for CommUnity</title>
		<author>
			<persName><forename type="first">N</forename><surname>Aguirre</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Maibaum</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Alencar</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Algebra, Meaning, and Computation: Essays dedicated to Joseph A. Goguen on the Occasion of His 65th Birthday</title>
		<title level="s">LNCS</title>
		<editor>
			<persName><forename type="first">K</forename><surname>Futatsugi</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J.-P</forename><surname>Jouannaud</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Meseguer</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin, Heidelberg; Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="volume">4060</biblScope>
			<biblScope unit="page" from="173" to="193" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Category theory for computing science</title>
		<author>
			<persName><forename type="first">M</forename><surname>Barr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Wells</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1990">1990</date>
			<publisher>Prentice Hall</publisher>
			<biblScope unit="volume">49</biblScope>
			<pubPlace>New York</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">AOP considered harmful</title>
		<author>
			<persName><forename type="first">C</forename><surname>Constantinides</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Skotiniotis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Stoerzer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">1st European Interactive Workshop on Aspect Systems (EIWAS)</title>
				<imprint>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Algebraic approaches to graph transformation -Part I: Basic concepts and double pushout approach</title>
		<author>
			<persName><forename type="first">A</forename><surname>Corradini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">U</forename><surname>Montanari</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Rossi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Ehrig</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Heckel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Löwe</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Handbook of Graph Grammars</title>
				<imprint>
			<date type="published" when="1997">1997</date>
			<biblScope unit="page" from="163" to="246" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">The Motorola WEAVR: Model weaving in a large industrial context</title>
		<author>
			<persName><forename type="first">T</forename><surname>Cottenier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Van Den</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Berg</surname></persName>
		</author>
		<author>
			<persName><surname>Elrad</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Aspect-Oriented Software Development (AOSD)</title>
				<meeting><address><addrLine>Vancouver, Canada</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">32</biblScope>
			<biblScope unit="page">44</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">VIATRA -visual automated transformations for formal verification and validation of UML models</title>
		<author>
			<persName><forename type="first">G</forename><surname>Csertán</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Huszerl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Majzik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Pap</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pataricza</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Varró</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings. ASE 2002. 17th IEEE International Conference on</title>
				<meeting>ASE 2002. 17th IEEE International Conference on</meeting>
		<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2002">2002. 2002</date>
			<biblScope unit="page" from="267" to="270" />
		</imprint>
	</monogr>
	<note>Automated Software Engineering</note>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Analyzing the role of aspects in software design</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Díaz Pace</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">R</forename><surname>Campo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Communications of the ACM</title>
		<imprint>
			<biblScope unit="volume">44</biblScope>
			<biblScope unit="issue">10</biblScope>
			<biblScope unit="page" from="66" to="73" />
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Letters to the editor: go to statement considered harmful</title>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">W</forename><surname>Dijkstra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Communications of the ACM</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="147" to="148" />
			<date type="published" when="1968">1968</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Discussing aspects of AOP</title>
		<author>
			<persName><forename type="first">T</forename><surname>Elrad</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Aksit</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Kiczales</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">J</forename><surname>Lieberherr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Ossher</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Communications of the ACM</title>
		<imprint>
			<biblScope unit="volume">44</biblScope>
			<biblScope unit="issue">10</biblScope>
			<biblScope unit="page" from="33" to="38" />
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Towards object calculi</title>
		<author>
			<persName><forename type="first">J</forename><surname>Fiadeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Maibaum</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Information Systems-Correctness and Reusability, Workshop IS-CORE</title>
				<imprint>
			<date type="published" when="1990">1990</date>
			<biblScope unit="volume">91</biblScope>
			<biblScope unit="page" from="129" to="178" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Temporal theories as modularisation units for concurrent system specification</title>
		<author>
			<persName><forename type="first">J</forename><surname>Fiadeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Maibaum</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Formal aspects of Computing</title>
		<imprint>
			<biblScope unit="volume">4</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="239" to="272" />
			<date type="published" when="1992">1992</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">A mathematical toolbox for the software architect</title>
		<author>
			<persName><forename type="first">J</forename><surname>Fiadeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Maibaum</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 8th International Workshop on</title>
				<meeting>the 8th International Workshop on</meeting>
		<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="1996">1996. 1996</date>
			<biblScope unit="page" from="46" to="55" />
		</imprint>
	</monogr>
	<note>Software Specification and Design</note>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Interconnecting formalisms: Supporting modularity, reuse and incrementality</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">L</forename><surname>Fiadeiro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Maibaum</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM SIGSOFT Software Engineering Notes</title>
		<imprint>
			<biblScope unit="volume">20</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="72" to="80" />
			<date type="published" when="1995">1995</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">A generic approach for automatic model composition</title>
		<author>
			<persName><forename type="first">F</forename><surname>Fleurey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Baudry</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>France</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ghosh</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="2007">2007</date>
			<biblScope unit="page" from="7" to="15" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Providing support for model composition in metamodels</title>
		<author>
			<persName><forename type="first">R</forename><surname>France</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Fleurey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Reddy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Baudry</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ghosh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Enterprise Distributed Object Computing Conference</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2007">2007. 2007</date>
			<biblScope unit="page" from="253" to="253" />
		</imprint>
	</monogr>
	<note>11th IEEE International</note>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Aspect-oriented software development with use cases</title>
		<author>
			<persName><forename type="first">I</forename><surname>Jacobson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P.-W</forename><surname>Ng</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Addison-Wesley object technology series</title>
				<imprint>
			<publisher>Addison-Wesley Professional</publisher>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Model composition in product lines and feature interaction detection using critical pair analysis</title>
		<author>
			<persName><forename type="first">P</forename><surname>Jayaraman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Whittle</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">M</forename><surname>Elkhodary</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</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="2007">2007</date>
			<biblScope unit="page" from="151" to="165" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<title level="m" type="main">Aspect-oriented programming</title>
		<author>
			<persName><forename type="first">G</forename><surname>Kiczales</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Lamping</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Mendhekar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Maeda</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Lopes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J.-M</forename><surname>Loingtier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Irwin</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1997">1997</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Aspect-oriented programming and modular reasoning</title>
		<author>
			<persName><forename type="first">G</forename><surname>Kiczales</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Mezini</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 27th international conference on Software engineering</title>
				<meeting>the 27th international conference on Software engineering</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="49" to="58" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Aspect-oriented multi-view modeling</title>
		<author>
			<persName><forename type="first">J</forename><surname>Kienzle</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">Al</forename><surname>Abed</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Klein</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 8th ACM international conference on Aspect-oriented software development</title>
				<meeting>the 8th ACM international conference on Aspect-oriented software development</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="87" to="98" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<title level="m" type="main">Aspect-oriented programming</title>
		<author>
			<persName><forename type="first">J</forename><surname>Laukkanen</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Weaving aspect configurations for managing system variability</title>
		<author>
			<persName><forename type="first">B</forename><surname>Morin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Barais</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J.-M</forename><surname>Jézéquel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">2nd International Workshop on Variability Modelling of Software-intensive Systems</title>
				<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Towards a generic aspect-oriented modeling framework</title>
		<author>
			<persName><forename type="first">B</forename><surname>Morin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Barais</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J.-M</forename><surname>Jézéquel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Ramos</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Models and Aspects workshop</title>
				<imprint>
			<date type="published" when="2007">2007. 2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">A generic weaver for supporting product lines</title>
		<author>
			<persName><forename type="first">B</forename><surname>Morin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Klein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Barais</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J.-M</forename><surname>Jézéquel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 13th international workshop on Early Aspects</title>
				<meeting>the 13th international workshop on Early Aspects</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="11" to="18" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<monogr>
		<title level="m" type="main">Aspect-oriented analysis and design: The Theme approach</title>
		<author>
			<persName><forename type="first">C</forename><surname>Siobhan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Elisa</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<monogr>
		<title level="m" type="main">Software Engineering</title>
		<author>
			<persName><forename type="first">I</forename><surname>Sommerville</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">2011</date>
			<publisher>Pearson</publisher>
		</imprint>
		<respStmt>
			<orgName>International Computer Science Series</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">MATA: A tool for aspect-oriented modeling based on graph transformation</title>
		<author>
			<persName><forename type="first">J</forename><surname>Whittle</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Jayaraman</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Models in Software Engineering: Workshops and Symposia at MoDELS 2007, Reports and Revised Selected Papers</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">5002</biblScope>
			<biblScope unit="page" from="16" to="27" />
		</imprint>
	</monogr>
</biblStruct>

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