一、引论

1.1 软件测试的必要性

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

1.2 软件测试的概念

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

1.3 质量保证

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

1.4 软件测试与开发

软件测试应该贯穿于开发过程之中,也可以采用测试驱动开发的思想。

二、软件测试的相关概念

2.1 软件缺陷

产品内部看,软件缺陷是指软件在开发或维护过程中产生的各种问题;
产品外部看,软件缺陷是系统需要实现的某种功能的违背。

2.2 软件测试的分类

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

2.3 静态测试和动态测试

静态测试包括对软件产品的需求和设计规格说明书的评审,对程序代码的审查和静态分析等。动态测试是真正通过运行程序发现错误,通过观察系统运行过程获取数据,或者是通过测试用例检查输入输出,来判断系统是否存在问题。

2.4 主动测试和被动测试

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

2.5 黑盒测试和白盒测试

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

2.6 软件测试的层次

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

2.7 软件测试工作范畴

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

三、软件测试方法

3.1 基于直觉的测试方法

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

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

错误推测法

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

3.2 基于输入域的方法

等价类划分方法

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

边界值分析法

边界值分析法就是在某个输入输出变量范围的边界上,验证系统功能是否正常运行的测试方法。

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

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