嵌入式软件测试ppt课件.ppt

上传人:本田雅阁 文档编号:2600346 上传时间:2019-04-15 格式:PPT 页数:51 大小:1.21MB
返回 下载 相关 举报
嵌入式软件测试ppt课件.ppt_第1页
第1页 / 共51页
嵌入式软件测试ppt课件.ppt_第2页
第2页 / 共51页
嵌入式软件测试ppt课件.ppt_第3页
第3页 / 共51页
嵌入式软件测试ppt课件.ppt_第4页
第4页 / 共51页
嵌入式软件测试ppt课件.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《嵌入式软件测试ppt课件.ppt》由会员分享,可在线阅读,更多相关《嵌入式软件测试ppt课件.ppt(51页珍藏版)》请在三一文库上搜索。

1、嵌入式软件测试技术与策略 An Introduction to Embedded Software Testing,2019年4月15日,2,内容提要,关于软件测试 软件测试技术 嵌入式软件测试方法 嵌入式软件测试策略 嵌入式软件测试解决方案,2019年4月15日,3,对软件测试的几种认识 测试与调试类似,是对调试的一种补充 测试是为了证明软件正确 测试是为了发现软件错误 测试是检验软件是否满足规定的需求 测试是为了减小软件不工作的风险 测试是不需要更多的测试工作即可以产生低风险软件的一种认识上的训练,关于软件测试(1),2019年4月15日,4,关于软件测试(2),什么是软件测试 专家说法:

2、 测试是为了发现错误而执行程序的过程 软件测试是对软件建立信心的过程 IEEE 1983: 使用人工或自动手段来运行某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清结果与实际结果之间的差别 总结 软件测试要解决的问题是:软件的行为是否符合“规定的”要求,它有两个方面的含义: Does it do everything it is specified to do? Does it do anything it is not specified to do?,2019年4月15日,5,软件测试的重要性 海湾战争期间,由于跟踪软件在运行100小时后出现0.36秒的舍入误差,导致未能成功拦截

