C~(++)test在嵌入式软件测试中运用研究

(整期优先)网络出版时间:2022-03-29
/ 2

C~(++)test在嵌入式软件测试中运用研究

黄小凤

湖南信息学院 湖南 长沙 410151

摘要:在查阅资料后得知,嵌入式软件覆盖测试具有复杂性强和难度高的特点,如何对其进行测试,已经成为影响嵌入式软件应用效果的关键内容,故本文在分析C~(++)test测试工具的基础上,对其在嵌入式软件中的运用加以研究,主要研究内容包括测试流程和测试方法,希望通过本文研究,为相关行业提供借鉴。

关键词:嵌入式软件;软件测试;覆盖率;分支覆盖;语句覆盖


引言:在查阅文献资料后得知,嵌入式软件对开发和调试的要求极高,如果开发和调试不符合要求,会导致软件应用效果受到不利影响。但就实际情况来看,仅在目标机上测试,很难获取满意的结果。而C~(++)test测试工具的应用则有助于提高测试效率,并保证测试结果的准确性。因此,对此项课题进行研究,具有十分重要的意义。

  1. 逻辑覆盖测试

将运行被测程序作为基础,以计算为准则,获取不同程序和语句执行情况的覆盖率,同时,对代码执行情况覆盖率加以评估,属于逻辑覆盖测试的原理。通过上述介绍可以发现,逻辑覆盖测试的原理较为复杂,但其效果却较为显著,其中,研究结果表明,此类测试的开展,可以实现对逻辑错误的准确检测,与此同时,还能保证软件测试工作结果的准确性。以覆盖源程序语句详尽度为切入点,可以按照详尽度将语句进行如下的排列:语句、分支、条件和判定。这些覆盖的概念如下所述:其中,测试数量充足的数据,且保证程序中各条语句均被执行,属于语句覆盖;测试数量充足的数据,且保证程序中各条路径均被执行,属于分支覆盖;设计测试用例,确保各条判断语句之中的逻辑条件均被满足,属于条件覆盖;设计充足的用例,确保程序中各判定均能获得真假值,属于判定覆盖。各判定语句中的各逻辑条件可能值均要被满足一次,即是条件覆盖。总之,在实际测试过程中,测试往往需要对软件测试工具进行使用。与此同时,还要将目标程序模块作为依据,对测试流程加以设计,此外,还要将测试框架作为基础,对测试用例进行编译,最终使其处在目标机和仿真环境之中。在完成执行调用后,代码执行信息文件会被自动生成,并在此基础上,完成对代码覆盖信息的获取[1]。总而言之,逻辑覆盖测试属于嵌入式软件不可缺少的测试方式,为此,选择合适的工具对其进行测试意义重大。

  1. C~(++)test覆盖测试

  1. 测试过程

本文所研究的C~(++)test,是国外工作研发的软件测试产品,具有自动测试软件的功能,其可以产生测试框架,且该框架具有自动化的特点,主要包括的内容为测试桩和测试驱动。在这个框架中,工作人员可编写测试用例,并提供与之相匹配的环境,与此同时,还能提供结果显示,其中,代码覆盖结果显示就是重要的一种,测试用例的管理方式以集成管理为主,能够为测试人员设计测试用例和回归测试创造有利的条件。

1.可执行文件的测试过程

在实际测试过程中,首先,被测试软件可以在主机环境中生成编译执行程序,并且编译所生成的测试可执行文件形成过程主要是通过对C~(++)test运行过程中有所接触的库源码、测试框架源码以及插桩代码等内容共同编译而成;其次,生成C~(++)test运行时库与测试程序的目标文件,然后链接目标文件与系统函数标准库,形成目标机可以运行的测试可执行文件,将这一文件下载到目标环境中,“主”函数或者系统可以对其进行调用与运行;再次,在可执行文件运行后,C~(++)test预制程序可以在目标环境下,将测试结果与覆盖率结果这两个测试日志文件创建到本地文件系统当中;最后,将产生的日志文件传回到主机环境中,在此过程中,若系统所建立的运行时库为C~(++)test套接字通信方式,那么结果将会被发送到C~(++)test侦听代理程序中;若日志文件是通过手动的方式被拷贝到主机平台中,那么C~(++)test工具将会通过Collect 62425c6a65b75_html_9dcab181f5fd021e.gif esultes菜单对测试结果进行分析审查。

2.覆盖测试的流程

