68人参与 • 2024-08-06 • 嵌入式
高嵩,现就职于武汉智能设计与数控技术创新中心,研发效能(devops)工程师(中级)认证学员
摘要:
嵌入式系统因其具有高集成度、高稳定性、低成本等特点,广泛应用于各行各业。嵌入式软件开发需要深度考虑与硬件及相关环境的兼容性。开发团队需要更高效、更灵活的方法来开发、部署和维护嵌入式产品。devops作为一种流程和文化的理念,已经在软件开发领域取得了显著的成果。本文将分析devops如何应用于嵌入式产品开发,并探讨其中的挑战和解决方案。通过对实际案例的分析和总结,本文将为嵌入式产品开发团队提供有益的启示和指导。
关键词:devops、嵌入式系统、嵌入式软件开发、持续集成、持续交付
1、引言
随着信息技术的不断发展,嵌入式系统已经成为了现代生活中不可或缺的一部分。从智能手机到汽车,从家用电器到工业自动化,嵌入式系统的应用无处不在。然而,随着嵌入式产品的复杂性和功能需求的不断增加,传统的开发方法已经无法满足快速交付市场的挑战。devops作为一种整合开发和运维的理念,提高软件产品和质量的先进方法论,在软件开发领域得到广泛应用[1]。但目前关于devops的最佳实践大多集中在互联网和应用软件开发领域,在嵌入式软件开发领域实践受到一定的限制[2]。本文将探讨devops在嵌入式软件开发领域的实践,以期为嵌入式软件开发团队提供更高效、更灵活的开发流程。
2、devops概述
devops是development(开发)和operations(运维)两个词的组合,旨在消除开发团队和运维团队之间的壁垒,实现软件开发、部署和维护的自动化和持续化[3]。devops强调的是一种文化和流程的转变,其中包括以下核心关键实践:
(1) 自动化:通过自动化工具和脚本来执行开发、测试、部署等过程,减少人工干预,提高效率和一致性。
(2)持续集成(ci):持续将开发人员的代码集成到共享存储库中,并自动进行编译和测试,以确保代码的质量和稳定性。
(3)持续交付(cd):持续将通过ci流程测试通过的代码部署到生产环境中,以实现快速、可靠的软件交付。
(4)监控与反馈:通过监控系统的运行状态和用户反馈,及时发现和解决问题,持续改进产品质量和用户体验。
devops的核心目标是持续高效低成本地交付价值。以精益生产思想为核心,融合敏捷开发方法,通过缩短软件开发周期,提高交付速度和质量,降低故障率和成本,以满足不断变化的市场需求,在高速发展的互联网行业得到广泛应用。随着开源生态的发展,出现了一系列开源自动化工具,如:jenkins、gitlab、kubernetes等。但是,这些工具具备较强的单元特性,实践中往往需要有信息化集成和维护的能力,这无疑提高了devops的实践门槛。近几年,一些互联网技术大厂在内部成功实践devops的前提下,也推出了一系列商业化的devops系统,如microsoft azure、huawei codearts、tencent coding devops等,其集成度更高、界面更友好,为中小企业及其他领域实施devops转型提供了有力支撑。
3、嵌入式软件开发的挑战
与传统的软件开发相比,嵌入式软件开发具有以下特点:
(1)硬件依赖[4]:嵌入式软件通常与特定的硬件设备集成,开发过程需要考虑硬件和软件之间的兼容性和交互。
(2)实时性要求:通常嵌入式软件需要满足严格的实时性要求,嵌入式系统各模块之间有严格的时序要求,需要确保系统在预定的时间内响应和处理各种事件。
(3)资源受限:嵌入式软件通常具有有限的存储空间和计算资源,开发团队需要优化代码和资源利用率,以保证系统性能和产品成本之间的平衡。
这些特点使得用于传统软件开发的devops框架和工具难以在嵌入式软件开发中实践,主要存在以下挑战:
(1)产品版本管理的挑战。软硬件耦合性太强,导致不同的硬件配置,软件都需要有配套的版本。会存在数十种硬件配置的产品同时维护的场景。
(2)测试效率的挑战。嵌入式系统软件的测试必需要进行软硬件联调,通常通过手工执行。在嵌入式设备上部署自动化测试的代理服务是很难实现的,同时也可能影响嵌入式系统的性能。
(3)知识产权安全的挑战。嵌入式系统软件通常存在根据硬件特调的技术参数,得出这些参数的背后,往往需要大量的经验和实验,是企业的重要数字资产。如何管控嵌入式系统软件源代码的流通也是一项重要挑战。
4、嵌入式软件开发模式设计
针对以上挑战,本文将从组织协作和ci/cd两个方面探讨嵌入式软件开发的模式,以实现嵌入式软件的持续集成与持续交付,缩短嵌入式产品上市周期。
4.1面向嵌入式软件的反脆弱组织构建
嵌入式软件产品上层面向终端用户,底层对接硬件板卡,用户主要关注产品的功能和体验,而硬件则是产品成本的重要组成部分。在产品设计中,既要以用户为中心,充分满足用户的使用需求,也要满足低硬件成本的需求,避免不必要的成本浪费。因此,必须要有明确的总体架构设计才方便需求层层分解与落地。
总体架构设计要以高内聚和低耦合为基本目标,采用分层设计思想,通常将嵌入式软件分为应用层、业务逻辑层、功能模块层、硬件驱动层、操作系统层。其功能模块层还可以拆分出用户态功能模块层和内核态功能模块层。在总体设计阶段,还需要规划出每一层的api模块,明确接口,确保层与层之间的依赖关系,避免下层依赖上层的情况发生。分层架构设计将为devops的实践带来以下好处:
(1)便于产品需求分解。各层之间可以看作是“甲方”与“乙方”的关系,底层作为“乙方”,为上层“甲方”提供服务。因此,产品需求的分解可以看作是各层分工协作的过程。
(2)明确团队工作的边界,让合适的人做合适的事。反脆弱的组织要求当团队中角色出现“缺口”时,其他成员能快速“补位”。通过打造学习型的组织,让成员之间互相学习是一种有效的手段。但是,在嵌入式软件开发中需要注意团队的边界。例如,让做应用层开发的成员去了解驱动层开发可能会适得其反。因此,将团队边界限定在每一层内,更容易形成反脆弱组织。
(3)方便拆分ci/cd的粒度。模块的划分有助于减少持续构建的工作量,减少不必要的构建;依赖关系的明确有助于划分流水线的执行顺序;明确的接口设计有助于制品的规划与集成。
总体架构确定后,可采用sos(scrum of scrums)的规模化敏捷开发模式,scrum团队在每一层内组建。指定po、sm及团队成员,po不仅需要维护本团队的产品需求,还负责向底层提出需求。
在整个嵌入式系统层面,组建sos团队,由产品负责人、sos master、市场vp、架构专家及scrum团队的po组成。每周组织2-3次会议,来调整、改进和清除障碍。每个团队的代表或产品负责人应该集中讨论团队的进度、达成目标的风险或对其他团队的依赖,然后分享其他团队可以利用的改进方法。
4.2考虑软硬件测试的ci/cd设计
首先,面对嵌入式软件系统知识产权安全的挑战,引入制品管理机制。制品管理从文件访问权限方面很好的实现了编译时和运行时的解耦,使得企业只需要关注编译时相关文件(如源代码)的流转。可以通过在研发环境内部设置不同的工作域来定义权限,如划分开发域、测试域、发布域。可以通过云桌面等产品将源代码等限制在开发域中,以达到保护知识产权的目的。
其次,需要尽量开发虚拟调试工具。一方面,利用虚拟调试工具避免在嵌入式硬件上进行debug工作,将debug工作限制在开发域中,避免源码流转到嵌入式硬件中;另一方面,随着工业领域数字孪生概念的持续发展,虚拟调试工具可以成为数字孪生产品的重要单元技术积累,为产品后期接入数字孪生场景打下基础。
再次,要建立分支开发-主干发布的代码管理工作流,如图1所示。选用git分布式版本管理工具以适应规模化团队协作。研发工程师通过根据需求或bug来源基于develop分支建立feature和bugfix分支进行开发,开发完成后通过pr(pull request)合并到develop分支中。项目管理员根据发布计划和进度,将develop分支通过合并到main分支中。
图1 git分支开发-主干发布工作流示意图
值得注意的是,在大型团队转型过程中,难免出现架构解耦不彻底的阶段,存在多个功能耦合的情况。这使得所有修改都从main中合并到release可能面临时效性不足以及影响稳定性的风险。所以,保留“热修复”机制,先通过hotfix分支优先解决release分支的问题,再确认修复后,将更改pick到bugfix分支中,进而逐步合并到develop和main分支中。流程如图2所示。
图2 热修复工作流示意图
在此基础上建立ci/cd流水线如图3所示。由开发人员完成开发和自测后,通过发起pr触发ci构建流水线,ci流水线生成制品并进入制品库local区。制品库local区在收到制品版本更新后触发测试流程,经过测试质量门禁后,将测试结果反馈给pr。pr根据结果为触发制品提升任务,将当前制品从local区提升到prerelease区。在下次develop分支合并到main分支时,pr将触发prerelease区制品的uat测试,同样在测试通过后,将自动完成分支合并和制品提升到release区。该区域的制品在经过用户测试后,才允许作为版本发布。
图3 嵌入式软件ci/cd流程示意图
5、devops在国产智能数控系统产品开发中的实践效果
该数控系统产品为典型的嵌入式系统产品,该产品的硬件最小集包括工控机(ipc)、人机交互面板(hmi),如图4所示。ipc并通过hdmi和usb接口与hmi进行i/o通信。在ipc中运行实施操作系统(rtos)及功能软件产品。
经测算,使用本文所提出的研发模式一个月后,价值流动效率提升接近30%,且故障率减少接近56%。随着团队成员对新模式的逐渐熟练,以及持续反馈持续改进,有望在1年内实现平均每天发布一次。
6、结论
本文从理论和实践的角度探讨了devops在嵌入式产品开发领域的应用。通过分析devops的核心概念和实践原则,以及嵌入式产品开发的特点和挑战,探讨了如何将devops应用于嵌入式产品开发,并提出了相应的解决方案。通过实践案例的分析和总结,本文验证了devops在嵌入式产品开发中的可行性和有效性,为开发团队提供了有益的启示和指导。
然而,需要注意的是,将devops应用于嵌入式产品开发并不是一蹴而就的事情,需要开发团队和运维团队共同努力,逐步改进和完善开发流程和工具,不断提高团队的能力和水平。期望本文的研究成果能够为嵌入式产品开发团队提供参考和借鉴,推动devops在嵌入式产品开发领域的进一步应用和发展。
参考文献
[1] 金泽锋,张佑文,叶文华,等.面向完整价值交付的文档devops应用研究[j].软件学报,2019,30(10):3127-3147.
[2] 童向杰, 郑武, 谢凤玲, 等. 企业数字化转型中的硬件devops实践[j/ol]. 价值工程, 2020, 39(1): 1-5.
[3] 荣国平,张贺,邵栋,等.软件过程与管理方法综述[j].软件学报,2019,30(01):62-79.
[4] 黄铮,周洁,朱学海.一种基于azure devops的面向嵌入式软件的持续集成及自动测试环境[j].工业控制计算机,2022,35(09):17-19+23.
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论