軟件測試的藝術(shù)

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


軟件測試的原則

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

防止某個似是而非而實(shí)際錯誤的結(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)測試時(shí)較為常見。
  • 保留測試用例迷雪,當(dāng)程序其他部件發(fā)生更動后重新執(zhí)行,即“回歸測試”倦西。
  1. 計(jì)劃測試工作時(shí)不應(yīng)默許假定不會發(fā)現(xiàn)錯誤赁严。
  2. 程序某部分存在更多錯誤的可能性粉铐,與該部分已發(fā)現(xiàn)錯誤的數(shù)量成正比卤档。
  • 錯誤總是傾向于聚集存在。
  1. 軟件測試是一項(xiàng)極富創(chuàng)造性劝枣、極具智力挑戰(zhàn)性的工作。

代碼檢查溪胶、走查與評審

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

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

同行評審

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


測試用例的設(shè)計(jì)

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

白盒測試

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

邏輯覆蓋測試

  1. 語句覆蓋:可執(zhí)行語句至少被執(zhí)行一次;
    必要條件栖秕,最弱的準(zhǔn)則晓避。語句原本的寫法有誤,無法檢測俏拱?
  2. 判定覆蓋或分支覆蓋:每個判斷的取真分支和取假分支至少經(jīng)歷一次;每條分支路徑都必須至少遍歷一次事格;每個入口點(diǎn)都必須被至少調(diào)用一次搞隐。
    可以滿足語句覆蓋。
  3. 條件覆蓋:每個條件的取值至少滿足一次劣纲;
  4. 判定/條件覆蓋:判斷和條件都滿足;將一個判斷中的每個條件的所有可能的結(jié)果至少執(zhí)行一次癞季,將每個判斷的所有可能結(jié)果至少執(zhí)行一次,將每個入口點(diǎn)都至少調(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. 等價(jià)劃分
  2. 邊界值分析
    邊界值分析的基本思想是使用在最小值、略高于最小值优训、正常值各聘、略低于最大值和最大值處取輸入變量值,記為:min早敬、min+、nom搁嗓、max-箱靴、max荷愕。考慮到健壯性測試抛杨,還可以加一個略大于最大值max+,以及一個略小于最小值min-的值怖现。
  3. 因果圖法、判定表驅(qū)動法潘拨、正交試驗(yàn)設(shè)計(jì)法饶号、功能圖法、場景法等琅束。

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

錯誤猜測


模塊(單元)測試

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


更高級別的測試

軟件開發(fā)過程在很大程度上是溝通有關(guān)最終程序的信息、并將信息從一種形式轉(zhuǎn)換到另一種形式剥啤。由于這個原因,絕大部分軟件錯誤都可以歸因?yàn)樾畔贤ê娃D(zhuǎn)換時(shí)發(fā)生的故障刻诊、差錯和干擾牺丙。

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

可以在每個階段結(jié)束時(shí)引入獨(dú)立的驗(yàn)證過程粟判,以防止一些錯誤。

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

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

功能測試

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

系統(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ì)依據(jù):程序的用戶文檔或書面材料砸紊。

系統(tǒng)測試用例

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

驗(yàn)收測試

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

