51Testing软件测试论坛

标题: 嵌入式Linux 软件测试框架的研究 [打印本页]

作者: 芭比哇玩123    时间: 2017-5-27 15:19
标题: 嵌入式Linux 软件测试框架的研究
本帖最后由 芭比哇玩123 于 2017-5-27 15:20 编辑

嵌入式Linux软件测试框架的研究
吕雪峰,宋泽宇
(中国船舶重工业集团公司第722研究所,湖北武汉430079)
摘要:嵌入式Linux软件是最难测试的一类软件。在测试过程中通过使用有效的测试框架,可以显著提高测试效率,最终确保软件质量。通过对嵌入式软件测试方法、测试工具与测试流程的深入研究,一种通用的嵌入式Linux软件的测试框架被提出,利用该框架可有效改善软件质量。
关键词:嵌入式Linux软件,测试框架,软件测试


1 测试框架
       测试框架是一组测试的规范、测试脚本的基础代码,以及测试思想、惯例的集合。可用于提高测试效率,降低测试工作量,改善测试工作的重用性和可维护性。测试框架的好处在于:提高开发速度,提升测试的执行效率;在提高软件代码质量的同时引入测试重用的概念,可明显减少测试工作量; 作为回归测试的一种实现方法支持修改后“再测试”,确保代码的正确性。测试框架出现的最终目的是花少量的资源来完成尽可能多的测试任务,所以测试框架的建立以及框架的重用性方面是最值得深入研究的。
2 嵌入式软件的测试方法
       由于嵌入式系统的自身特点,如实时性、内存不丰富、CPU运算速度不充裕、I / O 通道少、开发工具昂贵、并且与硬件紧密相关等,导致嵌入式软件的开发和测试与一般商用软件的开发和测试有很大的不同。嵌入式软件是最难测试的一类软件。为了确保软件质量,嵌入式软件应该加强单元测试、功能测试与系统测试等的测试力度。
2.1 单元测试
       从广义上看,单元测试包括静态测试与动态测试。静态测试包括对代码进行静态分析、代码审查的活动。而动态测试就是通过单元测试用例、测试工具来实现对程序单元的有效测试。对于嵌入式软件的单元测试,可完全在开发主机上执行。静态测试的目标不是证明程序完全正确,而是作为动态测试的补充, 在程序运行前尽可能多地发现其中隐含的错误,提高程序的可靠性和健壮性,改善代码质量。
执行有效的动态测试, 可帮助更准确更全面地找到错误,显著提高软件质量。在单元测试的后续测试中为了发现错误,通过不断修改输入,希望引发软件内部的潜在错误,但这无疑是有难度的。测试人员只能依赖于软件的运行失败来发现错误,这样不仅很难找到错误发生的准确位置,而且实际上还有大量的错误没有得以发现。
        单元测试提供了一种更有效的发现错误的方法,它将应用程序中的最小单元分离开来,使得测试更接近错误,只需要简单地对每个最小单元进行独立测试,就很容易地使得全面准确地找到所有程序错误成为可能。
2.2 运行时分析测试
       开发或测试过程中,需要对软件的运行性能、内存问题、代码覆盖率等问题进行有效的运行时分析。对嵌入式软件而言运行时分析是一个难点。嵌入式系统由于本身资源受限,不能采用通用商业软件的运行时分析方法, 也就是不能把分析软件放置在目标机上运行。嵌入式系统的资源通常不能满足分析软件的需要,同时分析软件插入的桩函数对目标系统的运行效率有很大的影响(超过50%)。分析软件运行在目标系统上,导致待测软件是在一种不真实的环境下运行,所获得的数据并不是准确的。目前常用的方法是结合对待测软件进打点技术和从总线捕获数据进行分析,可有效地避免各种弊端。
2.3 功能测试
       为了验证软件是否满足了功能特性的需求,必须对软件进行功能测试。功能测试就是对软件的各项功能进行验证,软件的功能测试主要针对每种功能设计若干典型测试用例, 在测试过程中运行测试用例, 然后将得到的结果与所期望的结果进行比较,以确定软件是否符合用户的功能需求。嵌入式软件的功能测试,可以在主机环境下开展,不过推荐脱离主机环境开展功能测试,测试效果会更好,测试管理更容易。
