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

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

我们大家同意对 Java 代码检查得越多就越好,我们检查了断言在测试新的和改进的编程中的用法。虽然传统断言可以增加执行的检查次数,但有许多检查不能用它们来执行。

然而,有一个方法可以弥补断言留下的检查缺口。那就是使用 时态逻辑。时态逻辑是用于描述程序状态如何随时间而更改的形式体系。让我们讨论一下断言及其特性,以及时态逻辑是如何适合检查的。然后,我们将研究用于处理时态逻辑断言的工具。

断言及其特性

除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好方法。

让我们快速浏览三种类型常见的断言特性(虽然是常见的,但它们没有提供我们所需的完整范围),将它们与可以用传统断言语言表示的程序特性的类型进行比较,并检查多线程上下文所必需的,但不可能表示成常规断言的断言特性。我们还将提供一些代码示例。

常见的断言特性

传统上,断言特性分成下面三种类型:

代码块执行之前特性所持有的条件前断言。

代码块执行之后特性所持有的条件后断言。

代码块执行之前和 之后特性所持有的不变断言。

与这些典型形式的断言一样有用,它们不太会有我们希望能在程序中持有的所有特性范围。让我们看一下典型的用断言表示的程序特性。

可表示为断言的程序特性

这只是可以用传统断言语言表示的程序特性类型的简短列表 ― 所有程序员都希望在代码中包含的特性:

确保任何一次性特性都仅生成一次

断言文档决不被未授权的代理程序访问

断言向每个线程提供运行机会

断言系统将决不会使其本身陷入死锁

安全性协议使用一次性特性(使用过一次的数字)生成器来确保事务未被用过。作为安全性中的简单概念,确保一旦生成特殊一次性特性,就不再生成它,这一点很重要。另一个重要的安全性断言是安全文档决不被未授权的代理程序访问。

在多线程代码中,我们希望断言每个线程最终都会有运行机会。我们还希望确保系统决不会使其本身陷入 死锁状态(即在两个或多个线程可以继续处理之前,它们正在彼此等待提供资源)。

时间: 2024-12-31 02:57:36

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

Java代码统计网站中不同省份用户的访问数_java

一.需求 针对log日志中给定的信息,统计网站中不同省份用户的访问数 二.编程代码 package org.apache.hadoop.studyhdfs.mapreduce; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; im

请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊?

问题描述 请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊? 问题补充:恩恩,swing的!请问怎么改啊?xiaolv 写道 解决方案 JOptionPane.setDefaultLocale(Locale.CHINA);JOptionPane.showMessageDialog(null, "11", "22",JOptionPane.INFORMATION_MESSAGE);这个按钮自动集成多语言.只能通来Locale来改.想要OK就用Loca

关于java代码调用页面中javascript代码

问题描述 关于java代码调用页面中javascript代码,如何调用,这方面的参考资料,各位能否推荐下?... 解决方案 解决方案二:为什么要调用页面中的那些代码?如果你把层次分的很清楚,就不存在这些问题.解决方案三:有的时候,实现一个功能,javascript更方便,java代码只要调用一下就可以,解决方案四:importnetscape.javascript.JSObject;JSObjectwindow=null;window=JSObject.getWindow(this);windo

图片-请问:怎么用java代码实现word中的超链接?如图中的形式,当点击目录时,出现目录的信息

问题描述 请问:怎么用java代码实现word中的超链接?如图中的形式,当点击目录时,出现目录的信息 解决方案 应该就是点一个东西,然后把翻到第多少页. 解决方案二: 找插件实现

java代码-Java编程中的初始化问题

问题描述 Java编程中的初始化问题 为啥初始化字符串数组要放在无参构造函数中?放在外面时,就会报数组越界异常?代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.HashMap; import java.util.Map; import com.bdqn.hibernate.model.Student; publi

解析Java的JNI编程中的对象引用与内存泄漏问题_java

JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native code:在 native code 中嵌入 Java 虚拟机调用 Java 的代码. JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点: 利用 native code 的平台相关性,在平台相关的编程中彰显优势. 对 native code 的代码重用. native code 底层操作

详解Java的设计模式编程中的原型模式_java

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.类型:创建类模式类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.Prototype类需要具备以下两个条件: 实现Cloneable接口.在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法.在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException

深入解析Java的设计模式编程中建造者模式的运用_java

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类型:创建类模式 类图: 四个要素 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量.在本类图中,产品类是一个具体的类,而非抽象类.实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成. 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现.这样更容易扩展.一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回

实例讲解Java的设计模式编程中责任链模式的运用_java

定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.类型:行为类模式类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3.r