Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
compare webbrowser
Freenet DSL
Who's Online
7 user(s) are online (6 user(s) are browsing encyclopedia)

Members: 0
Guests: 7

more...
browser tip
Unix Befehle
manual of unix befehle
recommendation!
Sponsored
partner

Agile software development

Agile software development is a conceptual framework for undertaking software engineering projects. There are a number of agile Software development methodology, such as those espoused by the Agile Alliance, a non-profit organization.

Most agile methods attempt to minimize risk by developing software in short timeboxes, called iterations, which typically last one to four weeks. Each iteration is like a miniature software project of its own, and includes all the tasks necessary to release the mini-increment of new functionality: planning, requirements analysis, design, coding, testing, and documentation. While an iteration may not add enough functionality to warrant releasing the product, an agile software project intends to be capable of releasing new software at the end of every iteration. At the end of each iteration, the team reevaluates project priorities.

Agile methods emphasize realtime communication, preferably face-to-face, over written documents. Most agile teams are located in a bullpen and include all the people necessary to finish software. At a minimum, this includes programmers and their customers. (Customers are the people who define the product. They may be product managers, business analysts, or actual customers.) The bullpen may also include testers, interaction designers, technical writers, and management.

Agile methods also emphasize working software as the primary measure of progress. Combined with the preference for face-to-face communication, agile methods produce very little written documentation relative to other methods. This has resulted in criticism of agile methods as being undisciplined hack (technology slang)ing. (aka Cowboy coding)

The above covers a few of the most visible aspects of agile development. For a complete list, see the Agile Manifesto.

=The Agile Manifesto=

Agile methodologies are a family of methodologies, not a single approach to software development. In 2001, 17 prominent figures in the field of agile development (then called light-weight methodologies ) came together at the Snowbird ski resort in Utah to discuss the unifying theme of their methodologies. They created the Agile Manifesto [5], widely regarded as the canonical definition of agile development:

: Manifesto for Agile Software Development

: 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 toolsWorking software over comprehensive documentationCustomer collaboration over contract negotiationResponding 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.

: Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas

:© 2001, the above authorsthis declaration may be freely copied in any form, but only in its entirety through this notice.

