“ 经常有朋友问有没有学习仿真的相关书籍推荐,于是搜集和阅读了一些,记录在这里,向大家分享。如果大家有觉得好的书籍,也请留言推荐,不胜感激。”
《汽车软件开发实践》:(德)法比安·沃尔夫著;刘晨光译,北京:机械工业出版社,2021.9
除去最后一章的简要总结,全书共分6章,概述如下:
(1)第1章介绍了汽车电子硬件设备,这是汽车软件运行的基础,也是汽车软件开发的基础。汽车电子硬件主要包括:传感器、控制器、执行器和总线系统,并由电气/电子架构进行统合。
电气/电子架构将其组件按照功能要求进行划分,并设计物理分布和物理连接。
总线系统一般会参照ISO/OSI分层模型,并具备星形、环形、树形和总线型等不同的拓扑形式,文中介绍了汽车常用的CAN、FlexRay、LIN和MOST等总线系统。
传感器将物理信息转换成电子信号,控制器实现功能逻辑,执行器将电信号转换为物理量。
(2)第2章介绍了汽车软件架构和要求。
所谓架构设计,是指将技术文件中定义的逻辑功能,映射到硬件和软件组件。汽车软件可分为三个基本功能:诊断和监视、通信、控制和调节功能。
实时操作系统是一个附加有实时功能的操纵系统,遵守时间限制条件,提供过程行为的可预测性和可验证性,是汽车软件运行的基础。
诊断软件最基本的任务是检测控制器单元或者受控系统中的错误,启动应对措施,并将错误信息传递给驾驶员或者修理车间。
网络软件不仅包括车载网络,也包括车辆与外部的联网。
功能软件用于实现控制和条件功能,由于控制安全、软件复用和开发成本等要求,目前车辆上多采用多个控制单元分布式控制,如空调控制器、发动机控制器、转向控制器和车门控制器等。
IEC61508或ISO26262提出了功能安全要求,为满足功能安全可采用功能限制与降级、多样化编程、设备冗余和看门狗等方法。
汽车行业内多个组织都在致力于推进控制器单元软件架构的标准化,书中对OSEK/VDX、ASAM-MDX和AUTOSAR进行了简介。
(3)第3章介绍了汽车软件开发的方法和步骤。
首先是要求收集和架构设计,这一阶段要进行客户要求收集、要求分析,并依次进行系统架构和组件架构设计。书中指出,汽车软件始终是汽车机电一体化系统的一个部分,汽车软件开发要与硬件和电子开发相协调。
然后是软件开发,包括软件要求分析、架构设计、功能软件开发、安全性软件开发、软件集成测试和软件测试。软件测试成功通过后将发布和交付整个软件。
最后是组件和系统的集成测试,这一阶段是将软件与机械和电子系统进行集成和测试。
汽车软件开发过程中还涉及到大量的项目管理内容,如质量保证、功能安全、项目管理、风险管理、供应商管理、软件变更管理、软件配置管理、解决问题过程管理和软件发布管理等。
软件开发语言方面,汽车软件开发中很少使用面向对象的方法、同时不追随编程技术的最新趋势,而是要采用成熟的技术。常常采用基于C语言的人工编码和基于模型的开发,并常采用一些辅助开发工具。
为实现一次性开发而多次应用,需要开发的模块可更改、可参数化,书中介绍了采用模块化进行产品配置的方法。
为控制单元分配所谓的计算时间,目的是确保总体系统的时序,因此要确定集成的每个软件功能的最长计算时间,书中介绍了测试计算时间的方法。
(4)第4章介绍了软件测试相关内容。
首先介绍了软件错误和软件测试相关的概念。
然后在软件测试的特征空间中介绍了测试级别(过程)、测试标准(类别)和测试方法。
测试级别是按照V模型自下而上进行测试,包括单元测试、软件集成测试、系统集成测试和验收测试。常见的测试类别包括功能测试、日常测试、撞击测试、兼容性测试、随机测试、安全测试、复杂性测试、运行测试、加载测试和极限测试等。
测试方法包括黑盒测试、白盒测试、灰盒测试和硬件在环测试。书中提到软件行业中的测试和汽车行业中的测试一个比较大的差别在于:汽车行业测试并未检查代码功能和编码,而是在车辆运行的整体环境中进行功能测试。
(5)第5章介绍了汽车行业中成熟的软件开发过程模型。
传统的开发模型有瀑布模型和V模型;软件开发中的统一软件开发过程、极限编程流程、面向对象编程、敏捷开发等也可作为有用的参考和补充。
成熟度模型用于评估和改进流程,可以与其他企业进行对照比较。CMMI是一个改善组织工作的方法,其对企业评估的成熟度级别也被工业界审核组织认可。SPICE是对单一软件项目的成熟度模型,用于评估软件过程,重点在于改进流程和确定流程成熟度。ASPICE根据汽车工业的需要对SPICE进行了修改。
IEC61508规定了电气/电子/可编程电子安全系统的功能安全要求和开发过程;ISO26262是IEC61508专门针对汽车领域的修改版。
(6)第6章介绍了汽车软件可变性相关内容。
同一型号的汽车常常有不同的配置,这要求汽车软件具有可变性。本章介绍了通过设计结构化的软件产品线方案,应对软件可变性,提高软件重复使用的方法。