软件测试执行不仅仅是“是非判断”

测试执行过程中,测试人员在大多数时候面对的是“是非判断”。即对照需求(包括需求文档、原型系统、用户字典、设计文档、其它参考文档等),来判断被测系统的行为是否正确。但实际上测试人员也有许多需要做出“非是非判断”的时候。而这种能力往往对于“测试质量”(指如果将测试作为一种服务,提供给需要者的服务质量)更为关键,也更难培养。本文将分为两大部分来表述笔者对于如下两个问题的理解:

  (1)测试执行过程中有哪些“非是非判断”,它们为什么重要?

  (2)这些“非是非判断”能力可以如何培养?

  “非是非判断”之一:难以重现的问题

  请回忆如下手工测试的场景:你正在执行测试,发现了一个缺陷,却很难重现。这时候你面对的就不是一个判断题了(即是不是缺陷的判断),而是一个证明题,要证明在什么样的前提条件下,如何经过一步步的演绎,程序在此场景下一定会出错。

  解决这类问题为什么是重要的呢?因为大家最害怕的是风险,而难以重现的问题在我们没有重现它之前都蕴藏着无法把握的风险。我们知道风险带来的影响受到两个因素的影响,一个是风险发生的概率,二是风险带来的危害。难以重现的缺陷虽然发生概率也许比较低(也不一定,因为也许只是你没有发现它出现的必要条件,而此条件有可能是经常发生的),但如果后果是严重的,那它带来的影响可能并不小。所以作为第一现场的目击者,测试人员最有责任和义务去多花一些时间精力试图重现它。对于一个可以重现的问题,它的危害往往更容易被相对准确地度量。所以即使这个缺陷最后被决定不予修复,测试人员也不要觉得气馁。因为这个不予修复的结果是经过论证的,与无法重现而直接取消是不一样的。我比较认同Cem Kaner对于测试的定义“Software testing is an empirical technical investigation conducted to provide stakeholders with information about the quality of the product or service under test.”即,软件测试是一个为了给干系人提供关于被测产品或服务提供质量信息而进行的以观察或实验为根据的技术考察工作。所以测试的价值是提供有价值的质量信息,暴露风险,而不是做决定或者直接产生改变。

  “非是非判断”之二:可以重现,但不容易解决的问题

  请再回忆如下自动化测试的场景:你的某个自动化脚本没有语法错,也可以运行,但结果就是不对(明明正确的结果却被误报出错)。例如,我现在手头还搁置着这样一个下载查询结果到本地,结果比对文件名总报失败的脚本问题。又如,执行性能测试的时候出现了异常的服务器自动重启。这两种问题都可以反复重现,但通常你是第一次碰到,你想不通,也没有信心可以解决。这时候你面对的也不是一个判断题了,而是一个应用题,要找到产生这种差异的根源,并且试图解决。

  解决这种问题的重要性比较明显。因为不解决它们,你对于它们提供的信息就没有信心。你没有信心,你就不能给你的干系人信心。从悲观的角度看,这种问题要耗费我们许多的精力,我们也不知道何时才能找到正确的方向和结论。从乐观的角度想,能够重现的问题都是好问题,解决它只是早晚和ROI的问题。

  其实,测试人员在测试执行过程中会碰到的“非是非判断”还有很多,在非执行过程就更多了。如需求的学习、参加设计评审、编写测试计划和进行测试结果分析等等。所以,培养测试人员解决“非是非判断”问题的能力就成为一个值得思考的问题。

  如何培养解决“非是非判断”问题的能力?

  首先,要意识到自己有薄弱环节需要加强

  一般测试人员在经过一到两年的工作之后,对于被测系统的需求有了一定了解,对黑盒测试常用的方法和技术有了一定运用,加上一些责任心和细心,已经能够独立地负责一些测试了。但是在碰到一些棘手的问题,如上面提到的“非是非判断”的时候,往往有些手足无措。感到手足无措是正常的,但是请不要把这些问题当成一个个特殊的问题,然后告诉自己“这个问题我从来没有碰到过,所以我不知道如何解决是正常的。”而是要透过这样一个一个比较有挑战性的问题,看到自己在哪些方面还需要大力地投入和改进。也许是对架构的理解、也许是对设计和编码的了解、也许是多样的测试手法、也许是综合考虑问题的思路。。。

  其次,要珍惜碰到棘手问题的机会

  前阵子我在小区里散步,走到一棵枇杷树下,抬头看到高一些的枝头上挂满了浅黄色成熟的枇杷,略矮一些的树枝上残留的枇杷多半是半青半黄的,而最低的枝头已经没有枇杷了。这象极了我们工作时,有些事情是我们举手之劳,轻易就可以完成的,正如去摘取那低处的枇杷。有些事情我们需要努力去蹦、去跳才能够到,正如摘取那略高处的枇杷。还有些事情是我们觉得有更高的价值,如那高处最甜美的枇杷,但以我们现在的能力,光多蹦几次也无济于事,所以我们需要手脑并用,去创造一些新的条件才可以做到。如通过一些工具武装自己,或者借用一些资源等。这样想来,碰到超出我们能力的棘手问题的时候,我们是否应该从更乐观的一面去看待它,把它当成那高处的枇杷呢?

  当然,工作中有时迫于时间的压力,心急是难免的。但急是解决不了问题的,所以我们要用冷静理性的思考来缓冲自己迫切需要解决问题的情绪,要及时在感觉不对的方向停止前进,避免南辕北辙。更多的时候,我们需要培养自己及时停止在错误的方向前进的能力,而不要侥幸地期盼一下子就找到正确的方向。

  如果你很少碰到棘手的问题,那恐怕你要刻意地去寻找一些这样的问题了。因为人一般是会倾向于蜗居在自己的舒适区里自我感觉良好的。但进步往往要开始于一些你感到不舒服而希望改变的地方。可喜的是这样的问题并不难找。

  再次,运用系统思考方法来锻炼自己认识问题和解决问题的能力

  即使有多年的工作经验,工作中有时我也会手足无措,感到自己面对的是一个小时候弄乱的毛线球,左拉右扯找不到解开打结的关键,甚至越来越乱。但当我有了这种感觉后,我一般让自己喊停,不再对着计算机快速地输入和快速地试错,而是停顿手上的动作,开始更多的思考和整理。我发散地想各种可能的因素,排除一些不可能的因素,重新理解各种已知的信息,重新审视我的思路和操作过程,分解大问题到小问题,逐步验证我的假设和实际结果。。。我相信,计算机不会骗人,解决复杂的计算机问题不能靠碰,也不能仅靠我脑子里原来已有的认识,而要临场学习更多的东西。但每次解决一个棘手的问题,我就得到了对于问题本身的新的认识,也掌握了解决它的至少一种方法。更重要的是,我更多地了解了自己,也为日后摘取更高处的枇杷在自己脚下多垫了一块砖。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-12 21:35:12