3、一枚飞毛腿导弹,致使28名联军士兵丧生。 1963年美国宇航局事例(Fortran程序): DO 5 I=1,3 误写成 DO 5 I=1.3; 一点之差导致火箭发射失败 1996年6月4日,阿利亚娜5型火箭首次发射失败,关于软件测试(3),double d_bh; short s_bh; sense_horizontal_velocity( / OPERAND ERROR,2019年4月15日,6,软件测试的重要性 当前的软件开发方法免疫力低 软件是一种特殊的产品 开发方法学因素 人不能避免犯错误 软件开发工具不完备 维护费用昂贵 软件测试保证软件产品质量的重要手段 软件测试能最大限度的发现

4、软件中的错误,减少软件中残留的错误,提高软件产品的可靠性 通过软件测试可以验证软件功能、性能、可用性、可移植性、约束、限制等指标满足规定的需求 软件可靠性测试可得到软件可靠性指标 软件测试为软件质量的定量评定提供依据,关于软件测试(4),2019年4月15日,7,软件测试的重要性 一汽大众 召回6速自动变速箱(DSG)汽车2760辆 油液温度传感器上的插头处导线为卡紧,传感器可能发出错误温度信息,严重时会导致控制单元启动变速箱保护模式,暂时中断动力输出 需要更新变速箱控制单元程序 宝马 召回气门电控马达问题汽车5470辆 因软件错误,发动机气缸的气门电控马达可能出现不同步现象,将导致发动机工作

5、不稳定,有时会熄火 对发动机管理系统控制单元重新编成 现代 召回悬架自动稳定控制缺陷问题车辆2017辆 在部分装备了3.3L发动机和电子稳定控制系统(ESC)车辆上,ESC可能设置得对过渡转向过于敏感,会对外侧前轮施加不必要的制动力,可能导致碰撞事故 对ESC的液压电控单元重新编程 沃尔沃 发动机冷却风扇控制模块版本错误,关于软件测试(4),2019年4月15日,8,关于软件测试(5),软件测试的发展历程 软件测试并不是一开始就有的 轻视重视 简单复杂 被迫主动 如何开展软件测试 测试是一个非常复杂的过程,不仅要掌握相应的技术和方法,而且还要懂得在什么时候、什么情况下使用什么方法,这就是软件测

6、试的策略问题。另外,软件测试的实施需要有效的管理,仅靠简单地组建测试队伍或购买一两件测试工具是不够的。 因此,技术、策略和管理构成了软件测试工程的三大要素。,2019年4月15日,9,测试与调试的关系 测试是检查软件发现问题,调试是分析软件解决问题 测试贯穿于整个软件生存期,调试主要是在软件开发过程中 调试具有随意性、不明确性,而测试是明确的、可重复的 测试是全方位的,而调试是代码级的 测试与调试不能相互替代,但相互支持,相辅相成,关于软件测试(6),2019年4月15日,10,软件测试的基本原则 Good-enough原则: 权衡投入产出比,既不要不充分,也不要过分。 Pareto法则: 在

7、分析、设计、试验、复审等阶段能够发现和避免80的bug 而系统的软件测试能够找出其余bug中的80。 应尽早地开展软件测试。 问题发现得越早,解决问题的代价就越小。 严格执行测试计划,排除测试的随意性 测试是需要维护的 妥善保存测试计划、测试用例、出错统计和测试分析报告,为维护提供方便 完全彻底的测试是不可能的。,关于软件测试(7),2019年4月15日,11,假设每次测试用时1ns,全年不间断地测试:,T = 31.7 Years,关于软件测试(8),2019年4月15日,12,什么是“错误” 我们通常用“错误”这一术语来描述测试过程中发现的各种问题 在没有特别加以说明的情况下,这是一个泛用

8、的、模糊的概念,它指的可能是: defect:缺陷。 bug : 差错。 error: 出错。 failure:失效。,关于软件测试(9),2019年4月15日,13,测试设计 测试是需要设计的。因此测试是一项具有很大创造性的工作,其工作量一点也不比软件设计小。 软件测试与软件开发相比,并不低人一等。 软件测试的创造性主要表现在: 测试方案选择 测试计划制定 测试用例设计 测试结果的分析 测试过程的管理 .,关于软件测试(10),2019年4月15日,14,测试用例 所谓测试用例,是一份关于具体测试步骤的文档,用于指导测试的实际操作。 测试用例可以是纯文本的说明文档,也可以是用脚本语言或高级语

9、言编写的一段代码。 测试用例应当包括: 测试用例名称及标识 测试目的 测试条件及设置 输入数据要求 预期的输出结果 操作步骤 测试用例的典型设计方法 黑盒法(Black box testing) 白盒法(White box testing),关于软件测试(11),2019年4月15日,15,软件测试技术黑盒测试(1),黑盒测试的概念 若被测程序与特定的功能相联系,我们可以针对功能设计测试,以证实各功能完全可执行,同时在功能中寻找错误 把测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否正确。 黑盒测试又叫做功能测试或数据驱动测试。 黑

10、盒测试类似于中医:使用望、闻、问、切 黑盒测试的目的 是否有错误的或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息访问错误? 是否考虑了软件的出错情况?,2019年4月15日,16,软件测试技术黑盒测试(2),黑盒测试的一个常用技巧打桩(Stub) 用在隔离测试中,用以消除其他程序对被测程序的影响 当被测程序调用其子模块时,可以使用模拟法,此时被测程序并没有真正调用其他模块,而是从桩模块处得到一个所需的值。这种技术叫做打桩。 黑盒测试常用方法 等价分割 边界值分析,2019年4月15日,17,常用黑盒测试方法等价分割 等价分割是一种典型的黑盒

11、测试方法 等价分割将输入输出范围分割成多个等价的区域,然后从每个等价区中选取少数有代表性的数据做为测试用例。所谓等价,是指: 在同一分割区内程序的行为是等价的 等价区之间的依赖性可以忽略 输入和输出并非只是程序参数: 外部数据 时间 执行顺序/记录 状态,软件测试技术黑盒测试(3),2019年4月15日,18,常用黑盒测试方法边界值分析 边界值分析也是一种黑盒测试方法,是对等价分割方法的补充 经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误 使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,

12、刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据,软件测试技术黑盒测试(4),错误聚集在边界上,缺陷隐藏在角落里!,2019年4月15日,19,软件测试技术白盒测试(1),什么是白盒测试 若被测程序与特定的结构相联系,我们可以针对结构设计测试,以确保内部的“所有齿轮相吻合”,即软件的内部过程是合理的,是遵照规定执行的 白盒测试又称玻璃盒测试。把测试对象看作一个透明的盒子,充分利用其逻辑结构和有关信息,设计和选择测试用例。 白盒测试又称为结构测试或逻辑驱动测试 白盒测试类似于西医看病,通过X光、CT扫描等手段 白盒测试主要用于 结构测试 覆盖测试 静态分析

13、也可以算作白盒测试的一种手段,2019年4月15日,20,软件测试技术白盒测试(2),插装(Instrumentation) 插装又称软件探针,由测试工具自动加入,用于反馈软件的执行信息。 插装不影被测程序的运行,语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 路径覆盖,2019年4月15日,21,软件测试技术白盒测试(3),典型的白盒测试基本路径测试 Thomas McCabe首先提出 从程序的结构入手,分析、计算模块的复杂程度McCabe圈复杂度(=基本路径数) 确认模块的一组基本路径,再根据这些基本路径设计测试用例,做到基本路径覆盖。 圈复杂度可以通过程序流图得出 基本路径测试是结构化测试的

14、理论基础,2019年4月15日,22,代码覆盖,流程 A,流程 B,哪个函数更复杂?,代码覆盖与复杂度不成比例,软件测试技术白盒测试(4),2个测试,2个测试,基本路径测试的意义,如果代码覆盖率=100% 各需多少测试?,2019年4月15日,23,分支覆盖,需要多少个测试可以做到100%覆盖?,分支测试 #1,分支测试 #2,分支测试 #3,分支测试 #4,软件测试技术白盒测试(5),基本路径测试的意义,2019年4月15日,24,基本路径覆盖,(TRUE and FALSE),(FALSE and TRUE),(TRUE and TRUE),任何其他路径 (如 FALSE and FALS

15、E) 可由基本路径组合得到,+,-,= (FALSE and FALSE),软件测试技术白盒测试(6),基本路径测试的意义,基本路径数等于模块的McCabe圈复杂度 v(G),2019年4月15日,25,回归测试 软件更动后重新进行的测试 既要测试变更部分,也要测试受影响部分 关键在决定哪些测试必须被重复 保证测试工作的可重现性 尽量利用工具,提供回归测试的自动化水平,软件测试技术回归测试,2019年4月15日,26,软件测试技术静态分析(1),静态分析又称静态测试 静态测试是不动态执行程序代码而寻找程序代码中可能存在的错误或评估程序代码质量的过程。 静态测试可以由人工进行,充分发挥人的逻辑思

