blob: 2d95b0708be7fb1514e517f93c3073e26e1bd56f [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.5/uma.ecore"
xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.0" xmlns:epf="http://www.eclipse.org/epf"
epf:version="1.5.0" xmi:id="-b9r9AqTZkhRIh8JdHv5pDQ"
name="new_roadmap,_4qbzQPnTEdyLA5PXdgVJXw" guid="-b9r9AqTZkhRIh8JdHv5pDQ" changeDate="2008-08-18T11:36:57.476-0700"
version="7.2.0">
<mainDescription>&lt;h3> Getting started &lt;/h3>&#xD;
&lt;p> The ultimate goal of continuous integration (CI) is to integrate and test &#xD;
the system on every change to minimize the time between injecting a defect and &#xD;
correcting it. If the team is new to continuous integration, though, it is best &#xD;
to start small and then incrementally add subpractices, as identified in the &#xD;
subsection that follows. For example, start with a simple daily integration &#xD;
build and incrementally add tests and automated inspections (code coverage, &#xD;
and so forth) to the build process, over time. As the team begins to adopt the &#xD;
sub-practices increase the build frequency. The following subpractices provide &#xD;
guidance in adopting CI. &lt;/p>&#xD;
&lt;h4> Developer practices &lt;/h4>&#xD;
&lt;ul>&#xD;
&lt;li>&lt;b> Make changes available frequently.&lt;/b> For CI to be effective, &lt;a class=&quot;elementLink&quot; href=&quot;./../../../core.mgmt.common.extend_supp/guidances/concepts/change_set_430BF233.html&quot; guid=&quot;_1QU9MAIoEdyLh7vsrHZ4YA&quot;>Change Set&lt;/a>s need to be small, complete, cohesive, and &lt;em>available&lt;/em> for &#xD;
integration. Keep change sets small so that they can be completed and tested &#xD;
in a relatively short time span.&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li>&lt;b> Don't break the build. &lt;/b>Test your changes by using a private build &#xD;
before making your changes available. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li>&lt;b>Fix broken builds immediately. &lt;/b>When a problem is identified, fix &#xD;
it as soon as possible, while it is still fresh in your mind. If the problem &#xD;
cannot be quickly resolved, back out (do not complete) the changes. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h4> Integration practices &lt;/h4>&#xD;
&lt;p> A build is more than a compile (compilation). A build consists of compilation, &#xD;
testing, inspection, and deployment. &lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li> &lt;b>Provide feedback &lt;/b>as quickly as possible. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li>&lt;b>Automate the build process&lt;/b> so that it is fast and repeatable and &#xD;
so that issues are identified and conveyed to the appropriate person for resolution &#xD;
as quickly as possible. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h4>&#xD;
Automation&#xD;
&lt;/h4>&#xD;
&lt;ul>&#xD;
&lt;li> Commit your test scripts to the CM repository so they are controlled and &#xD;
available to the rest of the team. Automated testing is highly recommended, &#xD;
both for developer tests and integration tests. Tests need to be repeatable &#xD;
and fast. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li> Commit your build scripts to the CM repository so they are controlled and &#xD;
available to the rest of the team. Automated builds are highly recommended, &#xD;
both for private builds and integration builds. Builds need to be repeatable &#xD;
and fast. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li> Invest in a CI server.The goal of continuous integration is to integrate, &#xD;
build, and test the software in a clean environment any time that there is &#xD;
a change to the implementation. Although a dedicated CI server is not essential, &#xD;
it will greatly reduce the overhead required to integrate continuously and &#xD;
provide the required reporting. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h3> Common pitfalls &lt;/h3>&#xD;
&lt;ul>&#xD;
&lt;li> &lt;b>A build process that doesn't identify problems.&lt;/b> A build is more &#xD;
that a simple compilation (or its dynamic language variations). Sound testing &#xD;
and inspection practices, both developer testing and integration testing, &#xD;
must be adopted also to ensure the right amount of coverage. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li> &lt;b>Integration builds that take too long to complete. &lt;/b>The build process &#xD;
must balance coverage with speed. You don't have to run every system level &#xD;
acceptance test to meet the intent of CI. Staged builds will provide a useful &#xD;
means to organize testing to get the balance coverage and speed. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;ul>&#xD;
&lt;li> &lt;b>Change sets that are too large.&lt;/b> Developers must develop the discipline &#xD;
and skills to organize their work into small, cohesive change sets. This will &#xD;
simplify testing, debugging, and reporting. It will also ensure that changes &#xD;
are made available frequently enough to meet the intention of continuous integration. &#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&#xD;
&lt;ul>&#xD;
&lt;li> &lt;b>Failure to commit defects to the CM repository. &lt;/b>Ensure adequate &#xD;
testing by developers before making change sets available. &lt;/li>&#xD;
&lt;/ul></mainDescription>
</org.eclipse.epf.uma:ContentDescription>