敏捷软件开发-ch06

敏捷软件开发-ch06

ID:33933452

大小:570.26 KB

页数:38页

时间:2019-03-01

敏捷软件开发-ch06_第1页
敏捷软件开发-ch06_第2页
敏捷软件开发-ch06_第3页
敏捷软件开发-ch06_第4页
敏捷软件开发-ch06_第5页
资源描述:

《敏捷软件开发-ch06》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章一次编程实践设计和编程都是人的活动。忘记了这一点,将会失去一切。——BjarneStroustrup,1991为了演示一下XP的编程实践,BobKoss(RSK)和BobMartin(RCM)要在一个小型的应用程序中使用结对编程(pairprogramming)的方法,你可以在一边进行观看。在创建该应用程序的过程中,会使用测试驱动的开发方法以及大量的重构。接下来的一幕是这两个Bob于2000年末在一家旅馆中实际编程情景的真实再现。在创建这个程序的过程中,我们犯了很多的错误。这些错误包括代码方面的、逻辑方面的、设计方面的以及需求方面的。在学习本章时,会看

2、到我们围绕这几个方面所进行的活动:识别出错误和误解,然后处理它们。过程是混乱的——过程中只要有人参与都是这样。结果⋯⋯唔,令人吃惊,竟然能够从这样一个混乱的过程中出现秩序。这个程序是计算保龄球比赛得分的,所以如果知道保龄球比赛的规则,会有助于理解本章内容。如果对保龄球比赛的规则不了解的话,可以察看章末的补充内容。6.1保龄球比赛RCM:可以帮忙编写一个保龄球记分小程序吗?RSK:(自言自语,“XP中结对编程的实践规定当有人请求帮助时,不能够说“不”。若请求的人是你的老板,就更不能拒绝了。”)当然可以,Bob,非常高兴帮助你。RCM:太好了,我想编写一个应用程

3、序来记录一届保龄球联赛。需要记录下所有的比赛、确定团队的等级、确定每次周赛的优胜者和失败者,并且准确地记录每场比赛的成绩。RSK:棒极了。我曾经是个很好的保龄球选手。这件事情很有趣。你已经列出了一些用户素材,想先做哪一个呢?RCM:先来实现记录一场比赛成绩的功能吧!RSK:好。它指的是什么呢?该素材的输入和输出是什么呢?RCM:在我看来,输入只是一个投掷(throw)的序列。一次投掷仅仅是一个整数,表明了此次投球所击倒的木瓶数目。输出就是每一轮(frame)的得分。RSK:如果你在这个练习中担任客户的角色,会希望什么形式的输入和输出呢?40敏捷软件开发:原则

4、、模式与实践RCM:好,我担任客户。我们需要一个函数,调用它可以添加投掷,还需要另外的函数用来获取得分。有几分像下面的样子:ThrowBall(6);ThrowBall(3);assertEquals(9,getScore());RSK:好,我们需要一些测试数据。我来画一张记分卡的小草图(参见图6.1)。图6.1典型的保龄球比赛记分卡RCM:这名选手发挥的很不稳定。RSK:或许喝醉了,但是可以作为一个相当好的验收测试用例。RCM:我们还需要其他的验收测试用例,稍后再考虑吧。该如何开始呢?要做一个系统设计吗?RSK:我不介意用UML图来说明从记分卡中得到的一些

5、问题领域概念。从中会发现一些候选对象,可以在随后的编码时使用。RCM:(戴上他那顶强大的对象设计者的帽子)好,显然,Game对象由一系列共10个Frame对象组成,每个Frame对象可以包含1个、2个或者3个Throw对象。RSK:好主意。这也正是我所想的。我立刻把它画出来(参见图6.2)。RSK:好,来选取一个要测试的类。从依赖关系链的尾部开始,依次往后如何?这样测试会容易些。图6.2保龄球记分卡的UML图RCM:当然可以。我们来创建Throw类的测试用例。RSK:(开始键入代码)//TestThrow.java----------------------

6、----------importjunit.framework.*;publicclassTestThrowextendsTestCase{publicTestThrow(Stringname){第6章一次编程实践41super(name);}//publicvoidtest????}RSK:Throw对象应该具有什么行为呢?RCM:它保存着比赛者所击倒的木瓶数。RSK:好,你只用了寥寥数语,可见它确实没做什么事情。也许我们应该重新审视一下,来关注具有实际行为的对象,而不是仅仅存储数据的对象。RCM:嗯,你的意思是说实际上Throw这个类也许不必存在?RSK

7、:是的,如果不具有任何行为,能有多重要呢?我还不知道它是否应该存在。我只是觉得如果我们去关注那些不仅仅只有setter和getter方法的对象的话,会更有效率。但是如果你想控制的话⋯⋯(将键盘推到RCM面前。)RCM:好吧,我们上移至依赖链上的Frame类,看看是否能在编写该类的测试用例时,完成Throw类。(把键盘推回给RSK。)RSK:(想知道RCM是在通过这种方式将我引入一个死胡同来教育我呢,还是他确实同意我的观点)好,新的文件,新的测试用例。//TestFrame.java--------------------------------importj

8、unit.framework.*;publiccla

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。