嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件,它在产业中的关联关系体现为:芯片设计制造→嵌入式系统软件→嵌入式电子设备开发、制造。
嵌入式软件与嵌入式系统是密不可分的,嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序4个部分组成,用于实现对其他设备的控制、监视或管理等功能。嵌入式软件就是基于嵌入式系统设计的软件,它也是计算机软件的一种,同样由程序及其文档组成,是嵌入式系统的重要组成部分。
持续集成起源于极限编程开发方法,是MartinFowler和MatthewFoemmel于2000年提出的一项软件开发实践。简单来说持续集成是指开发团队中的每个成员都尽量频繁的把工作提交到版本库,构建服务器自动将新提交的代码与原有资源构建成一个新版本,通过测试来验证新提交的代码有没有对项目造成破坏。
文中基于Jenkins,一种持续集成工具,通过配置Jenkins、自动化测试工具、版本控制软件和测试报告插件,实现了嵌入式软件持续集成的闭环测试过程。当检测到版本库有变化时,工具会自动下载测试版本库中的程序,如果发现问题,则立刻通知开发人员。本方案不仅能够密切监视代码库的正确性,包括代码质量和覆盖率;而且可以在无人值守的情况下自动完成预先设定好的测试任务,完成重复的测试过程,通过提供更快地识别和修复集成以及回归相关问题,达到更平滑、更快交付和更少问题的效果。
文中主要采用Docker+Jenkins+GIT+CSS+SkyEye组成持续集成系统。其中Docker 是一个开源的应用容器引擎,Jenkins为持续集成服务器(CI server);GIT为开源的源代码管理工具,保存源代码和变更记录;CCS为软件开发环境,提供编译环境;SkyEye为一款专业测试软件,支持包括测试用例加载调用、覆盖率统计和源码调试等功能。
配置环境:
1、首先配置Docker服务器,Docker内创建Jenkins镜像。
▲图1 Docker中Jenkins进程管理
2、windows下安装SkyEye
▲图2 SkyEyeGUI可视化界面
3、windows下安装CCS
▲图3 CCS可视化界面
持续集成基本实现过程如图4所示,主要包括代码提交、创建项目、构建、测试和测试结果反馈,具体步骤如下:
▲图4 持续集成流程图
(1)开发人员A与B分别负责同一项目的不同模块开发,假设这些模块之间存在接口关系。当完成接口设计和基础逻辑,具备集成测试条件时,提交到源代码管理库。同时,提前在测试环境下编写集成测试用例,直到测试用例能够覆盖所有需求;
(2)将被测软件提交到“源代码管理库”。Git将记录当前提交的版本和修改时间等情况,后续的新增模块和变更都在此基础上不断纳入Git进行管理;
(3)“创建项目”是在Jenkins中创建项目空间,和进行基本信息设置的过程,例如:源代码版本库的链接、轮询周期、触发构建条件等;
(4)当Jenkins轮询发现源代码管理库发生改变时触发“构建”过程,检查被测代码在开发环境下是否能够通过编译,如果有错误则通知开发人员,并停止测试。测试之前的编译检查,是执行测试的基本进入条件;
(5)在“自动化测试”阶段,使用SkyEye编写好的测试工程进行自动化测试;
(6)测试完成后,以电子邮件形式“通知”开发人员测试结论。默认情况下,Jenkins为每个失败和不稳定的构建发送一封电子邮件。
Jenkins项目配置过程源代码管理库Git作为版本控制工具,项目开发人员提交代码到版本库git,可通过配置Jenkins触发条件,设置定时检查版本库更新情况,或者设置git钩子post-commit,当版本库有代码更新时,Jenkins自动下载最新代码到工作空间。
1、工程定时管理
Jenkins周期轮询使用了cron风格语法,包括5个由空格分隔的字段:在本方案中要求凌晨进行工作,方便工程师第二天早上能看到测试结果。
▲图5 Jenkins中定时机制管理
2、Jenkins节点管理
Jenkins与SkyEye、CCS互通通过Jenkins slave进行管理.
▲图6 Jenkins中节点管理
3、编译
构建将开发完成的嵌入式子系统代码导入工作空间,使用CCS编译器,对工程进行编译,编译过程在makefile中实现。在构建脚本中进行判断编译是否成功,当编译发生错误时终止测试;反之,继续执行集成测试。下图是使用python对DSP工程源码进行导入、编译。
▲图7 python实行编译方法
4、自动化测试
自动化测试当工程构建通过后,启动软件测试工具SkyEye对代码进行测试,由于该软件支持命令行及python脚本操作,因此可以通过脚本的方式调用预先设计好的测试工程。在测试用例执行过程中,如果发生错误,可查看Jenkins控制台,或者将控制台信息作为日志导出查看。
▲图8 SkyEye中测试工程
5、测试报告
测试结束后,Jenkins输出测试结果趋势图,显示测试用例总数和失败用例数,并可查看控制台打印信息。为了方便查看详细的测试信息,本方案使用自行开发的插件,提取SkyEye生成的测试报告内容,测试人员能够在Jenkins中查看测试结果见图9。报告中列出了被测项目里每个代码文件的错误和位置。
▲图9 测试结果
6、通知
持续集成系统的另一个主要优势在于能够快速向开发者提供测试反馈信息。一般情况下,测试过程是定时触发且无人值守的,那么就需要测试系统在执行时,
及时记录测试过程,执行完毕后,迅速反馈测试结果。Jenkins提供了Email服务,能发送到全员。
▲图10 邮件发送通知