《软件设计师》复习笔记(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。
相关文章:
《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试
目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例: 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例: 6. 调试与度量 真题示例: 1. 测试基础概念 定义:系统测试是为发现错误而执行程序的过程&…...
闲来无事,用HTML+CSS+JS打造一个84键机械键盘模拟器
今天闲来无聊,突发奇想要用前端技术模拟一个机械键盘。说干就干,花了点时间搞出来了这么一个有模有样的84键机械键盘模拟器。来看看效果吧! 升级版的模拟器 屏幕录制 2025-04-18 155308 是不是挺像那么回事的?哈哈! 它…...
23种设计模式全面解析
设计模式是解决软件设计中常见问题的经典方案。根据《设计模式:可复用面向对象软件的基础》(GoF),23种设计模式分为以下三类: 一、创建型模式(5种) 目标:解耦对象的创建过程&#x…...
Java学习手册:常见并发问题及解决方案
在Java并发编程中,开发者常常会遇到各种并发问题,这些问题可能导致程序行为不可预测、性能下降甚至程序崩溃。以下是一些常见的并发问题及其解决方案: 1.竞态条件(Race Condition) 竞态条件是指多个线程同时访问共享…...
【免费下载】中国各省市地图PPT,可编辑改颜色
很多同学做PPT时,涉及到中国地图或省份展示,自己绘制和调色难度大,下面为大家准备了中国地图的可编辑模板,可以根据PPT整体色或想突出的省份,直接调整颜色。 需要这份数据,请在文末查看下载方法。 一、数…...
Linux 系统编程 day4 进程管道
进程间通信(IPC) Linux环境下,进程地址空间相互独立,任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓冲区…...
【Reading Notes】(8.2)Favorite Articles from 2025 February
【February】 高阶智驾别被短期市占率迷住眼!(2025年02月01日) 2024年,高阶智驾发展迅猛,粗略计算中国市场(特斯拉之外)的城市NOA车型的年度搭载量超过了100万台。但相比于中国乘用车市场2000万…...
探索大语言模型(LLM):循环神经网络的深度解析与实战(RNN、LSTM 与 GRU)
一、循环神经网络(RNN) 1.1 基本原理 循环神经网络之所以得名,是因为它在处理序列数据时,隐藏层的节点之间存在循环连接。这意味着网络能够记住之前时间步的信息,并利用这些信息来处理当前的输入。 想象一下…...
山东大学软件学院创新项目实训开发日志(15)之中医知识问答历史对话查看bug处理后端信息响应成功但前端未获取到
在开发中医知识问答历史对话查看功能的时候,出现了前后端信息获取异同的问题,在经过非常非常非常艰难的查询之后终于解决了这一问题,而这一问题的罪魁祸首就是后端没有setter和getter方法!!!!&a…...
poj1067 取石子游戏 威佐夫博弈
题目 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法, 一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者…...
优先级队列的实模拟实现
优先级队列底层默认用的是vector来存储数据,实现了类似我们数据结构中学习过的堆的队列,他的插入和删除都是优先级高先插入和删除。下面我们来模拟实现它们常见的接口来熟悉优先级队列。 仿函数 在介绍优先级队列之前,我们先熟悉一个概念&a…...
中国高校光芯片技术进展:前沿突破与产业化路径分析——基于材料、集成与系统协同创新的视角
引言:光电子技术的范式变革 随着摩尔定律逼近物理极限,光芯片技术成为突破电子芯片性能瓶颈的核心路径。光芯片以光子为载体,在传输速率(>100 Gbps)、能耗效率(<1 pJ/bit)及抗电磁干扰等…...
swagger 导入到apipost中
打开swagger json链接 保存到本地转为json格式文件 上传文件就行...
网安加·百家讲坛 | 刘志诚:AI安全风险与未来展望
作者简介:刘志诚,乐信集团信息安全中心总监、OWASP广东区域负责人、网安加社区特聘专家。专注于企业数字化过程中网络空间安全风险治理,对大数据、人工智能、区块链等新技术在金融风险治理领域的应用,以及新技术带来的技术风险治理…...
熵权法+TOPSIS+灰色关联度综合算法(Matlab实现)
熵权法TOPSIS灰色关联度综合算法(Matlab实现) 代码获取私信回复:熵权法TOPSIS灰色关联度综合算法(Matlab实现) 摘要: 熵权法TOPSIS灰色关联度综合算法(Matlab实现)代码实现了一种…...
React 中如何获取 DOM:用 useRef 操作非受控组件
📌 场景说明 在写 React 的时候,通常我们是通过“受控组件”来管理表单元素,比如用 useState 控制 <input> 的值。 但有些时候,控制的需求只是临时性的,或者完全不需要重新渲染组件,这时候直接访问…...
YAFFS2 的页缓存机制原理及配置优化方法详解
YAFFS2(Yet Another Flash File System 2)通过其独特的 页缓存机制 和 日志结构设计 优化了 NAND 闪存的读写性能与寿命。以下是其页缓存实现的核心机制及关键流程: 一、YAFFS2 页缓存架构 1. 缓存结构 YAFFS2 的页缓存基于 动态缓存池 设计…...
神经接口安全攻防:从技术漏洞到伦理挑战
随着脑机接口(BCI)技术的快速发展,神经接口设备已从实验室走向消费市场。然而,2025年曝光的某品牌脑机接口设备漏洞(CVE-2025-3278)引发了行业对神经数据安全的深度反思。本文围绕神经接口安全的核心矛盾&a…...
Clickhouse 配置参考
Clickhouse 配置参考 适用版本 21.3.9.84 config.xml 配置 <?xml version"1.0"?> <!--NOTE: User and query level settings are set up in "users.xml" file. --> <yandex><access_control_path>/data/clickhouse/clickhous…...
利用deepseek+Mermaid画流程图
你是一个产品经理,请绘制一个流程图,要求生成符合Mermaid语法的代码,要求如下: 用户下载文件、上传文件、删除文件的流程过程符合安全规范细节具体到每一步要做什么 graph LRclassDef startend fill:#F5EBFF,stroke:#BE8FED,str…...
高频面试题:Android MVP/MVVM/MVI这几种架构在实际生产中,各自的优缺点和适用场景是什么
安卓开发早期的架构模式相对简单,许多开发者直接在Activity或Fragment中堆砌业务逻辑和UI操作,这种方式虽然在小型项目中看似高效,但随着代码量的增加,很快就会导致逻辑混乱、难以测试和维护的问题。Activity和Fragment作为安卓框…...
leetcode0146. LRU 缓存-medium
1 题目:LRU 缓存 官方标定难度:中 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓…...
SuperMap iClient3D for WebGL 如何加载WMTS服务
在 SuperMap iClient3D for WebGL 中加载WMTS服务时,参数配置很关键!下面我们详细介绍如何正确填写参数,确保影像服务完美加载。 一、数据制作 对于上述视频中的地图制作,此处不做讲述,如有需要可访问:Onl…...
组件自身如何向外暴露一个子组件
最近在开发是遇到一个问题,原本是在组件内的一个功能被ui设计稿给搞到了外面,产品也不同意放在子组件内。于是一个问题就来,抽出来放到外面的部分依赖的也是组件内部的数据和逻辑,所以如果外面再重写这一部分,显然浪费感情,并且又要把依赖关系挪出去,也不划算。 于是,…...
《软件设计师》复习笔记(11.4)——处理流程设计、系统设计、人机界面设计
目录 一、业务流程建模 二、流程设计工具 三、业务流程重组(BPR) 四、业务流程管理(BPM) 真题示例: 五、系统设计 1. 主要目的 2. 设计方法 3. 主要内容 4. 设计原则 真题示例: 六、人机界面设…...
深入解析B站androidApp接口:从bilibili.api.ticket.v1.Ticket/GetTicket到SendMsg的技术分析
前言 最近一段时间,我对B站的App接口进行了深入分析,特别是关注了认证机制和私信功能的实现。通过逆向工程和网络抓包,发现了B站移动端API的底层工作原理,包括设备标识生成机制、认证流程和消息传输协议。本文将分享这些研究成果…...
#去除知乎中“盐选”付费故事
添加油猴脚本,去除知乎中“盐选”付费故事 // UserScript // name 盐选内容隐藏脚本 // namespace http://tampermonkey.net/ // version 0.2 // description 自动隐藏含有“盐选专栏”或“盐选”文字的回答卡片 // author YourName // mat…...
MATLAB脚本实现了一个转子系统的参数扫描和分岔分析
% 参数扫描范围 clc; clear; close all;S_values 500:200:20000; % 转速范围% 定义系统参数 N 5; % 质量点数量 num_nodes N; % 节点数 num_dofs_per_node 4; % 每个节点的自由度数 num_elements num_nodes-1; % 单元数 total_dofs num_nodes * num_dofs_per_node; % 总自…...
UWP发展历程
通用Windows平台(UWP)发展历程 引言 通用Windows平台(Universal Windows Platform, UWP)是微软为实现"一次编写,处处运行"的愿景而打造的现代应用程序平台。作为微软统一Windows生态系统的核心战略组成部分,UWP代表了从传统Win32应用向现代应…...
数据库相关概念,关系型数据库的核心要素,MySQL(特点,安装,环境变量配置,启动,停止,客户端连接),数据模型
目录 数据库相关概念 MySQL(特点,安装,环境变量配置,启动和停止,客户端连接) MySQL数据库的特点 Windows下安装MySQL MySQL 8.0.36(安装版) MySQL安装 配置Path环境变量 MySQ…...

