架构方法实践 - 客户端CAD工具范例 (一 序论, 前架构部分)

        2013年已经过去了, 各位在过去的一年里有着什么样的收获, 对新年有什么样的规划? 希望大家在新年里, 有更多的机会成长, 积累到更多的经验, 更上一层楼. 总结2013, 发现去年从事了一定的架构工作, 虽然显得粗浅, 但是也有了一套方法. 来吧, 总结, 分享.

        今年主要在公司负责了一个客户端CAD工具产品的开发和实现, 从无到有, 走过了一个完整的里程. 虽然软件的规模不大, 但效果不错,  后来在自己的一些开发项目中, 也时常使用, 感觉有收获. 学习对象是 温昱 的⟪一线架构师实践指南⟫ 一书. 读完此书后又读了 温昱 的⟪软件架构设计⟫, 发现内容差不多, 这次把自己消化的东西总结在这里:

         1) 架构方法 分为三阶段 和贯穿始终的一考虑. 其为: 前架构->概念架构->详细架构, 考虑是考虑非功能需求.

         2) 前架构关键是建立二维需求观, 是需求结构化的过程. 分析约束影响, 确定关键质量, 确定关键功能. 具体的工具有ADMEMS矩阵.

         3) 概念架构关键在于发现关键或核心功能的职责, 用一句话讲清楚要解决的问题, 厘清高层组件的职责和交互.具体的工具有鲁棒图(Robustness diagram).

         4) 细化架构关键在于用多视图的方法细化和设计架构, 到这个阶段, 应该完成软件的规格. 多个视图包括 逻辑/数据/开发/物理/控制 视图, 视需要进行分析研究.

         5) 在每个阶段, 都考虑和重视非功能需求(性能, 可重用性, 可持续使用性, 安全性.

         每个阶段的目的, 可以用下图来表示: (PA - pre architect/ CA - concept architect/RA - refined architect)


图1 架构阶段

架构开始: 有明确的业务需求, 有典型的行为需求, 有全面的用户需求就可以开始了. 无需等待产品设计人员的spec, 相反, 有架构的预案可以帮助产品设计修正spec.

讲到这里, 用范例来开始. 先说明一下典型的行为需求:  

图2. CAD软件外观

软件的框架分三个部分.左下部分的DXF, 表示Autodesk 草图数据的各个层(Z方向), X, Y平面可在右边的视图中查看或编辑. 左上部分Template, 表示Z方向各层的电路设计, X, Y平面可以在右边的视图中查看或编辑, 对范例产品的分析和介绍点到为止, 不会特别细的深入讲.

到现在, 架构已经开始了, 前架构的关键是全面理解需求, 把握需求的特点, 驱动架构设计.以往常见的下一步做法是, 保留一个Check list, 上面有分拆的需求清单, 对着这个清单, 逐点分析->讨论->评审->补充新要点->确保每个要点被覆盖这样一个循环. 这样的方法存在以下问题:

        (1) 比较难于确定关键的质量属性, 容易遗漏关键的质量属性.

        (2) 各个要点(质量属性)往往互相约束, 外延扩展考虑总是不够.

简而言之, 需求不是一个List, 是二维数组, 需要结构化.需求有三层次: 业务需求(组织要达到的目标, 是客户上司高层或组织要达到的需求)/客户需求(客户在日常使用中达到的要求) 开发者需求(对客户透明, 但对开发者来说必须实现的需求). 需求分三种类:功能需求, 质量需求, 约束需求. 那么可以表达为需求结构化的ADMEMS(Architecture Design Method has been Extended to Method System) 矩阵:

 功能质量约束
业务需求业务功能集快, 好, 省, 达成目标技术,法规约束
技术趋势
竞争和竞争对手
遗留系统集成
分批实施
客户需求用户运行时需求运行期质量用户特点
用户水平
多国语言
开发者需求软件行为需求开发期质量开发团队技术水平
开发团队磨合程度
开发团队分布情况
开发团队业务水平
保密要求
产品规划
维护&安装
图3 ADMEMS矩阵

对于例子, 用已知的信息去填写这张需求表:

 功能质量约束
业务需求1) Template的Z方向层堆叠设置.
2) 允许拷贝图元到Template预设好的各个图层里.
3) 根据算法组装各个层的各个图元为电路设计.
...
1) 堆叠设置的GUI尽量简洁, 自动化.
2 )堆叠设置完毕后,可以让用户直接在视图上编辑修改,减少对话框/报表交互.
3) 拷贝图元体验操作流畅, 性能好.
4) 组装算法性能好, 错误信息完备友好.
...
1)在Windows和Linux上同时构建和发布.
2)考虑与现有产品的集成和派生.
3)发布时间.
4) 输出的目标文件格式.
...
客户需求1) 根据层的打开和关闭查看Dxf图元.
2) 编辑Dxf的某个图元.
3) 复制选中的图元.
4) 单位制设置.
5) 画多段线
6) 插入文字标注

...
1) 编辑须支持一定程度的Undo/Redo.
2) 编辑支持拖放点的自动粘合.
3) 查看时有便利的缩放/导航工具.
4) 选择图元点选/框选便利,最好不需要选择模式等多余操作.
5) 编辑时的拖拉操作响应快, 可用性好,支持Overlay预览.
...
1) 电路设计大小基本在一个数值范围内, 可考虑固定单位.
2) 层数过多,同屏显示数量过多会影响编辑的帧数.
...
开发者需求1) 根据闭合的多段线和弧生成多边形.
2) 持续集成
...
1) 开发时容易扩展支持不同种类的Template
2) 如果用户需要输入位置,长度, 要做测距工具
3) 可测试, Log模块
...
1) 开发者资源少
...
图4 ADMEMS矩阵分析结果

不确定的需求或质量因素可以用红色标出, 再进行分析和讨论.可以看出, 这张表的作用:

1) 层次化结构化需求, 列出的点可以反复验证, 后续展开设计和讨论.

2) 可以看出关键的列是"质量"列, 对于这个产品, 个人认为关键质量是"编辑"功能的可用性, 设置必须简洁, 编辑必须流畅,符合用户使用cad软件的习惯.

3) 这张表能厘清一些不在计划内的工作任务, 就是"必做需求", 估算工时的时候要注意了. 比如说测距工具, 比如undo/redo, 重点在编辑的话, 不支持undo/redo那结果就是没法用.

有了这张二维需求表, 一些关键的质量因素渐渐显现, 众多的点也可以铺开进行设计和讨论, 下一步就可以进入架构的概念架构阶段. 且听下回分解:)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值