在对程序进行覆盖测试的过程中,首先,工具实现被测软件代码的自动插装,并生成可扩展的测试框架程序;其次,软件开展交叉编译,生成可以在目标机中进行测试的可执行文件;再次,将文件下载至目标机中,执行文件;最后,将测试的结果与覆盖率日志文件导到主机平台,由C~(++)test对其进行读取,然后显示代码的覆盖率与测试用例执行结果的具体信息。现阶段,对测试用例执行后的代码语句与分支覆盖情况进行分析测试,可以在较短的时间内找出系统中的冗余用例数据与遗漏数据,为后续测试用例的设计提供支持。同时,若在测试过程中发现仍存在一些未覆盖的代码,那么就可以依据未覆盖代码逻辑,在新的测试用例背景下,重新下载设计执行,直到代码覆盖率满足相应的设计要求。

(二)基于Vx62425c6a65b75_html_63515191e797ee59.gif orks平台的覆盖测试

在当前C~(++)test测试环境构建过程中,这一软件支持CCS、ADS、Work

62425c6a65b75_html_71af3b4f1bea350d.gif ench等多款开发环境的嵌入,本文主要选择的编译环境为WorkBench3.1嵌入系统Vx—Works6.7对系统进行覆盖测试。

1.测试环境构建

为保证测试工作的顺利进行,可以以开发环境为基础,搭建覆盖测试环境,在环境搭建的过程中,主要组成部分包括宿主机、被测网络通信设备等,并且需要在宿主机上安装开发工具软件与C~(++)test插件,然后将各个设备用以太网络与主机进行连接,为后续测试工作提供可靠的运行环境。

2.测试步骤方法

在动态测试环境搭建完成后,第一,可以在宿主机上导入项目,由C~(++)test提供插件安装方式,然后在Work62425c6a65b75_html_71af3b4f1bea350d.gif ench菜单中集成与C~(++)test相关的单元测试功能选项。第二,在测试过程中,令C~(++)test自动生成测试驱动与桩函数,需要注意的是,在测试过程中,若没有人工设置桩函数,那么C~(++)test软件函数窗口将不会主动显示函数的分布情况,现阶段,为保证显示状况能够有效的显示出来,可以先运行“62425c6a65b75_html_47940c6d47b95e42.gif llect Stub Information”命令,保证程序可以自动收集并显示桩信息。第三,通过执行C~(++)test内嵌的“Generate Unit Tests”命令的方式,使测试用例可以自动生成。需要注意的是,在部分测试工作开展的过程中,由于自动生成的测试用例主要是依据被测函数形参类型范围值生成的,因此其中存在边界值,无法满足覆盖程序对于功能路径的要求,因此,在一些测试开始前,应当以程序设计流程为依据,重新设计测试用例。第四,在定制测试流程时,可以指定日志文件并在目标机中存在test62425c6a65b75_html_c98dbba75d98eb39.gif og62425c6a65b75_html_7501deb8995e2331.gif ile,cov62425c6a65b75_html_c98dbba75d98eb39.gif og62425c6a65b75_html_7501deb8995e2331.gif ile的路径可以默认为“/tgtsvr/cpptest_results.tlog”。第五,执行C~(++)test中内嵌的“Build Vx—62425c6a65b75_html_456a1f9b86b51466.gif orks Test Module—DKM(TSFS)”指令,通过交叉编译生成测试程序。第六,选取应执行的用例,选择C~(++)test中内嵌的“Load and Run Vx—62425c6a65b75_html_456a1f9b86b51466.gif orks Test Object(DKM)”命令,并将测试程序下载到被测设备的主控板中,然后运行测试程序。第七,将产生的测试结果与覆盖率情况文件拷贝到主机环境中,用C~(++)test测试配置的“Load Test Result”命令,对加载的文件进行分析,并在开发界面对用例测试结果与测试覆盖率信息进行查看,若发现存在代码未覆盖的情况,则需要设计新的测试用例,并重新下载执行程序[2]

结论:在嵌入式软件测试过程中,其动态覆盖率与软件质量间存在着直接的联系,现阶段,为保证测试结果的准确性,可以从逻辑覆盖的角度对软件设计流程、代码与实现之间的一致性进行分析,了解软件中是否存在未实现的逻辑功能或存在逻辑错误、冗余的功能代码,若存在,则可以及时对其进行处理,以便为软件开发工作提供有效的支持。

参考文献:

[1]向力力,程睿远.C~(++)test在嵌入式软件测试中的应用[J].电子技术,2020,49(09):20-22.

[2]杨俊,张倩.C~(++)test在嵌入式软件覆盖测试中的应用研究[J].信息化研究,2016,42(04):42-45.