l

2011年4月4日 星期一

什麼是軟體工程 (2)

April 04 20:19~21:52

Teddy 之前寫過一篇『什麼是軟體工程』的文章,內容純屬搗蛋,沒人記得也就算了。今天因為在準備一個演講的投影片,不禁又讓 Teddy 想起了這個問題:『什麼是軟體工程』?

說來慚愧,本部落格名為『搞笑談軟工』,事實上 Teddy 從來沒有修過『軟體工程』這門課。因為 Teddy 想修的時候系上沒開,等系上開了課 Teddy 學分已經全部修完了,也就偷懶沒去聽。不過,好學不倦的 Teddy 還是自己買了三本軟體工程的書來自修。先介紹一下這三本書,再來看看這些教科書都在講些什麼。

  • Software Engineering: Principles and Practice, 2/e, 2000. 約 700 頁。
  • Object-Oriented Software Engineering: Using UML, Patterns, and Java, 2/e, 2004. 約 750 頁。
  • Software Engineering: A Practitioner's Approach, 6/e, 2005. 約 900 頁。
不比不知道,比了嚇一跳,怎麼講的內容還真是類似啊,可見 Teddy 白花了不少錢 這些寫教科書的作者們對於軟體工程的範疇有大致的共識。基本上,這些書都包含了以下內容:
  • Software Process:介紹 process models, 包含 waterfall, spiral model, agile methods 等,這一部份佔了  5% 左右。
  • Software Engineering Practice/The Software Life Cycle:這個分類佔了書本內容約 40%,主要就是講軟體開發所包含的需求分析,系統分析,系統設計,軟體架構,軟體元件,使用者介面設計,軟體測試。有點類似 OOAD 裡面所教的內容,只不過稍微抽象一點。
  • Managing Software Project/ Managing Change:這一部份內容份量也滿重的,佔了 35%~40% 左右。包含了建構管理,專案管理,人員和團隊管理,品質管理,風險管理,成本預估等。
  • Advanced Topics:包含了 正規方法,reengineering,software reusability,software reliability 等,內容約佔 10%~15% 。(Teddy 內心獨白:舉凡教科書中的 advanced topics 內容,內行的人都知道,這是永遠都不會教到的章節)
在這三本書中,第三本因為比較新(這本書是 2005 年初版的,Teddy 是 2005 年 11 月買的,所以從當年的角度來看算是新書了),而且頁數比前兩本多了 150-200 頁,所以多了一個新的內容:
  • Applying Web Engineering:介紹 Web Engineering,如何開始一個 WebApp 專案,如何分析,設計與測試 WebApps。
看到這邊,鄉民們應該多多少少了解到這個軟體工程長得到底是圓還是扁的。說真的,平常軟工,軟工一直講,經過這次『盤點』之後對軟工的印象又更具體了一點。

***

但是,故事並未到此結束。話說因為放假 Teddy 閒閒在家突然想起有一陣子沒去天瓏書局了,加上今天下雨去書局的人應該不多,可以悠閒地慢慢挑書,所以下午四點多的時候去了一趟天瓏書局(PS:事實上一點都不悠閒,因為有人不停地在書店門口騎樓抽煙,而煙味順著風吹入店內,失敗!這是 Teddy 越來越少去天瓏的主要原因)。原本是鎖定要買幾本和 agile 有關的書,因為現場人太少了 Teddy 時間又多,看著看著不小心看到了『Software Engineering』這個分類(Teddy 內心獨白:其實是為了躲避門口的煙味而越跑越往裡面...XD),又不小心看到了一本 2011 年出的新書,於是 Teddy 的書櫃又多了一本軟體工程的書:Software Engineering, 9/e by Ian Sommerville, 2011. 約 770 頁。

照理講 Teddy 都畢業 2 年多了應該不需要買這種教科書了,而且這本書的內容有 70% 和之前這三本都重複了,但是這本書有九章新的內容吸引了 Teddy。
  • Part 2 Dependability and Security
    • Chap 10: Sociotechnical systems
    • Chap 11 Dependability and security
    • Chap 12 Dependability and security sepecification
    • Chap 13 Dependability engineering
    • Chap 14 Security engineering
    • Chap 15 Dependability and security assurance
  • Part 3 Advanced Software Engineering
    • Chap 19 Service-oriented architecture
    • Chap 20 Embedded software
    • Chap 21 Aspect-oriented software engineering
記得在唸書的時候讀過 IEEE Transactions on Dependable and Secure Computing 的幾篇 papers,沒想到才沒過幾年 Dependability and Security 已經變成軟體工程教科書的內容了;還有包括 SOA,Embedded 和 AOP 也都被放到軟工教科書中。這也代表這些領域在軟體工程中越來越被重視。

***

其實買教科書有很多好處:
  • 高  CP 值:和『流行書』(例如 Agile methods,手機程式開發)相比,這些教科書算是大碗又便宜。隨隨便便一本 700-800 頁才賣你 1000 台幣出頭。像 Teddy 今天買了另外一本書 Managing Software Debt 才 240 頁就要 1440 ... 心還是挺痛滴...
  • 幫你省時間:這些教科書的內容很多都是從學術論文中整理出來的,如果要你自己去看,光是把這幾百篇的論文... 找出來... 都還不用看喔,就夠你嗆的了。
  • 快速了解地形地物:如果對於某個領域不熟,最快的方法之一...就是去找一本該領域的教科書來看這樣就可以很快的了解該領域的基本常識。
***

講了這麼多,大概也沒幾個人記的起來。總之,把握以下幾個重點:
  1. 軟體不是軟的。事實上,軟體很硬
  2. 軟體工程的目的:
    • 讓你可以把軟體做出來
    • 讓你的軟體變軟
    • 讓你在可接受的成本範圍內達成上述兩件事
講完收工。

***

友藏內心獨白:怎麼在兒童節寫了這麼『兒童不宜』的文章...XD

沒有留言:

張貼留言