blob: 2e6bedd5622f31430577f481e11073672527a153 [file] [log] [blame]
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop'
$pageTitle = "FASE 2014 - Submission 146";
$pageKeywords = "EMF, Refactor, model refactoring, refactoring";
$pageAuthor = "Thorsten Arendt";
$html = <<<EOHTML
<div id="maincontent">
<div id="midcolumn">
<h1>$pageTitle</h1>
This area is dedicated to the research paper
<b><i>A Lightweight Approach to Synchronize Model and Code Refactorings</i></b>
submitted to the <b>17th International Conference on Fundamental Approaches to Software Engineering
<a href="http://www.etaps.org/index.php/2014/fase" target="_blank">(FASE 2014)</a></b>.
It contains various material concerning the installation and evaluation of
the approach respectively its prototype implementation.
<br/><br/>
<p>
<h2>Installation Guide</h2>
<ol class="midlist">
<li>Please download the <b><i>Juno Eclipse Modeling Tools</i></b> from <a href="http://www.eclipse.org/downloads/packages/release/juno/sr2" target="_blank">
http://www.eclipse.org/downloads/packages/release/juno/sr2</a></li>. Unzip and start Eclipse and update the system (<i>Help > Check for Updates</i>).</li>
<li>Restart Eclipse and install the EMF model transformation language <b><i>Henshin</i></b> (<i>Help > Install New Software... >
Work with: <a href="http://download.eclipse.org/modeling/emft/henshin/updates/release" target="_blank">http://download.eclipse.org/modeling/emft/henshin/updates/release</a> > next > ...</i>).</li>
<li>Restart Eclipse and install the prototype implementation (branch of <b><i>EMF Refactor</i></b>):
<i>Help > Install New Software... > Work with:
<a href="http://download.eclipse.org/emf-refactor/updatesite-fase2014" target="_blank">
http://download.eclipse.org/emf-refactor/updatesite-fase2014</a> > next > ...</i>.</li>
<li>Restart Eclipse.</li>
</ol>
<p>
<h2>Projects</h2>
<ul class="midlist">
<li><a href="downloads/fase2014_projects.zip" target="_blank">fase2014_projects</a></li>
</ul>
For evaluation purposes please download <b>fase2014_projects.zip</b> from above and import
the example projects <b>pdfsam_code</b>, <b>pdfsam_model</b>, and <b>VehicleRentalCompany</b>
into your workspace (<i>File > Import... > General > Existing Projects into Workspace > Next
> Select archive file > Browse (to the zip file) > Select all > Finish</i>).
<br/><br/>
<h2>Scenarios</h2>
For the evaluation of the approach (respectively the implemented prototype) the following scenarios
are performed on the project above:
<br/><br/>
<h3>VehicleRentalCompany</h3>
<b><i>Model -> Code</i></b>
<ol class="midlist">
<li>Refactoring <i>Hide Attribute</i> on <i>Customer::customerCard</i>.</li>
<li>Refactoring <i>Rename Class</i> on <i>Customer</i> (new name: <i>Kunde</i>).</li>
<li>Refactoring <i>Rename Attribute</i> on <i>Customer::customerCard</i> (new name: <i>kundenkarte</i>).</li>
<li>Refactoring <i>Rename Operation</i> on <i>VehicleRental::rentTruck</i> (new name: <i>rentLKW</i>).</li>
<li>Refactoring <i>Pull Up Attribute</i> on <i>Auto::manufacturer</i>.</li>
<li>Refactoring <i>Push Down Attribute</i> on <i>Vehicle::manufacturer</i>.</li>
<li>Refactoring <i>Introduce Parameter Object</i> on <i>VehicleRental::rentCar</i>.</li>
</ol>
<b><i>Code -> Model</i></b>
<ol class="midlist">
<li>Refactoring <i>Hide Field</i> on <i>Customer::customerCard</i>.</li>
<li>Refactoring <i>Rename Class</i> on <i>Kunde</i> (new name: <i>Customer</i>).</li>
<li>Refactoring <i>Rename Field</i> on <i>Customer::kundenkarte</i> (new name: <i>customerCard</i>).</li>
<li>Refactoring <i>Rename Method</i> on <i>VehicleRental::rentCar</i> (new name: <i>renCar</i>).</li>
<li>Refactoring <i>Pull Up Field</i> on <i>Truck::manufacturer</i>.</li>
<li>Refactoring <i>Push Down Field</i> on <i>Vehicle::manufacturer</i>.</li>
<li>Refactoring <i>Introduce Parameter Object</i> on <i>VehicleRental::rentCar</i>.</li>
</ol>
<h3>PDFsam</h3>
<b><i>Model -> Code</i></b>
<ol class="midlist">
<li>Refactoring <i>Hide Attribute</i> on <i>o.p.g.business.listener.mediators.ApplicationExitMediator::EXIT_COMMAND</i>.</li>
<li>Refactoring <i>Rename Class</i> on <i>o.p.g.guiclient.business.PagesWorker</i> (new name: <i>PageWorker</i>).</li>
<li>Refactoring <i>Rename Attribute</i> on <i>o.p.g.guiclient.business.PagesWorker::REMOVE</i> (new name: <i>DELETE</i>).</li>
<li>Refactoring <i>Rename Operation</i> on <i>o.p.g.guiclient.business.PageWorker::execute(String...)</i> (new name: <i>executes</i>).</li>
<li>Refactoring <i>Pull Up Attribute</i> on <i>o.p.g.gui.panels.JSettingsPanel::PLUGIN_AUTHOR</i>.</li>
<li>Refactoring <i>Push Down Attribute</i> on <i>o.p.g.gui.panels.AbstractPlugablePanel::PLUGIN_AUTHOR</i>.</li>
<li>Refactoring <i>Introduce Parameter Object</i> on <i>o.p.g.commons.panels.JPdfSelectionPanel</i>.</li>
</ol>
<b><i>Code -> Model</i></b>
<ol class="midlist">
<li>Refactoring <i>Hide Field</i> on <i>o.p.g.business.listener.mediators.ApplicationExitMediator::SAVE_AND_EXIT_COMMAND</i>.</li>
<li>Refactoring <i>Rename Class</i> on <i>o.p.g.guiclient.business.PageWorker</i> (new name: <i>PagesWorker</i>).</li>
<li>Refactoring <i>Rename Field</i> on <i>o.p.g.guiclient.business.PagesWorker::DELETE</i> (new name: <i>REMOVE</i>).</li>
<li>Refactoring <i>Rename Method</i> on <i>o.p.g.guiclient.business.PageWorker::execute(String...)</i> (new name: <i>executes</i>).</li>
<li>Refactoring <i>Pull Up Field</i> on <i>o.p.g.gui.panels.JSettingsPanel::PLUGIN_AUTHOR</i>.</li>
<li>Refactoring <i>Push Down Field</i> on <i>o.p.g.gui.panels.AbstractPlugablePanel::PLUGIN_AUTHOR</i>.</li>
<li>Refactoring <i>Introduce Parameter Object</i> on <i>o.p.g.commons.panels.JPdfSelectionPanel</i>.</li>
</ol>
<br/><br/>
<h2>Results</h2>
For evaluating hypothesis H1 ('If both approaches perform a synchronized refactoring,
the results are equal.'), we used all the positive test cases (both refactorings are
applicable) for the refactoring pair <i>RenameAttribute;RenameField</i> for evaluating
whether both approaches lead to the same results. After we performed this refactoring
for each direction and each approach, we compared the resulting artifacts using the
text comparison facility in Eclipse (for Java code) and the model comparison functionality
provided by EMF Compare. The corresponding code and model comparisons showing no differences
can be found here:
<ul class="midlist">
<li><a href="downloads/screenshots.zip" target="_blank">screenshots</a>.</li>
</ul>
For evaluating hypothesis H2 ('The dynamic mapping of model and code is fast enough.'),
we measured the time needed for dynamically mapping the corresponding elements.
The measurements are performed on a Mac Book Air MId 2011 machine (4 GB RAM; Intel i5-2557M
dual core 2.7 Ghz). The following tables show the corresponding results in microseconds.
<h3>VehicleRentalCompany</h3>
<table border="1">
<tr>
<th>Refactoring</th>
<th>Model -> Code (lazy)</th>
<th>Code -> Model (lazy)</th>
<th>Model -> Code (strict)</th>
<th>Code -> Model (strict)</th>
</tr>
<tr>
<td>1</td>
<td>3961</td>
<td>4245</td>
<td>1076</td>
<td>1698</td>
</tr>
<tr>
<td>2</td>
<td>5249</td>
<td>1784</td>
<td>839</td>
<td>529</td>
</tr>
<tr>
<td>3</td>
<td>2658</td>
<td>2084</td>
<td>698</td>
<td>765</td>
</tr>
<tr>
<td>4</td>
<td>2886</td>
<td>2269</td>
<td>1241</td>
<td>1033</td>
</tr>
<tr>
<td>5</td>
<td>2721</td>
<td>3311</td>
<td>673</td>
<td>1570</td>
</tr>
<tr>
<td>6</td>
<td>2570</td>
<td>3443</td>
<td>872</td>
<td>1342</td>
</tr>
<tr>
<td>7</td>
<td>1657</td>
<td>2600</td>
<td>496</td>
<td>1337</td>
</tr>
</table>
<h3>PDFsam</h3>
<table border="1">
<tr>
<th>Refactoring</th>
<th>Model -> Code (lazy)</th>
<th>Code -> Model (lazy)</th>
<th>Model -> Code (strict)</th>
<th>Code -> Model (strict)</th>
</tr>
<tr>
<td>1</td>
<td>24511</td>
<td>35335</td>
<td>535</td>
<td>1638</td>
</tr>
<tr>
<td>2</td>
<td>31805</td>
<td>29244</td>
<td>1311</td>
<td>546</td>
</tr>
<tr>
<td>3</td>
<td>6929</td>
<td>24285</td>
<td>975</td>
<td>694</td>
</tr>
<tr>
<td>4</td>
<td>13943</td>
<td>20509</td>
<td>873</td>
<td>1387</td>
</tr>
<tr>
<td>5</td>
<td>11845</td>
<td>38233</td>
<td>801</td>
<td>1631</td>
</tr>
<tr>
<td>6</td>
<td>8584</td>
<td>33281</td>
<td>781</td>
<td>1548</td>
</tr>
<tr>
<td>7</td>
<td>6391</td>
<td>27818</td>
<td>526</td>
<td>2924</td>
</tr>
</table>
</div>
<div id="rightcolumn">
<div class="sideitem">
<h6>Incubation</h6>
<p>This component is currently in its <a href="http://www.eclipse.org/projects/dev_process/validation-phase.php">Validation (Incubation) Phase</a>.</p>
<div align="center"><a href="/projects/what-is-incubation.php"><img align="center" src="/images/egg-incubation.png" border="0" alt="Incubation" /></a></div>
</div>
</div>
</div>
EOHTML;
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>