一、軟件測試質量
ISO9126質量模型:軟件質量模型的6大特性和27個子特性。
ISO9126軟件質量模型是評價軟件質量的國際標准,由6個特性和27個子特性組成,建議大家深入理解各特性、子特性的含義和區別,在測試工作需要從這6個特性和27個子特性去測試、評價一個軟件。這個模型是軟件質量標准的核心,對於大部分的軟件,都可以考慮從這幾個方面着手進行測評。
1、 軟件質量的概念:
軟件質量是許多質量屬性的綜合體現,各種質量屬性反映了軟件質量的方方面面。通過改善軟件的各種質量屬性,從而進一步提高軟件的整體質量。
2、軟件質量模型圖:
(1)功能性
1、適合性:是否提供了相應的功能
2、准確性:是不是正確(是不是滿足用戶需要的)
3、互操作性:產品與產品之間交互數據的能力
4、保密安全性:允許經過授權的用戶和系統能夠正常的訪問相應的數據和信息,禁止未授權的用戶訪問.......
5、功能性的依從性:國際/國家/行業/企業 標准規范一致性
(2)可靠性:產品在規定的條件下,在規定的時間內完成規定功能的能力
1、成熟性:防止內部錯誤導致軟件失效的能力
2、容錯性:軟件出現故障(包含外部錯誤),自我處理能力(能否自行解決)。
3、易恢復性:失效情況下的恢復能力,能否恢復到出錯之前的應用
4、可靠性的依從性
(3)易用性:在指定使用條件下,產品被理解、 學習、使用和吸引用戶的能力
1、易理解性(是不是容易被用戶理解)
2、易學性(是不是容易學習)
3、易操作性(好不好操作)
4、吸引性(是不是吸引用戶)
5、易用性的依從性
(4)效率性:在規定台條件下,相對於所用資源的數量,軟件產品可提供適當性能的能力
1、時間特性:平均事務響應時間,吞吐率,TPS(每秒事務數)--對事物的處理能力好不好, 反應快不快,相同的時間內能夠處理多少數據,每一次能夠處理多少個請求。
2、資源利用性:軟件運行的時候,占用服務器的資源有多少(主要是對CPU、 內存 、磁盤 、IO、 網絡帶寬、 隊列、 共享內存的占用),如果占用資源很大,會影響到用戶其他的軟件使用,不容易接受。
3、效率依從性
(5)軟件維護性:"四規", 在規定條件下,規定的時間內,使用規定的工具或方法修復規定功能的能力
1、易分析性:分析定位問題的難易程度(是否容易對問題進行分析和定位)
2、易改變性:軟件產品使指定的修改可以被實現的能力(是不是容易被修改,添加一些可實現的功能)
3、穩定性:防止意外修改導致程序失效(能不能夠防止一些誤操作導致程序失效)。
4、易 測試性:使已修改軟件能被確認的能力(已經修改的軟件功能,好不好檢測及確認正確與否)
5、維護性的依從性
(6)軟件可移植性:從一種環境遷移到另一種環境的能力
1、適應性:適應不同平台(能不能適應不同的操作系統OS,linux、mac、windows等)
2、易安裝性:被安裝的能力(軟件是不是容易被安裝)
3、共存性(與其他的軟件能否共存,如果安裝了這個軟件,其他的軟件就使用不了,勢必會被淘汰)
4、易替換性(軟件是不是容易被其他的產品替代,不易替換更好)
5、可移植性的依從性
軟件質量實例:
- 榨汁機
•功能:能夠榨豆漿、水果汁(蘋果、梨、西瓜……)
•性能:榨一公斤黃豆需要多長時間?
•耗能:榨一公斤黃豆耗電量多少?
•安全性:榨汁過程中有無人體安全防護措施?有無漏電保護?
•可靠性:榨汁機能持續穩定運轉多長時間?
•易用性:榨汁機的操作是否簡單方便?
….
- 酒店:
•建築:客房、西餐廳、宴會廳、酒吧、健身房……
•設施:配套設施的品牌、檔次
•環境:交通、風景……
•服務:服務品種、服務態度、響應客戶要求的及時性……
……
3、軟件測試與QA的區別
a.從性質上來看——QA屬於管理的工作。
b.從對象上來看——測試的對象是軟件研產品,大多數工作是對研發領域的檢驗。QA的對象是整個軟件過程,覆蓋各個領域。
c.從手段上來看——測試以事后檢查為主,QA強調的是缺陷預防。
4、質量保證活動與軟件測試的關系:
二、軟件測試的類型:
1、功能測試
概念:功能測試時根據產品的需求規格說明書,和測試需求列表,驗證產品的功能實現是否符合產品的需求規格
目標:功能測試主要是為了發現以下幾類錯誤---(1)是否有不正確或者遺漏了的功能?(2)功能實現是否滿足用戶的需求和系統設計的隱藏需求?(3)輸入能否正確接受?能否正確輸出結果
2、性能測試
(1)性能測試(Performance Testing)就是用來測試軟件在集成系統中的運行性能的。
(2)目標:度量系統相對於預定義目標的差距(實際結果目標與預期是否一致及差距有多少)。
(3)性能測試必須要有工具的支持,市面上有一些專門用於GUI或者Web的性能測試工具,如:Loadrunner Jmeter SilkPerformer WebLoad。
(4)性能測試收集的情況有哪些?
a.CPU的使用情況(占用百分之多少)
b.IO的使用情況(IO讀寫的使用情況)
c.信道占用
d.每個模塊執行時間百分比
e.一個模塊等待IO完工的時間百分比
f.指令隨着時間的跟蹤路徑
g.每一組指令頁換入和換出的次數
h.系統的反應時間(對輸入結果多久能夠響應)。
I.系統吞吐量—每個時間單元的處理數量是多少
J.所有主要指令的單元執行時間。
3、負載測試
概念:是超過被測對象標准性能負荷指標下,驗證系統的負載承受能力。並要求超負荷情況下、依然正常實現業務能力。
負載測試通過不斷對被測對象施加負荷,觀察被測對象在不同負載下的性能表現(強調運行速度如何)。
4、壓力測試(Stress Testing)--關注運行的速度有多快
目的:調查系統在其資源超負荷的情況下的表現。尤其感興趣的是這些對系統處理時間有什么影響。這類測試在一中需要反常數量、頻率或者資源的方式下執行系統。
目標:通過極限測試方法,發現系統在極限或惡劣環境中自我保護能力。主要驗證系統的可靠性,找到系統薄弱環節。
- 成千上萬的用戶在同一時間登錄到Internet;
- 同時引入大量的操作。
5、容量測試(Volume Testing)--面向數據的一個測試,關注能夠承受多少數據。
目的:使系統承受超額的數據容量來發現它是否能夠正確處理。
容量測試時面向數據的,並且它的目的是顯示系統可以處理目標內確定的數據容量。
容量測試實例:
- 使用編譯器編譯一個極其龐大的源程序;
- 一個操作系統的任務隊列被充滿。
- 龐大的Email信息和文件充滿Internet。
6、安全性測試(security Testing)
安全測試用來驗證集成在系統內的保護機制是否能夠在實際中保護系統不受非法的侵入,用來保證系統本身數據的完整性和保密性。如當系統受到惡意攻擊(黑客)時,設備的自我保護能力,病毒防護 能力,自定義通信協議安全性(別人使用相同的通信協議,是不是會連接到你的系統,攻擊你的系統)等。廣義的還包括物理安全性測試、業務安全性測試。
一些功能性的安全性問題:
(1)沒有口令是否可以登錄到系統?
(2)各級用戶權限划分是否合理?
(3)錯誤和文件訪問是否適當地被記錄—日志管理?
(4)系統配置數據是否能正確保存,系統故障時是否能恢復?
安全性測試內容(從哪些方面來考慮安全性測試):
(1) 系統的登錄
(2) 用戶管理(分級管理權限,該你看的給你看,不該你看的,你就看不到,普通用戶和VIP的操作模塊不同,數據保密)
(3) 防火牆(防自己、防別人—黑客)
(4) 系統數據的承載及穩定性
(5) WEB安全性,如WEB加密,解密,數字簽名等(用戶數據保密性,密碼顯示一般不會明文顯示,用“*”顯示,保存時也是經過一些算法對其加密后存儲在文檔內,防止別人找到你的文件就找到你的密碼)。
(6) 數據庫的安全性。
(7) 內部通信協議(測內部通信協議是否正確實現)
(8) 系統防病毒測試
7、GUI(Graphical User Interface)測試—針對軟件系統GUI界面進行的測試,主要包含兩個方面內容:
(1)界面實現和界面設計的吻合情況。
(2)確認界面處理是否正確。
常用的GUI自動化工具:QTP、SilkTest、QARun、QuickTestProfessional、selenium等。
GUI測試對象:
a. 簡單界面元素—界面區域(功能和屬性相對比較單一的),通常指各種控件(按鈕等)。重點檢查
b. 組合類界面元素—主要是指一些復雜的界面元素(工具欄、組合框、表格、菜單欄)等。
c. 完整界面(窗口)--由一系列界面元素通過適當的形式組合而成的界面形式,最為常見的就是各種窗口(各種對話框、單文檔窗口、多文檔父窗口、多文檔子窗口等)。
8、可用性測試(Usability Testing)--為了檢測用戶在理解和使用系統方面到底有多好,主要考慮產品是否符合實際應用的情況,是否符合用戶的使用習慣和特殊要求,軟件的操作方式是否方便合理,設備和用戶之間的交互信息是否准確易於理解,有沒有遵從行業習慣,外觀界面是否美觀等。應該要涉及到所有和用戶有交互的功能和子系統。包括系統功能、系統發布、幫助文檔和過程,用來保證用戶能夠舒適地和系統進行交互。
一些測試人員應當關注的可用性問題:
a. 過分復雜的功能或者指令;
b.困難的安裝過程;
c.錯誤信息不准確或者過於簡單;
d.用戶被迫去記住太多的信息;
e.語法、格式和定義不一致
9、安裝卸載測試:
定義:系統的可安裝性測試,主要是根據軟件的測試特性列表、軟件安裝、配置文檔,設計安裝過程的測試用例,發現軟件在安裝過程中的錯誤
目的:系統可安裝性測試的目的不僅是找安裝軟件本身的錯誤,而且還要找安裝文檔的錯誤。在安裝軟件系統時,會有多種選擇,要分配和裝入文件與程序,布置適當的配置,進行程序的聯結。而安裝測試就要找出這些安裝過程中出現的錯誤
10、異常測試
概念:系統異常測試又叫系統容錯和可恢復性測試,它是通過人工干預手段使系統產生軟、硬件異常,通過驗證系統異常前后的功能和運行狀態,達到檢驗系統的容錯、排錯和恢復的能力。它是系統可靠性評價的重要手段
容錯處理:
• 系統自動處理
• 人工干預處理
注意:
• 系統異常測試還與系統的指標測試有關系,當系統需要提供的服務能力大於系統的設計指標時,也屬於系統異常的情況,因此應該結合起來加以考慮
• 系統的可靠性是設計出來的,而不是測試出來的。測試出來的數據有助於為我們進行進一步的系統優化設計積累經驗,設計和測試是一個互為反饋的過程。
11、文檔測試(Documentation Testing)
目標----驗證用戶文檔是正確的,並且保證操作手冊的過程能夠正確工作。
12、網絡測試(接口測試)
概念:網絡測試是在網絡環境下和其他設備對接,進行系統功能、性能與指標方面的測試,保證設備對接正常
內容:網絡測試考察系統的處理能力、系統兼容性、系統穩定可靠性及用戶使用等方面。
如通信產品,主要進行協議測試:
• 一致性測試:檢測所實現的系統與協議規范符合程度
• 性能測試:檢測協議實體或系統的性能指標(數據傳輸率、聯接時間,執行速度、吞吐量、並發數等)
• 互操作性測試:檢測同一協議不同實現廠商之間,同一協議不同實現版本之間、或同一類協議不同實現版本之間互通能力和互連操作能力
• 堅固性測試:檢測協議實體或系統在各種惡劣環境下運行的能力(信道被切斷、通信設備掉電、注入干擾報文等)
13、穩定性測試
系統穩定性測試目的是評價系統在一定負荷情況下、長時間的運行情況。包括系統在一定負荷下,再增加新的業務,原有的業務是否受影響,新的業務能不能正常工作,系統資源有沒有泄漏,數據有沒有不一致的情況,系統性能是否會降下來,關鍵點是長時間的運行后,系統的狀況如何,系統平均無故障時間MTBF是否滿足系統設計要求
14、兼容性測試
兼容性測試驗證被測對象與硬件、其他軟件之間的兼容情況。不同的瀏覽器,不同的設備、不同的操作系統之間的兼容
三、軟件的測試方法
1、主要軟件測試方法:
a. 黑盒測試、白盒測試、灰盒測試
b. 靜態測試、動態測試。
c. 人工測試、自動化測試
2、 軟件測試的兩種極端情況:
第一種:知道產品的需求規格,但是不知道其內部邏輯實現,可以進行測試證明每個需求是否實現—黑盒測試—關心業務需求
第二種:知道產品的內部邏輯實現功能,可以通過測試證明每種內部操作是否符合設計規格的要求,所有內部成分是否通過檢查—白盒測試,--早期介入進行,龐大的測試系統在現實中不太現實。
現實中大多用黑盒測試。
灰盒測試是白盒測試和黑盒測試兩種相結合測試。
白盒測試:依據被測軟件分析程序內部構造,並根據內部構造設計用例,來對內部控制流程進行測試,可完全不顧程序的整體功能實現情況。
白盒測試是基於程序結構的邏輯驅動測試。
白盒測試又可以被稱為玻璃盒測試、透明盒測試、開放盒測試、結構化測試、
邏輯驅動測試
白盒測試常用技術:
• 靜態分析:控制流分析、數據流分析、信息流分析等
• 動態分析:邏輯覆蓋測試(分支測試、路徑測試等)、程序插裝等
白盒測試中常見的覆蓋有六種:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋(測試力度逐漸增強,最常用的是組合覆蓋法,路徑覆蓋法對大型的測試用例來講,太復雜,時間過長)
黑盒測試:發現問題,解決成本比較高。
• 功能性測試,一種是順序測試每個程序特性或功能,另一種途徑是一個模塊一個模塊的測試,即每個功能在其最先調用的地方被測試;
• 容量測試,檢測軟件在處理海量數據時的局限性,能發現系統效率方面的問題;
• 負載測試,檢測系統在一個很短時間內處理一個巨大的數據量或執行許多功能調用上的能力;
• 恢復性測試,主要保證系統在崩潰后能夠恢復外部數據的能力;
黑盒測試特點:
• 對於更大的代碼單元來說(子系統甚至系統級)比白盒測試效率要高;
• 測試人員不需要了解實現的細節,包括特定的編程語言;
• 從用戶的視角進行測試,很容易被大家理解和接受;
• 有助於暴露任何規格不一致或有歧義的問題;
靜態測試:(是否運行被測軟件,分為靜態測試和動態試)
不運行被測試的軟件系統,而是采用其他手段和技術對被測試軟件進行檢測的一種測試技術。例如:代碼走讀、文檔評審、程序分析等都是靜態測試的范疇。常用技術有靜態分析技術。
動態測試:
按照預先設計的數據和步驟去運行被測軟件系統,從而對被測軟件系統進行檢測的一種測試技術。常用技術有動態分析技術。
人工測試:
測試活動(如評審、測試設計、測試執行等)由人來完成,狹義上是指測試執行由人工完成,這是最基本的測試形式
自動化測試:
一般是指通過計算機模擬人的測試行為,替代人的測試活動,狹義上是指測試執行由計算機來完成(主要是回歸測試中使用,就是一些重復性的功能的測試,新功能不建議使用自動化測試,手工測試發現bug能力強。)
四、測試階段及各階段的輸出:
1、測試階段主要有:
A.測試計划階段 – 測試計划
B.測試設計階段 – 測試方案(設計方法的細節文檔)
C.測試實現階段 – 測試用例、測試規程
D.測試執行階段 – 測試報告
2、測試各階段的工作內容及輸出文檔:
(1) 測試計划:指明測試范圍、方法、資源,以及相應測試活動的時間進度安排表的文檔。--(測試的范圍是多大,使用什么測試方法,資源的分配,項目測試時間進度的安排等)
(2) 測試方案:指明為完成軟件或軟件集成特性的測試而進行的設計測試方法的細節文檔。
(3) 測試用例:指明為完成一個測試項的測試輸入、預期結果、測試執行條件等因素的文檔。
(4) 測試規程:指明執行測試時測試活動序列的文檔。
(5) 測試報告:指明執行測試結果的文檔。
(6) 測試日報:每天測試執行情況的記錄和總結。
3、測試工程師系統測試各階段任務:
軟件需求階段:評審軟件需求規格說明書
軟件設計階段:評審軟件概要設計說明書、軟件詳細設計說明書、協助編寫系統測試計划
軟件編碼階段:設計系統測試用例、准備測試資源(測試工具、測試環境等)、開發測試腳本、開發測試工具、准備測試數據
軟件測試階段:執行測試用例、提交缺陷單、跟蹤缺陷、回歸測試、提交測試報告
QA和測試的區別:
1. 從性質上看:
測試----屬於技術的工作
QA----屬於管理的工作
2. 從對象上看:
測試的對象----軟件研發產品,大多數工作是對研發領域的檢驗
QA的對象----整個軟件過程,覆蓋各個領域
3.從手段上看:
測試----事后檢查為主
QA----強調的是缺陷預防(提前預防)