Extreme programming
Extreme Programming (XP) is a method in or approach to software engineering, formulated by Kent Beck, Ward Cunningham, and Ron Jeffries. Kent Beck wrote the first book on the topic, Extreme Programming Explained, published in 1999. It is the most popular of several agile processes.
Fundamental characteristics of the method are:
- Incremental and iterative developments - small improvements after small ones
- continuous, often repeated automated unit test, regression testing. See JUnit.
- pair programming
- user interaction in the programming team (Onsite Customer)
- refactoring
- shared code ownership
- simplicity
- feedback
These characteristics are only derivatives of principles that are known to be good, and are taken into extreme:
- Interaction between developers and customers is good. Therefore, an XP team is supposed to have a customer on site, who specifies and prioritises work for the team, and who can answer questions as soon as they arise.
- If learning is good, take it to extremes: Reduce the length of development and feedback cycles. Test early;
- Simple code is more likely to work. Therefore, extreme programmers only write code to meet actual needs at the present time in a project, and go to some lengths to reduce complexity and duplication in their code.
- If simple code is good, re-write code when it becomes complex;
- Code reviews are good. Therefore XP programmers work in pairs, sharing one screen and keyboard (which also improves communication) so that all code is reviewed as it is written;
- Testing code is good. Therefore, in XP, tests are written before the code is written. The code is considered complete when it passes the tests (but then it needs refactoring to remove complexity). The system is periodically, or immediately tested using all pre-existing automated tests to assure that it works. (See test-driven development)
In general, Extreme Programming is believed to be useful for small teams under 12 persons. Some think it can be useful for larger teams while some consider the Rational Unified Process more appropriate in that case. However, XP has been demonstrated successfully on a team of over a hundred developers. It's not that XP doesn't scale, just that few people have tried to scale it, and XPers refuse to speculate on this facet of the process.
Controversial aspects
Extreme Programming also has its share of controversial aspects:
- Detailed specifications are not written
- A customer representative is attached to the project
- Programmers work in pairs
- test-driven development
Most of the design activity takes place on the fly and incrementally, starting with "the simplest thing that could possibly work" and adding complexity only when it's required by failing tests. Unit-testing is a design discipline.
See also: Crystal Light Methods from Alistair Cockburn
References
- Kent Beck: Extreme programming explained: Embrace change, Addison-Wesley, ISBN 0201616416
- Scott W. Ambler, Ronald E. Jeffries: Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process, Wiley, John & Sons, ISBN 0471202827
- Kent Beck, Martin Fowler: Planning Extreme Programming, Addison-Wesley, ISBN 0201710919
- Laurie Williams, Robert Kessler: Pair Programming Illuminated, Pearson Education, ISBN 0201745763
- Martin Lippert, Henning Wolf, Stefan Roock: eXtreme Programming in Action: Practical Experiences from Real World Projects, Wiley, John & Sons, ISBN 0470847050
- Doug Wallace, Isobel Raggett, Joel Aufgang: Extreme Programming for Web Projects, Pearson Education, ISBN 0201794276
- Jim A. Highsmith, Donald Eastlake: Agile Software Development Ecosystems, Pearson Education, ISBN 0201760436
- Stewart Baird: Teach Yourself Extreme Programming in 24 Hours, Pearson Education, ISBN 0672324415
- David Astels, Granville Miller, Miroslave Novak: A Practical Guide to eXtreme Programming, Prentice Hall Professional Technical Reference, ISBN 0130674826
- Ken Auer, Roy Miller: Extreme Programming Applied: Playing to Win, Pearson Education, ISBN 0201616408
- William C. Wake: Extreme Programming Explored, Pearson Education, ISBN 0201733978
- Giancarlo Succi, James Donovan Wells, Michele Marchesi, Laurie Williams: Extreme Programming Perspectives, Pearson Education, ISBN 0201770059
- Giancarlo Succi, Michele Marchesi: Extreme Programming Examined, Pearson Education, ISBN 0201710404
- Craig Larman: Agile and Iterative Development: A Manager's Guide, Addison-Wesley, ISBN 0131111558
- Matthew Stephens, Doug Rosenberg: Extreme Programming Refactored: The Case Against XP, APress L. P., ISBN 1590590961
- Robert K. Wysocki, Rudd McGary: Effective Project Management: Traditional, Adaptive, Extreme, Wiley, John & Sons, ISBN 0471432210
- Ken Schwaber: Agile Project Management with Scrum, Microsoft Press, ISBN 073561993X
- Alistair Cockburn: Agile Software Development, Addison-Wesley, ISBN 0201699699
- Robert Cecil Martin: Agile Software Development, Principles, Patterns, and Practices 1/e, Pearson Education, ISBN 0135974445
- Mary Poppendieck, Tom Poppendieck: Lean Software Development: An Agile Toolkit, Addison-Wesley, ISBN 0321150783
- Ken Schwaber, Mike Beedle: Agile Software Development with SCRUM, Pearson Education, ISBN 0130676349
- Scott W. Ambler, Ronald E. Jeffries: Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process, Wiley, John & Sons, ISBN 0471202827
- Krysztof Czarnecki, Ulrich Eisenecker: Generative Programming: Methods, Tools, and Applications, Pearson Education, ISBN 0201309777
- Lisa Crispin, Tip House: Testing Extreme Programming, Pearson Education, ISBN 0321113551
- Pete McBreen, Kent Beck: Questioning Extreme Programming, Pearson Education, ISBN 0201844575
- Glenn Niemeyer, Jeremy Poteet: Extreme Programming with Ant: Building and Deploying Java Applications with JSP, EJB, XSLT, XDoclet, and JUnit, Sams, ISBN 0672325624
- Richard Hightower, Nicholas Lesiecki: Java Tools for Extreme Programming: Mastering Open Source Tools, including Ant, JUnit, and Cactus, Wiley, John & Sons, ISBN 047120708X
- Eric Burke, Brian M. Coyner: Java Extreme Programming Cookbook, O'Reilly & Associates, ISBN 0596003870
- Chet Hendrickson: Extreme Programming Tools for Microsoft .Net, Microsoft Press, ISBN 0735619840
- Ronald E. Jeffries: Extreme Programming Adventures in C#, Microsoft Press, ISBN 0735619492
- Michele Marchesi, Giancarlo Succi: Extreme Programming and Agile Processes in Software Engineering, Springer-Verlag New York, ISBN 3540402152
- Daniel H. Steinberg, Daniel W. Palmer: Extreme Software Engineering A Hands-On Approach, Prentice Hall, ISBN 0130473812
- Frederick P. Brooks: The Mythical Man-Month: Essays on Software Engineering, Addison-Wesley, ISBN 0201835959
External links
- Ward Cunningham's website, Extreme Programming, for more information on this and related topics
- Client-oriented introduction to XP
- Ron Jeffries web-mag XProgramming.com - an Extreme Programming Resource
- ExtremeProgramming.org
- Martin Fowler on XP
- Pair Programming, an Extreme Programming practice
- Manifesto for Agile Software Development
- Tool "XPlanner"
- Citations from CiteSeer