Welcome 微信登录

首页 / 软件开发 / JAVA

诊断Java代码: 在规范钢丝上行走

诊断Java代码: 在规范钢丝上行走

诊断Java代码: 在规范钢丝上行走2011-02-11 IBM Eric E. Allen要构建可靠的软件,程序规范很关键。没有良好定义的规范,很难诊断软件系统的异常行为。但是很多软件系统的程序规范定义得很差劲。而且更糟的,是许多软件系统根本就没有规范。直观的看,程序规范是对程序行为的一种描述。它可以采取许多形式,但无论采取何种形式,都有一条主线贯穿所有实例:必须有某种类型的系统规范,因为您得依靠它来判断系统是否运转正常。规范可以形式化也可以松散地定义,...
诊断Java代码: 悬挂复合错误类型

诊断Java代码: 悬挂复合错误类型

诊断Java代码: 悬挂复合错误类型2011-02-11 IBM Eric E. Allen空指针到处都有!在一个 Java 程序员所能遇到的所有异常中,空指针异常属于最恐怖的,这是因为:它是程序能给出的信息最少的异常。例如,不像一个类转型异常,空指针异常不给出它所需要的内容的任何信息,只有一个空指针。此外,它并不指出在代码的何处这个空指针被赋值。在许多空指针异常中,真正的错误出现在变量被赋为空值的地方。为了发现错误,我们必须通过控制流跟踪,以发现变量在哪...
诊断Java代码: 消除包间的耦合关联

诊断Java代码: 消除包间的耦合关联

诊断Java代码: 消除包间的耦合关联2011-02-11 IBM Eric E. Allen测试优先编程(test-first programming)中反复遇到的一个问题是,似乎不可能对程序的许多部分进行自动测试。尤其当程序在很大程度上要利用外部资源和库时,似乎很难对它进行测试,因为没有很好的方法来模拟程序与这些外部资源的连接。然而,虽然只使用 Java 代码很难测试这样的程序,但有一种类型的编程(带有开发工具)可以解决这个问题 ― 基于组件的编程。基...
诊断Java代码: “杀手组合”― mixin、Jam和单元测试

诊断Java代码: “杀手组合”― mixin、Jam和单元测试

诊断Java代码: “杀手组合”― mixin、Jam和单元测试2011-02-11 IBM Eric E. Allen在 Java 语言中获得单继承编程的安全性需要付出极大的代价:有时必须沿着继承层次结构中的多条路径复制代码。要重新获得单继承 Java 代码中所失去的大多数表示,我们可以将 mixin集成为一个扩展。本月,Eric Allen 解释了 mixin(那些由它们的父类参数化的类)的概念,以及它们如何能协助单元测试。他还描述了基于 mixin ...
诊断Java代码: 提高Java代码的性能

诊断Java代码: 提高Java代码的性能

诊断Java代码: 提高Java代码的性能2011-02-11 IBM Eric E. Allen很多算法用尾递归方法表示会显得格外简明。编译器会自动把这种方法转换成循环,以提高程序的性能。但在 Java 语言规范中,并没有要求一定要作这种转换,因此,并不是所有的 Java 虚拟机(JVM)都会做这种转换。这就意味着在 Java 语言中采用尾递归方法将导致巨大的内存占用,而这并不是我们期望的结果。Eric Allen 在本文中阐述了动态编译将会保持语言的语...
诊断Java代码: 使用静态类型的理由

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

诊断Java代码: 使用静态类型的理由2011-02-11 IBM Eric E. Allen静态类型 ― 多数程序员喜欢它或憎恨它。支持者夸耀说静态类型让他们写出更干净更可靠的代码,没有它们则做不到这么好。批评者埋怨说静态类型增加了程序的复杂性。是的,静态类型不是免费午餐;有时候,它们用起来很乏味。然而,如果我们主要关心的是使代码没有错误,那么,总的说来,Java 编程还是拥有并使用静态类型好些。为什么?静态类型检查:通过早期错误检测,提高健壮性通过在最...
诊断Java代码: 深度优先访问器和中断的分派

诊断Java代码: 深度优先访问器和中断的分派

