背景:
我们的软件产品需要在A、B、C三种硬件平台(理论上对我们的软件影响是不大的)上工作,早些时候已经成功在A上工作了,但在B、C上还有些问题,加班的那天是一个deadline,需要保证在B、C上也能够工作。这个产品由X、Y、Z三个部分组成,分别由三个team负责,基本的关系是:X和用户打交道,X调用Y,Y是数据进数据出,Y调用Z,Z和硬件打交道。
其中,X和Y都是新写的程序,而且早些时候,在X上发现了较多BUG,Y基本上没发现问题。Z的代码在以前的产品中就有,相对已经比较稳定。由于项目的时间压力,这三个部分没有时间做分别的测试,只是程序员简单测一下自己的代码后,就要集成和测试了(这就是我的具体工作)。除了三个team的leader留下外,X的程序员都留下了;Y的leader检查了team members的工作后,认为没什么问题就放他们回家了;Z的leader最“无辜”,目送所有手下下班后,自己不得不留下。
都是指针惹的祸:
一开始要加班是因为X的工作还没有完成,于是大家就一边等,一边“催”(X的leader声称要到12点才能完成,真是乌鸦嘴),一边各忙各的(我在上网看新闻)。事实上,X到7点多就完成了,但一测试发现有明显的内存访问问题。于是X就调试,由于X在内存访问问题上已经“臭名昭著”了,所以大家(至少我)相信是以前类似的问题,或者是以前的修改没有彻底。
但很快,X发现问题是:Y传了一个空指针给X;很快,Y也证实了X的说法。大家责问Y,为什么程序员自己测试时没有发现?其实很简单,程序员的单元测试程序会检查是否是空指针,如果空就打印空行。于是,X和Y开始“踢球”,互相要对方加上空指针的错误处理代码;但踢了一会后,新的疑问出现了,Y照理不应该出现空指针,所以要么Y的代码有问题,要么Y要证明自己没错。
找一个BUG好难:
于是Y的leader也加入了调试队伍,因为Y的代码都有详细的Log,所以很快就定位到了他的一个team member的代码里。不幸的是,Y learder的开发机器在关键时刻down掉了。好在我们初步实施了软件配置管理,Y leader很快在别人的机器上重新搭建好了调试环境。
Y作了些修改(事实上,他改的这些代码都是无关紧要的),经我测试后,发现还是不行。以我的职业感觉,我觉得X也有问题(后来知道是歪打正着)。但X宁可上sina看“北京某景区有人裸泳”也不肯检查一下自己的代码。Y经过艰苦的调试(其实绝大部分时间我想是在理解这些不属于他的代码),发现是因为某个数据没有取得而导致了空指针的出现,但照理,Z应该总是把这项数据传送给Y的。但Y对Z的“指控”很快被证明是无效的,因为Z leader向大家“展示”了她从硬件取得的数据是好好的。
文章来源于领测软件测试网 https://www.ltesting.net/