软件开发:如何做好嵌入式软件开发测试

2018-07-30 09:54:59

计算机技术的不断发展带动软件功能的不断强大,市场对软件的需要越来越高。实际上,计算机软件的发展与市场需要存在一定的不同步现象,导致用户使用过程中存在一定的故障,这些故障严重时会造成严重的经济损失。因此改善软件质量是计算机领域的重要工作。嵌入式软件由于自身的特点,被应用到军用设备中,因此对其进行研究,并做好相关的测试工作对于发展软件工程具有重要现实意义。    

1 嵌入式软件特点    

研究嵌入式软件的特点应该从嵌入式系统开始了解,通常在嵌入式系统的开发过程中,需要进行软硬件的独立开发。硬件部分的开发会形成裸机平台,软件部分则需要进行独立单元、独立部分以及配置项的编程工作。在硬件平台测试通过以后,才能将相应的软件在硬件平台上进行集成,并开展各种功能和性能的调试工作。    

嵌入式系统开发时,底层驱动程序、操作系统以及应用程序之间存在一定的关联,不能将三者独立进行开发。通常根据需要还会对其进行一定的综合以满足开发的需要。嵌入式系统的开发过程实际上是软硬件之间相互协调、相互反馈、相互测试的过程,系统的功能和性能也会在测试的过程中得到体现。嵌入式系统开发过程中,软件开发对硬件具有较强的依赖性,因此在进行软件测试时,应该跟硬件进行结合以保证测试效果。    

通常情况下,嵌入式软件缺乏继承性,因此需要保证跟硬件之间形成一对一的关系。硬件在不断的发展升级过程中,软件也需要不断开发满足硬件的需要。这种情况会造成软件编程的工作量加大,继承性较差。除此之外,硬件的更新速度本身就比较快,因此容易出现软硬件不匹配的情况。因此在实际测试过程中需要两者之间相互协调,才能确定最终的功能和性能指标。    

2 软件测试过程中遇到的问题   

软件测试工作对于保证软件的功能和质量具有重要作用,对于软件而言,测试工作开始的越早,对质量的控制情况越好。传统的软件测试主要包括单元测试、部件测试、配置项测试以及系统集成测试四个部分。这种测试方式适用于脱离软硬件平台的测试,对于嵌入式软件的测试,会出现一定的问题:    

(1)嵌入式软件的开发过程中,产品的功能和性能通过软硬件的结合发挥作用。在实际测试工作中,需要进行一定的调整工作,这种调整实际上是对软硬件的一种协调。但在软件测试中,通常会采用预防为主的理念,这就跟嵌入式软件的测试发生了冲突,因此在实际进行测试时应该做好调整工作。    

(2)对软件进行重大修改或者新研发设备的测试过程中,由于算法、功能和性能上脱离实际平台,因此需要进行进一步的验证工作。在C3I等控制软件开发过程中,设备与指控中心是独立开发的,经常会出现接口协议冲突问题,因此系统在调试过程中需要进行较大改动,这样对于早期版本进行测试对软件的实际质量作用不大。    

(3)软件测试中的单元测试、部件测试、配置项测试、系统集成测试等,都会包含功能测试和性能测试工作。但在嵌入式软件的测试过程中由于缺乏测试平台,导致功能和性能上的测试难以实现,形成了诸多矛盾。    

嵌入式软件在测试过程中出现的种种矛盾导致软件测试工作难以开展。一方面软件的单元测试、部件测试以及配置项测试需要跟硬件进行结合才能开展调试工作;另一方面这些部分的测试由于没有装入硬件平台进行实际测试,因此无法确定是否符合相关的匹配要求,完成最终的测试工作。    

3 嵌入式软件测试的基本方法    

嵌入式系统以计算机技术为基础,以应用为中心,软硬件可以进行调整。嵌入式系统的软硬件功能联系紧密,不能单独完成测试工作,因此嵌入式软件测试相比于PC系统软件测试难度更高。嵌入式软件系统测试具有以下特点:    

(1)测试软件功能对硬件功能依赖性强,难以快速定位软硬件错误;    

