軟件測試的藝術(shù)

測試是為發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。
破壞性過程。心理學(xué)和經(jīng)濟(jì)學(xué)。
軟件測試的對象包括:程序、數(shù)據(jù)、文檔。目標(biāo)程序和源程序都屬于程序。


軟件測試的原則

  1. 測試用例中一個必需部分是對預(yù)期輸出或結(jié)果的定義。
  • 對程序的輸入數(shù)據(jù)的描述。
  • 對程序在上述輸入數(shù)據(jù)下的正確輸出結(jié)果的精確描述。

防止某個似是而非而實際錯誤的結(jié)果被解釋成正確結(jié)論。

  1. 程序員應(yīng)當(dāng)避免測試自己編寫的程序。
  2. 編寫軟件的組織不應(yīng)當(dāng)測試自己編寫的軟件。
  3. 應(yīng)當(dāng)徹底檢查每個測試的執(zhí)行結(jié)果。
  4. 測試用例的編寫不僅應(yīng)當(dāng)根據(jù)有效和預(yù)期的輸入情況,而且也應(yīng)當(dāng)根據(jù)無效和未預(yù)料到的輸入情況。
  5. 檢查程序是否“未做其應(yīng)該做的”僅是測試的一半,測試的另一半是檢查程序是否“做了其不應(yīng)該做的”。
  6. 應(yīng)當(dāng)避免測試用例用后即棄,除非軟件本身就是一個一次性的軟件。
  • 交互式系統(tǒng)測試時較為常見。
  • 保留測試用例,當(dāng)程序其他部件發(fā)生更動后重新執(zhí)行,即“回歸測試”。
  1. 計劃測試工作時不應(yīng)默許假定不會發(fā)現(xiàn)錯誤。
  2. 程序某部分存在更多錯誤的可能性,與該部分已發(fā)現(xiàn)錯誤的數(shù)量成正比。
  • 錯誤總是傾向于聚集存在。
  1. 軟件測試是一項極富創(chuàng)造性、極具智力挑戰(zhàn)性的工作。

代碼檢查、走查與評審

人工測試方法:代碼檢查、走查以及可用性測試。

  • 利用錯誤列表進(jìn)行代碼檢查。
  • 小組代碼走查。
  • 桌面檢查。
  • 通話評審。

同行評審

依據(jù)程序整體質(zhì)量、可維護(hù)性、可擴(kuò)展性、易用性和清晰性對匿名程序進(jìn)行評價的技術(shù)。
軟件測試計劃評審會需要有 項目經(jīng)理、客戶(可選)、配置管理員、測試經(jīng)理、開發(fā)組長等人的參加。


測試用例的設(shè)計

最關(guān)鍵問題:在所有可能的測試用例中,哪個子集最有可能發(fā)現(xiàn)最多的錯誤?
測試用例是測試程序正確性與否的關(guān)鍵。

白盒測試

邏輯驅(qū)動的測試。白盒測試關(guān)注的是測試用例執(zhí)行的程度或覆蓋程序邏輯結(jié)構(gòu)(源代碼)的程度。完全的白盒測試是將程序中的每條路徑都執(zhí)行到,然而對帶有循環(huán)的程序來說,并不現(xiàn)實。

邏輯覆蓋測試

  1. 語句覆蓋:可執(zhí)行語句至少被執(zhí)行一次;
    必要條件,最弱的準(zhǔn)則。語句原本的寫法有誤,無法檢測?
  2. 判定覆蓋或分支覆蓋:每個判斷的取真分支和取假分支至少經(jīng)歷一次;每條分支路徑都必須至少遍歷一次;每個入口點都必須被至少調(diào)用一次。
    可以滿足語句覆蓋。
  3. 條件覆蓋:每個條件的取值至少滿足一次;
  4. 判定/條件覆蓋:判斷和條件都滿足;將一個判斷中的每個條件的所有可能的結(jié)果至少執(zhí)行一次,將每個判斷的所有可能結(jié)果至少執(zhí)行一次,將每個入口點都至少調(diào)用一次。
  5. 條件組合覆蓋(多重條件覆蓋):每個條件的所有可能都至少出現(xiàn)一次,并且判定結(jié)果至少出現(xiàn)一次 ;
    與條件覆蓋的區(qū)別:不是簡單要求每個條件出現(xiàn)“真”和“假”兩種結(jié)果,而是要求這些結(jié)果所有可能至少出現(xiàn)一次;
  6. 路徑測試:執(zhí)行所有可能的執(zhí)行路徑;
  7. 基本路徑測試:路徑測試執(zhí)行了每個路徑,每個判定的結(jié)果肯定經(jīng)歷過一次。

