Page 76 -
P. 76

3.1   Agile methods  59


                                       and documentation. Agile methods universally rely on an incremental approach to soft-
                                       ware specification, development, and delivery. They are best suited to application devel-
                                       opment where the system requirements usually change rapidly during the development
                                       process. They are intended to deliver working software quickly to customers, who can
                                       then propose new and changed requirements to be included in later iterations of the sys-
                                       tem. They aim to cut down on process bureaucracy by avoiding work that has dubious
                                       long-term value and eliminating documentation that will probably never be used.
                                         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 over following a plan
                                         That is, while there is value in the items on the right, we value the items on the
                                         left more.

                                         Probably the best-known agile method is extreme programming (Beck, 1999;
                                       Beck, 2000), which I describe later in this chapter. Other agile approaches include
                                       Scrum  (Cohn,  2009;  Schwaber,  2004;  Schwaber  and  Beedle,  2001),  Crystal
                                       (Cockburn, 2001; Cockburn, 2004), Adaptive Software Development (Highsmith,
                                       2000), DSDM (Stapleton, 1997; Stapleton, 2003), and Feature Driven Development
                                       (Palmer and Felsing, 2002). The success of these methods has led to some integration
                                       with more traditional development methods based on system modelling, resulting in
                                       the notion of agile modelling (Ambler and Jeffries, 2002) and agile instantiations of
                                       the Rational Unified Process (Larman, 2002).
                                         Although these agile methods are all based around the notion of incremental devel-
                                       opment and delivery, they propose different processes to achieve this. However, they
                                       share a set of principles, based on the agile manifesto, and so have much in common.
                                       These principles are shown in Figure 3.1. Different agile methods instantiate these prin-
                                       ciples in different ways and I don’t have space to discuss all agile methods. Instead, I
                                       focus on two of the most widely used methods: extreme programming (Section 3.3) and
                                       Scrum (Section 3.4).
                                         Agile methods have been very successful for some types of system development:

                                       1.  Product development where a software company is developing a small or
                                          medium-sized product for sale.

                                       2.  Custom system development within an organization, where there is a clear com-
                                          mitment from the customer to become involved in the development process and
                                          where there are not a lot of external rules and regulations that affect the software.
   71   72   73   74   75   76   77   78   79   80   81