【一阶技能】贯通需求分析
需求 = 功能需求 + 质量需求 + 约束需求
功能 = 接口需求 + 系统能力 + 处理流程
需求分析前期任务、用例图、案例
需求分析后期任务、用例规约、案例
【二阶技能】精通需求文档
需求内容、模型总览
管理软件《需求书》实例 and 佳模板
嵌 入 式《需求书》实例 and 佳模板
嵌入式软件的接口需求、算法需求刻画
接口需求,要充分体现软件与传感器、
执行器、其他系统的双向对接要求
处理流程,往往涉及操作、处理、控制
过程的专业算法,也应分析并归档
【三阶技能】让《SRS》成为分析和识别需求变更的工具
需求变更分析:How to
需求变更分析:示范案例
传统“输入-处理-输出”分析方式的改进
在课堂上练会、夯实的技能,将在工作中直接发挥价值
【实战】分组实战,老师会给《需求书.doc》
任务:电梯控制板需求变更分析、及如何将变更归档
贯穿案例推进……
嵌入式架构的重中之重——控制结构设计
设计师设计嵌入式软件时,有三种控制结构可供选择
1. 死循环
实现代码分析……
2. 事件驱动多任务(event-driven multitask)
实现代码分析……
3. 时间片轮询架构(time-slice polling)
实现伪代码分析……
设计师设计嵌入式软件时,可参考的优秀范例二则
1. 著名飞行器开源产品——多任务架构
主要收获:入口主程序、Task的划分、Task间的同步
主要收获:中断函数在多任务架构下的经典写法
2. 某硬实时单板控制器——时间片轮询架构
主要收获:入口主程序代码骨架
主要收获:中断函数在时间片轮询架构下的经典写法
设计师设计嵌入式软件时,根据性能选择架构
1. 嵌入式性能:
速 度:响应时间长短?
效 率:任务切换过频怎么办?
吞吐量:每秒处理事件数等
2. 三种控制结构的适用场景
事件率高低
事件率波动规律、峰值
3. 案例故事:某单板程序,高事件率下CPU占用率100%
设计一:事件驱动多任务架构(有OS)
设计二:时间片轮询架构(无需OS)
设计优劣对比
任务:多任务or时间片轮询架构的选择
贯穿案例推进……
重用关键——模块划分
设计师划分模块时,代码结构的全局划分方法
1. 从模式开始——巧妙的“五横一纵”分层模式
2. 模块划分——覆盖上下文图定义的接口需求
3. 模块划分——运用用例驱动设计思维
3.1. 起步:分析用例规约,识别实现用例的那些代码块
3.2. 后续:协作设计,即用序列图串起这些代码
设计师划分模块时,注意几个基本原则
1. 通用-专用分离:提炼应用无关的Library、或选择三方库
2. 通用-专用分离:机制与策略分离,开发或选择Framework
3. 隔离外部交互:仅UI层“知道”操作细节和展现格式
4. 隔离外部交互:仅SI层“知道”和外部部件通信的细节
5. 隔离外部交互:仅DM层“知道”数据存储格式
设计师划分模块时,可参考的优秀范例一则
1. 著名开源产品套件——Mumble
主要收获:模块的划分、通用库的提炼、三方框架…
实战演练
1. 任务:模块划分
(必须覆盖代码结构全局、不能漏模块)
2. 贯穿案例推进……
隔离变化——模块接口设计
设计师设计接口时,考虑的三件事儿
1. 技术选择:接口设计容易?做漂亮难!
2. 机制选择:调用/回调/同步/异步/轮询/超时
3. 格式定义:函数风格 vs.报文或消息风格
设计师设计接口时,可参考的优秀范例一则
4. 某通用产品——漂亮的C语言接口、方便的配置
主要收获:围绕Domain Type定义模块的核心接口
主要收获:在核心接口基础上,可定义便捷接口
注英文术语为Core Interface、Convenience Interface
设计师设计接口时,这些经验可以用
1. 基于代码:专项练习一
2. 基于代码:专项练习二
3. 基于代码:专项练习三
4. 原则与“坑”总结
1. 任务1:接口的命令化(Command)支持可扩展
2. 任务2:让接口包含回调(Callback)使模块通用化
3. 贯穿案例设计推进……
自控方案设计——单板软件架构师的下一步
架构师设计自控方案时,工作内容有哪些?
1. 逻辑设计 = 分层设计 + 功能子系统划分
2. 物理设计 = 硬件拓扑 + 软组件分布设计
3. 技术选型 = 开发技术 + 运行环境选型
4. 接口设计 = 接口技术选择 + 接口协议定义
架构师设计自控方案时,需求文档怎么写?
1. 《需求规格书》模板解读
2. 《需求规格书》实际范例分析
架构师设计自控方案时,架构文档怎么写?
1. 《GB SSDD》文档模板解读
2. 《GB架构书》实际范例分析 |