如何评估嵌入式软件测试工具

上传人:ldj****22 文档编号:45703588 上传时间:2018-06-18 格式:PDF 页数:18 大小:301.18KB
返回 下载 相关 举报
如何评估嵌入式软件测试工具_第1页
第1页 / 共18页
如何评估嵌入式软件测试工具_第2页
第2页 / 共18页
如何评估嵌入式软件测试工具_第3页
第3页 / 共18页
如何评估嵌入式软件测试工具_第4页
第4页 / 共18页
如何评估嵌入式软件测试工具_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《如何评估嵌入式软件测试工具》由会员分享,可在线阅读,更多相关《如何评估嵌入式软件测试工具(18页珍藏版)》请在金锄头文库上搜索。

1、 Vector Software白 皮 书白 皮 书 2012 All rights reserved Vector Software VectorCAST.com 如何评估嵌入式软件测试工具 你的测试工具有些什么功能?你的测试工具有些什么功能? 在过去的几年中,测试自动化工具市场已经变得混乱。所有的工具都声称能做同 样一件事情:自动化测试。维基百科仅列出了38条C/C+测试框架。然而当潜在 的用户在浏览产品资料或观看简单的演示时,许多的这些测试工具看上去都是极 其相似的。 本文主要为工程师在评估软件测试自动化工具,尤其是动态的测试自动化工具时 应考虑的问题提供参考。 你不能通过阅读资料表来评

2、估一个测试工具你不能通过阅读资料表来评估一个测试工具 所有的资料表都是大同小异的。商业用语都是相同的,比如:“行业领导者”、 “独一无二的技术”、“自动化的测试”和“领先技术”等。屏幕截图也都是相 似的:“条形图”、“流程图”、“HTML报告”和“状态的百分比”。让人看得 都 麻木了。 什么是软件测试?什么是软件测试? 所有做过软件测试的人都知道测试有很多类型。为简单起见,本文中我们将讨论 以下三个方面: 系统测试:系统测试:测试完全集成的应用系统 集成测试:集成测试:测试集成的子系统 单元测试:单元测试:测试一些单个的文件或类 在大家做过的系统测试中,有一些跟最终用户将要做的操作是一样的。请

3、注意,我 们说的是“一些”,而不是“全部”。导致应用程序运行失败出现bug的最常见的 情况是在程序的输入域中输入了预料之外的未经测试过的输入组合。 如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第2页 VectorCAST.com 做集成测试的人不多,做单元测试的就更少了。如果你做过集成或单元测试,你 很可能会痛苦地意识到从应用程序的其余部分隔离单个文件或一组文件必须生成 的测试代码的数量是巨大的。在最严格的测试等级中,测试代码的编写量大于被 测程序代码量的情况并不少见。因此,这些级别的测试通常应用于任务和安全型 关键系统的市场中,

4、比如航空、医疗设备、铁路。 什么是“自动化测试”?什么是“自动化测试”? 众所周知,手工的单元和集成测试过程是非常费力和费时的;因此所有进入这个 市场出售的工具都将大力宣传“自动化测试”作为他们的获利点。但是,什么是 “自动化测试”?自动化对不同的人理解会不一样。对于许多工程师来说,“自 动化测试”意味着他们可以按下一个按钮,或者在“勾选框”中打上绿色的勾, 表示他们的代码是正确的,或用“红色X”表示执行失败。 遗憾的是这样的工具是不存在的。更重要的是,如果这种工具真的存在,你会想 要使用它吗?好好想想吧。工具告诉你,你的代码是“OK”的,这意味着什么 呢?它意味着代码格式化很好吗?也许吧。它

5、意味着符合你的编码标准吗?也许 吧。它意味着你的代码是正确的吗?显然没有! 完全自动化的测试是无法达到的,也不是可取的。自动化应处理测试过程中那些 基本的逻辑算法的部分和劳力密集的部分。这将使软件工程师有更多的时间去做 价值更高的测试工作,比如设计更好和更完整的测试。 评估工具时要问到的一个合理的问题是:“这个工具提供了多大程度的自动 化?”这其实也是一个公司试图计算工具的投资回报率时所面对的最模糊的而又 最主要的不确定性因素。 如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第3页 VectorCAST.com 测试工具剖析测试工具