黑盒測試

數(shù)據(jù)驅(qū)動測試,輸入/輸出驅(qū)動的測試,不需要了解程序內(nèi)部的結(jié)構(gòu)。

  1. 等價劃分
  2. 邊界值分析
    邊界值分析的基本思想是使用在最小值、略高于最小值、正常值、略低于最大值和最大值處取輸入變量值,記為:min、min+、nom、max-、max。考慮到健壯性測試,還可以加一個略大于最大值max+,以及一個略小于最小值min-的值。
  3. 因果圖法、判定表驅(qū)動法、正交試驗設(shè)計法、功能圖法、場景法等。

邊界值法既可以用于黑盒測試用例,也可以用于白盒測試用例。

錯誤猜測


模塊(單元)測試

系統(tǒng)集成測試主要包括以下過程:1. 構(gòu)建的確認(rèn)過程。 2. 補(bǔ)丁的確認(rèn)過程。 3. 系統(tǒng)集成測試測試組提交過程。 4. 測試用例設(shè)計過程。 5. 測試代碼編寫過程。 6. Bug的報告過程。 7. 每周/每兩周的構(gòu)建過程。 8. 點對點的測試過程。 9. 組內(nèi)培訓(xùn)過程。


更高級別的測試

軟件開發(fā)過程在很大程度上是溝通有關(guān)最終程序的信息、并將信息從一種形式轉(zhuǎn)換到另一種形式。由于這個原因,絕大部分軟件錯誤都可以歸因為信息溝通和轉(zhuǎn)換時發(fā)生的故障、差錯和干擾。

軟件開發(fā)周期模型:
最終用戶->需求->目標(biāo)->外部規(guī)格說明->系統(tǒng)設(shè)計->程序結(jié)構(gòu)設(shè)計->模塊接口規(guī)格說明->代碼。

可以在每個階段結(jié)束時引入獨立的驗證過程,以防止一些錯誤。

開發(fā)過程與測試過程一對一的聯(lián)系:
驗收測試->系統(tǒng)測試->功能測試->集成測試->模塊測試。

這種結(jié)構(gòu)避免了沒有效果的多余測試。
測試順序不一定是嚴(yán)格的時間順序。
更高級別的測試最適用于軟件產(chǎn)品,而對沒有正規(guī)需求和目標(biāo)的程序,功能測試可能是唯一更高級別的測試。

功能測試

試圖發(fā)現(xiàn)程序與其外部規(guī)格說明之間存在不一致的過程。外部規(guī)格說明是一份從最終用戶角度對程序行為的精確描述。
通常為黑盒操作。(等價類劃分、邊界值分析法、因果圖法、錯誤猜測法)

系統(tǒng)測試

將系統(tǒng)或程序與其初始目標(biāo)進(jìn)行比較。
最難進(jìn)行的測試。

  • 系統(tǒng)測試并不局限于系統(tǒng)。如果產(chǎn)品是一個程序,那么系統(tǒng)測試就是一個試圖說明程序作為一個整體是如何不滿足其目標(biāo)的過程。
  • 根據(jù)定義,如果產(chǎn)品沒有一組書面的、可度量的目標(biāo),系統(tǒng)測試也就無法進(jìn)行。

測試用例設(shè)計依據(jù):程序的用戶文檔或書面材料。

