随着自动化测试工具的普及,以及业界本身趋势所致,越来越多的测试圈内人都以能转成“测试开发”或者“测试工具开发”为目标。 觉得会写代码的“测试”很牛,很高大上。企业也盲目的跟风,加大力度去抢市场上面为数不多的一些“测试开发”技术大牛。造成行业里,测试人都跑去写代码了。因为有“钱途”。
但是我个人认为,“黑盒测试”才是质量人的精髓能力。大部分情况下,大部分的“测试开发”,都是临时的在帮现在的开发做一些本应该由程序员做的“本分”而已。自己没有能力和精力,公司给配了另一个人帮你测你写的代码是否符合基本质量标准。
但是,人工智能在来的路上了。AI可以自己写程序,自己写逻辑,相应的,也就可以自己测试自己写的代码和逻辑。一个设计好的逻辑流程,一个资深的程序员,一天大概能写500行代码,2天完成;而AI,可以在2分钟内完成。。。。。。
这时候,“黑盒”能力反而是人类在这场比拼中很大的优势之一。不过我讲的这个“黑盒”,不是大部分测试工程师现在做的初级“黑盒”测试。不是按照设计逻辑去跑一遍功能点,最多试试不同浏览器或者平台,这样的测试。而是用科学的方法,用系统性思维对于所测产品的各种维度展开“假设性测试”。
首先,要认识产品。认识产品有很多方法。最简单的热身方法,就是初级“黑盒”测试。按照设计文档逻辑,跑几遍功能。熟悉产品的功能服务。同时也有很多高级的方法,比如5W1H,3W,等等。这些方法论能帮助你从固定的维度整理思路,整理产品的线路,找寻其中的漏洞。然后在此基础上,发散思维。 这就是“启发性测试策略思维”。 我习惯用SFDPOT。以下部分解释取自网络:
结构(Structure)-所有组成产出物的东西。
代码,界面,接口,硬件,非可执行文件,附属物件。
功能(Functions)-所有产品所实现的功能
用户界面,系统接口,应用,计算,时间相关性功能,变化(如改变字体),
开启/关闭,多媒体,错误处理,交互,可测性
数据(Data)-所有产品处理的数据
输入,输出,预设值,持久数据,序列,大小数量变化,噪声数据,生命周期等
平台(Platform)-所有被测软件所依赖的外部事物
外部硬件,外部软件,内部组建
操作(Operation)-所有产品可执行的操作
用户,环境,常见操作,非正常操作,极限操作
时间(Time)-所有与产品相关的时间指标
输入/输出,快/慢,并发,变化率
然后,系统集成,从问题入手!一个一个系统问题,反映的就是系统各功能之间发生的冲突!深入分析、理解、解决了这些问题后,你对产品的认识将达到新的高度。更好的帮助你积累经验“数据”。而这个就是“黑盒”相比AI的优势了。因为人天然的有“感觉”。人建立一个新的模型的速度和成本,是目前任何计算机都无法超越的。成本低,才有机会。回到主题。如何从问题入手?简单来说,就是弄清楚:
什么问题?
为什么会有这个问题?
如何解决问题?一般必须都要有短期对策和长期对策
而做分析,我用的是4个方法:
1. 第一现场。找到问题发生的第一现场,并保护起来。第一时间,尝试找到复制方法
2. 收集必要的现场信息,比如条件,用户,系统Log,使用工具去发现关联性
3. 当问题比较复杂并且无法复制的时候,大胆假设,然后去做实验。基于前面对产品的多维度认知,采用替换法,交叉验证法等,通过同纬度下的交叉验证去缩小问题疑问区域
4. 往往在最后,我们会找到一些“假”原因。这个时候,我们就要用收缩法,从上帝视角去重新看待这个问题。比较抽象,举个实际的例子:
Web访问一个页面,报error500。查log后,发现是java线程池被沾满了。分析后也能确定,当前CPU负担不重,但是线程池满载。尝试free一些线程后,web可以访问了。但是很快又满了。
于是,最快的解决方案就是重启Java servlet service。并且放大线程池。
但是我们知道,这个问题不会那么简单。为什么线程池会被沾满呢?可惜,当时正在运行服务,并且无法在测试环境中复制这个问题。从Log中发现占用线程池的线程的代码段是不同的功能。
这个时候,就需要跳出圈子,从上帝视角去看这个问题了。在测试环境中减少线程池数量,把服务器压力增大。把堆栈占用的代码段都拉出来,写进一个临时function里,patch上去;同时跳出软件问题的范畴,想想硬件,比如disk是否有坏道,网卡是否丢包,CPU是否单核负载过重等等。
最后,在测试环境中高压力下复制出了问题。发现一个common的function会造成线程负载过重。在分析的过程中,各种对比法,交叉法,都运用了进去,才找到了问题的真正原因。而这时候,你也充分了解了这部分应用从前端JS到后端J2EE的调用关系和瓶颈。未来,你再看到新的类似产品的时候,你会第一时间建立以这个问题为模型的测试框架来,能第一时间发现类似的问题。
而这,恰恰是所谓的白盒,AI智能需要很大成本积累才能做到的。
未来,“黑盒”才是精英。因为会测黑盒的高级测试,是集运维,开发,测试,分析为一身的高端人才。