安裝測試

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

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

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

  1. 根據(jù)特定的測試用例設(shè)計(jì)技術(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. 在測試過程中記錄每單位時(shí)間內(nèi)發(fā)現(xiàn)的錯誤數(shù)量疾渴。通過檢查統(tǒng)計(jì)曲線的形狀,決定繼續(xù)進(jìn)行測試還是終止測試桩撮。

可用性(或用戶體驗(yàn))測試

基本上屬于黑盒測試。

可用性測試流程

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

調(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ā)過程,在此過程中隨時(shí)做好“迎接變化”的準(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)測試,我們通常從如下幾個角度開展:功能模塊測試婶肩,交叉事件測試民镜,壓力測試制圈,容量測試,兼容性測試馋嗜,易用性/用戶體驗(yàn)測試等葛菇。
    對手機(jī)可以施加的壓力測試類型主要有:存儲壓力、邊界壓力庵朝、 響應(yīng)能力壓力、網(wǎng)絡(luò)流量壓力侄旬。
  2. 測試的分類:
  • 人工測試:如個人復(fù)查,抽查和會審等汰蜘;機(jī)器自動測試族操;
  • 按照否關(guān)軟件內(nèi)部結(jié)構(gòu)具體實(shí)現(xiàn)角度:A.白盒測試B.黑盒測試 C.灰盒測試
  • 按照軟件發(fā)程按階段:A.單元測試 B.集測試 C.確認(rèn)測試 D.系統(tǒng)測試 E.驗(yàn)收測試
  1. 做好文檔測試需要注意的點(diǎn)有哪些?
    仔細(xì)閱讀比被,跟隨每個步驟,檢查每個圖形娇昙,嘗試每個示例枪狂;
    檢查文檔的編寫是否滿足文檔編寫的目的;
    內(nèi)容是否齊全州疾,正確,完善薄嫡;
    標(biāo)記是否正確毫深。
  2. 缺陷分兩種:
  • 完全影響軟件的正常運(yùn)行或者影響客戶的正常體驗(yàn)。
    這種當(dāng)然不能予以通過闸迷。
  • 不影響產(chǎn)品運(yùn)行及客戶正常體驗(yàn)且此軟件急于使用。
    以公司利益為出發(fā)鸠蚪,應(yīng)予以通過。但在時(shí)間不緊急的情況下應(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ù)載測試工具斯入。模擬上千萬用戶同時(shí)實(shí)施并發(fā)操作,來實(shí)時(shí)監(jiān)控可能發(fā)生的問題滴某。
    JMeter+Badboy:基于JAVA的壓力測試工具壮池,Badboy用來進(jìn)行腳本的錄制椰憋。
    功能測試: 通過自動錄制、檢測和回放用戶的應(yīng)用操作女责。將輸出記錄同預(yù)先給定的記錄比較刷喜。QTP(quicktest professional):自動測試工具。
    白盒測試:C++ TEST(做C和C++的白盒測試)、JUnit(Java白盒測試)奸忽,針對代碼測試。
    測試管理工具:對測試需求禁炒、計(jì)劃而咆、用例、實(shí)施進(jìn)行管理幕袱。
    測試輔助工具:本身不執(zhí)行暴备,可以生成測試數(shù)據(jù),為測試提供數(shù)據(jù)準(zhǔn)備们豌。
    缺陷管理工具:Mantis涯捻、BugFree、QC望迎、TD
    用例管理工具:TestLink障癌、QC
    測試輔助工具:SVN
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辩尊,隨后出現(xiàn)的幾起案子涛浙,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轿亮,死亡現(xiàn)場離奇詭異晾捏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哀托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門惦辛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仓手,你說我怎么就攤上這事胖齐。” “怎么了嗽冒?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵呀伙,是天一觀的道長。 經(jīng)常有香客問我添坊,道長剿另,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任贬蛙,我火速辦了婚禮雨女,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阳准。我一直安慰自己氛堕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布野蝇。 她就那樣靜靜地躺著讼稚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绕沈。 梳的紋絲不亂的頭發(fā)上锐想,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音乍狐,去河邊找鬼赠摇。 笑死,一個胖子當(dāng)著我的面吹牛澜躺,可吹牛的內(nèi)容都是我干的蝉稳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掘鄙,長吁一口氣:“原來是場噩夢啊……” “哼耘戚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起操漠,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤收津,失蹤者是張志新(化名)和其女友劉穎饿这,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞秋,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡长捧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吻贿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片串结。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舅列,靈堂內(nèi)的尸體忽然破棺而出肌割,到底是詐尸還是另有隱情,我是刑警寧澤帐要,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布把敞,位于F島的核電站,受9級特大地震影響榨惠,放射性物質(zhì)發(fā)生泄漏奋早。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一赠橙、第九天 我趴在偏房一處隱蔽的房頂上張望耽装。 院中可真熱鬧,春花似錦简烤、人聲如沸剂邮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绰姻,卻和暖如春枉侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狂芋。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工榨馁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帜矾。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓翼虫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屡萤。 傳聞我的和親對象是個殘疾皇子珍剑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

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