论文部分内容阅读
随着嵌入式软件的广泛应用以及开发技术的日新月异,相对于硬件的日益稳定,软件却频频出现故障。作为保证软件质量的最有效手段的测试技术,因此越来越引起软件用户以及开发人员的关注。嵌入式软件测试与通用软件的测试相比,有很大不同。嵌入式软件的执行只能在需求所规定的硬件平台上才可以进行;嵌入式软件的开发环境和运行环境也是不一致的,因此即使在宿主机环境下测试再充分,也不能保证在目标机环境下运行该软件就不会出问题。另外,由于嵌入式软件的一些自身特点,例如实时性、内存资源有限、开发工具昂贵等,使得对嵌入式软件测试优化技术的研究尤为重要。程序插桩是嵌入式软件覆盖测试中的关键技术之一,但是伴随着它的应用,产生了程序效率低下、代码膨胀率高等问题,本文的主要任务就是提出优化算法来解决这些问题。本文从三个方面对插桩技术进行了优化,精简测试需求,精简测试用例,减小插桩开销。精简测试需求其目的是用尽可能少的测试用例充分满足给定的测试目标,从而提高效率,降低测试成本。而针对给定的测试目标,获得精简的测试需求集有助于提高测试用例集优化的效率和效果。同时,对插桩位置的选择策略也是一个提高程序运行效率的重要手段,尽量减少插桩探针的数量和探针的执行次数是本文努力的方向。精简测试需求主要是针对源程序的控制流程图进行分析,得到约简后的测试需求。在这个基础上,产生测试用例,利用广义后继支配图算法来生成最小的测试用例集,使其覆盖必需的测试需求。最后讨论了插桩开销的问题,即探针的插桩数量和执行次数。利用虚拟结点法来改进控制流程图,减小插桩开销。为了达到较好的交叉测试的效果,采用了gcc以及开源工具gcov,并对其进行了改进,使得宿主机与目标机之间进行数据传输。最后进行环境的搭建,采用skyeye来仿真硬件环境,从而搭建测试平台,对gcc和gcov进行了算法改进,并给出测试用例来说明这种改进效果。