【软考之系统架构师】软件测试章节内容考点整理

一、测试基础知识

1、测试原则和方法

  • 核心定义:系统测试是为发现错误而执行程序的过程,成功的测试是发现至今未发现错误的测试(注意:测试不能保证软件100%无错)
  • 关键原则:
    • 尽早持续:应贯穿整个生命周期,如V模型可在无代码时设计概念测试用例
    • 回避原则:避免由原开发人员执行测试(常识性原则)
    • 双要素设计:测试方案需同时包含输入数据和预期输出结果(测试用例表格需含编号/输入/预期/实际结果比对)
    • 用例覆盖:必须包含有效用例(验证功能正确性)和无效用例(验证程序健壮性)
    • 功能边界:需验证程序"做该做的事"和"未做不该做的事"(类似需求跟踪概念)
    • 可复用性:测试用例应可重复使用或追加测试(需妥善保存测试资产)

2、测试方法

分类标准:以程序是否运行为界,分为静态测试(不运行)和动态测试(运行)

2.1 静态测试

  • 实施手段:
    • 人工检测:通过人工阅读分析代码
    • 工具辅助:使用Coverity等静态分析工具
  • 具体方法:
    • 桌前检查:对照文档直接分析代码逻辑
    • 代码审查:组织技术专家会议审查代码
    • 代码走查:程序员模拟计算机执行流程(需提供测试用例,人工跟踪变量状态变化)
  • 检测效果:能发现30%-70%的逻辑设计和编码错误

2.2 动态测试

  • 基本形式:实际运行程序进行测试(常见于测试人员执行可执行文件)
  • 方法谱系:包含黑盒、白盒、灰盒(黑白盒结合,非考点)

1)黑盒测试

  • 测试视角:将软件视为"黑盒子"(看不见内部代码结构)
  • 测试依据:完全依赖功能需求规格说明书
  • 典型特征:
    • 测试人员无需了解代码实现
    • 主要验证功能是否符合预期(功能性测试)
    • 测试用例设计基于输入输出关系

2)白盒测试

  • 测试视角:将软件视为"白盒子"(可查看代码内部结构)
  • 测试依据:需要阅读和理解程序代码
  • 典型特征:
    • 需根据代码逻辑设计测试用例
    • 强调路径覆盖(每个判断分支生成两个用例)
    • 能遍历所有代码路径(结构性测试)
  • 对比记忆:
    • 黑盒:功能验证,测试人员视角
    • 白盒:结构验证,开发人员视角

3、测试阶段

1)单元测试
  • 测试对象: 可独立编译的程序模块、软件构件或面向对象软件中的类(统称为模块)
  • 测试依据: 软件详细设计说明书
  • 执行者: 理论上不应由程序员完成,但实际开发中常由程序员执行
  • 特点: 针对单个功能模块进行测试,是测试的最小单位
2)集成测试
  • 测试目的: 检查模块之间及模块与已集成软件间的接口关系,验证是否符合设计要求
  • 测试依据: 软件概要设计文档
  • 测试过程: 逐步将单元测试通过的模块集成为完整系统
  • 与单元测试关系: 单元测试是集成测试的前提条件
3)确认测试
  • 核心目的: 验证软件功能、性能及其他特性是否与用户需求一致
  • 测试依据: 需求规格说明书(SRS)
  • 分类:
    • 内部确认测试: 开发组织内部按SRS进行的测试
    • Alpha测试: 用户在开发环境下进行的测试
    • Beta测试: 用户在实际使用环境下进行的测试(通过后才能交付)
    • 验收测试: 交付前以用户为主进行的最终测试
  • 测试对象: 完整的、集成的计算机系统
  • 注意事项: 验收测试前必须确认系统已通过系统测试

4)系统测试
  • 测试对象: 完整的、集成的计算机系统
  • 测试目的: 在真实系统环境下验证软件配置项能否正确连接系统
  • 测试依据: 用户需求或开发合同
  • 主要内容:
    • 功能测试(主要采用黑盒测试方法)
    • 性能测试(关注响应时间、吞吐量等指标)
    • 健壮性测试
    • 用户界面测试
    • 安全性测试
    • 安装与反安装测试
  • 与确认测试关系: 系统测试应在确认测试之前进行
5)配置项测试
  • 测试对象: 软件配置项
  • 测试目的: 检验软件配置项与SRS的一致性
  • 前提条件: 被测软件配置项已通过单元测试和集成测试
6)回归测试
  • 测试目的:
    • 验证变更部分的正确性
    • 确保变更不影响原有功能
  • 重要性: 防止修改一个bug时引入新的问题
  • 测试重点: 不仅要验证bug是否修复,更要检查是否影响其他功能

4、测试策略

  • 自底向上:
    • 从底层模块开始测试,需要驱动程序
    • 优点:较早验证底层模块
  • 自顶向下:
    • 先测试整个系统,需要桩程序
    • 优点:较早验证系统主要控制点
  • 三明治:
    • 结合自底向上和自顶向下
    • 优点:兼具两者优势
    • 缺点:测试工作量大

真题练习:

答案:C C A C 