2.4 系统测试
       如果软件只是满足了功能要求,没有满足一些非功能的特性要求,软件还是无法满足用户的需求,无法获得用户的信任。为了验证系统是否符合非功能特性的质量需求,必须对软件执行系统测试。系统测试主要关注系统的负载测试、性能测试、容量测试、安全性测试、兼容性测试、可靠性测试等。同时只有在软件的功能趋于稳定后,才适合开展系统测试工作。在进行系统测试时,还要强调测试环境的真实性。如果测试环境不能等价于系统的实际运行环境,系统测试的结果就值得怀疑。所以嵌入式软件的系统测试必须在目标环境下进行。
3 嵌入式Linux软件的测试工具
       目前嵌入式Linux下常用的开发语言为C 或C++语言。针对嵌入式Linux下采用C 和C++语言编制的软件, 分别使用易用的自动测试工具,以提高测试的效率,降低测试工作量。在单元测试的静态测试时可使用Flexelint工具软件或C++test工具软件的编码规范检查功能, 可有效地规范代码风格、防止常见编码错误。这些工具软件可识别并报告C 和C++语言中的编程陷阱和格式缺陷,进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,简单的内存错误等问题。同时在开发阶段或测试过程中,开发人员或测试人员还需要采用一定的工具来分析一些深层的代码隐患,如死锁、文件资源泄露等严重的、难以检测的问题。可使用CoverityPreventSQS 工具软件来协助检测。Linux内核、MySQL、Mozilla很多开源软件都使用该工具执行深层次的缺陷检测, 该工具软件对Linux下的应用软件的代码缺陷分析具有独特的优势。
       单元测试的动态测试可采用Parasoft公司的C++test工具软件。该软件工具有效地解决了单元测试的难点,把开发人员从编写测试驱动程序、桩和测试用例的繁重工作中解放出来。其提供有效的自动化单元测试, 能够实现和执行100%的代码覆盖。可自动建立测试驱动程序与任何所需的桩函数,然后自动执行单元测试的所有步骤,可以自动执行回归测试。同时对嵌入式系统提供完善的单元测试支持。在运行时分析测试时,可使用CuttleITE 测试工具或Code-TEST测试工具。这些工具提供强大的性能分析、覆盖率分析、内存分析、代码跟踪分析等功能。作为运行时测试工具,其宗旨是不影响系统的运行并准确测量记录软件运行的各项技术指标。这两款工具采用总线数据捕获技术, 对目标系统的影响非常小,可以做到精确的数据观察,在准确性和实时性方面具有很大的优势。
4 测试过程的管理工具
       嵌入式软件与硬件结合非常紧密,对硬件环境的依赖更为严格。在测试过程中必须对组成硬件环境的各种硬件板卡进行有效的配置管理,才能易于问题复现与定位。同时嵌入式软件对各种系统的软件环境也有独特的要求。在测试过程中除了对待测软件的源代码进行有效的版本管理外,还必须加强对系统引导程序的文件、操作系统内核的镜像、各驱动程序的文件、文件系统的配置都得进行有效的配置管理。
在开发与测试过程中可采用开源软件SVN(Subversion)之类自动化版本控制工具软件进行有效的软件版本管理。
传统的软件缺陷管理没有统一的规范。开发人员、测试人员或用户将发现的软件缺陷以电话、口头、Email 等不规范的方式直接报告给软件开发人员。测试人员报告的缺陷容易被遗忘掉,而且对该缺陷处理情况的跟踪也没有控制,缺陷是否汇报给了应该对此错误负责的人员,缺陷最终是否得到了有效的解决等情况都不得而知。项目经理和SQA 人员难以及时从缺陷列表中找出规律,测试的效率比较低。
为了解决这些问题,需要对缺陷进行有效的管理。需要把缺陷管理的范围扩大到软件整个生命周期,并使各阶段产生的缺陷都可以得到跟踪控制,从而可以使软件开发过程中各阶段的缺陷都有人负责并得到有效的处理,并和整个项目管理结合在一起,加强开发人员与测试人员之间的沟通,使之更好地协同工作,从而缩短整个项目的开发周期。在开发与测试过程中,对所发现的各种缺陷必须进行有效的管理。这有利于缺陷的人员分派、归零管理、问题复现等管理。可采用开源软件Bugfree之类的缺陷管理工具软件执行有效的缺陷管理。


作者: 小皮球的故事    时间: 2017-5-27 15:36

作者: 梦想家    时间: 2017-5-27 15:37

作者: 芭比哇玩123    时间: 2017-5-27 15:37
小皮球的故事 发表于 2017-5-27 15:36

马走不谢!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2