APP下载

嵌入式产品平台开发方法的研究与应用

2018-03-30徐继芸

电子技术与软件工程 2017年16期
关键词:嵌入式

徐继芸

摘要

传统嵌入式系统的开发,受到目标平台多样、开发工具不完善、需要软硬件协同开发等因素影响,往往开发周期较长,效率较低。同时,一个产品线下的研发团队多以项目组为单位独立开发,项目组之间缺乏有效的沟通和技术共享,导致重复开发,基础模块升级、维护不同步等问题。通过开发以通用构建模块为基础的产品平台可以有效减少重复开发,提升产品研发效率。同时,在嵌入式产品平台的开发中,通过合理的系统架构,综合使用测试驱动开发,持续集成等敏捷开发方法和工具,提升产品平台开发效率,保障产品平台质量。

【关键词】嵌入式 产品平台 敏捷开发 持续集成 通用构建模块 测试驱动开发

1 引言

对于一个有多个类似产品的产品线,构建一个以通用构建模块为基础的产品平台,可以加快产品开发速度,降低产品开发成本,控制风险。

产品平台的目标是将产品线成熟的CBB(Comnion Building Block,通用构建模块)抽取(抽象、重构)出来,提供给应用开发人员使用。一方面避免重复开发基础模块,减轻应用开发的复杂度和工作量;另一方面,也避免了多个项目组各自封闭开发导致基础模块升级,Bug修改不同步等问题。

产品平台的核心是通用构建CBB,CBB的核心是共性和可变性分析(Commonality and Variablity Analisys)。

下面介绍构建产品平台的核心要点,以及相关的流程、方法和工具。

2 产品平台总体架构

针对中大型嵌入式产品平台,架构需要遵循如下2条核心原则:

2.1 分层

为了保持良好的结构,对于较大型系统的产品平台,逻辑架构一定需要分层、分包(包,在C++代码中对应的是namespace)设计。越底层,模块功能越趋向工具,越高层,越趋向业务逻辑。

2.2 平台无关设计

平台无关设计对于嵌入式平台非常重要,目的是切换硬件平台后,产品平台、应用程序无需改动,只需要针对目标平台做一个实现即可。一般使用依赖倒置的设计方法实现平台无关。

产品平台逻辑架构图如图1产品平台逻辑构架图所示。

3 产品平台的开发方法和工具

一个典型的嵌入式产品平台物理架构视图如图2。

4 CBB开发流程

CBB是产品平台的核心组成,CBB开发流程如下:

(1)模块需求分析;

(2)模块设计;

(3)模块接口设计;

(4)编写接口测试用例,偏重可用性测试(即TDD,可有效帮助接口设计);

(5)模块设计评审;

(6)编码;

(7)完善单元测试用例。

需要说明的是步骤4,即TDD(Test-driven Development)——测试驱动开发。测试驱动开发是极限编程中倡导的软件开发方法,测试驱动开发的目的是取得快速反馈,并使用说明主线(illustrate the main line)的方法来构建程序。

经典的测试驱动开发流程,如图3测试驱动开发(TDD)流程图所示。

为了更敏捷的做设计评审,在设计阶段,可以使用TDD来完善接口设计,我们称之为TDDesign(测试驱动设计),优化的TDD如图4CBB开发中的测试驱动(TDD)开发流程图所示。

即,在接口设计完成后,实现前,先利用单元测试框架,根据业务流,调用接口写几个单元测试用例。

在实践中TDD的好处很明显:在写TDD测试用例的过程中就可能发现接口设计的不合理。而且,对于持续集成的系统,TDD也并没有增加工作量。

另一个需要特别说明是步骤5:对设计评审的关注。要求的设计评审内容:

(1)总体说明(若结构复杂则需有逻辑架构视图);

(2)接口使用示例;

(3)类图,序列图(UML);

(4)设计决策;

(5)接口(直接附头文件,不要粘贴到设计文档)。

设计评审保证了CBB的设计质量,不会因为团队成员素质的不同而出现重大的设计问题。

CBB代码上传到代码仓库后,剩下的就是自动化工具的工作了:依次自动触发单元测试,集成测试,发布测试,最后邮件发送集成结果给开发人员。

5 持续集成流程

持续集成流程如图5所示。

集成测试除了集成测试用例外,还复用单元测试的测试用例。集成测试运行单元测试的用例时,并非顺序运行所有模块(每个模块初始化,测试,反初始化后再运行下个模块),而是通过配置一定的依赖关系和策略,初始化一系列模块后,运行测试用例,最后,再反初始化这些模块。

6 发布流程

發布流程如图6所示,自动化打包,并对发布包从用户使用的过程测试一遍。发布流程每天构建,以保证每天都处于可发布状态。所有过程均自动化。

7 主要工具

几个关键的工具:

(1)Jenkins:做持续集成工具,使用脚本辅助实现嵌入式系统的远程部署测试。

(2)GTest:Google的单元测试框架。

(3)CMake:高效友好的自动编译工具,优于configure/make。

(4)Doxygen:自动生成接口说明,当然前提是规范好代码的接口说明格式。

(5)MediaWiki:wiki工具,做CBB发布和技术文档的发布平台。人人贡献的思想是推崇提倡的。

8 总结

本文介绍的嵌入式产品平台已经在星网视易公司的KTV产品线得到应用,传统上,该产品线一款基于全新硬件平台的系统,开发周期大概需要10?12个月,而基于产品平台,产品开发效率、质量显著提升,芯片平台切换时间大幅缩短至约原来的1/4。

實践证明,一个产品线下多个产品并行开发时,使用产品平台,可以大幅加快产品开发效率、提升质量、降低成本。同时,合理的系统架构,并辅以敏捷方法的使用,可以极大加快产品开发效率。

参考文献

[1]Duvall? Paul M,,Steve Matyas,and Andrew Glover. Continuous integration: improving software quality and reducing risk [M]. Pearson Education, 2007.

[2]Beck,Kent.Test-driven development: by example[M] . Addison-Wesley Professional, 2003.

[3]徐仕成.持续集成在现代软件开发中的应用与研究[D].中南大学,2007.

[4]纪海.基于云计算的产品平台设计服务研究[D].机械科学研究总院,2012.

[5]戴建国,赵庆展,郭理,秦怀斌.持续集成在项目开发中的应用研究[J].计算机工程与设计,2009(10):2573-2576.

[6]Marta Larusdottir, Jan Gulliksen, Asa Cajander. A License To Ki11-Improving UCSD In Agile Development[J]. The Journal of Systems & Software,2016.

[7]GB/T 22033-2008《信息技术嵌入式系统术语》概要[J].信息技术与标准 化,2009(08):38-40.

[8]A g i1e software development,wikipedia.org[EB/0L].http:// en.wikipedia.org/wiki/Agile_ software-development.

[9]Test-driven development,wikipedia. org [EB/OL] . http: //en. wikipedia. org/ wiki/Agile_sof tware-development.

猜你喜欢

嵌入式
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
TS系列红外传感器在嵌入式控制系统中的应用
基于嵌入式Linux内核的自恢复设计
嵌入式系统通信技术的应用
嵌入式PLC的设计与研究
搭建基于Qt的嵌入式开发平台
基于嵌入式系统Windows CE的应用程序开发
嵌入式单片机在电机控制系统中的应用探讨
嵌入式软PLC在电镀生产流程控制系统中的应用
Altera加入嵌入式视觉联盟