嵌入式技术
(文章来源:安防知识网)
软硬件结合的嵌入式系统正越来越多地应用到我们常见的仪器设备中,嵌入式领域目标系统的应用系统也日趋复杂,开发技术日新月异。同时,随着硬件技术发展的日趋稳定,而软件故障却日益突显,由此软件的重要性已逐渐引起人们的重视,越来越多的研究人员认识到嵌入式系统,优化其测试技术已势在必行,研究出合适的嵌入式软件系统测试方法,正是本课题的意义所在。
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,是专为应用系统量身打造、是对功能、可靠性、成本、体积、功耗有严格要求的专用的计算机系统。
嵌入式系统一般指非PC类标配系统,它也包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为,而操作系统控制着应用程序编程与硬件的交互作用。
嵌入式系统开发有其自身的特点。一般先进行硬件部分的开发,主要包括形成裸机平台,根据需要移植实时操作系统,开发底层的硬件驱动程序等。硬件平台测试通过后,应用软件的开发调试是基于该硬件平台进行的,这同时也是对硬件平台的一个测试。
嵌入式系统的开发过程是一个软硬件互相协调,互相反馈和互相测试的过程。一般来说,在嵌入式系统软件中,底层驱动程序、操作系统和应用程序的界面是不清晰的,根据需要甚至混编在一起。这主要是由于嵌入式系统中软件对硬件的依赖性造成的。基于嵌入式软件对硬件的依赖性,其要求软件测试时必须最大限度地模拟被测软件的实际运行环境,以保证测试的可靠性,而底层程序和应用程序界限的不清晰又增加了测试的难度。测试时只有确认嵌入式系统平台及底层程序是正确的情况下才能进行应用程序的测试,而且在系统测试时,错误的定位较为困难。
软件的专用性也是嵌入式软件的一个重要特点。由于嵌入式软件设计是以一定的目标硬件平台为基础的,面向固定的任务进行的,因此,一旦被加载到目标系统上,功能必须完全确定。这个特点决定了嵌入式应用软件的继承性较差,也延长系统的测试时间和增加了测试费用。
嵌入式软件的另外一个重要特点就是实时性。这是基于软件的执行角度而言的,也就是说嵌入式软件的执行要满足一定的时间约束。嵌入式系统中,应用软件自身算法的复杂度和操作系统任务调度,决定了系统资源的分配和消耗。因此,对系统实时性进行测试时,要借助一定的测试工具对应用程序算法复杂度和操作系统任务调度进行分析测试。
可见嵌入式软件与传统的面向对象和面向过程的软件相比有其自身的特点。所以嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。针对这些特点对嵌入式软件的测试进行研究是必要的和有意义的。
软件测试是软件质量保证的关键因素,代表了规约、设计和编码的最终检查。是从经济、效率的角度出发,对软件代码进行质量、正确性保证的一个过程。软件测试是软件开发中的一个重要环节,也是软件从开发过程到应用过程的关键一环,嵌入式软件也不例外。
从软件开发过程中测试所处的不同阶段可分为模块测试、集成测试和系统测试;根据是否需要运行目标代码又可分为动态测试和静态测试;根据目标代码的可见性还可分为白盒测试(结构测试)和黑盒测试(功能测试)。在软件测试中,每种测试方法都不是孤立的。为了最经济最有效地达到测试的目的,各种测试方法往往是互相嵌套的。例如,在软件的单元测试阶段,可以用黑盒测试和白盒测试的方法分别进行动态测试。
近年来,在软件测试中,测试代码的覆盖率逐渐成为软件测试的统一标准,因此不管采用何种测试方法,尽可能地提高软件测试中的代码覆盖率是必需的。软件测试代码覆盖率是基于白盒测试方法的,因此,为了提高软件测试的代码覆盖率,测试人员必须清楚源代码的结构,拥有程序设计文档,以便设计测试用例,使测试尽可能地覆盖程序内部结构的每条语句,提高代码的覆盖率。
硬件电路测试需要用专门的测试工具进行测试,这里不再多述。操作系统和底层驱动程序的测试主要包括测试操作系统的任务调度、实时性能、通信端口的数据传输率。该阶段测试完成后,系统应为一个完整的嵌入式系统平台,用户只需添加应用程序即可完成特定的任务。在模块测试阶段,也可以把大的模块划分成小的模块。在程序内部,小模块之间数据传递的入口设计接口函数,要用于快速地定位错误。用模块嵌套的思想进行软件测试,需要模块内部结构清晰,数据链路简单。
集成测试:单个软件模块测试正确之后,将所有模块集成起来进行测试。本阶段主要是找出各模块之间数据传递和系统组成后的逻辑结构的错误。在宿主机上采用黑盒与白盒相结合的方法进行测试,要最大限度地模拟实际运行环境,可以屏蔽掉一些不影响系统执行的和数据传递难以模拟的函数。
集成测试是嵌入式软件测试优点充分体现的阶段。集成测试前,应该由程序员根据模块之间的数据的输入输出编写模块接口函数,这需要负责不同软件模块的程序员共同协调完成,然后将模块接口函数集成到接收数据模块的入口处。单链路数据传递的软件模块集成测试时容易定位错误所在的软件模块。一个软件模块的数据不一定只有另外一个模块提供,即软件模块的数据链路不一定只是单链路的,测试时可以把复杂链路结构的数据传递划分为单链路结构数据传送进行错误定位。集成测试是在拥有程序设计文档、程序结构和数据结构时,对软件模块在集成中出现的错误进行测试。
系统测试:集成测试完成后,退出宿主机测试环境,把系统移植到目标机上来,完成应用到现场环境中的移植,从用户的角度对系统进行黑盒测试,以验证每一项具体的功能。由于测试者对程序内容、程序执行情况一无所知,因此本测试阶段的错误定位比较困难。系统测试阶段应该进行意外测试和破坏性测试,即测试系统正常执行情况下不该发生的活动和人为的破坏性的测试,进一步验证系统性能。系统测试阶段不应该确定错误后立即修改代码,应根据一定的错误发生频率,确定测试周期,在每个测试周期结束时修改代码,进行反复测试;否则,不但增加了完全测试的任务量,而且降低了测试的可信度。
测试结果分析:测试结果分析可以定位错误,指导程序员修改代码,同时指出进行测试的程序进一步测试的方向。测试结果分析是一个由测试结果和测试预得结果进行分析、比较和定位错误的过程。测试结果分析是一次测试的最后环节,分析时应该考虑软件的运行环境与实际运行环境的差异,以及各种外界因素的影响等。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法要求全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。
(责任编辑:fqj)
全部0条评论
快来发表一下你的评论吧 !