Extreme Programming (XP) is a deliberate and disciplined approach to software development. Extreme Programming is a set of values, principles and practices for rapidly developing high-quality software that provides the highest value for the customer in the fastest way possible. It is based on the four essential values: simplicity, communication, feedback and courage.
XP is successful because it stresses customer satisfaction. During the development process, the customer takes an active part in driving the project. With our help the customer writes User Stories (a simple description of the desired functionality), than the developers estimate time for implementing it. After that the customer selects a group of User Stories for the next Iteration.
XP programmers communicate with the customers and fellow programmers. They keep the design simple and clean. They get feedback by testing the software starting on day one. They deliver the system to the customers as early as possible and implement changes as suggested. With this foundation XP programmers are able to courageously respond to changing requirements and technology.
Functionality is delivered in Iterations. Depending on the scope of the project developments can last from 1 day to 4 weeks.
At the beginning of each iteration, the team gets together with the customer for a planning meeting. In that meeting, they go over the features the customer wants done in that iteration, breaking each feature down into individual engineering tasks. Individual developers then sign up for specific tasks, and estimate those tasks.
During the rest of the iteration, the team implements the features they signed up for, pair programming on all production code. All code is written test-first -- that is, the developers don't write any code until they have a failing test case. The developers write unit tests to test individual classes and subsystems. The customer provides functional or acceptance tests to validate the features that the programmers are developing.
Testing is of key importance in Extreme Programming. An Acceptance Test that the customer has specified is implemented in code, and the developer develops the software until this test is passed successfully. Later this test is run several times a day, to confirm that the system runs as the customer specified.
At the end of the iteration, the programmers deliver a working system to the customer. The system may not be complete, but all functionality that is implemented works completely, without bugs. Thus, the Iteration is accepted by the customer after the functionality (from User Stories) passes one or more Acceptance Tests.
Software is delivered in Releases, composed of one or more Iterations that together deliver value to the customer.
Some of the good things about XP are:
- The customer gets control over priorities, by choosing User Stories for each Iteration.
- Continuous testing goes throughout the entire process, and a fixed bug will never be able to go undetected; again.
- The developers concentrate on fulfilling the demands of the Acceptance tests, and as soon as a test passes, the developers move on to the next task.
- Software development can be hard to administrate; by using tests one makes sure that only what the customer wants implemented gets implemented.