1. 程式人生 > >軟體工程基礎知識

軟體工程基礎知識

一.軟體危機 
(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 

IF x1 THEN 
REPEAT UNTIL x2 

END REPEAT 
ELSE 
BLOCK 


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)使得軟體的可重用性大幅度提高。