軟體工程專業2
軟體工程=最佳實踐
軟體系統的複雜性、動態性使得:
– 高深的軟體理論在軟體開發中變得無用武之地;
– 即使應用理論方法來解決,得到的結果也往往難以與現實保持一致;
因此,軟體工程被看作一種實踐的藝術:
– 做過越多的軟體專案,犯的錯誤就越少,積累的經驗越多,隨後作專案的成功率就越高;
– 對新手來說,要通過多實踐、多犯錯來積累經驗,也要多吸收他人的失敗與教訓與成功的經驗。
——當你把所有的錯誤都犯過之後,你就是正確的了。
在軟體工程師試圖解決“軟體危機”的過程中,總結出一系列日常使用的概念、原則、方法和開發工具;
這些實踐經驗經過長期的驗證,已經被證明是更具組織性、更高效、更容易獲得成功;
大部分的這些實踐都沒有理論基礎。
“最佳實踐” :溝通階段應做的事情:
– 識別出你需要與客戶方的哪些人溝通;
– 找出溝通的最佳方式;
– 確定共同的目標、定義範圍;
– 評審範圍說明,並應客戶要求作出修改;
– 確定若干典型場景,討論系統應具備的功能/非功能;
– 簡要記錄場景、輸入/輸出、功能/非功能、風險等;
– 與客戶反覆討論、交換意見,對上述內容進行細化;
– 與客戶討論,為最終確定的場景、功能、行為分配優先順序;
– 評審最終結果;
– 雙方簽字;
軟體工程的核心概念
複用(Reuse)
在一個新系統中,大部分的內容是成熟的,只有小部分內容是全新的。
構造新的軟體系統可以不必每次從零做起;
直接使用已有的軟構件,即可組裝成新的系統;
複用已有的功能模組,既可以提高開發效率,也可以改善新開發過程中帶來的質量問題;
分而治之(Divide and Conquer)
將複雜問題分解為若干可獨立解決的簡單子問題,並分別獨立求解,以降低複雜性;
然後再將各子問題的解綜合起來,形成最初複雜問題的解。
折中(Trade-off)
不同的需求之間往往存在矛盾與衝突,需要通過折中來作出的合理的取捨,找到使雙方均滿意的點。
例如:
– 在演算法設計時要考慮空間和時間的折中;
– 低成本和高可靠性的折中;
– 安全性和速度的折中;
核心問題:如何調和矛盾( 需求之間、人與人之間、供需雙方之間,等等)
演化(Evolution)
軟體系統在其生命週期中面臨各種變化;
核心問題:在設計軟體的初期,就要充分考慮到未來可能的變化,並採用恰當的設計決策,使軟體具有適應變化的能力。
即:可修改性、可維護性、可擴充套件性;
NFP :Non-Functional Property 非功能特性、效能特性
– 例如:完備性、正確性、健壯性、可靠性、效率、可用性、可維護性、可移植性、清晰性、安全性、相容性、經濟性、商業質量等。