1. 程式人生 > >客戶端CAD工具範例 (一 序論, 前架構部分)

客戶端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那結果就是沒法用.

有了這張二維需求表, 一些關鍵的質量因素漸漸顯現, 眾多的點也可以鋪開進行設計和討論, 下一步就可以進入架構的概念架構階段. 且聽下回分解:)