二、测试用例的设计

1、 黑盒测试用例

  • 黑盒测试定义:不关注内部结构,基于输入输出设计测试用例
  • 主要测试方法:边界值划分、等价类划分、错误推测、因果图
  • 重点考核方法:边界值划分和等价类划分(规范化可考核)
  • 错误推测特点:基于测试人员经验,无固定方法
  • 因果图原理:通过结果反推可能原因
  • 非考核方法:错误推测和因果图(纯定义难以设计具体用例)
  • 等价类划分🌟🌟🌟
    • 等价类定义:将数据按照某种特性进行归类,同一类数据具有相同处理方式。
    • 等价类划分目的:通过选取代表性数据减少测试用例数量,提高测试效率。
    • 有效等价类:符合输入要求的正确数据集合(如成绩0-100分)。
    • 无效等价类:不符合输入要求的错误数据集合(如成绩负分或>100分)。
    • 测试用例设计原则1:新用例应尽可能覆盖多个未被覆盖的有效等价类。
    • 测试用例设计原则2:无效等价类用例每次只能覆盖一个无效类(便于定位错误原因)。
    • 实例说明:成绩等级划分(优≥90,良80-89,及格60-79,不及格<60)形成4个有效等价类。
    • 应用场景:适用于输入条件存在明确分类边界的情况(如学生录取条件验证)。
  • 边界值划分
    • 边界值定义:将每类边界值作为测试用例的方法。
    • 边界值范围:通常包括范围的两端值及范围外间隔最小的两个值。
    • 边界值示例:年龄范围

      0≤age≤1500 \leq age \leq 1500≤age≤150的边界值为

      0,150,−1,1510,150,-1,1510,150,−1,151。

    • 边界值数量:每个范围通常需要设计4个边界测试用例。
    • 边界值条件:测试值必须严格在边界外(如

      −1-1−1和151151151)。

    • 整数假设:示例基于输入值为整数的前提(无小数)。

2、白盒测试用例

  • 白盒测试用例定义:基于代码结构分析的测试用例设计方法
  • 覆盖概念:白盒测试的核心是通过不同级别的代码路径覆盖
  • 测试目标:确保代码的所有执行路径都被测试用例覆盖
  • 覆盖级别:从低到高分为多种级别,影响测试的完备性
  • 考试重点:课堂讲解五种主要的覆盖方法
  • 实际分类:白盒测试共有七八种覆盖方法,课堂简化讲解
  • 覆盖级别差异:覆盖级别越高,测试正确率和覆盖率越好

  • 语句覆盖
    • 语句覆盖定义:指逻辑代码中所有语句都被执行一遍的测试方法。
    • 覆盖层级特征:语句覆盖是覆盖层级中最低的一种。
    • 语句类型:包括赋值语句和判断语句等代码结构。
    • 测试用例数量:完成语句覆盖通常只需要一个测试用例。
    • 执行路径方法:通过顺着代码流程图箭头方向画路径即可完成覆盖。
    • 覆盖确认条件:当所有语句框(包括赋值和判断)都被执行时即完成语句覆盖。
    • 覆盖局限性:执行所有语句不代表执行了所有判断条件。
  • 判定覆盖
    • 判定覆盖定义:指代码中所有判断语句的真假分支都要覆盖一次。
    • 覆盖必要性:即使判断分支没有语句,也需要覆盖以避免潜在异常。
    • 判定覆盖目标:确保每个判断条件的真分支和假分支都被执行。
    • 测试用例数量:完成判定覆盖至少需要两个测试用例。
    • 用例设计原则:一个用例覆盖真分支和假分支,另一个用例覆盖假分支和真分支。
    • 用例非唯一性:测试用例的具体路径可以灵活设计,只要满足覆盖要求即可。
    • 判定覆盖与语句覆盖区别:判定覆盖关注判断分支,语句覆盖关注代码行执行。
  • 条件覆盖🌟🌟
    • 条件覆盖定义:针对判定语句中的每个独立条件,要求其真分支和假分支都至少执行一次
    • 判定与条件区别:判定覆盖针对整个判断语句,条件覆盖针对判断语句中的每个独立子条件
    • 条件覆盖示例:if(y>1 && z=0)包含两个独立条件,需分别测试y>1和z=0的真假情况
    • 测试用例设计:通过x=1/y=2/z=0和x=2/y=1/z=1两组输入可覆盖四个条件的真假组合
    • 路径覆盖情况:条件覆盖可能不包含所有判定路径,如示例中第二个判定的假分支未被覆盖
    • 覆盖层级关系:条件覆盖比判定覆盖更细致,但满足条件覆盖不一定满足判定覆盖
    • 验证方法:检查每个独立条件的真假分支是否都被执行,而非仅关注整体判定结果
  • 条件判定组合覆盖
    • 条件判定组合覆盖定义:同时满足判定覆盖和条件覆盖的测试标准
    • 判定覆盖要求:测试用例需覆盖所有判定的真和假分支
    • 条件覆盖要求:测试用例需覆盖所有条件的真和假取值
    • 验证方法示例:通过变量x、y、z的真假取值组合验证覆盖情况
    • 判定路径确认:需画出执行路径确认所有判定分支被覆盖
  • 路径覆盖
    • 路径覆盖定义:覆盖层级最高的测试覆盖方法,关注代码中所有可能的执行路径。
    • 路径与语句区别:路径指代码执行流中的完整线路(从开始到结束的走法),语句指具体代码块(带框部分)。
    • 路径覆盖特征:需覆盖所有不同线路组合(如四条独立路径),而非仅遍历所有线段。
    • 常见混淆点:路径覆盖常与语句覆盖、判定覆盖/条件覆盖组合考查。
    • 路径确认方法:通过分析从开始到结束的所有可能走法(如直通、分支组合等)确定路径数量。
    • 关键注意事项:路径覆盖不等于简单遍历所有线段,需考虑不同执行序列的组合情况。

