诊断Java代码: 使用静态类型的理由 - 编程入门网
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |