The term Agile means ‘moving quickly.’ Agile process itself is a software development process by small teams, in a short time frame, and involving system users as well as developers. This agile process is an iterative approach in which customer satisfaction is at highest priority as the customer has direct involvement in evaluating the software. An Agile approach focuses on adaptability and response time to changing requirements.
The definition for agile software development evolved in the mid 1990s. It helps in adaptive planning, iterative development and time boxing. It is a theoretical framework that promotes foreseen interactions throughout the development cycle.
Agile Model Phases
The agile process follows the software development life cycle which includes requirements gathering, analysis, design, coding, testing and delivers partially implemented software and waits for the customer feedback. In the whole process, customer satisfaction is at highest priority with faster development time. The following diagram depicts the software development life cycle of Agile Process.
The Agile process requires less planning and it divides the tasks into small increments. This process is meant for short term projects with an effort of team work that follows the software development life cycle. Software development life cycle includes the following phases :
The involvement of software team management with customers reduces the risks associated with the software. This agile process is an iterative process in which changes can be made according to the customer satisfaction.
The Agile system development life cycle model begins with initial elicitation of requirements in order to conceptualize the system. Once the system concept is formed, requirements are estimated and prioritized in order to plan the development iterations. Within each iteration, requirements continue to evolve and are used in brief model storming sessions in order to design the functionality required to meet requirements allocated to the iteration. When the system model is developed/modified, the coding is initiated/continued using a test-driven approach. Once the functionality for the iteration is tested successfully, refactoring takes place. Refactoring is a disciplined technique for altering the structure of an existing code base without altering functionality. When refactoring is completed and functionality is confirmed, the code is deployed internally, completing the iteration.
If plans include deploying the code beyond the development iteration, the code is then deployed externally. Eventually, all iterations are completed, resulting in a system with full functionality that is accepted by stakeholders because it meets allocated requirements.
There are several methodologies through which we can implement Agile Projects. The agile methods are focused on different aspects of the software development life cycle. Some focus on the practices (extreme programming, pair programming), while others focus on managing the software projects (the scrum approach).
The three methodologies which are most widely used in Industry are
1. Extreme Programming (XP).
3. Feature Driven Development (FDD).
1. Extreme Programming (XP):
XP is the most successful method of developing agile software because of its focus on customer satisfaction. XP requires maximum customer interaction to develop the software. It divides the entire software development life cycle into several number of short development cycles. It welcomes and incorporates changes or requirements from the customers at any phase of the development life cycle.
Scrum is another popular method of agile development through which productivity becomes very high. It is basically based on incremental software development process. In scrum method the entire development cycle is divided into a series of iteration where each iteration is called as a sprint. Maximum duration of a sprint is 30 days.
3. Feature Driven Development (FDD):
FDD is one of the agile development methods. The key advantage of this method is to design the domain of the software to be produced before development.