誠如會寫軟體未必需要懂得軟體工程,但是軟體工程可以幫助提綱挈領,統籌資料
個人認為的次序是 "軟體工程"=>"軟體流程",需求捕捉以及分析的工具,還需要"設計工具"(UML/Design pattern/Architecture Design),最後是"程式工具"(Refectoring),但是這裡缺乏了專案管理的工具,畢竟市面上太多,懂得流程後,尋找工具或者手動應該會輕鬆得多
軟體工程(統合概念的書籍)
軟體開發流程的書籍 (UP, RUP, agile, scrum)
需求捕捉與管理
程式(Code)工具
其他(CMMI)
個人經驗,我是從RUP/UP入手,其實學習過程中,剛好另外一套稱為XP (eXtrem Programming)的學說興起,我個人在心理上比較認同XP(或許是自己是個programmer吧:-> )。使用RUP/UP的過程中,真的開始覺得他非常heavy,每件事情都快要鉅細靡遺,但是我也了解到了一個軟體開發過程中應該要有的大多數的成果(artifacts)
跟著也是一般人都會有的疑問,就是需求捕捉,之前寫得"從user case裡面直接分析出名詞跟動詞接著進入到設計階段"<=這絕對是簡化到誇張的講法,因為一般需要從需求裡面分析出domain model跟著才進化到desgin model
需求分析設計,一個講求what to do,一個講求how to do,但是在what to do之前呢?如何讓人們懂得溝通?一個是住在火星的programmer,一個是住在水星的客戶(business man),一個只認得code,一個只會寫的一嘴好程式(最常見的需求,我要做的跟XXX網站一樣,XXX請自行帶入yahoo, amazon, 淘寶...),在上面幾本書有很好的解析,writing effective use cases比較偏重UP/RUP的模式,Sepcification by Example, User Stories Applied則是Agile
至於設計工具GoF的design pattern就不用說了,真的是很多OOD的工具,另外一本Pattern Oriented Software Architecture(簡稱POSA)則是講究Architecture,如果懂得Architecture以及Pattern中間模糊的差異(其實有時候蠻難切開的,比方說broker有時是architecture有時又是pattern),另外一本Patterns of Enterprise Application Architecture則包含了許多web based的pattern跟架構
其他常用的code工具refatoring則是如何改善code工具,除了改善,我覺得後面另外一個很重要的精神是,不要隨便拋棄code(約爾趣談軟體有提到類似的精神),但是refactoring有個天生的缺點,很繁瑣,如果沒有自動化工具,我建議把一些類似rename等等太低接的動作捨棄,專注界面的改善比較好
最後是CMMI,CMMI這東西抽象化程度不輸給軟體工程,完全只有給出what to do(工程/流程面相),沒有how to do(實際執行),不妨將軟體流程的成果對應到CMMI上面去,因為軟體流程幾乎可以cover CMMI的Level 2跟Level 3,但是很不幸Level 3有四個SG (special goal)是屬於組織流程的,軟體工程無能為力,說實話Level 4跟Level 5我也很難領悟
沒有留言:
張貼留言