軟件工程 系列爲本學期(2020春季)軟件工程以及軟件工程實踐課程筆記整理~
轉眼間6月份快要到來了,考試要臨近了~
問題:一個軟件經過各種測試後沒問題,但到用戶電腦上無法運行,給出解決方案?(預計會成爲今年的考試題,嘿嘿哈嘿,自己猜的)
系統集成:將模塊中各自的數據結構、彼此之間不能識別的數據等進行系統地聯合與測試,使得信息能夠在模塊之間相互流通。
軟件測試:利用測試技術儘可能多得發現軟件中存在的錯誤,發現軟件的功能、性能等與實際需求不相符之處,通過測試,讓軟件中存在的錯誤在交付給用戶之前暴露無遺,從而交付給用戶一個質量可靠、性能良好的軟件。
目錄
一、系統集成
1.系統集成基本概念
(1)通過結構化綜合佈線系統和計算機網絡技術,將各個分離的設備(計算機、傳感器等)和信息(軟件模塊)集成到相互關聯的、統一和協調的系統之中;使資源充分共享,實現集中、高效和便利的管理;
(2)系統集成應該採用功能集成、網絡集成、軟件界面集成等多種集成技術;
(3)系統集成應綜合利用各種計算機網絡相關技術,適當選擇各種軟、硬件設備,經過相關人員的集成設計、安裝調試、應用開發等大量技術性工作和相應的管理及商務性工作,使集成後的系統能滿足用戶對實際工作的需求,形成一個具有良好性能和適當性價比的計算機網絡系統。
2.系統集成包括設備系統集成和應用系統集成兩個方面
(1)設備系統集成:以搭建組織機構內的信息化管理支持平臺爲目的,利用綜合佈線技術、樓宇自控技術、通信技術、網絡互聯技術等將相關設備和軟件進行集成設計、安裝調試、界面定製開發和應用支持的行爲。
(2)應用系統集成:從爲客戶提供高性能系統應用的角度,提出及實現系統模式的具體技術和運作方案,即爲客戶提供一個全面的系統解決方案。
3.系統集成的特點:
(1)以滿足用戶的需求爲根本的出發點
(2)系統集成不是選擇最好的產品的簡單行爲,而是選擇最適合用戶需求和投資規模的產品和技術
(3)不是簡單的設備供貨,體現更多的是設計、調試與開發的技術和能力
(4)包含技術、商務和管理等方面,是綜合性的系統工程:技術是核心,管理和商務活動是系統集成項目成功實施的可靠保障
(5)性價比的高低是評價集成項目設計是否合理和實施是否成功的重要參考因素
二、系統測試
1.軟件測試:是發現錯誤的重要手段,能夠發現分析和需求階段產生的多數錯誤,是取得高可靠軟件質量的重要措施之一。
2.軟件測試的目的:以較小的代價發現軟件中存在的錯誤
3.軟件測試原則
(1)窮盡測試是不可能的:軟件測試時抽樣測試,滿足一定的測試出口準則時應當終止;根據測試的風險和優先級控制工作量
(2)測試應該貫穿於軟件生命週期的始終,並儘早測試:測試的準備和設計在編碼之前開始;開發過程的每個階段通過測試保證該過程產品的質量;越到測試後期,爲修復缺陷付出的代價越大
(3)缺陷具有集羣特性:Pareto原則表明80% 的錯誤集中在20%的程序模塊中
(4)殺蟲劑悖論:同樣的測試用例被反覆執行時,發現缺陷的能力會越來越差-->評審和修改測試用例
(5)沒有失效不代表系統可用:即使測試沒有發現任何缺陷,也不能證明軟件完全正確;如果系統無法使用或者不滿足用戶的需求和期望,研發就是失敗的
(6)測試的標準是用戶的需求
(7)儘早定義產品的質量標準:建立質量標準,根據測試的結果,對產品的質量進行分析和評估
(8)可以由第三方或者獨立的測試團隊完成
4.軟件的可測試性
(1)測試過程便於對軟件的內部狀態進行控制-->可控性
(2)通過測試能夠對軟件的內部狀態進行觀測-->可觀測性
即對軟件進行測試時信息獲取的難易程度
軟件可測試性的一個重要原則爲技術文檔的完整,並根據設計變化而及時更新
儘早確定用戶接口和特徵集,使軟件的變化很少而且可控
5.測試用例的設計
(1)測試用例:軟件測試過程中爲了實現特定的測試目的而設計的一組測試輸入、執行條件和預期的輸出結果,以便測試某個程序是否滿足特定需求
(2)測試用例的設計原則:
- 正面測試和方面測試條件下的測試
- 正面測試:代表預期的條件,覈實行爲是否正確或者符合預期
- 負面測試:代表不可接受的、異常的或者意外的條件
- 單元測試中,主要的輸入應該是被測單元的設計文檔
- 測試用例用來確定測試目標中所有的產品需求行爲,每個測試用例說明或者代表唯一的輸入集或事件順序,產生唯一的測試目標行爲
6.測試分類
(1)是否執行軟件程序
- 靜態測試:不運行被測試的程序本身,僅分析檢查源程序的語法、結構、接口等來檢查程序的正確性
- 動態測試:運行被測程序,檢查運行結果與預期結果的差異,並分析運行效率和健壯性等性能
(2)軟件開發過程的角度
- 需求測試:充分發現需求中不完善和不嚴密的地方;常使用靜態測試,同行評審是有效的拍錯手段之一
- 單元測試(模塊測試):在編碼完成之後對軟件設計的最小單位——程序模塊,進行正確性檢驗的測試工作
- 集成測試:在單元測試完成的基礎上,將所有的模塊按照設計要求組裝成系統後進行的測試
- 確認測試:在集成測試的基礎上,測試軟件是否滿足用戶需求;由軟件開發人員、質量保證人員和用戶參與
- 系統測試:在實際運行環境下,對計算機系統進行一系列組裝和確認測試
三、黑盒測試
黑盒測試:在程序接口上進行軟件功能測試,給定正確的輸入,測試能否產生正確的輸出;需要測試合法和不合法的輸入數據;黑盒測試只能採用有限的輸入作爲測試,因此使用測試用例將測試的行爲具體量化。
(一)等價類劃分法
1.等價類劃分:將程序的輸入域劃分成若干子集合,即把全部的輸入數據合理劃分成若干等價類,在每一個等價類中取一個或者幾個有代表性的數據作爲測試的輸入條件,用少量有代表性的測試數據取得較好的測試結果
有效等價類:合理的、有意義的輸入數據
無效等價類:輸入無效的數據
2.設計測試用例
確定有效等價類和無效等價類
設計一個測試用例,儘可能覆蓋尚未被覆蓋的有效等價類
設計一個測試用例,僅覆蓋一個尚未被覆蓋的無效等價類
(二)邊界值分析法
1.邊界值分析法
- 對輸入數據的邊界值進行輸入和輸出檢測,測試用例來自有效等價類的邊界數據
- 是等價類劃分的一種特殊情形,更加註重將等價類中的邊界數值作爲輸入數據來檢查,可以結合二者
2.設計原則
- 輸入數值的範圍:選擇剛達到這個範圍邊界的值、剛超過這個範圍邊界的值
- 值的個數:選擇最大個數、最小個數、比最小個數少1、比最大個數多1的數值作爲測試數據
- 輸入輸出域是有序集合:選擇集合的第一個元素和最後一個元素
- 內部數據結構:選擇邊界上的值作爲測試用例
(三)錯誤推測法
通過經驗和知識推斷錯誤的所在之處,基於經驗和知覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例,可以作爲一種輔助的測試手段
(四)因果圖法
考慮輸入到條件之間的相互結合,利用圖解法分析輸入組合的情況,從而設計測試用例
1.因果關係
恆等關係:C1存在則E1產生
非關係:C1存在則E1不產生
或關係:原因C1 C2 或者 C3存在,E1產生
與關係:原因C1和C3同時存在,E1 產生
2.約束條件——輸入 輸出的約束
- 輸入條件的約束
- E關係(異):a b不同時爲1
- I關係(或):a b c不同時爲0 至少有一個爲1
- O關係(唯一):a和b同時有且僅有一個爲1
- R關係(要求):a爲1時b必須爲1
- 輸出條件約束
- M關係(強制):a爲1則b強制爲0
3.設計測試用例
- 找出原因(輸入條件或者輸入條件的等價類)和結果(輸出條件),並賦予標識符
- 找出原因-結果、原因-原因之間的對應關係,畫因果圖
- 標明不可能出現的組合情況
- 轉化爲判定表
- 針對判定表的每一列,設計測試用例
四、白盒測試
1.白盒測試:把測試對象看做透明的盒子,測試人員依據程序內部的邏輯結構設計測試用例,測試程序所有的邏輯路徑
2.白盒測試是一種窮舉測試,但是及時對所有路徑進行了測試,錯誤仍然可能出現
- 不能差出違反設計規範的錯誤
- 無法發現遺漏路徑出現的錯誤
- 不能發現與數據相關的錯誤
3.白盒測試針對程序模塊:
- 保證獨立路徑至少被使用一次
- 所有邏輯值:測試其爲真和假的情況
- 在上下邊界以及可操作範圍內運行所有循環語句
- 檢查內部數據結構保證有效性
(一)邏輯覆蓋法
1.語句覆蓋:每條語句至少執行一次;沒有辦法測試隱藏的條件和可能到達的隱式邏輯分支
2.判定覆蓋:每個判定的每個分支至少執行一次,即每個判定有一次真、有一次假
3.條件覆蓋:每個判定的每個條件取到各種可能的值,即每個條件有一次真、有一次假;條件覆蓋並不能保證判定覆蓋
4.判定-條件覆蓋:判定語句中的每個條件的所有可能結果至少出現一次,同時每個判定本身的所有可能結果也至少出現一次
5.條件組合覆蓋:每個判定中各個條件的每一種組合至少出現一次
(二)基本路徑測試
1.基本路徑測試是在程序控制流圖的基礎上,通過分析控制構造的環路複雜性,導出基本可執行路徑集合,根據該集合設計的測試用例保證在測試中程序的每個可執行語句至少執行一次,同時判定條件也分別執行TRUE和FALSE一次。
2.基本路徑測試的步驟:
- 畫控制流圖(注意不是程序流程圖)
- 由圓圈和箭頭組成:圓圈表示程序流程圖中的一條或者多條語句
- 基本元素
- 計算環複雜度-->爲程序邏輯複雜性提供測度的軟件度量,計算程序基本路徑的數目
- =控制流圖中區域的數量
- =邊-結點+2
- =判定結點+1 所謂判定結點:包含條件的節點
- 確定線性獨立路徑的基本組合,獨立路徑:一個程序語句的集合或者至少包含一條在定義該路徑之前沒有用過的邊
- 根據獨立路徑進行測試用例設計
五、軟件測試過程
軟件測試貫穿於軟件過程的每一個階段,不同階段採用不同的測試策略-->儘早發現軟件中可能存在的錯誤。
(一)單元測試
1.依據詳細設計描述,對程序模塊(軟件設計的最小單位)進行正確性檢驗,採用白盒測試技術,對模塊內重要的控制路徑設計測試用例;單元測試通常在編碼階段完成
2.單元測試的內容
- 模塊接口測試:輸入 輸出參數等
- 局部數據結構測試:數據類型說明、默認值等
- 路徑測試:對模塊中主要的執行路徑執行測試,包括處於重要位置的執行路徑(完成單元功能的算法、控制、數據處理的等)和控制較複雜而易出錯的路徑
- 錯誤處理測試:對程序運行中出現錯誤的處理方法
- 邊界測試:數據流、控制流中剛好等於、大於或者小於確定的比較值
3.單元測試的方法
單元測試在編碼階段進行
源程序代碼編制完成-->評審 驗證無語法錯誤-->根據設計文檔設計測試用例-->驗證程序功能
設計上層驅動模塊和下層支持模塊,單元測試需要驅動模塊、支持模塊的協同工作才能完成模塊測試工作
(二)集成測試
1.集成測試:使得功能和性能完整的模塊組合在一起仍然具有良好軟件性能的測試技術,主要用於發現與接口有關的問題
2.模塊組裝成程序:
- 非漸增式測試:分別測試所有的模塊,然後將其結合成所要的程序
- 漸進式測試:
- 把下一個要測試的模塊同已經測試好的模塊結合起來進行測試,每次增加一個;
- 容易定位和改正錯誤,對接口可以進行更徹底的測試
- 集成測試時普遍採用
3.漸進測試的兩種形式:
(1)自頂向下
- 從主控模塊開始,沿着程序的控制層次逐層向下移動,進行測試後把各個模塊結合起來
- 採用深度優先(將一條主控制通路上的模塊進行組合)或者廣度優先(逐層結合所有同一水平線上的模塊)的策略
- 基本過程:
- 測試主控模塊,使用直接從屬於主控模塊的模塊模擬程序代替所有子模塊
- 根據深度或者廣度優先,選擇一個實際的模塊代替一個模擬程序
- 在結合一個新模塊的同時進行測試
- 迴歸測試
- 特點
- 支持錯誤隔離、較早發現程序主要控制點和決策點
- 失去了在特定的測試和組裝特定的模塊之間的精確對應關係
(2)自底向上:從軟件結構的最底層模塊開始組裝和測試
- 過程:
- 低層模塊組合-->實現特定軟件子功能的簇
- 針對每個簇,編寫驅動程序
- 測試子功能簇
- 沿着軟件結構自下向上移動,把子功能簇組合起來
- 特點:也支持錯誤隔離,但是對於重大錯誤問題往往到最後測試環節才發現
4.迴歸測試
- 修改了舊代碼後,重新進行測試以確認修改沒有引入新的錯誤或者導致其他代碼產生錯誤
- 首要考慮:測試覆蓋範圍大 花費時間少
- 方法:再測試所有用例、基於風險進行選擇、只測試修改過的部分
5.煙幕測試
- 每天自動編譯並進行測試,觀察編譯好的產品以確認每天的編譯結果是否成功
- 意義:最小化集成的風險 減少產品低質量的風險 簡單化錯誤診斷 鼓舞士氣
(三)確認測試
1.概念
經過集成測試,得到了完整的軟件系統
確認測試:根據需求規格說明書中描述的軟件有效性準則進一步驗證軟件的功能和性能是否與用戶的要求一致
重點考慮:軟件是夠滿足合同規定的功能和性能、文檔資料是否完整、準確、人機交互界面等是否令用戶滿意
2.內容
- 軟件配置複查:配置的各個成分齊全
- 驗收測試 α β測試
- α測試:用戶在開發環境下進行測試、公司內部用戶在模擬的實際操作環境下進行測試
- β測試:多個用戶在實際使用環境下進行測試 開發者無法控制的環境下
(四)系統測試
1.系統測試:交付給用戶之前最後測試階段,結合計算機軟件、硬件、外設、網絡等進行各種組裝測試和確認測試,是基於整體需求規格說明書的黑盒測試
2.包括
- 壓力測試:模擬應用的軟、硬件環境以及系統負荷,長時間或者超大負荷地運行測試軟件-->測試系統的性能、可靠性和穩定性
- 容量測試:軟件系統應用特徵的某項指標的極限值
- 性能測試:是否達到需求規格說明書中規定的性能指標,如響應時間等;與壓力測試結合
- 安全測試:驗證系統的安全等級 識別潛在的安全性缺陷
- 容錯測試:檢查容錯能力,在異常條件下自身是否具有防護性措施或者抗災手段-->針對異常數據操作、災難恢復
六、軟件應用測試
1.測試環境:硬件環境(服務器、客戶端、網絡連接設備、輔助硬件設備等)、軟件環境(操作系統 數據庫等)
2.確定軟件的測試環境
- 所需的計算機數量、硬件配置要求
- 部署被測應用的服務器的操作系統、數據庫等
- 保存測試過程文檔和數據的服務器的環境
- 執行被測試工作的計算機的環境
- 專門的計算機:備份被測應用服務器和測試管理服務器的環境
- 所需軟件:文檔編寫、測試管理系統、性能測試工具、缺陷跟蹤管理系統
- 初始化系統的各項數據
3.測試環境的管理
- 設置專門的測試環境管理員-->管理和監控測試環境
- 管理測試環境所需的文檔:軟硬件安裝手冊、被測應用的發佈手冊、測試環境備份恢復手冊
- 管理測試環境的訪問權限
- 測試環境的變更管理
- 備份和恢復
總結一下這一章的主要內容
1. 掌握黑盒、白盒測試的主要方法,黑盒測試如等價類劃分、邊界值分析,以及因果圖的畫法;白盒測試主要是基本路徑測試。
2. 掌握軟件測試的幾個過程,從模塊測試到集成測試、確認測試和系統測試
3. 注意軟件測試環境的管理,開頭的問題是老師上課的時候提出的,可能的原因之一是因爲客戶的本地環境出現問題導致系統不能正常使用
4.有個好奇的想法,大的軟件公司在進行軟件開發時,現在都會採用哪些主流的測試方法呢?複雜的測試不會影響項目的進度嗎?希望這些基本的理論有一天可以得以實踐