來自“太初有產”
一個用例到底因該多大呢?這個問題恐怕很難說得清楚。按照我們對用例的定義來說,用例就是用戶(外部系統)和系統的一次典型交互。但是有可能這個交互特別複雜。我們來看GIS系統中的一個很普通的交互:添加圖層。對於添加圖層這個用例用戶的要求顯然是系統能夠記住這個圖層並在系統中其它地方使用,還有一個直觀的要求就是圖層要被顯示出來。
下面是和這個用例有關的系統需求的原始文字描述:
系統需要支持添加圖層的功能。圖層的數據源要求支持Shapefile,ArcSDE FeatureClass,ArcGIS Personal Geodatabase FeatureClass,CAD DWG文件,JPEG影像文件,TIFF影像文件。添加圖層後要求立即在當前屏幕範圍內顯示圖層。添加圖層後系統其它地方可以使用這個圖層來做相關的操作。
這段需求一共有四句話,第一句說明這個需求的功能,第二句規定需要支持的格式,第三、四句說明要達到的效果。
下面我們使用前面的方法來表達這個用例:
用例編號: U-carto-001(表示和製圖有關的第001號用例)
用例名稱:添加圖層
相關需求: R-carto-001(表示和製圖有關的第001號需求)
語境目標: 添加新圖層到系統中。
前提條件:1.系統處於正常運行模式
2.用戶所指定的數據源有效
成功結束狀態: 圖層添加到系統中,並向用戶顯示出來
失敗結束狀態: 添加圖層的要求被拒絕。
主要參與者: 用戶
次要參與者:
觸發器: 用戶要求添加新圖層
包含案例: U-datasource-001(檢查數據有效性),U-carto-002(顯示數據)
主要流程: 步驟 動作
1. 用戶要求添加新圖層
2. 用戶選擇數據源類型
3. 系統檢查數據有效性(執行U-datasource-001)
4. 系統構造圖層並添加到圖層列表中
5. 系統將當前顯示區域設定爲圖層的數據範圍,
並刷新(執行U-carto-002)
6. 用例結束
擴展步驟: 2.1 用戶取消了操作(由於沒有找到它所期望的類型,例如MapInfo的TAB文件格式)
2.2 用例結束
3.1 數據源無效(例如 ArcSDE 服務連接不上,Shapefile已經被破壞)
3.2 提示用戶數據源不可用
3.3 用例結束
通過這種描述方式,尤其在熟悉了其中的包含用例和主要流程之後,我們可以很快發現這個一個粗粒度的用例。因爲它包括了其它的用例。更因爲熟悉GIS系統的人知道,它所包含的數據有效性檢查和顯示數據這兩個用例本身就都是很龐大的。它們自身就還包含有非常多的更小的用例。
那麼,通過這個例子。我們能夠學習到什麼呢?
實際上,在我開始使用用例的時候,用例的粒度問題就一直在困擾着我。因爲我一直以爲用例都是比較簡短的和明確的。這樣就導致一直問題,我一開始就把系統分解的過細,到了最後系統各個用例之間一片混亂。因爲我可能每天都在變化我的想法。
在仔細研究後,我幾乎可以得出這樣的結論。那就是用例是有層次性的。這種層次性由用例的《include》和《extend》關係來表達。而且通過用例的層次關係,也可以更好的對系統建模。使得用例圖更加有利於用來在系統架構這個過程中作爲參考依據。