2013年3月16日 星期六

軟體設計與開發之野人獻曝(1)

發現很多人對於軟體工程嗤之以鼻,或者覺得這是一個象牙塔發展出來的東西,現實專案很少依照這樣的學理發展,我個人倒是認為,軟體工程是提供一個對照,軟體也好、硬體也罷,一定有個生產流程,但是過程中應該產生出來的東西是否被"省略"了

比方說,規格書被省略是最常看到的,軟體好像就從空氣中跑出來了,事實上不是這樣,需求或許未被寫出來,可是他一定留在某些人的腦袋當中

另外一個就是,軟體工程有時太過高度抽象畫,很難落實,或許流程(process)會比較貼近實際,但是流程往往又需要很高的門檻,比方說要熟悉UML(UML只是描述語言,並不是完全依賴於某種流程,反過來倒是很多流程依賴UML)

流程(process)會開始解釋,如何從需求捕捉到系統分析,也就是從what to do到how to do,從抽象的描述到軟體設計開始,如果沒有實際經歷,往往也是落到跟軟體工程一樣的結論,這是一個高階的開發流程,並沒有辦法使用

流程(process)為何比軟體工程更貼近實際呢?因為流程往往綁定特定模式,比方OO,但是軟體工程則是更抽象,喜歡用lisp這種非OO開發也可以,要用OO流程開發也可以,換句話說,軟體工程工過程中省略了某些部分,使得讀者很難連貫跟理解

以RUP為例子,流程(process)會解釋如何從use case的描述之中抽出名詞跟動詞,如何組合名詞跟動詞成為class,在設計的時候會進一步將class抽象成其他class,常見的手法就是套用design pattern。但是如果是The object primer書的agile模式,則是從user story轉換為use case diagram然後慢慢地轉換為class,步驟、方法上跟精神上是有所不同的

因為時間的關係,先簡單寫到這裡,可以看到,要懂得一種process至少知道軟體開發過程,要懂得UML,要懂得design pattern,還要知道某些開發者的角色扮該執行怎樣的工作,所以不是一個簡單的過程,流程(process)也是一種方法論,懂得之後未必需要完全依照執行,但是可以加深取捨的決策。又如我最一開始說的,即使沒有任何需求、設計文獻就落實到了code,但是這些東西是保留在程式設計師或者客戶腦袋中,不落實將會一些效應的存在(比方引進新人員,要花很多工夫在訓練新人融入專案)

軟體工程、軟體開發流程是否需要懂??我說: Everything is about the trade-off.

沒有留言:

張貼留言