课程特色
课程内容:模块化程序设计思想、组包原则、架构风格、代码坏味道、代码解耦的技巧、硬件层抽象、PC上模拟硬件、业务层在PC上的模拟运行、业务层在PC上的自动化测试、业务代码持续重构、架构设计文档撰写等内容。
本课程不单单是嵌入式架构设计的技能讲解,而且在设计中引入可移植性、可测试性设计。最终的目的是,让开发出来的嵌入式软件可以PC电脑上模拟运行,并进行自动化的测试。
课程收益
让嵌入式软件架构设计师掌握常用的几种架构风格,具备嵌入式架构设计能力。
让设计人员写出能实际指导开发人员工作的文档,而不仅仅应付归档的文档。
让程序员开发出来的嵌入式软件,具有高移植性、高复用性和可测试性。
让嵌入式软件能进行测试自动化,减少低效率人工测试工作量和BUG回归测试工作量。
课程对象
培训面向人群:开发嵌入式产品的产品经理、项目经理、软件架构师、软件设计师、程序员、测试人员。
该培训对于开发以下类型嵌入式产品特别有帮助:
1、 业务逻辑特别复杂
2、 集成功能繁多
3、 测试环境/条件难以创造
课程对象
学习本课程应具备下列基础知识:1) 熟悉C语言; 2) 至少了解一种嵌入式微处理器;
关键词
1、 模块化程序设计
2、 组包原则
3、 架构风格
4、 代码坏味道
5、 4+1视图
6、 敏捷开发
7、 自动化测试
8、 gTest
课程大纲
主题 | 章节 | 授课内容 |
第1部分内容
基础架构设计理论篇 | 第1章 架构设计步骤 | 1、 架构设计步骤 (1) 考虑驱动因素 (2) 设计基础架构 (3) 输出设计结果 (4) 跟随项目持续重构 (5) 输出优化代码 2、 架构设计的驱动因素 (1) 软件质量模型 (2) 质量属性间的互斥 (3) 性能与其他属性的取舍 |
第2章 模块化程序设计思想 | 1、 模块化设计的目的 2、 模块化程序设计方法 (1) 什么是模块? (2) 什么是好模块?--“最少知道原则” (3) 模块接口设计 3、 “C语言”模块怎么组织包结构 | |
第3章 基础架构级模块划分--架构风格 | 1、 哲学层次的架构设计 2、 架构风格定义与分类 3、 常用风格的模块划分 (1) “层次结构”--平台化架构思想 (2) “面向对象”--同层模块划分 (3) “批处理序列”和“管道-过滤器” (4) “黑板系统” (5) “数据库系统” (6) “解释器”和“基于规则的系统” (7) “进程通信” (8) “事件驱动” | |
第4章 架构设计文档 | 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、 上层不可见封装 (1) 硬件复用设备对上层的不可见封装 (2) 硬件耦合设备对上层的不可见封装 (3) 上层不可见封装总结 | |
第3章 底层硬件驱动实例 | 1、 设备的分类 2、 LED与按键实例 3、 脉冲计数器驱动实例 4、 脉冲实时处理驱动实例--回调函数 5、 带缓存的UART驱动实例--循环队列 | |
第3部分内容
自动化测试篇 | 第1章 PC模拟底层硬件 | 该单元讲解如何在PC上实现一套假硬件设备,为业务层在PC上运行和自动化测试做准备。
1、 PC版与真实硬件环境的不同 2、 PC版用变量数组模拟硬件寄存器 3、 PC版测试接口 4、 PC版模拟中断接口 5、 PC版线程互斥处理 |
第2章 PC模拟运行业务层与自动化测试 | 讲解测试封装设计。 演示业务层代码在PC上的模拟运行。演示如何让业务层代码进行自动化测试。 讲解测试用例撰写的方式方法。
1、 测试封装 (1) 增加测试代码的可读性封装 (2) 增加测试代码的易用性封装 2、 自动化测试 (1) 自动化测试原理 (2) 自动化测试演示 3、 测试用例流程 4、 测试用例文档撰写 5、 测试用例代码撰写 | |
第3章 嵌入式自动化测试的级别 | 1、单元测试UT 2、软件系统测试ST 3、硬件夹具自动化测试 | |
第4章 自动化测试工具 | 介绍测试断言工具gTest、测试打桩工具mockcpp等测试工具的使用。 介绍自动化测试持续集成工具CruiseControl的安装和配置方法。
1、 自动化测试工具gTest (1) gTest的断言 (2) gTest的测试结果文件 2、 打桩工具mockcpp 3、 持续集成工具CruiseControl (1) 什么是持续集成 (2) CruiseControl的工作原理 (3) CruiseControl的配置脚本 | |
第4部分内容
持续优化与重构篇 | 第1章 寻觅代码坏味道 | 1、 模块第1大杀手--“全局变量”坏味道 (1) 全局变量的缺点 (2) 减少全局变量使用 (3) 限制全局变量范围 2、 模块第2大杀手--“循环依赖”坏味道 (1) 次晨综合症 (2) 分层设计思想 (3) 反转逆向依赖--回调函数 3、 其他代码坏味道 (1) 散弹式修改 (2) 不恰当的暴露(违背了“最少知道原则”) (3) 狎昵关系(有可能有循环依赖) (4) 依恋情节 (5) 被拒绝的馈赠 |
第2章 组包原则 | 1、 组包的设计原则 2、 低耦合组包原则 (1) 无环依赖原则 (2) 稳定依赖原则 3、 高内聚组包原则 (1) 共同重用原则(案例包含:“重复代码”坏味道) (2) 重用发布原则 (3) 共同封闭原则(案例包含:“发散式变化”坏味道) | |
第3章 设计原则 | 1、 单一职责设计原则 (1) 单一职责的思考 (2) 单一抽象层次原则 (3) 单一职责原则 2、 开闭原则(案例包含:“夸夸其谈未来性”坏味道) | |
第5部分内容
收尾篇 | 第1章 架构师如何工作 | 1、 和团队一起工作 2、 代码走读 3、 结对编程 4、 加强学习 |
总结 |