基于模块化设计的嵌入式软件测试方法(共10篇)
基于模块化设计的嵌入式软件测试方法 篇1
摘要:分析嵌入式软件的特点,综述传统的软件测试方法;针对嵌入式软件的特点,提出嵌入式软件的四级测试流程和集成测试的测试模型,并结合开发数控系统的实例进行分析。
关键词:模块化设计 嵌入式软件 软件测试 测试方法 测试模型 数控系统
嵌入式设计已经成为工业现代化、智能化的必经之路,嵌入式产品已经深入到各行各业。嵌入式系统的专用程度较高,系统的整体继承性相对较小,为了保证系统的稳定性,软件的测试成为嵌入式开发的一个重要环节。由于嵌入式软件自身的特点,传统的软件测试理论不能直接用于嵌入式软件的测试,因此,研究嵌入式软件的测试有重要意义。
1 基本概念简述
1.1 模块化设计
(本网网收集整理)
软件的设计是以一定的方法为基础的。面对越来越复杂的软件开发任务,人们提出了各种软件设计的模型。从用户需求和系统要实现的任务功能出发,把大型的软件划分为相对较小的模块。为了减少模块与模块之间的关联性,模块之间的逻辑结构相对独立,无函数的交叉调用,数据传递由全局变量完成,这就是模块化设计的基本思想。模块化设计的核心是模块的独立性,主要包括功能独立性和结构独立性,这使得软件开发的分工易于实现。软件测试是软件开发中的关键环节,基于模块化设计的软件测试模型简单,查错和纠错都易于实现。下面以单链路数据传递的软件模型说明模块化软件设计的软件测试的基本原则。
在图1中,函数F(X-Y)定义为软件模块X到软件模块Y的接口函数,用来通过终端显示由模块X进入模块Y的数据。如果模块C执行后发生错误,则由模块B和模块C的数据接口函数F(B-C)判断是否是模块B出来的数据就是错误的。如果F(B-C)不错,则证明模块C存在错误;如果F(B-C)传递数据错误,再察看F(A-B)传出的数据是否错误,如果不错则证明模块B存在错误。用此依次前推孤立错误的方法,即可以很容易地定位错误所在的模块。这就是模块化设计时软件测试的基本原则。
1.2 嵌入式系统
嵌入式系统开发有其自身的特点。一般先进行硬件部分的开发,主要包括形成裸机平台,根据需要移植实时操作系统,开发底层的硬件驱动程序等。硬件平台测试通过后,应该软件的开发调试是基于该硬件平台进行的,这同时也是对硬件平台的一个测试。整个嵌入式系统开发流程如图2所示。因此可以说,嵌入式系统的开发过程是一个软硬件互相协调,互相反馈和互相测试的过程。一般来说,在嵌入式系统软件中,底层驱动程序、操作系统和应用程序的界线是不清晰的,根据需要甚至混编在一起。这主要是由于嵌入式系统中软件对硬件的依赖性造成的。嵌入式软件对硬件的依赖性要求,软件测试时必须最大限度地模拟被测软件的实际运行环境,以保证测试的可靠性。底层程序和应用程序界限的不清晰增加了测试时的难度,测试时只有确认嵌入式系统平台及底层程序正确的情况下才能进行应用程序的测试,而且在系统测试时,错误的定位较为困难。软件的专用性也是嵌入式软件的一个重要特点。由于嵌入式软件设计是以一定的目标硬件平台为基础的、面向固定的任务进行的,因此,一旦被加载到目标系统上,功能必须完全确定。这个特点决定了嵌入式应用软件的继承性较差,延长的系统的测试时间,增加了测试费用。嵌入式软件的另外一个重要特点就是实时性。这是从软件的执行角度出发说明的,也就是说嵌入式软件的执行要满足一定的时间约束。嵌入式系统中,应用软件自身算法的复杂度和操作系统任务调度,决定了系统资源的分配和消耗,因此,对系统实时性进行测试时,要借助一定的测试工具对应用程序算法复杂度和操作系统任务调度进行分析测试。可见嵌入式软件与传统的面向对象和面向过程的软件相比有其自身的特点。针对这些特点对嵌入式软件的测试进行研究是必要的,有意义的。
1.3 嵌入式软件测试
软件测试是从经济、效率的角度出发,对软件代码进行质量、正确性保证的一个过程。软件测试是软件开发中的一个重要环节,也是软件从开发过程到应用过程的关键一环。嵌入式软件也不例外,图3给出了嵌入式软件测试的统一测试模型。软件测试逐渐成为一门成熟的学科,前人针对面向对象和面向过程的非实时软件的测试作了大量的研究,其中大部分方法可以用到嵌入式软件的测试。
根据不同的指标,软件测试方法有不同的划分方法。从软件开发过程中测试所处的不同阶段可分为模块测试、集成测试和系统测试。根据是否需要运行目标代码分为动态测试和静态测试;根据目标代码的可见性可分为白盒测试(结构测试)和黑盒测试(功能测试)。在软件的.测试中,每种测试方法都不是孤立的。为了最经济最有效地达到测试的目的,各种测试方法往往是互相嵌套的。例如,在软件的单元测试
阶段,可以用黑盒测试和白盒测试的方法分别进行动态测试。
值得一提的是,近年来软件测试中,测试代码的覆盖率逐渐成为软件测试的统一标准,因此不管采用何种测试方法,尽可能地提高软件测试中的代码覆盖率是必需的。软件测试代码覆盖率是基于白盒测试方法的,因此,为了提高软件测试的代码覆盖率,测试人员必须清楚源代码的结构,拥有程序设计文档,以便设计测试用例使测试尽可能地覆盖程序内部结构的每条语句,提高代码的覆盖率。
基于模块化设计的嵌入式软件测试方法 篇2
关键词:构件化设计,嵌入式软件,软件测试,模式
0 引言
在软件工程中,为了保证软件产品的品质,软件测试是必要的环节与手段。随着嵌入式软件在军用和民用高科技项目中的广泛使用,在其发挥巨大作用的同时,其可靠性也引起了人们的关注,针对嵌入式软件的测试越来越受到重视。
为了对嵌入式软件进行自动的、实时的闭环测试,需要一个嵌入式测试平台为软件系统提供相应的测试环境,而针对不同的嵌入式软件,用来搭建的测试环境也不尽相同,为此运用构件化技术对不同的嵌入式软件进行环境设置,建立测试环境平台,以满足测试的要求。
通过构件化技术搭建的测试环境可以提供面向测试的软件系统,便于测试人员开展测试工作。同时将面向对象的软件分析设计方法中的模式应用在嵌入式测试平台搭建中能够更好的处理软件系统设计或实现中某些特殊的、重复出现的问题。嵌入式软件测试开发环境本质上是一个交互式系统,而模式是针对交互式系统的体系结构设计的比较典型的一种,它为交互式系统的软件系统的开发的应用框架提供了基础[1]。
1 构件化嵌入式测试模式
构件是系统中实际存在的可更换使用的软件形式,它实现特定的功能,符合一套接口标准并实现一组接口。一个好的系统,包括用来进行测试的系统平台,使用构件化设计能扩展测试应用的范围并且将构件化思想应用在嵌入式测试技术领域中,结合模式技术可以为特定设计环境中重复出现的问题提供了有效的解决方案,并且在此基础上可以按照软件体系结构的思想构建出具有特定属性的系统测试平台[2]。在系统测试平台的搭建过程中可以应用模式将整个过程通过语境、问题和解决方案来进行描述,其流程图如图1所示。
当前大多数的桌面软件系统是交互式系统,这类软件系统通过图形用户接口来达到与用户的高度交互,便于增强系统的可用性,通过较便利的访问方法,能使得用户快速地学习应用程序并产生结果。
交互式系统内核通常是稳定的,而用户接口经常发生改变,通常需要不断调整与用户业务过程的接口,因此内核独立于用户接口是交互式系统设计的重点。在软件模式中可以将交互式系统分为三个部分:第一部分是系统的核心功能和数据,它独立于特定的输出表达或输入方式;第二部分是向用户提供了丰富的显示信息,它可以从模型获得数据,每个模型可能有多个视图;第三部分用来处理用户的输入、视图和控制器共同构成了用户接口。
通过三个部分之间的变更传递机制保证了用户接口和模型之间的一致性[3]。该模式为交互式系统的软件系统的开发的应用框架提供了基础,它通过模型与用户接口的分离,可实现数据的多视图显示,同步化显示视图的更新,同时可实现运行期间用户接口对象的替换,为交互式系统的设计与实现提供了有效的解决方案[4]。
2 构件化测试开发仿真平台
为实现对嵌入式软件进行自动的、实时的闭环测试,嵌入式软件仿真测试平台分为两层,分层体系结构如图2所示。
测试开发环境运行于宿主机,是面向软件测试的图形化、交互式的软件系统,测试人员可以根据被测软件的要求,通过测试前对系统的各种资源进行配置,组织被测软件的输入,来驱动被测软件运行,同时实现测试过程中测试数据的实时监控、显示以及与被测软件的交互,测试结束后能够自动保存被测软件的输出结果,从而对嵌入式软件进行自动的、实时的闭环测试[5]。测试开发环境是仿真测试环境的重要组成部分。
仿真模型开发环境完成对目标系统交联设备的仿真建模。目的是建立被测软件的设备交联环境,模拟被测软件的真实运行环境完成必要的内部数据解算,通过接口仿真实现各交联设备模型与被测单元之间的数据交换。
实时内核是处理测试时实时数据的程序模块。主要任务是完成对测试任务的实时调度,测试数据的实时传递等功能。通过分析,可以确定测试开发环境的主要功能应当包括如下六个方面:1)测试文档管理;2)测试脚本开发环境;3)测试面板的搭建;4)测试环境配置;5)测试数据分析;6)日志管理。
3 构件化嵌入式软件测试开发环境设计
在构件化设计的研究基础之上可知,嵌入式软件测试的开发环境是一个面向测试的交互式软件系统,通过构件化设计的该系统可针对不同的嵌入式软件进行系统化的测试,其中包括自测与外部测试等,同时应用模式技术可使该系统能更容易的实现嵌入式的测试环境,满足被测软件功能与性能的测试。
3.1 构件构架模型创建
通过构件化的形式建立系统模型其创建重点在于通过分析软件应用领域将核心功能从设想的输入和输出行为中分离出来,其中系统内核所需的数据和功能封装在所设计的构件模型中,并通过构件的应用体现出来。
基于对嵌入式软件测试开发环境的设计与分析,可以得到整个嵌入式测试系统环境的构件图,其中构件与组件包的关系如图3所示。
从图3中可以看出,在整个嵌入式测试系统环境的搭建过程中,系统分为主要的六个构件部分,并以两个组件包为依托,通过预定义接口的形式,将测试的不同构件关联成了一个整体,形成嵌入式测试的系统平台。系统构件包括:测试文档管理构件、测试配置构件、日志管理构件、测试脚本构件,以及测试脚本开发程序组件包和测试面板组件包。
测试文档管理构件起着分级处理测试环境文档的作用,其内容包括模型接口文档、日志文档和测试配置、测试脚本文件等,能有效地组织测试工作和管理测试。
测试配置相对比较重要,主要是针对被测试的系统、测试工作的时间周期和测试过程中的输入和输出进行配置管理,这样能较好地体现出系统的通用性和可扩展性。
在测试过程中,对每项工作都要有相应的记录,因此日志管理是必不可少的,通过后台运行的监控进行对测试过程中所发生的事件进行自动捕捉,并记录测试人员在测试各个阶段中的活动。
测试脚本构件包含了测试脚本中所支持的各种测试任务的链表,表中测试任务包括测试任务的执行时间、任务的优先级特性和周期特性,以及测试人员所施加的测试动作序列的集合。测试人员根据不同测试用例要求,生成不同的测试脚本动作序列,这些测试动作序列的描述,可以由相应的处理程序编译为相应的测试指令,再通过编译器的实时解析就可以完成对被测软件自动化测试的驱动。
测试脚本开发程序组件包,是为了测试人员更方便地生成测试脚本而提供的测试脚本开发程序包,可以支持文本和图形两种方式来生成测试脚本。它依赖于测试配置构件,在生成测试脚本时需要测试配置的信息。同时提供对生成的测试脚本的语法进行检查。
测试面板开发程序组件包,提供了以图形方式建立的测试面板,其中包括数据的显示,便于用户在测试开发过程中监视、查看测试过程。同时也允许用户在测试过程中,实时地添加一些测试命令,完成用户与被测软件的交互。通过在测试开发环境中提供一组封装的控件,允许用户采用图形化配置的方式来搭建测试面板。它依赖于测试配置构件,在搭建面板时需要测试配置的信息。
通过构件化设计的嵌入式测试平台提供了对测试结果进行数据收集,并将收集到的数据进行分析的功能,能够实现测试过程的回放,以及测试结果数据的过滤、查询、比较和图形化显示,从而减轻测试人员的负担,提高了测试结果数据分析的效率和准确性。
3.2 整体框架建模
在整个测试系统的框架中,将构件的运行环境与测试平台通过组件的形式相交互,所有的已开发的构件都存储在一个构件库中,由构件库来统一管理构件。根据测试的需要在构件库中搜索符合需求的构件,来搭建测试系统平台。在搭建过程中,通过进行性能、安全和有效性的测试,选出用于测试系统的理想构件。如图4所示。
在测试系统的设计上只需考虑构件之间的接口,在不同构件之间定义好合适的业务分割平衡点就可以通过高内聚、低耦合的功能构件,组成满足嵌入式测试需求的业务构件,从而能较好的适应不同嵌入式软件测试的需要。
4 结语
本文将构件化设计与模式应用在嵌入式软件测试开发环境中,并对其进行了分析和设计,为软件系统的开发提供了强有力的支撑,提高了软件系统的可复用性和适应性。构件化技术作是测试环境的重要组成部分,有效的测试开发环境为实现针对嵌入式软件的实时、闭环的系统测试提供了保证。
参考文献
[1]Fontoura M,Pree W,Rumpe B.The UML profile for frameworkarchitectures[M].Pearson Education Limited,2001.
[2]Tsai W T,Na Y,Paul R,et al.Adaptive scenario-based object-o-riented test frameworks for testing embedded systems[C]//26thAnnual International on Computer Software and Applications Con-ference,Oxford,England,2002:321-326.
[3]王益,耿相铭,陈慧.嵌入式测试系统设计[J].计算机工程,2008,34(18):237-238.
[4]王轶辰,徐萍.嵌入式软件机内测试的设计与测试[J].计算机工程,2009,35(17):34-39.
嵌入式系统软件设计方法应用分析 篇3
【关键词】嵌入式系统;软件设计;应用分析
引言
嵌入式系统是一种以计算机技术为基础,以特定的应用功能为设计目的的一种能够完全嵌入控制件内部的计算机系统。嵌入式应用中虽然有很多像Qt/Embedded、MiniGUI之类的图形界面处理软件或工具包来辅助系统设计,但在很多情况下中却无法使用这些软件或工具包。尤其是近几年来,互联网和移动网络的高速发展, 更是将嵌入式系统的发展带到了一个全新的高度,对嵌入式系统应用的功能性要求也越来越高,给嵌入式系统设计和开发带来了更大的难度。这些应用的软件架构需要一种实用、简捷的设计模式来解决上述设计问题,从而保证系统的可靠性。
1.嵌入式系统的发展历程
1.1 早期的嵌入式系统设计方法,一般是采用“硬件优先”原则。即在只粗略估计软件任务需求的情况下,首先进行硬件设计与实现。
到现在,嵌入式系统的发展已经有了将近四十年的历程,在这四十年当中,嵌入式系统已经陆陆续续的渗透到工程设计、科学研究、军事技术以及网络技术中,成为人们生活所必不可少的一部分。采用这种设计方法,一旦在测试时发现问题,需要对设计进行修改时,整个设计流程必须重新进行,对成本和设计周期的影响很大。而且,随着科学技术以及计算机网络技术的不断发展,对嵌入式系统的功能和运行的可靠性要求也变得越来越高,使得嵌入式系统的设计和开发也变得越来越困难。
1.2 自从在上世纪七十年代最早的嵌入式系统的前身单片机问世之后,经过无数科学研究人员的不懈努力,各种各样的嵌入式微处理器和嵌入式微控制器相继出现,正式标志着嵌入式系统进入了发展阶段,成为了时代发展的一部分。因而出现了软硬件协同(codesign)设计方法,即使用统一的方法和工具协同设计软硬件体系结构,最大限度地挖掘系统软硬件能力,避免由于独立设计软硬件体系结构而带来的种种弊病,来获得高性能低代价的优化设计方案。
2.嵌入式应用系统软件设计的思路
简单版本的嵌入式应用系统在使用的过程中可以不涉及操作系统,但是当应用系统需要设计的功能比较复杂的时候,对系统软件所进行的设计是相当复杂的,当前,嵌入式系统设计人员已将擅长的设计方法发展到用软件来体现系统的部分功能。嵌入式操作系统的引入,在应用系统目标软件和硬件之间架起了一座桥梁,它可以大大减少系统设计的复杂性。
系统体系结构一旦确定,硬件和软件就可以相对独立地进行设计。协同设计的目标是做出恰当的体系结构决策,允许在以后的实现阶段中独立完成。这样,嵌入式操作系统作为应用程序和系统硬件之间的虚拟“视图”,将目标应用软件和硬件系统隔离开来,减少了目标应用软件对底层硬件系统的依赖,这样既增强了应用软件的可移植性,也减少了应用软件设计的复杂性。在设计或者对嵌入式操作系统进行移植的时候,应该将系统对硬件所产生的依赖部分转化到位于底层的设备驱动程序上面,这些设备驱动程序在这个时候只是提供给系统一个虚拟的视图,在此之后再由微内核提供将以上系统合并在一起的有效机制,这样既可以簡化内核所可能拥有的复杂程度,又能够进一步缩减内核可能拥有的体积。为了便于使用,提高系统的可维护性与可扩展性,将目标硬件相关代码封装成软件包的形式,以便开发者定制替换,定制和替换过程只是微内核中虚拟视图的增加与删减,相应只需改变硬件抽象层。嵌入式系统软件的设计,关键是有可用的工具包,在不同的开发阶段需要不同的工具包。在早期嵌入式应用系统软件设计时,首先使用的是内部电路模拟器(ICE)。内部电路模拟器插在微处理器和总线之间的电路中,开发者可以通过它控制所有的输入输出以及微处理器的行为。但是内部电路模拟器是异体,容易引起不稳定。近年来,出现的各种集成开发环境集成了代码编辑器、编译器、连接器、调试器、模拟器等工具,它使开发者可以首先脱离目标硬件环境,快速开发出应用软件原型。
这种平台式开发对基于标准的市场尤其有用,在这种市场中,产品必须支持一些基本功能,其他功能须进行定制。现在,各种各样的硬件开发板,为开发者提供了在与目标硬件兼容的硬件环境中调试应用程序的功能,更加加快了这个进程。
3.嵌入式系统软件设计方法应用
3.1 对软件的实时性进行设计:跟通用软件设计相比,嵌入式系统软件设计对系统的实时性具有很高的要求,只有保证嵌入式系统的实时性,让系统能够在规定时间内对激励做出反应,才能够保证嵌入式系统的正常运行。因此,在软件设计过程中,一定要按照实时性的不同,将软件功能分为实时和分时两个部分对软件的性能进行严格、合理设计,保证嵌入式系统软件的实时性能。
3.2 对软件的可靠性进行设计:为了能够有效保证嵌入式系统运行的可靠性,在对软件进行设计过程中,还需要对软件的可靠性进行合理设计。在对软件进行设计的过程中,一定要在充分考虑嵌入式系统运行特点的基础上,仔细编写功能模块的代码,尽可能避免错误的出现。同时,在编写完功能模块的执行代码之后,一定要立即对其进行试运行,如果发现问题,及时进行解决,以避免集成功能后对系统的运行的可靠性造成影响。
3.3 由于嵌入式设备中的资源有限,只能选择轻量级的Web Server(如:thttpd、boa等),考虑到应用的广泛性,建议选择boa服务器。作为与用户交互的主要方式,Web page力求简洁,并尽可能提供很多的功能接口。这些功能接口基本可以分为两种类型,一种是触发动作功能,主要利用button触发实现现场图片的采集等动作的操作。另一种是文件交互功能,这种功能的实现相对比较复杂,它不仅需要button触发, 还需要一些文本域作为用户配置的传递机制。动态Web交互功能主要通过form窗体来实现,当用户点击功能接口,浏览器将窗体内容通过http协议传输给服务器,服务器再根据form中的action字段来调用相应的CGI文件。
3.4 混合编程,提高软件的执行力:混合编程指的是在软件编程过程中,同时利用汇编语言和高级语言进行编程,这也是当前编程发展的一种主要趋势。在编程过程中,针对不同的编程要求选择不同的编程语言,比如,对一些执行能力要求比较高或者是实时性要求比较高的程序进行编程,应该选择严谨性比较好的汇编语言进行编写,而对于一些对逻辑性要求比较高的程序进行编程,可以选择具有一定智能性的高级语言进行编写。如此以来,就可以同时提高软件的执行力和分析能力,提高嵌入式系统的智能性。
4.结语
嵌入式系统已经成为人们生活的重要组成部分之一,因此,在日常工作当中,一定要对嵌入式系统的设计和开发引起足够重视。而在嵌入式系统中,软件占据着极为重要的组成部分,也是系统设计、开发的重点、难点,所以,在软件设计过程中,一定要从软件的实时性、可靠性以及可拓展性等方面进行综合考虑,对软件进行合理设计。
参考文献
[1]吕骏.嵌入式系统设计[M].北京:电子工业出版社,2012.
基于模块化设计的嵌入式软件测试方法 篇4
4结语
在科学技术不断发展的今天,计算机软件系统的应用水平有很大程度的进步。原因就在于嵌入式实时软件的应用。因为在计算机软件设计中,科学、合理的应用嵌入式实时软件,可以提高计算机软件的质量,降低计算机软件的复杂性,使计算机软件应用更加有效、方便、快捷。所以,为了促进计算机软件更加有效地、广泛地应用到各个领域当中,应当致力于嵌入式实时软件的研究,使其在计算机软件设计中获得有效应用,增强计算机软件的应用效果。
[参考文献]
[1]任剑岚.计算机软件设计中嵌入式实时软件的应用探析[J].信息技术与信息化,(8):66-67.
[2]宋玉娟.计算机软件设计中嵌入式实时软件的应用分析[J].城市建设理论研究:电子版,2015(17):2206-2207.
[3]朱勇.计算机软件设计中嵌入式实时软件的应用探析[J].信息与电脑,2015(23):128-129.
[4]肖鹏.计算机软件设计中嵌入式实时软件的运用分析[J].无线互联科技,2015(14):63-64.
[5]宫婷.计算机软件设计中嵌入式实时软件的应用探究[J].中国外资:上半月,(12):280-280.
基于模块化设计的嵌入式软件测试方法 篇5
随着嵌入式技术的发展,利用各种开源的嵌入式平台来开发电子产品,已经成为大部分公司的首选。要使运行嵌入式系统的电子产品实现音频、视频、图片等多媒体信息的存储及处理,几乎离不开文件系统的支持,那么在嵌入式平台下开发各种文件系统也是必然。其中具备优越性能的exfat 文件系统由于微软的不开源性,也常常需要在内核中自主开发。
在嵌入式系统中,如linux、ucos,实现exfat 文件系统的功能已经不难。嵌入式开发者在具备嵌入式开发经验及exfat 文件系统的知识基础上,即可完成。但是在实现了exfat 文件系统的功能后,要如何验证其性能却不是那么容易。
1 测试工具的局限性
嵌入式软件由于内存有限、实时性、开发工具昂贵等特点,测试非常困难。嵌入式软件从下到上,分为硬件层、驱动层、内核层、应用层,而内核层由于结构复杂、代码庞大,是嵌入式软件中最难测试的部分,本文中待测的exfat 文件系统正处于内核层。虽然嵌入式软件有一些集成的测试软件,但是一般的测试软件只能用于标准的嵌入式内核,只能测试规定的功能,不能进行二次开发,而对于很多嵌入式产品来说,嵌入式内核源码需要修改,也需要测试更多特定的.功能,这就需要特定的测试方式。
因此本文要探索的是在内核层的文件系统的测试方式。按照测试方式来分类,该测试属于白盒测试的范畴。
2 测试体系
文件系统是一种存储系统,对于存储系统来说,需要关注的性能有访问接口性能、数据读写性能、聚合带宽、最大并发数、任务数、最大吞吐率、可扩展能力等,本文中的测试任务是测试嵌入式系统内核层文件系统的性能,因此需要测试的性能也相对单一,着重测试访问接口性能和数据读写性能。其中访问接口性能是指各个操作元数据和数据的API 返回速度,单位为API 操作数/s。以Open 函数为例,在应用层新建文件,调用Open函数,就可以通过内核文件函数FS_Open 函数调用驱动层函数,从而调用硬件,完成具体的功能。那么该API的返回速度指发送Open 命令到返回成功所花的时间;数据读写性能是指测定不同文件大小,数据块大小和读写比例的数据读写性能,单位为MB/s,以Read 函数为例,预先在系统中插入存储设备,调用Read 函数来读取该存储设备中的特定大小的文件,通过文件的大小除以读取的时间即可获得读取的速度;当然也可以用time 命令来测试时间,手动去计算速度,测试代码如下:
#define size 1024*1024*200
#define LEN 1024
#include
int main()
{
FILE *fp1;
char *buf=new char[LEN];
int i,j;
fp1=fopen(“data.in”,”rb”);
for(j=0;j<1024*500;j++)
{
fread(buf,1024,1,fp1);
}
printf(“ok!/n”);
fclose(fp1);
}
综上所述,测试体系如下所示:其中应用层的测试代码作用是调用相关的APP 函数,内核层对应函数指的是exfat 文件系统的功能函数,驱动层函数指的是与硬件相连的操作函数。
Exfat 文件系统的接口函数有:
unsigned int fsapitbl[]={
(unsigned int)FOpen,
(unsigned int)FClose,
(unsigned int)FRead,
(unsigned int)FWrite,
(unsigned int)GetLength,
(unsigned int)GetTime,
(unsigned int)ConvertName,
......
};
针对所有的APP 都需要完成接口性能测试,测试其响应时间以及功能的正确性;针对包含Read 和Write的APP 还需要完成读写性能测试,测试其读写速度,并且针对不同的存储设备,不同的文件大小要有不同的测试数据。对于存储系统的其他测试性能,需要联合整个嵌入式系统来测试。
3 测试数据
在ucos 嵌入式平台上测试exfat 的读写性能所得。其中ReadDIO 指用DirectIO 的方式来完成读操作,速度比一般的Read 更快,当然针对不同的应用需求,可能会对内核文件系统系统进行不同的修改,测试时要根据文件系统需求文档和设计文档来设计测试样例。
4 测试结果
通过测试数据的分析,可以看出本文提出的测试方法可以快速全面地测试内核层exfat 文件系统的性能。虽然本文提出的测试方法目前只针对exfat 文件系统,但因为exfat、fat、ntfs 等文件系统基本接口APP 的类似性,本问提出的测试方法也可以拓展到其他文件系统的测试。不过本文的测试方法还未实现全自动的测试,这还需要后续通过配置脚本来实现。
★ 性能测试的计划书
★ 性能测试工程师简历
★ 软件测试方案模板范文
★ 基于RS-485总线的土工膜水力性能测试系统
★ 性能的近义词
★ 自适应算术编码的FPGA实现
★ 普通话测试精选
★ 测试反思
★ 消防材料进场检查性能检查
基于模块化设计的嵌入式软件测试方法 篇6
1 模块化设计方法的概述
模块化设计是指在对一定范围内的不同功能或相同功能不同性能、不同规格的产品进行功能分析的基础上,划分并设计出一系列功能模块,通过模块的选择和组合可以构成不同的产品,以满足市场的不同需求的设计方法。
机械设计中的模块化设计,指的是在特定的范围之内选定特定的模块,组合成不同功能不同种类的机械产品。模块化设计一般包涵两种方式,一是纵向设计,二是横向设计。即在保证参数不变的情况下,将不同模块相互转换以此来完成产品的变化。现在很多机械设计中会将纵向设计与横向设计结合使用,也称作是全系列设计。
2 模块设计方法的具体使用
模块化设计,顾名思义就是对模块进行划分。在对模块进行划分时不仅要考虑到在机械制造中的简易性,还需要考虑的是在模块组合时模块之间的匹配程度。所以,在设计之前,必须对模块划分进行精确详细的把握。与此同时,模块在机械系统中是否可更换,每个模块功能是否独立,模块间是否可以结合等问题,都需要设计师考虑周详。
机械设计在进行模块化设计的时候应该遵循相对应的方法与步骤,严格控制模块的独立性和完整性,使其得到更好的使用,为模块间的相互连接提供便利,尽量使用最少的模块设计获得最多的产品, 注意保证产品结构的精度准确和性能稳定。首先,从机械设备的具体需求出发,合理控制模块划分标准,保证模块在操作过程中方便快捷,并且每个模块之间能够完美镶嵌组合。模块与模块之间环环相扣,相互制约,又相互独立。在这些程序准确无误进行之后再将每个模块组合在一起形成完整的机械产品。除此之外,还需要确保每一个模块都可以随时更换,以备不时之需。当机械产品中一个模块出现问题或损坏时随时能更换上新的模块并且不会影响到其他模块的正常运行以及整个机械产品进行正常工作。
3 模块化设计的优点
模块化设计的目的是以少变应多变,以尽可能少的投入生产尽可能多的产品,以最为经济的方法满足各种要求。作为一种新型的设计理念与方法,模块化设计具备着其自身独特的他物不能比拟的优点。
(1)模块化设计便于维护修理
由上文叙述可知,模块化设计具有可更换性。在机械设备运行时,如果某一模块发生故障,维护人员只需要把出现故障的模块进行更换就可以,并且在更换时并不影响机械设备的正常工作。这样不仅节省了维修费用,节省了产品再设计的时间,还便于维修,并且免去了不必要的资源浪费。
(2)模块化设计简化包装,节约成本
基于模块化设计的嵌入式软件测试方法 篇7
语音识别是将人类语音信号进行预处理、特征提取, 然后和测试、训练后存储在计算机中的标准模型进行比较, 得出判定和识别结果。当前主流的语音识别技术多基于统计模式, 模型训练过程中算法复杂、运算量大, 需要PC或工控机实现, 在一定程度上制约了语音识别技术的发展。
和基于PC的语音识别系统相比, 嵌入式语音识别系统运算速度、内存容量有限, 但体积小、功耗低、可靠性高、安装灵活, 在智能家电、消费电子等领域具有优势, 逐渐成为了研究的热点。
2、模块整体方案
语音识别包括训练、识别两个阶段, 在这两个阶段中, 都必须对输入的语音信号进行预处理和特征提取。语音识别的基本原理如图1所示。
在训练阶段, 用户多次输入训练语音, 模块预处理后进行特征提取, 得到特征矢量参数, 通过特征建模建立训练语音的参考模型库。在识别阶段, 模块按照一定算法, 将语音的特征矢量参数和模型库中的参考模型进行比较, 相似度最高的输入特征矢量将被判定为识别结果。根据识别对象, 语音识别分为特定人识别和非特定人识别。特定人识别的识别对象是特定用户, 非特定人识别的识别对象是普通用户, 需要采集多人语音进行训练, 才能达到较高的识别率。
现有的嵌入式语音识别系统主要有两种方式, 一种是在嵌入式处理器中直接调用语音开发包, 另一种则采取“嵌入式处理器+语音芯片”的模式。第一种方式计算相对复杂、开发周期长, 第二种方法结构简单, 微处理器计算量低, 可靠性高、开发周期短。本文介绍的语音识别模块以嵌入式微处理器为核心, 外围是非特定人语音识别芯片及相关电路, 模块选用ICRoute公司的LD3320芯片作为语音识别芯片。
3、硬件电路设计
模块硬件电路结构如图2所示, 包括主控制器和语音识别电路。模块正常工作时, 语音识别电路通过并口将处理后的数据传输给主控制器, 主控制器根据语音识别的结果, 向USART发送相应的命令, USART可用来扩展语音合成模块等外围串行设备。
3.1 主控制器芯片
本文介绍的语音识别模块主控制器选用S T公司的STM32F103C8T6芯片, 该芯片基于ARM Cortex-M332位RISC内核, 工作频率可达72MHz, 内置高速存储器, 拥有丰富的增强型I/O端口, 具有高性能、低功耗、低电压等优点, 易于集成和开发。
3.2 语音识别电路
语音识别电路参考了ICRoute发布的LD3320数据手册, 其原理图如图3所示。LD3320内部集成了语音识别优化算法, 无需外接Flash和RAM, 不用事先训练就能实现对非特定人的语音识别, 而且识别准确率较高。
LD3320和STM32F103C8T6通过并行方式相接, 其控制信号和复位信号、中断返回信号I N T B和STM32F103C8T6直接连接, 使用10k上拉电阻提高系统稳定性。在图3中, MBS (12引脚) 是麦克风的偏置, 并接了RC电路, 确保向麦克风提供稳定的电压。
4、系统软件设计
模块软件包括主控单元嵌入式操作系统μC/OS-Ⅱ移植、LD3320语音识别程序、对话管理程序等三部分。
4.1 嵌入式操作系统移植
μC/OS-Ⅱ是一个开源的实时多任务操作系统, 大部分代码采用C语言编写, 执行效率高、占用空间小、可扩展性强, 最小内核仅有2KB。μC/OS-Ⅱ是可剥夺型内核, 任务优先级划分非常重要。从分层化、模块化的设计理念出发, 主控系统任务优先级划分如表1所示。
除OSTaskStat、OSTaskIdle是系统自带任务外, 其他任务由用户创建。App_TaskStart是系统首个任务, 负责初始化时钟和底层设备, 创建事件及其他用户任务, 并对系统状态进行监测。
4.2 语音识别程序设计
本文介绍模块的语音识别程序采用中断方式, 其工作流程为:初始化、写入识别列表、开始识别、响应中断。
(1) 初始化。进行软复位、模式设定、FIFO设定、时钟频率设定。
(2) 写入识别列表。每个识别条目对应1字节的特定编号, 编号可重复, 但数值应小于256。LD3320最多支持50个识别条目, 每个识别条目是小写的汉语拼音, 每2个字 (拼音) 间有一个空格。
(3) 开始识别。图4是开始识别流程, ADC是麦克风输入通道, ADC增益是麦克风音量, 建议在40H-6FH间赋值, 值大表示MIC音量较大, 语音识别启动越敏感, 误判的概率也较高;值小代表MIC音量较小, 启动识别功能需要较大的音量, 但抗干扰性较好。经过对比实验, 本文介绍的模块中设定值为43H。
(4) 响应中断。麦克风采集到声音时, 就会产生中断信号, 中断程序会根据寄存器值分析结果, C5寄存器中的答案是得分最高、最可能正确的答案。
4.2 对话管理程序设计
对话管理单元用来存储等待识别的语音、等待执行的命令, 在主控制器中通过二维数组完成。每进行一次识别, LD3320可设置50个候选识别语句, 它们是10个以内的汉字或79个字节拼音串。本文介绍模块的对话管理数组如表2所示。
待识别的行为编号储存在行为数组中, 和50个语音识别语句对应。模块共有50组指令, 每组指令可包含6个行为, 能并行执行的行为可以归为一步, 在该模式下, 多个行为进行组合可完成复杂任务。
5、验证和测试
为验证语音识别模块的性能和可靠性, 分别在安静的室内环境、噪声较多的医院环境对语音识别模块进行测试。测试中, 对8条语音命令循环10次, 每个环境下对3名非特定人各测试80次, 计算成功识别的比例。
测试结果表明, 模块在室内环境下对非特定人的语音识别率在96%以上, 噪声较多的医院环境下语音识别率在92%左右。通过测试还发现, 在噪声较多的环境中模块的稳定性、实时性均有所降低。
6、结语
本文介绍了基于STM32的嵌入式语音识别模块的设计和实现, 对模块软、硬件组成及原理进行了较为详细的说明。实验表明, 本文介绍的语音识别模块具有稳定性好、识别率高、使用方便等优点, 可应用在智能家电、服务机器人、消费电子等领域, 具有一定的理论价值和应用前景。
摘要:本文介绍了以ARM为核心的嵌入式语音识别模块的设计和实现, 模块选用ST公司32位处理器STM32F103C8T6为核心处理单元, 通过以LD3320芯片为核心的硬件电路实现语音识别, 使用嵌入式操作系统μC/OS-Ⅱ实现任务调度和外围设备管理。
关键词:语音识别,ARM,LD3320
参考文献
[1]张丽娟, 王申良.基于STM32的语音识别系统的设计与实现[J].黑龙江科技信息, 2010 (2) .
[2]陈景帅, 周风余.基于SpeechSDK的机器人语音交互系统设计[J].北京联合大学学报 (自然科学版) , 2010 (1) .
[3]祝常健, 胡维平, 叶佳宁.基于HMM语音识别技术在ARM平台的实现[J].微计算机信息, 2009 (5) .
基于模块化设计的嵌入式软件测试方法 篇8
摘 要:本文结合机房环境设备的管理需要,分析了远程监控系统的特点,提出基于嵌入式Web服务器的远程监控系统设计思路、体系架构方法,并对基于OPC技术的互联与基于嵌入式Web服务器的互联作了简要对比。文章结合CGI程序的设计,着重探讨了嵌入式Web服务器的实现方法。关键词:嵌入式平台,Web服务器,远程监控,CGI程序
⒈引言
随着计算机和网络技术的普及,计算机系统的数量与日俱增,计算机机房已成为各大型单位的信息枢纽。机房中的环境设备(如空调、UPS电源、配电柜、消防设备等)为网络系统的安全运行提供了环境保障。同时,环境设备自身的安全运行,也成为机房管理的重要内容之一。一旦机房的环境设备出现故障,就会直接影响计算机系统的正常运行,严重的还会造成机房内的相关设备损坏,甚至导致网络系统瘫痪[1]。因此,对机房环境设备的运行状态进行实时监控,是保证机房设备安全运行的关键措施。
⒉远程监控系统的需求分析
对机房环境设备的监控主要涉及以下几个方面的内容:对配电系统、UPS系统、空调系统工作状态的监视;对机房的温湿度、生活用水和供暖制冷系统漏水情况等进行监测、报警,以及对门禁系统、消防系统、保安系统等的管理。由于这些环境设备是连续工作的,因此要求监控系统也必须是长时间连续工作的。这样就对系统设计的可靠性、安全性、可维护性等方面提出了更高的要求[1],具体表现在以下几个方面:
⑴高可靠性。要求监控系统可长时间不间断运行,无故障运行时间要长,且系统的维护快速简便。
⑵高安全性。系统应能够提供多种安全保护措施,对异常状态进行分析、记录、及时报警,以便让管理人员能够尽快了解所发生的情况并及时处理。
⑶较强的实时性。监控系统对信息的传输要及时,不能有过大的延时,否则难以及时跟踪被监控对象的当前状况。
⑷易用性和易维护性。机房环境设备监控系统,应以GUI的方式提供良好的人机界面,便于人机交互。同时,监控系统要有通用性和灵活性,即可以在对系统进行少量修改或扩充就可增加新的监控项目,扩充监测点数,以满足新的监控要求。
⑸丰富的系统功能。要求监控系统不仅能够提供一般的报警功能,对采集的当前数据进行记录且保存
历史数据,并以图形方式对环境设备运行状态和参数进行直观显示。
实施监控的主要方法,即是在现场控制器的控制之下,实时地采集数据并与预设的值进行比较,如果超出相应的阀值则给出报警,以提示有关人员进行相应处理。根据对环境设备监控的位置不同,可把监控系统分为本地监控和远程监控两大类。本地监控方式往往需要派人长期现场值守,管理成本较高;而借助于公共的Internet或企业内部的Intranet网络实施远程监控则可做到无人值守,从而大幅度地节约管理成本、提高机房管理水平和效率,因此成为监控系统发展的主流方向。
⒊远程监控系统的设计
基于对远程监控系统的需求分析,进行系统设计时应重点考虑如下几种因素:首先,要考虑现场总线与数据网的互联问题。由于被监控对象的信号种类较多,所采用的现场总线标准各异,因此不同总线标准之间的转换以及现场总线与数据网之间的互联是系统设计时需要重点考虑的问题[2]。其次,实时性要求是远程监控网络系统区别于普通网络系统的基本特征。如果监控系统的实时性得不到保障,现场监控就失去了实用价值。第三,为满足监控系统的高可靠性要求,应分别对硬件系统和软件系统进行抗干扰设计。第四,根据远程连接方式不同,应采用不同的安全措施以保证信息的安全传输。3.1监控系统的功能设计
监控系统的基本功能主要包括:现场数据的实时采集、发送和显示;对采集到的数据进行处理和存储;对数据处理的结果进行分析、判断和报警;提供多种业务支持功能。3.1.1实时数据采集
实时数据采集是实施系统监控的基础。在环境设备的监控系统中,需要实时采集的数据主要包括高低压配电系统及UPS电源的电压、电流、电源开关状态等参数,空调机的冷热水温度、流量、送风量、送风温度、新风量等状态参数,以及机房内部的环境参数(如温度、湿度、水浸、烟感、门禁等)。不同的参数采用的总线标准不同(如RS232/485总线、Lonworks总线),只有把它们统一到TCP/IP协议上,才能实现真正意义上的远程监控。
3.1.2报警功能
报警是监控系统的基本功能之一。监控系统对采集到的数据进行分析、处理,如果发现相关数据超限、数据异常,则说明环境设备出现异常情况,此时应发出相应报警。设计报警功能时,需要考虑被监控对象的自身特性、优先级别等因素,对多个报警信号进行加权处理,以保证系统的所有重要报警都能被及时处理。
3.1.3多种业务支持功能
灵活的查询和丰富的报表功能是对监控系统基本功能的扩展。通过对设备运行状态的实时数据、历史数据进行对比分析,从不同角度向管理者提供设备运行和维护信息,为设备的维护、大修、更新、改造等质量管理提供可靠依据。3.2监控系统的结构设计
远程监控系统由现场数据采集设备(可以为多个设备)、本地Web服务器和远端监控主机三部分构成[3]。Web服务器通过现场总线与本地数据采集设备直接相连,并负责把本地传感器采集到的数据进行简单处理,通过网络发送到远端的监控主机上,从而为实现无人值守的管理方式创造条件。
远程监控系统在设计时需要解决的关键问题,就是将不同类型的现场总线或控制网络与以太网进行互联互通,从而实现监控信息的远程实时传输。目前,实施远程监控主要有如下几种方法:①基于PSTN的传统方法,即通过Modem连接异地的现场设备;②基于OPC技术。采用支持多种现场总线规范的OPC Server,通过OPC 接口实现现场总线到Internet或Intranet网络的无缝连接;③基于嵌入式平台实现远程监控。在嵌入式平台上完成对现场数据的实时采集,通过现场总线与数据网的互连,将Server端的数据通过TCP/IP协议提供给远端的监控主机(即Client端);④采用其它自定义方法实施远程监控。3.2.1基于OPC的监控系统
OPC 是以OLE/COM/DCOM机制作为应用程序级的通信标准,采用客户/服务器模式,把开发访问接口的任务放在硬件生产厂家或第三方厂家,以OPC服务器的形式向用户提供通用的接口,解决了软、硬件厂商之间的矛盾,提高了系统的开放性和互操作性[4]。基于OPC架构的监控系统结构如图1所示。其中,OPC DA Server为数据采集服务器,OPC AE Server为报警服务器。OPC Server 提供多种接口规范,应用程序和Web浏览器(即OPC Client)可以通过这些接口取得与OPC Server相连的硬件设备信息,从而实现OPC Client通过以太网对OPC Server的访问。同时OPC Server也可以将采集到的数据或报警信息通过网络发送到客户端或Web浏览器端。
在基于OPC的体系架构中,由于 COM/DCOM 已被视为网络功能的具体实现方法,使得Client对OPC Server的远程访问成为标准的网络访问方式。但是OPC技术的缺点也是非常明显的,由于LE/COM/DCOM机制是一个纯软件的架构,对系统资源配置的要求高。当系统规模较大或监控点数较多时,系统的实时性将会明显下降。
3.2.2基于嵌入式平台的监控系统
实时监控系统需要长时间不间断地工作,对系统的可靠性和实时性均有较高要求。为此必须从系统功能、体系架构、软硬件系统的稳定性、设备功耗等方面进行综合考虑(例如选用工控级的产品),设计小型化的智能型监控系统。而建立在RTOS之上的嵌入式系统为控制系统的网络化、小型化提供了有效途
径,嵌入式网络控制已成为监控系统未来发展的重点方向之一。
基于嵌入式平台的远程监控系统结构如图2所示。其中,嵌入式Web服务器既是远程监控系统的中心节点,也是控制网络与数据网络进行互联的网关,通过TCP/IP协议将其连接到以太网上,监控主机则通过以太网(或Internet)在远程实时地监视现场信号的动态变化,从而实现远程监控的目标。对于能够直接支持TCP/IP协议的现场检测设备,则可以将其直接连接到以太网上,图中的液体泄漏检测仪即是如此;对于采用其他总线标准的现场设备,则需要通过嵌入式Web服务器进行信号转换之后把现场总线连接到以太网上。
图2 远程监控系统结构图
⒋嵌入式Web服务器的设计
在基于嵌入式平台的远程监控系统中,监控系统的中心节点主要承担两方面的任务:一方面负责对现场数据的采集,即Web服务器以定时巡检的方式通过现场总线对传感器的信号进行采集;另一方面负责协议转换,把现场总线来的数据转换成TCP/IP协议的格式,通过以太网将其发送到远端的监控主机上。在本设计中实现了从RS232、RS485到TCP/IP协议之间的相互转换。4.1开发环境简介
考虑到系统开发的简便性,本方案选用uCLinux操作系统平台作为系统的OS环境,辅助开发工具选用MiceTek公司的HiTool。嵌入式Web服务器的硬件环境选用MiceTek公司的Samsung44B0X开发板,利用其丰富的接口功能,可实现嵌入式Web服务器与传感器的直接连接。4.2 嵌入式Web服务器的硬件设计
嵌入式Web服务器硬件环境的自定义,是根据监控系统的需要,重新制作嵌入式系统的主板。该主板的CPU仍选用Samsung的S3C44B0X,1M的BootFlash,8M的SDRAM,并提供10M/100M的以太网端口,2个RS232接口和6个RS485接口。如果待检测的参数较少,则选用一块嵌入式Web服务器主板即可;如果待检测的参数较多,则可选用多个同样的Web服务器主板,并对每个Web服务器进行参数配置(设置不同的IP地址),构成分布式的Web服务器。如果监控系统要求存储的数据量很大,则可以采取以下两种方法加以解决:一是嵌入式Web服务器外接硬盘;另一种方法是外加一台由工业控制级的服务器,对多台嵌入式Web服务器进行统一管理。4.3 嵌入式Web服务器的软件实现
嵌入式Web服务器的软件开发主要包括以下几项内容:首先,完成嵌入式操作系统的移植和TCP/IP协议的剪裁;第二,编写数据采集、数据处理应用子程序;第三,编写远程通信子程序;第四,报警处理子程序;第五,数据查询和报表生成子程序。这些功能应先在上述的开发环境中进行初步实现之后,再移植到自定义的环境中。
由于嵌入式系统的资源有限,因此对上述功能的实现应尽量简洁,例如对HTTP协议的移植,只需要保留基本的Get和Post方法即可,而Options、Head、Put、Delete和Trace方法在此可不考虑实现,因为对RAM(或EEPROM)中的数据存储可以采用循环覆盖的方式。
在此方案中,嵌入式Web服务器与Web浏览器及其他应用程序之间的交互,可以通过调用CGI(Common Gateway Interface)程序来实现。CGI规定了Web服务器与浏览器及其他可执行程序的接口协议标准。当Web浏览器将请求信息发送给Web服务器时,Web服务器触发一个可执行的CGI程序,该程序根据用户请求的内容做出相应的处理,并将处理结果以Web服务器可识别的方式输出,Web服务器再将该结果回送给Web浏览器[5]。
CGI程序中的信息传递是通过标准输入设备stdin和标准输出设备stdout来完成的。Web服务器在调用CGI程序之前,需要预先设置好所有的环境变量,以便把客户的请求转化为参数后存入环境变量,然后就可以调用CGI程序了。CGI程序根据不同的请求方法确定如何获取客户的请求内容,而Web服务器则通过标准输入设备stdin获得客户请求;对于CGI程序的输出结果,Web服务器则是通过标准输出设备stdout来获得,Web服务器对其进行语法分析之后,再传送给客户浏览器。至于CGI程序的实现,本方案选用C语言,以保证CGI程序的快速、高效和安全。
⒌结语
基于嵌入式平台的监控系统,以其体积小、可连续工作时间长、性能稳定等特点,得到人们的广泛认可,成为网络化远程监控系统的主流方向。在本设计中,借助于相对稳定和成熟的软硬件开发环境,设计了一套较为完整和实用化的远程监控方案并加以实现。经使用证明,该设计方案是成功的并取得了较为理想的效果。
参考文献
基于模块化设计的嵌入式软件测试方法 篇9
时间:2009-04-01 10:48:23 来源:微计算机信息 作者:李朋飞 鲁凯生 罗刚 冯常奇 引言
随着工业自动化水平的提高,远程控制成了应用越来越多的控制手段,常用的远程控制方式有基于以太网、GPRS、GSM短消息、电话网等。电话网络是覆盖面最广的网络,且电话通信的费用低廉,这就为利用电话网进行远程控制提供了可能。本控制器采用性价比较高的单片机AT89C51作为中控CPU控制MT8870对电话按键的双音多频信号进行解码,来实现通过对电话按键的操作来控制远端的被控对象,通过可录放语音芯片ISD1110来播放提示语音。设计实现了操作简单、安装方便,低成本的嵌入式远程控制器。该控制器能够检测电话振铃信号,自动模拟摘机,操作者根据语音提示就可以很方便的查询被控对象的运行状态,操作电话按键就可以改变被控对象的运行状态。2 系统功能和结构
本系统主要解决的问题是如何利用电话线传递控制信息。电话线上所传输的是双音多频信号(DTMF信号),这里直接利用电话线传递的DTMF信号来传递控制信息实现对远端控制对象的控制操作。系统主要完成的功能是对DTMF信号的解码,通过单片机对解码结果进行译码,根据译码结果发出相应的控制信号,驱动控制电路进行指定的控制操作。系统还必须能够识别电话振铃信号,在指定的时间内检测到规定的振铃次数(5次)则接通电话,播放提示语音。通过对电话按键的操作来远程控制被控对象。本系统主要设置了振铃检测、模拟摘机、模拟挂机、DTMF解码、语音、继电器驱动等电路。系统结构框图如图1:
系统工作过程:
振铃检测电路用于检测振铃信号,当检测到有振铃信号时,对振铃进行记数如果振铃次数小于5次该控制器不动作,若振铃次数大于5次表示要进行控制,单片机输出信号给模拟摘/挂机电路模拟摘机,此时控制器就和控制中心的电话接通。该控制器为防止误操作设置了密码保护功能,当控制中心通过拨打电话与控制器接通后,单片机输出信号给语音电路播放密码提示语音,控制者可以通过电话按键输入密码,控制系统接收由电话线传送来的DTMF信号,由MT8870对电话按键的DTMF信号进行解码,如果密码正确操作者就可以根据语音提示完成状态查询或是控制动作。3.硬件电路组成
系统硬件主要由振铃检测电路、模拟摘挂机电路、DTMF信号解码电路、语音电路和输出驱动电路等几部分组成。3.1振铃检测、模拟摘机电路
振铃检测、模拟摘机电路如图2,振铃检测电路是由光耦TLP521-1和74LS123构成。当有电话呼入时,电话线上传输的25HZ、90V的交流振铃信号由C1、C2隔离直流后由整流桥整流,整流后的直流电压值较高,经光电隔离器U1后输出TTL脉冲信号,该脉冲经74LS123整形成大方波信号,该方波信号送至单片机的P3.5引脚进行计数,当计数值达到预设值时,单片机P1.0引脚输出高电平,三极管Q1导通则继电器K1动作,将负载电阻R5(330Ω)接入电路实现模拟摘机。这里所说的模拟摘机是指将R5接入电路后,电话线上就会出现大于10mA的电流,交换中心检测到这一电流后就不再输出振铃信号而是转为接通电话。人们手动摘机接通电话时的工作过程与此一致,因此称为模拟摘机。如果振铃信号没有达到预设值就消失,则单片机的计数值清零,控制器不动作。
3.2 DTMF信号解码电路 频率(HZ)1209 1336 1477 1633 697 1 2 3 A 770 4 5 6 B 652 7 8 9 C 941 * 0 # D DTMF(Dural Tone Multiple Frequency)
表1 电话按键DTMF频率对应表
主要用于电话交换系统,它是由两个不同频率的音频信号叠加而成的复合信号,这些音频信号不存在任何谐波关系,分为高音组和低音组,电话机每个按键对应一组DTMF信号,对应关系如表1所示。
本系统采用MT8870作为DTMF信号的解码芯片,MT8870的结构如图3:
MT8870是加拿大Mitel公司生产的一种集成度高,应用普遍的通信类集成电路芯片,MT8870可以方便的和单片机接口,其主要功能是完成双音多频(DTMF)信号的接收和识别,它可用于有线
电话网,无线移动通信网和计算机通信网的终端设备。DTMF信号通过IN-端输入MT8870,GS引脚接反馈电阻对输入的DTMF信号进行放大,OSC1和OSC2引脚之间接一个3.5795MHZ的晶振,产生DTMF信号双音对中各单音比较信号。信号在MT8870内经过滤波、放大、高低频分离,再经过数字处理转化为与DTMF信号相对应的二 进制编码。DTMF信号解码为4位二进制码,由Q1~Q4直接输出,如按下电话“1”号键,则电话线上就有高频1209 HZ和低频697 HZ的DTMF信号 表 2 MT8870解码表传播,此信号进入MT8870进行解码,解码的结果由Q1、Q2,Q3、Q4,输出,MT8870输出结果与电话按键的对应关系如表2所示。芯片STD引脚提供DTMF信号检测输出,当MT8870接收到DTMF信号并解码完成后该引脚为高电平,平时该引脚为低电平,该信号通过反相后可向单片机申请中断,TOE引脚为输出使能端,当TOE为高电平时解码结果可以从Q1~Q4输出。TOE为低电平时Q1~Q4引脚为高阻态。MT8870与单片机的接口电路如图4。
3.3 语音电路
在语音控制与语音录放电路中采用ISD1110芯片制作数字录音器件,该语音芯片是美国ISD公司的ISD系列单片语音录放集成电路的一种。它采用直接模拟量存储技术,将每个采样值直接存储在片内的快速闪存中,能较好的保留模拟量中的有效成分,音质较好,该器件采用CMOS工艺制造,片内含时钟、话筒运放、自动增益控制、噪声滤波、平滑滤波和扬声器放大器。最小的语音录放系统仅由一个话筒、喇叭和几个电阻电容、按键组成。目前在语音录放设计中应用十分广泛。
ISD1110引脚排列如图5所示。各引脚功能如下: A0~A7 地址输入/模式控制; VSSA、VSSD 模拟地和数字地; SP+、SP-扬声器输出的正负端; VCCA、VCCD 模拟和数字电源正端; MIC 话筒输入端;
MIC REF话筒输入参考端; AGC 自动增益控制;
ANA IN、ANA OUT 模拟输入输出; /REC 录音低电平有效; /PLAYL 电平触发放音; /PLAYE边沿触发放音; XCLK 外部时钟; /RECLED 录音指示。4软件设计
系统程序采用C51编写,用高级语言开发单片机系统,具有开发周期短,软件可移植性强等优点。系统程序设计主要分两部分,一部分是系统对振铃信号进行计数,当计数值达到预设值时输出控制信号模拟接通电话;另一部分就是对电话按键的解码,实现相应的操作。系统程序流程图如图6
5结语
嵌入式电话遥控作为一种较新的课题与常规的遥控方式相比,显示出很大的优越性,它不需要专门的布线,不占用无线电频率资源,同时可以利用现有的成熟的电话网络实现跨省市的远程控制。
基于模块化设计的嵌入式软件测试方法 篇10
软件测试是提高软件质量的一个重要手段,据统计,国外软件开发机构40%的工作量花在软件测试上,软件开发费用的近1/2用于软件测试。对于一些要求高可靠、高安全的软件,如核反应监控软件、航天软件,测试费用可能相当于软件工程所有其它费用总和的3~5倍。软件测试被提高到这样的高度是由于一次次的软件故障造成了巨大损失和灾难。与这些损失和灾难相比,测试的费用微乎其微。近年来,人们从陆续开展的软件测试工作中得到了巨大的好处。软件测试在提高软件可靠性,缩短软件研制周期,减少软件维护费用等方面有显著效果。
软件测试和维护占用了典型软件生命周期过程的70%或更多,那么选择什么样的策略来控制这些成本呢?多年来,在航空电子工业领域、汽车工业领域,覆盖率分析技术已经在复杂的软件控制系统错误检测方面取得了非常有效的业绩。
覆盖率分析技术是指运行插装后的测试软件,使用功能测试、人机界面测试、边界测试、接口测试等各种测试用例,查看结构覆盖情况,并根据覆盖情况,设计新的测试用例,逐步达到覆盖率测试的要求。
2 嵌入式软件特点及覆盖率分析流程
嵌入式软件和通用平台的非嵌入式软件相比,具有嵌入式软件系统资源有限、有很强的时序相关性、与硬件联系紧密等特点。这些特点决定了其测试技术和测试方法具有特殊性和复杂性:嵌入式软件的输入/输出涉及计算机系统专用的端口、外部设备,有的输入/输出量电气特性也不一样,使嵌入式软件测试输入和结果获得都很困难。对嵌入式软件进行插装时,要采取灵活的插装方案,降低源代码插装对软件运行时序的影响。对嵌入式软件进行测试时,一般需要在真实的装备或样机上测试,外部连接模拟器。
对于嵌入式软件,测试时一般采用如图1所示的宿主机-目标机交叉测试环境。其中宿主机主要用于采集测试数据、使用工具对程序进行插装并编译生成可执行代码、将可执行代码下载到目标机,目标机用于软件的动态执行。根据实际情况,宿主机、目标机之间可以通过网络、串口或专用的硬件仿真器连接。
针对在工程实践中不便于使用传统的系统测试方法和硬件辅助方式进行测试的系统,英国LDRA公司的LDRA Testbed提供了一种行之有效的软件bitmap数组方式的系统测试手段,能够十分方便快捷的解决我们工程实践中的一些系统的测试问题。采用LDRA测试工具对嵌入式软件进行覆盖率测试时的一般流程如图2所示。
3 LDRA覆盖率实现原理及测试数据获取方法
3.1 实现原理与测试数据获取方法
一般用于程序覆盖率分析的技术为程序插装技术,其原理是:根据程序流程结构在程序的特征点即函数入口、出口和程序分支插装代码,然后编译执行,执行的过程中,插装代码将执行的历史数据(代表覆盖率的数值)写入到本地文件中形成历史文件,通过对这个历史文件进行分析,从而得到代码覆盖率。
LDRA插装历史文件建立和打开的程序,如下:
上述程序插装方法比较适用于非实时、非嵌入式的软件测试,如通用PC机平台上运行的非实时软件,不适用于实时嵌入式软件测试。因为在嵌入式目标机环境建立和得到这个历史文件存在困难;另外由于其插装过程是建立文件、打开文件、写文件的方式,“写文件”频繁操作及函数调用会耗费大量的处理机时间,必然破坏被测软件的实时性,甚至造成被测试软件无法正常运行。
使用新的LDRA Testbed的BITMAP技术,对程序进行插装时分为单文件和多文件两种方式。其原理为:插装后的代码在目标机运行时将相应的特征值信息放到一个大小固定的数组中(内存的写操作);当需要对覆盖率信息进行分析时,通过开发调试环境读取BITMAP数组的内容或通过LDRA自提供的get_history命令得到历史文件,再将该内容提供给Testbed进行覆盖率分析。
由于程序运行时特征数据的读写是通过对数组赋值方式进行的,所以对系统实时性影响很小;由于采用LDRA Testbed的BITMAP技术,该数组大小确定,因此对系统内存资源的占用很有限。从这个意义上解决了嵌入式软件测试的特殊性。
3.2 单文件方式实现
使用LDRA针对单个文件进行覆盖率测试,历史文件建立和打开的插装程序实现如下:
该插装方式在程序执行过程中不执行文件的打开、写及关闭的操作,减少了频繁文件操作和函数调用对系统实时性的影响,最大程度上保证系统的实时性。在目标机运行适当的测试用例后,在宿主机调试环境变量观察窗口加入对数组bitmaparr的观察,查看结果数据。如图3。
此时人工生成历史文件,如图4。
根据多个测试项目使用的经验,使用单文件方式进行覆盖率测试需要注意以下几点:
a)对于history,要手写数组bitmaparr值。文件格式要求到数字的最后一列是第8列,如上就是251前面有5个空格。
b)如果生成history与分析history的两台电脑的系统时间相差太多,可能导致覆盖率分析结果出问题。同时要注意history生成文件一定要早于分析时电脑的系统时间。
c)对于通用平台,使用单文件方式时要自选程序某特征点来创建文件名、打印bitmaparr[]数组值。如下:
3.3 多文件方式实现
使用LDRA针对多文件进行覆盖率测试,历史文件建立和打开的插装程序实现如下:
多文件方式同样采用写内存的方法,与单文件方式不同的是,在编译时需要添加Testbed针对Vxworks系统测试软件包中的tbmain.c支持文件。当需要查看数组值时,运行get_history>d:history.exh。get_history将数组中的数据按规定格式打印出来,将结果输出到history.exh中。
根据多个测试项目使用的经验,使用多文件方式进行覆盖率测试需要注意以下几点:
a)分析时不要分析头文件。
b)每次覆盖率分析后,history.exh文件会消失,应注意备份。
基于LDRA Testbed的BITMAP插装技术,再结合Tornado开发环境提供的强大功能,该覆盖率测试方法具有对系统实时性影响小,工程实施方便等特点,在大量的实际测试项目中被广泛使用,并且效果极好。
4 实例
在某项目的覆盖率测试中,采用单文件方式,运行一定的测试用例,得到的覆盖率结果如图5、图6。
覆盖率结果支持累加,通过不停地增加测试用例,覆盖率指标逐步提高,最终达到要求。
5 结束语
通过开展覆盖率测试技术和测试方法的研究,为提高实时嵌入式软件的测试效率和测试有效性提供有效的方法。通过语句覆盖、分支覆盖、路径覆盖的测试,大大减少了保留在程序中未发现的错误。以上的测试技术和测试方法已在舰艇指火控、导弹发控、雷达显控、红外警戒、超短波电台等多个嵌入式软件测试项目中使用,提高了测试的充分性和完备性,取得了较好的测试效果。
摘要:基于实时嵌入式软件的测试经验,针对实时嵌入式软件特点,研究了基于LDRA的嵌入式软件覆盖率测试方法,分析了程序插装BITMAP技术应注意的问题,提出了单文件和多文件两种方式的覆盖率测试方法。对于嵌入式软件测试,具有实际参考价值。
关键词:程序插装,覆盖率测试,覆盖率分析,BITMAP技术
参考文献
[1]郑人杰.软件工程[M].北京:清华大学出版社,1999.
[2]周涛.航天型号软件测试[M].北京:宇航出版社,1999.
[3]陈双龙,柏桂枝,孙学明.嵌入式系统设计技术[M].北京:清华大学出版社,2007.
[4]LDRA Testbed Vxworks软件方式系统测试.上海创景计算机系统有限公司,2008.
【基于模块化设计的嵌入式软件测试方法】推荐阅读:
基于嵌入式课程设计11-07
基于电话网的嵌入式远程控制器的设计06-08
基于嵌入式平台的网络化OTDR模拟训练系统设计论文08-19
模块化设计方法06-23
模块化植入式11-04
基于web的嵌入式远程监控系统08-20
嵌入式模块06-07