2015年9月9日 星期三

軟體工程書摘與心得 Part 1:為何需要軟體工程&軟體工程之簡介

最近閒來無事去看了Livecoding.tv上程式設計師表演打code,就覺得怪了為何你腦袋能源源不絕想出接下來要做什麼,從這頁面又跳到下個頁面,雖然我也能看懂你在做啥,可是自己就不一定能這樣行雲流水般地打code(苦笑)。後來想想應該是我缺乏軟體工程上的訓練。

不然別人是怎麼會想說這邊要用這個protocol?下一個地方要用這個函數銜接?在軟體工程中我從這本書找到了答案:

根據書中解釋,1960年代末期由北約召集科學家探討「軟體危機」的問題,討論如何有更好的軟體開發方法來提升開發的效率、節省開發成本,同時獲得良好的軟體系統品質,因而催生了軟體工程的發展。對我來說寫軟體就如同建造房子,從畫藍圖、打樑樁等都有一套步驟和分析的方法,都需要投入大量的精力來完成。

而這也是會和有些人能把程式寫得穩健、可靠、可擴充,就是有進行完整的系統分析、需求了解、介面設計等才能達到一定品質。隨著軟體漸趨複雜,光是作業系統就可高達上千萬行程式碼,如何做好軟體開發就需要系統工程的幫忙,並借助軟體系統開發方法論,然後選擇軟體開發程序:

  1. 傳統階梯式的軟體開發程序:做好需求分析後,設計系統與軟體的架構,之後進行系統製作與局部測試,最後整合測試後就可上線使用還有維護
  2. 漸進式的軟體開發:透過需求分析後快速產生原型,之後陸續迭代產生新產品
  3. 需求規格化的軟體開發程序:將軟體系統的規格以數學模型來表示,之後自動轉成程式碼
  4. 組合式的軟體開發程序:分別完成系統內的各個元件,之後再組合起來
而隨著物件導向的盛行,也陸續產生新的開發方法(其實也很久的東西了):
  1. RUP (Rational Unified Process):結合螺旋式、反覆式及漸進式的開發方法,主要分成「開始階段」、「細化階段」、「建置階段」、「轉換階段」四種
  2. 敏捷開發:像是XP(Extreme Programming)、Scrum等
方法演進後手上的工具也不能輸人啊!因此就有電腦輔助軟體工具(CASE, Computer-Aided Software Engineering)的出現,早期CASE工具出現時人們的期望很高,認為可以大幅下降軟體開發成本,但當時的CASE工具並不成熟,沈寂了一段時間後大家才開始陸續使用,大家常用的IDE就是一個典型例子。

仔細回想起來,目前有很多火紅程式教學的網站,大家都用得開心,可是真的要開發一套系統就只能坐在電腦前打不出任何東西,一部分可能是程式技巧不足,另一部分就可能是缺乏軟體工程的訓練。當了解軟體工程時,就能超越一般的程式設計師成為軟體工程師,就像是從一位工人進化到建築師,從只會寫程式變成能洞悉大局、了解如何規劃與參與軟體開發的各個階段的「高級程序員(猿)」。

下一篇將會介紹軟體系統的需求工程,如何找到需求並把需求轉成軟體架構、規格就需要這篇啦~

2 則留言: