tag 标签: 白盒测试

相关帖子
相关博文
  • 热度 7
    2023-3-14 09:12
    928 次阅读|
    0 个评论
    单元测试/集成测试自动化工具--WinAMS
    CoverageMaster winAMS : 适用于嵌入式目标机代码的单元测试 / 集成测试 工具 全面支持嵌入式微机!验证嵌入式 C/C++ 软件 实施以模块为单位的自动化单元测试工具 不需要 HookCode 直接使用目标机代码进行单元测试 联合静态解析工具 ,提供 C0 (语句) ,C1 (判定) ,MC/DC 覆盖率报告,优化测试用例制作 已取得第三方认证机构 TUVSUD 对适用于汽车机能安全 ISO26262 软件工具的认证 产品概要 是以嵌入式软件的函数为单位,实施模块单元测试以及 C0/C1/MCDC 覆盖率测试( coverage test )的嵌入式软件自动化单元测试工具。目标机源代码通过交叉编译器生成目标机执行代码,通过跟实际处理器同样的模拟处理器环境进行单元测试,不需要对执行代码做任何变动,使高信赖性的模块测试成为可能。在汽车控制软件这样的对安全性要求极高的领域,单元测试已经成为不可缺少的一部分。使用目标机代码进行单元测试也是为了符合汽车行业中 ISO26262 功能安全认证标准。 产品特长 全面支持嵌入式微机!验证嵌入式 C/C++ 软件 实施以模块为单位的自动化单元测试工具 作为能够检验出仅凭系统测试以及整体测试无法发现的 的检测方法, 在嵌入式开发领域受到广泛重视。同时,单元测试也是汽车用软件功能安全( ISO26262 )领域中要求实施的认证项目之一。 直接使用通过交叉编译生成的目标机代码,在模拟处理器环境下进行单元测试。既能实现 C 语言程序的逻辑上的单元验证,又能够对嵌入式微机组装为产品后可能发生的问题等进行具有高信赖度的白盒( white box )测试。 不需要 HookCode 使直接使用目标机代码进行单元测试成为可能的业界唯一的工具 有些公司的单元测试工具往往采用在被测试对象的源代码中追加测试用代码或者测试用驱动器的方法,导致测试时所用的代码与组装为产品后的目标机用代码不同。虽然 ,但是从嵌入式开发的角度考虑,这样就如同对交叉编译所生成的经过优化处理的代码进行了加工,无法确保最终产品的质量。 Coverage master winAMS 是业界唯一的,具有 实施单元测试功能的工具,特别是在安全性要求高的领域中得到很高的评价。 不需建立单元测试专用的环境,可以在开发用交叉编译环境进行单元测试 Coverage master winAMS 不需要追加任何测试用驱动器或测试用代码,可以直接使用将组装成产品的目标代码进行单元测试。单元测试能够与软件开发使用共同的交叉编译环境,不再需要对测试资源进行专门管理,也不再需要建立其他专用环境。因此,既方便程序资源管理,又能够缩短准备测试环境所需的时间。 符合汽车功能安全标准( ISO26262 ) 这一要求的最佳工具 ISO26262 是从 IEC61508 衍生出来的适用于汽车制造领域的功能安全标准。其中的 Part.6-9 包括了关于软件程序的构造覆盖率测试以及有关的规定项目。根据汽车安全标准( ASIL ),提出了测试语句覆盖率( statement coverage ),分支覆盖率( branch coverage ), MC/DC 覆盖率的推荐性事项。 其中的另一个推荐性事项是 的规定。如果在与目标环境不同的环境下进行单元测试,必须表明源代码与目标代码的差别,以及目标环境和测试环境的差别。因此,对于那些使用与目标微机不同的电脑进行编译和单元测试的其他公司的工具而言,这个要求很难满足。 还有些公司的单元测试工具虽然包括交叉编译环境及编译功能,而且也能够在与目标环境相同的环境下进行测试,但是所有的测试都需要插入测试用代码,进行再次编译,因此测试也只能在与目标环境不同的环境下实施。 GAIO 提供的单元测试工具 Coverage master winAMS 具有 ●采用全面支持嵌入式微机的微机化功能测试平台环境 ●不需要插入测试用代码直接使用目标机代码进行测试 的特征,提供符合 ISO26262 标准要求的必须功能。 GAIO 提供的 Coverage master winAMS 是符合 ISO26262 标准 这一要求的业界唯一的工具。 关于汽车机能安全 ISO26262 的对应以及认证的获得 已取得第三方认证机构 TUVSUD 对适用于汽车机能安全 ISO26262 软件工具的认证 2012 年 6 月 28 日,「 Coverage master winAMS / General 」测试工具获得由德国 TUVSUD 第三方认证机构,在汽车机能安全规格的 ISO26262 软件工具方面的认证,包括日本在内亚洲地区首次获得该项认证。 通过此项认证,说明本公司的单元测试工具「 Coverage master winAMS / General 」,以及程序分析工具「 CasePlayer2 」,在静态分析和单元测试领域,是符合所有安全度水准的工具,并由 TUVSUD 认证机构得到了保障。 ISO 26262 对于不同的开发用软件工具在工具置信水平( TCL ),都需要开发者提供开发软件工具的认证书。此项认证适用于在工具认证当中,最为复杂的 TCL3 工具认证标准。因此,导入本公司的单元测试工具之后,不需要对 TCL 的部分进行认证,进而可以缩减手续跟时间。 主要的单元测试功能 采用 SSTManager 管理单元测试 project SSTManager 是 Coverage master winAMS 的应用功能,用于管理单元测试 project ,制作测试数据( test data )。 从设定测试环境开始,到报告测试结果为止,均由微机化功能测试平台( ISS )实施综合管理。 采用通用便利的 CSV 文件管理测试数据的输入输出 Coverage master winAMS 不需要插入测试用代码,直接使用目标机代码进行单元测试。采用通用便利的 CSV 文件管理函数测试时使用的输入输出数据。测试结束后,输出的测试结果和输出的期待值也将以相同的格式显示在 CSV 文件之中。 C0/C1 覆盖率报告的自动化制作功能(标准功能) 根据测试的输入输出数据自动报告相应源代码的 C0/C1 测试覆盖率结果。包括通过图形( viewer )显示测试数据,以及与其相应的被测试的源代码路径的功能,用于分析测试结果。 作为选项功能也包括MC/DC 覆盖率测试功能。 MC/DC 覆盖率的自动化测试功能(选项功能) 作为选项功能提供 MC/DC 覆盖率测试功能。 C0/C1 覆盖率测试不需要加工即可直接使用目标机代码。然而, MC/DC 覆盖率测试对于复合式的条件式,需要自动插入 HookCode 将复合式的条件式分解,才能对各条件式进行测试。这样就有可能导致测试用代码与目标机用代码的不同。为了验证 HookCode 的妥当性,在 MC/DC 覆盖率测试的同时,运行目标机代码,确认运行结果与期待值的一致性。 注 : 右图举例显示,第 2 个 if 句的复合条件式中, 30] 为 false 时的分支没有被测试到。以 C1 覆盖率测试来说,它的测试结果是 OK ;而对于 MC/DC 覆盖率测试来说,它的结果是 NG 。 注 : MC/DC 覆盖率测试功能不支持 C++ 程序。 单元测试的效率化功能 联合程序解析工具 CasePlayer2 ,实现代码参照解析作业的效率化 利用 CasePlayer2 生成的流程图表以及模块构造图(调用函数的构造图)与源代码的连接( link )功能,使单元测试用源代码的解析工作效率化。 能够自动检索被测试函数的外部变量,使测试条件设定效率化 联合程序解析工具 CasePlayer2 ,自动检索被测试函数所使用的外部变量。缩短了以往必须对源代码进行搜索找出输入条件的变量所需的工作。而且,能够防止人工操作导致的类似变量指定遗漏的的错误。 根据代码解析自动化制作 C0 , C1 , MC/DC 覆盖率测试计划 联合程序解析工具 CasePlayer2 ,自动化制作符合覆盖率测试要求的条件分支 if,switch,for,while 等的测试数据。可以将被测试函数中含有的条件式( if 以及 switch 等)在数据制成图形 (Viewer) 上列表显示。 点击其中的条件,工具将自动开始检索与之相关的变量,进而从所设置的条件的境界值中自动生成覆盖率测试所需要的数据。 为了达到 C1/MCDC 覆盖率,测试时需要对各函数的数据进行组合。 利用 CasePlayer2 提供的解析结果,分析条件式的 net 构造,在重复性限制在最小限度下生成 C1/MCDC 覆盖率测试用数据。 支持 MPU   CoverageMaster winAMS Supported Processor List(English) 动作环境 ・ 操作 PC/OS ・ IBM PC/AT 兼容机 ・ Pentium( 相当 ) 2GHz 以上的 CPU ・ 存储器 512MB 以上(推荐值) ・ 显示器分辨率 XGA(1024*768) 以上(推荐值) ・ Windows XP, Windows Vista, Windows 7 ( 32bit/64bit )(※ Windows 95/98/Me/NT/2000 未支持)
  • 热度 6
    2022-11-11 10:17
    1119 次阅读|
    0 个评论
    前言 对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。 目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完成软件调试的工作,当然,我们也可以通过将TPT(基于模型的自动化测试工具,可覆盖MiL到ViL全阶段的测试)和这些调试工具进行集成,更高效、快捷的实施PiL阶段的自动化测试。 通过TPT我们可以很方便的实现MiL/SiL的测试工程在PiL阶段的完全复用。下面,我将以lights_control(车灯控制)模型生成的代码为例,为大家演示如何基于TPT进行单元级代码的PiL测试。 图1 TPT与调试器集成 测试准备 本次被测代码是基于模型开发的单元级软件,将模型转成代码后编译成elf文件刷写到目标板进行测试。涉及到的测试环境及版本信息如下: 测试工程:MiL阶段搭建的单元测试工程(TPT工程可完全复用) 测试工具:TPT + PLS UDE 调试器:PLS UAD2Next 目标板: Infineon TC233LP 其中目标板和UAD之间使用JTAG口通讯,UAD和PC端通过USB进行连接。 图2 硬件连接 首先我们需要搭建一个可以正常运行的UDE工程,以便于后面通过TPT调用进行PiL测试。 图3 搭建的UDE工程 配置测试环境 在PiL测试过程中,TPT需要将测试用例数据发送到UDE,并读取UDE从目标板读到的输出信号数据进行评估。因此,我们需要搭建测试环境将TPT和UDE链接起来。为方便测试环境的搭建,TPT提供了能满足各阶段测试的测试平台,这里我们需要配置一个PLS UDE Platform。 图4 TPT PLS UDE Platform 1. 设置用例运行步长(和MiL保持一致)及用例最大运行时间 2. 加载搭建好的UDE工程 3. 加载被测的elf文件 4. 选择源代码所在文件夹 5. 设置断点 6. 设置信号读/写动作 设置断点 为方便对代码中的变量进行读/写操作,需要在程序中设置一些断点。这里我们可以在TPT端直接进行断点的设置,TPT会将断点信息发送至UDE。TPT可以支持诸如普通断点(指定断点位置)、条件断点等类型,并支持多控制器、多核断点的设置。 一般来说,我们只需要设置两个简单的断点即可满足单元级别软件的测试。通过指定代码行,我们定义了如下所示的两个断点: 程序入口(step_in): 进入Step函数时的断点,用于Write; 程序出口(step_out): 跳出Step函数时的断点,用于Read。 图5 设置断点 为了让程序能够持续运行以便于我们能持续给入连续变化的信号,我们需要在TPT中设置一个断点的循环,防止程序在断点的位置停止。 图6 断点循环过程 图7 TPT中设置断点循环动作 设置信号读/写动作 设置好断点之后,我们需要在TPT中设置输入/输出信号的动作。这里我们在断点step_in的位置把输入信号设置为write,在断点step_out的位置把输出信号设置为read。设置好后,TPT即可把测试用例信息在断点step_in灌入目标板,当step函数运行完成后在断点step_out把输出信号回采进行评估。 图8 TPT中设置信号动作 MiL/SiL测试工程的快速复用 由于我们在MiL/SiL阶段已经完成了对测试工程的搭建,得益于TPT提供的信号mapping的功能,我们只需要对信号做简单的mapping即可实现测试工程的完全复用。 图9 TPT中信号mapping 做完这些配置工作之后,我们即可运行测试工程,完成PiL测试,并生成相应的PiL测试报告。 图10 测试执行 通过对该单元级代码的测试,不难发现,TPT在实现不同测试阶段的测试工程复用方面有着巨大的优势——单元级软件测试可实现同一测试工程覆盖MiL/SiL/PiL所有阶段,这无疑大大降低了我们的测试成本和周期。并且TPT在复杂测试用例信号编写、复杂场景评估、创建回归测试、实现自动化测试等方面都有着很大的优势。 敬请期待下篇:带有Plant Model的PiL测试该如何做?
  • 热度 8
    2022-9-1 11:00
    1605 次阅读|
    0 个评论
    随着汽车行业的发展,软件定义汽车已成为汽车产业达成的共识发展趋势,软件在汽车产品中也承担着越来越重要的角色,车身域各功能的实现,少则几千行代码,动辄百万行代码。随着汽车产业功能多样性以及复杂度的增加,传统的基于C代码开发的模式已不能满足某些特殊功能需求的实现,需要向更高级别的语言进化,实现复杂功能的开发。 C ++ 语言的广泛应用 众所周知,C代码是面向过程的语言,具有执行速度快以及效率高的特点,在嵌入式开发领域占据很大的比重,是嵌入式系统、尤其面向底层的主要编程语言。但是随着汽车行业智能化以及网联化的发展,更多的是聚焦在复杂的应用以及算法开发上,对性能的要求就会非常高,比如智能驾驶,智能网联等这类项目,相比C语言,具有面向对象机制的C++更适合用于这类项目的开发。 此外,为适配SOA架构和并行处理大数据等更复杂的需求,AP(Adaptive AUTOSAR)平台正广泛地应用于诸如车载域控制器、自动驾驶和车联网等领域;而AP也是基于C++语言开发的,这也正是因为C++所具备的特点更能满足AP平台对高安全性以及高计算能力的要求。 C++兼容C语言的同时又引入了面向对象的机制。 封装,继承以及多态的特性使得C++中的类与对象呈现多样性。 C++中引入了一些特殊用法,比如const常量、智能指针、cast转换、引用等,使得代码更加安全。 C++引入了模板概念,实现了将类型参数化的泛型编程,提升了代码复用性;同时,基于模板类或模板函数的STL(标准模板库)使得开发更便捷。 C++中还提供了很多开源库,比如神经网络、加密、数学开源库等,为复杂的应用开发提供了更多便利。 如何高效地实施 C++ 代码测试 随着汽车软件的复杂度以及代码量级的增加,主机厂和零部件供应商对代码质量的要求也越来越高,并寻求各种方式来提升代码质量,以尽早发现代码问题实现对项目的把控和交付。同时,ISO 26262以及ASPICE也对软件测试提出了明确的要求,即需要实施单元/集成测试。 在对软件进行单元测试和集成测试时,除了要满足相关需求测试的要求,还要考虑代码整个结构的覆盖度,测试过程因而比较繁琐。在面对复杂的C++代码项目时,如何才能高效地完成C++代码的单元测试和集成测试,最大化地实现自动化测试?北汇信息采用的自动化测试工具是Vector旗下的代码动态测试工具----VectorCAST/C++。 VectorCAST/C++工具是德国Vector公司的一款白盒测试工具,主要用于实现代码的单元测试和集成测试。它最大的特点,同时也是相比于其它同类工具最大的优势就在于,经受过多个大型量产项目实践的对C++高阶特性、Linux系统和CI平台的强力支持。 视频版介绍:https://www.bilibili.com/video/BV18a411R77j?spm_id_from=333.999.0.0 支持 C++ 11 / 14 / 17 代码解析 VectorCAST/C++工具内置了权威的商业化前端解析工具EDG对代码进行解析,无论是基于C++11开发的,还是C++14又或者是C++17开发的,工具都可以完美支持C++11/14/17的特性,同时,针对C++复杂数据类型的使用,比如STL、模板、智能指针等,可实现图形化界面操作,无需过多添加测试代码,有效地提高了C++代码的测试效率。 (1)类的实例化 类在使用之前都需要进行类的实例化----对象创建,通过对象对类的成员属性以及成员方法进行访问,所以在编写测试用例时,需要完成实例化对象的创建。工具可以解析类的所有构造函数,并在测试用例编辑区开辟对象实例化区域,测试人员可根据实际测试需求选择匹配的构造函数来实例化对象。 (2)模板类/模板函数测试 在基于C++开发的代码中,模板的应用也非常广泛,模板的出现,实现了类型的参数化,真正做到代码的重用性。在针对函数模板和类模板进行测试时,VectorCAST/C++支持对模板函数自动插桩,实现图形化界面操作,无需编写测试代码。 此外,在对模板类或者模板函数进行测试之前需要先进行实例化,然后再进行模板的测试。 (3)容器类型数据测试 C++ STL标准模板库中的容器是用来存放各种数据结构对象的集合。关于容器类型的数据,在VectorCAST/C++中,工具支持对C++标准模板库的测试,可以对标准容器(string/vector/list/set/map等)、迭代器等进行解析,可直接在界面中进行赋值操作。 (4)智能指针测试 智能指针的使用解决了C++的内存回收问题,VectorCAST/C++支持解析智能指针,比如shared_ptr,unique_ptr等,可直接通过工具界面为参数赋值。 (5)支持对第三方库解析 在涉及到第三方库的代码测试中,VectorCAST/C++工具支持解析众多第三方库,并可针对相关库函数进行自动插桩,实现图像化界面操作。 集成实际交叉编译链 VectorCAST/C++可以在Windows和Linux平台中稳定运行,且支持众多主流的交叉编译链,比如Green Hills,Hightec,IAR,Tasking,Keil等,之所以支持众多主流编译链,是因为VectorCAST/C++是基于实际编译链进行测试的。 自动生成测试用例 VectorCAST/C++满足ISO26262和ASPICE中不同安全等级项目对覆盖度指标的要求,包括语句、分支、MC/DC等,同时支持基于不同覆盖度指标要求自动生成测试用例并自动填充输入值,可以有效的提高测试效率。 综上所述,在汽车电子未来发展中,大量复杂C++代码会得到广泛使用。借助工具对C++代码的完美解析,都可以在工具中找到对应的解决方案,实现图形化界面的操作,同时借助工具自身的测试优势,可以有效地提高测试效率,实现C++代码软件的自动化测试。 结束语 本文主要介绍了VectorCAST/C++工具在基于C++开发的汽车电子软件项目中的应用,当前工具也被广泛用于智能网联、智能驾驶的量产项目中。VectorCAST/C++工具不仅适用于C++测试,也适用于C测试,且通过了南德认证,是一款可用于功能安全认证的高效的代码动态自动化测试工具,已广泛用于众多国内知名主机厂和零部件厂商。北汇信息作为Vector在中国的合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。如果你还在寻找合适的C/C++代码测试工具,不妨来试一试VectorCAST/C++工具,定会让你有心动的感觉。此外,在过去的C++测试项目中,我们也积累了一些测试经验,期待与大家的交流与探讨。