[修讀原因]
軟體工程這一科目也是很麻煩的一堂, 不是這堂課很難, 而是眾說紛云, 若只是各說各的就算了, 甚至有些是背道而馳互相矛盾, 但這也是合理的, 畢竟這堂課是種經驗論為主的結果論, 只要最後是有成功實用都是對的, 就像管理學一樣.
當然軟體工程較麻煩的地方也是方法論很多種, 每一個方法都是有用的地方, 甚至在某些場合跟定義是不合用的, 就像我曾說在 Big Data 的 SD, 是無法用 Top-Down Design 的 SA 與 SD.
但這堂課是容易被忽略或被錯誤認知的原因不只如此, 甚至有兩個最麻煩的原因:
- 通常學 Software Engineering 的人還沒有真正實務的系統開發經驗.
- 已在業界有實務的人, 在看的書都是各別單獨觀點, 有時體系很容易不了解與衝突
所以這堂課雖然是很基礎, 但更須要有經驗在來學會更了解.
下面是常見軟工的定義:
- 創立與使用健全的工程原則,以便經濟地獲得可靠且高效率的軟體。[3]
- 應用系統化,遵從原則,可被計量的方法來發展、操作及維護軟體;也就是把工程應用到軟體上。[4]
- 與開發、管理及更新軟體產品有關的理論、方法及工具。[5]
- 一種知識或學科,目標是生產品質良好、準時交貨、符合預算,並滿足用戶所需的軟體。[6]
- 實際應用科學知識在設計、建構電腦程式,與相伴而來所產生的檔案,以及後續的操作和維護上。[7]
- 使用與系統化生產和維護軟體產品有關之技術與管理的知識,使軟體開發與修改可在有限的時間與費用下進行。[8]
- 建造由工程師團隊所開發之大型軟體系統有關的知識學科。[9]
- 對軟體分析、設計、實施及維護的一種系統化方法。[10]
- 系統化地應用工具和技術於開發以電腦為主的應用。[11]
- 軟體工程是關於設計和開發優質軟體。[12]
[基本資訊]
[基本介紹]
ACM與IEEE Computer Society聯合修定的SWEBOK[13](Software Engineering Body of Knowledge)提到,軟體工程領域中的核心知識包括:
-
軟體需求(Software requirements)
-
軟體設計(Software design)
-
軟體建構(Software construction)
-
軟體測試(Software test)
-
軟體維護與更新(Software maintenance)
-
軟體構型管理(Software Configuration Management, SCM)
-
軟體工程管理(Software Engineering Management)
-
軟體開發過程(Software Development Process)
-
軟體工程工具與方法(Software Engineering Tools and methods)
-
軟體品質(Software Quality)
上面是 Copy & Paste 的, 因為這部份真的沒甚麼爭議與討論, 大家看任何一本軟工或 SA/SD 的書都會講到這些題目, 而最大的問題是 SE (Software Engineer) 中, 現在當紅的理論有:
- UML
- Design Patterns
- re-engineering
- XP
- OOP
-
敏捷開發
很多資料在 http://irw.ncut.edu.tw/peterju/se.html 都可以看到, 我就不寫了.
在軟工中, 這幾年最熱門的參考書有
- 人月神話
-
沒有銀彈
- 誰說_大象_不會_跳舞_
- 聚沙成塔
事實上軟工在這幾年無論就工具上, 就實務上真的有不少轉變, 我在很久以前說過, 一個好的 IT 人, 每十年都要重看最新一版的計算機架構, 在某方面而言, 軟體工程也是如此.
[修習方式]
建議線上課程:
建議電子書:
其他關鍵字:
- 瀑布式與循環式
- 開閉原則(Open-Closed Principle ; OCP),
- Liskov代換原則(Liskov Substitution Principle; LSP),
- 依賴倒轉原則(Dependency Inversion Principle; DIP)
- 介面隔離原則(Interface Segregation Principle; ISP)
- 組合/聚合重複使用原則(Composition / AggregationPrinciple ; CARP)
- CMMI(Capability Maturity Model Integrated)