The Agile Manifesto is accompanied by the [http://www.agilemanifesto.org/principles.html Principles behind the Agile Manifesto], a complete list of agile principles.

=Comparison with other types of methodologies=

Agile methods are often characterized as being at the opposite end of a spectrum from plan-driven or disciplined methodologies. This distinction is misleading, as it implies that agile methods are unplanned or undisciplined. A more accurate distinction is to say that methods exist on a continuum from adaptive to predictive. Agile methods exist on the adaptive side of this continuum.

<--Agile--> <--Iterative development--> <--Waterfall model--> <----|-------------|----------------|-----> Adaptive Predictive

Adaptive methods focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well. An adaptive team will have difficulty describing exactly what will happen in the future. The further away a date is, the more vague an adaptive method will be about what will happen on that date. An adaptive team can report exactly what tasks are being done next week, but only which features are planned for next month. When asked about a release six months from now, an adaptive team may only be able to report the mission statement for the release, or a statement of expected value vs. cost.

Predictive methods, in contrast, focus on planning the future in detail. A predictive team can report exactly what features and tasks are planned for the entire length of the development process. Predictive teams have difficulty changing direction. The plan is typically optimized for the original destination and changing direction can cause completed work to be thrown away and done over differently. Predictive teams will often institute a change control board to ensure that only the most valuable changes are considered.

==Contrasted with iterative development==

Most agile methods share iterative development s emphasis on building releasable software in short time periods. Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict Timebox rather than a planned goal.

==Contrasted with the waterfall model==

Agile development has less in common with the waterfall model. In some eyes the waterfall is discredited, but most software development takes place today (circa 2005) under this model. The waterfall model is the most predictive of the methodologies, stepping through requirements analysis, design, coding, and testing in a strict pre-planned sequence, partially completing every feature at each stage. The waterfall model produces releasable software at the very end of the cycle, a time period typically extending from several months to several years. Agile methods, in contrast, produce completely developed features (but a very small set subset of the total) every few weeks.

Some agile teams use the waterfall model on a small scale, repeating the entire waterfall cycle in every iteration. Other teams, most notably Extreme Programming teams, work on activities simultaneously, so that there are no distinguishable phases.

==Cowboy coding is not Agile==

Another method in common use is cowboy coding. Cowboy coding is the absence of a defined method: team members do whatever they feel is right. Agile development s frequent reevaluation of plans, emphasis on face-to-face communication, and relatively sparse use of documents sometimes causes people to confuse it with cowboy coding. Agile teams, however, do follow defined (and often very disciplined and rigorous) processes, distinguishing agile approaches from cowboy coding.

=When to use agile methods=

Agile development has been widely documented as working well for small (20 developers)

  • Distributed development efforts (non-collocated teams)
  • Mission- and life-critical efforts
  • Command-and-control company cultures
  • ==Boehm and Turner s risk-based approach==

    Barry Boehm and Richard Turner (software), in [1], suggest that risk analysis be used to choose between adaptive ( agile ) and predictive ( plan-driven ) methods. The authors suggest that each side of the continuum has its own home ground:

    Agile home ground:

  • Low criticality
  • Senior developers
  • High requirements change
  • Small number of developers
  • Culture that thrives on chaos
  • Plan-driven home ground:

  • High criticality
  • Junior developers
  • Low requirements change
  • Large number of developers
  • Culture that demands order
  • By analyzing the project against these home grounds, the risk of using an agile or plan-driven method can be determined.

    =History=

    The modern definition of agile software development evolved in the mid 1990s as part of a reaction against heavyweight methods, as typified by a heavily regulated, regimented, micro-managed use of the waterfall development model. The processes originating from this use of the waterfall model were seen as bureaucratic, slow, demeaning, and contradicted the ways that software engineers actually perform effective work.

    A case can be made that agile and iterative development methods are a return to development practice seen early in the history of software development [http://www2.umassd.edu/SWPI/xp/articles/r6047.pdf 10].

    Initially, agile methods were called lightweight methods. In 2001, prominent members of the community met at Snowbird (see The Agile Manifesto, above) and adopted the name agile methods. Later, some of these people formed the Agile Alliance [http://www.agilealliance.com], a non-profit organization that promotes agile development.

    Early agile methods--created prior to 2000--include Scrum (in management), Crystal Clear, Extreme Programming, Adaptive Software Development, and Dynamic Systems Development Method.

    Extreme Programming, while it may not have been the first agile method, inarguably established the popularity of agile methods. Extreme Programming was created by Kent Beck in 1996 as a way to rescue the struggling Chrysler Comprehensive Compensation (C3) project. While that project was eventually canceled, the methodology was refined by Ron Jeffries full-time XP coaching, public discussion on Ward Cunningham s Portland Pattern Repository Wiki and further work by Beck, including a book in 2000. [2]. Elements of Extreme Programming appear to be based on Scrum (in management) and Ward Cunningham s Episodes pattern language.

    DSDM is considered the first established agile method throughout Europe.

    =Agile methodologies=

    Some of well-known agile software development methodologies include *Extreme Programming (XP) *Scrum (in management) [http://www.controlchaos.com/] *Adaptive Software Development (ASD) [http://www.adaptivesd.com/] *Crystal Clear and Other Crystal Methodologies [http://alistair.cockburn.us/crystal/wiki] *Dynamic Systems Development Method [http://na.dsdm.org/] *Feature Driven Development [http://www.featuredrivendevelopment.com/] *Lean software development [http://www.poppendieck.com/]

    Other methodologies include *Agile documentation *Agile ICONIX *Microsoft Solutions Framework (MSF) *Agile Data [http://www.agiledata.org/] *Agile Modeling [http://www.agilemodeling.com]

    Examples of similar concepts beyond the realm of software include *Lean manufacturing

    =Criticism=

    Agile development is sometimes criticised as cowboy coding. Extreme Programming s initial buzz and controversial tenets, such as pair programming and continuous design, have attracted particular criticism. Some of the more visible attacks came from Stephens and Rosenberg [6] and Mr. Ed [http://www.hacknot.com]. Other criticism may be found in McBreen [9] and Boehm and Turner [1].

    Criticisms include charges that agile development

  • fails to provide an adequate level of structure and necessary documentation
  • only works with senior-level developers
  • incorporates insufficient software design
  • requires too much cultural change to adopt
  • Criticism of Extreme Programming specifically may be found on that page.

    =References=

    *[1] Boehm, B. and Turner, R., Balancing Agility and Discipline: A Guide for the Perplexed, Addison-Wesley, Boston. 2004. *[2] Beck, Kent. Extreme Programming Explained: Embrace Change . Addison-Wesley, Boston. 1999. *[3] Fowler, Martin. [http://www.martinfowler.com/articles/designDead.html Is Design Dead ]. Appeared in Extreme Programming Explained , G. Succi and M. Marchesi, ed., Addison-Wesley, Boston. 2001. *[4] Riehle, Dirk. [http://www.riehle.org/computer-science/research/2000/xp-2000.html A Comparison of the Value Systems of Adaptive Software Development and Extreme Programming: How Methodologies May Learn From Each Other ]. Appeared in Extreme Programming Explained , G. Succi and M. Marchesi, ed., Addison-Wesley, Boston. 2001. *[5] Tomek, Ian. What I Learned Teaching XP . [http://www.whysmalltalk.com/articles/tomek/teachingxp.htm http://www.whysmalltalk.com/articles/tomek/teachingxp.htm] *[6] M. Stephens, D. Rosenberg. Extreme Programming Refactored: The Case Against XP . Apress L.P., Berkeley, California. 2003. *[7] D. Rosenberg, M. Stephens. Agile Development with ICONIX Process . Apress L.P., Berkeley, California. 2005. *[8] Beck, et. al., Manifesto for Agile Software Development . [http://www.agilemanifesto.org/] *[9] McBreen, P. Questioning Extreme Programming . Addison-Wesley, Boston. 2003. *[10] Larman, Craig and Basili, Victor R. [http://www2.umassd.edu/SWPI/xp/articles/r6047.pdf Iterative and Incremental Development:A Brief History IEEE Computer, June 2003]

    =See also=

    *Software Engineering

    =External links=

    *[http://www.agileManifesto.org Manifesto for Agile Software Development] *[http://www.agilealliance.com/ The Agile Alliance] *[http://www.agileplanet.org Agile Planet weblog aggregator] *Matt Stephens website [http://www.softwarereality.com/ SoftwareReality.com - a critical eye on agile development]