`
together
  • 浏览: 219216 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

从hibernate3.2中的一个bug看测试的重要性

    博客分类:
  • java
阅读更多
http://www.iteye.com/my_topic/35309
partech 写道
前些天测试中发现,缓存好像不能处理数据变更的情况。原来还是好好的阿。
经过跟踪,发现问题出在UpdateTimestampsCache,不知哪位仁兄手快,改了一行if语句,把原来正确的逻辑改错了。在7月13号到11月15号之间,下载的hibernate都有这个BUG。

代码

   1. return lastUpdate.longValue() < timestamp.longValue(); 
   2.         if ( lastUpdate.longValue() >= timestamp.longValue() ) return false; 

从这件事情,引申出另外一个问题,测试是如何的重要。
如此重要的特性在四个月后才得以修复,应该说hibernate的测试工作是有问题的。至少,在多对象连接的情况下,缓存没有测试。

没有测试的代码就是这样可怕,浪费时间和精力不说,还打击了信心。
所以说,测试工作怎么强调都不过分阿。

这个错误简直是不可原谅的。

不过就此也引出一个问题,在循环里直接return返回值,虽然语法上没问题,但是就逻辑而言,很容易出错。像这个错误的产生,就是由于修改代码的人,简单的认为
if ( lastUpdate.longValue() >= timestamp.longValue() ) return false;
等价于
return lastUpdate.longValue() < timestamp.longValue();
,而没有看清楚原代码中当lastUpdate>=timestamp时,是不会跳出循环去return的。

严格一点来说,方法的返回值,是否应该在方法体的最后统一提交更好一些呢?而不要在方法中出现很多的return。

另外采用缓存策略还有一点不知如何处理为好,就是当缓存已经存在的时候,服务器的系统时间被回退,这样lastUpdate时间就可能小于timestamp,但实际上缓存应该是被更新的。这种可能性不是没有的。
是否可以这样来处理,每次的操作均在系统中记录最后一次的操作时间,一旦新的系统时间小于上次操作时间,则系统终止运行,并报错。类似某些有试用时间限制的软件防破解一样,即使把系统时间改回,也一样无法继续试用。
分享到:
评论

相关推荐

    hibernate帮助文档 3.2、3.6、4.1

    Hibernate 3.2是Hibernate系列的一个稳定版本,它引入了一些关键的增强功能。其中,最显著的是对JPA 1.0规范的支持,使开发者能够利用Java持久化API与Hibernate的灵活性相结合。此外,3.2版改进了性能,特别是通过...

    Hibernate 中文手册 3.2.pdf

    Hibernate 3.2 版本是Hibernate历史上的一个重要版本,它引入了很多新的特性,例如注解支持,提高了开发的便捷性。注解允许开发者通过在Java类、方法、字段上使用元数据标记,来描述对象的持久化属性,而无需通过XML...

    Hibernate3.1 3.2jar包

    Hibernate 3.1和3.2是该框架的重要迭代版本,它们在功能、性能和稳定性上都有所提升。3.1版引入了一些新特性,如更完善的事件监听机制、支持JPA(Java Persistence API)以及对EJB3.0规范的支持。而3.2版则在此基础...

    spring3.2参考文档

    Spring 3.2 是该框架的一个重要版本,引入了许多改进和新特性。这份文档将深入探讨Spring 3.2的主要概念、功能和最佳实践。 1. **核心容器**:Spring的核心在于其IoC(Inversion of Control)和DI(Dependency ...

    NHibernate3.2

    【标题】"NHibernate3.2" 是一个重要的IT知识点,它指的是NHibernate的一个特定版本——3.2稳定版。NHibernate是一个针对.NET框架的开源对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来操作数据库,...

    hibernate中文文档

    Hibernate 是一个开源的对象关系映射(ORM)框架,它为开发者提供了一种将 Java 应用程序中的对象映射到数据库表的方式。通过 Hibernate,开发人员可以使用面向对象的方法来处理数据库操作,而无需直接编写 SQL 语句...

    hibernate各个版本下载地址

    - **3.0 final (2005-03-31)**:3.0.x系列的初始版本,是Hibernate发展过程中的一个重要里程碑,引入了许多重要的新特性。 #### 下载地址 上述所有版本的下载地址均为:...

    asm 最新包三个 包括3.0 3.1 3.2

    ASM库在Java开发中扮演着重要的角色,尤其是在需要动态生成或修改字节码的场景下,如ORM框架Hibernate、AOP框架AspectJ以及测试工具JMock等。开发者可以利用ASM来实现诸如代码混淆、运行时代码修改、动态代理等功能...

    NHibernate-3.2 源码

    NHibernate 是一个强大的开源对象关系映射(ORM)框架,用于.NET环境,它极大地简化了数据库操作,使得开发人员能够用面向对象的方式处理数据库。在这个"NHibernate-3.2 源码"压缩包中,包含了一系列文件,让我们...

    Hibernate Developer Guide

    服务是Hibernate中的一个重要组成部分,它们提供了各种功能性的支持。 ##### 7.1 什么是服务? 服务是指由SessionFactory创建并管理的组件。 ##### 7.2 服务合同 服务合同定义了服务的行为规范。 ##### 7.3 服务...

    hibernate3.1. jar

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来操作数据库,从而简化了Java应用程序中的数据存取工作。在Java开发中,Hibernate 框架扮演着至关重要的角色,它消除了Java...

    网上订餐系统课程设计测试报告

    网上订餐系统课程设计测试报告是对一款基于MyEclipse开发,采用Spring-Struts-Hibernate(SSH)框架,以及MySQL数据库的在线订餐系统进行的功能验证与问题排查的重要文档。该报告旨在确保系统的稳定性和用户体验,是...

    cglib_cglib3.2_remain3gr_cglibjar包_cglib.jar_

    总的来说,CGLib作为一个强大的字节码生成库,广泛应用于AOP(面向切面编程)、ORM框架(如Hibernate)、测试工具(如Mockito)等领域,提供了对Java类的灵活扩展和控制。正确理解和使用CGLib,能极大地提升开发效率...

    s2sh版本ckeditor

    【标题】"s2sh版本ckeditor...总之,"s2sh版本ckeditor"是一个关于如何在Struts2、Spring和Hibernate集成环境下使用和优化CKEditor 3.2的实践案例,对于学习和理解s2sh框架下的富文本编辑器集成具有重要的参考价值。

    spring-framework-3.2.13.release-dist.zip

    总结,Spring Framework 3.2.13.RELEASE作为一个成熟的版本,提供了丰富的功能和优秀的性能,是Java企业级应用开发的重要工具。无论你是初学者还是经验丰富的开发者,都可以在这个版本中找到适合自己的开发方式,...

    毕业论文jsp1006餐厅等位排号系统ssh.doc

    学校餐厅作为一个高频次的用餐场所,高效有序的管理至关重要。为了解决用餐高峰期的等位问题,提高管理效率,降低人为错误,基于SSH框架的餐厅等位排号系统应运而生。该系统旨在利用计算机技术实现餐厅的自动化管理...

    课程设计报告3

    完成开发后,对每一个功能模块进行详尽的测试,包括正常情况下的功能测试,以及边界条件、异常情况的测试,确保系统的健壮性。 7.1 结论与心得 通过本次课程设计,不仅可以提升Java编程技能,还能够掌握Web应用的...

    基于jsp+ssh易商B2C网上交易系统源码数据库论文.doc

    系统开发完成后,需要进行功能测试、性能测试和安全性测试,确保系统运行稳定,无明显bug。针对发现的问题进行调试和优化,提高用户体验。 5. 系统维护与升级 为了保证系统的持续运营,需要定期进行系统维护,包括...

Global site tag (gtag.js) - Google Analytics