Kenming Wang 在〈寫好使用案例 (Use Case) 有什麼好處?〉中提到寫好使用案例的好處。文章提到有位其中一位較為資深的程式開發人員在他在工研院授課時表示感覺不到寫好使用案例有什麼好處。這問題讓他思考許久後回答,他認為寫好使用案例最直接的關鍵是,影響整個專案開發流程的節奏。
這篇文章分享他對寫好使用案例對專案好處的看法,他總結使用案例的好處是族繁不及備載。並提到越大規模的專案,更能感受到開發節奏的順暢度。再加上 “漸進循環 (incremental and iteration)” 的開發模式,會越形容易謀和在系統開發期間,人與事的種種。
不過,Kenming Wang 在文章最後提到以上的論述不能說服那位程式開發人員,因為程式設計人員多半以局部或個別的角度來看系統開發,所以使用案例寫得好不好,對他們沒差。只有像專案經理或軟體架構師以專案整個全局來看時,才會有明顯的感受。
但他認為不需要去說服那位程式開發人員,並引述 Martin Fowler 在《UML Distilled》一書中曾經說過的:「你只能強迫新手們這麼做。過了幾年後,他們會突然恍然大悟,然後腦袋彷彿重生!」這句話來說明他對這位程式開發人員意見的看法。
同人看 Kenming Wang 這篇文章覺得怪怪的,倒不是不贊同他對寫好使用案例好處的觀點,而是覺得強迫新手去做我們認為有價值的東西是很危險的。
因為這些主觀價值如果不能以客觀的方式來表達甚至衡量,這些只會造成實際執行開發工作的人的困擾,不知道所謂的「好」或「對」的作法,到底與他們的工作有什麼直接關係,如此只會使他們工作變得更複雜。如果未來真能讓他們恍然大悟而腦袋重生倒也還好,但如果最後發現期望落空,是否只是浪費開發工作者寶貴的時間和精力呢?
尤其同人很懷疑 Martin Fowler 會說「你只能強迫新手們這麼做」的話。當然,同人對「腦袋重生」有印象,但記得不是出現在使用案例的章節,而是出現在循序圖的章節中,提到集中式或分散式物件設計的不同思維。果然,同人回家翻閱譯者光正兄送我的《UML精華第三版》發現,在循序圖的章節有下面這一段文字。
這種設計風格的改變正是物件導向設計典範革命的核心所在。不過,這也是難教導之處。真正了解物件導向典範唯一方式似乎就是在強烈使用分散設計風格的OO環境工作一陣子。許多人會突然恍然大悟,開始理解到這種設計風格究竟為何。這時候,他們的腦袋將重獲新生,也開始比較容易思考分散控制的設計風格。(趙光正譯,2004,《UML 精華第三版》,「Chapter 4 循序圖」,p4-6)
同人知道 Kenming Wang 是很聰明的顧問,懂得舉一反三引用大師的觀點來強化自己的論點。但用在此處看來有斷章取義之嫌,而且非常危險,我認為這很容易淪為方法論的主觀價值批判。因為不管怎麼說,如果光正兄的翻譯沒有錯誤的話,文句的原意並沒有貶抑不同開發觀點的意味。
同人以為問題的關鍵並不在某種開發典範有何好處,所以應該強迫他們採用、適應、進而熟練方法進而讓專案獲益。而是在於強迫導入任何方法論都會存在風險,我們是否能夠充分理解這些風險對專案產生的影響,以及所付出的代價是否值得。或許你還會有印象,同人在〈簡單,複雜世界的致勝之道〉分享過複雜面向的最主要來源是變革欠缺整合。
高層主管與員工對整合觀點的懸殊態度,對於整合,領導者關心的焦點是管理、控制與協調的工具;而員工關切的重點是有利個人決策的工具,執行工作者的觀點常會受到不平等的對待。
從這裡我們可以很輕易地了解,為什麼很多使用案例方法的導入常使軟體開發人員的工作變得更複雜。可能你會說那是因為誤用使用案例,或是沒有寫好使用案例,但其實依據同人的觀察,造成誤用或使用案例的不良寫作多半是因為不同觀點的差異,進而導致彼此的溝通不良所致。
站在全局觀點的人總是認為沒問題,但實際上他們並不能提供局部或個別觀點足夠的資訊,以利其進行開發上的決策。而往往為了符合全局觀點的架構上的框架,往往要逼著程式開發人員削足以適履。
請不要誤會,同人並非否定寫好使用案例的好處。事實上,從我過去的工作經驗,我很能體會寫好使用案例的好處,只不過我從來不認為好的使用案例可以解決不同觀點的整合問題;其實沒有任何的文件可以做到這點,除非允許各種聲音充分表達,然後進行相互對話以提昇溝通品質。
為什麼沒有任何文件可以解決不同觀點的整合問題呢?因為不管文件所傳達的觀念多麼「好」或是「正確」,而沒有與其他的觀點進行互動與溝通,進而分享意義,很容易讓各種不同的觀點各說各話,而無法促成彼此的思考與反省,進而激發出可以解決問題的智慧。所謂的「好」或是「正確」只是基於已知最佳實務的記憶,而不是為了解決複雜問題的思考,因此不見得可以有效地因應問題反而使問題更加複雜化。
不同觀點的整合,這絕不是「強迫新手這麼做」就可以成功的。你會需要實際執行工作者的回饋,了解他們的問題與期望,才能幫他們更簡單的完成工作,才不會因為忽略程式開發人員觀點的思慮不周,使工作變得更複雜而浪費他們的時間與心力。
我在什麼時候會使用USECASE, 在想要描述使用者與系統之間的互動,系統又會有什麼反應或回應給使用者,但工程師出身的人會去想”我”怎麼讓系統寫入DB或傳送資料,已經進入更細節的系統思維,最明顯的是去看我叫一位工程師練習寫需求規格書,若是依照這份規格書,不知如何下手,少了USECASE想要表達使用者的需求.
工程師是個群體或是個人?樓上用個人行為來推論群體想法的觀點是有問題的;需求不只是使用者需要而已,而是基於技術限制及成本的考量,找出最能夠符合使用者需要的方案。
更何況,如果開發者看不懂使用案例或認知有落差時,該解決的問題是溝通,而不是使用案例本身好不好的問題。