1. Agile Software Development
1¡¢Ãô½ÝÈí¼þ¿ª·¢
This section is a brief introduction
to agile software development. It is organized into
the following sections:
Õâ¸öÕ½ÚÊǶÔÃô½ÝÈí¼þ¿ª·¢µÄ¸ÅÒª½éÉÜ£¬Ëü°´ÕÕÏÂÃæ¶ÎÂä½øÐÐ×éÖ¯
Defining agile Ãô½Ý¶¨Òå
The agile system development lifecycle Ãô½Ýϵͳ¿ª·¢ÉúÃüÖÜÆÚ
The traditional system development lifecycle ´«Í³ÏµÍ³¿ª·¢ÉúÃüÖÜÆÚ
How agile approaches are different Ãô½Ý·½·¨µÄ²»Í¬
Comparing agile and traditional approaches ±È½ÏÃô½ÝºÍ´«Í³µÄ·½·¨
1.1 Defining Agile
1.1 Ãô½Ý¶¨Òå
One frustration that many people new to agile have
is that there is no official definition of agile software
development, although many people will point tothevalues
andprinciples of theAgile Manifesto. Having said that,
mydefinition of disciplined agile software development
is:
ºÜ¶à¸Õ½Ó´¥Ãô½ÝµÄÈËÓиö´ìÕÛ£¬ÄÇÊǾÍÊÇûÓйٷ½µÄÃô½ÝÈí¼þ¿ª·¢µÄ¶¨Òå £¬¾¡¹ÜºÜ¶àÈËÖ¸³öÁËÃô½ÝµÄ¼ÛÖµºÍ·½Õ룬»°ËäÈç´Ë£¬ÎÒ¸ø³öµÄÃô½ÝÈí¼þ¿ª·¢µÄ¶¨ÒåÊÇ£º
An iterative and incremental (evolutionary) approach
to software development which is performed in a highly
collaborative manner by self-organizing teams within
an effective governance framework, with "just enough"
ceremony that produces high quality software in a cost
effective and timely manner which meets the changing
needs of its stakeholders.
Ò»¸öµü´úºÍÔöÁ¿(½ø»¯)µÄÈí¼þ¿ª·¢·½·¨ÒԸ߶ÈÐ×÷µÄ·½Ê½½øÐеÄ×Ô×éÖ¯ÍŶÓÔÚÒ»¸öÓÐЧµÄÖÎÀí¿ò¼Ü,Óë¡°×ã¹»¡±ÒÇʽ,Éú²ú¸ßÖÊÁ¿Èí¼þµÄ³É±¾Ð§ÒæºÍ¼°Ê±Âú×ãÆäÀûÒæÏà¹ØÕߵIJ»¶Ï±ä»¯µÄÐèÇó
The criteria that I look for to determine whether a
team is taking a disciplined approach to agile development.
First, is the team is doing developer regression testing,
or better yet taking a test-driven approach to development?
Second, are stakeholders active participants in development?
Third, is the team producing high-quality, working software
on a regular basis? Fourth, is the team is working in
a highly collaborative, self-organizing manner within
aneffective governance framework? Fifth, are they improving
their approach throughout the project?
ÎÒÕÒµ½µÄʶ±ðÒ»¸öÍŶÓÊÇ·ñ°´ÕÕÑϸñµÄ·½·¨È¥×öÃô½Ý¿ª·¢µÄ±ê×¼£¬Ê×ÏÈÍŶÓÊDz»ÊÇ×öµ½ÁË¿ª·¢Õ߻عé²âÊÔ»òÕßÖ´ÐÐÁ˸üºÃµÄ²âÊÔÇý¶¯¿ª·¢·½·¨£¿µÚ¶þ£¬ÀûÒæÏà¹ØÕßÊDz»ÊDzÎÓëµ½¿ª·¢»î¶¯ÖУ¨Ò²¾ÍÊÇÓû§ÊDz»ÊDzÎÓëÁËÐèÇ󣩣¬µÚÈý£¬ÍŶÓÉú²ú¸ßÖÊÁ¿ºÍ¿É¹¤×÷µÄÈí¼þÊDz»Êdz£Ì¬»¯£¨´ó¸ÅÒâ˼Êdz£Ì¬·¢²¼£©£¬µÚËÄ£¬ÍŶÓÊDz»ÊÇÔÚÓÐЧµÄ¹ÜÀí¿ò¼Üϸ߶ÈÐ×÷ºÍ×ÔÎÒ×éÖ¯µÄ¹¤×÷£¿
µÚÎ壬ËûÃÇÊDz»ÊÇÔÚÏîÄ¿ÖиĽøËûÃǵķ½·¨£¿
1.2 The Agile System Development Lifecycle
Ãô½Ýϵͳ¿ª·¢ÉúÃüÖÜÆÚ
To truly understand agile testing and quality strategies
you must understand how they fit into the overall agile
system development lifecycle (SDLC). Figure 1 depicts
a high-level view of theagile development lifecycle,
showing that agile projects are organized into a series
of time-boxes called iterations (in the Scrum methodology
they call them "Sprints" and some people refer
to them as cycles). Although many people with tell you
that the agile lifecycle is iterative this isn't completely
true, as you can see it is really serial in the large
and iterative in the small. The serial aspect comes
from the fact that there are at least three different
iteration flavors -- initiation iterations (light green),
construction iterations (light blue), and release iterations
(blue) -- where the nature of the work that you do varies.
The implication is that your approach to testing/validation
also varies depending on where you are in the lifecycle.
As a result it is important to understand each of the
high-level activities depicted by this lifecycle:
È¥ÕæÕýµÄÀí½âÃô½Ý²âÊÔºÍÖÊÁ¿²ßÂÔ£¬Äã±ØÐëÀí½âËûÃÇÈçºÎÈںϵ½Õû¸öÃô½ÝÈí¼þ¿ª·¢ÉúÃüÖÜÆÚ£¬ Figure 1
Ãè»æÁËÒ»¸öÃô½Ý¿ª·¢ÉúÃüÖÜÆÚµÄ¸ß¼¶ÊÓͼ£¬Õ¹Ê¾ÁËÃô½ÝÏîÄ¿±»»®·Öµ½Ò»ÏµÁеĵü´úʱ¼äºÐ£¨ÔÚSCRUM·½·¨ÖÐËûÃDZȽÏ×÷¡°Sprints¡±
£¬ÓÐЩÈ˰ÑËûÃǽÐ×öÑ»·£©¡£ ¾¡¹ÜºÜ¶àÈ˸æËßÄãÃô½ÝÉúÃüÖÜÆÚ¾ÍÊǵü´ú£¬ÕâÊDz»ÍêÈ«ÕýÈ·µÄ¡£ÕýÈçÄã¿´µ½µÄËûÃÇÕë¶ÔÊÇÁ¬ÐøµÄСµÄµü´ú¡£
ÕâÁ¬ÐøµÄµü´úÀ´×ÔÖÁÉÙÈý¸ö²»Í¬µÄµü´úÀàÐÍ£¨·ç棩£¬³õʼµü´ú£¨ÁÁÂÌ£©£¬¹¹Ôìµü´ú£¨ÁÁÀ¶£©£¬ºÍ·¢°æµü´ú£¨À¶£©-ÕâÊǵü´ú¹¤×÷µÄ²»Í¬¡£
ºÜÏÔÈ»ÄãµÄ²âÊÔºÍÑéÖ¤·½·¨¸ù¾ÝËùÔÚµÄÉúÃüÖÜÆÚλÖõIJ»Í¬¶ø²»Í¬£¬×÷Ϊһ¸ö½á¹û£¬È¥Àí½âÉúÃüÖÜÆÚÖеÄÿһ¸ö¸ß¼¶»î¶¯ÊǷdz£ºÜ×ÜÒªµÄ¡£
1¡¢Iteration 0. The goal of this iteration, or iterations
on complex projects, is to initiate the project. You
will performinitial requirements envisioning, initial
architecture envisioning, begin identifying and organizing
the development team, come to some sort of stakeholder
concurrence as to the goal(s) of the project, and gain
funding and support for the project. Testing/validation
activities include beginning to set up your testing
environment and tools as well as potentially reviewing
the initial models, plans, and vision or stakeholders
goals document.
µü´ú0. Õâ¸öµü´ú»ò¸´ÖÆÏîÄ¿Éϵĵü´úµÄÄ¿µÄÊÇ×ö³õʼ»¯ÏîÄ¿¡£Ä㽫ִÐÐÖ´ÐгõʼÐèÇ󣬳õʼ¼Ü¹¹£¬ £¬¿ªÊ¼¶¨ÒåºÍ×éÖ¯¿ª·¢ÍŶÓ,
¡£¡£¡£¡£ ²¢ÇÒ»ñµÃ×ʽðºÍÖ§³ÖÏîÄ¿¡£²âÊÔ/ÑéÖ¤»î¶¯»î¶¯°üÀ¨ ´î½¨ÄãµÄ²âÊÔ»·¾³ºÍ×¼±¸²âÊÔ¹¤¾ß£¬ÒÔ¼°¿ÉÒÔÉó²é³õʼģÐÍ£¬¼Æ»®£¬ºÍ¿ÉÊÓµÄÉæÖÚÄ¿±êÎĵµ¡£
2¡¢Construction iterations. During each construction
iteration (iterations 1 to N inFigure 1) the goal is
to produce more potentially shippable software. Agile
teams follow theprioritized requirements practice --
each iteration they take the most important requirements
remaining from the work item stack (what Scrum teams
call a product backlog) and implement them. Agile teams
will take a whole team approach where testers are embedded
in the development team, working side by side with them
to build the system. The focus of their testing efforts
are often on confirmatory testing via developer regression
testing or better yetTest-Driven Development (TDD).
¹¹Ôìµü´ú£º ͨ¹ý¹¹Ôìµü´ú£¬Ä¿±êÊÇÈ¥Éú³É¸üDZÔڿɽ»¸¶µÄÈí¼þ¡£Ãô½ÝÍŶӸù¾ÝÐèÇó¶ÈÓÅÏȼ¶ --ÿ¸öµü´úËûÃǰÑ×îÖØÒªµÄÐèÇó·ÅÈ빤×÷¶ÑÕ»ÖУ¨SCRUM
ÍŶÓÖн»Ò»¸ö²úÆ·backlog) ²¢ÇÒʵÏÖËûÃÇ¡£ Ãô½ÝÍŶÓÒªÖ´ÐвâÊÔÈËԱǶÈëµ½¿ª·¢ÍŶÓÖеÄÕûÌåÍŶӷ½·¨£¬²¢¼ç¹¤×÷¹¹½¨ÏµÍ³¡£
²âÊÔŬÁ¦µÄ½¹µãÊǾ³£Í¨¹ý¿ª·¢»Ø¹é²âÊÔÀ´È·ÈϲâÊÔ»òÕß×îºÃÖ´ÐвâÊÔÇý¶¯¿ª·¢£¨TDD£©
3¡¢Parallel independent testing. Disciplined agile teams
perform continuous independent testing in parallel to
construction iterations throughout the lifecycle. The
goal of this effort is to find defects that got past
the development team, often performing higher forms
of testing such as exploratory testing, system integration
testing, security testing, usability testing, and so
on which require significant testing skills, complex
testing tools, and often complex pre-production testing
environments. There is often a 10:1 to 15:1 ratio between
people on the development team and independent testers
supporting them. In larger organizations this independent
test team typically supports several development teams
(thus enabling more sophisticated system integration
testing because they can more easily work with versions
of multiple systems under development).
²¢ÐжÀÁ¢²âÊÔ¡£ÑµÁ·ÓÐËØµÄÃô½ÝÍŶӹᴩ¹¹Ôìµü´úÉúÃüÖÜÆÚ¶¼ÔÚÖв¢ÐÐÖ´ÐгÖÐø¶ÀÁ¢µÄ²âÊÔ¡£¶ÀÁ¢²âÊÔµÄÄ¿µÄÊÇÕÒ³ö¿ª·¢ÍŶÓÌá½»µÄȱÏÝ¡£
¾³£Ö´ÐиßÐÎʽµÄ²âÊÔÀýÈ磬̽Ë÷²âÊÔ¡¢ÏµÍ³¼¯³É²âÊÔ¡¢°²È«²âÊÔ¡¢¿ÉÓÃÐÔ²âÊԵȵÈÐèÒªºÜÇ¿µÄ²âÊÔ¼¼ÊõºÍ¸´ÔӵIJâÊÔ¹¤¾ß£¬
²¢ÇÒ¾³£Ô¤Éú³É²âÊÔ»·¾³¡£ ¿ª·¢ÍŶӺÍÖ§³ÖËûÃǵIJâÊÔ¶ÀÁ¢²âÊÔÈËÔ±±ÈÀý´ó¸ÅÔÚ10:1 µ½ 15:1. ÔÚ´óÐ͵Ä×éÖ¯Àï¶ÀÁ¢µÄ²âÊÔÍŶÓÖ§³Ö¼¸¸ö¿ª·¢ÍŶӣ¨ÒòΪËûÃÇÄܹ»¸üÈÝÒ×¹¤×÷ÔÚ¶à¸öϵͳ°æ±¾£¬Òò´ËʹµÃ¸ü¸»ÔÚµÄϵͳ¼¯³É²âÊÔ±äµÃ¿ÉÄÜ£©
4¡¢Release iteration(s). The goal of the release iteration(s),
the dark blue "R" iteration in Figure 1, is
to successfully deploy your system into production.
This can be quite complex in practice, including training
of end users, support people, and operations people;
communication/marketing of the product release; backup
and potential restoration (if things go bad); pilot/staged
deployment of the system; final translation of the UI
anddocumentation; finalization of system and user documentation;
and so on. During the release iteration there is still
sometesting at the end of the lifecycle to ensure that
the system is ready for production.
·¢²¼µü´ú£º·¢²¼µü´ú£¬ÔÚFigure1ÖÐ À¶É«Rµü´ú£¬ µÄÄ¿±êÊdzɹûµÄ²¿ÊðÄãµÄϵͳµ½Éú²ú»·¾³£¬ÔÚʵ¼ùÖÐÏ൱¸´ÔÓ£¬Ëû°üÀ¨ÖÕ¶ËÓû§£¬Ö§³ÖÈËÔ±ºÍ²Ù×÷ÈËÔ±µÄÅàѵ£¬¹µÍ¨ºÍÊг¡µÄ²úÆ··¢²¼£»±¸·ÝºÍ»Ø¸´£¨Èç¹û·¢²¼Ê§°Ü£©£»ÊÔµã/·ÖÆÚµÄϵͳ²¿Êð£¬×îºóµÄUIºÍÎĵµµÄ·Ò룬×îºó½»¸¶µÄϵͳºÍÓû§µÄÎĵµ
£¬µÈµÈ ¡£ ÔÚ·¢°æµü´úÈÔÈ»ÓÐЩ×îºóµÄ²âÊÔÒª×ö£¬ÕâЩ²âÊÔÈ·ÈÏϵͳÒѾ׼±¸ºÃÉÏÏß¡£
Figure 1. High-level agile development
lifecycle. Ãô½Ý¿ª·¢ÉúÃüÖÜÆÚ¸ÅÀÀ

