1、B y Zh u Zho ng an 汽车电子软件开发流程 CMMI 篇 作者 : 朱忠 安 版本 : 1.0 状态 : 草版 B y Zh u Zho ng an 1 历史记录 版本 日期 编辑 原因 1.0 10.05.2016 朱忠安 初始版本 B y Zh u Zho ng an 2 索引 1 历史记录 2 2 索引 3 3 概要 4 4 一般嵌入式系统开发简介 .5 4.1 嵌入式系统定义 .5 4.2 嵌入式系统的开发组织架构 .5 4.3 嵌入式系统软件开发流程图 .6 4.4 流程图简介 7 5 CMMI 软件团队解析 8 5.1 CMMI软件开发流程标准 8 5.2 软件研发
2、组织架构解析 9 5.3 软件项目开发过程 .9 5.4 系统测试组织结构 .9 6 CMMI 软件项目变更管理 10 6.1 软件变更控制工具介绍 10 6.2 软件变更控制流程 . 10 7 软件开发知识简介 11 7.1 软件开发的特点 . 11 7.2 如何做好软件开发 . 11 7.2.1 客户角度 11 7.2.2 供应商角度 11 B y Zh u Zho ng an 3 概要 本着为客户服务的宗旨 ,让更多的想进入汽车研发团 队的工程师们了解和熟悉 的软件开发流程, 减少项目开发过程中不必要的误解,故做此介绍 抛砖引玉。 B y Zh u Zho ng an 4 一般嵌入式系统
3、开发简介 4.1 嵌入式系统定义 对于嵌入式系统, 一般教科书上面有这样定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,系统对功能、可靠性、成本、体积、耗电量和应用环境,有特殊要求的专用计算机系统,是将应用程序、操作系统和计算机硬件集成在一起的系统。 其实这句话不难理解,概括起来只有两点: 计算机系统 任何一个嵌入式系统必定是一个计算机系统 ,而最基本的计算机系统无外乎 CPU,内存 ,输入设备 ,输出设 备 ;嵌入式系统也是如此 . 谈到这里 ,就必须要说到两个概念 :微处理器和微控制器 . 所谓微处理器很容易理解 ,就是中央处理器 CPU,比如所 ARM9,它的为处理器就是 ARM9
4、20T.换句话说就是嵌入式系统的核心控制单元 . 所谓微控制器 ,其实也不难理解 ;我们现在大部分的电子产品所使用的都是集成芯片 ,也就是一块芯片中不仅仅包含的是 CPU,还把许多的外围设配都集成在一块芯片中 ,比如把 PWM 控制器,把 flash,把音频处理器,把内存,把输入输出设备等都集成在一块芯片中,这样的一块集成多功能的芯片就是微控制器。基本上一块 IC 就是一个小型的嵌入式系统。这样的做的好处也是显而易见的: 可以减少嵌入式系统设计的复杂 度; 节省成本 ,因为一块集成 多功能的 IC,比你去用一块 CPU搭建外围设备的成本要少的多。 特定应用 对于嵌入式产品的开发,一般都是具有特
5、定的应用;根据特定的需求去定制的。比如仪表,一套完整的仪表系统,都是只适合与特定款型的车。因为电子产品的性质各有不同,嵌入式系统的开发也很难有一套统一的标准,没有一个国际标准组织或学术单位,规定嵌入式系统一定要用什么 CPU,用什么开发语言,一定要用什么操作系统,一定要用哪一 套开发工具。只会根据特定的需求去定制。 4.2 嵌入式系统的开发组织架构 一般的研发团队都有很严谨漂亮的组织架构,嵌入式系统的研发团队也是如是;至少应该有以下小组。 项目管理组 硬件组 产品外观和结构设计组 软件组 1)软件项目管理组 2)固件组 3)系统组 B y Zh u Zho ng an 4)应用程序组 测试与质
6、量小组 支持组(包括成产,美工,法务,行政事物) 大部分成熟公司的 组织架构也基本和这个相似,后面章节,我会重点介绍软件组的概况,其他不做详细介绍。 4.3 嵌入式系统软件 开发流程图 先看一下开 发的流程图: 开发计划 需求获取 设计 性能分析 编码 设计审查 静态分析 代码覆盖 代码审查 动态分析 单元测试 集成测试 发布 系统测试 B y Zh u Zho ng an 4.4 流程图简介 一个好的嵌入式系统开发,要有一套好的方法论作为支撑;那么何为方法论? 方法论 = 流程 +工具 以上的控制图中就是一套有效的流程图,流程图中的每 一个步骤,需要有相应的工具去辅助完成。 往往我们在抱怨流
7、程繁琐、浪费时间的时候,是因为我们没有切实的理解流程的精髓,没有切实的去落实流程中的每一 步骤 , 一 套好的方法论,只可能高效,高质量的为项目做支撑,而 不会为项目带来负担。 所以大部分情况 流程没有走好,无外乎以下几种原因: 项目经理没有制定好计划,没有严格按照流程去控制软件开发 ; 项目成员流程意识薄弱,在软件开发的过程中随心所遇 ; 流程的可变通性没有把握好,一套标准的流程在应用到每一个项目中,要有相应的变通,由项目经理去把握 ;所谓 Plan is nothing, Planning is everything 就是这个道理。 项目团队的稳定性没有持续到项目的结束,往往大部分的项目在
8、开发的初期阶段,项目成员都是很积极,很有信心的;当项目进行到 80%的时候,大部分的项目成员都已疲惫,项目很容易陷入瓶颈,这个时候大部分人,也很想把自己负责的任务转交给新人。这样后续的流程很容易出现问题,引发项目的风险 。 客户紧急频繁的更改,往往会让开发团队,在流程中疏忽掉一些关键性的问题导致项目风险。 B y Zh u Zho ng an 5 CMMI 软件团队解析 5.1 CMMI 软件开发流程标准 一般的软件团队,尤其是正规的企业,软件开发团队都会有一套质量管理系统; CMMI是 国际 标准。那么什么是 CMMI以及一般软件开发所遵循的质量管理体系有哪些? 先来谈谈一般软件开发团队所遵
9、循的质量管理体系有哪些。对于一些重量级的软件开发来说所遵循的标准主要有 CMMI和 ISO9001等,对于一些轻量级的软件开发来说所遵循的标准主要有敏捷和极限编程( XP)。 这些开发模型的具体差异不做一一介绍,网上都可以找到相应的资料。主要说说 CMMI, CMMI全称是 Capability Maturity Model Integration,也就是软件能力成熟度集成模型。 主要是卡内基美隆大学软件工程学院发展成的标准。 CMMI提供了包含 5个软件开发过程、能力成熟度的框架,定义了一个用来测量软件开发过程成熟度,以及评价软件开发过程能力的尺度。 CMMI的五个能力成熟度的等级分别为:
10、初始( initial) /无法预测且监控不佳:软件开发过程是无秩序的,偶尔甚至是混乱的。软件开发有时是成功的,有时是不成功的。几乎没有什么过程是经过定义的,成功通常是通过个人的努力。 管理( managed) /可重复先前的工作经验:已建立基本的项目管理程序去追踪成本、效益、进度和功能性;必要的开发过程已经稍具纪律,此后有类似的项目可重复使 用以前的成功经验 定义( define) /描述流程特性,并用于管理:项目管理活动和软件开发活动的过程均已文件化和标准化。 量化管理 ( quantitatively managed) /流程可以被度量、控制:已集成软件开发过程与产品质量相关信息 ,并加
11、以量化、记录和分析。 优化( optimizing) /专注在流程改善:利用组织中的历史数据,辅以新的技术与观点,使持续的改善成为可能。 持续改进的过程 有侦测的过程 标准一致的过程 有纪律的过程 国内大部分公司 目前处在等级二和等级三 之间 ,也就是标准一致的过程。就是说公司 目前的软件开发已经有一定的成熟度,相关的开发过程已经文件化和标准化。 Optimizing Managedged Quantitatively Managed Initial Defined B y Zh u Zho ng an 5.2 软件 研发 组织架构解析 下面以仪表 软件 研发团队为例,介绍矩阵型组织架构 :
12、一般成熟度高的仪表软件团队分为 5个组,分别是集成组,诊断组, HMI显示组,软件 PM 组,底层的驱动开发 组。基本上项目 kick off meeting之后,会在软件 PM 组抽取一个 PM 带领导组织一个项目,软件PM 会和个小组的 leader商量,分别在每个小组抽取一个人,或多个人进行软件项目的开发。 5.3 软件项目开发过程 软件开发过程是基于项目的计划,在拿到客户的初始 版需求之后会做一个项目的 baseline,以项目的baseline 为基准作为项目后续的开发, 项目开发 软件实施做所有的需求是基于客户的需求文档,可以定义为 CRS,一般 CRS 的维护不在软件内部, 是由
13、 系统组的 系统工程师负责和客户接口来释放 CRS。在得到一个正式版本的 CRS 之后,软件 组 会在 CRS 的基础之上进行软件开发,去确定软件的需求规范;软件需求规范确定以后会把工作分配给各个模块或软件子系统,个模块或软件子系统会更新各自的模块设计文档,个模块的设计文档 完成以后,我们会对个各模块进行模块的审查;审查完成以后, everything is ok! 各个模块再去设计个模块的测试用例;之后才进行代码的设计和更改。 代码更 改完成以后会进行相关的模块测试, 模块测试可能会分多种形式的测试,比如所代码覆盖率的测试, 代码的动态测试和代码的静态测试,以及代码的测试用例的测试;做这么
14、多的测试的目的就是为了保证代码的质量。在模块代码更新完成以后,各个模块的负责人会把自己负责部分的模块上传到软件版本管理工具中,主要的作用是用于软件版本的管理,关于软件版本管理工具其实有许多,这里不做一一介绍,一般的软件开发团队都会有一套此工具作为版本维护。在这之后,有集成负责人,去到 软件包版本管理工具 上面把各模块集成到系统中,在集成到系统中之后,会根据系统的 需求,进行相应的配置。之后,进行系统的集成测试 ;一切 OK之后,才把系统释放。进行接下来的系统测试的工作;系统测试是另外一个 team;是专门负责项目的测试的工作。关于系统测试的工作下面会详细介绍。 5.4 系统测试组织结构 待续 软件研发经理 集成组 leader HMI 组 leader 诊断组 leader 驱动 组 leader 软件 PM leader 职员 1 职员 7 职员 8 职员 2 职员 9 职员 3 职员 10 职员 5 职员 4 职员 6 职员 12 职员 13 职员 14 职员 15 职员 11 B y Zh u Zho ng an 6 CMMI 软件项目变更管理 6.1 软件变更控制工具介绍 6.2 软件变更控制流程 B y Zh u Zho ng an 7 软件开发知识简介 7.1 软件开发的特点 7.2 如何做好软件开发 7.2.1 客户角度 7.2.2 供应商角度