16、维优势。 可以借助软件工具自动进行,2019年4月15日,27,软件测试技术静态分析(2),静态分析的主要方法和内容: 代码审查,这是软件质量保证(SQA)的重要内容 代码统计分析 软件工程度量 McCabe 复杂度 Halstead 复杂度 .,2019年4月15日,28,嵌入式软件测式的基本方法 拿来主义充分借用PC软件的测试方法 静态/动态 白盒/黑盒 单元测试/集成测试/系统测试 全数字模拟测试 交叉测试(Host/Target测试) 真实环境验证,嵌入式软件测试方法(1),2019年4月15日,29,嵌入式软件测试方法(2),全数字模拟测试 采用数学平台的方法,将嵌入式软件从系统中剥

17、离出来,通过开发CPU指令、常用芯片、I/O、中断、时钟等模拟器在HOST上实现嵌入式软件的测试 主要特点 与嵌入式硬件平台脱钩 操作简单,可以借鉴常规的软件测试方法 适用于功能测试 有局限性,2019年4月15日,30,嵌入式软件测试方法(3),全数字模拟测试的局限性 通用性差,使用不同语言编写的嵌入式软件,需要不同的仿真程序来执行 实时性与准确性难以反映出嵌入式软件的真实情况,测试出与时序有关的故障价值不大。 维护统一、精确的系统时钟,理顺时序关系相当困难,特别是当并发的事件要求一定的同步关系时。 开发成本高。设计出一个能进行系统测试的的环境代价太大 只能作为嵌入式软件测试的辅助手段,20

18、19年4月15日,31,嵌入式软件测试方法(4),交叉测试(Host/Target测试) 与目标环境无关的部分在PC机上完成 充分利用高级语言的可移植性 借鉴常规的软件测试方法 与模拟测试不同 与硬件密切相关的部分在Target上完成 需要调试环境支持 测试工具需要支持目标环境 最后在目标环境中确认,2019年4月15日,32,嵌入式软件测试方法(5),交叉测试的特点 将大部分工作转移到PC平台上,在硬件环境未建好或调试工具缺乏时就可以开展 可以充分地“拿来主义” 适用于高级语言,如C,C+ 操作方便,测试成本较低。 实时性受调试环境的制约 目标环境中测试时要占用一定的目标资源 注意目标环境和