Figure 2 shows a detailed version of the SDLC, fleshing
out the details of Figure 1. Figure 2 also adds new
phases so as to depict the full end-to-end lifecycle,
including "iteration -1" where you identify
potential projects, the production phase where you operate
and support the system once it has been released, and
the retirement phase where you fully remove an unneeded
system from production.
Figure2 չʾÁËÒ»¸öÈí¼þ¿ª·¢ÉúÃüÖÜÆÚµÄÏêϸ°æ£¬³äʵÁËfigure 1£¬ Figure 2 Ò²¼ÓÁËеĽ׶Î"iteration-1"
È¥ÃèÊöÍêÕûµÄ¶Ëµ½¶ËµÄÉúÃüÖÜÆÚ£¬ ¡°iteration-1" ÖÐÄãʶ±ðDZÔÚµÄÏîÄ¿£¬
¡±production phase¡° Ò»µ©²úÆ·±»·¢²¼ÐèµÄÒª²Ù×÷ºÍÖ§³Ö¡£
¡±retirement phase" ´ÓÉú²ú»·¾³ÖÐɾ³ý²»ÐèÒªµÄϵͳ
Figure 2. A detailed agile SDLC.

1.3 The Traditional System Development
Lifecycle
1.3 ´«Í³ÏµÍ³¿ª·¢ÉúÃüÖÜÆÚ
Figure 3 depicts the V Model for software development,
basically a sophisticated form of the traditional waterfall
model. With the V model the work on the left-hand side
of the diagram is validated later in the lifecycle through
corresponding activities later in the lifecycle (for
example requirements are validated through acceptance
testing, the architecture via integration testing, and
so on). Although this approach is better than not testing
at all, it proves to be very expensive in practice because
of several systemic problems:
Figure 3, ÃèÊöÁËÈí¼þ¿ª·¢µÄVÄ£ÐÍ£¬»ùÓÚ´«Í³ÆÙ²¼Ä£Ê½µÄ¸´ÔÓÐÎÊÆ¡£ VÄ£Ð͵Ä×ó±ßÊǺóÆÚÑéÖ¤»î¶¯£¬ÔڻµÄÍíЩʱºòÖ´ÐÐÑéÖ¤»î¶¯£¨ÀýÈ磬ÐèÇóÔÚÑéÊÕ²âÊÔʱ±»ÑéÖ¤£¬¼Ü¹¹±»¼¯³É²âÊÔÑéÖ¤£¬µÈµÈ£©£¬¾¡¹ÜÕâ¸ö·½·¨±È¸ù±¾²»²âÊÔÒªºÃ£¬ËûÌṩÁ˱Ƚϰº¹óµÄʵ¼ù¡£ÏÂÃæÊǼ¸¸öϵͳµÄÎÊÌâÃèÊö£º
1¡¢Deliver the wrong functionality. The V model promotes
an approach where the requirements are defined in detail
early in the project. Although this may be good theory
(note the use of the word "may") in practice
it proves to be a very poor way to work. These "big
requirements up front" BRUF approaches result in
significant wastage because at best the project team
will build something to specification instead of something
that the stakeholders actually need.
Ìṩ´íÎóµÄ¹¦ÄÜ¡£VÄ£ÐÍÌᳫµÄÊÇÐèÇóÔÚÏîÄ¿ÔçÆð½øÐÐÏêϸµÄ¶¨Òå·½·¨£¬¾¡¹ÜÕâ¿ÉÄÜÊǺõÄÀíÂÛ£¬ÔÚʱ¼äÖб»Ö¤Ã÷ÊǷdz£Æ¶ÇîµÄ·½·¨¡£¡£ÕâЩ´óÐèÇóÔ¤Ïȶ¨ÒåµÄ·½·¨½á¹ûµ¼Ö´óÁ¿µÄÀË·Ñ£¬ÒòΪ×îºÃµÄÏîÄ¿ÍŶӽ«¹¹½¨Ò»Ð©¹æ·¶£¬¶ø²»ÊÇÉæÖÚµÄʵ¼ÊÐèÇó¡£
2¡¢uild to a fragile design. Similarly, although in
theory it may be a good idea to think through the details
of the architecture/design up front the reality is that
you end up making, and then committing to, technical
decisions are too early when you have the least amount
of information available to you (during architecture/design
phases you're making decisions based on what you hope
will work, as opposed to what you know will work based
on actual working software).
¹¹½¨Ò»¸ö´àÈõµÄÉè¼Æ¡£Í¬Ñù£¬ËäÈ»ÔÚÀíÂÛÉÏÔÚʵÏÖǰÌáǰ×öÏêϸµÄ¼Ü¹¹ºÍÉè¼Æ×÷Ϊһ¸öºÃµÄÏë·¨£¬Êµ¼ÊÇé¿öÊǹýÔçµÄÉè¼ÆÊÇ»ùÓڷdz£ÉÙµÄÓÐÓÐЧµÄÐÅÏ¢£¨Ôڼܹ¹ºÍÉè¼Æ½×¶Î×ö³öÀ´µÄ¾ö¶¨ÊÇ»ùÓÚÄãÆÚÍûµÄ¹¤×÷£¬¶ø²»ÊÇ»ùÓÚÄãÖªµÀʲôÊÇʵ¼Ê¹¤×÷Èí¼þ£©¡£
3¡¢Hand-offs inject defects. Every time you have a hand
off between two groups of people defects due to misunderstandings
will be injected into the product. Although this problem
can be partly mitigated via reviews, this proves to
be expensive compared to more agile approaches such
asnon-solo development.
½»½Ó×¢ÈëȱÏÝ¡£Ã¿´ÎÔÚÁ½¸ö×éÈ˽øÐн»½ÓʱÒòΪ´íÎóµÄÀí½âµ¼ÖÂеÄȱÏÝ×¢Èëµ½²úÆ·ÖУ¬¾¡¹ÜÕâÀàÎÊÌâͨ¹ýÉó²é¿ÉÒÔ¼õÇᣬµ«ÊÇÒ²±»Ö¤Ã÷ÕâÑù×ö±ÈÃô½Ý·½Ê½Êǰº¹óµÄ¡£
4¡¢Fixing defects is expensive. The greater the feedback
cycle the greater the average cost of fixing a found
defect. The V model approach promotes very long feedback
cycles.
ÐÞ¸ÄȱÏݳɱ¾°º¹ó¡£ ·´À¡ÖÜÆÚÔ½³¤£¬Æ½¾ùÐÞ¸´È±Ïݵijɱ¾¾ÍÔ½¸ß¡£ VÄ£ÐÍ·½·¨ÌṩÁËÒ»¸ö·Ç³£³¤µÄ·´À¡ÖÜÆÚ¡£
5¡¢Increased time to value. The V model lengthens the
amount of time, through increased bureaucracy and waiting
time, it takes to deliver functionality into production.
This in turn lowers the opportunity benefits and net
present value (NPV) provided by the release.
Ôö³¤µÄʱ¼ä¼ÛÖµ¡£ VÄ£ÐÍͨ¹ýÔö¼Ó¹ÙÁź͵ȴýʱ¼ä£¬Ôö¼ÓÁ˽»¸¶×Üʱ¼ä£¬ÕâÒ²½µµÍÁË»ú»áÀûÒæºÍ·¢²¼ÌṩµÄ¾»ÏÖÖµ£¨NPV)
Figure 3. Serial SDLC/V Model.