6、剖析 测试工具通常提供了各种各样的功能。对于不同的工具,厂商使用的名称是不同 的,一些工具可能会缺失某些功能。作为一个公共的参考框架,我们为你评估的测 试工具中可能存在的“模块” 选择了下面的名称: 解析器解析器 (Parser) 解析器模块让工具能够理解你的代码。它读取代码,并为代码创建一 个中间表示(通常以树结构的形式)。基本上与编译器所做的相同。 输出或”解析数据”通常被保存在一个中间语言(IL)文件中。 代码生成器代码生成器 代码生成器模块采用“解析数据”来构建测试框架的源代码。 测试框架测试框架 (Test harness) 虽然测试框架不是工具中的专门部分;但在测试框架的体系结构中

7、所 作的测试会影响工具所有的其它功能。因此,评估工具时框架结构是 非常重要的。 编译器编译器 编译器模块允许测试工具调用编译器来编译和链接测试框架。 目标环境目标环境 (Target) 目标模块使测试可以在不同的运行时环境中轻松地运行,包括支持模 拟器、仿真器、嵌入式调试器和商业RTOS。 测试编辑器测试编辑器 测试编辑器允许用户使用脚本语言或复杂的图形用户界面(GUI)为 测试用例设置先决条件和预期值(通过/失败的标准) 覆盖率覆盖率 覆盖率模块使用户能获取执行每个测试所覆盖的代码部分的测试报告报告报告 报告模块允许获取的各种数据被生成项目文档。 命令行命令行 (CLI) 命令行(CLI)使

8、工具的使用进一步自动化,可以从脚本、makefile文 件等来调用工具。 回归测试回归测试 回归测试模块允许针对一个应用程序的某个版本创建的测试用例在新 版本中重新运行。 集成集成 与第三方工具的集成是一个充分利用你对测试工具的投资的有趣的方 式。常见的集成有与配置管理工具、需求管理工具和静态分析工具的 集成。 后面的部分将详细说明你应该如何评估这些候选工具中的每一个模块。 如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第4页 VectorCAST.com 测试工具分类测试工具分类/自动化水平自动化水平 由于所有工具不可能都包含上述

9、所有的功能或模块,同时也因为不同的工具所提 供的自动化水平有着很大的差异,因此我们对测试工具大致分为下面几类。你的 候选测试工具将属于其中的一个类别。 手工手工 “手工”工具,通常创建一个空测试框架,并要求你手工编写执行 测试用例所需的测试数据和逻辑。通常情况下,它们会提供一种脚 本语言和/或一套库函数/方法,可以用来做一些常规的事情,比如 测试断言,或创建格式化的测试报告文档。 半自动化半自动化 “半自动化”工具可以把“手工”工具提供的一些自动功能加上图 形界面,但仍然需要手工编写代码和/或脚本以测试更复杂的结构。 此外,“半自动化”工具可能会缺少一些“自动化”工具具有的模 块。仅仅内建支持

10、在少数示例的嵌入式目标环境上部署。 自动化自动化 “自动化”工具,具有上一节中列出的每个功能区或模块的功能。 这类工具将不需要手动编码,并支持所有语言结构,以及在各种不 同的嵌入式目标环境上部署. 工具的微妙差异工具的微妙差异 除了比较工具的功能和自动化水平以外,评估和比较所使用的测试方法也是很重 要的。例如,当你用一些工具创建一个测试项目时,除非你自己动手尝试去完成 一些操作,否则这些工具仅仅将文件加载到它的IDE,而不会做任何创建测试框架 或测试用例的工作。 这可能隐藏了工具的潜在缺陷,因此重要的是不仅要将你的代码加载到工具中, 而且还要尝试为你正在测试的类中的每个方法建立一些简单的测试用

