Ch7 21 bi: Difference between revisions
No edit summary |
|||
Line 27: | Line 27: | ||
Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods. | Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods. | ||
Specific tools and techniques, such as continuous integration, automated or xUnit test, pair programming, test-driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility. | Specific tools and techniques, such as continuous integration, automated or xUnit test, pair programming, test-driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility. | ||
1. Active user involvement is imperative | |||
2. The team must be empowered to make decisions | |||
3. Requirements evolve but the timescale is fixed | |||
4. Capture requirements at a high level; lightweight & visual | |||
5. Develop small, incremental releases and iterate | |||
6. Focus on frequent delivery of products | |||
7. Complete each feature before moving on to the next | |||
8. Apply the 80/20 rule | |||
9. Testing is integrated throughout the project lifecycle – test early and often | |||
10. A collaborative & cooperative approach between all stakeholders is essential | |||
== Scrum == | == Scrum == | ||
Line 46: | Line 59: | ||
http://www.21scrum.com/ | http://www.21scrum.com/ | ||
http://agilebuddy.com/ | http://agilebuddy.com/ | ||
http://www.dsdm.org/ |
Revision as of 05:39, 3 December 2011
Introduction
Agile methodologies are software development techniques based on software and management principles that have been distilled over the past few decades. The primary differentiating factor between Agile methodology and traditional software development methods is the fluidity that the Agile methodologies inject in all stages of software development.
Agile software development is an umbrella term that encompasses various development techniques and philosophies, however, there are certain core characteristics that all of these share. The key features of Agile development are that it is based on iterative and incremental development encouraging an evolution of the requirements and solutions. Agile software development teams also tend to be more fluid, self-organizing and are often cross-functional. Agile software development at the core of it, strives to break the rigid boundaries that traditional software development techniques introduce.
History and the Agile manifesto
Historically, software development has followed the waterfall model [reference] with clear delineation of the various phases such as gathering requirements, design, implementation, verification and maintenance, with very little cross communication between these phases. This rigidity built into this model doesn't always reflect the real world requirements of software development, for e.g., the requirements could change after the design has been completed and a failure to accomodate the new set of requirements is often considered a failure of the project. This has resulted in a significant percentage of software development projects being delayed and in some cases being completely stopped.
As a reaction to the failure of the traditional software development models, quite a few new techniques started to develop in the late 1990's. They all emphasized close collaboration between the programmer team and business experts and a built in ability to be able to deal with and manage change. The core ideas behind these loosely defined methods, referred to as light-weight software development or Agile methods, were finally crystallized into a set of principles, i.e., the Agile manifesto.
The Agile Manifesto reads, in its entirety, as follows:<ref name="Agile Manifesto"/>
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 over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Characteristics and Principles
There are many specific agile development methods. Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project. Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames (timeboxes) that typically last from one to four weeks. Team composition in an agile project is usually cross-functional and self-organizing, without consideration for any existing corporate hierarchy or the corporate roles of team members. Team members normally take responsibility for tasks that deliver the functionality an iteration requires. They decide individually how to meet an iteration's requirements. No matter what development disciplines are required, each agile team will contain a customer representative. This person is appointed by stakeholders to act on their behalf[10] and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions. Most agile implementations use a routine and formal daily face-to-face communication among team members. This specifically includes the customer representative and any interested stakeholders as observers. In a brief session, team members report to each other what they did the previous day, what they intend to do today, and what their roadblocks are. This face-to-face communication exposes problems as they arise. Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods. Specific tools and techniques, such as continuous integration, automated or xUnit test, pair programming, test-driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.
1. Active user involvement is imperative 2. The team must be empowered to make decisions 3. Requirements evolve but the timescale is fixed 4. Capture requirements at a high level; lightweight & visual 5. Develop small, incremental releases and iterate 6. Focus on frequent delivery of products 7. Complete each feature before moving on to the next 8. Apply the 80/20 rule 9. Testing is integrated throughout the project lifecycle – test early and often 10. A collaborative & cooperative approach between all stakeholders is essential
Scrum
Extreme Programming
Implementing Agile Methodology
Agile Tools
References
http://www.extremeprogramming.org/ http://agilemanifesto.org/ http://en.wikipedia.org/wiki/Agile_software_development http://www.extremeprogramming.org/ http://www.industrialxp.org/ http://agilescout.com/best-agile-scrum-tools/ http://www.21scrum.com/ http://agilebuddy.com/ http://www.dsdm.org/