Integration process overview 软件集成的概述
本文来源于本人目前岗位的实际工作总结。
1. What is integration? 软件集成 要做什么
软件集成是把不同的多个软件单元/模块集成到一个整体的较大的软件的过程
1.1 软件集成和系统集成的区别
System Integration(系统集成) | Software Integration(软件集成) |
把各个系统组件按照系统架构的设计集成在一起,生成一个完整的系统。不仅包含软件模块,还包含硬件模块 | 把各个软件单元按照软件架构的设计集成到一个更大体量的完整的软件系统 |
SOC的优化&技术 | 构建&软件单元的交叉编译 |
导入和移植服务功能 | 处理第三方交付过来的组件 |
导入设备的驱动到特定的嵌入式设备 | 完成编译环境的搭建和相关工具链的整合 |
系统配置和性能调试 | 编译和发布管理 |
各个子模块的接口和兼容性处理 | 配置和管理源代码和编译产物 |
1.2 汽车行业的软件集成
- 高复杂度的系统
- 分层的体系结构
- 上百个模块
- 百万行的代码
- 上千个功能
网络连接
应用和车机的连接
车机的一切通信
娱乐系统
安全性能
OTA
1.3 Enabling 高效和可伸缩的软件集成
CI/CD 表示持续集成和持续交付,也代表了一系列的code文化和围绕CI/CD开发的一系列工具链。
1.4 为什么有软件集成的role存在
- 处理复杂度快速增长的嵌入式软件
- 提升软件开发团队之间的效率和生产率
- 保证软件和软件设计及架构的一致性
- 及时得到软件质量的反馈
- 减少软件开发后期可能出现的质量缺陷
- 减少defect,降低成本
2 Software Integration Strategy
2.1 软件集成需要具备的high level能力
-
理解 各个模块之间的依赖关系,清楚的知道各个阶段的集成步骤
- 能够进行low-level的集成
- 验证代码是否正确的集成及不同阶段初步验证系统的主要功能的正确性
- 灵活的定制集成策略
2.2 集成策略需要达到的标准
- 与项目计划,版本发布计划,软件架构保持一致
- 软件模块能够按照该集成策略集成到一个完整的软件体系中
- 检查并且平衡集成之间的各个step
2.3 Highlevel 集成策略
- 集成的理念----永远不该有一个太长的release周期
- Service A应该可以被随时更新,不应该因为B没有merge,测试而被阻塞
- 能高频发布,要求发布的pipeline高度自动化和高可用
- 每个team 能够编译和独立部署apps/service/bin, 不影响其他模块
2.4 分支策略
2.4.1 Mainline和Trunk
Mainline
Mainline模式中,所有的代码先是提交到各种小分支上,最后都合并到主分支上
Trunk
Trunk模式中,所有的代码都是先提交到trunk上,然后被port到各种小分支上
2.4.2 Trunk分支的特点
- 每个人工作在trunk 上,代码提交的粒度更小,更简单
- Trunk上代码永远是最新的,不存在code freeze
- 没有长期运行的分支,减少confusion
- 更少的冲突
- 对于持续集成来说的好处有:发布起来更简单快速,永远不会出现正式发布broken,因为在问题在第一时间已经发现并处理了
2.5 持续集成的workflow
加上测试部分的workflow
3 Integration 数据分析
不要相信你的直觉,要相信数据
一般认为集成在软件交付部署之后就结束了,其实还有很重要的一个环节,就是集成的数据收集,可视化,与数据分析。
比如,版本编译的时间,模块出错的概率,MR 测试失败的概率,代码提交到入库的前各个环节花费的时间等等许多数据,通过分析这些数据可以得到很多有用的信息。
- 可视化数据可以提供有价值的见解
- 提供了集成优化的机会
- 优化project 的产出物
- 通过已有的模式可以对未来的工作提供预测
- 可以提供更智能的商业模式
以上讲了集成数据收集和可视化的好处,下面讲下怎样创建integration database
- 首先要创建收集数据的理念--数据太多总比没有数据要好
- 通过自动化的手段实现收集数据
- 创建更复杂更有用的数据分析和KPI
- 创建健康的指标并保持追踪
- 实现实时数据的可视化
- 实现infrastructure和构建日志的标准化统一化