Summary
------------
"Agile" is a new buzzword for describing a bunch of related software development methodologies. Now you may ask what is a methodology? Well in short a methodology is a process for building software. There are many approaches to building software and many of these approaches have been formalized into published methodologies. The names of some of them are Waterfall, RUP (Rational Unified Process), XP (extreme programming), and Scrum.
Since this is a post about agile software development I will talk more about XP in depth. For more information on other agile methodologies please visit http://en.wikipedia.org/wiki/Agile_software_development.
All agile methodologies are based around the agile manifesto. For more info on agile maifesto please visit http://en.wikipedia.org/wiki/Agile_Manifesto.
In short agile processes are lightweight processes. When following an agile process, there is less emphasis on documentation and having everything finalized right from the beginning. Agile processes are designed to accommodate change. XP is probably the most well-known and the most popular example of an agile process. The other popular agile methodology is SCRUM.
Extreme Programming (XP) - An Agile Methodology
--------------------------------------------------------------
Overview
----------
- Customer lists the features in the form of User stories that the software must provide.
- Programmers break the user stories into standalone tasks and estimate the work needed to complete each task.
- Customer chooses the most important tasks that can be completed by the next release keeping in mind the iteration cycle.
- Programmers choose tasks and work in pairs.
- Programmers write unit tests.
- Programmers add features to pass unit tests.
- Programmers fix features and tests as necessary, until all tests pass.
- Programmers integrate code.
- Programmers produce a released version.
- Customer runs acceptance tests.
- Version goes into production.
- Programmers update their estimates based on the amount of work they've done in release cycle.
----------------
Planning
- User stories are written. (Customer writes the User stories)
- Release planning creates the schedule.
- Make frequent small releases. (At the end of every iteration)
- The Project Velocity is measured.
- The project is divided into iterations. (Iteration cycle is anywhere between 2 weeks to 4 weeks)
- Iteration planning starts each iteration.
- Move people around. (This promotes Collective code ownership)
- A stand-up meeting starts each day. (SCRUM like meeting)
- Fix XP when it breaks.
Coding
- The customer is always available.
- Code must be written to agreed standards.
- Code the unit test first.
- All production code is pair programmed.
- Only one pair integrates code at a time.
- Integrate often.
- Use collective code ownership.
- Leave optimization until last.
- No overtime. (8 hours of work 5 days a week)
Designing
- Simplicity.
- Choose a system metaphor.
- Use CRC cards for design sessions.
- Create spike solutions to reduce risk.
- No functionality is added early. Refactor whenever and wherever possible.
- All code must have unit tests.
- All code must pass all unit tests before it can be released.
- When a bug is found, tests are created.
- Acceptance tests are run often and the score is published.
Here are some really good links for some more info on Agile Software development.
- http://pragdave.pragprog.com/pragdave/2007/02/some_agile_hist.html
- http://www.extremeprogramming.org/
- http://www.scrumalliance.org/
- http://www.xprogramming.com/
Here are some excellent Books that you can read
- Kent Beck. Extreme Programming Explained: Embrace Change.
- Kent Beck. Test-Driven Development: By Example
- Martin Fowler. Refactoring: Improving the Design of Existing Code
No comments:
Post a Comment