演讲嘉宾: 具有多年嵌入式软件开发、设计和管理经验,曾在华为和科陆公司担任高级软件工程师、系统工程师、敏捷教练等职务。主要擅长敏捷实践在各领域的应用,包括代码持续优化与重构、嵌入式C语言架构设计与自动化测试、C#软件架构设计与自动化测试。精通ARM、Cotex-M3、51等MCU体系结构,精通嵌入式操作系统uCOS移植与运用开发。同时在项目管理尤其是敏捷软件管理方面具有丰富的经验。课程信息 1、代码分层设计 2、可移植性、可维护性 3、开发视图 4、逻辑视图 5、自动化测试 6、Cruise Control7、gTest 培训特色 代码分层的思想、可移植性代码的设计、代码解耦的技巧、硬件层抽象、PC上模拟硬件、业务层抽象、业务层在PC上的模拟运行、业务层在PC上的自动化测试、架构设计文档撰写、接口说明文档撰写等内容。本课程不单单是嵌入式架构设计的技能讲解,而且在设计中引入可测试性和可维护性设计。最终的结果是,让开发出来的嵌入式软件可以PC电脑上模拟运行,并进行自动化的测试。 目标收益 让程序员开发出来的嵌入式软件,具有高移植性和高维护性。让嵌入式软件的测试自动化,减少低效率的重复回归测试。让设计人员撰写出能指导开发人员工作的设计文档,而不是写出只是为了归档的文档。 培训对象 开发嵌入式产品的软件架构师、软件设计师、程序员。该培训对于开发以下类型嵌入式产品特别有帮助:1、业务逻辑特别复杂2、集成功能繁多3、测试环境/条件难以创造 学员基础 1、熟悉C语言; 2、至少了解一种嵌入式微处理器; 课程大纲 引子 从我们身边的工作说起。指出大部分的软件都是“意大利面条”式的代码。引申出解决之道――软件架构设计、代码持续优化和自动化测试。 第一单元模块化程序设计思想 该单元介绍代码分层、分模块的思想,以及一些基本的代码解耦方法。 1、 模块化程序设计的核心讲解什么形式的代码才算是模块化的代码。 2、 代码分层的思想 (1) 代码分层思路 (2) 嵌入式软件推荐的分层架构 3、 代码解耦的一些基础方法 (1) 封装模块文件夹 (2) 程序文件的分割 (3) 函数封装 (4) static函数限制函数使用范围 (5) static全局变量限制变量使用范围 (6) 减少全局变量的使用 第二单元嵌入式分层设计 展示一个嵌入式分层设计的案例,并讲解架构设计文档的撰写。演示硬件分离后代码的可移植性;并以MCU定时器为例讲解如何分离硬件。最后讲解其他硬件设备的接口定义,由此引申出接口说明文档的撰写准则。 1、 嵌入式架构设计 (1) 某产品的开发视图 (2) 避免循环依赖 (3) 逻辑视图 (4) 4+1视图在嵌入式设计文档中取舍 (5) 设计文档的度与量 2、 嵌入式分层设计的追求――可移植 (1) 演示代码的可移植性 (2) 硬件封装的基本思想 (3) 硬件模块的分离 3、 硬件接口设计 (1) 提取硬件抽象 (2) 接口文档的撰写 第三单元底层硬件API封装模板 该单元主要介绍硬件封装的代码架构模板,该模板的目的是提高底层硬件代码的可维护性。然后通过多个实现案例,讲解了几种特殊硬件封装的解耦办法。最后总结几个模板的分类。 1、 模板结构 (1) 设备硬件结构体类型定义 (2) 设备结构体配置 (3) 设备个数宏定义 (4) 设备实现需要的全局变量 (5) 设备功能实现代码 2、 利用老模板实现新硬件封装 3、 中断处理的封装:回调函数 4、 硬件复用设备对上层的不可见封装 5、 硬件耦合设备对上层的不可见封装 6、 模板的分类 第四单元PC模拟底层硬件 该单元讲解如何在PC上实现一套假硬件设备,为业务层在PC上运行和自动化测试做准备。 1、 PC版与真实硬件环境的不同 2、 PC版测试接口 3、 PC版模拟中断接口 4、 PC版线程互斥处理 第五单元业务层分层架构 在真实案例的基础上,讲解业务层的架构设计。 1、 可读性封装 2、 提取业务抽象 (1) 抽象的原则 (2) 案例:命令收发与命令业务处理的分离 3、 同步通讯的限制性封装 4、 异步通信的限制性封装 5、 异步设备封装成同步设备 6、 分层设计总结 第六单元PC模拟运行业务层与自动化测试 演示业务层代码在PC上的模拟运行。演示如何让业务层代码进行自动化测试。讲解测试封装设计。讲解测试用例撰写的方式方法。 1、 测试封装 (1) 测试代码的可读性封装 (2) 测试代码的易用性封装 (3) 设备测试打桩接口 (4) 利用测试接口定位问题 2、 测试流程 3、 测试用例文档撰写 4、 测试用例代码撰写 (1) 利用测试套 (2) 使用打桩工具 (3) 测试延时和模拟系统延时的区别 第七单元测试工具 简单介绍测试断言工具gTest、打桩工具mockcpp、自动化测试运行工具CruiseControl的使用。 1、 自动化测试工具gTest (1) gTest的断言 (2) gTest的测试结果文件 2、 打桩工具mockcpp 3、 持续集成工具CruiseControl (1) 什么是持续集成 (2) CruiseControl的工作原理 (3) CruiseControl的配置脚本
|