软件测试执行不仅仅是“是非判断”的相关文章

JS执行删除前的判断代码

 这篇文章主要介绍了JS执行删除前如何实现判断,需要的朋友可以参考下 一.   代码如下: <script>  function del(){  if(confirm("确认删除吗")){  alert("yes");  }  else{  alert("no")  return;  }  }  </script>  <html>  <input type="button" value

软件测试执行负责人经历之经验总结一

做过几个项目的测试执行负责人,有自己单独负责测试的小项目,也有8.9个人组成的团队进行的大项目测试,以下总结下测试执行负责人的职责和整个项目把控过程中的注意事项.实际项目测试活动主要有三部分组成:测试计划,实际测试和总结文档,以下也主要从这三个部分来介绍. 测试计划 当老大告知要来一个项目,并让我们作为测试执行负责人时,欣喜之余也要开始着手准备工作,也就是制定我们的测试计划.首先要询问老大,开发人员对应的项目负责人是谁,测试执行周期多长,测试人员有哪些,环境资源能提供多少.接下来就是与开发人员项

Runtime调用shell文件执行外部命令,传10个位置参数进去,在执行shell时,判断出参数总数不是10,执行退出,求解答

问题描述 cm=/usr/local/bea/watool/tact/share/rootdir/system/expendableparts/uploadComm.sh /usr/local/bea/watool/tact/share/rootdir/system/expendableparts/91010_888888_20110822134252_mytest.csv watool tactclient tact /usr/local/bea/watool/tact/share/rootd

判断进程时候执行

#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <string.h> #include <errno.h> #include <signal.h> #define SYNC_LOCK "/usr/local/nagios/var/rw/nagioslogd.pid" #define SYNC_LOCK_A "/usr/l

java-for循环中有多个if判断,for循环16次,优先执行一个if判断

问题描述 for循环中有多个if判断,for循环16次,优先执行一个if判断 Java for循环中有3个if判断依次执行.for循环16次, 我想让第一个if判断先执行16次(优先执行16次), 如果在16次中有符合第一个if判断的就执行停止循环. 如果16次之后,第一个if判断没有符合的结果,在依次执行第2和第3个if判断. 优先执行第一个if判断如何做,请大神赐教. 解决方案 #!/bin/bash for((i=1;i do ? ? if((i%3==0)) ? ? ? ? then ?

《软件测试技术实战:设计、工具及管理》—第1章 1.1节软件测试的基本理论

第1篇 软件测试设计技术 软件测试技术实战:设计.工具及管理 如何把用户的需求转换为软件测试设计,这是软件测试工程师的工作重心所在.本书第一篇通过6个章节来讲述一下如何进行软件测试设计. 本篇共分以下几个章节. 第1章,软件测试的基本知识:首先讲解一些软件测试的基本知识,如果你对软件测试的基本概念已经非常熟悉了,那么就可以简单浏览,甚至跳过本章的内容. 第2章,传统的软件测试的设计方法:本章主要介绍软件测试中最经典的5个黑盒测试方法(等价类/边界值.决策表.状态转换图.决策树和正交测试法)和7个

Shell脚本中判断变量为数字的3种方法_linux shell

方法1:通过expr 计算变量与一个整数值相加,如果能正常执行则为整数,否则执行出错,$?将是非0的值 复制代码 代码如下: expr $args + 0 &>/dev/null 方法2:打印变量通过sed替换的方式,将变量中的数字替换为空,如果执行替换后变量为空,则为整数 复制代码 代码如下: echo $args | sed 's/[0-9]//g' 如果判断负数则再用sed过滤负号 复制代码 代码如下: echo $args | sed 's/[0-9]//g' | sed 's/-/

在Python中使用判断语句和循环的教程_python

条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= 18: print 'your age is', age print 'adult' 根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做. 也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:

do while 循环的执行逻辑

do while 相对于while循环而言,平时用的非常少,因此有一些问题也非常的容易出错. 比如,在do while的循环体中,假如有一个continue,那么你觉得这个continue会跳转到do呢?还是条传到while呢? 答案是跳转到while,直接执行while里边的判断条件