分享

软件测试的逆向思维

 高天明月图书馆 2019-06-07

前言

本篇文章我们聊聊发散性思维中一种形式:逆向思维。逆向思维是一种反其道而行之的思维方式,在我们熟知的'司马光砸缸'的例子中,就是通过这样一种方式解决了救人的问题。在测试工作中,这一思维应用尤其广泛,除了应用于常见的测试设计中,也会用于解决一些初看没有思路不好解决的问题上。

认识逆向思维

来看一道有意思的思考题

软件测试的逆向思维

在漆黑的夜里,甲乙丙丁共四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。

问题:如何设计一个方案,让这四人尽快过桥?

一般人想到的是

软件测试的逆向思维

先让甲乙过去(2分钟),甲回来(1分钟),甲丙过去(5分钟),甲回来(1分钟),甲丁再过去(8分钟),总共需要17分钟。但如果希望更快的话,这种方法还不是最优的,一种优化思路是:设法让最慢的和次慢的一起过去,缩短用时

改进一下

设法让丙(次慢)和丁(最慢)最先一起过去,但是推导之后发现丙和丁先过去的话,也一定会存在丙要回来的问题,所以花费的时间仍然是8+5,整体时间并没有节省。

软件测试的逆向思维

设法让丙(次慢)和丁(最慢)最后一起过去,但是遍历各种方法之后,发现丙和丁过去之前一定会存在丙要回来的问题,所以花费的时间仍然是5+8,时间并没有节省。

软件测试的逆向思维

问题1:为什么丙和丁不能在中间某次一起过去呢?

软件测试的逆向思维

再改进一下

顺着以上思路,一般会想到的方法是:甲乙先过去(2分钟),甲回来(1分钟),丙丁再过去(8分钟),丙回来(5分钟)

软件测试的逆向思维

通过这种方式,遍历各种方法之后,丙回来再过去就会存在5+5的时间花费,时间并没有节省。

问题2为什么回来的人一定是本轮过去的人呢?

软件测试的逆向思维

最终方法

软件测试的逆向思维

先让甲乙过去(2分钟),甲回来(1分钟),丙丁过去(8分钟),乙回来(2分钟),甲乙再过去(2分钟),总共需要15分钟就可以让四个人都过去。

以上问题1和问题2即为逆向思维的一种体现

逆向思维简介

逆向思维也叫求异思维,它是对司空见惯的似乎已成定论的事物或观点反过来思考的一种思维方式。敢于“反其道而思之”,让思维向对立面的方向发展,从问题的相反面深入地进行探索,树立新思想,创立新形象。

软件测试的逆向思维

逆向思维技巧

1、反转型逆向思维法。这种方式是指从已知事物的相反方向进行思考,产生解决问题的途径

来看一个例子:关于圆珠笔的故事

软件测试的逆向思维

圆珠笔在早期发明之初是比较廉价的,但是存在质量方面的问题,使用时间长了之后笔头的圆珠就会因磨损导致圆珠笔漏油。

基于此,人们对圆珠笔的笔头圆珠做了改良,圆珠的升级进而会导致包围圆珠的槽被磨损,因此人们将圆珠及周边的槽做了材料升级改良。

但是这一改良会导致圆珠笔的价格昂贵,仍然没有彻底解决圆珠笔的所有问题。

二战之后,日本的一个小企业主通过统计发现,人们在使用圆珠笔书写到1万5千字~2万字的时候就会出现漏油的现象。因此该企业主想到了一种解决方法:少装一些干油墨,让笔芯里的油墨只能书写1万多个字就用完了,这样圆珠笔芯漏油的问题就解决了。

因此,反转型逆向思维法是指从已知事物的相反方向进行思考,产生解决问题的途径

2、转换型逆向思维法。

软件测试的逆向思维

这是指在研究一问题时,由于解决该问题的手段受阻,而转换成另一种手段,或转换思考角度思考,以使问题顺利解决的思维方法。大家熟知的司马光砸缸的例子即为逆向思维的一种运用,因为司马光不能爬进缸内让人脱离水,所以他转换为另外一种手段,通过破缸的方式让人脱离水。

3缺点逆向思维法

这是一种利用事物的缺点,将缺点变为可利用的东西,化被动为主动,化不利为有利的思维发明方法。这种方法并不以克服事物的缺点为目的,相反,它是将缺点化弊为利,找到解决方法。

例如金属腐蚀是一种坏事,但人们利用金属腐蚀原理进行金属粉末的生产,或进行电镀等其它用途,无疑是缺点逆用思维法的一种应用。

实际案例

在Git并不盛行的早期软件开发时代,测试同学曾面对这样一种苦恼的问题:因为开发同学私自提交代码导致已经测试完毕的版本引入新的质量问题。因为当时的代码管控并没有系统化的工具来支持,所以很容易出现开发同学为了修复一个并不严重的问题或者代码做优化重构(本意是好的),所以在已经测试进入回归阶段或者测试完毕阶段,仍然提交了修改的代码。

在当时,这一类问题非常常见,也是困扰了很多人。基于这种问题,测试和开发同学也是想了很多办法,例如:

正向思维的解决方法:通过约束开发人员的提交进行解决,如果出现未经沟通私自提交代码的问题,进行相应的记录和追责。亦或者所有进入回归阶段的时候,开发同学要写一个提交代码的单子,由开发Leader进行审批之后,测试同学才允许代码提交。但是这种方法的问题也是显而易见的,虽然一定程度上控制了此类问题的发生,但是解决并不彻底。

逆向思维的解决方法:不再约束开发的提交,而是通过工具管控代码入库的过程:开发同学改动的代码进行提交后,并不会直接进入代码库,而是会提交至中间状态(例如Review board),通过工具查看到此代码的提交并进行评审,通过之后代码才会进入代码库的方式,这一方式的应用有效地避免了代码提交缺少管控的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多