測試是為發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。
破壞性過程半抱。心理學(xué)和經(jīng)濟(jì)學(xué)脓恕。
軟件測試的對象包括:程序炼幔、數(shù)據(jù)史简、文檔。目標(biāo)程序和源程序都屬于程序圆兵。
軟件測試的原則
- 測試用例中一個必需部分是對預(yù)期輸出或結(jié)果的定義。
- 對程序的輸入數(shù)據(jù)的描述刀脏。
- 對程序在上述輸入數(shù)據(jù)下的正確輸出結(jié)果的精確描述。
防止某個似是而非而實(shí)際錯誤的結(jié)果被解釋成正確結(jié)論愈污。
- 程序員應(yīng)當(dāng)避免測試自己編寫的程序。
- 編寫軟件的組織不應(yīng)當(dāng)測試自己編寫的軟件暂雹。
- 應(yīng)當(dāng)徹底檢查每個測試的執(zhí)行結(jié)果。
- 測試用例的編寫不僅應(yīng)當(dāng)根據(jù)有效和預(yù)期的輸入情況创夜,而且也應(yīng)當(dāng)根據(jù)無效和未預(yù)料到的輸入情況。
- 檢查程序是否“未做其應(yīng)該做的”僅是測試的一半涧尿,測試的另一半是檢查程序是否“做了其不應(yīng)該做的”。
- 應(yīng)當(dāng)避免測試用例用后即棄现斋,除非軟件本身就是一個一次性的軟件偎蘸。
- 交互式系統(tǒng)測試時(shí)較為常見。
- 保留測試用例迷雪,當(dāng)程序其他部件發(fā)生更動后重新執(zhí)行,即“回歸測試”倦西。
- 計(jì)劃測試工作時(shí)不應(yīng)默許假定不會發(fā)現(xiàn)錯誤赁严。
- 程序某部分存在更多錯誤的可能性粉铐,與該部分已發(fā)現(xiàn)錯誤的數(shù)量成正比卤档。
- 錯誤總是傾向于聚集存在。
- 軟件測試是一項(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í)监署。
邏輯覆蓋測試
- 語句覆蓋:可執(zhí)行語句至少被執(zhí)行一次;
必要條件栖秕,最弱的準(zhǔn)則晓避。語句原本的寫法有誤,無法檢測俏拱? - 判定覆蓋或分支覆蓋:每個判斷的取真分支和取假分支至少經(jīng)歷一次;每條分支路徑都必須至少遍歷一次事格;每個入口點(diǎn)都必須被至少調(diào)用一次搞隐。
可以滿足語句覆蓋。 - 條件覆蓋:每個條件的取值至少滿足一次劣纲;
- 判定/條件覆蓋:判斷和條件都滿足;將一個判斷中的每個條件的所有可能的結(jié)果至少執(zhí)行一次癞季,將每個判斷的所有可能結(jié)果至少執(zhí)行一次,將每個入口點(diǎn)都至少調(diào)用一次志于。
- 條件組合覆蓋(多重條件覆蓋):每個條件的所有可能都至少出現(xiàn)一次辉巡,并且判定結(jié)果至少出現(xiàn)一次 恨憎;
與條件覆蓋的區(qū)別:不是簡單要求每個條件出現(xiàn)“真”和“假”兩種結(jié)果,而是要求這些結(jié)果所有可能至少出現(xiàn)一次瓤荔; - 路徑測試:執(zhí)行所有可能的執(zhí)行路徑钥组;
- 基本路徑測試:路徑測試執(zhí)行了每個路徑,每個判定的結(jié)果肯定經(jīng)歷過一次点把。
黑盒測試
數(shù)據(jù)驅(qū)動測試屿附,輸入/輸出驅(qū)動的測試,不需要了解程序內(nèi)部的結(jié)構(gòu)挺份。
- 等價(jià)劃分
- 邊界值分析
邊界值分析的基本思想是使用在最小值、略高于最小值优训、正常值各聘、略低于最大值和最大值處取輸入變量值,記為:min早敬、min+、nom搁嗓、max-箱靴、max荷愕。考慮到健壯性測試抛杨,還可以加一個略大于最大值max+,以及一個略小于最小值min-的值怖现。 - 因果圖法、判定表驅(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)測試用例
- 能力測試:確保程序的目標(biāo)功能實(shí)現(xiàn)
- 容量測試:發(fā)現(xiàn)處理大容量數(shù)據(jù)時(shí)的程序異常
- 強(qiáng)度測試:發(fā)現(xiàn)在大規(guī)模負(fù)載、高強(qiáng)度不間斷持續(xù)的數(shù)據(jù)處理中的異常
- 可用性測試:評估最終用戶在使用軟件并與軟件交互時(shí)的可用性問題
- 安全性測試:試圖攻破程序的安全防線
- 性能測試: 評估程序的響應(yīng)時(shí)間以及吞吐量瓶頸
- 存儲測試: 確保程序可以證券處理其對存儲的要求醉顽,包括系統(tǒng)的存儲和物理上存儲
- 配置測試: 檢查程序是否能在推薦配置上流暢運(yùn)行
- 兼容性/轉(zhuǎn)換測試: 評估新版本是否能兼容老的版本
- 安裝測試: 確保能夠在所有支持的平臺上安裝軟件
- 可靠性測試:評估程序是否能達(dá)到規(guī)格說明中的運(yùn)行時(shí)常和MTBF(平均故障間隔時(shí)間)要求
- 可恢復(fù)性測試:測試系統(tǒng)恢復(fù)相關(guān)的功能是否按設(shè)計(jì)要求實(shí)現(xiàn)
- 服務(wù)/可維護(hù)性測試:評估系統(tǒng)是否擁有良好的數(shù)據(jù)處理和日志機(jī)制游添,以備技術(shù)支持和調(diào)試之需
- 文檔測試: 檢驗(yàn)所有的用戶文檔是否準(zhǔn)確
- 過程測試: 對軟件系統(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)則
- 用完了安排的測試時(shí)間后隐解,測試便結(jié)束。
- 當(dāng)執(zhí)行完所有測試用例都未發(fā)現(xiàn)錯誤诫睬,測試便結(jié)束煞茫。
以上兩種都是不可取的。
三類較為有用的結(jié)束準(zhǔn)則
- 根據(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)吠卷。 - 以確切的數(shù)量來描述結(jié)束測試的條件祭隔。
- 在測試過程中記錄每單位時(shí)間內(nèi)發(fā)現(xiàn)的錯誤數(shù)量疾渴。通過檢查統(tǒng)計(jì)曲線的形狀,決定繼續(xù)進(jìn)行測試還是終止測試桩撮。
可用性(或用戶體驗(yàn))測試
基本上屬于黑盒測試。
可用性測試流程
- 測試用戶的選擇
- 需要多少用戶測試
- 數(shù)據(jù)采集方法
- 可用性調(diào)查問卷
- 何時(shí)手工鞠呈,還是多多益善
調(diào)試
- 確定程序中可疑錯誤的準(zhǔn)確性質(zhì)和位置诬滩;
- 修改錯誤疼鸟。
暴力法調(diào)試
- 利用內(nèi)存信息輸出來調(diào)試空镜。
- 根據(jù)一般的“在程序中插入打印語句”建議來調(diào)試。
- 使用自動化的調(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ǔ)充
- 針對手機(jī)應(yīng)用軟件的系統(tǒng)測試,我們通常從如下幾個角度開展:功能模塊測試婶肩,交叉事件測試民镜,壓力測試制圈,容量測試,兼容性測試馋嗜,易用性/用戶體驗(yàn)測試等葛菇。
對手機(jī)可以施加的壓力測試類型主要有:存儲壓力、邊界壓力庵朝、 響應(yīng)能力壓力、網(wǎng)絡(luò)流量壓力侄旬。 - 測試的分類:
- 人工測試:如個人復(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)收測試
- 做好文檔測試需要注意的點(diǎn)有哪些?
仔細(xì)閱讀比被,跟隨每個步驟,檢查每個圖形娇昙,嘗試每個示例枪狂;
檢查文檔的編寫是否滿足文檔編寫的目的;
內(nèi)容是否齊全州疾,正確,完善薄嫡;
標(biāo)記是否正確毫深。 - 缺陷分兩種:
- 完全影響軟件的正常運(yùn)行或者影響客戶的正常體驗(yàn)。
這種當(dāng)然不能予以通過闸迷。 - 不影響產(chǎn)品運(yùn)行及客戶正常體驗(yàn)且此軟件急于使用。
以公司利益為出發(fā)鸠蚪,應(yīng)予以通過。但在時(shí)間不緊急的情況下應(yīng)不予通過。
一個好的測試人員應(yīng)該有很好的情況分析能力榆综,并且要有擔(dān)當(dāng)。
- 單元測試能發(fā)現(xiàn)約80%的軟件缺陷琳轿。
- 常用工具總結(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