<?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">Supporting Evolution by Models, Components, and Patterns</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Isabelle</forename><surname>Côté</surname></persName>
							<email>isabelle.cote@uni-duisburg-essen.de</email>
							<affiliation key="aff0">
								<orgName type="institution">Universität Duisburg-Essen</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
							<email>maritta.heisel@uni-duisburg-essen.de</email>
							<affiliation key="aff0">
								<orgName type="institution">Universität Duisburg-Essen</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Supporting Evolution by Models, Components, and Patterns</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">1AD037F8C5AB5EC7B5E53A26E100FB2D</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T23:31+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Evolvability is of crucial importance for long-lived software, because no software can persist over a long time period without being changed. We identify three key techniques that contribute to writing long-lived software in the first place: models, patterns, and components. We then show how to perform evolution of software that has been developed according to a model-, pattern-, and component-based process. In this situation, evolution means to transform the models constructed during development or previous evolutions in a systematic way. This can be achieved by using specific operators or rules, by replacing used patterns by other patterns, and by replacing components.</p><p>2 Models, Patterns, and Components Models, patterns, and components are all relatively recent techniques that have turned out to be beneficial for software development. Models provide suitable abstractions, patterns support the re-use of development knowledge, and components allow one to assemble software from pre-fabricated parts. These three techniques contribute to the maturing of the discipline of software technology by introducing engineering principles that have counterparts in other engineering disciplines.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Models</head><p>The idea of model-based software development is to construct a sequence of models that are of an increasing level of detail and cover different aspects of the software development problem and its solution. The advantage of this procedure is that it supports a separation of concerns. Each model covers a certain aspect of the software to be developed, and ignores others. Hence, to obtain specific information about the software, it suffices to inspect only a subset of the available documentation. Using models contributes to developing long-lived software, because the models constitute a detailed documentation of the software that is well suited to support evolution. Of course, the models and the code must be kept consistent. The process we describe in Sect. 4 guarantees that this is the case, because it first adjusts the models, before the code is changed. Today, the Unified Modeling Language [For06] is commonly used to express the models set up during a model-based development process. For UML, extensive tool support is available. The ADIT process described in Sect. 3 mostly makes use of UML notations.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>As pointed out by Parnas <ref type="bibr" target="#b32">[Par94]</ref>, software ages for two reasons: first, because it is changed. These changes affect the structure of the software, and, at a certain point, further changes become infeasible. The second reason for software aging is not to change the software. Such software becomes outdated soon, because it does not reflect new developments and technologies. We can conclude that software evolution is indispensable for obtaining long-lived software. However, the evolution must be performed in such a way that it does not destroy the structure of the software. In this way, the aging process of the software can be slowed down. An evolution process that does not destroy the structure of the software first of all requires software that indeed possesses some explicit structure that can be preserved. Hence, different artifacts (not only the source code) should be available. In conclusion, to avoid the legacy problems of tomorrow [EGG + 09], we first need appropriate development processes that provide a good basis for future evolutions. Second, we need systematic evolution approaches that can make use of that basis. In this paper, we first point out that the use of models, patterns, and components are suitable to provide the basis that is necessary for an evolution that does not contribute to software aging. Second, we briefly describe a specific process (called ADIT: Analysis, Design, Implementation, Testing) that makes use of these techniques. Third, we sketch how evolution can be performed for software that was developed using ADIT. There, replay of development steps as well as model transformations play a crucial role. The rest of the paper is organized as follows: Section 2 discusses the role of models, patterns, and components for the construction of long-lived software. Section 3 introduces the development process ADIT. How the ADIT artifacts can be used to support evolution is shown in Sect. 4. Related work is discussed in Sect. 5, and we conclude in Sect. 6.</p><p>Patterns are abstractions of software artifacts (or models). They abstract from the applicationspecific parts of the artifact and only retain its essentials. Patterns are used by instantiation, i.e., providing concrete values for the variable parts of the pattern. Patterns exist not only as design patterns <ref type="bibr" target="#b19">[GHJV95]</ref> (used for fine-grained software design), but for every phase of software development, including requirements analysis <ref type="bibr" target="#b24">[Jac01,</ref><ref type="bibr" target="#b16">Fow97]</ref>, architectural design <ref type="bibr" target="#b34">[SG96]</ref>, implementation <ref type="bibr" target="#b8">[Cop92]</ref>, and testing <ref type="bibr" target="#b1">[Bin00]</ref>. Since patterns can be regarded as templates for software development models, model-and pattern-based software development approaches fit very well together. Patterns further enhance the long-livedness of software: first, since the purpose of the different patterns is known, the use of patterns supports program comprehension. Second, patterns enhance the structure of software, e.g., by decoupling different components. Thus, evolution tasks can be performed without tampering too much with the software's structure. Problem Frames <ref type="bibr" target="#b24">[Jac01]</ref> are patterns that can be used in requirements analysis. Since they are less known than the other kinds of patterns just mentioned, we briefly describe them in the following. The ADIT process makes use of problem frames.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.1">Problem Frames</head><p>Problem frames are a means to describe software development problems. They were invented by Jackson <ref type="bibr" target="#b24">[Jac01]</ref>, who describes them as follows: "A problem frame is a kind of pattern. It defines an intuitively identifiable problem class in terms of its context and the characteristics of its domains, interfaces and requirement." Problem frames are described by frame diagrams, which consist of rectangles, a dashed oval, and links between these (see frame diagram in Fig. <ref type="figure" target="#fig_0">1</ref>). All elements of a problem frame diagram act as placeholders which must be instantiated by concrete problems. Doing so, one obtains a problem description that belongs to a specific problem class. Plain rectangles denote problem domains (that already exist in the application environment), a rectangle with a double vertical stripe denotes the machine (i.e., the software) that shall be developed, and requirements are denoted with a dashed oval. The connecting lines between domains represent interfaces that consist of shared phenomena. Shared phenomena may be events, operation calls, messages, and the like. They are observable by at least two domains, but controlled by only one domain, as indicated by an exclamation mark. For example, in Fig. <ref type="figure" target="#fig_0">1</ref> the notation US!E3 means that the phenomena in the set E3 are controlled by the domain User. A dashed line represents a requirements reference. It means that the domain is mentioned in the requirements description. An arrow at the end of such a dashed line indicates that the requirements constrain the problem domain. In Fig. <ref type="figure" target="#fig_0">1</ref>, the Workpieces domain is constrained, because the Editing tool has the role to change it on behalf of user commands for achieving the required Command effects. Each domain in a frame diagram has certain characteristics. In Fig. <ref type="figure" target="#fig_0">1</ref> the X indicates that the corresponding domain is a lexical domain. A lexical domain is used for data representations.A B indicates that a domain is biddable. A biddable domain usually represents people <ref type="bibr" target="#b24">[Jac01]</ref>. Problem frames support developers in analyzing problems to be solved. They show what domains have to be considered, and what knowledge must be described and reasoned about when analyzing the problem in depth. Thus, the problem frame approach is much more than a mere notation. <ref type="foot" target="#foot_0">1</ref> Other problem frames besides simple workpieces frame are required behaviour, commanded behaviour, information display, and transformation. After having analyzed the problem, the task of the developer is to construct a machine based on the problem described via the problem frame that improves the behavior of the environment it is integrated in, according to its respective requirements.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3">Components</head><p>Component-based development <ref type="bibr" target="#b3">[CD01,</ref><ref type="bibr" target="#b35">SGM02]</ref> tries to pick up principles from other engineering disciplines and construct software not from scratch but from pre-fabricated parts. Here, interface descriptions are crucial. These descriptions must suffice to decide if a given component is suitable for the purpose at hand or not. It should not be necessary (and, in some cases, it may even be impossible) to inspect the code of the component. Using components makes it easier to construct long-lived software, because components can be replaced with new ones that e.g. provide enhanced functionality, see <ref type="bibr" target="#b23">[HS04,</ref><ref type="bibr" target="#b28">LHHS07,</ref><ref type="bibr" target="#b6">CHS09]</ref>. Again, it becomes apparent that evolvability and long-livedness are deeply intertwined. Component-based software development fits well with model-and pattern-based development: components can be described by models, and they can be used as instances of architectural patterns.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">The ADIT development process</head><p>In the following, we describe the original development process ADIT that serves as basis for our evolution method in Sect. 4. ADIT is a model-driven, pattern-based development process also making use of components. In this paper we consider the analysis and design phases. To illustrate the different steps within the phases, we briefly describe what the purpose of the different steps is and how they can be realized. We also indicate in bold face the model, pattern, and component techniques that are relevant for the respective step. Should any of the three mentioned techniques not be described in a certain step, then the technique is not used in the respective step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A1 Problem elicitation and description</head><p>To begin with, we need requirements that state our needs. Requirements are expressed in natural language, for example "A guest can book available holiday offers, which then are reserved until payment is completed.", "A staff member can record when a payment is received." In this step, also domain knowledge is stated, which consists of facts and assumptions. An example of a fact is that each vacation home can be used by only one (group of) guests at the same time. An example of an assumption is that each guest either pays the full amount due or not at all (i.e., partial payments are not considered). We now must find an answer to the question: "Where is the problem located?". Therefore, the environment in which the software will operate must be described. A model which can be used to answer the question is a context diagram <ref type="bibr" target="#b24">[Jac01]</ref>. Context diagrams are similar to problem diagrams but it does not take requirements references into account. A context diagram for our vacation rentals example is shown in Fig. <ref type="figure">3</ref>. Thus, the output of this step is: the context diagram, the requirements and the domain knowledge.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A2 Problem decomposition</head><p>We answer the question: "What is the problem?" in this second step. To answer the question, it is necessary to decompose the overall problem described in A1 into small manageable subproblems. For decomposing the problem into subproblems, related sets of requirements are identified first. Second, the overall problem is decomposed by means of decomposition operators. These operators are applied to context diagram. Examples of such operators are Leave out domain (with corresponding interfaces), Refine phenomenon, and Merge several domains into one domain . After applying the decomposition operators we have our set of subproblems with the corresponding operators that were applied to obtain the different subproblems. Furthermore, the subproblems should belong to known classes of software development problems, i.e., they should fit to patterns for such known classes of problems. In our case it should be possible to fit them to problem frames. Fitting a problem to a problem frame is achieved by instantiating the respective frame diagram.</p><p>Instantiated frame diagrams are called problem diagrams. These serve as models for this second analysis step. Thus, the output of this step is a set of problem diagrams being instances of problem frames.</p><p>A3 Abstract software specification In the previous step, we were able to find out what the problem is by means of problem diagrams. However, problem diagrams do not state the order in which the actions, events, or operations occur. Furthermore, we are still talking about requirements. Requirements refer to problem domains, but not to the machine, i.e., the software that should be built. Therefore, it is necessary to transform requirements into specifications (see <ref type="bibr" target="#b26">[JZ95]</ref> for more details). We use UML sequence diagrams as models for our specifications. Sequence diagrams describe the interaction of the machine with its environment. Messages from the environment to the machine correspond to operations that must be implemented. These operations will be specified in detail in Step A5. The output of this step is a set of specifications for each subproblem.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A4 Technical infrastructure</head><p>In this step, the technical infrastructure in which the machine will be embedded is specified. For example, a web application may use the Apache web server. The notation for the model in this step is the same as in A1, namely a context diagram. As it describes the technical means used by the machine for communicating with its environment, we refer to it as technical context diagram. In this step we can make use of components for the first time. Usually, we rely on the APIs of those prefabricated components in order to describe the technical means, e.g., on the API of the Apache web server.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A5 Operations and data specification</head><p>The models set up in this step are class diagrams for the internal data structures and preand postconditions for the operations identified in step A3. These two elements constitute the output of this step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A6 Software life-cycle</head><p>In the final analysis step, the overall behavior of the machine is specified. Here, behavioral descriptions such as life-cycle expressions [CAB + 94] can be used as a model. In our case this means that in particular, the relation between the sequence diagrams associated to the different subproblems is expressed explicitly. We can relate the sequence diagram sequentially, by alternative, or in parallel. With the software life-cycle as output we conclude the analysis phase and move on to the design phase.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>D1 Software architecture</head><p>The first step of the design phase is aimed at giving a coarse-grained structure to the software. This structure can be illustrated by using structural description models, such as UML 2.0 composite structure diagrams. We assign a candidate architecture to each subproblem, making use of architectural patterns for problem frames <ref type="bibr" target="#b5">[CHH06]</ref>. Thus, we obtain a set of sub-architectures. Some components within these sub-architectures are pre-fabricated or pre-existing, e.g. for the web application example we make use of a pre-existing SMTP-Client. The architectural patterns lead us to a layered architecture consisting of an application layer, an interface abstraction layer (IAL) abstracting technical phenomena to application related ones, and a hardware abstraction layer (HAL) representing hardware drivers. The overall architecture must be derived from the subproblem architectures. The crucial point of this step is to decide if two components contained in different subproblem architectures should occur only once in the global architecture, i.e., if they should be merged. To decide this question, we make use of the information expressed in Step A6 and by applying merging rules. An example for such a rule is "Adapters and storage components belonging to the same physical device or data storage are merged." These rules are described in more detail in <ref type="bibr" target="#b5">[CHH06]</ref>. Figure <ref type="figure" target="#fig_1">2</ref> illustrates the global software architecture of our vacation rentals example, i.e. the output of this step. Furthermore, we have a first skeleton of the interfaces connecting the different components in our architecture by taking advantage of the information of the analysis phase <ref type="bibr" target="#b21">[HH09]</ref>. Steps D2-D4 treat the fine-grained design. In these steps, the internal structure of the software is further elaborated. Several patterns can be applied in these steps, such as design patterns, patterns for state machines, etc. Note that we are not treating these steps further in this paper.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Evolution Method</head><p>During the long lifetime of a software it is necessary to modify and update it to meet new or changed requirements and/or environment to accommodate it to the changing environment where it is deployed in. This process is called software evolution. The new requirements that should be met are called evolution requirements. An example for such an evolution requirement is "Guests can write a review, after they have left their vacation home." Modified or additional domain knowledge is referred to as aD. An example for some new domain knowledge is the additional assumption that "Guests write fair reviews". We define a corresponding evolution step for each ADIT step. These steps address the special needs arising in software evolution by providing operators leading from one model to another and an explicit tracing between the different models. Basically, we perform a replay of the original method, adding some support for software evolution.</p><p>In the following we illustrate the steps to be performed for software evolution. As an example, we evolve the vacation rentals application introduced in Sect. 3. EA0 Requirements relation Not all development models will be affected by the evolution task. Therefore, we first have to identify those models that are relevant. For that purpose, we relate the evolution requirements to the original requirements. We identified several relations the original and evolution requirements may share:</p><p>• similar: a functionality similar to the one to be incorporated exists.</p><p>• extending: an existing functionality is refined or extended by the evolution task.</p><p>• new: the functionality is not present yet, and it is not possible to find anything that could be similar or extended. • replacing: the new functionality replaces the existing one.</p><p>As a means of representation, we use a table. This table -together with other tables that are created during the process -serve for tracing purposes. An example of such a representation is shown in Tab. 1. The entry "recordPayment" in the first row refers to the requirement involving the staff member which has been introduced in Sec. 3. The entry "writeReview" in the first column refers to the above mentioned evolution requirement. The table is read as follows: "writeReview" is similar to "recordPayment".</p><p>. . . recordPayment . . . writeReview similar . . . . . .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Table 1: Excerpt of relation between requirements and evolution requirements for vacation rentals</head><p>The requirements sharing a relation with the evolution requirements are collected to form the set of relevant requirements (rel set). This set then constitutes the focus for our further investigation.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>EA1 Adjust problem elicitation and description</head><p>We use the output of A1, i.e., context diagram as input for the first step of the evolution method. We revise this context diagram by incorporating the new/changed requirements and domain knowledge to it. To support the engineers, we defined evolution operators, similar to the original operators, to ease modifying the context diagram. The operators relevant for this step are (for more details refer to <ref type="bibr" target="#b7">[CHW07]</ref>):</p><p>add new domain -A new domain has to be added to the context diagram.</p><p>modify existing domain -A domain contained in the context diagram has to be modified, e.g. by splitting or merging. add new phenomenon -A new phenomenon is added to an interface of the context diagram. modify existing phenomenon -An existing phenomenon has to be modified in the context diagram, e.g. by renaming.</p><p>In some cases, it may also occur that neither domains nor shared phenomena are newly introduced. Then, no changes to the context diagram are necessary at this place, but the new requirements/domain knowledge may require changes in later steps.</p><p>The resulting context diagram now represents the new overall problem situation (cf. Fig. <ref type="figure">3</ref>). The modifications are highlighted through bold-italic font, e.g., a phenomenon writeReview has been added to the interface between the domains guest and vacation rentals (operator add new phenomenon). Furthermore, add new domain and add new phenomenon have been applied to introduce the domain Review with the corresponding phenomenon writingReview. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>EA2 Adjust problem decomposition</head><p>In this step we take the output of A2, i.e., the resulting set of problem diagrams, as well as the operators that were applied to the context diagram for the decomposition as input. Furthermore, we use both the context diagram created in EA1, as well as the rel set of EA0 as additional input. As we modified the context diagram by applying some operators, this has impacts on the problem decomposition, as well. Therefore, it is necessary to investigate the existing subproblems. We again define evolution operators to guide the engineer.</p><p>Examples of evolution operators for this step are: integrate eR in existing problem diagram -New domains and associated shared phenomena may be added to an existing problem diagram. eR cannot be added to existing subproblem -create new one -The eR is assigned to a given subproblem, but the resulting subproblem then gets too complex. Hence, it is necessary to split the subproblem into smaller subproblems. More details on these operators can be found in <ref type="bibr" target="#b7">[CHW07]</ref>. In addition it is necessary to check whether the resulting problem diagrams still fit to problem frames or, for new subproblems, to find an appropriate frame to be instantiated, e.g. via operators such as fit to a problem frame or choose different problem frame. Figure <ref type="figure" target="#fig_2">4</ref> shows the problem diagram for the evolution requirement "writeReview" (operator eR cannot be added to existing subproblem -create new one). As we know that it is similar to "recordPayment" we check whether it is possible to apply the same problem frame. In this case, this is the problem frame simple workpieces (cf. Fig. <ref type="figure" target="#fig_0">1</ref>). It is obvious that our problem diagram is an instance of that problem frame (operator fit to a problem frame). EA3 Adjust abstract software specification The sequence diagrams of A3 serve as input for this step, together with the results of EA2. Whenever an existing sequence diagram has to be investigated, the following cases may occur:</p><p>• Operator integrate eR in existing problem diagram was applied.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Operator name: use existing sequence diagram</head><p>The existing diagram has to be modified in such a way that it can handle the additional behavior by adding messages, domains etc. to the corresponding sequence diagram. The changes reflect the modifications made in EA2. It may also be necessary to add new sequence diagrams, as well. • The parameters of existing messages must be adapted.</p><p>Operator name: modify parameter Existing parameters must be either modified (rename), extended (add) or replaced. Otherwise, the sequence diagram remains unchanged. • Operator eR cannot be added to existing subproblem -create new one was applied.</p><p>Operator name: no operator</p><p>The original ADIT step must be applied.</p><p>EA4 Adjust technical software specification The original technical context diagram is adapted to meet the new or changed situation.</p><p>The procedure is the same as in A4.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>EA5 Adjust operations and data specification</head><p>The actions performed in EA3 trigger the modification. For example, a message on the sequence diagram as been modified. These changes are then also made in the corresponding operations in this step. For newly introduced operations, the original method is applied.</p><p>EA6 Adjust software life-cycle New relations need to be incorporated. Existing relations need to be adapted, accordingly. However, the behavior that has not been altered by the evolution task must be preserved.</p><p>ED1 Adjust software architecture We use the revised subproblems of Step EA2 as input. For our example we were able to apply the same architectural style for "writeReview" as we did for "recordPayment". Therefore, we can apply the same merging rules, as well. Figure <ref type="figure" target="#fig_1">2</ref> illustrates the resulting global architecture. The changes are indicated in italics and bold face.</p><p>The interfaces are adapted according to the changes made in the analysis phase based on operators such as modify interface, add new component, or add new interface. For example, we introduced a new message "writeReview()" in step EA3 (as consequence of operator eR cannot be added to existing subproblem -create new one). By doing a replay of the merging rules, we know, that it is necessary to extend the existing interfaces IHolidayOffer and GCmds (operator modify interface). As writing a review is performed after guests have taken the holiday offer the component Review can be merged with the existing component Holiday Offer (operator modify component) resulting in a modification of the corresponding interface SQLCmds (operator modify interface), as well.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Related Work</head><p>This work takes up ideas from modern software engineering approaches and processes, such as the Rational Unified Process (RUP) <ref type="bibr" target="#b25">[JBR99]</ref>, Model-Driven Architecture (MDA) <ref type="bibr" target="#b30">[MSUW04]</ref>, and Service-Oriented Architecture (SOA) <ref type="bibr" target="#b13">[Erl05]</ref>. All these approaches are model-driven, which means that in principle, an evolution process for them can be defined in a similar way as for the ADIT process. The work of O'Cinnéide and Nixon <ref type="bibr" target="#b31">[ON99]</ref> aims at applying design patterns to existing legacy code in a highly automated way. They target code refactorings. Their approach is based on a semi-formal description of the transformations themselves, needed in order to make the changes in the code happen. They describe precisely the transformation itself and under which pre-and postconditions it can successfully be applied.</p><p>Our approach describes and applies model transformation in a rather informal way. The same is true for the transformation approaches cited above. A history is defined as a sequence of versions. The approach is based on transformations aimed at extracting history properties out of structural relationships. Our approach does not consider histories andhow to analyze them. In contrast, we introduce a method for manipulating an existing software and its corresponding documentation in a systematic way to perform software evolution. ROSE is the name of a tool created by Zeller et al. <ref type="bibr" target="#b38">[ZWDZ05]</ref>, which makes use of data mining techniques to extract recurring patterns and rules that allow to offer advice for new evolution tasks. The tool can propose locations where a change might occur based on the current change, help to avoid incomplete changes, and detect coupling that would not be found by performing program analysis. It does, however, not provide help on what to do once a potential location has been identified. With our method we intend to provide help to systematically modify source code after the corresponding part has been located. Detecting logical coupling to identify dependencies among modules etc. has been the research topic of Gall et al. <ref type="bibr" target="#b18">[GHJ98]</ref>. Those dependencies can be used to estimate the effort needed to carry out maintenance tasks, to name an example. Descriptions in change reports are used to verify the detected couplings. The technique is not designed to change the functionality of a given software. Others investigate software evolution at run-time <ref type="bibr" target="#b33">[Piz02]</ref>. Evolving a software system at run-time puts even more demands on the method used than ordinary software systems. Our approach does not take run-time evolution into account.</p><p>Sillito et al. <ref type="bibr" target="#b36">[SMDV06]</ref> conducted a survey to capture the main questions programmers ask when confronted with an evolution task. These fit well to our method as they can be used to refine the understanding of the software at hand especially in later phases. We agree with Mens and D'Hondt <ref type="bibr" target="#b29">[MD00]</ref> that it is necessary to treat and support evolution throughout all development phases. They extend the UML meta-model by their so-called evolution contracts for that reason. The aim is to automatically detect conflicts that may arise when evolving the same UML model in parallel. This mechanism can very well be integrated into our method to enhance the detection of inconsistencies and conflicts. Our approach, however, goes beyond this detection process. It strives towards an integral method for software evolution guiding the software engineer in actually performing an evolution task throughout all development phases. The field of software evolution cannot be examined in isolation as it has contact points with other disciplines of software engineering. An example is the work of Demeyer et al. <ref type="bibr" target="#b10">[DDN02]</ref>. They provide a pattern system for object-oriented reengineering tasks. Since software evolution usually involves some reengineering and also refactoring <ref type="bibr" target="#b17">[Fow00]</ref> efforts, it is only natural that known and successful techniques are applied in software evolution, as well. Software evolution, however, goes beyond restructuring source code. Its main goal is to change the functionality of a given software. Furthermore, software evolution can profit from the research done in the fields of feature location e.g. <ref type="bibr" target="#b14">[ESW06,</ref><ref type="bibr" target="#b27">KQ05]</ref>, re-documentation, e.g. [CY07, WTM + 95], and agile development processes such as extreme programming <ref type="bibr" target="#b0">[Bec99]</ref>. Finally, we have to mention another paper of ours on pattern-based software evolution for component-based systems <ref type="bibr" target="#b6">[CHS09]</ref>. In this paper, we give architectural evolution patterns that can be used to evolve component architectures.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6">Conclusions</head><p>In this paper, we have pointed out that using models, patterns, and components is a promising approach to develop long-lived software. However, long-lived software needs to undergo evolution. Therefore, we have shown how software that was developed according to a model-/pattern-/component-based process can be evolved in a systematic way. We have applied our method successfully on several software systems amongst them open source software such as Doxygen <ref type="bibr" target="#b20">[Hee09]</ref>.</p><p>In the future, we intend to elaborate on the model transformations that are needed to perform the evolution steps. We will formalize the model transformations and also provide further tool support for the evolution process. Furthermore, we plan on conducting further evolution tasks on other open source projects to validate the method as well as the tool.</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: Simple workpieces problem frame</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Global software architecture of vacation rentals D2/ D3/ D4 Inter-component interaction/ intra-component interaction/ complete component or class behaviorSteps D2-D4 treat the fine-grained design. In these steps, the internal structure of the software is further elaborated. Several patterns can be applied in these steps, such as design patterns, patterns for state machines, etc. Note that we are not treating these steps further in this paper.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: Problem diagram for "writingReview"</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head></head><label></label><figDesc>Czarnecki and Helsen give an overview of more formal model transformation techniques [CH03]. Researchers have used versions and histories to analyze different aspects considering software evolution. Ducasse et al. [DGF04] propose a history meta-model named HISMO.</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">The diagrams used in the problem frame approach can easily be translated to UML class models, using a number of stereotypes. For a UML metamodel of problem frames, see<ref type="bibr" target="#b22">[HHS08]</ref>.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Extreme Programming Explained: Embrace Change</title>
		<author>
			<persName><forename type="first">Kent</forename><surname>Beck</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1999">1999</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Testing Object-Oriented Systems</title>
		<author>
			<persName><forename type="first">Robert</forename><surname>Binder</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2000">2000</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m" type="main">Object-Oriented Development: The Fusion Method</title>
		<author>
			<persName><forename type="first">P</forename><surname>Cab + ; D. Coleman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Arnold</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Bodoff</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Dollin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Gilchrist</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Hayes</surname></persName>
		</author>
		<author>
			<persName><surname>Jeremaes</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1994">1994</date>
			<publisher>Prentice Hall</publisher>
		</imprint>
	</monogr>
	<note>out of print</note>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">UML Components -A Simple Process for Specifying Component-Based Software</title>
		<author>
			<persName><forename type="first">John</forename><surname>Cheesman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">John</forename><surname>Daniels</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Classification of Model Transformation Approaches</title>
		<author>
			<persName><forename type="first">Krzysztof</forename><surname>Czarnecki</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Simon</forename><surname>Helsen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of the 2nd OOPSLA Workshop on Generative Techniques in the Context of MDA</title>
				<meeting>of the 2nd OOPSLA Workshop on Generative Techniques in the Context of MDA</meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Component composition through architectural patterns for problem frames</title>
		<author>
			<persName><forename type="first">C</forename><surname>Choppy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Hatebur</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Heisel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. XIII Asia Pacific Software Engineering Conf</title>
				<meeting>XIII Asia Pacific Software Engineering Conf</meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="27" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">On the Evolution of Component-based Software</title>
		<author>
			<persName><forename type="first">Isabelle</forename><surname>Côté</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jeanine</forename><surname>Souquières</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">4th IFIP TC2 Central and Eastern European Conf. on Software Engineering Techniques CEE-SET 2009</title>
				<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
	<note>to appear</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Pattern-based Exploration of Design Alternatives for the Evolution of Software Architectures</title>
		<author>
			<persName><forename type="first">Isabelle</forename><surname>Côté</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ina</forename><surname>Wentzlaff</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Int. Journal of Cooperative Information Systems</title>
		<imprint>
			<biblScope unit="volume">07</biblScope>
			<date type="published" when="2007-12">December 2007</date>
			<publisher>World Scientific Publishing Company</publisher>
		</imprint>
	</monogr>
	<note>Special Issue of the Best Papers of the ECSA&apos;</note>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<title level="m" type="main">Advanced C++ Programming Styles and Idioms</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">O</forename><surname>Coplien</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1992">1992</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Model Oriented Evolutionary Redocumentation</title>
		<author>
			<persName><forename type="first">Feng</forename><surname>Chen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Hongji</forename><surname>Yang</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">COMPSAC &apos;07: Proc. of the 31st Annual Int. Computer Software and Applications Conference</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2007">2007. 2007</date>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="543" to="548" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">Object-Oriented Reengineering Patterns</title>
		<author>
			<persName><forename type="first">S</forename><surname>Demeyer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ducasse</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Nierstrasz</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2002">2002</date>
			<publisher>Morgan Kaufmann</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Modeling Software Evolution by Treating History as a First Class Entity</title>
		<author>
			<persName><forename type="first">Stéphane</forename><surname>Ducasse</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Tudor</forename><surname>Gîrba</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jean-Marie</forename><surname>Favre</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. on Software Evolution Through Transformation (SETra 2004)</title>
				<meeting>on Software Evolution Through Transformation (SETra 2004)<address><addrLine>Amsterdam</addrLine></address></meeting>
		<imprint>
			<publisher>Elsevier</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="75" to="86" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<author>
			<persName><forename type="first">M</forename><surname>Egg + ; G. Engels</surname></persName>
		</author>
		<author>
			<persName><forename type="first">U</forename><surname>Goedicke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Goltz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Rausch</surname></persName>
		</author>
		<author>
			<persName><surname>Reussner</surname></persName>
		</author>
		<title level="m">Design for Future -Legacy-Probleme von morgen vermeidbar? Informatik-Spektrum</title>
				<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title level="m" type="main">Service-Oriented Architecture (SOA): Concepts, Technology, and Design</title>
		<author>
			<persName><forename type="first">T</forename><surname>Erl</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005">2005</date>
			<publisher>Prentice Hall PTR</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">An approach to feature location in distributed systems</title>
		<author>
			<persName><forename type="first">Dennis</forename><surname>Edwards</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sharon</forename><surname>Simmons</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Norman</forename><surname>Wilde</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Systems and Software</title>
		<imprint>
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<ptr target="http://www.omg.org/docs/ptc/06-04-02.pdf" />
		<title level="m">UML Revision Task Force. OMG Unified Modeling Language: Superstructure</title>
				<imprint>
			<date type="published" when="2006-04">April 2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<title level="m" type="main">Analysis Patterns: Reusable Object Models</title>
		<author>
			<persName><forename type="first">M</forename><surname>Fowler</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1997">1997</date>
			<publisher>Addison Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<title level="m" type="main">Refactoring: Improving the Design of Existing Code</title>
		<author>
			<persName><forename type="first">M</forename><surname>Fowler</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2000">2000</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Detection of Logical Coupling Based on Product Release History</title>
		<author>
			<persName><forename type="first">Harald</forename><surname>Gall</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Karin</forename><surname>Hajek</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mehdi</forename><surname>Jazayeri</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSM &apos;98: Proc. of the Int. Conf. on Software Maintenance, page 190</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="1998">1998</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<title level="m" type="main">Design Patterns -Elements of Reusable Object-Oriented Software</title>
		<author>
			<persName><forename type="first">E</forename><surname>Gamma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Helm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Johnson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Vlissides</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1995">1995</date>
			<publisher>Addison Wesley</publisher>
			<pubPlace>Reading</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<author>
			<persName><forename type="first">D</forename><surname>Van Heesch</surname></persName>
		</author>
		<ptr target="http://www.stack.nl/˜dimitri/doxygen" />
		<title level="m">Doxygen -A Source Code Documentation Generator Tool</title>
				<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Deriving Software Architectures from Problem Descriptions</title>
		<author>
			<persName><forename type="first">D</forename><surname>Hatebur</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Heisel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop Modellgetriebene Softwarearchitektur -Evolution, Integration und Migration (MSEIM), Software Engineering 2009</title>
		<title level="s">LNI P-</title>
		<editor>
			<persName><forename type="first">Jürgen</forename><surname>Münch</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Peter</forename><surname>Liggesmeyer</surname></persName>
		</editor>
		<meeting><address><addrLine>Bonn</addrLine></address></meeting>
		<imprint>
			<publisher>Bonner Köllen Verlag</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="volume">150</biblScope>
			<biblScope unit="page" from="383" to="392" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">A Formal Metamodel for Problem Frames</title>
		<author>
			<persName><forename type="first">Denis</forename><surname>Hatebur</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Holger</forename><surname>Schmidt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of the Int. Conf. on Model Driven Engineering Languages and Systems (MODELS)</title>
				<meeting>of the Int. Conf. on Model Driven Engineering Languages and Systems (MODELS)<address><addrLine>Berlin / Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">5301</biblScope>
			<biblScope unit="page" from="68" to="82" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Adding Features to Component-Based Systems</title>
		<author>
			<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jeanine</forename><surname>Souquières</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Objects, Agents and Features</title>
				<editor>
			<persName><forename type="first">M</forename><forename type="middle">D</forename><surname>Ryan</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J.-J</forename><surname>Ch</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">H.-D</forename><surname>Meyer</surname></persName>
		</editor>
		<editor>
			<persName><surname>Ehrich</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2004">2975. 2004</date>
			<biblScope unit="page" from="137" to="153" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<monogr>
		<title level="m" type="main">Problem Frames. Analyzing and structuring software development problems</title>
		<author>
			<persName><forename type="first">M</forename><surname>Jackson</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<monogr>
		<title level="m" type="main">The Unified Software Development Process</title>
		<author>
			<persName><forename type="first">I</forename><surname>Jacobson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Booch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Rumbaugh</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1999">1999</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">Deriving Specifications from Requirements: an Example</title>
		<author>
			<persName><forename type="first">M</forename><surname>Jackson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Zave</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. 17th Int. Conf. on Software Engineering</title>
				<meeting>17th Int. Conf. on Software Engineering<address><addrLine>Seattle, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="1995">1995</date>
			<biblScope unit="page" from="15" to="24" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">On dynamic feature location</title>
		<author>
			<persName><forename type="first">Rainer</forename><surname>Koschke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jochen</forename><surname>Quante</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ASE &apos;05: Proc. of the 20th IEEE/ACM Int. Conf. on Automated Software Engineering</title>
				<meeting><address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="86" to="95" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Enhancing Dependability of Component-Based Systems</title>
		<author>
			<persName><forename type="first">Arnaud</forename><surname>Lanoix</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Denis</forename><surname>Hatebur</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Maritta</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jeanine</forename><surname>Souquières</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">itors, Reliable Software Technologies -Ada Europe 2007</title>
				<editor>
			<persName><forename type="first">N</forename><surname>Abdennadher</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">F</forename><surname>Kordon</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">4498</biblScope>
			<biblScope unit="page" from="41" to="54" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Automating support for software evolution in UML</title>
		<author>
			<persName><forename type="first">Tom</forename><surname>Mens</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Theo D'</forename><surname>Hondt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Automated Software Engineering Journal</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="39" to="59" />
			<date type="published" when="2000-02">February 2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<monogr>
		<title level="m" type="main">MDA Distilled</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">J</forename><surname>Mellor</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Scott</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Uhl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Weise</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2004">2004</date>
			<publisher>Addison-Wesley Professional</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<analytic>
		<title level="a" type="main">A Methodology for the Automated Introduction of Design Patterns</title>
		<author>
			<persName><forename type="first">M</forename><surname>O'cinnéide</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Nixon</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSM &apos;99: Proc. of the IEEE Int. Conf. on Software Maintenance</title>
				<meeting><address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="1999">1999</date>
			<biblScope unit="page">463</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b32">
	<analytic>
		<title level="a" type="main">Software aging</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">L</forename><surname>Parnas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICSE &apos;94: Proc. of the 16th Int. Conf. on Software Engineering</title>
				<meeting><address><addrLine>Los Alamitos, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Comp. Soc. Press</publisher>
			<date type="published" when="1994">1994</date>
			<biblScope unit="page" from="279" to="287" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b33">
	<analytic>
		<title level="a" type="main">STA -A Conceptual Model for System Evolution</title>
		<author>
			<persName><forename type="first">M</forename><surname>Pizka</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Int. Conf. on Software Maintenance</title>
				<meeting><address><addrLine>Montreal, Canada</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE CS Press</publisher>
			<date type="published" when="2002-10">October 2002</date>
			<biblScope unit="page" from="462" to="469" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b34">
	<analytic>
		<title level="a" type="main">Software Architecture</title>
		<author>
			<persName><forename type="first">M</forename><surname>Shaw</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Garlan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Perspectives on an Emerging Discipline</title>
				<imprint>
			<publisher>Prentice-Hall</publisher>
			<date type="published" when="1996">1996</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b35">
	<monogr>
		<title level="m" type="main">Component Software</title>
		<author>
			<persName><forename type="first">C</forename><surname>Szyperski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Gruntz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Murer</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2002">2002</date>
			<publisher>Pearson Education</publisher>
		</imprint>
	</monogr>
	<note>Second edition</note>
