在测试中心做了一年的测试,从一个对业务不熟悉的小白到能独立掌握一个两个或者更多业务;从一个连ORACLE都没有接触过,连LINUX都不知道是什么东西小白到能在平时测试时稍微写写存储过程,写写shell脚本提高测试效率。点点滴滴的成长都使得自己在测试的发展上继续保持兴趣。想想当初点开界面左点点,右点点,程序偶尔出现BUG,自己便会兴奋地记录QC,截图加日志给开发排查,当时想想可能还是蛮有成就感的,毕竟程序在自己的手中得到了提升。
我相信大家都是慢慢成长过来的。但时间久了,就比如说一年这个时间点,我们不难发现,我们和同时进来的开发同事的差别在哪里,我们对程序的代码逻辑会比较陌生。当然,毕竟两个职位的职能是不一样的。但是,这里我还是想说,测试其实也是很有必要掌握代码,理解程序的代码逻辑。我也经常和身边的测试小伙伴强调,平时测修改单的时候,也可以稍微关注下开发人员修改的代码。
上周周末,我和部门的测试经理一起对HT客户的现场问题做了一次复现和测试。这里先说明一下,这个问题其实在之前的版本上已经发布过临时补丁进行修正,但近期又反馈回来说没有修正正确。
OK,那我先描述一下问题。具体如下,系统中存在一张记录持仓的表TUNITSTOCK,由于这张表存在过多的0持仓的数据,影响了客户的使用,在某次修 改中增加了一个功能“日初清除0持仓”,而这个功能在零持仓的数据达到1000条以上时,会重建TUNITSTOCK的一个唯一索引。问题就出现在这里, 之前发布的临时补丁,在重建索引时,只是产生了一个NORMAL类型的索引,而不是UNIQUE类型的索引。而程序又正好莫名其妙的产生了一条原本不会产生的错误数据(原先不会产生,是因为UNIQUE类型的索引),这就导致了日终归档的时候发生了主键冲突。
那作为测试,首先第一点肯定是要重现问题了。这里也就会引申出“测试掌握代码必要性”。
第一点:提升测试效率
有时候,客户返回的信息并不是很完善,根据客户提供的信息我们不一定能成功复现出问题。但如果了解代码逻辑,就像这个清除0持仓的功能,我们知道它是在一个存储过程中,我们便会去找它进入“清除0持仓,重建索引”的匹配条件。这时候找到匹配条件,只要将测试数据一一匹配就能重现问题。
并且掌握代码,就比如一些简单的sql。也非常有利于批量测试数据的生成。依旧是这个例子,我们需要有1000以上的0持仓,为了不使TUNITSTOCK产生主键冲突,需要某些字段不一致,但又要和基础数据相互匹配。这时候笛卡尔积的运用,select t.vc_inter_code,a.* from tstockinfo t,tunitstock a where t.c_market_no='1' and t.c_stock_type in ('1','2','3')
and a.c_market_no='1' and a.l=1 and a.l_unit_id=15;便可以很好的解决问题。所以有时候小学问加小技巧是十分管用的。
测试数据准备完成之后,就是要走流程使程序按照理想的预设出错。但对于当时我们测试的软件,流程非常耗时。如果按部就班走流程,就需要好几个小时,如果再加上后续测试修复,那真的可以睡在公司了。
所以,在知道程序一些实现逻辑上,我们将很多不影响这个测试的流程全部关闭。力求最快重现问题。并且我们知道这个是因为某一个存储过程造成的,我们也就直接在PLSQL中 test了这个存储过程,顺利的重现了问题。
第二点:定位问题
对于一些简单的问题,我相信在掌握了代码之后,我们自己在通过日志跟代码也是可以很轻易的定位到代码的错误地方。而不是,只是将错误的截图和日志直接扔给开发,让他们去排查。长而久之,会让他们觉得随便从一个地方拉一个人过来都是可以进行软件测试行业的。
这里我依旧以上面的例子为例,像上面描述,当0持仓达到了1000以上时,索引会重建。错误版本是从unique重建成为了normal。当我们把正确的代码替换后,原本的就是unique,重建后还是unique类型的索引,这个时候我们必须要自己确定这个索引是没有重建前的,还是重建后的。
这段代码开发并没有进行日志的输出,那为了确定程序是否修正,我们就必须要自己进行日志打印。这时候掌握一点程序日志输出的代码就很好用了。(之前测试人员就是因为观察到清除0持仓的前后索引类型都是unique,而没有关注到这个unique是否是重建的,而导致再次遗漏)。
第三点:清晰程序变动
其实这个0持仓清除,重建索引的修改是非常简单的。就是把原先create index修改成了create unique index。如果我们测试时候有关注代码的变动,就会发现修改的代码中还是没有添加unique这个关键字段,那我相信这个问题就不会再一次的遗漏出去。
时常关注修改单代码的,也可以很好的避免测试没有测试全面,出现遗漏的情况。也可以预防某些开发不正规递交修改单,修改单描述修改A,但代码其实修改了A和B。
第四点:提升自我能力和测试形象
经常性的关注程序代码逻辑,可以有效地提高自身代码水平和思维方式。为之后性能测试,安全测试提供支撑,例如自己写写测试工具等。
当有了比较好的代码能力,和开发沟通会更加顺畅,理解开发的设计和实现。
当然掌握代码不只以上说的几点好处,总之就是一句话,掌握代码对于测试如虎添翼。
作者:卢凯
作者:恒生开发者社区
链接:http://www.jianshu.com/p/26f7c088bdb8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。