軟件是計算機系統中與硬件相互依存的一部分,軟件包括程序、數據與相關文檔的完整集合。其中程序是按事先設計的功能和性能要求執行的指令序列,數據是使程序能正常操縱信息的數據結構,文檔是與程序開發、維護和使用有關的圖文材料。編程
在結構化程序設計時代,程序的最小單位是函數及子程序,程序與數據是分離的;在面向對象程序設計時代,程序的最小單位是類,在類中封裝了相關的數據及指令代碼。數據結構
如同其餘事物同樣,軟件也有一個孕育、誕生、成熟和衰亡的過程,咱們稱之爲軟件生命週期。軟件生命週期由軟件定義、軟件開發、和運行維護3個時期組成,每一個時期又可劃分爲若干個階段。框架
軟件定義時期的主要任務是解決「作什麼」的問題,即明確工程的總目標和可行性;導出實現工程目標應使用的策略及系統必須完成的功能;估計完成工程須要的資源和成本;制定工程進度表。該時期的工做也就是常說的系統分析,它一般又分爲3個階段:問題定義、可行性研究和需求分析。函數
軟件開發時期的主要任務是解決「如何作」的問題,即具體設計和實如今前一個時期定義的軟件,一般由概要設計、詳細設計、編碼和測試4個階段完成。工具
軟件運行維護時期的主要任務是使軟件持久地知足用戶的須要,一般由4類維護活動:改正性維護,也就是診斷和改正正在使用過程當中發現的軟件錯誤;適應性維護,即修改軟件以適應環境的變化;完善性維護,即根據用戶的要求改進或擴充軟件,使它更完善;預防性維護,即修改軟件爲未來的維護活動預先作準備。性能
軟件開發週期長、成本高、質量差、維護困難緣由:測試
一、缺少軟件開發的經驗和有關軟件開發數據的積累,使得開發工做的計劃很難制定。主觀盲目的制定計劃,每每與實際狀況相差太遠,導致經常突破經費預算,工期一拖再拖。並且對於軟件開發工做,給已經拖延了的項目臨時增長人力只會使項目更加拖延。編碼
二、軟件人員與用戶的交流存在障礙,除了知識背景的差別,缺乏合適的交流方法及需求描述工具也是一個重要緣由,這使得獲取的需求不充分或存在錯誤,在開發的初期難以發現,存在的問題每每在開發的後期才暴露出來,使得開發週期延長,成本增高。設計
三、軟件開發過程不規範,缺乏方法論和規範的指導,開發人員各自爲戰,缺乏總體的規劃和配合,不重視文字資料工做,軟件難以維護。對象
四、隨着軟件規模的增大,其複雜性每每會呈指數型增加。
五、缺乏有效的軟件測評手段,提交用戶的軟件質量差,在運行中暴露出大量問題,輕者影響系統的正常使用,重者發生事故,甚至形成生命財產的重大損失
1968年10月在北大西洋公約組織(NATO)召開的計算機科學會議上,Fritz Bauer首次提出「軟件工程」的概念,試圖將工程化方法應用於軟件開發。許多計算機和軟件科學家嘗試,把其餘工程領域中行之有效的工程學知識運用到軟件開發工做中來,通過不斷實踐和總結,得出這樣的結論:按工程化的原則和方法組織軟件開發工做是有效的,是擺脫軟件危機的一個主要出路。
軟件工程是指導計算機軟件開發和維護的工程學科。採用工程的概念、原理、技術和方法來開發和維護軟件,把通過時間考驗而證實正確的管理技術和當前可以獲得的最好的技術方法結合起來,以經濟地開發出高質量的軟件並有效的維護它,這就是軟件工程。
軟件工程的目標是運用先進的軟件開發技術和管理方法來提升軟件的質量和生產率,也就是要以較短的週期、較低的成本生產出高質量的軟件產品,並最終實現軟件的工業化生產
自從「軟件工程」誕生,提出用工程學的基本原理和方法來組織和實施軟件生產後,又發展了與軟件有關的心理學、生理學、經濟學等方面的學科。在此期間,研究軟件工程學的科學家們陸續提出了100多條有關軟件工程的準則,1983年美國TRW公司B.W.Boehm將它們歸納爲著名的軟件工程7條基本原理:
一、按軟件生存週期分階段制定計劃並認真實施
軟件從定義、開發、運行和維護,直到最終被廢棄,要經歷一個很長的時間,一般稱這樣一個時期爲軟件生存週期。在軟件生存週期中須要完成許多不一樣性質的工做,因此應把軟件生存週期劃分爲若干階段,爲每一階段規定若干任務,制定出可行的計劃,並按照計劃對軟件的開發和維護啊活動進行管理。
二、堅持進行階段評審
軟件的質量控制工做不能等到編碼結束後再進行,由於大部分錯誤是在編碼以前形成的,並且錯誤發現的越晚,爲改正它所需付出的代價就越大,所以,在每一個階段都要進行嚴格的評審,以儘早發如今軟件開發過程當中產生的錯誤
三、堅持嚴格的產品控制
在軟件開發過程當中要及時識別全部影響產品質量的因素,並在開發過程當中嚴格加以控制,如對於需求變動的控制。因爲外界環境變化或軟件工做範圍的變化,在軟件開發過程當中需求的變動是在所不免的,因此必須依靠科學的產品變動控制機制來順應需求的變動。就是說,當需求變動時,爲了保持軟件各個配置成分的一致性,必須實施嚴格的產品變動審查和基線配置管理,確保變動的正確性和有效性。
四、使用現代程序設計技術
隨着軟件產品規模和複雜性的不斷增長,對於軟件開發的方法和工具提出了更高的要求。實踐代表,採用先進的程序設計技術可提升軟件開發的生產率,還可提升軟件產品的可維護性。
五、明確責任
爲了提升軟件開發過程的可見性並有效地進行管理,應當根據軟件開發項目的總目標、任務分解結構和完成期限,規定開發組織的責任和產品標準,使得工做結果可以獲得清楚的審查。
六、用人少而精
合理安排軟件開發小組人員的原則是參與人員應當少而精,即小組的成員應當具備較高的素質,且人數不該過多。人員素質高能大大提升軟件開發的效率,明顯減小軟件中的錯誤。開發人數減小,能夠下降因交流開發進展狀況和討論遇到的問題而形成的通訊開銷。
七、不斷改進開發過程
軟件開發過程定義了軟件工程方法使用的順序、要求交付的文檔資料、爲保證質量和協調變化所須要的管理以及軟件開發各個階段應採起的活動和必要的評審。爲保證軟件開發的過程可以跟上技術的進步,必須不斷地靈活改進軟件工程過程。爲了達到這個要求,應當積極主動地採起新的軟件開發技術,注意不斷總結經驗。此外,須要注意收集和積累出錯類型、問題報告等數據,用以評估軟件技術的效果和軟件人員的能力,肯定必須着重開發的軟件工具和應當優先研究的技術。
軟件工程方法論包含3個要素:方法、工具和過程。
軟件工程方法爲建造軟件提供技術上的解決方案(「如何作」)。方法覆蓋面很廣,包括溝通、需求分析建模、設計建模、編程、測試和維護支持。
工具爲方法的運用提供自動的或半自動的軟件支撐環境。
過程是爲了得到高質量的軟件所須要完成的一系列任務的框架,它規定了完成各項任務的工做步驟。