Agile approaches to software development consider design and implementation to be the central activities in the software process. They incorporate other activities, such as requirements elicitation and testing, into design and implementation.
The philosophy behind agile methods is reflected in the agile manifesto that was agreed on by many of the leading developers of these methods. This manifesto states:-
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change by following a plan
That is, while there is value in the items on
the right, we value the items on the left more.
The Manifesto for Agile Software Development states that the core values of agile process models are:-
Customer involvement:- Customers should be closely involved throughout the development process. Their role is to provide and prioritize new system requirements and to evaluate the iterations of the system.
Incremental delivery:- The software is developed in increments with the customer specifying the requirements to be included in each increment.
People not process:- The skills of the development team should be recognized and exploited. Team members should be left to develop their ways of working without prescriptive processes.
Embrace change:- Expect the system requirements to change and so design the system to accommodate these changes.
Maintain simplicity:- Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system.
Principles Behind Agile Manifesto
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter time scale.
Business people and developers must work together daily throughout the project.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
Continuous attention to technical excellence and good design enhances agility.
Simplicity--the art of maximizing the amount of work not done--is essential.
The best architectures, requirements, and designs emerge from self-organizing teams.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behaviour accordingly.
The software itself is the important measure of the team's progress, rather than documentation.
The development team has the autonomy to determine how to structure itself, handle the development work, and apply the process model.
Adaptability to change comes in large part through delivering software incrementally.
Adaptability also comes from frequent delivery, so that customers can more easily examine the software and provide feedback.
The process is tolerant: it is adapted to the development team's needs.
Software is important, documentation less so: this means that design and construction are often heavily interleaved
Example Agile Methodologies
Extreme Programming (Beck)
SCRUM (Schwaber and Beedle)
Lean Software Development
Dynamic Systems Development Methodology
Crystal Methodologies (Cockburn)
Adaptive Software Development (Highsmith)
Feature-Driven Development (Palmer and Felsing)
Advantages
Customer support involvement and customer satisfaction
Strong communication of the software team with customer
Little planning requirement
Efficient design and fulfils the business requirements
Anytime changes are acceptable
Provides a very realistic approach to software development
Update versions of functions software are released everywhere
It reduces total development and deployment time.
Disadvantages
Due to a lack of proper documentation Once the project is complete and the developer is allocated to another project, maintenance of the finished project can become difficulty.
Depends heavily on customer interactions. So if the customer is not clear, the team can drive it in the wrong direction
Not useful in small project development.
Require an expert project member to make crucial decisions in meetings.
This is all about agile software development.