What is Extreme Programming?
Extreme Programming is a methodology in software engineering, and it differs from traditional methods by laying more emphasis on adaptability than predictability similar to most of the agile methods. The primary focus of XP is to improve the quality of the software and its responsiveness to meet the changing customer requirements. Just like agile methodology, Extreme Programming relies on shorter development cycles with more frequent releases that are intended to boost productivity and has checkpoints for incorporating the customer requirements in different stages.
Extreme programming takes some of the best practices of traditional software engineering to the extreme levels which is why it gets this name. The most distinctive feature of this methodology is doing programming in pairs, extensive code reviewing, doing unit testing of all codes, avoidance of programming of functions until it’s needed. The other vital elements of extreme programming are the simplicity of code and clarity, flat management structure, anticipating changes in customer demands which leads to a better understanding of their problems.
Origin and history of Extreme Programming
In the 1990’s, there were two significant influences which shaped software development, where on one hand object-oriented programming took precedence over procedural programming and was widely favored by the industry. The dot-com boom and the rise of the Internet focused on company growth and speed-to-market along with changing business requirements preferred shorter product life cycles, and traditional software development was found to be incompatible with them. As a result, information regarding the principles and practices of Extreme Programming was shared through discussions across WikiWikiWeb, and different contributors came up with unique ideas which resulted in spin-off agile methodologies.
Kent Beck conceived extreme Programming while he was working on the Chrysler Comprehensive Compensation System(C3 payroll project)and in March 1993, he took over as the Project Leader and started the process of refining the development methodology. He also wrote a series of books on Extreme Programming and shared his ideas and concepts with a broader audience.
Activities performed in Extreme Programming.
There are mainly four activities that need to be performed in the software development process as described under Extreme Programming which is as follows:
According to the advocates of Extreme Programming, the most critical component of the process of system development is the code. Coding is essential for communicating ideas about issues related to programming. Thus, a programmer who may be facing a challenging programming issue may be able to explain it to the team of other programmers using a simplified code to pinpoint towards the problems faced by him in a clear and concise manner. This helps the other programmers to share their feedback on the subject by coding their ideas as well.
The proponents of Extreme Programming believe that if a few tests can eliminate flaws in the program, then frequent testing can determine more defects to give better results. Unit tests are mainly performed to assess if the features are working according to their specifications. Programmers write as many automated tests as much as possible, and if all of them prove to be successful, then the coding is regarded to be complete. Besides, every piece of code which is written is tested thoroughly before going ahead with the next feature. Acceptance testing is done to ascertain that the programmers understand the requirements and in turn can satisfy the actual customer requirements. Initially, even system-wide integration was also encouraged on a regular basis, but later their frequency was reduced based on the stability of the overall system interfaces.
Programmers need to carefully listen to their customers to understand what type of business logic may be required for the system to perform the actions intended by them. It’s vital to understand their requirements so that they can provide feedback to them regarding the technical aspects of the problem and whether they can be solved or not.
It’s assumed that system development would only require activities such as coding, testing and listening to be performed well to result in a working system which may not always be right. Without design, the system can get too complicated, and the dependencies within the system may no longer be apparent. Hence to prevent such issues, it is best to create a design structure that helps to organize logic into the system. It’s always preferable to have a good design for the system as it can assist in avoiding dependencies in the order, where making changes in one part of the system will not have any bearing on the other parts of the system.