系統(tǒng)測試用例

  1. 能力測試:確保程序的目標(biāo)功能實現(xiàn)
  2. 容量測試:發(fā)現(xiàn)處理大容量數(shù)據(jù)時的程序異常
  3. 強(qiáng)度測試:發(fā)現(xiàn)在大規(guī)模負(fù)載、高強(qiáng)度不間斷持續(xù)的數(shù)據(jù)處理中的異常
  4. 可用性測試:評估最終用戶在使用軟件并與軟件交互時的可用性問題
  5. 安全性測試:試圖攻破程序的安全防線
  6. 性能測試: 評估程序的響應(yīng)時間以及吞吐量瓶頸
  7. 存儲測試: 確保程序可以證券處理其對存儲的要求,包括系統(tǒng)的存儲和物理上存儲
  8. 配置測試: 檢查程序是否能在推薦配置上流暢運行
  9. 兼容性/轉(zhuǎn)換測試: 評估新版本是否能兼容老的版本
  10. 安裝測試: 確保能夠在所有支持的平臺上安裝軟件
  11. 可靠性測試:評估程序是否能達(dá)到規(guī)格說明中的運行時常和MTBF(平均故障間隔時間)要求
  12. 可恢復(fù)性測試:測試系統(tǒng)恢復(fù)相關(guān)的功能是否按設(shè)計要求實現(xiàn)
  13. 服務(wù)/可維護(hù)性測試:評估系統(tǒng)是否擁有良好的數(shù)據(jù)處理和日志機(jī)制,以備技術(shù)支持和調(diào)試之需
  14. 文檔測試: 檢驗所有的用戶文檔是否準(zhǔn)確
  15. 過程測試: 對軟件系統(tǒng)操作或維護(hù)所需涉及的流程進(jìn)行評估和確定

驗收測試

將程序與其最初的需求及最終用戶當(dāng)前的需要進(jìn)行比較的過程。
原則上由程序的客戶或最終用戶來進(jìn)行。
軟件驗收測試分為三類:
正式驗收測試;
非正式驗收測試:α測試(由用戶、測試人員、開發(fā)人員共同參與的內(nèi)部測試。) ,β測試(內(nèi)測后的公測,即完全交給最終用戶測試。)。

安裝測試

測試結(jié)束的準(zhǔn)則

  1. 用完了安排的測試時間后,測試便結(jié)束。
  2. 當(dāng)執(zhí)行完所有測試用例都未發(fā)現(xiàn)錯誤,測試便結(jié)束。
    以上兩種都是不可取的。

三類較為有用的結(jié)束準(zhǔn)則

  1. 根據(jù)特定的測試用例設(shè)計技術(shù)。
    模塊測試結(jié)束準(zhǔn)則:
    測試用例來源于(1)滿足多重條件覆蓋準(zhǔn)則,(2)對模塊接口規(guī)格說明進(jìn)行邊界值分析,產(chǎn)生的所有測試用例最終都是不成功的。
    功能測試結(jié)束準(zhǔn)則:
    測試用例來源于(1)因果圖分析,(2)邊界值分析,(3)錯誤猜測,產(chǎn)生的所有測試用例最終都是不成功的。
    以上方法問題在于:對沒有特定方法的測試階段,如系統(tǒng)測試階段仍不起作用。依賴于主觀度量。沒有設(shè)定目標(biāo)。
  2. 以確切的數(shù)量來描述結(jié)束測試的條件。
  3. 在測試過程中記錄每單位時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)量。通過檢查統(tǒng)計曲線的形狀,決定繼續(xù)進(jìn)行測試還是終止測試。

可用性(或用戶體驗)測試

基本上屬于黑盒測試。

可用性測試流程

  • 測試用戶的選擇
  • 需要多少用戶測試
  • 數(shù)據(jù)采集方法
  • 可用性調(diào)查問卷
  • 何時手工,還是多多益善

調(diào)試

  1. 確定程序中可疑錯誤的準(zhǔn)確性質(zhì)和位置;
  2. 修改錯誤。

暴力法調(diào)試

  1. 利用內(nèi)存信息輸出來調(diào)試。
  2. 根據(jù)一般的“在程序中插入打印語句”建議來調(diào)試。
  3. 使用自動化的調(diào)試工具進(jìn)行調(diào)試。

歸納法調(diào)試

演繹法調(diào)試


敏捷開發(fā)模式下的測試

圍繞以用戶為中心,以客戶需求為導(dǎo)向的開發(fā)過程,在此過程中隨時做好“迎接變化”的準(zhǔn)備。
客戶是敏捷的關(guān)鍵環(huán)節(jié)。
特征:依賴客戶的參與、測試驅(qū)動以及緊湊的迭代開發(fā)周期。

