在 IEEE 国际标准中,对软件测试进行了详细的定义:“软件测试是在规定的条件下,使用人工或自动化手段来运行或测试某个系统的过程,其主要的目的是对其是否满足设计要求进行评估的过程”。通俗地说,软件测试就是寻找系统中的缺陷,提高软件质量的过程,也称之为找 BUG。
在这个定义中详细的描述三个维度的内容:软件测试需要在规定条件下进行、软件测试是一个过程、目的是验证系统是否满足客户需求。 (1)软件测试需要在规定条件下进行软件测试需求在规定条件下进行,也就是说软件测试不能是什么情况下都可以测试,必须有一个要求,对应到测试中就是我们经常说的前置条件。
例如:我们测试一部手机(目前情况下手机一般都是不防水的),如果测试时把这个手机放在水里测试,那这样手机肯定会有问题,我们只能放在一般的大气环境下进行测试。所以被测试对象并不是允许所有的环境下进行测试。
在实际工作中,我们写测试用例时,测试用例中有一个字段就是叫前置条件的。 (2)软件测试是一个过程软件测试是一个过程,否则不仅仅是一个动作,所以测试是有一个步骤的,通常我们把这个测试步骤也叫做为软件测试流程。
标准的软件测试流程是:计划与控制、分析与设计、实现与执行、评估与报告、结束活动。当然在实际工作中我们并不是这样定义的,实际的测试过程是:测试计划、测试方案、测试用例、测试执行、测试报告。关于软件测试流程在第 4 章节中会详细介绍。
所以如果要控制测试质量就必须控制测试流程,通过改善测试流程来改进测试质量。 (3)目的是验证系统是否满足客户需求软件测试的目的是验证系统是否满足客户需求,整个研发过程中,开发是以需求为基础开发的,那么我们要验证系统是否达到客户标准,就是验证开发好的系统是否和需求定义是一致的,因为客户的要求是通过系统需求来体现的,只能确定每条需求被正确的实现后才能说明系统达到客户的要1
Chapter
HI,BUGS —— 全面软件测试
求。所以在整个测试过程中有一个测试很重要的步骤是对客户提出的原始需求进行分析,将其变为我们软件测试需求。
测试也是找 BUG 的过程,这个概念显然是狭义的,早期的测试只是找 BUG,但是随着测试的发展,现在的测试不仅仅是为了找 BUG,现在对测试的定位更多的是为了改进研发流程。通过对所发现的缺陷进行分析(即缺陷分析的方法),找到整个研发过程中做得不好的地方,关于缺陷分析的方法在后面的章节中会详细介绍。
广义地说,测试还包括测试经济学、测试心理学以及如何预防缺陷。
测试经济学指测试过程是需要成本的,不能一味追求质量,而忽略成本,应该在成本和质量之间找到一个平衡点,因为随着测试的进行,从理论上讲软件的质量应该会越来越高,但同时付出的成本也会明显增多,并且软件不能及时发布,影响到市场表现。
测试心理学是指测试过程中的心态,在测试过程中业界认为有两种心态:一是测试过程是为了证明系统是存在问题的;二是测试过程是为了证明系统不存在问题的。其实如果单纯地让大家在两者之间做一个选择,那可以说绝大多数是会选择第一种,但是随着测试的进行,测试心态就会发现改变。
例如:一个简单的登录功能,如果已经测试了 5 个小版本(T1 到 T5),一直未发现问题,第 6个小版本的时候,并未对这个功能进行任何修改,这个时候测试工程师就会潜意识认为这个功能是正常的,没有问题,这样就不会验证所有的用例,只会挑其中一部分用例进行验证。但从测试的角度来说,如果不对功能进行完整的验证,是不能确定这个功能就一定不存在问题的。
关于这个测试心态的问题,以前出现一个这样的 BUG,一个软件已经面向市场发布了 V1.5 版本了,并且市场反应还不错,没有什么大问题,以后要对软件进行升级,更新为 V2.0 版本,这个软件有一个新增用户的功能,在新增用户界面有一个选择项是设置用户性别的,是一个下拉列表框,可以选择“男”或“女”,这个新增用户界面在新的版本中没有做过任何的修改,当然包括性别选择项也没有做过任何的修改。此时测试的工程师对性别测试时,就随意地先选择“男”再选择“女”,结果这个功能出现一个问题,如果你新增一个“女”性用户,再新增一个“男”性用户,结果一直无法新增“男”性用户,用户的性别一直为“女”性,这就是典型的测试心态影响了测试质量,后来发现是由开发工程师不经意地修改了性别下拉列表的属性引起的,像这样问题就很难被测试到,因为测试过程中,测试工程师潜意认为功能没有问题,测试的目的就变成了是证明系统不存在问题了,这就是典型的随着测试不断进行,测试心态发生变化的情况。
预防缺陷其实是现在测试遇到的一个新问题,现在我们希望在测试开始之前尽量地去避免一些问题,这就是我们通常说的预防缺陷。预防缺陷是一个系统的工程,需要对测试数据进行详细的分析,这样才能更好的预防缺陷,进而降低修复缺陷的成本。