- 軟件工程原理與實踐
- 沈備軍 萬成城等編著
- 1188字
- 2024-05-11 18:13:28
1.2 什么是工程
1.2.1 軟件是一門工程學科
為了更深入地探索軟件的本質,軟件學術界和產業界進行了大量的研究和探索。軟件開發追求的目標是什么?軟件應是一門什么學科?是藝術、科學,還是工程?
藝術是追求美(beauty)的學科。軟件開發和藝術有關系,優秀的軟件好用且美,就像藝術品一樣。有人曾說,寫一行行代碼,就像寫一首藍色的詩。軟件的開發和藝術的創作在某些方面常常很相似,都需要靈感和創意,非常依賴于創作者的個體能力、思維方式以及當時的情緒和狀態。
科學是追求真(truth)的學科。軟件開發和科學有關系,它具有數理性質,可以采用數學抽象方法進行一致性分析并細化成更詳細的理論。形式化開發方法就是用數學的方法來開發或驗證軟件的。
工程是追求善(benefit)的學科。軟件開發具有很強的工程性質,軟件開發需要一群人靠系統的方法一起進行分析、設計、實現和測試來完成,“不是一個人在戰斗”,也不是只靠一種技術。它需要多個人的有效協作、多種學科技術的有效綜合才能成功。因此,我們認為軟件開發更偏向工程學科,如圖1-1所示,軟件開發的目標是提供最大的價值。

圖1-1 軟件是一門工程學科
當前,軟件工程學科已發展為計算機科學與技術、數學、工程學、管理學等相關學科的交叉學科。2011年初國務院學位委員會和教育部將軟件工程確立為一級學科。
1.2.2 工程的定義和特性
所謂工程,是對技術(或社會)實體的分析、設計、建造、驗證和管理。應用于不同的領域,則形成系統工程、社會工程、化學工程、冶金工程、機電工程、土木工程、水利工程、交通工程、紡織工程、食品工程,以及軟件工程等。工程是一種組織良好、管理嚴密、各類人員協同配合、共同完成工作的學科,它具有以下特性:
1)以價值為目標。工程的目標就是獲得最大的效益,給社會或組織帶來價值。
2)高度的組織管理性。工程需要各類人員為了共同的愿景和目標協同配合,需要把相互作用和相互依賴的若干組成部分結合成具有特定功能的有機整體,因此它是一門組織管理的學科。
3)多種學科的綜合。工程需要綜合使用多門學科的知識和技術。例如,軟件工程涉及數學、工程學、美學、經濟學、管理學等學科。
4)高度的實踐性。工程需要采用實踐的研究方法,從實踐中總結知識,再應用于實踐中。
1.2.3 工程過程
工程過程由以下步驟組成[3],適用于包括軟件工程在內的所有工程領域:
1)理解真正的問題。當需求被確認時,工程就開始了,沒有現成的解決方案可以滿足該需求。然而,需要解決的問題并不總是工程師被要求解決的問題,因此應采用根源分析等技術來發現需要解決的真正的潛在問題是什么。
2)設計方案。設計多個技術上可行的解決方案,從技術、財務、進度等維度進行評估,從中選出最佳解決方案,確保方案能很好地滿足需求。
3)監控所選方案的效能。在方案實施過程中監督和評估它的實際效能,并確定其他備選方案是否更好(如果為時不晚)。
工程過程是迭代的,前一個迭代中獲得的知識將為后一個迭代提供指導和改進方向。