考试真题分析:

答案:C D 

说明:在有效测试时应该尽可能多的覆盖所有有效条件

          无效测试只能覆盖一个无效等价类,以免无法区别是哪个造成的

1) 例题:测试用例判断
  • 等价类测试定义:将输入数据划分为有效等价类和无效等价类进行测试的方法
  • 有效测试用例特征:应尽量覆盖多个有效等价类
  • 无效测试用例原则:每次只能覆盖一个无效等价类以便定位错误
  • 测试用例判断标准:无效用例覆盖多个无效类会导致错误定位困难
  • 例题解析方法:通过分析年龄、学历、专业三个条件的满足情况判断用例优劣
  • 错误用例示例:同时违反年龄和学历要求的用例属于不良测试用例
2) 例题:测试说法判断
  • 穷举测试局限性:无法发现软件中所有错误
  • 错误修改效果:错误多的程序段修改后错误不一定减少
  • 测试证明能力:测试只能证明错误存在,不能证明无错误
  • 白盒测试覆盖度:路径覆盖法比语句覆盖法发现更多错误
  • 回归测试必要性:修改错误可能引入新错误

答案:

3) 例题:白盒测试覆盖情况
  • 白盒测试覆盖类型:语句覆盖、判定覆盖、条件覆盖、路径覆盖
  • 覆盖优先级原则:取最高覆盖级别(如路径覆盖已包含语句覆盖)
  • 测试用例分析方法:通过执行路径判断覆盖级别
  • 语句覆盖确认条件:所有可执行语句至少执行一次
  • 判定覆盖确认条件:每个判断的真假分支至少执行一次
  • 条件覆盖确认条件:每个条件的真假值至少执行一次
  • 路径覆盖确认条件:程序所有可能路径至少执行一次
  • 短路计算特性:逻辑运算中遇到确定结果即终止计算
  • 流程图规范要求:比较运算符应使用

    ======

    而非

    ===

  • 测试用例选择策略:组合用例以满足更高覆盖级别

三、调试

  • 调试定义:发现并修正代码错误的过程
  • 调试目的:确定错误位置、分析原因、改正代码
  • 回归测试:修正错误后重新测试验证
  • 蛮力法:整体检查代码寻找问题
  • 回溯法:从错误点逆向追踪原因
  • 原因排除法:列举可能原因逐一排除
  • 演绎法:从一般原理推导特殊情况
  • 归纳法:从特殊现象总结一般规律
  • 二分法:将问题范围对半分割排查

四、软件度量

  • 软件属性分类:分为外部属性(面向管理者和用户,可直接测量,如性能指标)和内部属性(软件本身质量属性,如可靠性,需间接测量)。
  • McCabe度量法:用于计算有向图的环路复杂度,适用于程序流程图。
  • 有向图与无向图区别:有向图有箭头,方向固定(如a→b);无向图无箭头,可双向移动(如a↔b)。
  • 环路复杂度公式:

    边数−顶点数+2边数 - 顶点数 + 2边数−顶点数+2

    ,注意顺序为边数减顶点数。
  • 节点定义:流程图中所有类型的方框均视为节点。

案例考题:

  • 路径覆盖定义:测试用例数量等于程序图中的路径数量
  • 环路复杂度公式:

    V(G)=E−N+2V(G)=E-N+2V(G)=E−N+2,其中E为边数,N为顶点数

  • 路径查找方法:从开始节点到结束节点顺着箭头方向遍历所有可能路径
  • 流程图规则:必须严格遵循箭头方向,不能逆向或跨节点连接
  • 顶点计数技巧:按顺序标记每个节点并划掉已计数节点避免遗漏
  • 边计数要点:完整统计节点间的有向连接线,注意合并路径的计数方式
  • 常见考题变形:路径数量问题可转化为"满足路径覆盖所需测试用例数"
  • 环路复杂度计算步骤:先准确统计边数和顶点数,再代入公式计算
  • 自底向上:
    • 从底层模块开始测试,需要驱动程序
    • 优点:较早验证底层模块
  • 自顶向下:
    • 先测试整个系统,需要桩程序
    • 优点:较早验证系统主要控制点
  • 三明治:
    • 结合自底向上和自顶向下
    • 优点:兼具两者优势
    • 缺点:测试工作量大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程指南针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值