上個月我在「工研院」授課時,其中一位較為資深的程式開發人員問的問題: 我感覺不到寫好使用案例 (Use Case) 有什麼好處?
別誤會,這位年輕的開發人員並沒有惡意,我也認識他一陣子了。他的確是有感而發,覺得在工作上,從以前透過一般的需求規格書,到現在開發時導入 使用案例 的分析需求技術,但是,他並沒有感受到因為這樣而有加快程式撰寫的速度,反而還覺得縛手綁腳,經常需要受到規範。
這個問題,可比想像得還難以回答。 是為了可以有效保存需求分析的資產? 還是為了系統的彈性 (flexibility)? 前者似乎有道理,但如此對現在正進行的開發專案好像沒有說服力,甚至開發人員還覺得為了要補足這些需求文件,反而拖累了開發的速度;後者的系統彈性問題,我則是很確定與寫得好需求分析文件沒什麼直接的關係,彈性度的考量,與軟體的結構設計 (structure desgin)才是更主要的關鍵。
思考許久,我是以為,寫的好使用案例最直接的關鍵是: 影響到專案開發整個流程的節奏!
以使用案例為導向 (use case driven)的開發模式,我的體會是越來越能感受到那個所謂的 "driven" 這個字眼。 短線專案的特性,幾乎是偏以需求為優先。而使用案例的分析,其本質上仍是屬於功能 (functional)性的分析。只是有別於模組化的功能樹分析模式,後者的功能模組,耦合性 (coupling) 太重,容易牽一髮而動全身,所以在需求分析階段,會耗費許多時間在分析共用模組的考量;而使用案例,是一種目標導向 (goal-oriented)的功能分析方式。 每一個使用案例,都可以看待成是系統在某一段期間 (session),可以滿足使用者使用系統的目的。 所以每一個使用案例,是可以個別被獨立開發,也就是說,UC-A 與 UC-B 甚至可以交付給不同團隊並行開發。而至於兩者若有共用性的議題的考量,則是延宕到結構設計階段再來討論即可。因為在需求分析階段,不用花太多時間在共用議題的考量上,所以可以很快速地實現 (realize)功能需求。
能抓得好與定義得好一個一個的橢圓使用案例,就能以該使用案例為開發單位。 這麼說好了,甚至可以把該使用案例就當成是一個迷你系統,然後來串連出整個開發的程序與產出。 例如,針對一個使用案例,就會設計一個位於中間層 (middleware)的控制型物件 (control object),並從使用案例的敘述 (use case description)中,找出該物件應承擔的行為 (behavior),然後再轉化成更詳細規格、程式語言的方法 (method)。 定義好控制物件與其應有的行為,就可以知道需求分析是容易並可以無縫式地轉移到實做階段,並快速地界定出程式碼的骨架 (sketletion),再來就是補足細節、實做邏輯、連結資料庫或外部系統 等等…。

訂閱 RSS (by FeedBurner)
訂閱 RSS (by Wordpress)

