一、引论

1.1 软件测试的必要性

现代社会高度依赖软件,软件出现错误会导致各种使用上的不愉快,甚至产生非常严重的后果。进行软件测试就是为了要保证软件质量,越早发现软件错误解决软件错误的成本就越低。

1.2 软件测试的概念

使用各种手段运行或者测试软件,以使其满足需求或使用的需要。
风险评估观点的软件测试:不断发现软件中存在的风险,使最终发布的产品风险降到最低。在实际开发中侧重用户常用的20%功能,剩余的80%功能降低优先级测试。
经济观点的软件测试:以最小的经济代价获取最高的软件质量。

1.3 质量保证

产品的质量不能完全依靠测试来构建,也需要通过把控过程来进行保证。软件测试和质量保证不能完全划等号。

1.4 软件测试与开发

软件测试应该贯穿于开发过程之中,也可以采用测试驱动开发的思想。
软件质量保证(SQA)与软件测试相辅相成,有包含也有交叉。SQA指导、监督软件测试的计划和执行,软件测试是SQA的重要手段之一。SQA是一项管理工作,侧重评审和监控产品,测试是技术性工作,侧重对产品的评估和验证。

二、软件测试的相关概念

2.1 软件质量

软件质量的定义:软件产品满足规定的和隐含的与需求能力有关的全部特征和特性,包括:软件产品质量满足用户要求的程度,软件各种属性的组合程度,用户对软件产品的综合反应程度,软件在使用过程中满足用户需求的程度。
软件质量分为内部质量,外部质量和使用质量,内部质量和外部质量合称为产品质量。

产品质量是指在特定的使用条件下产品满足明示的和隐含的需求所具备能力的全部固有特性。
使用质量主要针对用户的使用过程。

2.2 软件缺陷

软件缺陷的定义:
产品内部看,软件缺陷是指软件在开发或维护过程中产生的各种问题;
产品外部看,软件缺陷是系统需要实现的某种功能的违背。
软件缺陷的体现(课本P22)
软件缺陷的测试判断准则:测试预言(Test Oracle)
软件缺陷的产生:技术问题,软件本身,团队工作等。
软件缺陷的构成:主要是需求定义。
修复软件缺陷的代价:缺陷发现越迟成本越高,并且成本几乎是线性增长。

2.2 软件测试的分类

测试层次:单元测试、集成测试、接口测试、系统测试、验收测试
测试方法:动态测试、静态测试;黑盒测试、白盒测试、灰盒测试。
测试类型:功能测试、类型测试、性能测试等。

2.3 静态测试和动态测试

静态测试包括对软件产品的需求和设计规格说明书的评审,对程序代码的审查和静态分析等。
动态测试是真正通过运行程序发现错误,通过观察系统运行过程获取数据,或者是通过测试用例检查输入输出,来判断系统是否存在问题。
软件评审是对软件元素或项目状态的一种评估手段,以确定是否与计划的结果保持一致,并使其得到改进。软件评审的形式有互为评审,走查和会议评审。软件评审可以分为需求评审,设计和代码评审等。
静态分析是对模块的源代码进行研读,查找错误或收集度量数据,并不需要对代码进行仿真运行。
验证是检验软件是否已经正确地实现了产品规格说明书实现的系统功能和特性,有效性确认要确认软件是否真正能满足用户的需求。

2.4 主动测试和被动测试

主动测试是主动向被测试对象发送数据,或者借助数据和事件驱动被测试对象的行为,来验证被测试对象的反映或者输出结果。
被动测试则是让软件自己运行,通过监控软件状态来获得软件运行的数据。

2.5 黑盒测试和白盒测试

白盒测试就是已知产品的内部运行过程,测试程序中的每条通路都是否可以正确工作,内部动作和运行是否符合要求等。
黑盒测试就是在软件内部未知的情况下,检查系统功能是否按照规格说明书正确地工作等。
在实际测试中,测试方法可以进行两两结合,以取得更好的测试效果。

2.6 软件测试的层次

单元测试、面向接口的集成测试、系统测试、面向业务的验收测试。

2.7 软件测试工作范畴

测试分析、测试策略制订、测试计划、测试设计、测试执行、测试结果与过程评估。

三、软件测试方法

3.1 基于直觉的测试方法

Ad-hoc测试方法和ALAC测试方法

Ad-hoc测试方法强调测试人员根据自己的经验,不受测试用例的舒服,放开地进行各种测试。
ALAC测试方法是基于客户使用产品的知识开发出的测试方法,针对20%常用的部分进行测试。

错误推测法

测试者根据自己的经验、直觉和知识来发现软件错误,并借此推测更多可能存在的错误,从而有针对性地进行测试。

3.2 基于输入域的方法

等价类划分方法

把所有可能的输入数据划分为若干个等价类,从每个等价类选择一定的代表性数据进行测试,借此来替代近似无限的数据。
有效等价类就是指数据输入完全符合程序输入的规格说明,可以用来测试程序是否满足规格说明规定的功能和特性;无效等价类与无效等价类的概念相反,可以用来测试程序的容错性,检验程序对异常数据输入的处理情况。

边界值分析法

边界值分析法就是在某个输入输出变量范围的边界上,验证系统功能是否正常运行的测试方法。
边界值选取的技巧如下:
(1)在输入条件规定了值的范围时,选取刚刚达到边界的值和刚刚超过边界的值;
(2)在输入条件限定了值的个数时,用最大个数,最小个数,比最小个数少一个,比最大个数多一个测试;
(3)如果限定了输入的有序集合,则用集合中的第一个数和最后一个数选取为测试用例。

3.3 基于组合以及优化的方法

上面的方法只适用于单因素、单变量的数据分析,对于多因素、多变量的输入情况需要进行组合分析。