Software Development; Programming Methodologies; Software Engineering
Extreme programming (XP) is a variation of the agile software development methodology based on five values: simplicity, communication, feedback, respect, and courage. Extreme programming features small teams of developers, managers, and customers who work closely together during short development cycles. It promotes the use of simple designs and practices and frequent small releases.
Extreme programming (XP) is a version of the agile software development methodology. The name “extreme programming” derives from the fact that XP takes successful elements from proven software development methodologies to an extreme level. For example, it is common practice to use periodic code reviews to increase code quality. XP takes this to an extreme level by encouraging the use of pair programming, in which two programmers continually review each other's code in real time. XP is based on five values: simplicity, communication, feedback, courage, and respect.
Simplicity is promoted using simple designs and numerous iterations, concentrating on what can be done in the short term to meet immediate requirements. Future releases are used to respond to new requirements.
Unlike traditional software development methodologies, XP favors communication over documentation. Small teams work in close physical proximity and cooperate on all aspects of the development process. They share information verbally and use documentation only when necessary.
A system of continuous feedback is maintained by XP developers using unit tests, customer acceptance tests, and oversight of other team members’ code. All team members are encouraged to respond positively to changes and to adapt their processes as needed.
XP requires team members to work courageously. They must be willing to take risks, adapt to changing situations, and be honest about progress and deadlines. To promote courageous behavior, team members support each other and do not waste time assigning or avoiding blame for failure.
The final value is respect for self and respect for others. This includes respect for the work being done and respect for the customer's requirements and stories. The contributions of all team members are valued.
XP focuses on four activities: coding, testing, listening, and designing. Coding is the most important activity. The ultimate purpose of software development is to produce code. Testing is a core activity because code must be tested to ensure it meets the needs for which it was written. XP makes extensive use of various forms of testing, including unit testing, acceptance testing, and continuous code reviews. The listening activity directly supports the core value of communication. Team members should employ effective listening skills at all times. The final activity is designing. XP seeks to break the design-and-develop paradigm used by traditional development methodologies in favor of an iterative paradigm that embraces flexibility while stressing good and minimal design.
XP offers several advantages over other methodologies. Frequent small releases and short iterations enable code to be thoroughly tested. Unit testing ensures that defects in code are detected, and customer acceptance testing ensures that the system actually meets the customer's real needs. Unlike traditional development methodologies that work best when project requirements are fixed, XP adapts easily to changing requirements. It can lead to cost savings as unnecessary processes and documentation are avoided.
XP does have drawbacks. It requires extensive customer involvement in the development process, which may not be possible in all situations. In addition, a reliance on communication over documentation makes projects vulnerable to disruption if team members leave the organization and must be replaced. Finally, XP promotes the use of uncommon practices that may be uncomfortable for some developers, such as pair programming.
XP can be used in a wide variety of real-world programming scenarios. For example, imagine a corporation that produces consumer electronic products decides to launch a subsidiary to produce electronic systems for the aviation industry. The subsidiary is located in another city and will be opened in four months. The information technology (IT) department has been tasked with developing a customer relationship management application to be used by the sales department at the new subsidiary. The application must interoperate between both locations. XP is a good choice for this type of project for the following reasons.
As the application will be used in a new line of business, it is likely that its requirements will change frequently as sales staff gain experience. XP's short iterations and frequent small releases are a good match for projects with changing requirements. In addition, the project has a high level of risk, assuming the IT staff has little experience in developing a distributed application that must interoperate between two remote locations, and the customer must have a functional system that meets their needs by a specific date. XP's values and practices reduce risk and help ensure project success. Finally, the sales staff that will be posted to the new office is available to devote their time to the project. This is important, because XP requires end users to be dedicated team members.
XP is an effective methodology when used to develop solutions in high-risk environments. It is ideally suited for projects with changing requirements, and it works best when customers or other end users are available to be active members of the project team. XP requires developers and management to be open to new ways of thinking and new processes. As such, it is an effective methodology for use in a wide range of dynamic businesses, including information technology, social media, and mobile application development. XP's focus on flexibility and adaptability ensures that it will remain an important methodology as customers’ needs change over time.
—Maura Valentino, MSLIS
Bell, Michael. Incremental Software Architecture: A Method for Saving Failing IT Implementations. John Wiley & Sons, 2016.
Friedman, Daniel P., and Mitchell Wand. Essentials of Programming Languages. 3rd ed., MIT P, 2008.
Jayaswal, Bijay K., and Peter C. Patton. Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software. Prentice Hall, 2007.
MacLennan, Bruce J. Principles of Programming Languages: Design, Evaluation, and Implementation. 3rd ed., Oxford UP, 1999.
Scott, Michael L. Programming Language Pragmatics. 4th ed., Elsevier, 2016.
Van Roy, Peter, and Seif Haridi. Concepts, Techniques, and Models of Computer Programming. MIT P, 2004.
Wysocki, Robert K. Effective Project Management: Traditional, Agile, Extreme. 7th ed., John Wiley & Sons, 2014.