一个非必现缺陷的定位与思考

上一篇 / 下一篇  2021-03-03 13:22:43 / 个人分类:测试新方法


1.            问题描述

iSolarERP项目设备管理模块,在测试设备型号参数编辑功能时,我第一次编辑一条记录并保存成功后,查看该型号参数详情页面显示正确。当我尝试第二次编辑操作后,却遇到了一个异常情况:编辑保存成功后,查看详情页面,提示“设备配置详情获取失败”。紧接着我按照第二次操作同样的步骤,又多次尝试了编辑、保存、查看,结果竟然都正常。显然我遇到了一个非必现缺陷,而遗憾的是缺陷的触发条件暂时还没有找到。

1设备配置详情异常页面

2设备配置详情正常页面

2.            解决分析过程

上述问题按现象属于严重bug,因为设备型号参数是设备管理的基础功能,该模块出问题会阻挡后续测试。但是由于多次操作后只出现一次异常,因此判断可能有触发条件。我想到跟开发人员沟通,看是否能得到一些有用的信息,然而得到的答复是:可能是脏数据导致,代码正在修改中,等下个版本发布并清除了脏数据后再测试。

脏数据也可能会导致这一现象,但我当时操作的记录是新添加的且有别于其他记录,所以这种情况可能性较小。所以我决定再去检查该页面存入数据库表中的数据,看看是否能有新的收获。

该页面对应数据库有三张表,而这三张表存储了两列相同的冗余字段MAKERDEVICE_MODEL,这违反了数据库设计的三范式原则。随即我又找开发人员沟通,说明数据库表结构不合理,从预防问题角度也应当修改,他再一次告知我没有关系,不影响功能,让我等下一个版本再测试。

3数据库表存在多个冗余字段

这仍然没有消除我的疑虑,但是因为缺乏有力的说辞,暂时只能等到新版本测试重现bug,才能证实我的错误猜想是否正确。于是我再次分析了数据库表结构设计与页面的呈现逻辑,重复的这两个字段存在于三张表中,起到关联作用。再查看出现异常的那条记录,分析数据特征发现,异常的那条记录在三张表中同时被更新,但其中有一张表的MAKER字段值(显示修改前值)跟另外两张表不一致(显示修改后值),而这就会导致页面加载的时候,根据这MAKERDEVICE_MODE两个字段去关联,只能找到两张表数据,第三张表数据因为MAKER未更新,已经无法被匹配出来,所以推测出页面报错大概就是这个原因了,而MAKER未更新的原因和可能的诱因我也有了初步的猜想。

为了充分验证我的推测,去除“脏数据”干扰,新版本打包完成后,数据库设备管理模块的历史数据被全部清空,设备管理全部重新测试。我重新新增了若干条设备型号参数记录,并且连续进行多次编辑操作,在编辑设备型号和生产厂家两个字段和型号时,修改当前记录的这两个字段与其他记录相同,然后保存。操作两次后,果然“设备配置详情获取失败”的bug再次出现了。这一次我带着我的bug截图、数据库表数据分析结果、初步分析程序出错的可能原因以及可能引发的其他后果(设备型号与详情关联错乱等),一起去找开发人员沟通。在经过深入讨论后,项目经理与开发人员终于认可我的观点,也分析出可能引发其他缺陷的风险,紧急做出了修改计划,对这三张表进行重新设计和代码修改,至此这个bug在我心里的大石头也才平稳放下。

3.            结论与经验

3.1.    测试方法总结

作为一名软件测试人员,工作中会时常遇到一些非必现的缺陷,遇到这类缺陷时,我们不能轻易放弃或轻易的下结论,应当尝试从多个角度去分析诱因,逐一筛查降低干扰因素,逐步找出那个神秘的必现条件。以下是一些非必现缺陷定位的基本思路,供参考:

n 分析场景:先保存缺陷现场,分析取证,是否有误操作,是否有脏数据,先确认是不是缺陷;确认是缺陷后,再按照缺陷出现时的运行环境、操作步骤、数据设置等等,一步步尝试;如果没有复现,再尝试扩大范围,比如当前操作前的一个或多个活动和配置等,加入进来再重试;

n 分析设计:跟开发人员沟通软件设计逻辑,尽管有时候会得到一些误导信息,但最了解软件构造的人是他们,他们会告诉我们一些实现细节,可以有效的帮助我们快速地发现问题的关键所在。

n 分析数据:分析程序运行数据,结合软件设计逻辑,检查每一步操作数据的变化,找出偏离预期的数据,思考和推断出导致偏差的软件环节;

n 分析日志:分析程序运行日志,可以从前端日志、中间件/通信日志、后端日志等几方面逐步分析,如果日志信息不足,还可以找开发人员增加日志记录后再测试;

n 分析代码:找开发一起评审分析代码,代码走查是分析问题、定位问题的最有效方法之一。

3.2.    缺陷根因思考

本文中的缺陷属于数据库设计缺陷,它的引入阶段是软件详细设计阶段。理论上,应当在设计阶段或设计评审中被检出,却一直逃逸到系统测试阶段才被发现,而它的修复代价等同于重新构建。

软件设计的质量决定着最终软件产品的质量,设计的合理性、耦合性和可扩展性,对软件的编码实现也影响深远,因此尽早地识别和修复软件设计的缺陷,对项目的质量、成本和进度控制都至关重要,这对软件设计人员、设计评审人员都提出了高要求。

软件测试人员作为软件质量的评估和推进者,不仅要掌握产品的业务知识,善于分析软件需求、审查需求、及时发现需求问题。更要懂得软件设计知识,去分析设计、审查设计、尽早发现设计缺陷。掌握软件设计知识,在设计评审阶段,可以帮助我们有效地识别出设计风险;在测试设计阶段,可以帮助我们精准地设计出高效的测试用例;在系统测试阶段,掌握设计知识能帮助我们更高效的发现缺陷、定位缺陷、分析缺陷可能的诱因,帮助我们给开发人员提供更多、更准确的信息与协助,进而加速软件产品质量的推进。

TAG:

 

评分:0

我来说两句

Open Toolbar