<?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.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmi:id="-yaD6WKGdrZ0n0yBSpwPr4g" name="test_driven_development,1.620567348185129E-306" guid="-yaD6WKGdrZ0n0yBSpwPr4g" changeDate="2006-11-22T02:36:48.997+0330" version="1.0.0">
  <mainDescription>&lt;a id=&quot;XE_xp__test_driven_development&quot; name=&quot;XE_xp__test_driven_development&quot;>&lt;/a>&lt;a id=&quot;XE_test_driven_development__practice_of&quot; name=&quot;XE_test_driven_development__practice_of&quot;>&lt;/a>&lt;a id=&quot;XE_engineering_practices__test_driven_development&quot; name=&quot;XE_engineering_practices__test_driven_development&quot;>&lt;/a> &#xD;
&lt;h3>&#xD;
    Description&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
    Test-Driven Development is one of the core programming practices of XP. Many of us have learned over the years the&#xD;
    value of writing automated tests for our code. Many of us have also learned the difficulty of writing tests after code&#xD;
    is already in place. Test-Driven Development takes a different, extreme approach to ensure that we test all code, all&#xD;
    the time.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The practice of Test-Driven Development requires a change in how you program and in how you think. You won't write&#xD;
    tests as an afterthought. You won't be trying to see if the code you have written works. Instead, you will write tests&#xD;
    as part of the everyday, every minute way of building software. Instead of writing detailed design specifications on&#xD;
    paper, write the spec in code. Instead of first striving to perfectly design a system on paper, use tests to guide your&#xD;
    design. Instead of coding for hours at a stretch only to find that the planning went awry, use Test-Driven Development&#xD;
    to pace yourself, always assuring forward progress with the firm foundation of an ever-growing suite of running tests.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The steps:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        Have an idea where you are going.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Write a test that specifies a tiny bit of functionality.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Ensure that the test fails (you haven't built the functionality yet!).&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Write only the code necessary to make the test pass.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Refactor the code, ensuring that it has the clear and simple design for the functionality built to date.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Repeat until you have the desired functionality.&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
    The rules:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        Test everything that can possibly break.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Tests come first.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        All tests run at 100% all the time.&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
    Test-Driven Development is infectious! Developers swear by it. Developers do not seem to abandon it after giving it an&#xD;
    honest trial.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
    Benefits&#xD;
&lt;/h3>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        Testable modules are decoupled from other complex classes, resulting in &lt;b>loosely coupled modules&lt;/b>. Loosely&#xD;
        coupled modules are a sign of good design.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Code is written so that &lt;b>modules are testable in isolation&lt;/b>. Code written without tests in mind is often&#xD;
        highly coupled, a big hint that you have a poor object-oriented design. If you have to write tests first, you'll&#xD;
        devise ways of minimizing dependencies in your system in order to write your tests.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        The &lt;b>tests act as documentation,&lt;/b> providing concrete examples of how to use the module being tested.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        The tests are the first client of your classes; they &lt;b>show how the developer intended the class to be used&lt;/b>.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        The &lt;b>tests act as a safety net&lt;/b>. Notifying the programmer immediately when a side-effect defect is introduced&#xD;
        into the system.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        &lt;b>Development is paced&lt;/b>. You can stop at anytime with the tests describing the progress so far. Each&#xD;
        programming session gives a sense of satisfaction with getting some of the code working.&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h3>&#xD;
    Related Information&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
    For more information, see &lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../xp/guidances/guidelines/test_driven_development_tdd.html&quot; guid=&quot;3.9254165491375454E-306&quot;>Test Driven Development Guidelines&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
