ASPICE vs Agile,谁是自动驾驶时代答案?
来源 | 智能汽车设计
-
软件缺陷修复的成本是随着软件进度的开展,成倍数级提升的,BUG越早发现,成本越低;
-
在关键控制器上(比如动力总成的ECU),某些Bug可能是致命的(字面意义上的)且难以被发现的,因此,对代码的态度必须慎之又慎; -
传统的合作关系上,通常是Tier1供控制器(Turn-key or Customer-sharing),OEM集成到车上,对于软件这种无形的资产,又是闭源交付,OEM管控是很难的,唯一的监管方式就是交付物,所以ASPICE既是开发过程,也是质量证据。
-
V左半边:保证每一行代码都能知道是为哪一条需求服务的。 -
V右半边:保证每一行代码都在正确的实现每一条需求。
1.2. ASPICE的缺点
-
BP3:很多时候模块间交互是很难穷尽描述的,特别是大型软件,应用层,或者高聚低耦做得没那么好的模块,在不同场景,不同条件下,都可能走不同逻辑,整个交互路径都穷举一遍是很难的,画出来的seq图也很难阅读 -
BP5:每一步的流程都要求这个,做过的dddd(懂的都懂),有DOORS相对好点,用excel去管理这玩意就是个灾难,还感觉没什么卵用
2. 敏捷开发:短平快,拥抱变化
2.1. 简述
-
拥抱不确定性,发生需求变更,那就直接来一轮sprint,如果还不够,那就来两轮; -
出活快,一个sprint的迭代以周为单位; -
充分调动工程师积极性,(相对)轻文档,重代码;
2.2. 敏捷的缺点
-
缺少统筹全局的进行软件架构设计,导致模块很难做到高类聚低耦合,比如Sprint A实现的一个功能,其底层模块其实可以被Sprint B的某个功能部分复用,但由于Sprint A没有考虑Sprint B的开发需求,所以该底层模块并不能被完全复用,Sprint B可能就要重新开发一个底层模块去覆盖他自己的需求。多轮sprint下来,可能会有重复造相似轮子的情况出现。这样会导致软件比较臃肿,代码量大,执行效率低,且代码质量不高;
-
缺少集成测试,导致新加的功能可能对已实现的功能有潜在的影响而不能被发现;
-
由于短平快的特性,很多时候单元测试也不能充分进行,比如动态单元测试;
-
与FUSA的流程完全不兼容。26262也好,61508也好,34590也好,都是植根于V模型,使用敏捷开发的软件,很难满足功能安全的开发要求,也无法做功能安全分析,无法做FFI。
3. 谁是自动驾驶时代答案?
-
功能众多:带来的变化是软件复杂度指数式上涨,相关方众多 -
产业链合作关系改变:从一功能一盒子,由Tier1软硬件一起交付,OEM负责集成,到所有功能集中在域控,Tier1只提供底软和硬件,应用软件由Tier1,Tier2,OEM联合开发
3.1. 为什么ASPICE不合适用于开发域控?
3.2. 敏捷开发需要做什么适配?
-
并不是用敏捷开发出来的软件架构就会松散,臃肿,而是敏捷的环境让工程师更容易输出这样的结果。所以我认为以下措施的执行能有效改善软件质量: -
适当延长sprint周期; -
严格的编码规范与培训; -
使用TDD(测试驱动开发)思路 -
强大的devops能力作为技术保证; -
引入自动化单元检查工具; -
满足功能安全要求,话只有一句,其实是个悖论,因为软件功能安全=V模型开发。可能的一个解决方案,是利用26262中FFI的思路,通过前期技术规划,将软件架构分解成功能:QM(D)和功能安全软件D(D),功能分区使用敏捷开发小步快走,功能安全分区还是按V模型进行开发(思路是这么个思路,但做软件安全分析和安全架构设计需要非常小心,而且仅适用于safety goal为fail safe的域控,如果L4以上需要做fail operational的,又不能这么玩了)。
点赞 评论 收藏