軟體工程基礎知識
一.軟體危機
(1)概念:軟體危機是指在計算機軟體開發、使用與維護過程中遇到的一系列嚴重問題和難題。
(2)產生軟體危機的原因主要有:
①軟體的規模越來越大,結構越來越複雜
②軟體開發管理困難而複雜
③軟體開發費用不斷增加
④軟體開發技術落後
⑤生產方式落後
⑥開發工具落後,生產率提高緩慢
(3)軟體危機的表現有:
①經費預算經常突破,完成時間一再拖延
②開發的軟體不能滿足使用者需求
③開發的軟體可靠性差
④開發的軟體可維護性差
二.軟體工程
(1)概念
軟體工程是指用工程、科學和數學的原則與方法開發、維護計算機軟體的有關技術和管理方法。
(2)軟體工程的三要素
方法、過程、工具
三.常見的軟體開發模型
(1)原型模型
a.適用場合
原型模型適合於那些不能預先確切定義需求的軟體系統的開發,更適合於那些專案組成員(包括分析員、設計員、程式設計師和使用者)不能很好交流或通訊有困難的情況。
b.特點
及早提供工作軟體
(2)瀑布模型
a.定義
將軟體生存週期各個活動規定為依線性順序連線的若干階段的模型,又稱為生存週期模型。
b.適用場合
瀑布模型一般適用於功能、效能明確、完整、無重大變化的軟體系統的開發。例如作業系統、編譯系統、資料庫管理系統等系統軟體的開發。
c.特點
文件驅動、線性
d.缺點
1)在軟體開發的初期階段就要求做出正確、全面、完整的需求分析,這對許多應用軟體來說是極其困難的
2)在需求分析階段,當需求確定後,無法及時驗證需求是否正確、完整
3)不支援產品的演化,缺乏靈活性,使軟體產品難以維護
(3)螺旋模型
a.定義
是一種將瀑布模型和快速原型模型結合起來的軟體開發模型
b.適用場合
螺旋模型支援需求不明確、特別是大型軟體系統的開發,並支援面向規格說明、面向過程、面向物件等多種軟體開發方法,是一種具有廣闊前景的模型
c.特點
支援使用者需求的動態變化、風險分析
(4)增量模型
a.定義
分成多個子系統進行開發,最後整合起來
(5)噴泉模型
a.定義
噴泉模型是一種以面向物件的軟體開發方法為基礎,以使用者的需求為動力,以物件來驅動的模型
四.結構化分析方法(SA)
(1)概念
結構化分析方法是面向資料流進行需求分析的方法。結構化分析方法使用資料流圖DFD與資料字典DD來描述,面向資料流問題的需求分析適合於資料處理型別軟體的需求描述。其核心思想是自頂向下、逐層分解。
(2)常見的工具
2.1 資料字典【DD】
a.包括的條目
資料流+資料儲存+加工說明+資料項(一般不包含源點與終點)
b.定義
資料字典是系統描述工具中的資料的工具,是對資料定義資訊的集合,其所定義的物件都包含於資料流圖。
2.2 資料流圖【DFD】
a.定義
資料流圖是SA方法中用於表示系統邏輯模型的一種工具,以圖形的方式描繪資料在系統中流動和處理的過程,反映系統必須完成的邏輯功能,是一種功能模型。
b.四種符號元素
符號 | 含義 |
---|---|
方框 | 源點與終點 |
箭頭 | 資料流 |
圓/橢圓 | 加工 |
雙槓 | 資料儲存 |
(3)資料字典+資料流圖=系統的邏輯模型
五.結構化設計方法(SD)
(1)定義
結構化設計要解決的任務,就是在需求分析的基礎上,將DFD圖對映為軟體系統的結構。換句話說,這類設計方法允許把用DFD圖表示的系統邏輯模型方便地轉換成對於軟體結構的初始設計描述。
從結構化分析到結構化設計工具的轉變:
結構化分析結果 | 結構化設計結果 |
---|---|
資料流圖的資訊 | 程式結構的設計描述 |
(2)一般分為兩個階段
總體設計(概要設計)+詳細設計
(3)基本要點
(1)採用自頂向下,逐步求精的程式設計方法。
(2)使用三種基本控制結構構造程式,分別是順序,選擇和迴圈
(3)採用主程式設計師制的組織形式。
(4)採用單入口單出口的模組形式。
六.軟體生存週期
①軟體定義過程:可行性研究+需求分析
②軟體開發過程:設計(概要設計、詳細設計)+實施(編碼+單元測試)+測試(整合測試+確認測試)
③軟體使用與維護過程:使用與維護+退役
七.概要設計 VS 詳細設計
概要設計 | 詳細設計 |
---|---|
又稱結構設計(總體設計) | 又稱過程設計(模組設計) |
軟體需求——>軟體表示 | 模組功能——>精確的、結構化的過程描述 |
資料庫的”邏輯設計” | 資料庫的”物理設計” |
任務是確定每個模組的功能和介面,資料結構和資料庫設計,編寫概要設計文件,以及評審 | 任務是確定每個模組的內部特性(具體執行過程),即模組的演算法和資料庫的物理設計 |
無 | 採用的工具:圖形(程式流程圖、盒圖,即N-S圖、PAD圖)、表格(判定表)、語言(過程設計語言,即PDL) |
八.軟體測試
(1)概念
軟體測試指為了發現軟體中的錯誤而執行軟體的過程。它的目標是儘可能多地發現軟體中存在的錯誤,將測試結果作為糾錯的依據。
(2)目的
① 軟體測試是為了發現錯誤而執行程式的過程。
② 一個好的測試用例能夠發現至今尚未發現的錯誤。
③ 一個成功的測試是發現了至今尚未發現的錯誤。
(注:軟體除錯的目的則是改正錯誤。)
(3)階段
【注:由於系統測試實際上超出了軟體工程的範疇,故這裡沒有詳細說明。】
階段順序 | 單元測試 | 整合測試 | 確認測試 | 系統測試 |
---|---|---|---|---|
測試方法 | 白盒測試 | 漸增式測試(包括:自頂向下結合法,自底向上結合法)+非漸增式測試 | 黑盒測試 | |
發現錯誤的階段 | 編碼階段 | 設計階段 | 需求分析階段 | |
涉及的文件 | 編碼和詳細設計文件 | 詳細設計文件和概要設計文件 | 需求規格說明書和使用者手冊 |
(4)方法
a.黑盒測試——把測試物件看成一個黑盒子,只在軟體的介面處進行測試,依據需求規格說明書,檢查程式是否滿足功能要求,又稱為功能測試或資料驅動測試。
測試手段:等價類劃分、邊界值分析、錯誤推測法、因果圖
b.白盒測試——把測試物件看成一個透明的盒子,對程式中的邏輯路徑進行測試,檢查內部控制結構和資料結構是否有錯,實際的執行狀態與預期的狀態是否一致。
測試手段:邏輯覆蓋(語句覆蓋,判定覆蓋,條件覆蓋,判定條件覆蓋,條件組合覆蓋,路徑覆蓋)、基本路徑測試、迴圈覆蓋
九.模組獨立性
模組獨立性是軟體設計的基本原則之一,其他的幾個分別是:模組化,抽象,資訊隱藏。模組獨立指每個模組只完成系統要求的獨立的子功能,並且與其他模組的聯絡最少且介面簡單。衡量模組獨立性有兩個標準——耦合性和內聚性,模組劃分時應做到高內聚,低耦合,從而提高模組的獨立性。
①內聚
模組之間聯絡越緊密,其內聚性越強。
②耦合
模組的耦合性由低到高依次是:
非直接耦合(不傳遞任何資訊),資料耦合(傳遞資料值),標記耦合(傳遞資料結構),控制耦合(傳遞控制變數),外部耦合,公共耦合,內容耦合。
一般來說,在傳遞資訊型別上儘量使用資料耦合,避免控制耦合,慎用或有控制地使用公共耦合。
十.其他知識點
【N-S圖】
START
a
IF x1 THEN
REPEAT UNTIL x2
b
END REPEAT
ELSE
BLOCK
C
D
END BLOCK
END IF
STOP
偽碼
START
S1
if(x>5);
else S2;
i:=1;
DO S3,i:=i+i;
while i<3
if(y<0) S4;
else S5;
END
【PAD圖】
畫出下面用PDL寫出的程式的PAD圖。
WHILE P DO
IF A >O THEN A1 ELSE A2 ENDIF;
S1;
IF B>0 THEN B1;
WHILE C DO S2;S3 ENDWHILE;
ELSE B2
ENDIF;
B3
ENDWHILE;
【資料流圖】
用SA方法畫出下列問題的頂層和0層資料流圖。
某運動會管理系統接受來自運動員的報名單、裁判的比賽專案及專案成績,產生運動員號碼單傳送給運動員,專案參加者傳送給裁判,單項名次、團體名次傳送給釋出臺。該系統有兩部分功能:
(1)登記報名單:接受報名單、比賽專案,產生運動員號碼單、專案參加者,形成運動員名單及團體成績表兩種資料儲存。
(2)統計成績:接受專案成績,查詢運動員名單,產生單項名次,填寫團體成績,最後產生團體名次。
【面向物件方法較之結構化方法的優越性】
(1)面向物件方法更符合人的思維方式,更容易抓住問題的主幹;
(2)所開發出的軟體更符合“高內聚,低耦合”的軟體設計原則,因此其模組的獨立性更強;
(3)更適合於開發大型的軟體,更適合於快速原型法開發方法,使軟體生產率大大提高;
(4)使用面向物件技術開發出的軟體,其可測試性和可維護性都較強;
(5)面向物件方法和技術能夠貫徹軟體開發的全過程,從分析、設計、編碼到測試維護,採用面向物件的方法不存在語義斷層,使人的思維保持連貫,減少各階段之間的不相融性;
(6)使得軟體的可重用性大幅度提高。