Loading

Extreme Programming


What is Extreme Programming?

It is one of the well known and widely acclaimed development model, used for the purpose of agile process of software development. Abbreviated as XP, extreme programming methodology caters to fulfil the need of implementing the continuously changing requirements, being received from the client/stakeholders or the customer, on constant basis, throughout the development process.

The said methodology, involves the frequent delivery of a software product, in short development life cycle, and on regular & incremental basis, to the customers or stakeholders, so that their valuable feedback and reviews, may be implemented, in the next cycle of development.

The necessity of implementing and using the extreme programming approach, lies in its advantage of adaptability, to the frequent changing requirements, along with the simplicity, large and regular feedbacks, with the constant motivation and encouragement, throughout the process. Further, the process of extreme programming is based on the fact that it does not perceives the frequent changing and incoming requirements, as an additional workload, rather it considers these requirements, as an inseparable part.

Further, it is used to cut the cost and time, required to deal with the changing requirement, in multiple iterations, rather in one go, which seems to be a costlier and time-consuming process, due to frequent changing requirements.

Principle values of XP

The methodology and approach of extreme programming for the agile process of software development, is based on some ethics. These are

Communication:  XP involves regular communications between teams and users, team and team, etc., through frequent collaborations, between them, so as to have a better understanding of a product, through reviews and feedbacks generated, to define and share a common objective & approach, for the purpose of implementing and fulfilling the business and user requirements.

Simplicity:  XP focuses on present, and does not concern for the future. It provides simplicity, to start from a scratch, without having detailed knowledge of the software functionalities and features, which are added subsequently, in multiple iteration of the development life cycle. Ignoring future requirements and focussing on today's need, defines the XP's simplicity.

Feedback:  It may be seen as a part of a communication process, where the constant and regular feedbacks are received from the customer, with respect to each version of a software product, which may help in directing the further development process, in a specific or a particular direction. Further, the feedback from the software product version, itself, after each sprint, may also be gathered, by applying unit and integration tests, on periodical basis.

Courage:  As XP, emphasizes on present requirements and conditions, without keeping in account, the future, it make use of several practices and methodologies, such as changing or refactoring the entire code, throwing away the code, implementing anything as per their thinking, and many such things, which requires sufficient amount of courage & confidence. This courage, drives the developer, to take risks for today, without concerning tomorrow.

Respect:  During XP, team members, pays respect, to each other's work, and this respect is gained by avoiding the acts, which may break compilations, produces failures in the execution of the unit tests or any such act, resulting in project delay. Self-respect, may also be gained by each member, by constantly focussing and working towards the quality achievement process. Respect factor leads to generation of motivation and courage, in a surplus quantity, in the team members.

Activities

The variant types of activities, carried out during extreme programming development phase, may be seen as under:

Coding

Code is the set of instructions, which is execute, to carry out a specific task. It is the smallest and basic working feature of a software application, which derives the development of complete software product. A code should adhere to standards and available specifications. The programmers generate the code, and subsequently produces the programs.

Testing

The testing activity involves, verifying and validating the functionality of the code, which is carried out by the programmer, itself. Basically, a programmer makes use of automation, to execute the automated unit tests. Acceptance testing, is a common seen testing technique, in the extreme programming.

Listening

Although, programmers have their own way and approach, to develop a software product, in a particular way, but still a good programmer, listens to customer/client/stakeholders, to know about their requirements, in details, what they want, how they want, what quantity and quality, and many such things, during planning game phase, to develop software product, matching the expectations of the customers.

Designing

Designing the development structure, may be seen as a mandatory criteria for the software development, to understand and organize the structure and conceptual logic & schema of a software product. It empowers, to reduce the complexity of the process, and subsequently avoids the situation of dependencies, in the system. Further, it helps in carrying out a software development project, smoothly & continuously, in a long run, without any halt or interruption.


Practices

The above said activities may be implemented, by making use of several and best available practices, in the field of software engineering. However, there are 12 significant practices, specified for the purpose of implementing the XP's activities, and is listed below:

  • Software product, on which testing needs to be performed.
  • Pair Programming:  Involves two programmers, working on the same system, to generate programming codes.
  • Planning game:  It may be seen as a planning phase or activity of the XP, done for each iteration, and involves meetings, which may be held, once in a week.
  • Test-Driven Development:  Development process, driven by the failures of the tests, so as to design and create new code and functionality, accordingly.
  • Whole Team:  Here, whole team consists of, not only the team member, but the client and stakeholders, along with the targeted customers, which are responsible for driving the development process.
  • Continuous Integration:  Saving various versions of a software product, and delivering updated and current version, thereby avoiding delays in the projects.
  • Refactoring:  Constantly, applying and implementing changes, to enhance the quality of the code.
  • Small releases:  Delivering the version of a software product, on frequent basis, with the minimum gap between each release. This makes the process simple, to add new or changing requirements in the next release.
  • Coding Standards:  Same standard and format for the code, may be used, throughout the development, so as to avoid the compatibility issues, between the team members.
  • Collective code ownership:  Each and every team member, is accountable for the quality of code, being created. Thus, it is the job of every individual, to review, analyse, and bring necessary changes to the code.
  • Simple design:  It means, simple system designs, which provides ease to implement the software system, without missing any functionality or feature.
  • System metaphor:  Defining the names of the functionalities, variable, attributes and various such thing, in such a way that the working or functioning of a software, should be readily understood by anyone, such as customers, testing team, programming team, project management team, etc.
  • Sustainable pace:  Development process, should be carried out at a constant speed, which could be maintained easily, throughout the development.