‘壹’ 请问嵌入式软件测试工具有哪些
VectorCAST™是主要用于C/C++/Ada程序的自动化测试软件,能够运行在Windows和Linux等多种开发环境。其主要功能包含自动化的单元测试、集成测试、覆盖率分析、回归测试、代码静态分析和测试需求跟踪,其最大特点或相比于其它相关同类工具最大的优势,就在于最大程度的自动化和更适用于嵌入式环境。
‘贰’ 嵌入式软件测试的嵌入式静态测试工具
Goanna是一个针对C/C++安全可靠性进行深度静态分析的工具,为安全性的嵌入式软件提供全球领先的静态C/C++代码分析解决方案。作为确保符合例如DO-178B、ISO26262等安全标准的重要组成部分,Goanna结合了最新的程序验证研究,并可以与IDE和构建服务器无缝结成,从而为用户提供一个简单而强大的桌面解决方案来提高创建代码的信心。Goanna产品已被全球汽车、军工、医疗、关键任务的嵌入式系统等行业广泛应用进行软件验证。
Goanna的特性:
在错误进入产品前及早发现:Goanna的深度静态分析只需要源代码就可以自动化地找到C/C++程序中的错误,不需要编译、模拟或者执行代码。通过在开发生命周期最早期的阶段发现错误,用户可以实现以下目标:提高代码质量;降低成本;节约开发时间;使产品更快进入市场。
Goanna可以与大部分IDE和配置环境集成,将强大的深度静态分析部署在用户指尖,只需要点击就可以执行,而不需要冗长的安装成本或者中断用户已有的工作流程;
独一的追踪模拟器:Goanna可以直接在用户的IDE中“重现”复杂缺陷的跟踪,让用户可以更快地精确定位缺陷的根本原因;
灵活的增量分析:Goanna生成被分析函数的数字指纹,确保只会分析上次执行之后被修改的部分代码,从而防止函数在未被改变的情况下产生重分析的潜在费用,实现快速测试周期而不需要等待可能数小时的重新分析;
行业标准:Goanna可以提供符合一些行业安全规范的验证,例如: MISRA C:2004;MISRA C++:2008;CERT;CWE,从而帮助客户通过一些标准的认证,例如ISO26262,DO-178B等;
可自定义的检查:可以非常容易地根据用户的标准和需求来自定义检查;
获奖的技术:Goanna采用先进的获得Turing奖的模型检查技术,提供所有执行路径提供高效的完全路径覆盖,甚至非常复杂的函数可以;
路径敏感的完整代码分析:Goanna独特的专利技术提供的完整的程序间分析可以发现调用链中深度的缺陷,甚至可以跨越多个函数和文件,例如空指针不能获得通过并在其它函数中取消其引用;
抽象数据跟踪:Goanna可以自动跟踪变量的潜在范围,实现程序中所有点上的取值、大小和地址的计算,从而非常容易地查找出在动态测试和人工检查很容易错过的缺陷,例如发现可能的缓冲区溢出或者不可行路径等;
超过250个有很高价值的检查:空指针错误;数组越界;字符串溢出;内存泄露;内存损坏;双重释放;安全性缺陷;坏的结构;未初始化变量;死代码;算术错误;可移植性缺陷;除零;不安全的库;加上无限可能的用户自定义的检查;等等
可视的图形化报告:缺陷可以通过一个易于使用的Web接口被即时地绘制成图形化的报告,提供缺陷历史和问题领域。高亮的图表使开发人员能够在错误出现的时候立即识别出故障点并尽快地解决。
集成的仪表盘和度量:通过和基于Sonar的仪表盘的集成,Goanna还可以提供附加的静态分析、圈复杂度分析、代码覆盖率分析以及重复度量指标等信息。
‘叁’ 嵌入式开发中PC端使用什么调试和测试软件
嵌入式系统的功能千差万别,测试的要求也千差万别,故绝对通用的软件是没有的,相对通用的黑盒测试工具,大致分为两种类型:纯软件的测试平台、软硬一体化的测试平台。
1)纯软件的测试平台,通常比较平易近人,简单易用,应用成本低。
例如,格西烽火通信测试软件,是一款基于串口和网口的调试和测试软件,主要解决电子研发过程中调试和测试软件定制化过多的问题,能够快捷地定制任意通信规约,使得通信软件能够应付快速多变的通信测试环境。
‘肆’ 求C语言嵌入式软件测试工具
首先是各种仪器仪表的使用,如万用表,示波器,逻辑分析仪,其次嵌入式软件测试一般是配合硬件做的,因此需要对硬件有一定的了解,没有什么测试工具,因此一般的测试主要是测量数据,基本学不到技术,而且很多时候是研发人员自己完成后进行测试,没有问题了就让你做长时间运行测试稳定性,做开发也很简单的,建议做研发吧
‘伍’ 嵌入式软件测试技巧有哪些
嵌入式软件开发过程中,一般来说,花在测试和花在编码的时间比为3:1(实际上可能更多)。这个比例随着你的编程和测试水平的提高而不断下降,但不论怎样,软件测试对一般人来讲很重要。很多年前,一位开发人员为了在对嵌入式有更深层次的理解,向Oracle询问了这样的一个问题:我怎么才能知道并懂得我的系统到底在干些什么呢?Oracle面对这个问题有些吃惊,因为在当时没有人这么问过,而同时代的嵌入式开发人员问的最多的大都围绕“我怎么才能使程序跑的更快”、“什么编译器最好”等肤浅的问题。所以,面对这个不同寻常却异乎成熟的问题,Oracle感到欣喜并认真回复了他:你的问题很有深度很成熟,因为只有不断地去深入理解才有可能不断地提高水平。并且Oracle为了鼓励这位执着的程序员,把10条关于嵌入式软件开发测试的秘诀告诉了他:
1.懂得使用工具
2.尽早发现内存问题
3.深入理解代码优化
4.不要让自己大海捞针
5.重现并隔离问题
6.以退为进
7.确定测试的完整性
8.提高代码质量意味着节省时间
9.发现它,分析它,解决它
10.利用初学者的思维
这十条秘诀在业界广为流传,使很多人受益。本文围绕这十条秘诀展开论述。
1.懂得使用工具
通常嵌入式系统对可靠性的要求比较高。嵌入式系统安全性的失效可能会导致灾难性的后果,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这就要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。随着越来越多的领域使用软件和微处理器控制各种嵌入式设备,对门益复杂的嵌入式软件进行快速有效的测试愈加显得重要。
就象修车需要工具一样,好的程序员应该能够熟练运用各种软件工具。不同的工具,有不同的使用范围,有不同的功能。使用这些工具,你可以看到你的系统在干些什么,它又占用什么资源,它到底和哪些外界的东西打交道。让你郁闷好几天的问题可能通过某个工具就能轻松搞定,可惜你就是不知道。那么为什么那么多的人总是在折腾个半死之后才想到要用测试工具呢?原因很多,主要有两个。一个是害怕,另一个是惰性。害怕是因为加入测试用具或测试模块到代码需要技巧同时有可能引入新的错误,所以他们总喜欢寄希望于通过不断地修改重编译代码来消除bug,结果却无济于事。懒惰是因为他们习惯了使用printf之类的简单测试手段。下面来介绍一些嵌入式常用的测试工具。
.源码级调试器[Source-level Debugger]
这种调试器一般提供单步或多步调试、断点设置、内存检测、变量查看等功能,是嵌入式调试最根本有效的调试方法。比如VxWorks TornadoII提供的gdb就属于这一种。
.简单实用的打印显示工具[printf]
printf或其它类似的打印显示工具估计是最灵活最简单的调试工具。打印代码执行过程中的各种变量可以让你知道代码执行的情况。但是,printf对正常的代码执行干扰比较大(一般printf占用CPU比较长的时间),需要慎重使用,最好设置打印开关来控制打印。
.ICE或JTAG调试器[In-circuit Emulator]
ICE是用来仿真CPU核心的设备,它可以在不干扰运算器的正常运行情况下,实时的检测CPU的内部工作情况。像桌面调试软件所提供的:复杂的条件断点、先进的实时跟踪、性能分析和端口分析这些功能,它也都能提供。ICE一般都有一个比较特殊的CPU,称为外合(bond-out)CPU。这是一种被打开了封装的CPU,并且通过特殊的连接,可以访问到CPU的内部信号,而这些信号,在CPU被封装时,是没法“看到”的。当和工作站上强大的调试软件联合使用时,ICE就能提供你所能找到的最全面的调试功能。但ICE同样有一些缺点:昂贵;不能全速工作;同样,并不是所有的CPU都可以作为外合CPU的,从另一个角度说,这些外合CPU也不大可能及时的被新出的CPU所更换。JTAG(Joint Test Action Group)虽然它最初开发出来是为了监测IC和电路连接,但是这种串行接口扩展了用途,包括对调试的支持。AD公司为Blackfin设计的Visual Dsp++就支持高速的 JTAG调试。
‘陆’ 软件测试工具有哪些
1、WinRunner
Winrunner 最主要的功能是自动重复执行某一固定的测试过程,它以脚本的形式记录下手工测试的一系列操作,在环境相同的情况下重放,检查其在相同的环境中有无异常的现象或与预期结果不符的地方。
2、LoadRunner
LoadRunner® 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。
3、QTP
QTP是一个B/S系统的自动化功能测试的利器,软件程序测试工具。Mercury的自动化功能测试软件QuickTest Professional ,可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。
4、TestDirector
基于WEB的测试管理工具,他能够让你系统地控制整个测试过程,并创建整个测试工作流的框架和基础,使整个测试管理过程变得更为简单和有组织。
5、SilkTest
SilkTest 是面向Web应用、Java应用和传统的C/S应用,进行自动化的功能测试和回归测试的工具。它提供了用于测试的创建和定制的工作流设置、测试计划和管理、直接的数据库访问及校验等功能,使用户能够高效率地进行软件自动化测试。
6、Selenium
Selenium是为正在蓬勃发展的web应用开发的一套完整的测试系统。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
7、TPT
TPT是针对嵌入式系统的基于模型的测试工具,特别是针对控制系统的软件功能测试。TPT支持所有的测试过程:包括测试建模、测试执行、测试评估以及测试报告的生成。
‘柒’ 嵌入式软件测试的软件动态测试工具
Tessy是一个专门针对嵌入式软件的C/C++代码进行单元、集成测试的工具,它可以自动化地执行测试、评估测试结果并生成测试报告。Tessy的目标就是:通过自动化整个测试周期,在所有测试阶段完美支持针对C语言的单元测试,当然,Tessy也同样关注测试组织和测试管理。
在以V模型为例的开发模式中,Tessy主要处理右半部分验证和确认中单元/模块测试,集成/组件测试以及系统测试的内容。在V模型的开发模式中,单元测试是第一个测试活动。它阻止了每一类错误,比如算法错误,在V模式的右边向上蔓延,这样可以尽可能早得发现Bug,防止直到后面的测试过程或者直到最终用户那里才被发现,单元测试有经济效益,越早发现bug越好 。
另外,Tessy也可以满足各类标准(ISO26262、IEC 61508、 EN 50128/50129、 DO-178B、汽车SPiCE或FDA的软件验证通用原则)对测试的需求,比如ISO26262中各个测试等级中对模块测试的要求可以使用Tessy来满足,当然Tessy本身也通过了TUeV的认证,被证明是安全可靠的,可以在安全相关性的软件研发过程中被使用。 自动生成测试环境:
Tessy可以自动生成测试环境驱动,选择自动或者手动打桩以及自动生成测试用例模板,帮助客户提高测试用例设计效率。
多种测试用例确定方式:
除了从Excel中导入测试用例,手动地设计测试用例外,Tessy里集成了CTE软件,根据分类树的方法通过Tessy自动化地关联测试用例。
支持动态测试的各阶段:
Tessy可以支持从单元测试到系统测试的动态测试过程各个阶段,通过单元测试检查最小单位为函数的功能,通过集成测试来测试各个子功能组合起来的模块能否达到预期要求的父功能以及相互间的接口,通过系统测试实现与目标板集成的测试环境来测试系统功能;另外Tessy可以自动发现被测对象的改变,分析被测对象的接口,重用测试用例和测试数据,从而为重复的回归测试节约大量的工作和时间,在接口不变的情况下Tessy可以完全自动化地执行不需要用户介入的回归测试;
全自动地测试执行及评估;
Tessy检查源文件并且通过分析程序代码来确定函数以及他们的接口,这些信息将被保存在特定的数据库中供随时检索,接口信息和测试数据的分离实现了结构和数据之间的明确划分,一方面,接口的测试使首先显示变化成为可能,另一方面,如果发生变化,通常也只有要测试的函数接口的几个元素要发生变化,在Tessy中接口发生变化时的处理相当简单;
测试报告生成:
管理测试数据并将测试结果文档,Tessy提供输入参数/执行测试和评估结果和报告文档,Tessy可以生成各种类型的测试报告,包括详细报告、概况报告以及覆盖度报告等。
显示测试覆盖度:
Tessy提供C1覆盖,即分支覆盖branch coverage或者判定覆盖decision coverage ;条件覆盖,即多条件覆盖MCC(Multiple Condition Coverage)和修正条件判定覆盖MC/DC(Modified Condition/Decision Coverage),Tessy是通过测试应用程序来获取测试覆盖信息的;
支持各种测试环境:
Tessy可以支持超过130种微控制器、交叉编译器和调试器的组合; 这确保了Tessy能够处理交叉编译器生成的非标准C(ANSI-C)微控制器特定的代码; 一旦Tessy和不同的调试器完成集成,就可以自动执行测试了。
支持ASAP2:在Tessy中设计测试用例之前选择与ASAP2标准的集成功能,确定需要导入的ASAP2文件,使用ASAP2转换规则自动地将测试用例中设计的测试数据物理值转换为在目标板中执行测试对象的整数值,从而简化测试用例设计的理解和实现,并且可以在Tessy中显示其他ASAP2信息,例如单位,最大/最小值等。
Tessy用户列表及典型案例:Tessy被广泛应用于汽车、国防、铁路、医疗和工业应用领域当中,众多着名的汽车整车厂、零部件供应商都在使用Tessy。 汽车行业:Behr-Hella, Bertrandt, Beru, BMW, Bose, Brose, Continental Temic, Daimler, Delphi, Delphi Grundig, Getrag, Helbako, Hella, John Deere, Kiekert, Kostal, Lear, Magna, Marquardt, Pierburg, Preh, SAB Wabco, Siemens VDO, Takata, Tata Elxsi, Tesla, TietoEnator, TRW, Wabco, Valeo, ZF, … 安全关键性领域:Bosch Rexroth, Demag Cranes, Endress&Hauser, Festo, Hanning&Kahl, Liebherr, SEW, Siemens A&D, Testo, Wago, … 医疗行业:Allergan, Biotronik, Dräger, getemed, Leica Biosystems, Otto Bock, Sensimed, Stago, St. Jude Medical, Ypsomed, … 白色家电、国防等领域
‘捌’ 嵌入式测试的测试工具
在嵌入式领域目标系统的应用系统日趋复杂,而由于竞争要求产品快速上市,开发技术日新月异,同时硬件发展的日益稳定,而软件故障却日益突出,软件的重要性逐渐引起人们的重视,越来越多的人认识到嵌入式系统的测试势在必行。提到嵌入式软件测试,首先要简单介绍一些软件工程的一些观点,现在,被普遍接受的软件的定义是:软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。其中程序是按照事先设计的功能和性能要求执行的指令序列;数据是是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。
对于一般商用软件的测试,嵌入式软件测试有其自身的特点和测试困难。
由于嵌入式系统的自身特点,如实时性(Real-timing),内存不丰富,I/O通道少,开发工具昂贵,并且与硬件紧密相关CPU种类繁多,等等。嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。
嵌入式软件测试使用有效的测试策略是唯一的出路,它可以使开发的效率最大化,避免目标系统的瓶颈,使用在线仿真器节省昂贵的目标资源。自从出现高级语言,开发环境与最终运行环境通常都是存在差异的,嵌入式系统更是如此。开发环境被认为是主机平台,软件运行环境为目标平台。相应的测试为host-target测试或cross-testing。
讨论嵌入式软件测试首先就会遇到一个问题:为什么不把所有测试都放在目标上进行呢?因为若所有测试都放在目标平台上有很多不利的因素:
1)测试软件,可能会造成与开发者争夺时间的瓶颈,避免它只有提供更多的目标环境。
2)目标环境可能还不可行。
3)比起主机平台环境,目标环境通常是不精密的和不方便的。
4)提供给开发者的目标环境和联合开发环境通常是很昂贵的。
5)开发和测试工作可能会妨碍目标环境已存在持续的应用
从经济上和开发效率上考虑,软件开发周期中尽可能大的比例在主机系统环境中进行,其中包括测试。
确定host-target测试环境后,开发测试人员又会遇到以下的问题:
1)多少开发人员会卷入测试工作(单元测试,软件集成,系统测试)?
2)多少软件应该测试,测试会花费多长时间?
3)在主机环境和目标环境有哪些软件工具,价格怎样,适合怎样?
4)多少目标环境可以提供给开发者,什么时候?
5)主机和目标机之间的连接怎样?
6)被测软件下载到目标机有多快?
7)使用主机与目标环境之间有什么限制(如软件安全标准)?
任何人或组织进行嵌入式软件的测试都应深入考虑以上问题,结合自身实际情况,选定合理测试策略和方案。
对于嵌入式软件测试或叫交叉测试(cross-test),在测试的各个阶段有着通用的策略: 所有单元级测试都可以在主机环境上进行,除非少数情况,特别具体指定了单元测试直接在目标环境进行。最大化在主机环境进行软件测试的比例,通过尽可能小的目标单元访问所有目标指定的界面。
在主机平台上运行测试速度比在目标平台上快的多,当在主机平台完成测试,可以在目标环境上重复作一简单的确认测试,确认测试结果在主机和目标机上没有被他们的不同影响。在目标环境上进行确认测试将确定一些未知的,未预料到的,未说明的主机与目标机的不同。例如,目标编译器可能有bug,但在主机编译器上没有。 软件集成也可在主机环境上完成,在主机平台上模拟目标环境运行,当然在目标环境上重复测试也是必须的,在此级别上的确认测试将确定一些环境上的问题,比如内存定位和分配上的一些错误。
在主机环境上的集成测试的使用,依赖于目标系统的具体功能有多少。有些嵌入式系统与目标环境耦合的非常紧密,若在主机环境做集成是不切实际的。一个大型软件的开发可以分几个级别的集成。低级别的软件集成在主机平台上完成有很大优势,越往后的集成越依赖于目标环境。 所有的系统测试和确认测试必须在目标环境下执行。当然在主机上开发和执行系统测试,然后移植到目标环境重复执行是很方便的。对目标系统的依赖性会妨碍将主机环境上的系统测试移植到目标系统上,况且只有少数开发者会卷入系统测试,所以有时放弃在主机环境上执行系统测试可能更方便。
确认测试最终的实施舞台必须在目标环境中,系统的确认必须在真实系统之下测试,而不能在主机环境下模拟。这关系到嵌入式软件的最终使用。
包括恢复测试、安全测试、强度测试、性能测试,已超出了软件测试的范畴,本文暂不讨论。
使用有效的cross-test测试策略可极大的提高嵌入式软件开发测试的水平和效率,当然正确的测试工具使用也是必不可少的:
总结一下,应用以上测试工具进行.Cross-test时的策略:
A)使用测试工具的插装功能(主机环境)执行静态测试分析,并且为动态覆盖测试准备好一插装好的软件代码。
B)使用源码在主机环境执行功能测试,修正软件的错误和测试脚本中的错误。
C)使用插装后的软件代码执行覆盖率测试,添加测试用例或修正软件的错误,保证达到所要求的覆盖率目标。
D)在目标环境下重复(B),确认软件在目标环境中执行测试的正确性。
E)若测试需要达到极端的完整性,最好在目标系统上重复(C),确定软件的覆盖率没有改变。
通常在主机环境执行多数的测试,只是在最终确定测试结果和最后的系统测试才移植到目标环境,这样可以避免发生访问目标系统资源上的瓶颈,也可以减少在昂贵资源如在线仿真器上的费用。另外,若目标系统的硬件由于某种原因而不能使用时,最后的确认测试可以推迟直到目标硬件可用,这为嵌入式软件的开发测试提供了弹性。设计软件的可移植性是成功进行cross-test的先决条件,它通常可以提高软件的质量,并且度软件的维护大有益处。以上所提到的测试工具,都可以通过各自的方式提供测试在主机与目标之间的移植,从而使嵌入式软件的测试得以方便的执行。
使用有效的cross-test测试策略可极大的提高嵌入式软件开发测试的水平和效率,提高嵌入式软件的质量。
附录:
1). HOST-TARGET的连接方法简介:
图1-- 直接连接
图2 -- 通过仿真器连接
图3 -- 使用介质进行间接连接
图4 -- 使用PROM等传递被测软件
图5 -- 测试的交互界面
图6 -- 无交互界面的连接
‘玖’ 推荐一个嵌入式单元测试工具
winAMS
全面支持嵌入式微机!验证嵌入式C/C++软件 实施以模块为单位的自动化单元测试工具
不需要HookCode 直接使用目标机代码进行单元测试
联合静态解析工具[CasePlayer2],提供C1,MC/DC用优化测试计划(test case)制作功能
已取得第三方认证机构TUVSUD对适用于汽车机能安全ISO26262软件工具的认证
‘拾’ LoadRunner或QTP那个能测试嵌入式医疗机械软件
两个工具都可以用在医疗器械软件中的。
1、loadrunner(性能测试工具):医疗器械在正常的工作中应该不会考虑到负载和压力,就像X光设备,只有一个人去使用。在这里loadrunner应该可以作为强度测试,系统资源不足的情况下,正常负载下运行设备的性能,他的主要目的是考察稳定运行所需要的最小资源。
2、QTP(自动化工具):按照开发疗程,设备软件在不同的阶段会有不同的测试方法,当我们完成功能测试,一般逻辑复杂的大型软件都会使用自动化测试,功能测试阶段就会开发出自动化脚本,到回归测试的时候使用,这样大大的节省了人力物力和时间。