軟體工程-軟體工程概論
(一) 軟體危機、軟體工程的產生
軟體危機定義:在計算機開發和維護過程中遇到的一系列嚴重問題
主要包含兩方面:如何開發軟體以滿足對軟體日益增長的需求;如何維護數量不斷膨脹的已有軟體;
表現:
(1)開發成本和進度估計不準
(2)使用者對已交付的軟體不滿意
(3)軟體產品質量靠不住
(4)軟體可維護性差
(5)軟體沒有適當的文件資料
(6)軟體成本在計算機系統總成本所佔比例逐年上升
(7)軟體開發產生率跳的的速度,遠遠跟不上計算機應用速度普及及深入的趨勢
軟體危機產生原因:
(1)軟體本身特點造成:軟體規模龐大,而且程式複雜性將隨著程式規模的增加而呈指數上升;軟體是計算機系統的邏輯部件而非物理部件,其顯著特點是缺乏可見性,管理和控制軟體開發過程困難;
(2)軟體開發與維護的方法不正確:忽略軟體需求分析的重要性;認為軟體開發就是寫程式並使之執行;輕視軟體維護
消除軟體危機的途徑
(1)推廣使用在實踐中總結出來的開發軟體的成功的技術和方法,並研究探索更有效的技術和方法。
(2)開發和使用更好的軟體工具
(3)應對計算機軟體有一個正確的認識
(4)充分認識軟體開發是組織良好、管理嚴密、各類人員協同合作、共同完成的工程專案,即良好的組織管理措施
(二) 軟體的概念、軟體工程的定義
軟體工程定義:1993年IEEE的定義:把系統化、規範化、可度量化的途徑應用於軟體開發、執行和維護過程中,研究其實現途徑
軟體工程內容
(1)軟體工程技術:方法、過程、工具
(2)軟體工程管理:管理學、經濟學、心理學
軟體工程本質特性
(1)軟體工程關注於大程式的構造
(2)軟體工程中心課題是控制複雜性
(3)軟體經常變化
(4)軟體工程的效率非常重要
(5)和諧地合作是開發軟體的關鍵
(6)軟體必須有效地支援它的使用者
(7)在軟體工程領域中通常由具有一種文化背景的人替具有另一種文化背景的人創造產品
軟體工程的7個基本原理
(1)用分階段的生命週期計劃嚴格管理
(2)堅持進行階段評審
(3)實行嚴格的產品控制
(4)採用現代程式設計技術
(5)結果能清楚地審查
(6)開發小組的人員應該少而精
(7)承認不斷改進軟體工程實踐的必要性
軟體工程方法學3要素:方法、工具、過程
目前使用最廣泛的軟體工程方法學:傳統方法學、、面向物件方法學
面向物件方法學4個要點
(1)物件:把物件作為融合了資料及在資料上的操作行為統一的軟體構件。
(2)分類:把所有物件都劃分成類
(3)繼承:按照父類與子類的關係組成一個層次結構的系統
(4)通過訊息的通訊:物件彼此之間僅能通過訊息相互聯絡。
軟體發展
程式設計階段
程式系統階段:軟體危機產生
軟體工程階段:軟體危機的到緩解
集中主機式
客戶機/伺服器(二層)
客戶機伺服器(三層):BS、CS
第四階段:新技術、專家系統、神經網路、平行計算機、網路技術、高信度計算、雲端計算、人工智慧
軟體定義:1983年IEEE的軟體工程的定義:計算機程式、文件、執行程式必須的資料、方法、規則。即程式+文件+資料
軟體的分類
系統軟體:與計算機硬體緊密配合是計算機各個部件與相關軟體及資料協調、高效工作。
支撐軟體:協助使用者開發軟體的工具
應用軟體:有兩種分類方式
1、基於軟體功能的劃分
(1)商業資料處理軟體:公司銷售系統
(2)工程與科學計算軟體:CAD/CAM(計算機輔助設計/製造)、模擬模擬
(3)智慧產品嵌入軟體:家用電器,智慧手機
(4)人工智慧軟體:利用非數值演算法去解決複雜問題的軟體,如專家系統:具有某領域知識和經驗;模式識別軟體:視網膜識別;人工神經網路軟體(莫扭人類大腦工作)
(5)個人計算機軟體:文書處理系統,電子表格,遊戲娛樂軟體
2、專案規模大小劃分
型別 | 參加人員數 | 開發週期 | 產品規模(1k = 1000行) |
微型 | 1 | 1~4周 | 0.5k |
小型 | 1 | 1~6月 | 1k~2k |
中型 | 2~5人 | 1~2年 | 5k~50k |
大型 | 5~20人 | 2~3年 | 50k~100k |
甚大型 | 100~1000人 | 4~5年 | 1M=1000k |
極大型 | 2000~5000人 | 5~10年 | 1M-10M |
(三) 軟體工程的研究物件與基本原理
(四) 軟體工程工具和環境
(五) 軟體生存週期
定義:軟體從產生、發展到成熟、直到衰亡為止
軟體生命週期各個階段:詳細檢視軟體工程生命週期各個階段完成的任務
問題定義
可行性研究
需求分析
總體設計(概要設計)
詳細設計
編碼與單元測試
綜合測試
維護
(六) 軟體過程模型
軟體過程:是為了獲得高質量軟體所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。
(1)瀑布模型:使用最早、應用最廣
特點:①階段間具有順序性和依賴性②推遲實現觀點③質量保證的觀點
優點:採用規範化的方法;嚴格規定了每個階段提交的文件;每階段階段交出的產品必須經過驗證(提高軟體質量,降低維護成本,緩解軟體危機)
缺點:缺乏靈活性,無法解決需求不明確的問題,在可執行的軟體產品交付給使用者之前,使用者只能通過文件來了解產品。開發人員和使用者之間缺乏有效的溝通,很可能調至最終開發出的軟體產品不能真正滿足使用者需求。
(2)快速原型模型
快速建立反應使用者主要需求的原型系統,反覆有使用者評價修正需求,開發最終產品
優點:有助於保證使用者的真實需求得到滿足;軟體產品的開發基本上是現行順序進行。
缺點:所選用的開發技術和工具不一定符合主流的發展;快速建立起來的系統結構加上連續的修改可能會導致產品質量低下。
(3)增量模型
開發軟體時將軟體產品做一系列增量構件設計、編碼、整合和測試
優點:能較短時間內提交可完成部分工作的產品;可使使用者有充裕的時間學習和適應新產品;軟體結構必須是開放的,方便性現有產品加入新構件
缺點:做到軟體結構必須是開放的比較困難
(4)螺旋模型:1988年B.Boehem提出,加入風險分析過程的快速原型模型,常指導大型軟體專案
軟體風險:超期、超預算、行業競爭等
四方面活動
優點:大型軟體開發專案有較好的風險控制
缺點:需要風險評估的經驗;契約開發通常需要事先指定過程模型和釋出產品;普及不如前述模型
(5)噴泉模型:面向物件生命週期模型,體現迭代和無縫特性
迭代:求精,系統某部分常被重複工作多次,相關功能在每次迭代中逐漸加入演進系統。
無縫:分析、設計、編碼各階段間不存在明顯邊界。
特點:無縫,可同步開發,提高開發效率,節省開發時間適應面型物件軟體
缺點:可能隨時加入各種資訊,需求與資料,需要嚴格管理文件稽核難度大
(6)Rational統一過程:由Rational軟體公司推出一種軟體過程,強調以迭代和漸增方式開發軟體。是一個二維宣告週期模型
(7)微軟過程
規劃階段-》設計階段-》開發階段-》穩定階段-》釋出階段-》下一次開發
每個階段評審要求:專案的目標得到認可;軟體設計完成;程式碼開發完成;可釋出版本準備就緒;最終產品釋出