1、軟件工程的概念
軟件工程是指導計算機軟件開發和維護的一門學科,采用工程的概念、原理、技術和方法來開發與維護軟件,把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來,以經濟有效的開發出高質量的軟件並有效維護它。
2、軟件工程的基本原則
-
用分階段的生命周期計划嚴格管理
-
堅持進行階段評審
-
采用嚴格的產品控制
-
采用現代程序設計技術
-
應能清楚審查結果
-
合理安排開發小組的成員
3、軟件生命周期模型
軟件生命周期模型是跨越整個生命周期的系統開發、運作、維護所實施的全部工作和任務的結構框架
4、瀑布模型的優缺點以及適用范圍
-
優點:
-
階段間具有順序性和依賴性
-
保證了軟件產品及時交付並達到預期的質量要求
-
-
缺點:
-
缺乏靈活性
-
開發過程一般不能逆轉
-
規格說明很難理解
-
軟件的實際情況必須到項目開發的后期客戶才能看到
-
-
適用范圍:
-
在開發時間內需求沒有或很少變化;
-
分析設計人員應對應用領域很熟悉;
-
低風險項目(對目標、環境很熟悉);
-
用戶使用環境很穩定;用戶除提出需求以外,很少參與開發工作。
-
5、螺旋模型的優缺點以及適用范圍
-
優點
-
容易確定什么時候以及對某一階段的產品測試完畢
-
維護與開發之間沒有本質上的差別
-
-
缺點
-
需要具有相當豐富的風險評估經驗和專門知識,在風險較大的項目開發中,如果未能夠及時標識風險,會造成重大損失;
-
-
適用范圍
-
螺旋模型只適合於大規模的軟件項目。
-
6、原型模型的優缺點以及適用范圍
-
優點
-
原型模型可作為培訓環境,有利於用戶的開發和培訓同步
-
可以低風險的開發較大的計算機系統
-
更易維護、生成對用戶更友好的系統
-
使總的費用降低、開發時間縮短
-
-
缺點
-
對於開發者不熟悉的領域,可能會把次要部分當做主要框架,從而作出不切實際的原型
-
原型迭代不收斂於開發者預先定義的目標,為了消除錯誤,每次更改,次要部分越來越大,淹沒了主要部分
-
原型過快收斂於集合,忽略了一些基本點
-
資源規划和管理較為困難,隨時更新文檔也會帶來麻煩
-
長期在原型上開發,只注意得到滿意的原型,容易遺忘用戶環境和原型的差異
-
-
適用范圍
-
對所開發的領域比較熟悉而且有快速的原型開發工具;
-
項目招投標時,可以以原型模型作為軟件的開發模型;
-
進行產品移植或升級時,或對已有產品原型進行客戶化工作時,原型模型是非常適合的。
-
8.增量模型的優缺點以及適用范圍
-
優點:
-
每個階段交付一個可用的產品
-
減少一個全新產品給用戶帶來的心理上的影響
-
分階段的交付產品,不需要大的資金支出
-
需求經常變化,增量模型的靈活性使其具有更加優越的適用性
-
-
缺點
-
需要一個開放的結構,方便構件的加入
-
增量模型本身就是一個矛盾的名詞
-
-
適用范圍
-
進行已有產品升級或新版本開發,增量模型是非常適合的;
-
對完成期限嚴格要求的產品,可以使用增量模型;
-
對所開發的領域比較熟悉而且已有原型系統,增量模型也是非常適合的。
-
9、軟件開發方法
-
結構化方法:強調結構的合理性,以及所開發軟件的合理性,由此提出了一組提高軟件結構合理性的准則,如抽象和分解,模塊的獨立性,信息屏蔽等,針對不同的開發活動,有結構化分析,結構化設計,結構化編程和結構化測試等
-
分析步驟:
-
進行系統分析,作出反映當前物理模型的數據流圖
-
推導出等價的邏輯模型的數據流圖
-
設計新的邏輯系統,生成數據詞典描述
-
建立人機接口界面,提出可供選擇的目標系統的物理模型數據流圖
-
確定各種方案的成本和風險等級,據此對各種方案進行分析
-
選擇一種方案,建立完整的需求規約
-
-
結構化設計的步驟
-
評審和細化數據流圖
-
確定數據流圖的類型
-
把數據流圖映射到軟件模塊結構,設計出模塊結構的上層
-
基於對數據流圖逐步分析到高層模塊,設計中下層模塊
-
對軟件結構進行優化,得到更為合理的軟件結構
-
描述模塊結構
-
-
面向對象方法:
-
從問題陳述入手,構造系統模型
-
逐層分解成各級子系統
-
10、需求的定義以及分類
-
需求是指明系統必須實現什么的規格說明,它描述系統的行為、特性或屬性,是在開發過程中對系統的約束
-
需求的類別:
-
功能需求
-
性能需求
-
可靠性和可用性需求
-
出錯處理需求
-
接口需求
-
約束
-
逆向需求
-
將來可能提出的要求
-
11、軟件結構的目標
軟件設計過程最終目標是產生一個設計規約,該規約包括描述數據,體系結構,接口和構件的設計模型
12、軟件設計包括的內容
-
數據設計
-
體系結構設計
-
接口設計
-
過程設計
13、軟件設計的任務
分兩個階段完成
-
概要設計,即總體設計,目標是解決“從總體上看,系統怎樣實現”這個問題
-
詳細設計階段,即過程設計,根本目標是解決”系統怎樣具體實現“這一問題
14、模塊獨立性的定義
-
概括了把軟件划分為模塊時要遵守的准則,也是判斷模塊構造是不是合理的標准,同時也是模塊化及信息隱藏概念的直接產物
-
獨立性可以從兩方面度量,即模塊本身的內聚和模塊之間的耦合,后者指模塊之間相對獨立性的度量,模塊的獨立性越高,則內聚越強,耦合越弱
15、軟件程序結構的啟發式准則與優化
-
改進軟件結構,降低耦合提高內聚,以提高模塊的獨立性
-
控制模塊規模,模塊規模應該適中(10-100)(30-60)
-
保持適當的扇入和扇出
-
模塊的作用域應該控制在作用域內
-
降低模塊接口的復雜程度冗余並提高一致性
-
定義功能可以預測的模塊,但要避免過分限制性的模塊
-
設計單入口單出口的模塊
16、軟件設計說明書的定義以及包括的內容
-
定義:是軟件設計的最終成果,既可作為軟件設計階段編碼人員書寫源程序的依據,也可作為軟件測試階段及維護階段的一個指南
-
包括內容:
-
作用范圍
-
參考文檔
-
數據設計
-
體系結構設計
-
接口設計
-
模塊的過程設計
-
需求與模塊的相互對照表
-
測試准備
-
其他
-
17、設計復審
-
對設計文檔的復審
18、數據流與事物流
-
數據流:將具有明顯的輸入、變換和輸出的數據流圖稱為變換型數據流圖
-
事物流:具有某個加工將它的輸入分離成一串的數據流,形成許多活動路徑並根據輸入的值選擇其中一條路徑的特征的數據流圖稱為事務性數據流圖
19、測試概念
-
執行程序或程序片段發現程序中尚存錯誤的過程
20、軟件測試概念
-
用人工或自動方法執行的執行並評價軟件產品或其部件的過程,以驗證他是否滿足規定的要求,或是識別期望結果與實際結果有無差別
21、軟件測試的意義
-
當今一個軟件產品,如果沒有經過測試是不能交付使用的
-
軟件測試能夠有效的發現軟件中的絕大多數錯誤,是保證軟件質量的關鍵技術之一
-
隨着人們對軟件測試重要性的認識越來越深。軟件測試階段在整個開發周期所占的比重也日益增加
-
現在有些軟件開發機構將研發力量的40%以上投入到軟件測試中,對於某些性命攸關的軟件,其測試費用甚至高達所有其他軟件工程階段費用的3到5倍
22、軟件測試的目的
希望以最低代價,以盡可能的找出軟件中潛在的各種錯誤和缺陷
23、軟件測試原則
-
盡早地,不斷地進行測試
-
嚴格的執行測試計划,排除測試的隨意性
-
妥善保存測試計划,測試用例,出錯統計和最終分析報告,為影虎提供方便
-
一個好的測試用例往往是具有較高的發現至今尚未發現的錯誤的能力,而不是那些表明程序能夠正常工作的測試用例
-
測試中一個很困難的問題是要判定合適可以終止測試
-
避免讓程序員測試自己的程序
-
每個階段的測試用例都必須包含測試輸入數據和對應預期輸出的描述
-
設計測試用例應當包含合法的輸入條件和非法的輸出條件
-
全面徹底的檢查每一個測試結果
24、測試方法
-
靜態測試:審閱(結構化走通)和檢查(fagan檢查)
-
動態測試:黑盒測試和白盒測試
-
白盒測試:邏輯覆蓋喝條件測試
-
邏輯覆蓋:語句覆蓋、判定覆蓋、條件組合覆蓋、判定-條件覆蓋
-
軟件測試過程:單元測試、集成測試、確認測試、系統測試
25、軟件維護
-
系統軟件交付使用后,為了改正軟件運行錯誤或者因滿足新的需求而加入新功能的修改軟件的過程
-
類型:
-
糾錯性維護
-
適應性維護
-
完善性維護
-
預防性維護
-
-
影響軟件維護成本的主要因素
-
系統的規模
-
開發的條件
-
系統的年齡
-
開發的方法和技術
-
其他
-
26、軟件可維護性
指維護人員為糾正軟件系統出現的錯誤和缺陷,以及為滿足新的要求而理解,修改和完善軟件系統的難易程度
27、軟件可維護性的質量特性·
-
可理解性
-
可測試性
-
可修改性
-
可靠性
-
可以執行
-
可使用性
-
效率
28、軟件可維護性的度量
-
易分析性
-
易修改性
-
穩定性
-
易測試性
-
依從性
29、提高軟件可維護性的方法
-
建立明確的軟件質量目標和優先級
-
使用提高軟件質量的技術和工具
-
進行明確的質量保證審查
-
選擇可維護的程序設計語言
-
改進程序的文檔
30、軟件維護的副作用
-
代碼的副作用
-
數據的副作用
-
文檔的副作用
40.軟件再工程
對既存軟件系統進行調查,並將其重構為新形式代碼的開發過程
41、軟件再工程的方法
-
大爆炸方法
-
-
演化方法
42、軟件再工程過程
-
庫存目錄分析
-
文檔重構
-
逆向工程
-
代碼重構
-
數據重構
-
正向工程