WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 测试驱动设计,第 1 部分 阅读

演化架构与紧急设计: 测试驱动设计,第 1 部分

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 在编写单元测试时在方法名称中使用下划线是我的一个编程怪癖,当然,演化架构与紧急设计: 测试驱动设计,第 1 部分(4),Java 标准中规定方法名称可以是大小写混合的,但是我一直保持测试方法名称不同于 普通方法名称,如果我可以成对获得因子,那么我只需要循环到该数字的平方根,测试方法名称应当指出正

在编写单元测试时在方法名称中使用下划线是我的一个编程怪癖。当然,Java 标准中规定方法名称可以是大小写混合的。但是我一直保持测试方法名称不同于 普通方法名称。测试方法名称应当指出正在测试的是什么方法,因此这些名称是很长的描述性名称,在测试失败时,您就知道哪些方法出现了问题。但是,读取较长的大小写混合名称十分困难,尤其是在包含几十个或几百个测试的单元测试运行程序中,因为大多数测试名称都以相似值为开头,并且只在快到末尾时才有所不同。在我做过的所有项目中,我强烈建议使用下划线(仅在测试名称中)以提高可读性。

这段代码正确地报告了完全数,但是由于反向测试的原因,代码运行得非常慢,因为我需要检查大量数字。单元测试会引发性能问题,这使得我重新审视代码以查看是否可以进行一些改进。目前,我把循环集中在数字本身以获得因子。但是我必须这样做吗?如果我可以成对获得因子的话就不需要。所有因子都是成对的(例如,如果目标数字为 28,当我找到因子 2 时,我也可以获得 14)。如果我可以成对获得因子,那么我只需要循环到该数字的平方根。为此,我改进了算法并将代码重构为清单 3:


清单 3. 算法的改进版本
public class PerfectNumberFinder2 { 
  public static boolean isPerfect(int number) { 
    // get factors 
    List<Integer> factors = new ArrayList<Integer>(); 
    factors.add(1); 
    factors.add(number); 
    for (int i = 2; i <= sqrt(number); i++) 
      if (number % i == 0) { 
        factors.add(i); 
      } 
 
    // sum factors 
    int sum = 0; 
    for (int n : factors) 
      sum += n; 
 
    // decide if it's perfect 
    return sum - number == number; 
  } 
} 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接