19、主机环境的差异:目标编译器的bug 目标码的验证,2019年4月15日,33,如何开展交叉测试(Host/Target测试) 选用带有目标支持包(Target Package)的软件测试工具 确定哪些模块与硬件无关,哪些与硬件相关 配置相应的调试环境和目标环境 分别进行Host和Target测试 Host:源代码+测试用例-编译连接-执行-测试结果 Target:源代码+测试用例+目标包-编译连接-下载-执行-反馈测试结果 交叉测试的嵌入式调试环境 Simulator Emulator BDM/JTAG Emulator,嵌入式软件测试方法(6),2019年4月15日,34,“拿来主义” 静态

20、分析很重要 Watts S. Humphrey的说法 很多软件工程师认为动态测试比静态测试更重要并非如此 有经验的软件工程师平均每写1000行代码将会出现100个错误 80%的软件错误归咎于对于编写语言的错误使用,而这些错误往往不是功能测试能解决的 因此,软件工程师应该消除错误,找出根源,预防再次发生同样的问题 静态分析的重要内容代码规则检查 实施简单、方便 无需执行程序,与嵌入式环境无关 早期介入,代价小,见效快 有利于降低动态测试的难度 有利于养成良好的编程习惯 可以执行自定的规范,嵌入式软件测试方法(7),2019年4月15日,35,“拿来主义” 动态测试不可少 动态测试是验证软件功能最

21、直接、最有效的手段 通过运行被测程序验证其功能、性能,检查代码的执行情况 与静态分析相辅相成 需要事先设计详细、完备的测试用例 可用白盒、黑盒等方法 工作量较大、较枯燥 动态测试的主要内容 功能、性能验证,是否符合需求定义 代码覆盖。哪些代码执行了,哪些没有执行,其比例如何,嵌入式软件测试方法(8),2019年4月15日,36,“拿来主义” 白盒黑盒相辅成 白盒测试与黑盒测试是软件测试最常用、最常规的两种技术 白盒测试 把测试对象看作一个透明的盒子,测试人员从其逻辑结构入手,设计和选择测试用例,对路径、控制结构、数据流等进行测试 通过插装检查程序的状态,确定是否与预期的状态一致 侧重于代码运行

22、的过程 黑盒测试 把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构,只依据其需求定义,检查程序运行的结果 多用于功能测试和性能分析 在程序的接口上进行 需要设计“驱动”和“打桩”,嵌入式软件测试方法(9),2019年4月15日,37,“拿来主义” 单元集成两步走 单元测试和集成测试是软件测试的两个阶段 单元测试 将被测软件分解为单元,逐个测试 单元测试需要从程序的内部结构和功能出发设计测试用例。 多个模块可以平行地独立进行单元测试 可用白盒、黑盒等方法 集成测试 在单元测试的基础上,将所有模块按照设计要求组装起来测试 主要测试内容 接口间参数传递 集成的功能实现 模块间的影响,嵌

23、入式软件测试方法(10),2019年4月15日,38,先静后动,从小到大,由黑到白 先静态,后动态 从代码规则检查做起 测试开展得越早,付出的代价就越小 静态分析简单、方便,成本低、见效快 静态分析为动态测试打下良好基础 大大降低了测试的成本 先单元,后集成 单元测试是集成测试的基础 单元测试得越好,集成测试的工作量就越小 先黑盒后白盒 先验证软件功能是否满足需求 后验证程序覆盖率,补充测试,软件测试策略(1),2019年4月15日,39,质量分析,事半功倍 通过改善代码的结构来分析、改进软件的质量充分应用结构化测试技术 软件模块的圈复杂度和逻辑结构能客观地反映软件的质量 逻辑越“复杂”,就越

