- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
敏捷软件开发-ch06,scrum敏捷软件开发,敏捷软件开发,敏捷软件开发pdf,敏捷软件开发方法,敏捷软件开发工具,敏捷软件开发宣言,敏捷软件开发原则,软件工程敏捷开发,敏捷开发
第6 章 一次编程实践
设计和编程都是人的活动。忘记了这一点,将会失
去一切。
——Bjarne Stroustrup ,1991
为了演示一下XP 的编程实践,Bob Koss (RSK )和Bob Martin (RCM )要在一个小型的应用
程序中使用结对编程(pair programming )的方法,你可以在一边进行观看。在创建该应用程序的过
程中,会使用测试驱动的开发方法以及大量的重构。接下来的一幕是这两个Bob 于2000 年末在一
家旅馆中实际编程情景的真实再现。
在创建这个程序的过程中,我们犯了很多的错误。这些错误包括代码方面的、逻辑方面的、设
计方面的以及需求方面的。在学习本章时,会看到我们围绕这几个方面所进行的活动:识别出错误
和误解,然后处理它们。过程是混乱的——过程中只要有人参与都是这样。结果……唔,令人吃惊,
竟然能够从这样一个混乱的过程中出现秩序。
这个程序是计算保龄球比赛得分的,所以如果知道保龄球比赛的规则,会有助于理解本章内容。
如果对保龄球比赛的规则不了解的话,可以察看章末的补充内容。
6.1 保龄球比赛
RCM :可以帮忙编写一个保龄球记分小程序吗?
RSK:(自言自语,“XP 中结对编程的实践规定当有人请求帮助时,不能够说“不”。若请求的人是
你的老板,就更不能拒绝了。”)当然可以,Bob ,非常高兴帮助你。
RCM :太好了,我想编写一个应用程序来记录一届保龄球联赛。需要记录下所有的比赛、确定团队
的等级、确定每次周赛的优胜者和失败者,并且准确地记录每场比赛的成绩。
RSK:棒极了。我曾经是个很好的保龄球选手。这件事情很有趣。你已经列出了一些用户素材,想
先做哪一个呢?
RCM :先来实现记录一场比赛成绩的功能吧!
RSK:好。它指的是什么呢?该素材的输入和输出是什么呢?
RCM :在我看来,输入只是一个投掷(throw)的序列。一次投掷仅仅是一个整数,表明了此次投
球所击倒的木瓶数目。输出就是每一轮(frame )的得分。
RSK:如果你在这个练习中担任客户的角色,会希望什么形式的输入和输出呢?
40 敏捷软件开发:原则、模式与实践
RCM :好,我担任客户。我们需要一个函数,调用它可以添加投掷,还需要另外的函数用来获取得
分。有几分像下面的样子:
ThrowBall(6);
ThrowBall(3);
assertEquals(9, getScore( ) );
RSK:好,我们需要一些测试数据。我来画一张记分卡的小草图(参见图6.1)。
图6.1 典型的保龄球比赛记分卡
RCM :这名选手发挥的很不稳定。
RSK:或许喝醉了,但是可以作为一个相当好的验收测试用例。
RCM :我们还需要其他的验收测试用例,稍后再考虑吧。该如何开始呢?要做一个系统设计吗?
RSK:我不介意用UML 图来说明从记分卡中得到的一些问题领域概念。从中会发现一些候选对象,
可以在随后的编码时使用。
RCM :(戴上他那顶强大的对象设计者的帽子)好,显然,Game 对象由一系列共 10 个 Frame 对象
组成,每个Frame 对象可以包含1 个、2 个或者3 个Throw 对象。
RSK: 好主意。这也正是我所想的。我立刻把它画出来(参见图6.2)。
RSK:好,来选取一个要测试的类。从依赖关系链的尾部开始,依次往后如何?这样测试会容易些。
图6.2 保龄球记分卡的UML 图
RCM :当然可以。我们来创建Throw 类的测试用例。
RSK:(开始键入代码)
//TestThrow.java
import junit.framework.*;
public class TestThrow extends TestCase
{
public TestThrow(String name)
{
第6 章 一次编程实践 41
super(name);
}
//public void test????
}
RSK:Thr
文档评论(0)