系统测试

系统测试:为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试

测试方法

静态测试

指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。包括桌前检查、代码审查、代码走查的方式。使用这种方法能够有效地发现30%-70%的逻辑设计和编码错误

静态分析五个阶段:

1、控制流分析:找出并突出显示那些带有多重入口和出口的循环以及不可达的代码片段

2、数据使用分析:突出程序中的变量使用情况

3、接口分析:检查子程序过程说明和他们的使用的一致性

4、信息流分析:找出输入变量和输出变量的一致性关系

5、路径分析:找出程序中所有可能的路径,并画出此路径的执行语句

动态测试

指在计算机上实际运行程序进行软件测试,一般采用白盒测试和黑盒测试方法(还有灰盒和自动化)

黑盒测试

黑盒测试关注于测试软件的功能(功能性测试),而不考虑内部实现细节。测试人员不需要知道代码的具体结构,而是根据软件的需求规格和功能来设计测试用例

白盒测试

白盒测试关注于测试软件的内部逻辑和代码结构(结构性测试),以确保代码按照预期方式执行。测试人员需要了解软件的代码,以设计测试用例,以覆盖不同的代码路径和分支情况,以及验证代码是否满足质量标准和最佳实践

测试阶段

单元测试

也称为模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或OO软件中的类(统称为模块),测试依据是软件详细设计说明书。

驱动模块用来模拟被测试模块的上一级模块,相当于被测模块的主程序

桩模块(sub)指模拟被测模块所调用的模块,不是产品软件的组成部分

集成测试

目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。测试依据是软件概要设计文档

系统测试

测试对象是完整的、集成的计算机系统;测试的目的是在真实系统工作环境下,验证完成的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。测试依据是用户需求或开发合同。主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。

功能测试主要采用黑盒测试方法;性能测试主要指标有响应时间、吞吐量、并发用户数和资源利用率等。系统测试通常由独立的测试团队执行,他们并不直接参与软件的开发过程

安全测试:检测系统的安全机制和保密措施是否完善,检测系统的防范能力

可靠性测试:平均失效时间MTBF是否超过规定时限,故障停机时间MTTR在一年中不应超过多少时间

恢复测试:检测系统的容错能力

性能测试:满足系统设计方案说明书对系统的性能要求

强度测试:是在系统资源特别低的情况下考查软件系统的极限运行情况

负载测试:用于测试超负荷环境中程序是否能够承担,确定在各种工作负载下系统的性能,测试当负载逐渐增加的时候,系统各项性能指标的变化

压力测试:通过确定系统的瓶颈或不能接收的性能点,来获得系统能够提供的最大服务级别测试,可以和负载测试结合进行

容量测试:并发测试,主要用于测试系统可同时处理的在线最大用户数量

确认测试

主要用于验证软件的功能、性能和其他特性是否与用户需求一致。测试依据是需求文档,确认测试是软件或产品开发的最后一个阶段,在系统测试完成后进行。它的主要目标是确保软件或产品已经满足最终用户的期望和需求。在确认测试中,最终用户(或其代表)将根据他们的实际使用情境,验证软件是否符合他们的业务流程和预期目标根据用户的参与程度,通常包括以下类型:

内部确认测试:主要由软件开发组织内部按照SRS进行测试。

Alpha测试:用户在开发环境下进行测试。

Beta测试:用户在实际使用环境下进行测试,通过改测试后,产品才能交付用户。

验收测试:针对SRS,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测软件系统已通过系统测试。

回归测试

测试目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性(不能把其他好的模块改错)

测试用例设计

黑盒测试用例

将程序看做一个黑盒子,只知道输入输出,不知道内部代码,由此设计出测试用例,分为下面几类:

等价类划分:通过将输入值分成不同的类别,从而减少测试用例的数量,同时确保测试覆盖各种可能的情况。这样可以更高效地测试软件,而不必为每个可能的输入值都编写一个测试用例。会分为有效等价类和无效等价类,都要设计测试用例

边界值划分:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值

错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方,作为测试用例进行测试。

因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法

白盒测试用例

知道程序的代码逻辑,按照程序的代码语句,来设计覆盖代码分支的测试用例,覆盖级别从低至高分为下面几种:

语句覆盖SC:逻辑代码中的所有语句都要被执行一遍,覆盖层级最低,因为执行了所有的语句,不代表执行了所有的条件判断

判定覆盖DC:逻辑代码中的所有判断语句的条件的真假分支都要覆盖一次

条件覆盖CC: 针对每一个判断条件内(if)的每一个独立条件内都要执行一遍真假

条件判定组合覆盖CDC:同时满足判定覆盖和条件覆盖

路径覆盖:逻辑代码中的所有可行路径都覆盖了,覆盖层级最高

调试

测试是发现错误,调试是找出错误的代码和原因

调试需要确定错误的准确位置;确定问题的原因并设法改正;改正后要进行回归测试。

调试的方法有:蛮力法、回溯法(从出错的地方开始,向回找)、原因排除法(找出所有可能的原因,逐一进行排除)。

软件的两种属性:外部属性指面向管理者和用户的属性,可直接测量,一般为性能指标。内部属性指软件产品本身的的属性,如可靠性等,只能间接测量。

McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2.

注意m和n代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。