</biblStruct>

<biblStruct xml:id="b36">
	<analytic>
		<title level="a" type="main">Questions programmers ask during software evolution tasks</title>
		<author>
			<persName><forename type="first">J</forename><surname>Sillito</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">C</forename><surname>Murphy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">De</forename><surname>Volder</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">SIGSOFT &apos;06/FSE-14: Proc. of the 14th ACM SIGSOFT Int. Symposium. on Foundation of Software Engineering</title>
				<meeting><address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="23" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b37">
	<analytic>
		<title level="a" type="main">Structural redocumentation: A case study</title>
		<author>
			<persName><forename type="first">;</forename><forename type="middle">K</forename><surname>Wtm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">R</forename><surname>Wong</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">A</forename><surname>Tilley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">D</forename><surname>Muller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">A</forename><surname>Storey</surname></persName>
		</author>
		<author>
			<persName><surname>Corbi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Software</title>
		<imprint>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="page" from="46" to="54" />
			<date type="published" when="1995">1995</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b38">
	<analytic>
		<title level="a" type="main">Mining Version Histories to Guide Software Changes</title>
		<author>
			<persName><forename type="first">T</forename><surname>Zimmermann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Weissgerber</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Diehl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Zeller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Software Engineering</title>
		<imprint>
			<biblScope unit="volume">31</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="429" to="445" />
			<date type="published" when="2005-06">June 2005</date>
		</imprint>
	</monogr>
</biblStruct>

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