1.4 How Agile is Different
1.4 Ãô½Ý·½·¨µÄ²»Í¬
Traditional testing professionals who are making the
move to agile development may find the following aspects
of agile development to be very different than what
they are used to:
´«Í³²âÊÔÈËÔ±×ªÒÆµ½Ãô½Ý¿ª·¢Ä£Ê½¿ÉÄÜ·¢ÏÖ´«Í³¿ª·¢ÓëÃô½Ý¿ª·¢ÓÐÈçÏ·½ÃæµÄ²»Í¬£º
Greater collaboration. Agile developers work closely
together, favoring direct communication over passing
documentations back and forth to each other. They recognize
that documentation is the least effective manner of
communication between people.
¸ß¶ÈµÄÐ×÷£ºÃô½Ý¿ª·¢½ôÃܺÏ×÷£¬ÓÐÀûÓÚÖ±½Ó½»Á÷¹ýµÄÎļþ±Ë´ËÀ´»Ø¡£ËûÃÇÈÏʶµ½£¬ÎļþÊÇÈËÓëÈ˽»Á÷×îÓÐЧµÄ·½Ê½
Shorter work cycle. The time between specifying a requirement
in detail and validating that requirement is now on
the order of minutes, not months or years, due to the
adoption of test-driven development (TDD) approaches,
greater collaboration, and less of a reliance on temporary
documentation.
½Ï¶ÌµÄ¹¤×÷ÖÜÆÚ¡£ È·¶¨ÐèÇóºÍÑéÖ¤ÐèÇóµÄʱ¼äÏÖÔÚÊǰ´ÕÕ·ÖÖÓ£¬¶ø²»ÊÇÔ»òÄ꣬ÓÉÓÚ²âÊÔÇý¶¯¿ª·¢·½·¨µÄ²ÉÓ㬸ü¼ÓÐ×÷ºÍ½éÉܶÔÁÙʱÎļþµÄÒÀÀµ¡£
Agilists embrace change. Agile developers choose to
treat requirements like a prioritized stack which is
allowed to change throughout the lifecycle. A changed
requirement is a competitive advantage if you're able
to implement it.
Ãô½ÝÕßÓµ±§±ä»¯¡£Ãô½Ý¿ª·¢ÈËԱѡÔñÈ¥¶Ô´ýÓÅÏÈÐèÇó¶ÓÁУ¬ËûÔÊÐíÔÚÕû¸öÉúÃüÖÜÆÚÖеıä¸ü£¬Èç¹ûÄãÄܹ»ÊµÏÖÒ»¸ö±ä¸üÐèÇóÄǽ«¶àÒ»¸ö¾ºÕùÓÅÊÆ
Greater flexibility is required of testers. Gone are
the days of the development team handing off a "complete
specification" which the testers can test again.
The requirements evolve throughout the project. Ideally,
acceptance-level "story tests" are written
before the production code which fulfills them, implying
that the tests become detailed requirement specifications.
²âÊÔÈËÔ±ÐèÒª¸ü´óµÄÁé»îÐÔ¡£ ¿ª·¢ÍŶӽ»¸¶Ò»¸öÍêÕûµÄÐèÇ󣬲âÊÔÈËÔ±ÔÚ½øÐвâÊÔµÄÈÕ×ÓÒѾ¹ýÈ¥¡£ÐèÇó¹á´©Õû¸öÏîÄ¿ÖÜÆÚ£¬ÀíÏëÇé¿öÏ£¬ÑéÊÕ¼¶µÄ¡°³¡¾°²âÊÔÊÇÔÚ²úÆ·¿ª·¢´úÂëǰ±»±àд£¬Òâζ×ŲâÊÔÒѾ±ä³ÉÏêϸµÄÐèÇó˵Ã÷Êé
Greater discipline is required of IT. It's very easy
to say that you're going to work closely with your stakeholders,
respect their decisions, produce potentially shippable
software on a regular basis, and write a single test
before writing just enough production code to fulfill
that test (and so on) but a lot harder to actually do
them. Agile development requires far greater discipline
than does traditional development.
ÐèÒª¸ü¶àµÄ¼ÍÂÉ¡£ ˵ÆðÀ´ºÜÈÝÒ×£¬ÈÃÄãºÍÉæÖÚ½ôÃܵĺÏ×÷£¬ÌýÈ¡ËûÃǵĽ¨Ò飬Éú²ú³öDZÔڿɽ»¸¶µÄÈí¼þ£¬ÔÚ¿ª·¢²úÆ·´úÂëǰдһ¸öµ¥¸ö²âÊÔ¡£µ«ÊÇÕâЩʵ¼Ê×öÆðÀ´ºÜÄÑ¡£Ãô½Ý¿ª·¢±È´«Í³¿ª·¢ÐèÒª¸üÑϸñµÄ¼ÍÂÉ¡£
Greater accountability is required of stakeholders.
One of the implications of adopting the practices active
stakeholder participation, prioritized requirements,
and producing working software on a regular basis is
that stakeholders are now accountable for the decisions
that they make.
ÉæÖÚÐèÒª¸ü´óµÄÔðÈΣº
Greater range of skills are required. It isn't enough
to be just a tester, or just a programmer, or just an
analyst, or just a ... anymore. Agilists are moving
away from the Tayloristic approaches of traditional
development which motivate people to become overly specialized
and instead are moving towards a highly iterative and
collaborative approach which requires generalizing specialists
(NOT generalists!).
ÐèÒª¸ü¹ãµÄ¼¼ÊõÃæ¡£ ½ö½ö×öÒ»¸ö²âÊÔÈËÔ±£¬Ò»¸ö·ÖÎöÈËÔ± µÈÊDz»¹»µÄ£¬Ãô½ÝÕß²»ÔÙÊÇ´«Í³¿ª·¢·½·¨Öм¤ÀøÈËÃdzÉΪµÄר²Å£¬¶øÊÇÊÊÓ¦¸ß¶Èµü´úºÍÐ×÷·½·¨µÄͨ²Å£¨²»ÊǶàÃæÊÖ£©-´ó¸ÅÒâ˼ÊÇÑùÑù¾«Í¨µÄÈ˲š£
1.5 Comparing Agile and Traditional
Approaches
1.5 Ãô½ÝÓ봫ͳ·½·¨¶Ô±È
The agile approach offers many benefits over the traditional
V model:
Ãô½Ý·½·¨±È´«Í³µÄVÄ£ÐÍÌṩÁ˺ܶàÓÐÒæµÄµØ·½£º
Greater ability to deliver required functionality.
Agile teams work closely with their stakeholders, ideally
following the practiceactive stakeholder participation.
This practice, in combination with an evolutionary approach,
results in greater ability of agile teams to understand
and then implement the actual needs of their stakeholders.
Figure 4 summarizes results from Dr. Dobb's Journal
(DDJ)'s 2008 Project Success Survey, showing that agile
teams are more effective at delivering required functionality
than traditional teams.
½»¸¶ÐèÇó¹¦ÄܵÄÄÜÁ¦:Ãô½ÝÍŶÓÓëÉæÖÚ½ôÃܺÏ×÷£¬ÀíÏëÇé¿öÏÂÂú×ãÉæÖÚµÄʵ¼ù»î¶¯¡£Õâ¸öʵ¼ù£¬½áºÏ½ø»¯·½·¨£¬Ãô½ÝÍŶӸüºÃµÄÀí½âÐèÇóµÄÄÜÁ¦²¢ÇÒʵÏÖÁËÉæÖÚÃǵÄʵ¼ÊÐèÇó¡£Figure
4 ×ܽáÁËÕâ¸ö½á¹û¡£Õ¹Ê¾Ãô½ÝÍŶÓÔÚ½»¸¶±»ÐèÒªµÄ¹¦ÄܵÄÄÜÁ¦Éϱȴ«Í³ÍŶӸüÓÐЧ¹û¡£
Greater quality. Figure 4 also shows that agile approaches
result in greater quality than traditional approaches,
most likely due to increased collaboration within the
team and earlier and very often more testing throughout
the lifecycle.
ºÜºÃµÄÖÊÁ¿¡£Figure 4 ҲչʾÁËÃô½Ý·½·¨µÄ½á¹û±È´«Í³·½·¨ÓиüºÃµÄÖÊÁ¿¡£Õâ×î¿ÉÄÜÒòΪÔö¼ÓÍŶÓÄÚ²¿µÄÐ×÷ºÍ½ÏÔçµÄ¾³£µÄ²âÊÔÔÚÕû¸öÉúÃüÖÜÆÚÖС£
Improved designs. Agile architecture and agile design
strategies are evolutionary in nature, and this, in
combination with the greater levels of collaboration
exhibited by agile teams, results in better designs
when compared to more traditional approaches. Architecture
and design are so important to agile teams that they
do these activities throughout the lifecycle, not just
during early lifecycle phases.
¸Ä½øÉè¼Æ¡£Ãô½Ý¼Ü¹¹ºÍÃô½ÝÉè¼Æ²ßÂÔÊDZ¾Öʽø»¯µÄ£¬¶øÕâÀë²»¿ªÃô½ÝÍÅÕ¹Ïֵĸ߶ȺÏ×÷£¬Õâ¸ö²ßÂԱȴ«Í³µÄ·½·¨¸üÄÜ»ñµÃºÃµÄÉè¼Æ½á¹û¡£¼Ü¹¹ºÍÉè¼ÆÊÇÔÚÃô½ÝÍŶÓÖзdz£ÖØÒªµÄ£¬Ãô½ÝÈËÔ±ÔÚÕû¸öÉúÃüÖÜÆÚÖж¼ÔÚ²»¶ÏµÄ¸Ä½øÉè¼ÆºÍ¼Ü¹¹£¬²»½ö½öÖ»ÊÇÔÚÉúÃüÖÜÆÚµÄÔçÆÚ½×¶Î¡£
Improved economics. Figure 4 shows that agile teams
are providing greater return on investment (ROI) than
traditional teams. This is due in part to the shorter
feedback cycle of agile approaches which lowers the
average cost of addressing defects. Furthermore, because
agile teams are working smarter, not harder, they often
get the functionality delivered quicker (whichFigure
4 also depicts) thereby providing quicker time to value
and thus greater benefit.
¸ÄÉÆ¾¼Ã. Figure 4 չʾÁËÃô½ÝÍŶÓÌṩÁ˱ȴ«Í³ÍŶӸü¸ßµÄͶ×ʻر¨ÂÊ£¬ÕâÊÇÓÉÓÚ²¿·ÖÔÒòÃô½Ý·½·¨µÄ±È½Ï¶ÌµÄ·´À¡ÖÜÆÚ£¬Õâ½µµÍÁ˶¨Î»bugµÄƽ¾Ö³É±¾¡£ÁíÍ⣬ÒòΪÃô½ÝÍŶӹ¤×÷Áé»î£¬¶ø²»¾´Ñö£¬ËûÃǾ³£³É¹¦¿ìËٵŦÄܽ»¸¶£¬Òò´ËÌṩÁ˸ü¿ìµÄ»ñµÃ¼ÛÖµºÍÊÕÒæ¡£
Figure 4. Success factors by paradigm
(Scale is from -10 to +10).

Finally, I just wanted to point out that the results
depicted inFigure 4 aren't an anomaly. DDJ's 2008 Agile
Adoption Survey also found that people believed that
agile teams were producing greater quality than traditional
teams, providing better stakeholder satisfaction, and
providing greater levels of productivity.
×îºó£¬ÎÒÖ»ÏëÖ¸³öFigure 4 ÃèÊöµÄ½á¹ûÊÇÕý³£µÄ£¬ DDJ¡®s 2008ÄêÃô½Ýµ÷²é£¬Ò²·¢ÏÖÁËÈËÃÇÆÕ±éÏêϸÃô½Ý±È´«Í³ÍŶÓÉú²ú³ö¸ü¸ßÖÊÁ¿µÄ²úÆ·£¬ÌṩµÄ²úÆ·ÉæÖÚ£¨ÐèÇó·Å£©¸üÂúÒ⣬Ìṩ¸ü¸ßµÄÉú²úÂÊ¡£
|