11、例。工具是 否会建立一个完整的测试框架?所有的桩函数(Stubs)都是自动创建的吗?你可 以使用图形用户界面(GUI)来定义测试用例的参数和全局数据吗?或者如果你 正在进行手工测试,你是否需要编写测试代码呢? 类似地,工具之间对嵌入式目标环境的支持也有很大的差异。如果一个厂商说: “我们支持所有的编译器和目标环境”,那你需要警惕了。这话的含义其实是 说:“你需要自己去完成让我们的工具能在你环境中运行的所有工作”。 如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第5页 VectorCAST.com 如何评估测试工具如何评估测试工具 以

12、下几节将详细描述在软件测试工具的评估过程当中你应该研究的问题。理想情 况下,你应该通过亲手测试正在评估的每一个工具,来确认这些信息。 由于本文下面的部分技术性很强,我们想向你解释一下下文的表述格式。对于每 一个部分,我们都有一个标题来描述将要讨论的问题,一个关于该问题重要性的 描述,还有一个“要点”部分来概括需要考虑的问题。 另外,除了表述格式以外,我们也应对专业术语作出注解。 “函数/方法 (function)”一词是指一个C函数或C + +类的方法,“单元”是指一个C文件或C + +类。最后,请记住,几乎所有的工具都能在一定程度上支持“要点”部分中提 到的问题,你的工作是评估自动化程度、易

13、用性,以及支持的完整性。 解析器和代码生成器解析器和代码生成器 要建立一个C解析器是相对容易的,但要建立一个完整的C + +解析器是非常困难 的。工具评估过程中需要回答的问题之一是:“解析器技术的健壮性和成熟性如 何”?一些工具厂商使用商业解析器,他们从解析器技术公司获得许可,还有一 些厂商使用自主开发的解析器。使用你项目中具有代表性的复杂的代码结构来评 估工具,可以验证解析器和代码生成器的健壮性。 要点:要点: 解析器技术是商业外购的还是自主研发的? 支持哪些语言? C版本的工具和C + +版本的工具是否相同? 全部是C +语言实现的,还是局限于其中一部分? 工具能测试我们最复杂的代码吗?

14、如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第6页 VectorCAST.com 测试驱动程序测试驱动程序 测试驱动程序是控制测试的“主程序”。下面是一个驱动程序的简单例子,它将 用来测试标准C库中的正弦函数: #include #include int main () float local; local = sin (90.0); if (local = 1.0) printf (“My Test Passed!n“); else printf (“My Test Failed!n“); return 0; 虽然这是一个很简单

15、的例子,“手工”工具可能会要求你手工输入(和调试)这 一小段代码片段,“半自动化”工具可能会给你某种脚本语言或简单的图形用户 界面(GUI)来输入正弦函数的输入参数值。“自动化”工具将提供一个用于构 建测试用例、集成代码覆盖率分析的全功能图形用户界面(GUI),一个集成调 试器,以及与嵌入式目标环境的集成部署。 不知你是否注意到,该驱动程序有一个bug。那就是正弦函数实际上应该使用弧 度值而不是度数来作为角度的输入值。 要点要点 驱动程序是自动生成的,还是自己编写的? 我可以不写任何代码来测试下面的内容吗: o 测试覆盖一定范围的值 o 组合测试 o 数据分区测试(等价类) o 输入值列表 o

16、 预期值列表 o 预期异常值 o 信号处理 我可以在相同的测试中建立一个调用不同方法的序列吗? 如何评估嵌入式软件测试工具 2012 All rights reserved Vector Software第7页 VectorCAST.com 为关联的函数为关联的函数/方法打桩方法打桩当你想控制在测试过程中关联函数/方法的返回值 时,你就需要为关联函数/方法建立替代值,打桩是集成和单元测试中非常重要的 部分,因为它允许你从应用程序的其它部分中隔离出被测代码,更容易触发你所 感兴趣的单元或子系统的执行。 许多工具都需要手动生成测试代码,才能使得桩(stub)不仅仅只是返回一个静 态的标量值(return 0;)。 要点要点 桩是自动生成的,还是你为它们写的代码? 是否自动支持复杂的输出(结构体,类)? 每次调用桩能返回不同的值吗? 桩会记录它被调用的次数吗? 桩

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号