快速业务通道

演化架构与紧急设计: 测试驱动设计,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
ssify negative numbers");      _number = number;      _factors = new HashSet<Integer>();      _factors.add(1);      _factors.add(_number);    }    private boolean isFactor(int factor) {      return _number % factor == 0;    }    public Set<Integer> getFactors() {      return _factors;    }    private void calculateFactors() {      for (int i = 2; i < sqrt(_number) + 1; i++)        if (isFactor(i))          addFactor(i);    }    private void addFactor(int factor) {      _factors.add(factor);      _factors.add(_number / factor);    }    private int sumOfFactors() {      int sum = 0;      for (int i : _factors)        sum += i;      return sum;    }    public boolean isPerfect() {      calculateFactors();      return sumOfFactors() - _number == _number;    } }

演化架构与紧急设计: 测试驱动设计,第2部分(6)

时间:2011-05-18 IBM Neal Ford

可组合的方法

第 1 部分 中提到的测试驱动开发的好处之一是可组合性,也就是采用 Kent Beck 提出的组合方法模式。组合方法可以用许多内聚的方法构建软件。TDD 能够 促进这种做法,因为为了进行测试,必须把软件分解为小的功能块。组合方法生 成可重用的构建块,有助于产生更好的设计。

在 TDD 驱动的解决方案中,方法的数量和名称反映了这种思想。下面是 TDD 完全数分类程序的最终版本中的方法:

isFactor() getFactors() calculateFactors() addFactor() sumOfFactors() isPerfect()

下面通过一个示例说明组合方法的好处。假设您已经编写了完全数查找程序的 TDD 版本,而您公司中的另一个开发组编写了完全数查找程序的后测试版本(第 1 部分 中有一个示例)。现在,您的用户慌慌张张地跑来说,“我们还必须判断 盈数和亏数!” 盈数 的因子的总和大于数字本身,而亏数 的因子的总和小于数 字本身。

在后测试版本中,所有逻辑都放在一个方法中,他们必须重写整个解决方案, 把盈数、亏数和完全数都涉及的代码分离出来。但是,对于 TDD 版本,只需要编 写两个新方法,见清单 10:

清单 10. 支持盈数和亏数

public boolean isAbundant() {    calculateFactors();    return sumOfFactors() - _number > _number; } public boolean isDeficient() {    calculateFactors();    return sumOfFactors() - _number < _number; }

这两个方法所需的惟一任务是把 calculateFactors() 方法重构为类的构造函 数。(这对于 isPerfect() 方法没有害处,但是现在它在所有三个方法中重复出 现,因此应该重构)。

把代码编写成小的构建块会提高代码的可重用性,因此这是您应该遵守的主要 设计原则之一。使用测试有助于编写可组合的方法,能够改进设计。

演化架构与紧急设计: 测试驱动设计,第2部分(7)

时间:2011-05-18 IBM Neal Ford

度量代码质量

在 第 1 部分 开头,我指出代码的 TDD 版本比后测试版本更好。我已经给出 了许多证据,但是能够进行客观的证明吗?当然,对于代码质量,没有纯粹客观 的度量方法,但是有几个指标能够比较客观地反映代码质量;其中之一是圈复杂 度,这是由 Thomas McCabe 发明的度量代码复杂度的方法。公式非常简单:边数 减去节点数,再加 2,这里的边代表执行路径,节点代表代码行数。请考虑清单 11 中的代码:

清单 11.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号