(2)使用编码难以完成强壮性测试、可知性测试;    

(3)在交叉测试平台上的测试用例、测试结果上载难度较大;    

(4)由于消息系统测试具有一定的复杂性,因此线程、任务、子系统之间的交互,并发、容错和对时间的要求都较高;    

(5)嵌入式软件系统的重要特征还体现在性能测试、确定性能瓶颈困难;    

(6)由于测试过程中需要考虑的因素较多,难以实施测试自动化技术。软件测试在工程开发上,本身投入较大,成本较高。嵌入式软件测试系统由于自身的复杂性和综合性,相应的成本会持续扩大。    

综合以上嵌入式软件系统测试的特点,常用的测试方式主要有全数字模拟测试与交叉测试两种,接下来笔者详细分析两种测试技术。    

3.1 全数字模拟测试    

全数字模拟测试是一种利用数学平台的方式,可以将嵌入式软件从系统中分离出来。通过对CPU指令、常用芯片、I/O、中断、时钟等模拟器的开发在开发主机平台(Host)上完成嵌入式软件的测试。这种测试方式比较简单,对于软件的功能测试具有较好的适用性。但全数字模拟测试方式本身具备一定的局限性,对于不同编程语言完成的软件需要通过不同的仿真程序完成测试工作。实时性、准确性和通用性都比较差。另外完全搭建测试环境花花费的成本过高,因此全数字模拟测试只能作为嵌入式软件测试的辅助手段。    

3.2 交叉测试(Host/Target测试)   

由于高级语言的影响,嵌入式系统的开发环境和运行环境存在一定的差异。开发环境可以视为主机平台(Host),软件运行环境视为目标平台(Target),这种测试方式又称为HostTarget测试(交叉测试)。在进行测试工作时,利用高级语言的可移植性优势,将与目标环境无关的测试工作移植到PC平台上完成。在硬件环境未搭建好之前或者设备工具缺乏的情况下,可以利用常规软件测试的方式完成测试工作。系统中与硬件相关的测试工作需要在Target上完成,使用测试工具必须保证支持目标环境,最终对目标环境进行确认,完成整体的测试工作。这种测试方式适用于高级语言,操作简单测试成本较低。缺点是实时性较差,并且在目标环境的测试中需要占用一定的目标资源。   

4 提高嵌入式软件测试水平的策略    

嵌入式软件的测试技术还在不断发展,通过对嵌入式软件系统测试特定以及当前存在问题的分析,可以通过以下几种措施提高嵌入式软件测试水平,笔者将其归纳总结如下:    

4.1 先静后动、从小到大、由黑到白    

(1)软件测试应该先进行静态测试,然后进行动态测试。测试时间越早对于质量的控制性越高。另外对于嵌入式软件系统的测试应该做好与硬件的协调工作。    

(2)单元测试完成后再进行集成测试,单元测试的效果越好,整体的效率越高。    

(3)先进行简单的黑盒测试再进行白盒测试,确定软件的功能,同时对程序的覆盖率进行验证。    

4.2 重视质量分析工作    

软件模块之间的逻辑结构是软件质量的直观反映。这种结构性越好,代码的可靠性越高。结构化测试也是分析代码质量的重要方法。代码的复杂性和错误情况可以通过结构分析得到改善。    

4.3 选择合理的工具完成测试,并加强管理    

嵌入式软件系统的测试对工具的要求更高,必要时需要搭建测试所需要的环境,提高测试成本,为保证测试效果。在测试工作中需要选择合理的工具完成测试工作,降低工作量。同时还应该对工具进行严格管理,通过维护与更新,控制测试成本。

在嵌入式软件的测试工作中,首先应该遵循预防为主的理念。并按照软件开发的相关顺序完成对软件的测试工作。同时还应该对软件测试的成本、进度、风险以及有效性等因素进行综合考虑。当前硬件的集成度不断提高,软件的功能越来越强大,因此对于嵌入式软件的测试应该增加科研投入,不断满足市场需要,提高软件的质量和稳定性。