快速业务通道

诊断Java代码: 使用静态类型的理由 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
XY, X, 1);    _assertOrder(XY, Y, 1);    _assertOrder(YZ, Y, 1);    _assertOrder(YZ, Z, 1);   }   public void testAdd() {    MultiSet added = XY.add(YZ);    _assertOrder(added, X, 1);    _assertOrder(added, Y, 2);    _assertOrder(added, Z, 1);   }   public void testSubset() {    assertTrue(XY.subset(XYZ));    assertTrue(YZ.subset(XYZ));    assertTrue(! YZ.subset(XY));    assertTrue(! XY.subset(YZ));    assertTrue(! XYZ.subset(XY));    assertTrue(! XYZ.subset(YZ));    assertTrue(! XYY.subset(XYZ));    assertTrue(! XYZ.subset(XYY));   }   public void testSubtract() {    MultiSet XYYZ = XY.add(YZ);    assertEquals(YZ, XYYZ.subtract(WXY));    assertEquals(YZ, XYYZ.subtract(XY));    assertEquals(XY, XYYZ.subtract(YZ));    assertEquals(EMPTY, EMPTY.subtract(YZ));    assertEquals(EMPTY, YZ.subtract(YZ));   }   public void testUnion() {    assertEquals(XYZ, XY.union(YZ));   }   public void testIsEmpty() {    assertTrue(EMPTY.isEmpty());    assertTrue(! XY.isEmpty());   } }

诊断Java代码: 使用静态类型的理由(3)

时间:2011-02-11 IBM Eric E. Allen

类 MultiSet 在哪?还有方法 union() 、 isEmpty() 等等是怎么样的?

类型检查器不会比您更清楚这些类和方法的位置,所以这些代码在我的环境中可以编译,但不能在您的环境中编译。也就是说,这些代码要到您实现类 MultiSet 及所有适当的方法后才能编译。请记住,在静态类型语言中,要直到您至少为您试图测试的类和方法生成空架子之后,您才能编译新的单元测试。

面向测试的开发工具的使用能容易地缓和这个矛盾。具体地说,您需要一个这样的开发工具,它能读完一个单元测试,累计该测试通过静态类型检查所必需的类和方法引用(及适当的签名),然后生成空架子类。

如果您考虑一下这样一个开发工具会设计成什么样子,很显然,面向测试的开发工具的规划与静态类型检查器非常像,除了它只是累计记录它所需生成的空架子而不是生成错误。我们目前正在为 NextGen 实现静态检查器,它有一个正是做这件事的“空架子生成”模式。

结对编程:另一浅层错误检查

静态类型检查具有对浅层但普遍的错误的检测能力,对这一能力的另一补充是 结对编程,它是极端编程的原则之一。多个聪明的人互相检查工作是消灭许多浅层错误的好方法。

另一获得这种效果的有效方法是开放源代码编码。当代码被开放后,代码常会更健壮 ― 毕竟,有不止一对程序员的两双眼睛在查看代码并寻找最微小的“gotchas”问题。正如 Eric Raymond 在他著名的“The Cathedral and the Bazaar”所说(他把它称为 Linus 定律),“如果有足够多的眼球,所有的错误都是浅层的”。

超越简单的类型检查

当然,静态类型检查是有益的,出于同样的理由,更高级形式的静态检查也是有益的。术语“静态检查”和“静态分析”是比仅仅检查类型更广泛的概念 ― 它们指任何为确定程序在运行时的行为而分析程序文本的机制。

正如其他小组已证明的那样,可以扩展 Java 语言,让它包括其它形式的静态检查,例如断言(assertion)的有限静态验证。今后工作的另一方向是在 Java 语言上加入各种“软类型化系统(soft typing system)”,在软类型化系统中,像强制转型这样的运算在某些环境中可以被成功验证,但并不禁止未经验证的强制转型。

在排错时,我们应该用所有的武器来解决问题,开发新的有效的静态检查系统,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号