24、容易出错。 结构越“良好”,代码就越可靠 代码质量分析的好方法结构化测试 从结构入手分析代码的复杂程度 逻辑复杂度定量化 客观 有理论基础 复杂度与代码出错的关联性非常强 指导测试的执行 指出代码质量改进的方向,嵌入式软件测试策略(2),2019年4月15日,40,交叉测试,因地制宜 嵌入式软件测试,软件测试策略(3),2019年4月15日,41,选好工具,抓好管理 工欲善其事,必先利其器 通常工具是必需的,但不是万能的 根据测试需要和工具的特长进行选择 使用测试工具带来的好处 客观,准确,无感情色彩 可长时间工作,不会疲劳 高效、权威 减轻人的工作量,但不能完全代替人 测试需要管理 测试要长

25、期化、常态化、系统化 测试需要维护、更新 回归测试 过程管理 缺陷追踪,嵌入式软件测试策略(4),2019年4月15日,42,软件测试完整解决方案,2019年4月15日,43,嵌入式常用软件测试工具介绍(1),各类MPU 汇编源程序,嵌入式 C源程序 和头文件,打印,定制最合适的布局,MSWord,HTML,组合各类文档、源文件的专用阅读器,CasePlayer2,单击图标便可完成,C/汇编选项 参数文件,规格说明书 -流程图 -模块构造图 -模块规格说明书 -模块一览表 -结构体规格说明书 -结构体一览表,定义解析方法,CasePlayer 面向嵌入式开发的程序规格说明书制作工具 CaseP

26、layer2是一种可以解析汇编、C语言(ANSI C或非ANSI C)的源代码,并且制作流程图以及模块规格说明书的制作工具,2019年4月15日,44,嵌入式常用软件测试工具介绍(2),PRQA代码规则检查 英国Programming Research公司出品 代码规则检查 分别针对C, C+, FORTRAN、JAVA 支持MISRA C/C+等国际标准,及用户自定义的编程规范 PRQA能发现 违背程序编写标准的问题 发现程序中不安全,不明确和模糊的部分 找出程序中不可移植部分 违背程序编译格式的问题 但不可以检测程序的实际功能的正确性 PRQA还能 提供多达44种业界广泛接受的度量 提供多

27、种可视化输出,包括函数结构图、函数调用树、外部参考、头文件关联、统计度量分析,2019年4月15日,45,嵌入式常用软件测试工具介绍(3),QAC/C+代码规则检查 规则可以选择、定制、汉化 简单易用,见效快,2019年4月15日,46,嵌入式常用软件测试工具介绍(4),Tessy自动单元测试 公司:德国Hitex/Razorcat C/C+语言目标系统的单元测试(动态测试) 分析源代码识别变量和类型,提供输入和输出的接口 自动生成驱动和打桩 管理测试用例,支持回归测试 标准的测试报告 测试驱动是基于Master/Slave结构,允许无限多的用例和很少的目标系统资源 各种数据类型智能分析,包括

28、指针的支持 批处理功能可以在GUI和命令行下完成 与嵌入式开发环境的无缝集成,占用资源很小 支持MC/DC测试 支持低端单片机,2019年4月15日,47,嵌入式常用软件测试工具介绍(5),Tessy支持的嵌入式环境,2019年4月15日,48,嵌入式常用软件测试工具介绍(6),McCabe IQ结构化测试/质量分析 美国McCabe & Associates公司出品 McCabe IQ适用于软件测试的不同阶段,主要构成: McCabe QA(质量分析) McCabe Test(追踪与测试) McCabe Reengineering(再工程)。,2019年4月15日,49,嵌入式常用软件测试工

29、具介绍(7),Cantata+单元测试/集成测试 英国IPL公司出品 Cantata+ for C/C+ AdaTEST for Ada83/95 主要功能 动态测试 Does the code meet its specification? 静态分析 Does the code meet coding and complexity standards? 覆盖分析 How much of the code been tested? 主要特点 自动脚本技术,自动生成驱动程序和桩模块 独特的Wrapping技术,完全控制程序的接口,做到真正的逆向测试 同时进行动态/静态/覆盖测试。用户可自定义通过/失败标准 可支持中文界面 支持嵌入式软件测试,2019年4月15日,50,嵌入式常用软件测试工具介绍(8),Klocwork软件缺陷检查 加拿大Klocwork公司出品 能够分析C、C+、C#和Java代码; 能够发现的软件缺陷种类: 软件质量缺陷 安全漏洞方面的缺陷 对软件架构、编程缺陷的违反情况 对软件进行可视化的架构分析、优化 对软件进行各种度量分析 能够提供与多种主流IDE开发环境的集成 能够分析上千万代码行的超大型软件,谢谢大家,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1