Date_Time类型字段记录Entity关于时间方面的信息,是一种必不可少的类型,然而,Date_Time类型字段若不谨慎设计,有时候会带来意想不到的Bug。下面说一下我所遇到的Bug。
Schema中主Entity叫Issue,Issue有一个Date_Time类型的字段叫submitDate,用于记录提交Issue的时间。我们有一条业务规则是Issue必须在某个截止时间之前一周提交,如果小于一周则必须使用下一个截止时间。Schema上线后部门主管找我们说这条规则没有正确实现,因为发现了提交时间距截止时间小于一周的Issue。然而测试表明无法提交这样的Issue,出现这样的Issue令我们百思不得其解。后来,经过与用户的交流,原因才真相大白。最初我们的Schema是这样设计的,在defaultValue hook中确定submitDate的Value,在submit action的validation hook中验证submitDate的value。这样设计看起来似乎没有什么问题,然而有些用户创建好Issue后并不马上提交,甚至会等到第二天再提交,这样问题就出来了,对于这些迟迟没有提交的Issue,validation hook验证submitDate的Value时submitDate的值与当前时间相比已过去了相当长的时间,这就造成了不符合规则的Issue的出现。找到原因后修改了Schema才修正了这个Bug。
像刚才这种Bug只是Schema设计者的问题,有经验后就不会再犯了。然而,由CQ没有提供获取当前时间的API而造成的Bug很难通过Schema修复。下面我再说一个所经历的比较离奇的Bug。
有一个脚本负责将CQ中Issue的改动同步到另外一个系统,后来发现经常遗漏数据,即某些改动没有被同步。我们的设计是这样,脚本每十分钟运行一次,将上次同步之后发生的改动同步到另外一个系统,同步的依据是Issue的ChangeLog中记录的时间。检查脚本的Log发现,遗漏的改动没有出现在查询结果中,而重新运行Log记录的查询却能找到这些遗漏的ChangeLog。这种匪夷所思的现象令我们非常困惑,难道用脚本运行查询与我们手动运行查询会不一样么?直觉与随后的验证都告诉我们这种猜想不正确。重新审查脚本,没有找到任何错误。然而遗漏数据的现象还是接二连三的出现,万般无奈下只好再写一个核对脚本,一旦发现遗漏就手动补齐。后来在一个偶然的机会才找到原因,当时正在测验另外一套系统,无意间发现有一笔Issue的ChangeLog非常奇怪,即ChangeLog中记录的时间与ChangeLog生成的顺序不一致,后生成的ChangeLog记录的时间反而早于先生成的ChangeLog。这个奇怪的现象令我立即想到了同步脚本所遇到的麻烦,经过推理验证后确定原因就在这里。由于CQ没有提供获取当前时间的API,我们只好用perl脚本获取,而这个时间是运行CQ的服务器上的时间,并不能保证就是标准时间。我们的CQ运行在多台服务器上,这些服务器中恰好有一台的时间比其他服务器慢五分钟,这就导致了遗漏数据的发生。确定原因后让IT修正了时间,Bug就解决了,然而我们却不敢撤掉核对脚本,因为不敢保证今后服务器的时间不会再发生异常。
其实产生这个Bug最根本的原因是CQ没有提供获取当前时间的API,这项缺失还为某些员工提供了弄虚作假的可能性,而且很难阻止与检测。QA部门对于同一条Bug最先提出的Issue纳入绩效考核,但其余的不予考虑,所以QA部门内的同事都积极争取Bug的第一提交权。问题是Issue的提交时间记录在submitDate这个字段,无论如何设计Schema无法保证这个字段的时间记录的就是标准时间。如果不幸某个同事了解到这种缺陷,那他就可以通过调整机器上的时间欺上瞒下,即把自己机器的时间往前调,这样他即使不是第一个提交的Issue,然而根据Issue的submitDate计算他仍是最先提交的。这个Bug也不是没有办法解决,但一是没有发现有人这样做,二是解决这个Bug有点得不偿失,所以一直随之任之。
为了减少Schema设计者的麻烦,IBM的Rational团队应该给ClearQuest增加一个获取当前时间的API,否则这种麻烦会继续困扰着CQ的开发维护人员。
分享到:
相关推荐
ClearCase是一款强大的版本控制系统,它能够帮助团队管理代码库中的各种变更,确保在多人协作开发环境下代码的一致性和完整性。在UCM模式下,ClearCase提供了一种结构化的方法来管理软件生命周期,包括版本的创建、...
Rational ClearQuest是一款由IBM开发的高级缺陷跟踪和变更管理系统,广泛应用于软件开发过程中的版本控制和协作。 1. **安装说明**: 安装Rational ClearQuest的过程通常涉及到几个关键步骤。首先,用户需要找到...
- **方式**:通过ClearQuest客户端或Web界面登录系统。 #### 9. ClearQuest中Schema的修改 - **编辑Schema**:通过Designer工具对现有的Schema进行修改,如添加字段、调整布局等。 - **版本控制**:支持Schema的...
Bugzero是一个多功能、基于网络的bug缺陷管理和跟踪系统,能够记录、跟踪,并归类处理软件开发过程出现的Bug和硬件系统中存在的缺陷。它也是一个完整的服务管理软件,包括集成服务台热线流程管理(Help Desk)。 ...
ClearQuest是一款由IBM Rational公司开发的强大的缺陷跟踪和变更管理工具,广泛应用于软件开发过程中的问题管理和协作。本文将详细解析ClearQuest的配置步骤,帮助你顺利搭建和使用该系统。 首先,安装完成后,我们...
`pwd`显示当前目录,`cd`改变目录,`mkdir`创建目录,`mv`移动或重命名文件,`rm`删除文件或目录,`cmp`和`diff`比较文件,`pack`和`unpack`压缩和解压文件,`vi`是全屏幕编辑器,提供命令模式和输入模式,`...
而 Rational ClearQuest 则是一款强大的问题跟踪和变更请求管理工具,它能够帮助团队追踪问题、缺陷和变更请求,确保项目的质量和进度。 课程设计的目标是让学生熟练掌握这两款工具的使用,具体包括: 1. 熟悉 ...
IBM Rational ClearQuest是一款高效且高度灵活的变更和缺陷跟踪系统,专为软件开发生命周期中的变更管理设计。这个系统能够在整个开发过程中捕捉、追踪并管理各种变更请求,从而提高软件交付的质量和效率。无论是在...
5. 工具集成:ROSE与其他IBM Rational工具(如ClearQuest用于缺陷管理,RequisitePro用于需求管理)紧密集成,提供端到端的软件开发流程支持。 通过"软件测试培训--ROSE",学习者可以深入理解软件测试的原理和实践...
此外,还有Rational提供的整体解决方案,包括TestManager(测试管理平台)、Robot和RobotJ(自动化测试工具)、ClearQuest(缺陷跟踪工具),以及Purify(软件纠错工具)等。 Rational测试产品结构提供了测试的全...
- 开发人员在编写新代码之前,应优先解决当前存在的缺陷。通常情况下,个人未解决的缺陷数量不应超过10个或15个。 18. **缺陷严重程度的定义** - 应事先定义缺陷的严重程度标准,如蓝屏和数据丢失属于最高级别,...
- **缺陷跟踪**:通过Rational ClearQuest管理缺陷生命周期,提高问题解决效率。 - **测试自动化**:利用Rational Functional Tester实现测试自动化,减少重复劳动。 - **性能测试**:使用Rational Performance ...
ClearCase是IBM推出的一款强大的版本控制系统,它可以跟踪文件和目录的更改,支持多用户协作,并能管理多个版本的软件组件。在UCM模式下,ClearCase提供了基线、视图、活动和流等概念,这些都为有效地管理软件配置...
- **实践**: 在编写新代码之前,优先解决当前存在的缺陷。 #### 18. 明确定义缺陷严重程度 - **重要性**: 明确的严重程度定义有助于优先处理关键问题。 - **实践**: 通常将严重程度分为三个等级,例如:蓝屏和数据...