IEEE[IEE93]對軟件工程的定義爲「軟件工程是:(1)將系統化的、規範的、可量化的方法應用於軟件的開發、運行和維護,即將工程化方法應用於軟件;(2)在(1)中所述方法的研究。編程
軟件工程是一種層次化的技術,任何工程方法都必須以組織對質量的承諾爲基礎;經過軟件過程將各個技術層次結合在一塊兒,並實施合理地、及時地開發計算機軟件;軟件工程的方法爲建造軟件提供技術上的解決方法,即如何作,覆蓋面很廣,包括溝通、需求分析、設計建模、編程、測試和支持;最後軟件工程工具爲過程和方法提供自動化或半自動化的支持。api
過程框架定義了若干小的框架活動,爲完整的軟件開發過程創建了基礎,這些框架活動可普遍應用於全部軟件開發的項目,不管這些項目的規模和複雜性如何。通用過程框架可適用於絕大多數的軟件項目,也是後續各類模型描述的基礎,包括:溝通、策劃、建模、構建、部署架構
美國卡內基.梅隆大學軟件工程研究所SEI提出了一個全面的過程元模型,當軟件開發組織達到不一樣的過程能力和成熟度水平時,該模型可用來預測其所開發的系統和軟件工程能力。爲達到這些能力,SEI認爲組織都應創建與能力成熟度模型集成(Capability Matuiry Model Integration CMMI)指南相符合的過程模型。CMMI用兩種不一樣的方式描述過程元模型:(1)做爲一個連續的模型;(2)做爲一個階段性的模型。連續的CMMI模型從兩個維度描述過程;每一個過程域都根據特定的目標和實踐要求,進行嚴格的評估,並根據能力水平定義爲如下幾級:不徹底級;已執行級;已管理級;已定義級;以定量管理級;優化級。框架
過程模型提供了一個模版,一種描述軟件過程當中重要特徵的一致性方法,經過模式組合,軟件團隊能夠定義能最好知足項目需求的開發過程。模塊化
過程評估用來確認知足了成功軟件工程所必須的基本過程和標準要求。主要的軟件過程評估方法有:用於過程改進的標準CMMI評估方法Standard CMMI Assessment Method for Process Improvement, SCAMPI;用於組織內部過程改進的CMM評估CMM-Based Appraisal for Internal Process Improvement, CBA IPI;SPICE (ISO/IEC 15504);軟件ISO 9001:2000工具
我的軟件過程Personal Software Process PSP強調對產品以及產品質量的我的測量;PSP過程模型定義了5各框架活動:策劃、高層設計、高層設計評審、開發、後驗性能
團隊軟件過程Team Software Process TSP目標是創建一個可以自我管理的項目團隊,團隊能自我組織進行高質量的軟件開發;TSP定義瞭如下框架轟動:項目啓動、高層設計、實現、集成、測試以及後驗。學習
過程技術工具是用來對模型進行調整,以幫助軟件開發組織分析現有過程、組織工做任務、控制並監測過程進度和管理技術質量測試
慣例過程模型規定了一套過程元素,包括框架活動、軟件工程動做、任務、工做產品、質量保證以及每一個項目的變動控制機制,每一個過程模型還定義了工做流,也就是過程元素之間的項目關聯的方式。如常見的瀑布模型、增量過程模型、演化過程模型、專用過程模型、統一過程等都是慣例過程模型的一種。優化
瀑布模型,又稱爲經典生命週期,是一個系統的、順序的軟件開發方法,從用戶需求規格說明書開始,經過策劃、建模、構建和部署的過程,最終提供一個完整的軟件並提供持續的技術支持。
增量過程模型在初始的軟件需求有明肯定義,可是整個開發過程卻不宜單純運用線性模型的時候,可能須要爲用戶迅速提供一套功能有限的軟件產品,而後在後續的版本中再細化和擴展功能。增量過程模型能夠分爲增量模型和RAD模型。增量模型以迭代的方式運用瀑布模型。快速應用程序開發Rapid Application Development RAD是一種側重於短暫的開發週期的增量軟件過程模型,是瀑布模型的高速變體,經過基於構件的構建方法實現快速開發,可是須要考慮到人力資源、項目可以合理模塊化、系統性能和模塊接口之間的關係還有就是技術風險這些因素。
演化過程模型是迭代的過程模型,當複雜系統在開發過程當中業務和產品需求常常發生變化,直接致使最終產品難以實現,嚴格的交付事件又使得開發團隊不可能圓滿完成軟件產品,可是必須交付功能有限的版原本應對競爭或行業壓力;也有些時候很地理解了產品和系統需求,可是產品或系統擴展的細節問題卻沒有定義,這個時候可使用演化模型。演化過程模型有原型開發和螺旋模型以及協同開發模型。原型開發在客戶沒法詳細定義輸入、處理和輸出需求的時候,快速設計一個原型,對原型進行部署,而後由客戶或者用戶進行評價,根據反饋進一步細化軟件的要求,可是其缺點是客戶容易忽略原型的欺騙做用。螺旋模型結合了原型的迭代性質和瀑布模型的系統性和可控性特色,具備兩個顯著的特色:一是採用循環的方式逐步加深系統定義和實現的深度,同時下降風險;而是肯定一系列里程碑,確保共利益者都支持可行的和使人滿意的系統解決方案。螺旋模型被分割成一些列由軟件工程團隊定義的框架活動,每一個框架活動表明螺旋上的一個片斷,隨着演進過程開始,從圓心開始順時針方向,軟件團隊執行螺旋上的一圈表示的活動,在每次演進的時候,都要考慮風險,每一個演進過程還要標記里程碑。協同開發模型可表示爲一系列框架活動、軟件工程動做和任務以及相應的狀態,協同過程模型定義了一系列事件,這些事件將觸發軟件工程活動、動做或者任務的狀態轉換。
專用過程模型一般應用面狹窄,僅適用於某些特定的軟件工程方法。基於構件的開發中,構件一般是經過良好定義的接口提供特定的功能,而後可以集成到軟件中去。形式化方法模型的主要活動是生成計算機軟件形式化的數學規格說明,使用嚴格的數學符號來講明、開發和驗證基於計算機的系統,他的一個變型也被稱爲淨室軟件工程。面向方面編程Aspect-Oriented Programming AOP爲定義、說明、設計和構建方面aspect提供過程和方法,是對橫切關注點局部表示的一種機制,超越了子程序和繼承的方法。
統一過程討論了創建一種」用例驅動、以架構爲核心,迭代並增量「的軟件過程的必要性,統一過程Unified Process嘗試從傳統軟件過程當中挖掘最好的特徵和性質,可是以敏捷軟件開發中許多最好的原則來實現。UP主要包含四個階段:起始階段,包括客戶溝通和策劃活動,定以軟件的業務需求,提出系統大體的架構,並制定開發計劃以保證項目具備迭代和增量的特性;構建階段,採用體系結構模型做爲輸入,開發或獲取軟件構建,使得最終用戶可以操做用例;轉換階段,軟件被提交給最終用戶進行Beta測試,用戶反饋報告缺陷及必要的變動,另外軟件開發團隊建立系統發佈所必要的支持信息,在轉換階段結束時,軟件增量成爲可用的發佈版本;生產階段,監控軟件的持續使用,提供運行環境的支持,提交併評估缺陷報告和變動請求。
敏捷宣言:咱們正在經過親身實踐以及幫助其餘人實踐的方式來揭示更好的軟件開發之路,經過這項工做,咱們認爲:個體和交互賽過過程和工具、可工做軟件賽過寬泛的文檔、客戶合做賽過合同談判、響應變化賽過遵循計劃,亦即,雖然說上述右邊的各項頗有價值,但咱們認爲左邊的各項具備更大的價值。
敏捷聯盟爲但願達到敏捷的人們定義了12條原則:咱們最優先要作的是經過儘早、持續交付有價值的軟件來使客戶滿意;即便在開發的後期,也歡迎需求變動,敏捷過程利用變動爲客戶創造競爭優點;常常交付可工做的軟件,交付的間隔能夠從幾個星期到幾個月,交付的時間間隔越短越好;在整個項目開發期間,業務人員和開發人員必須每天都一塊兒工做;圍繞受激勵的我的構建項目,給他們提供所需的環境和支持,而且信任他們可以完成工做;在團隊內部,最富有效果和效率的信息傳遞方法是面對面交談;可工做軟件是進度的首要度量標準;敏捷過程倡導可持續的開發速度,負責人、開發者和用戶應該可以保持一種長期、穩定的開發速度;不斷地關注優秀的技能和好的設計會加強敏捷能力;簡單,使不須要的工做最大化的藝術是必要的;好的架構、需求和設計出自於自組織團隊;每一個必定事件,團隊會檢討如何才能更有效地工做,並相應調整本身的行爲。
敏捷過程基於三個假設:提早預測哪些需求是穩定的和哪些需求會變化很是困難;對不少軟件來講,設計和構建是交錯進行的;從制定計劃的角度來看,分析、設計、構建和測試並不像咱們所設想的那麼容易預測。所以如何創建能解決不可預測性的過程,敏捷給出的答案是答案的自適應性,而且是增量地適應。
敏捷軟件開發很是強調人的因素,主要包括:基本能力;共同目標;精誠合做;決策能力;模糊問題解決能力;相互信任和尊重;自我組織
敏捷過程模型主要有極限編程、自適應軟件開發、動態系統開發方法、Scrum、Crystal和敏捷建模幾種方法。極限編程eXtreme Programming XP使用面向對象方法做爲推薦的開發泛型,包含了策劃、設計、編碼和測試四個框架活動的規則和實踐。自適應軟件開發Adaptive Software Development ASD的聲明週期定義包含思考、協做和學習三個階段。動態系統開發方法Dynamic System Development Method DSDM是一種提供」經過在可控項目環境中使用增量原型開發模式徹底知足對時間有約束的系統的構建和維護「的敏捷軟件開發方法,DSDM聲明週期定義了3各不一樣的迭代循環,前面還有兩個生命週期活動:可行性研究、業務研究、功能模型迭代、設計和構建迭代、實現。Scrum強調使用一系列軟件過程模式,這些模式被證明在時間緊張的、需求變化的和業務關鍵的項目中是有效的,每個過程模式定義一系列開發活動:待定項backlog、衝刺sprint、Scrum例會、演示。Crystal的目的是發展一種提倡機動性的軟件開發方法,其首要目標是交付有用、可工做的軟件,其第二目標是爲下一次行動作準備。特徵驅動開發Feature Driven Development FDD,定義了五中協做框架活動:開發全局模型、構造特徵列表、特徵計劃、特徵設計、個整構建。敏捷建模Agile Modeling是一種用於對軟件系統有效建模和文檔化的實踐方法學,其主要特色是有目的的建模、使用多個模型、前進燈、內容終於表述形式、理解建模及工具、適應本地須要。