课程简介
1、代码分层设计
2、可移植性、可维护性
3、开发视图
4、逻辑视图
5、自动化测试
6、Cruise Control
7、gTest
目标收益
让程序员开发出来的嵌入式软件,具有高移植性、高复用性和可测试性。
让嵌入式软件能进行测试自动化,减少低效率的重复回归测试。
让设计人员写出能指导开发人员工作的文档,而不是写出仅仅能归档的文档。
培训对象
培训面向人群:开发嵌入式产品的软件架构师、软件设计师、程序员、测试人员。
该培训对于开发以下类型嵌入式产品特别有帮助:
1、 业务逻辑特别复杂
2、 集成功能繁多
3、 测试环境/条件难以创造
课程大纲
第1部分内容 嵌入式架构设计理论篇 第1章 架构设计步骤 |
1、 架构设计步骤 (1) 考虑驱动因素 (2) 设计基础架构 (3) 输出设计结果 (4) 跟随项目持续优化 (5) 输出优化代码 2、 架构设计的驱动因素 (1) 软件质量模型 (2) 质量属性间的互斥 (3) 性能与其他属性的取舍 |
第2章 模块化程序设计思想 |
1、 模块化设计的目的 2、 模块化程序设计方法 (1) 什么是模块? (2) 什么是好模块?--“最少知道原则” (3) 模块接口设计 3、 “C语言”模块怎么组织包结构 |
第3章 组包原则与单一职责原则 |
该单元讲解如何划分模块,介绍5大组包原则以及单一职责设计原则。 1、 组包的设计原则 2、 低耦合组包原则 (1) 无环依赖原则 (2) 稳定依赖原则 3、 高内聚组包原则 (1) 重用发布原则 (2) 共同重用原则 (3) 共同封闭原则 4、 单一职责设计原则 (1) 单一职责的思考 (2) 单一抽象层次原则 (3) 单一职责原则 |
第4章 基础架构级模块划分--架构风格 |
1、 哲学层次的架构设计 2、 架构风格定义与分类 3、 常用风格的模块划分 (1) “层次结构”--平台设计思想 (2) “面向对象”--同层模块划分 (3) “批处理序列”和“管道-过滤器” (4) “黑板系统” (5) “数据库系统” (6) “进程通信” (7) “事件驱动” |
第5章 模块杀手--代码坏味道 |
1、 模块第1大杀手--全局变量 (1) 全局变量的缺点 (2) 减少全局变量使用 (3) 限制全局变量范围 2、 模块第2大杀手--循环依赖 (1) 次晨综合症 (2) 分层设计思想 (3) 反转逆向依赖--回调函数 3、 其他模块杀手--代码坏味道 (1) 散弹式修改 (2) 发散式变化(违背了共同封闭原则) (3) 不恰当的暴露(违背了最少知道原则) (4) 狎昵关系(有可能违背了无环依赖原则) (5) 依恋情节 (6) 被拒绝的馈赠(违背了共同重用原则) |
第6章 架构设计文档 |
1、 架构视图 (1) 开发视图 (2) 逻辑视图 (3) 4+1视图 (4) 4+1视图在架构文档中的取舍 2、 架构设计文档 (1) 架构文档的价值 (2) 架构文档的撰写原则 3、 平台接口说明文档 (1) 平台架构思想 (2) 平台接口约束文档 |
第2部分内容 嵌入式架构设计实例篇 第1章 嵌入式分层设计实例 |
该单元展示2个嵌入式架构设计的文档案例。 1、 架构设计实例 (1) 架构设计文档实例 (2) 可读性设计 (3) 可移植性设计 2、 硬件接口设计实例 (1) 提取硬件抽象 (2) 接口设计文档实例 (3) 可靠性设计 (4) 现场可维护性设计 (5) 兼容性设计 |
第2章 底层硬件API封装模板 |
该单元主要介绍硬件封装的代码架构模板。 该模板的目的是提高底层硬件代码的可维护性,以及一致性的统一模板对可读性的提升。 然后通过多个实现案例,讲解了几种特殊硬件封装的解耦办法。 最后总结几个模板的分类。 1、 模板结构 (1) 设备硬件结构体类型定义 (2) 设备结构体配置 (3) 设备个数宏定义 (4) 设备实现需要的全局变量 (5) 设备功能实现代码 2、 中断处理的封装--回调函数 3、 上层不可见封装 (1) 硬件复用设备对上层的不可见封装 (2) 硬件耦合设备对上层的不可见封装 (3) 上层不可见封装总结 4、 模板的分类 |
第3章 底层硬件驱动实例 |
1、 回调函数实现Timer定时器驱动实例 2、 带缓存的串口驱动实例 |
第3部分内容 自动化测试篇 第1章 PC模拟底层硬件 |
该单元讲解如何在PC上实现一套假硬件设备,为业务层在PC上运行和自动化测试做准备。 1、 PC版与真实硬件环境的不同 2、 PC版测试接口 3、 PC版模拟中断接口 4、 PC版线程互斥处理 |
第2章 PC模拟运行业务层与自动化测试 |
讲解测试封装设计。 演示业务层代码在PC上的模拟运行。演示如何让业务层代码进行自动化测试。 讲解测试用例撰写的方式方法。 1、 测试封装 (1) 增加测试代码的可读性封装 (2) 增加测试代码的易用性封装 (3) 利用测试接口定位问题 2、 自动化测试 (1) 自动化测试原理 (2) 自动化测试演示 3、 测试用例流程 4、 测试用例文档撰写 5、 测试用例代码撰写 |
第3章 自动化测试工具 |
介绍测试断言工具gTest、测试打桩工具mockcpp等测试工具的使用。 介绍自动化测试持续集成工具CruiseControl的安装和配置方法。 1、 自动化测试工具gTest (1) gTest的断言 (2) gTest的测试结果文件 2、 打桩工具mockcpp 3、 持续集成工具CruiseControl (1) 什么是持续集成 (2) CruiseControl的工作原理 (3) CruiseControl的配置脚本 |
第4部分内容 收尾篇 第1章 架构师如何工作 |
1、 和团队一起工作 2、 代码走读 3、 结对编程 4、 加强学习 |
第1部分内容 嵌入式架构设计理论篇 第1章 架构设计步骤 1、 架构设计步骤 (1) 考虑驱动因素 (2) 设计基础架构 (3) 输出设计结果 (4) 跟随项目持续优化 (5) 输出优化代码 2、 架构设计的驱动因素 (1) 软件质量模型 (2) 质量属性间的互斥 (3) 性能与其他属性的取舍 |
第2章 模块化程序设计思想 1、 模块化设计的目的 2、 模块化程序设计方法 (1) 什么是模块? (2) 什么是好模块?--“最少知道原则” (3) 模块接口设计 3、 “C语言”模块怎么组织包结构 |
第3章 组包原则与单一职责原则 该单元讲解如何划分模块,介绍5大组包原则以及单一职责设计原则。 1、 组包的设计原则 2、 低耦合组包原则 (1) 无环依赖原则 (2) 稳定依赖原则 3、 高内聚组包原则 (1) 重用发布原则 (2) 共同重用原则 (3) 共同封闭原则 4、 单一职责设计原则 (1) 单一职责的思考 (2) 单一抽象层次原则 (3) 单一职责原则 |
第4章 基础架构级模块划分--架构风格 1、 哲学层次的架构设计 2、 架构风格定义与分类 3、 常用风格的模块划分 (1) “层次结构”--平台设计思想 (2) “面向对象”--同层模块划分 (3) “批处理序列”和“管道-过滤器” (4) “黑板系统” (5) “数据库系统” (6) “进程通信” (7) “事件驱动” |
第5章 模块杀手--代码坏味道 1、 模块第1大杀手--全局变量 (1) 全局变量的缺点 (2) 减少全局变量使用 (3) 限制全局变量范围 2、 模块第2大杀手--循环依赖 (1) 次晨综合症 (2) 分层设计思想 (3) 反转逆向依赖--回调函数 3、 其他模块杀手--代码坏味道 (1) 散弹式修改 (2) 发散式变化(违背了共同封闭原则) (3) 不恰当的暴露(违背了最少知道原则) (4) 狎昵关系(有可能违背了无环依赖原则) (5) 依恋情节 (6) 被拒绝的馈赠(违背了共同重用原则) |
第6章 架构设计文档 1、 架构视图 (1) 开发视图 (2) 逻辑视图 (3) 4+1视图 (4) 4+1视图在架构文档中的取舍 2、 架构设计文档 (1) 架构文档的价值 (2) 架构文档的撰写原则 3、 平台接口说明文档 (1) 平台架构思想 (2) 平台接口约束文档 |
第2部分内容 嵌入式架构设计实例篇 第1章 嵌入式分层设计实例 该单元展示2个嵌入式架构设计的文档案例。 1、 架构设计实例 (1) 架构设计文档实例 (2) 可读性设计 (3) 可移植性设计 2、 硬件接口设计实例 (1) 提取硬件抽象 (2) 接口设计文档实例 (3) 可靠性设计 (4) 现场可维护性设计 (5) 兼容性设计 |
第2章 底层硬件API封装模板 该单元主要介绍硬件封装的代码架构模板。 该模板的目的是提高底层硬件代码的可维护性,以及一致性的统一模板对可读性的提升。 然后通过多个实现案例,讲解了几种特殊硬件封装的解耦办法。 最后总结几个模板的分类。 1、 模板结构 (1) 设备硬件结构体类型定义 (2) 设备结构体配置 (3) 设备个数宏定义 (4) 设备实现需要的全局变量 (5) 设备功能实现代码 2、 中断处理的封装--回调函数 3、 上层不可见封装 (1) 硬件复用设备对上层的不可见封装 (2) 硬件耦合设备对上层的不可见封装 (3) 上层不可见封装总结 4、 模板的分类 |
第3章 底层硬件驱动实例 1、 回调函数实现Timer定时器驱动实例 2、 带缓存的串口驱动实例 |
第3部分内容 自动化测试篇 第1章 PC模拟底层硬件 该单元讲解如何在PC上实现一套假硬件设备,为业务层在PC上运行和自动化测试做准备。 1、 PC版与真实硬件环境的不同 2、 PC版测试接口 3、 PC版模拟中断接口 4、 PC版线程互斥处理 |
第2章 PC模拟运行业务层与自动化测试 讲解测试封装设计。 演示业务层代码在PC上的模拟运行。演示如何让业务层代码进行自动化测试。 讲解测试用例撰写的方式方法。 1、 测试封装 (1) 增加测试代码的可读性封装 (2) 增加测试代码的易用性封装 (3) 利用测试接口定位问题 2、 自动化测试 (1) 自动化测试原理 (2) 自动化测试演示 3、 测试用例流程 4、 测试用例文档撰写 5、 测试用例代码撰写 |
第3章 自动化测试工具 介绍测试断言工具gTest、测试打桩工具mockcpp等测试工具的使用。 介绍自动化测试持续集成工具CruiseControl的安装和配置方法。 1、 自动化测试工具gTest (1) gTest的断言 (2) gTest的测试结果文件 2、 打桩工具mockcpp 3、 持续集成工具CruiseControl (1) 什么是持续集成 (2) CruiseControl的工作原理 (3) CruiseControl的配置脚本 |
第4部分内容 收尾篇 第1章 架构师如何工作 1、 和团队一起工作 2、 代码走读 3、 结对编程 4、 加强学习 |