敏捷開發(fā)方法:
敏捷建模
敏捷統(tǒng)一過程
動態(tài)系統(tǒng)開發(fā)方法
核心統(tǒng)一過程(EssUP)
極限編程(eXtreme Programming,XP)
功能驅(qū)動開發(fā)(FDD)
開放統(tǒng)一過程
Scrum進(jìn)度跟蹤


一些補(bǔ)充

  1. 針對手機(jī)應(yīng)用軟件的系統(tǒng)測試,我們通常從如下幾個角度開展:功能模塊測試,交叉事件測試,壓力測試,容量測試,兼容性測試,易用性/用戶體驗測試等。
    對手機(jī)可以施加的壓力測試類型主要有:存儲壓力、邊界壓力、 響應(yīng)能力壓力、網(wǎng)絡(luò)流量壓力。
  2. 測試的分類:
  • 人工測試:如個人復(fù)查,抽查和會審等;機(jī)器自動測試;
  • 按照否關(guān)軟件內(nèi)部結(jié)構(gòu)具體實現(xiàn)角度:A.白盒測試B.黑盒測試 C.灰盒測試
  • 按照軟件發(fā)程按階段:A.單元測試 B.集測試 C.確認(rèn)測試 D.系統(tǒng)測試 E.驗收測試
  1. 做好文檔測試需要注意的點有哪些?
    仔細(xì)閱讀,跟隨每個步驟,檢查每個圖形,嘗試每個示例;
    檢查文檔的編寫是否滿足文檔編寫的目的;
    內(nèi)容是否齊全,正確,完善;
    標(biāo)記是否正確。
  2. 缺陷分兩種:
  • 完全影響軟件的正常運行或者影響客戶的正常體驗。
    這種當(dāng)然不能予以通過。
  • 不影響產(chǎn)品運行及客戶正常體驗且此軟件急于使用。
    以公司利益為出發(fā),應(yīng)予以通過。但在時間不緊急的情況下應(yīng)不予通過。
    一個好的測試人員應(yīng)該有很好的情況分析能力,并且要有擔(dān)當(dāng)。
  1. 單元測試能發(fā)現(xiàn)約80%的軟件缺陷。
  2. 常用工具總結(jié)。
    LoadRunner-負(fù)載壓力測試:預(yù)測系統(tǒng)性能。預(yù)測系統(tǒng)行為和性能的工業(yè)標(biāo)準(zhǔn)級負(fù)載測試工具。模擬上千萬用戶同時實施并發(fā)操作,來實時監(jiān)控可能發(fā)生的問題。
    JMeter+Badboy:基于JAVA的壓力測試工具,Badboy用來進(jìn)行腳本的錄制。
    功能測試: 通過自動錄制、檢測和回放用戶的應(yīng)用操作。將輸出記錄同預(yù)先給定的記錄比較。QTP(quicktest professional):自動測試工具。
    白盒測試:C++ TEST(做C和C++的白盒測試)、JUnit(Java白盒測試),針對代碼測試。
    測試管理工具:對測試需求、計劃、用例、實施進(jìn)行管理。
    測試輔助工具:本身不執(zhí)行,可以生成測試數(shù)據(jù),為測試提供數(shù)據(jù)準(zhǔn)備。
    缺陷管理工具:Mantis、BugFree、QC、TD
    用例管理工具:TestLink、QC
    測試輔助工具:SVN
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文主要記錄的是《軟件測試的藝術(shù)》一書的讀書筆記以及相關(guān)的知識,歡迎大家提出自己的觀點,進(jìn)行討論與分享。持續(xù)更新....
    _陳陌先生_閱讀 6,459評論 3 37
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,347評論 2 126
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,387評論 7 278
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,858評論 5 101
  • 感恩今天陽光明普照大地,鳥兒歡叫,感恩這次課程幫助我的小北,恒苗老師! 1.以前覺得自己付出特別多,很多委屈,課后...
    王玉文ts閱讀 185評論 1 0

友情鏈接更多精彩內(nèi)容