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

来源:互联网 发布:干了女朋友的妈妈知乎 编辑:程序博客网 时间:2024/05/01 18:17

        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那结果就是没法用.

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




0 0
原创粉丝点击