诊断Java代码: 深度优先访问器和中断的分派2011-02-11 IBM Eric E. Allen设计模式最多只能对快速集中到一个项目的简单设计提供很大帮助。但是,在一个特定环境中实现一种设计模式的最简单方法并不一定是显而易见的 ― 要做到这一点,有许多种方法。这个月,我们将讨论应用公共设计模式来产生简单、简短且健壮的代码的一些方法。首先,让我们看一下两种模式,它们适用于许多不同的环境。在 设计模式(Erich Gamma 等,也称为“四从...
诊断Java代码: 平台相关性“gotcha问题”

诊断Java代码: 平台相关性“gotcha问题”

诊断Java代码: 平台相关性“gotcha问题”2011-02-11 IBM Eric E. Allen一次编写,随处运行。这是承诺,但 Java 语言有时候并不能做到。诚然,JVM 把跨平台互操作性的程度提到了前所未有的高度,然而,规范和实现级别上的一些小毛病却使得程序无法在多平台上表现出正确的行为。用 Java 编程的主要优点之一是它给您带来的很大程度的平台无关性。您只要将您的产品编译成字节码,然后分发到任何带有 JVM 的平台就行了,而不必为每个目...
诊断Java代码: 连续初始化器错误模式

诊断Java代码: 连续初始化器错误模式

诊断Java代码: 连续初始化器错误模式2011-02-11 IBM Eric E. Allen您经常会看到代码不是仅仅通过调用构造函数对类进行初始化,它还通过一些紧接着的意在设置各个域的动作对类进行初始化。不幸的是,这样紧接着的动作是错误的高发地带,会带来连续初始化(run-on initialization)类型的错误。连续初始化由于各种原因(多数是糟糕的),您经常会看到这样的类定义,其中的类构造函数并不带有足够的参数来适当地初始化类的所有域。这样的构...
诊断Java代码: 空标志错误模式

诊断Java代码: 空标志错误模式

诊断Java代码: 空标志错误模式2011-02-11 IBM Eric E. Allen空标志错误模式在我的上一篇文章中,我说明了用空指针代替各种不同基本类型的数据是如何成为引起 NullPointerException 异常最普遍的原因之一的。这一次,我将说明用空指针代替异常情况怎么也会导致问题的出现。在 Java 程序中,异常情况通常是通过抛出异常,并在适当的控制点捕获它们来进行处理。但是经常看到的方法是通过返回一个空指针值来表明这种情况(以及,可能...
诊断Java代码: 进行记录器测试以正确调用方法

诊断Java代码: 进行记录器测试以正确调用方法

诊断Java代码: 进行记录器测试以正确调用方法2011-02-11 IBM Eric E. Allen用 JUnit进行单元测试是一个功能强大的方法,它可以确保您的代码基础的完整性,但是一些不变量比其他(方法调用序列是其中一种)更难测试。在诊断Java 代码这一部分,Eric Allen描述了怎样在您的单元测试中使用记录器(一种特殊的侦听器),来确保一个方法调用序列按恰当的顺序发生。请点击文章顶部和底部的 讨论,与作者和其他读者在论坛上分享您关于本文的看...
诊断Java代码: 将时态逻辑用于错误模式

诊断Java代码: 将时态逻辑用于错误模式

诊断Java代码: 将时态逻辑用于错误模式2011-02-11 IBM Eric E. Allen尽管传统的断言可以增加对 Java 代码所作的检查次数,但仅用它们,还是有许多检查无法完成。处理这种情况的方法之一就是使用 时态逻辑。请回忆上个月的文章“ Assertions and temporal logic in Java programming”,时态逻辑有助于提供比程序中的方法更有力的断言,从而有助于增强用其它方式难以正式表...
了解Eclipse中的JFace数据绑定,第1部分: 数据绑定的优缺点

了解Eclipse中的JFace数据绑定,第1部分: 数据绑定的优缺点

了解Eclipse中的JFace数据绑定,第1部分: 数据绑定的优缺点2011-02-11 IBM Scott Delap很多流行的 Web 应用程序都有视图层的特性,视图层足够智能可以将请求和应答变量与 HTML 输入标记同步。此过程可以轻松地完成,因为用户输入是通过 Web 应用程序的结构层和 HTTP 来路由的。而另一方面,Java GUI 应用程序经常都不能支持这种特性。无论是用 Standard Widget Toolkit (SWT) 编写还是...
了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识

了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识

了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识2011-02-11 IBM Scott Delap开始之前关于本系列使用数据绑定 API 可以将您从必须编写样本同步代码的痛苦中解脱出来。JFace 数据绑定 API 为用户界面 (UI) 提供了这种功能,该功能是用 Standard Widget Toolkit (SWT) 和 JFace 编写的。“了解 Eclipse 中的 JFace 数据绑定” 系列教程的...
了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能

了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能

了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能2011-02-11 IBM Scott Delap开始之前关于本系列“了解 Eclipse 中的 JFace 数据绑定” 系列教程的这一部分介绍了 Eclipse V3.2 中附带的新 JFace 数据绑定应用程序编程接口 (API) 的高级功能。使用数据绑定 API 可以将您从必须编写样本同步代码的痛苦中解脱出来。JFace 数据绑定 API 为用户界面 (UI)...
诊断Java代码: 单元测试与自动化代码分析协同工作

诊断Java代码: 单元测试与自动化代码分析协同工作

诊断Java代码: 单元测试与自动化代码分析协同工作2011-02-12 IBM Eric E. Allen支持静态分析(包括类型检查)的主要论据是:其结果适用程序所有可能的运行,而通过单元测试只能保证被测试的组件(在测试它们的平台上)只适用测试组件的特定输入。支持单元测试的主要论据是它更容易处理。您可以测试程序的许多约束,这些约束远远超出了同期的静态分析工具所能达到的范围。请允许我在此冒昧地说一句:我认为将这两种工具看作对立的是一个错误。每种工具都有助于...
诊断Java代码: Repl提供交互式评价

诊断Java代码: Repl提供交互式评价

诊断Java代码: Repl提供交互式评价2011-02-12 IBM Eric E. Allen通常,在运行 Java 程序时,必须使用 String[] 输入参数将参数传入,从 main() 方法运行程序。但是如果程序仍在调试中,那么,这可能会成为一项繁重的任务。本月,Eric Allen 讨论对程序中的表达式和语句进行交互式评价的优点,并且提供几个帮助您处理这一任务的 Java repl(“read-eval-print-loop&rdq...
诊断Java代码: Liar View错误模式

诊断Java代码: Liar View错误模式

诊断Java代码: Liar View错误模式2011-02-12 IBM Eric E. AllenLiar, liar!设想一下:您已经为一个分布式系统精心设计了一个极好的 GUI 程序,它包含了客户机请求的所有东西及其它一些东西。您已经让它运行通过了一个自动化测试套件的测试 ― 由于不变量的数量是个天文数字,因此,自动化测试是必须的。测试的结果是程序获得了一张“无错误的健康证明书”。发布这个 GUI 的期限到了,但是,作为一个...
诊断Java代码: Java编程中的断言和时态逻辑

诊断Java代码: Java编程中的断言和时态逻辑

诊断Java代码: Java编程中的断言和时态逻辑2011-02-12 IBM Eric E. Allen虽然传统断言可以增加对 Java 代码执行的检查次数,但有许多检查不能用它们来执行。弥补这一缺陷的方法是使用“时态逻辑”,它是一种用于描述程序状态如何随时间而更改的形式体系。在本文中,Eric Allen 将讨论断言,介绍时态逻辑并描述用于处理程序中时态逻辑断言的工具 (下一篇文章将检查以前的错误模式和时态逻辑的应用程序)。我们...
诊断Java代码: Impostor Type错误模式

诊断Java代码: Impostor Type错误模式

诊断Java代码: Impostor Type错误模式2011-02-12 IBM Eric E. Allen当使用字段中特殊的标记来区别对象类型时,可能会产生标记对相关数据误贴标签的错误 ― 通称为 Impostor Type 错误模式。在诊断 Java 代码的这一部分中,Eric Allen 对这个错误的症状和起因进行了分析,详细说明了预防错误发生的方法,并讨论了一种吸引人的混合实现方法,这种方法不使用 impostor type,但最后,还是有很多相...
<< 141 142 143 144 145 146 147 148 149 150 >>