嵌入式软件测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
把测试对象看做一个黑盒子,完全不考虑程序内部的逻辑 结构和内部特性,只依据程序的需求规格说明书,检查程 序的功能是否正确。
黑盒测试又叫做功能测试或数据驱动测试。 黑盒测试类似于中医:使用望、闻、问、切
黑盒测试的目的
是否有错误的或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息访问错误? 是否考虑了软件的出错情况?
18 times Statistical Paths = 1018
18
-9
T=
10 x10
3600 x 24 x 365
T = 31.7 Years
11
2021年3月
31日
关于软件测试(9)
什么是“错误”
我们通常用“错误”这一术语来描述测试过程中发现的 各种问题
在没有特别加以说明的情况下,这是一个泛用的、模糊 的概念,它指的可能是:
defect:缺陷。 bug : 差错。 error: 出错。 failure:失效。
12
2021年3月
31日
关于软件测试(10)
测试设计
测试是需要设计的。因此测试是一项具有很大创造性的工 作,其工作量一点也不比软件设计小。
软件测试与软件开发相比,并不低人一等。 软件测试的创造性主要表现在:
的一种认识上的训练
3
2021年3月
31日
关于软件测试(2)
什么是软件测试
专家说法:
测试是为了发现错误而执行程序的过程 软件测试是对软件建立信心的过程 ……
IEEE 1983:
使用人工或自动手段来运行某个系统的过程,其目的在于检验它 是否满足规定的需求或是弄清结果与实际结果之间的差别
总结
软件测试要解决的问题是:软件的行为是否符合“规定的”要求 ,它有两个方面的含义: Does it do everything it is specified to do? Does it do anything it is not specified to do?
测试用例名称及标识 测试目的 测试条件及设置 输入数据要求 预期的输出结果 操作步骤
测试用例的典型设计方法
黑盒法(Black box testing) 白盒法(White box testing)
14
2021年3月 31日
软件测试技术——黑盒测试(1)
黑盒测试的概念
若被测程序与特定的功能相联系,我们可以针对功能设计 测试,以证实各功能完全可执行,同时在功能中寻找错误
2021年3月 31日
软件测试技术——静态分析(1)
静态分析又称静态测试
➢ 静态测试是来自百度文库动态执行程序代码而寻找程序代码中可能存 在的错误或评估程序代码质量的过程。
➢ 静态测试可以由人工进行,充分发挥人的逻辑思维优势。 ➢ 可以借助软件工具自动进行
26
2021年3月
31日
软件测试技术——静态分析(2)
全数字模拟测试 交叉测试(Host/Target测试) 真实环境验证
28
2021年3月
31日
嵌入式软件测试方法(2)
全数字模拟测试
采用数学平台的方法,将嵌入式软件从系统中剥离出来 ,通过开发CPU指令、常用芯片、I/O、中断、时钟等 模拟器在HOST上实现嵌入式软件的测试
主要特点
与嵌入式硬件平台脱钩 操作简单,可以借鉴常规的软件测试方法 适用于功能测试 有局限性
开发成本高。设计出一个能进行系统测试的的环境代价 太大
只能作为嵌入式软件测试的辅助手段
30
2021年3月
31日
嵌入式软件测试方法(4)
交叉测试(Host/Target测试) 与目标环境无关的部分在PC机上完成
充分利用高级语言的可移植性 借鉴常规的软件测试方法 与模拟测试不同 与硬件密切相关的部分在Target上完成 需要调试环境支持 测试工具需要支持目标环境 最后在目标环境中确认
31日
关于软件测试(5)
软件测试的发展历程
软件测试并不是一开始就有的
轻视——重视 简单——复杂 被迫——主动
如何开展软件测试
测试是一个非常复杂的过程,不仅要掌握相应的技术 和方法,而且还要懂得在什么时候、什么情况下使用 什么方法,这就是软件测试的策略问题。另外,软件 测试的实施需要有效的管理,仅靠简单地组建测试队 伍或购买一两件测试工具是不够的。
嵌入式软件测试技术与策略
An Introduction to Embedded Software Testing
TM
1
内容提要
关于软件测试 软件测试技术 嵌入式软件测试方法 嵌入式软件测试策略 嵌入式软件测试解决方案
2
2021年3月
31日
关于软件测试(1)
对软件测试的几种认识
测试与调试类似,是对调试的一种补充 测试是为了证明软件正确 测试是为了发现软件错误 测试是检验软件是否满足规定的需求 测试是为了减小软件不工作的风险 测试是不需要更多的测试工作即可以产生低风险软件
double d_bh; short s_bh; sense_horizontal_velocity(&d_bh); s_bh = d_bh; // OPERAND ERROR
5
2021年3月
31日
关于软件测试(4)
软件测试的重要性
当前的软件开发方法——免疫力低
软件是一种特殊的产品 开发方法学因素 人不能避免犯错误 软件开发工具不完备 维护费用昂贵
软件测试——保证软件产品质量的重要手段
软件测试能最大限度的发现软件中的错误,减少软件中残留的错 误,提高软件产品的可靠性
通过软件测试可以验证软件功能、性能、可用性、可移植性、约 束、限制等指标满足规定的需求
软件可靠性测试可得到软件可靠性指标 软件测试为软件质量的定量评定提供依据
6
2021年3月
输入和输出并非只是程序参数:
外部数据 时间 执行顺序/记录 状态
17
2021年3月
31日
软件测试技术——黑盒测试(4)
常用黑盒测试方法——边界值分析
边界值分析也是一种黑盒测试方法,是对等价分割方法的 补充
经验告诉我们,大量的错误是发生在输入或输出范围的边 界上,而不是在输入范围的内部。因此针对各种边界情况 设计测试用例,可以查出更多的错误
分支测试 #3
分支测试 #4
23
2021年3月
31日
软件测试技术——白盒测试(6)
基本路径测试的意义
➢基本路径覆盖 任何其他路径 (如 FALSE and FALSE) 可
由基本路径组合得到
(TRUE and FALSE) + (FALSE and TRUE) - (TRUE and TRUE)
= (FALSE and FALSE)
静态分析的主要方法和内容:
代码审查,这是软件质量保证(SQA)的重要内容
代码统计分析
软件工程度量
McCabe 复杂度 Halstead 复杂度 ...
27
2021年3月
31日
嵌入式软件测试方法(1)
嵌入式软件测式的基本方法
拿来主义——充分借用PC软件的测试方法 静态/动态 白盒/黑盒 单元测试/集成测试/系统测试 ……
Thomas McCabe首先提出
从程序的结构入手,分析、计算模块的复杂程度—— McCabe圈复杂度(=基本路径数)
确认模块的一组基本路径,再根据这些基本路径设计测 试用例,做到基本路径覆盖。
圈复杂度可以通过程序流图得出
基本路径测试是结构化测试的理论基础
21
2021年3月
31日
软件测试技术——白盒测试(4)
测试与调试不能相互替代,但相互支持,相辅相成
9
2021年3月
31日
关于软件测试(7)
软件测试的基本原则
Good-enough原则:
权衡投入/产出比,既不要不充分,也不要过分。
Pareto法则:
在分析、设计、试验、复审等阶段能够发现和避免80%的bug 而系统的软件测试能够找出其余bug中的80%。
应尽早地开展软件测试。
问题发现得越早,解决问题的代价就越小。
严格执行测试计划,排除测试的随意性 测试是需要维护的
妥善保存测试计划、测试用例、出错统计和测试分析报告 ,为维护提供方便
完全彻底的测试是不可能的。
10
2021年3月
31日
关于软件测试(8)
假设每次测试用时1ns,全年不间断地测试:
软件测试技术——白盒测试(2)
插装(Instrumentation)
语句覆盖 判定覆盖
条件覆盖
Software Probe
判定条件覆盖 路径覆盖
插装又称软件探针,由测试 工具自动加入,用于反馈软 件的执行信息。
插装不影被测程序的运行
20
2021年3月
31日
软件测试技术——白盒测试(3)
典型的白盒测试——基本路径测试
15
2021年3月
31日
软件测试技术——黑盒测试(2)
黑盒测试的一个常用技巧——打桩(Stub)
用在隔离测试中,用以消除其他程序对被测程序的影响 当被测程序调用其子模块时,可以使用模拟法,此时被
测程序并没有真正调用其他模块,而是从桩模块处得到 一个所需的值。这种技术叫做打桩。
黑盒测试常用方法
等价分割 边界值分析
使用边界值分析方法设计测试用例,首先应确定边界情况 。应当选取正好等于,刚刚大于,或刚刚小于边界的值做 为测试数据,而不是选取等价类中的典型值或任意值做为 测试数据
错误聚集在边界上,缺陷隐藏在角落里!
18
2021年3月
31日
软件测试技术——白盒测试(1)
什么是白盒测试
若被测程序与特定的结构相联系,我们可以针对结构设计测试 ,以确保内部的“所有齿轮相吻合”,即软件的内部过程是合 理的,是遵照规定执行的
测试方案选择 测试计划制定 测试用例设计 测试结果的分析 测试过程的管理
...
13
2021年3月
31日
关于软件测试(11)
测试用例
所谓测试用例,是一份关于具体测试步骤的文档,用于指导测 试的实际操作。
测试用例可以是纯文本的说明文档,也可以是用脚本语言或高 级语言编写的一段代码。
测试用例应当包括:
16
2021年3月
31日
软件测试技术——黑盒测试(3)
常用黑盒测试方法——等价分割
等价分割是一种典型的黑盒测试方法 等价分割将输入输出范围分割成多个等价的区域,
然后从每个等价区中选取少数有代表性的数据做为 测试用例。所谓等价,是指:
在同一分割区内程序的行为是等价的 等价区之间的依赖性可以忽略
基本路径测试的意义
流程 ‘A’
哪个函数更复杂?
2个测试
➢代码覆盖
流程 ‘B’
2个测试
如果代码覆盖率=100% 各需多少测试?
代码覆盖与复杂度不成比例
22
2021年3月 31日
软件测试技术——白盒测试(5)
基本路径测试的意义
➢分支覆盖 需要多少个测试可以做到100%覆盖?
分支测试 #1
分支测试 #2
29
2021年3月
31日
嵌入式软件测试方法(3)
全数字模拟测试的局限性
通用性差,使用不同语言编写的嵌入式软件,需要不同 的仿真程序来执行
实时性与准确性难以反映出嵌入式软件的真实情况,测 试出与时序有关的故障价值不大。
维护统一、精确的系统时钟,理顺时序关系相当困难, 特别是当并发的事件要求一定的同步关系时。
4
2021年3月
31日
关于软件测试(3)
软件测试的重要性
海湾战争期间,由于跟踪软件在运行100小时后出现0.36 秒的舍入误差,导致未能成功拦截一枚飞毛腿导弹,致使 28名联军士兵丧生。
1963年美国宇航局事例(Fortran程序):
DO 5 I=1,3 误写成 DO 5 I=1.3;
一点之差导致火箭发射失败 1996年6月4日,阿利亚娜5型火箭首次发射失败
基本路径数等于模块的McCabe圈复杂度 v(G)
24
2021年3月
31日
软件测试技术——回归测试
回归测试
软件更动后重新进行的测试 既要测试变更部分,也要测试受影响部分
关键在决定哪些测试必须被重复 保证测试工作的可重现性 尽量利用工具,提供回归测试的自动化水平
编程
测试
发现错误
更改
25
回归测试
因此,技术、策略和管理构成了软件测试工程的 三大要素。
8
2021年3月
31日
关于软件测试(6)
测试与调试的关系
测试是检查软件发现问题,调试是分析软件解决问题 测试贯穿于整个软件生存期,调试主要是在软件开发过
程中 调试具有随意性、不明确性,而测试是明确的、可重复
的 测试是全方位的,而调试是代码级的
白盒测试又称玻璃盒测试。把测试对象看作一个透明的盒子, 充分利用其逻辑结构和有关信息,设计和选择测试用例。
白盒测试又称为结构测试或逻辑驱动测试 白盒测试类似于西医看病,通过X光、CT扫描等手段
白盒测试主要用于
结构测试 覆盖测试 静态分析也可以算作白盒测试的一种手段
19
2021年3月
31日
黑盒测试又叫做功能测试或数据驱动测试。 黑盒测试类似于中医:使用望、闻、问、切
黑盒测试的目的
是否有错误的或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息访问错误? 是否考虑了软件的出错情况?
18 times Statistical Paths = 1018
18
-9
T=
10 x10
3600 x 24 x 365
T = 31.7 Years
11
2021年3月
31日
关于软件测试(9)
什么是“错误”
我们通常用“错误”这一术语来描述测试过程中发现的 各种问题
在没有特别加以说明的情况下,这是一个泛用的、模糊 的概念,它指的可能是:
defect:缺陷。 bug : 差错。 error: 出错。 failure:失效。
12
2021年3月
31日
关于软件测试(10)
测试设计
测试是需要设计的。因此测试是一项具有很大创造性的工 作,其工作量一点也不比软件设计小。
软件测试与软件开发相比,并不低人一等。 软件测试的创造性主要表现在:
的一种认识上的训练
3
2021年3月
31日
关于软件测试(2)
什么是软件测试
专家说法:
测试是为了发现错误而执行程序的过程 软件测试是对软件建立信心的过程 ……
IEEE 1983:
使用人工或自动手段来运行某个系统的过程,其目的在于检验它 是否满足规定的需求或是弄清结果与实际结果之间的差别
总结
软件测试要解决的问题是:软件的行为是否符合“规定的”要求 ,它有两个方面的含义: Does it do everything it is specified to do? Does it do anything it is not specified to do?
测试用例名称及标识 测试目的 测试条件及设置 输入数据要求 预期的输出结果 操作步骤
测试用例的典型设计方法
黑盒法(Black box testing) 白盒法(White box testing)
14
2021年3月 31日
软件测试技术——黑盒测试(1)
黑盒测试的概念
若被测程序与特定的功能相联系,我们可以针对功能设计 测试,以证实各功能完全可执行,同时在功能中寻找错误
2021年3月 31日
软件测试技术——静态分析(1)
静态分析又称静态测试
➢ 静态测试是来自百度文库动态执行程序代码而寻找程序代码中可能存 在的错误或评估程序代码质量的过程。
➢ 静态测试可以由人工进行,充分发挥人的逻辑思维优势。 ➢ 可以借助软件工具自动进行
26
2021年3月
31日
软件测试技术——静态分析(2)
全数字模拟测试 交叉测试(Host/Target测试) 真实环境验证
28
2021年3月
31日
嵌入式软件测试方法(2)
全数字模拟测试
采用数学平台的方法,将嵌入式软件从系统中剥离出来 ,通过开发CPU指令、常用芯片、I/O、中断、时钟等 模拟器在HOST上实现嵌入式软件的测试
主要特点
与嵌入式硬件平台脱钩 操作简单,可以借鉴常规的软件测试方法 适用于功能测试 有局限性
开发成本高。设计出一个能进行系统测试的的环境代价 太大
只能作为嵌入式软件测试的辅助手段
30
2021年3月
31日
嵌入式软件测试方法(4)
交叉测试(Host/Target测试) 与目标环境无关的部分在PC机上完成
充分利用高级语言的可移植性 借鉴常规的软件测试方法 与模拟测试不同 与硬件密切相关的部分在Target上完成 需要调试环境支持 测试工具需要支持目标环境 最后在目标环境中确认
31日
关于软件测试(5)
软件测试的发展历程
软件测试并不是一开始就有的
轻视——重视 简单——复杂 被迫——主动
如何开展软件测试
测试是一个非常复杂的过程,不仅要掌握相应的技术 和方法,而且还要懂得在什么时候、什么情况下使用 什么方法,这就是软件测试的策略问题。另外,软件 测试的实施需要有效的管理,仅靠简单地组建测试队 伍或购买一两件测试工具是不够的。
嵌入式软件测试技术与策略
An Introduction to Embedded Software Testing
TM
1
内容提要
关于软件测试 软件测试技术 嵌入式软件测试方法 嵌入式软件测试策略 嵌入式软件测试解决方案
2
2021年3月
31日
关于软件测试(1)
对软件测试的几种认识
测试与调试类似,是对调试的一种补充 测试是为了证明软件正确 测试是为了发现软件错误 测试是检验软件是否满足规定的需求 测试是为了减小软件不工作的风险 测试是不需要更多的测试工作即可以产生低风险软件
double d_bh; short s_bh; sense_horizontal_velocity(&d_bh); s_bh = d_bh; // OPERAND ERROR
5
2021年3月
31日
关于软件测试(4)
软件测试的重要性
当前的软件开发方法——免疫力低
软件是一种特殊的产品 开发方法学因素 人不能避免犯错误 软件开发工具不完备 维护费用昂贵
软件测试——保证软件产品质量的重要手段
软件测试能最大限度的发现软件中的错误,减少软件中残留的错 误,提高软件产品的可靠性
通过软件测试可以验证软件功能、性能、可用性、可移植性、约 束、限制等指标满足规定的需求
软件可靠性测试可得到软件可靠性指标 软件测试为软件质量的定量评定提供依据
6
2021年3月
输入和输出并非只是程序参数:
外部数据 时间 执行顺序/记录 状态
17
2021年3月
31日
软件测试技术——黑盒测试(4)
常用黑盒测试方法——边界值分析
边界值分析也是一种黑盒测试方法,是对等价分割方法的 补充
经验告诉我们,大量的错误是发生在输入或输出范围的边 界上,而不是在输入范围的内部。因此针对各种边界情况 设计测试用例,可以查出更多的错误
分支测试 #3
分支测试 #4
23
2021年3月
31日
软件测试技术——白盒测试(6)
基本路径测试的意义
➢基本路径覆盖 任何其他路径 (如 FALSE and FALSE) 可
由基本路径组合得到
(TRUE and FALSE) + (FALSE and TRUE) - (TRUE and TRUE)
= (FALSE and FALSE)
静态分析的主要方法和内容:
代码审查,这是软件质量保证(SQA)的重要内容
代码统计分析
软件工程度量
McCabe 复杂度 Halstead 复杂度 ...
27
2021年3月
31日
嵌入式软件测试方法(1)
嵌入式软件测式的基本方法
拿来主义——充分借用PC软件的测试方法 静态/动态 白盒/黑盒 单元测试/集成测试/系统测试 ……
Thomas McCabe首先提出
从程序的结构入手,分析、计算模块的复杂程度—— McCabe圈复杂度(=基本路径数)
确认模块的一组基本路径,再根据这些基本路径设计测 试用例,做到基本路径覆盖。
圈复杂度可以通过程序流图得出
基本路径测试是结构化测试的理论基础
21
2021年3月
31日
软件测试技术——白盒测试(4)
测试与调试不能相互替代,但相互支持,相辅相成
9
2021年3月
31日
关于软件测试(7)
软件测试的基本原则
Good-enough原则:
权衡投入/产出比,既不要不充分,也不要过分。
Pareto法则:
在分析、设计、试验、复审等阶段能够发现和避免80%的bug 而系统的软件测试能够找出其余bug中的80%。
应尽早地开展软件测试。
问题发现得越早,解决问题的代价就越小。
严格执行测试计划,排除测试的随意性 测试是需要维护的
妥善保存测试计划、测试用例、出错统计和测试分析报告 ,为维护提供方便
完全彻底的测试是不可能的。
10
2021年3月
31日
关于软件测试(8)
假设每次测试用时1ns,全年不间断地测试:
软件测试技术——白盒测试(2)
插装(Instrumentation)
语句覆盖 判定覆盖
条件覆盖
Software Probe
判定条件覆盖 路径覆盖
插装又称软件探针,由测试 工具自动加入,用于反馈软 件的执行信息。
插装不影被测程序的运行
20
2021年3月
31日
软件测试技术——白盒测试(3)
典型的白盒测试——基本路径测试
15
2021年3月
31日
软件测试技术——黑盒测试(2)
黑盒测试的一个常用技巧——打桩(Stub)
用在隔离测试中,用以消除其他程序对被测程序的影响 当被测程序调用其子模块时,可以使用模拟法,此时被
测程序并没有真正调用其他模块,而是从桩模块处得到 一个所需的值。这种技术叫做打桩。
黑盒测试常用方法
等价分割 边界值分析
使用边界值分析方法设计测试用例,首先应确定边界情况 。应当选取正好等于,刚刚大于,或刚刚小于边界的值做 为测试数据,而不是选取等价类中的典型值或任意值做为 测试数据
错误聚集在边界上,缺陷隐藏在角落里!
18
2021年3月
31日
软件测试技术——白盒测试(1)
什么是白盒测试
若被测程序与特定的结构相联系,我们可以针对结构设计测试 ,以确保内部的“所有齿轮相吻合”,即软件的内部过程是合 理的,是遵照规定执行的
测试方案选择 测试计划制定 测试用例设计 测试结果的分析 测试过程的管理
...
13
2021年3月
31日
关于软件测试(11)
测试用例
所谓测试用例,是一份关于具体测试步骤的文档,用于指导测 试的实际操作。
测试用例可以是纯文本的说明文档,也可以是用脚本语言或高 级语言编写的一段代码。
测试用例应当包括:
16
2021年3月
31日
软件测试技术——黑盒测试(3)
常用黑盒测试方法——等价分割
等价分割是一种典型的黑盒测试方法 等价分割将输入输出范围分割成多个等价的区域,
然后从每个等价区中选取少数有代表性的数据做为 测试用例。所谓等价,是指:
在同一分割区内程序的行为是等价的 等价区之间的依赖性可以忽略
基本路径测试的意义
流程 ‘A’
哪个函数更复杂?
2个测试
➢代码覆盖
流程 ‘B’
2个测试
如果代码覆盖率=100% 各需多少测试?
代码覆盖与复杂度不成比例
22
2021年3月 31日
软件测试技术——白盒测试(5)
基本路径测试的意义
➢分支覆盖 需要多少个测试可以做到100%覆盖?
分支测试 #1
分支测试 #2
29
2021年3月
31日
嵌入式软件测试方法(3)
全数字模拟测试的局限性
通用性差,使用不同语言编写的嵌入式软件,需要不同 的仿真程序来执行
实时性与准确性难以反映出嵌入式软件的真实情况,测 试出与时序有关的故障价值不大。
维护统一、精确的系统时钟,理顺时序关系相当困难, 特别是当并发的事件要求一定的同步关系时。
4
2021年3月
31日
关于软件测试(3)
软件测试的重要性
海湾战争期间,由于跟踪软件在运行100小时后出现0.36 秒的舍入误差,导致未能成功拦截一枚飞毛腿导弹,致使 28名联军士兵丧生。
1963年美国宇航局事例(Fortran程序):
DO 5 I=1,3 误写成 DO 5 I=1.3;
一点之差导致火箭发射失败 1996年6月4日,阿利亚娜5型火箭首次发射失败
基本路径数等于模块的McCabe圈复杂度 v(G)
24
2021年3月
31日
软件测试技术——回归测试
回归测试
软件更动后重新进行的测试 既要测试变更部分,也要测试受影响部分
关键在决定哪些测试必须被重复 保证测试工作的可重现性 尽量利用工具,提供回归测试的自动化水平
编程
测试
发现错误
更改
25
回归测试
因此,技术、策略和管理构成了软件测试工程的 三大要素。
8
2021年3月
31日
关于软件测试(6)
测试与调试的关系
测试是检查软件发现问题,调试是分析软件解决问题 测试贯穿于整个软件生存期,调试主要是在软件开发过
程中 调试具有随意性、不明确性,而测试是明确的、可重复
的 测试是全方位的,而调试是代码级的
白盒测试又称玻璃盒测试。把测试对象看作一个透明的盒子, 充分利用其逻辑结构和有关信息,设计和选择测试用例。
白盒测试又称为结构测试或逻辑驱动测试 白盒测试类似于西医看病,通过X光、CT扫描等手段
白盒测试主要用于
结构测试 覆盖测试 静态分析也可以算作白盒测试的一种手段
19
2021年3月
31日