就像小說里那些早慧的少年,很早就嘗試過用例驅(qū)動(dòng)的需求文案,結(jié)果與客戶,一個(gè)愁默默,一個(gè)恨綿綿。
最狂熱的用例編寫者也承認(rèn),用例對(duì)客戶與需求人員都是一種heavy的相互折磨。
客戶看用例時(shí)總要收攝心神來閱讀整個(gè)交互的流程,還有那些該死的擴(kuò)展流異常流,沒經(jīng)過程序員專業(yè)抽象訓(xùn)練的客戶,對(duì)著這些偽代碼一般的情景腳本,剛開始的一兩個(gè)還好,看多了,就是白天也能睡去??蛻糁皇强炊既绱肆?,負(fù)責(zé)寫的人當(dāng)然也不會(huì)好過。
但heavy的工作總有heavy的好處,否則早被唾棄于舞臺(tái)的背面。
在用戶的角度,用例比模棱兩可的功能點(diǎn)描述要清晰,也更直白于系統(tǒng)的價(jià)值。
在開發(fā)團(tuán)隊(duì)角度,RUP的核心方法論之一---用例驅(qū)動(dòng)的口號(hào),明白人自然明白他的妙用。
設(shè)計(jì)人員有了新的設(shè)計(jì)手段:“用時(shí)序圖分析用例的實(shí)現(xiàn),在描述過程中確定構(gòu)件或類,分配它們的職責(zé)和方法”,通過對(duì)用例覆蓋率的追蹤,將需求與設(shè)計(jì)之間的信息損耗這個(gè)famous problem大大降低。
測(cè)試人員和文檔人員,更可以直接把系統(tǒng)用例笑納為《測(cè)試用例》和《用戶手冊(cè)》。
來到億迅大陸后,被這里的用例文明給震住了,每個(gè)項(xiàng)目的軟件規(guī)格說明都是屯門清一色的幾百頁的前景,用例規(guī)約,業(yè)務(wù)規(guī)則,詞匯表,補(bǔ)充規(guī)約組成.......
昨天又看到了一批新的用例誕生,但實(shí)在有好些明顯的不足啊,忍不住舊事重提的記下一批經(jīng)典的錯(cuò)誤。不過.....只要能和客戶達(dá)成需求共識(shí),就是一份好的用例了,也不用花太多時(shí)間在學(xué)術(shù)性的討論上。
1.客戶沒有能力閱讀用例
如果客戶實(shí)在沒辦法撐住困意看完用例的細(xì)節(jié),即使草草簽了名,得不到用戶真正確認(rèn)的用例,依然無法用來驅(qū)動(dòng)設(shè)計(jì)和測(cè)試。
解決方法:放棄編寫用例,改回用戶容易看的傳統(tǒng)方式。
2.團(tuán)隊(duì)沒有能力實(shí)現(xiàn)用例驅(qū)動(dòng)
如果開發(fā)團(tuán)隊(duì)在設(shè)計(jì)與測(cè)試時(shí),根本不依照用例細(xì)節(jié)驅(qū)動(dòng),那用例對(duì)開發(fā)團(tuán)隊(duì)就只是個(gè)擺設(shè),花瓶。
解決方法:對(duì)設(shè)計(jì)、測(cè)試人員進(jìn)行用例驅(qū)動(dòng)的培訓(xùn),如果事不可為就干脆放棄,怎么省事怎么做。
3.在用例中描述系統(tǒng)內(nèi)部工作
經(jīng)典錯(cuò)誤,開發(fā)人員把用例當(dāng)作設(shè)計(jì)文檔來寫,如“系統(tǒng)將銷售信息寫入數(shù)據(jù)庫”,實(shí)際上應(yīng)該寫的是“系統(tǒng)記錄銷售”。
解決方法:站在客戶的角度,把系統(tǒng)視為黑盒,刪除所有內(nèi)部設(shè)計(jì)描述。
4.在用例中描述界面
另一個(gè)經(jīng)典錯(cuò)誤,不說了,如果在意用戶信息包括了姓名和密碼,可以在詞匯表里記錄,而用例寫成--顯示<用戶信息>。
5.在用例中越出系統(tǒng)邊界描述整個(gè)業(yè)務(wù)流程
要建立的系統(tǒng)只是整個(gè)業(yè)務(wù)流程里的一部,善良的需求人員為了大家清楚來龍去脈,將系統(tǒng)外的處理步驟也寫進(jìn)了用例的情景。
如:
1.用戶去營(yíng)業(yè)廳開戶
2.用戶撥號(hào)接入
實(shí)際上去營(yíng)業(yè)廳開戶不屬于寬帶接入認(rèn)證系統(tǒng)的職責(zé)。
解決方法:開戶的描述應(yīng)該放到用例的前置條件中。前置與后置條件是說明系統(tǒng)邊界外的業(yè)務(wù)流程的好地方。
6.過多的用例,讓人暈菜
國外的慣例,一個(gè)用例一般有半個(gè)以上人月的開發(fā)量。
解決方法:
1.開戶,銷戶這樣的CRUD型用例可以合并成一個(gè)管理用例,以四個(gè)主場(chǎng)景分別表達(dá)。
2."老板問:你每天做什么阿?","我每天登陸系統(tǒng)"。這就是用例沒有提供足夠價(jià)值的明顯標(biāo)志。
3.用例中的每一個(gè)步驟,其實(shí)都可以寫成一個(gè)獨(dú)立的用例,分 or 不分?
4.用例的打包組織是一門藝術(shù),功能包、頂級(jí)目標(biāo)用例,Actor,開發(fā)團(tuán)隊(duì)與版本號(hào)等。
7.過多的擴(kuò)展事件和異常事件流,讓人暈菜
即使是受過訓(xùn)練的程序員,2a, 3b1看多了也要暈掉,記住閱讀者是人而不是機(jī)器。
解決方法:
1.如果邏輯不多,可以一句話講完,不影響主場(chǎng)景的,不建議新起一個(gè)事件流。
2.可以使用活動(dòng)圖來輔助說明。在RSM7.0的模版里,每個(gè)用例都會(huì)帶上一個(gè)活動(dòng)圖。
8.過多的關(guān)系,繼續(xù)讓人暈菜
“不要花一個(gè)月的時(shí)間去討論應(yīng)該include還是extend”。大家對(duì)include, extend and generalize都不熟悉,那就干脆都不要用了。
參考材料:
《編寫有效用例--Wriging Effective Use Case》Corkburn 2001,大家現(xiàn)在使用的用例模版都是他創(chuàng)下來的,此書無可替代。
《用例模式與藍(lán)圖--Use Cases Patterns and Blueprints》我覺得比另一本名字相近的《Patterns for Effective Use Cases》要實(shí)用一些。