常用的测试方法和测试工具-1
-
常用的测试方法
一、黑盒测试
1.
黑盒测试其实是一种功能测试,
主要在软件的接口处进行。主要测试的
以下几类错误:
·是否有不正确或遗漏的功能
·在给出的接口处正确的输入是否有正确的输出
·是否有数据结构错误或外部信息访问错误
·性能上是否满足要求
·是否有初始化或终止性错误
2.
黑盒测试用例
·等价类划分
等价类即输入域的子集合
,
测试用例设计时应设计出对应的
有效等价类和
无效等价类
·边界值
边界值法是对等价类划分方法的补充,主要是测试发生在输入和输出域边
界上的错误
.
等价类划分和边界值着重考虑输入条件
,
但测试时还应考虑输入条
件之间的关
系,各种条件的组合情况,即因果图
·因果图
根据输入条件间的关系生成判定表,根据判定表的每一列来设计测试用例
·功能图
包括状态迁移图和逻辑模型
二、白盒测试
1
.白盒测试是对软件过程性细节做细致的检查。主要对软件程序模块做以
下检
查:
·对模块的所有路径至少执行一次
·
对模块的所有逻辑判断,取“真”和“假”两种情况各执行一次
·在循环边界和运行界限内执行循环体
·测试内部数据结构的有效性
2
.白盒测试用例
1)
逻辑覆盖
·语句覆盖
·分支覆盖
对程序模块中的每个取真分支和取假分支执行一遍
·条件覆盖
对程序模块中的每个判断的每个条件执行一遍
由于以上的测试用例都有较大的缺陷,所以一般不会使用<
/p>
,
采用条件组合
覆盖更为合理有效
·条件组合覆盖
(
< br>逻辑覆盖的主要方法
)
2)
基本路径测试用例
测试步骤:
①根据详细设计或源代码导出程序控制流图
②计算程序环路复杂性
,
即独立路径的数目
(
一条新的路径必须包含
一条新边
)
③生成测试用例
(
辅助工具:图形矩阵
)
测试策略
一、单元测试
1.
单元测试时主要对模块的以下<
/p>
5
个方面进行检查:
·模块接口
·局部数据结构
·边界条件
·独立路径
·出错处理
二、集成测试
1.
集成测试时主要要考察程序的以下几个方面
:
·各个模块连接时
,
穿越模块接口的数据是否会丢失<
/p>
·一个模块是否会对另一个模块的功能产生不利的影响
·各个子功能组合起来
,
能否达到预期的父功
能
·全局数据结构是否有问题
p>
·单个模块的误差累积起来
,
是否会被放大
,
从而达到不可接受的程度
2.
集成测试的组织和实施中考虑的因素
:
·选用何种系统集成方法来进行集成测试
·各个模块连接的顺序
·模块代码编制和测试进度是否集成测试的顺序是否一致
·测试过程中是否需要有专门的硬件
3.
集成测试完成的标志
·成功执行了测试计划中规定的所有组装测试
·修正了所发现的错误
·测试结果通过了专门小组的评审
三、确认测试
1.
确认测试流程
:
·进行有效性测试<
/p>
,
即在模拟的环境下(可能是开发环境)
,运用黑盒测试
的方法,
验证所没软件是否满足需求说明书列出
的需求。
对于测试结果与预期结
果不相符进,要提交一份问题报
告。
·软件配置复查
< br>软件配置复查的目的是保证软件配置的所有成份都齐全,各方面的质量
都符合要求
。
·a测试和
ß
测试
< br>a测试是一个用户在开发环境下进行的测试,
也可以是开发机构内部的
用户在模拟实际操作环境下进行的测试。
ß
测试是
由软件的多个用户在一个或多
个用户的实际使用环境下进行的测试
·验收测试
验收测试时软件开发人员和
QA
人员也应参加,由用户参加设计测试用
例,使用用户界面输入测
试数据,并分析测试结果。
四、系统测试
即通过确认测试的软作为整个系统中的一个元素而进行的测试。
嵌入式系统测试方法及工具
通常嵌入式系统对可靠性的要求比较高。
嵌入式系统安全性的失效可能会导
致灾难性的后果,
即使是
非安全性系统,
由于大批量生产也会导致严重的经济损
失。这就
要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。
一般来说,软件测试有
7
个基本阶段,即单元或模块测试、集成测试、外部
功能测试、回归测试、系
统测试、验收测试、安装测试。嵌入式软件测试在
4
个阶段上进
行,即模块测试、集成测试、系统测试、硬件
/
软件集成测试。
前
3
个阶段适用于任何软件的测试,
硬
件
/
软件集成测试阶段是嵌入式软件所特有的,
目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。
1.
白盒测试与黑盒测试
由于严格的安全性和可靠性的要求,
嵌入式软件测试同非嵌入式软件测试相
比,
通常要求有更高的代
码覆盖率。
对于嵌入式软件,
白盒测试一般不必在目标
硬件上进行,
更为实际的方式是在开发环境中通过硬件仿真进行,
所以选取的测
试工具应该支持在宿主环境中的测试。
< br>
因为黑盒测试与需求紧密
相关,需求规格说明的质量会直接影响测试的结
果,
黑盒测试只
能限制在需求的范围内进行。
在进行嵌入式软件黑盒测试时,
要
把系统的预期用途作为重要依据,根据需求中对
负载、定时、性
能
的要求,判断
软件是否满足这些需求规范。
< br>为了保证正确地测试,
还须要检验软硬件之间的接
口。<
/p>
嵌入式软件黑盒测试的一个重要方面是极限测试。
在使用环境中,
通常要求
嵌入式软件的失效过程要平稳,
所以,
黑盒测试不仅要检查软件工作过程,
也要
检查软件换效过程。
2
、目标环境测试和宿主环境测试
在嵌入式软件测试中,
常常要在基于目标的测试和基于宿主的测试之间作出
折衷。
基于目标的测试消耗较多的经费和时间,
而基于宿主的测试代价较小,
但
毕竟是在模拟环境中进行的。目前的趋势是把更多的测试转移到宿主环
境中进
行,但是,目标环境的复杂性和独特性不可能完全模拟。
在两个环境中可以出现不同的软件
缺陷,
重要的是目标环境和宿主环境的测
试内容有所选择。
p>
在宿主环境中,
可以进行逻辑或界面的测试、
以及与硬件无关
的测试。
在模拟或宿主环境中的测试消耗时间
通常相对较少,
用调试工具可以更
快地完成调试和测试任务。<
/p>
而与定时问题有关的白盒测试、
中断测试、
硬件接口
测试只能在目标环境中进行。在软件测试周期中,基于目标的测试是在较晚的
“硬件
/
软件集成测试”阶段开始的,
如果不更早地在模拟环境中进行白盒测试,
而是等到“硬件
p>
/
软件集成测试”阶段进行全部的白盒测试,将耗费更多的财力
p>
和人力。
2.
常用的嵌入式软件测试工具
1)
内存分析工具
< br>在嵌入式系统中,内存约束通常是有限的。内存分析工具用来处理在动态内
存分配
中存在的缺陷。
当动态内存被错误地分配后,
通常难以再现,<
/p>
可能导致的
失效难以追踪,
使用内存分析
工具可以避免这类缺陷进入功能测试阶段。
目前有
两类内存分析
工具——软件和硬件的。
基于软件的内存分析工具可能会对代码的
性能造成很大影响,
从而严重影响实时操作;
基于硬件的内存
分析工具价格昂贵,
而且只能在工具所限定的运行环境中使用。
2)
性能分析工具
在嵌入式系统中,
程序的性能通常是非常重要的。
经常会有这样的要求,
在
特定时间内处理一个中断,
或生成具有特定定时要求的一帧。
开发人面临的问题
是决定应该对哪一部分代码进行优化来改进性
能,
常常会花大量的时间去优化那
些对性能没有任何影响的代码
。
性能分析工具会提供有关的数据,
说明执行时间
是如何消耗的,是什么时候消耗的,以及每个例程所用的时间。根据这些数据,
确定哪些例程消耗部分执行时间,
从而可以决定如何优化软件,
获得更好的时间
性能。
对于大多数应用来说,
大部分执行时间用在相对少量的代码上,
费时的代
码估
计占所有软件总量的
5%-20%
。
性
能分析工具不仅能指出哪些例程花费时间,
而且与调试工具联合使用可以引导开发人员查
看需要优化的特定函数,
性能分析
工具还可以引导开发人员发现
在系统调用中存在的错误以及程序结构上的缺陷。
3)GUI
测试工具
很多嵌入式应用带有某种形式的图
形用户界面进行交互,
有些系统性能测试
足根掘用户输入响应时
间进行的。
GUI
测试工具可以作为脚本工具有开发环境中
p>
运行测试用例,
其功能包括对操作的记录和回放、
< br>抓取屏幕显示供以后分析和比
较、设置和管理测试过程。很多嵌入式设备没有
p>
GUI
,但常常可以对嵌入式设备
进行插装
来运行
GUI
测试脚本,
虽然这种方式
可能要求对被测代码进行更改,
但
是节省了功能测试和回归测试
的时间。
4)
覆盖分析工具
在进行白盒测试时,
可以使用代码覆盖分析工具追踪哪些代码被执行过。
分
析过程可以通过插装来完成,
插装可以是在测试环境中嵌入硬件,
也可以是在可
执行代码中加入软件,
也可以是二者相结合。
测试人员对结果数据加以总结,
确
定哪
些代码被执行过,
哪些代码被巡漏了。
覆盖分析工具一般会提供
有关功能覆
盖、分支覆盖、条件覆盖的信息。对于嵌入式软件来说,代码覆盖分析工具可
能
侵入代码的执行,
影响实时代码的运行过程。
基于硬件的代码覆盖分析工具的侵
入程度要小一些,但是价格一般比较昂贵,而
且限制被测代码的数量。
嵌入式测试的十大秘诀
在嵌入式软件
开发过程中,一般来说,花在测试和花在编码的时间比为
3:1(
实
际上可能更多
)
。这个比例随着你
的编程和测试水平的提高而不断下降,但不论
怎样,
软件测试<
/p>
对一般人来讲很重要。
很多年前,
一位开
发人员为了对嵌入式有
更深层次的理解,
向
Oracle
询问了这样的一个问题
:
我怎么才能知道并懂得我的
系统到底在干些什么呢
?
p>
Oracle
面对这个问题有些吃惊,
因为
在当时没有人这
么问过,
而同时代的嵌入式开发人员问的最多的
大都围绕
“我怎么才能使程序跑
的更快”、
“什么编译器最好”等肤浅的问题。所以,面对这个不同寻常却异乎
成熟的问题,<
/p>
Oracle
感到欣喜并认真回复了他
:
你的问题很有深度很成熟,因为
只有不断地去深入理解才有可能
不断地提高水平。并且
Oracle
为了鼓励这位执
着的程序员,把10条关于嵌入式软件开发测试的秘诀告诉了他
:
1.
懂得使用工具
2.
尽早发现内存问题
3.
深入理解代码优化
4.
不要让自己大海捞针
5.
重现并隔离问题
6.
以退为进
7.
确定测试的完整性
8.
提高代码质量意味着节省时间
9.
发现它,分析它,解决它
10.
利用初学者的思维
这十条秘诀在业界广为流传,使很
多人受益。本文围绕这十条秘诀展开论述。
1
.
懂得使
用工具
通常嵌入式系统对可靠性的要求比
较高。
嵌入式系统安全性的失效可能会导
致灾难性的后果,
p>
即使是非安全性系统,
由于大批量生产也会导致严重的经济损
失。这就要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。随
着越来越多的领域使用软件和微处理器控制各种嵌入式设备,
对门益复杂的嵌入
式软件进行快速有效的测试愈加显得重要。
就象修车需要工具一样,
好的程序员应该能够熟练运用各种软件工具。
不同
的工具,有不同的使用范围,有不同的功能。使用这些工具,你可以看到你的系
统在干
些什么,
它又占用什么资源,
它到底和哪些外界的东西打交道。
让你郁闷
好几天的问题可能通过某个工具就能轻松搞定,
可惜你就是不知道。
那么为什么
那么多的人总
是在折腾个半死之后才想到要用
测试工具
呢?原因很多,
主要有两
个。
一个是害怕,
< br>另一个是惰性。
害怕是因为加入测试用具或测试模块到代码需
要技巧同时有可能引入新的错误,
所以他们总喜欢寄希望于通过不断地修改重编
p>
译代码来消除
bug,
结果却无济于事。<
/p>
懒惰是因为他们习惯了使用
printf
之类的
简单测试手段。下面来介绍一些嵌入式常用的
测试工具<
/p>
。
.
源码级调试器
[Source-
level Debugger]