软件评测师软考备战:软件测试基础与典型考题解析
1 软件测试概述与基本概念
软件测试是软件生命周期中的关键环节,它不仅是发现缺陷的过程,更是对软件质量进行验证和评估的系统性活动。根据国家标准GB/T 25000.10-2016,软件测试被定义为"通过运行软件系统或组件,手动或自动地验证它是否满足规定需求或识别预期结果与实际结果之间差异的过程"。
1.1 测试基本原则
软件测试遵循几个核心原则:
- 测试显示缺陷的存在:测试可以表明缺陷存在,但不能证明系统完全没有缺陷
- 穷尽测试是不可能的:除非常 trivial 的情况,对所有输入组合进行测试是不现实的
- 早期测试:测试活动应尽早开始,并贯穿整个软件开发周期
- 缺陷集群性:少数模块通常包含大部分缺陷(符合Pareto原则)
- 杀虫剂悖论:重复相同的测试用例会发现越来越少的新缺陷
- 测试依赖于上下文:不同的软件类型需要不同的测试方法
- 无错误谬论:发现和修复缺陷本身并不能确保系统满足用户需求
1.2 测试级别与类型
软件测试按照执行阶段可分为多个级别:
单元测试:针对软件最小可测试单元(通常是函数、方法或类)进行的测试
集成测试:测试模块之间的接口和交互
系统测试:在完整集成系统上测试,验证系统是否满足需求规格
验收测试:由用户或客户执行,确认系统是否满足合同要求
按照测试技术可分为:
黑盒测试:关注功能,不考虑内部实现
白盒测试:基于内部代码结构和逻辑的测试
灰盒测试:结合黑盒和白盒方法的混合方式
2 黑盒测试技术与应用
黑盒测试又称功能测试或行为测试,它将软件视为一个"黑盒子",不关心内部结构,只关注输入与输出之间的关系。
2.1 等价类划分法
等价类划分是将输入域划分为若干子集,每个子集中的元素在测试中被视为等效的。这样可以显著减少测试用例数量而不影响测试效果。
典型考题:
某系统要求输入年份范围为1900-2100,使用等价类划分法设计测试用例。
解析:
有效等价类:1900≤年份≤2100
无效等价类:年份<1900,年份>2100
测试用例:
- 有效:2000(有效等价类代表)
- 无效:1899(小于下限)
- 无效:2101(大于上限)
2.2 边界值分析法
边界值分析关注输入域的边界条件,因为经验表明边界附近更容易出现错误。
典型考题:
某函数要求输入参数x为[10, 50]的整数,请用边界值分析法设计测试用例。
解析:
边界值包括:最小值、略高于最小值、正常值、略低于最大值、最大值
测试用例:x=10, x=11, x=25, x=49, x=50
2.3 决策表测试法
决策表适用于具有多个逻辑条件组合的业务规则测试。
典型考题:
某信用卡审批规则:如果申请人年收入≥5万且信用评分≥700,则批准;如果年收入≥5万但信用评分<700,需要进一步审核;如果年收入<5万,拒绝。请构建决策表。
解析:
条件/动作 | 规则1 | 规则2 | 规则3 |
---|---|---|---|
年收入≥5万 | Y | Y | N |
信用评分≥700 | Y | N | N |
批准 | ✓ | ||
进一步审核 | ✓ | ||
拒绝 | ✓ |
3 白盒测试技术与应用
白盒测试基于代码内部结构设计测试用例,主要关注程序逻辑覆盖。
3.1 代码覆盖标准
语句覆盖:确保程序中每条语句至少执行一次
分支覆盖:确保每个判断条件的真、假分支至少执行一次
条件覆盖:确保每个判断条件中的每个可能取值至少执行一次
路径覆盖:确保程序中所有可能的执行路径至少执行一次
覆盖强度:路径覆盖 > 条件覆盖 > 分支覆盖 > 语句覆盖
典型考题:
对以下代码片段设计满足语句覆盖和分支覆盖的测试用例:
if (x > 0 && y > 0) {
z = x + y;
} else {
z = x - y;
}
解析:
语句覆盖:需要执行if和else两个分支中的语句
测试用例1:x=1, y=1 (执行if分支)
测试用例2:x=0, y=0 (执行else分支)
分支覆盖:需要使条件(x>0 && y>0)为真和为假
测试用例1:x=1, y=1 (条件为真)
测试用例2:x=0, y=0 (条件为假)
3.2 基本路径测试法
基本路径测试通过计算程序环形复杂度来确定基本路径数量,并确保这些路径都被测试。
环形复杂度计算方法:
- V(G) = 边数 - 节点数 + 2
- V(G) = 判断节点数 + 1
- V(G) = 区域数
典型考题:
计算以下代码的环形复杂度并确定基本路径数量:
1. if (a > b) {
2. c = a;
3. } else {
4. c = b;
5. }
6. while (c > 0) {
7. print(c);
8. c--;
9. }
解析:
判断节点:if语句(1),while循环(6)
环形复杂度 V(G) = 判断节点数 + 1 = 2 + 1 = 3
基本路径数为3,需要设计3个测试用例覆盖所有基本路径
4 测试用例设计实战演练
综合应用题
某电商平台优惠券使用规则如下:
- 订单金额满100元可使用优惠券
- 黄金会员无金额限制可使用优惠券
- 每人每天限使用3张优惠券
- 优惠券不能与其他优惠同时使用
请综合运用等价类划分、边界值分析和决策表技术设计测试用例。
解析步骤:
-
识别输入条件:
- 订单金额(连续数值)
- 会员类型(黄金会员、非黄金会员)
- 今日已用优惠券数量(0,1,2,3,>3)
- 是否使用其他优惠(是、否)
-
等价类划分:
- 订单金额:有效[100,∞),无效[0,100)
- 会员类型:有效{黄金会员,非黄金会员}
- 已用数量:有效{0,1,2},无效{3,>3}
- 其他优惠:有效{否},无效{是}
-
边界值分析:
- 订单金额边界:99,100,101
- 已用数量边界:2,3,4
-
决策表构建:
考虑所有条件组合,但实际有效规则只有部分组合可行 -
测试用例设计:
- 正常情况:黄金会员,今日已用0张,无其他优惠(应成功)
- 边界情况:非黄金会员,今日已用2张,无其他优惠(应成功)
- 异常情况:非黄金会员,今日已用0张,无其他优惠(应失败)
5 备考建议与学习策略
- 理解而非记忆:软件测试需要理解各种方法的原理和适用场景,而非简单记忆概念
- 实践结合理论:在实际项目中尝试应用测试技术,加深理解
- 做真题分析:研究历年真题,了解考点分布和出题思路
- 建立知识体系:将零散知识点组织成系统化的知识网络
- 注重案例分析:软考下午题多为案例分析,需要培养实际问题解决能力
典型选择题:
下列关于软件测试的描述中,错误的是()
A. 测试的目的是发现错误
B. 测试可以证明软件没有错误
C. 测试不能无限进行,需要终止
D. 测试需要根据风险分析确定优先级
解析:正确答案是B。根据测试的基本原则,测试只能表明缺陷存在,不能证明软件完全没有错误。
通过本文的学习,考生应掌握软件测试的基本概念和常用技术方法,并能够灵活运用这些方法设计测试用例。下一篇我们将深入探讨测试过程管理、缺陷管理以及测试自动化等相关主题。
本文仅供参考,具体备考请以官方指南和教材为准。版权归作者所有,未经许可不得转载。