《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试
目录
1. 测试基础概念
2. 测试方法分类
3. 测试阶段
真题示例:
题目1
题目2
题目3
4. 测试策略
5. 测试用例设计
真题示例:
6. 调试与度量
真题示例:
1. 测试基础概念
- 定义:系统测试是为发现错误而执行程序的过程,成功的测试是发现尚未暴露的错误。
- 测试原则:
- 尽早并持续测试
- 避免由开发人员执行测试
- 设计测试时需明确输入和预期输出
- 包含有效和无效的测试用例
- 检查程序是否完成正确功能,避免多余行为
- 严格遵循测试计划,保存测试用例
2. 测试方法分类
- 静态测试(不运行程序):
- 方法:人工检查、代码审查、代码走查
- 作用:可发现30%-70%的逻辑和编码错误
- 动态测试(运行程序):
- 黑盒测试(功能测试):基于输入输出,不关注代码结构
- 白盒测试(结构测试):基于代码逻辑设计用例
3. 测试阶段
- 单元测试(模块测试):
- 测试对象:独立模块
- 依据:详细设计文档
- 集成测试:
- 测试对象:模块间接口
- 依据:概要设计文档
- 确认测试(验证需求一致性):
- 类型:内部测试、Alpha测试(开发环境)、Beta测试(用户环境)、验收测试
- 系统测试:
- 测试对象:完整系统
- 内容:功能、性能、安全性等
- 配置项测试:验证软件配置项是否符合需求规格说明书(SRS)
- 回归测试:确保变更后原有功能不受影响
真题示例:
题目1
软件确认测试也称为有效性测试,主要验证( )。确认测试计划通常是在需求分析阶段完成的。
A. 系统中各个单元模块之间的协作性
B. 软件与硬件在实际运行环境中能否有效集成
C. 软件功能、性能及其它特性是否与用户需求一致
D. 程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求
题目2
根据用户的参与程度不同,软件确认测试通常包括( )。
A. 黑盒测试和白盒测试
B. 一次性组装测试和增量式组装测试
C. 内部测试、Alpha、Beta和验收测试
D. 功能测试、性能测试、用户界面测试和安全性测试
题目3
软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括( )等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括( )等方法。
A. 边界值分析、逻辑覆盖、基本路径 B. 桌面检查、逻辑覆盖、错误推测
C. 桌面检查、代码审查、代码走查 D. 错误推测、代码审查、基本路径
- 题目1:软件确认测试主要是验证软件功能、性能及其它特性是否与用户需求一致。A选项系统中各个单元模块之间的协作性是集成测试关注的;B选项软件与硬件在实际运行环境中能否有效集成是系统测试中可能涉及的硬件 - 软件集成相关内容;D选项程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求是单元测试关注的。
- 题目2:根据用户参与程度不同,软件确认测试通常包括内部测试、Alpha(在开发环境下,由部分用户参与)、Beta(在用户实际环境下,由大量用户参与)和验收测试(用户最终对软件进行验收)。A选项黑盒测试和白盒测试是按照测试的方法分类;B选项一次性组装测试和增量式组装测试是集成测试的策略;D选项功能测试、性能测试、用户界面测试和安全性测试是软件测试的不同类型,并非按用户参与程度分类。
- 题目3:动态测试通过运行程序发现错误,包括边界值分析、逻辑覆盖、基本路径等方法。静态测试采用人工和计算机辅助静态分析的手段对程序进行检测,包括桌面检查、代码审查、代码走查等方法。逻辑覆盖是动态测试方法,错误推测虽然在测试中会用到,但不是静态测试特有的典型方法。
4. 测试策略
- 自底向上:从底层模块开始,需驱动模块
- 自顶向下:从系统层开始,需桩模块
- 三明治策略:结合自底向上和自顶向下
5. 测试用例设计
- 黑盒测试:
- 黑盒测试用例定义:将程序视为一个黑盒子,仅知晓输入输出,不了解内部代码,据此设计测试用例。
- 等价类划分:依据某种特性对所有数据进行归类,从每类数据中选取一个代表。设计原则为,新测试用例应尽可能多地覆盖未被覆盖的有效等价类,直至所有有效等价类被覆盖;新测试用例应仅覆盖一个未被覆盖的无效等价类,直至所有无效等价类被覆盖。
- 边界值划分:选取每类数据的边界值作为测试用例。边界值一般是范围的两端值,以及在此范围之外且与该范围间隔最小的两个值,如年龄范围0 - 150的边界值为0、150、 - 1、151。
- 错误推测:凭借经验推测可能产生问题的地方,以此作为测试用例进行测试,无固定方法。
- 因果图:通过一个结果反推原因的方法,需根据具体结果具体分析,无固定方法。
- 白盒测试:
- 知道程序的代码逻辑,按照程序的代码语句,来设计覆盖代码分支的测试用例,覆盖级别从低至高分为下面几种:
- 语句覆盖(SC):执行所有语句
- 判定覆盖(DC):覆盖所有判断分支
- 条件覆盖(CC):每个条件取真/假
- 条件判定组合覆盖(CDC):同时满足DC和CC
- 路径覆盖:覆盖所有可行路径(最高级别)
真题示例:
招聘系统要求求职的人年龄在20岁到60岁之间(含),学历为本科、硕士或者博士,专业为计算机科学与技术、通信工程或者电子工程。其中( )不是好的测试用例。
A. (20,本科, 电子工程) B. (18,本科, 通信工程)
C. (18, 大专, 电子工程) D. (25, 硕士, 生物学)
好的测试用例应该尽可能覆盖各种边界情况、有效等价类和无效等价类。招聘系统要求年龄在20 - 60岁(含),学历为本科、硕士或博士,专业为计算机科学与技术、通信工程或电子工程。
- (20,本科, 电子工程) 是完全符合招聘系统要求的有效测试用例。
- (18,本科, 通信工程) 年龄不满足要求,属于无效等价类测试用例,可测试年龄边界情况。
- (18, 大专, 电子工程) 年龄和学历都不满足要求,而新测试用例应仅覆盖一个未被覆盖的无效等价类。
- (25, 硕士, 生物学) 专业不满足要求,属于无效等价类测试用例,可测试专业的无效情况。
以下关于测试的叙述中,正确的是( )。
A.实际上,可以采用穷举测试来发现软件中的所有错误
B.错误很多的程序段在修改后错误一般会非常少
C.测试可以用来证明软件没有错误
D.白盒测试技术中,路径覆盖法往往能比语句覆盖法发现更多的错误
- 穷举测试也叫完全测试,即把程序所有可能的执行路径都检查一遍的测试。但由于软件系统的复杂性和输入的多样性,在实际中几乎不可能采用穷举测试来发现软件中的所有错误
- 错误很多的程序段往往存在更多的潜在问题和隐藏的逻辑错误,即使进行了修改,由于代码结构本身的复杂性和可能存在的耦合性等问题,修改后不一定错误就非常少,甚至可能引入新的错误
- 测试的目的是尽可能地发现软件中的错误,而不能证明软件没有错误。即使经过大量的测试没有发现错误,也不能说明软件就没有潜在的错误
- 白盒测试中,语句覆盖是指设计足够的测试用例,使得程序中的每条语句至少被执行一次;路径覆盖是指设计足够的测试用例,覆盖程序中所有可能的路径。路径覆盖比语句覆盖的覆盖程度更高,能测试更多的程序逻辑,往往能比语句覆盖法发现更多的错误
采用白盒测试方法对下图进行测试,设计了4个测试用例:①(x=0, y=3),②( x=1, y=2),③(x=-1, y=2),④(x=3,y=1)。至少需要测试用例①②才能完成(35)覆盖,至少需要测试用例①②③或①②④才能完成(36)覆盖。
A. 语句 B. 条件 C. 判定/条件 D. 路径
A. 语句 B. 条件 C. 判定/条件 D. 路径
(35)语句覆盖
语句覆盖是指设计足够的测试用例,使得程序中的每条语句至少被执行一次。
- 对于测试用例①
(x = 0, y = 3)
:- 第一个判断条件
(x = 0) && (y > 2)
为真,执行语句A
。
- 第一个判断条件
- 对于测试用例②
(x = 1, y = 2)
:- 第一个判断条件
(x = 0) && (y > 2)
为假,进入第二个判断条件(x < 1) || (y = 1)
,此条件也为假,执行语句B
。 通过测试用例①和②,程序中的语句A
和语句B
都能被执行到,满足语句覆盖。
- 第一个判断条件
(36)判定/条件覆盖
判定/条件覆盖要求设计足够的测试用例,使得判断中每个条件的所有可能取值至少出现一次,并且每个判定本身的所有可能判定结果(真/假)也至少出现一次。
- 对于测试用例①
(x = 0, y = 3)
:- 第一个判断条件
(x = 0) && (y > 2)
中,x = 0
为真,y > 2
为真,整个判定为真。
- 第一个判断条件
- 对于测试用例②
(x = 1, y = 2)
:- 第一个判断条件
(x = 0) && (y > 2)
中,x = 0
为假,y > 2
为假,整个判定为假;第二个判断条件(x < 1) || (y = 1)
中,x < 1
为假,y = 1
为假,整个判定为假。
- 第一个判断条件
- 对于测试用例③
(x = -1, y = 2)
:- 第一个判断条件
(x = 0) && (y > 2)
为假,进入第二个判断条件(x < 1) || (y = 1)
,其中x < 1
为真,y = 1
为假,整个判定为真。 或者测试用例④(x = 3, y = 1)
: - 第一个判断条件
(x = 0) && (y > 2)
为假,进入第二个判断条件(x < 1) || (y = 1)
,其中x < 1
为假,y = 1
为真,整个判定为真。
- 第一个判断条件
6. 调试与度量
- 调试:定位错误原因并修复,方法包括:
- 蛮力法、回溯法、原因排除法(演绎法、归纳法、二分法)
- 软件度量:
- 软件的属性分类:
- 外部属性:面向管理者和用户,可直接测量,一般表现为性能指标。
- 内部属性:属于软件产品本身的属性,例如可靠性等,只能通过间接方式测量。
- McCabe度量法:
- 定义:又称为环路复杂度。
- 计算方法:对于有向图,若有向边数为m,节点数为n,则环路复杂度为m - n + 2。
- 记忆与应用要点:m和n含义不能混淆,可借助最简单的环路作为特殊值来记忆公式;对于程序流程图,每个分支边(连线)是一条有向边,每条语句(语句框)是一个顶点。
- 软件的属性分类:
真题示例:
下图用白盒测试方法进行测试,图中有( )条路径,采用McCabe度量计算该程序图的环路复杂性为( )
A、3 B、4 C、5 D、6
A、3 B、4 C、5 D、6
- 计算图中的路径数量
- 路径是从开始节点到结束节点的一条可执行的路线。
- 路径1:开始→语句1→判断1(N)→结束。
- 路径2:开始→语句1→判断1(Y)→语句2→判断2(N)→语句3→语句6→结束。
- 路径3:开始→语句1→判断1(Y)→语句2→判断2(Y)→判断3(N)→语句5→语句6→结束。
- 路径4:开始→语句1→判断1(Y)→语句2→判断2(Y)→判断3(Y)→语句4→语句5→语句6→结束。
- 所以图中有4条路径。
- 采用McCabe度量计算该程序图的环路复杂性
- V(G)=E - N+2P(E是流图中边的数量,N是流图中节点的数量,P是强连通分量的数量,对于单连通图,P = 1)。
- 判断节点和语句节点作为流图节点,连接它们的线作为流图的边。数得节点数量N = 11,边的数量E = 13。
- 根据公式V(G)=E - N + 2P,因为是单连通图P = 1,所以V(G)=13 - 11+2×1=4。
- 也可以用另一种方法,即V(G)=判定节点数 + 1,图中有3个判定节点(判断1、判断2、判断3),所以V(G)=3 + 1=4。