曾經(jīng)在B站看過一系列軟件測試的基礎(chǔ)理論,在這里記錄下,共同學(xué)習(xí)
計算機軟件分類
- 按照層次劃分
- 系統(tǒng)軟件
- 支持軟件
- 應(yīng)用軟件
- 按結(jié)構(gòu)劃分
- 單機軟件
- 分布式軟件 C/S B/S
C/S: 客戶端--服務(wù)器,B/S: 瀏覽器--服務(wù)端
- 按照組織劃分
- 開源軟件
- 商業(yè)軟件
計算方式: 網(wǎng)格計算(地圖)、云計算
軟件缺陷由來
- bug: 一只蟲子的由來
- defect(缺陷)
軟件缺陷:
- 軟件未能實現(xiàn)產(chǎn)品說明書的功能
- 軟件出現(xiàn)了產(chǎn)品說明書指名的不應(yīng)該實現(xiàn)的功能
- 產(chǎn)品軟件實現(xiàn)了產(chǎn)品說明書未能提到的功能
- 軟件未實現(xiàn)產(chǎn)品說明書雖未明確提及但應(yīng)該實現(xiàn)的目標(biāo)
- 軟件難以理解、不易使用、運行緩慢或者(從測試角度看)用戶體驗不佳
所有不滿足需求或者超出需求的都是缺陷
沒有不存在缺陷的產(chǎn)品,只有沒有發(fā)現(xiàn)的缺陷
概述 源于上世紀(jì)70th
- 《測試數(shù)據(jù)選擇的原理》
- 《軟件測試的藝術(shù)》
- 軟件質(zhì)量保證部門: QA(質(zhì)量保證)、QC(質(zhì)量控制)、SQA
軟件測試國內(nèi)外現(xiàn)狀
正向思維(開發(fā)思維)
確信自己產(chǎn)品不存在問題
逆向思維
- Glenford.j.Myers
- 測試是為了發(fā)現(xiàn)錯誤而執(zhí)行一個程序或者系統(tǒng)的過程
- 測試時證明程序有錯,而不是證明程序無措
- 一個好的測試用例在于它發(fā)現(xiàn)以前未發(fā)現(xiàn)的錯誤
- 一個成功的測試是發(fā)現(xiàn)了以前未發(fā)現(xiàn)的錯誤的測試
IEEE定義的測試
- 在規(guī)定條件下運行系統(tǒng)或構(gòu)建的過程:觀察和記錄結(jié)果,并對系統(tǒng)或者構(gòu)建的某些方便給予評價
- 分析軟件項目的過程: 檢測現(xiàn)有狀況和所需狀況之間的不同,并且評估軟件項目的特征
廣義軟件測試
- 軟件測試是對軟件形成過程中的所有工作產(chǎn)品(包括程序以及相關(guān)文檔)進(jìn)行的測試
而不僅僅是對程序的運行進(jìn)行測試- 驗證
通過檢查和提供客觀證據(jù)來證實指定的需求是否滿足 - 確認(rèn)
通過檢查和提供客觀證據(jù)來證實特定目的的功能或者應(yīng)用是否實現(xiàn)
- 驗證
軟件測試的目的
- 以最少的人力、物力和時間找出軟件中存在的各種錯誤缺陷,
通過修正各種錯誤和缺陷保證軟件質(zhì)量,避免軟件發(fā)布后由于潛在各種軟件錯誤和缺陷造成的隱患所帶來的
商業(yè)風(fēng)險。同時利用測試過程中得到的測試結(jié)果和測試信息,作為后續(xù)項目開發(fā)和測試過程改進(jìn)的重要輸入
避免在將來的項目開發(fā)和測試中重復(fù)同樣的錯誤;采用更高效的測試管理手段,提高軟件測試的效率和軟件產(chǎn)品的質(zhì)量 - 測試需要保證以下兩點: 程序做了它應(yīng)該做的事以及沒做它不應(yīng)該做的事。
- 軟件測試的目的是盡可能早的找出軟件產(chǎn)品中潛藏的缺陷,并確保其得以修復(fù)
- 軟件測試僅僅只是軟件質(zhì)量保證的重要手段之一,而真正提高軟件產(chǎn)品質(zhì)量,需要持續(xù)不斷的過程改進(jìn)。(開發(fā)的事)
測試和調(diào)試的區(qū)別
- 目標(biāo)、方法、思路都不同
- 測試是從已知的條件開始的,使用預(yù)先定義的過程,并且有預(yù)期結(jié)果;調(diào)試是從未知的的條件開始結(jié)束過程可能無法預(yù)計
- 測試可以計劃,可以預(yù)先制定測試用例和過程,工作進(jìn)度可以度量;描述調(diào)試的過程或者持續(xù)時間相對比較困難
- 測試對象包括軟件開發(fā)過程中的文檔、數(shù)據(jù)以及代碼、而調(diào)試的對象一般來說只是代碼。
軟件的定義
- 程序
- 數(shù)據(jù)
- 結(jié)構(gòu)
軟件工程
軟件工程包括兩個方面: 軟件開發(fā)技術(shù)和軟件項目管理。其中,軟件開發(fā)技術(shù)包括軟件開發(fā)方法學(xué)、軟件工具盒軟件工程環(huán)境。
軟件項目管理包括軟件質(zhì)量、項目評估、進(jìn)度控制、人員組織、配置管理、項目計劃等。
- 引起軟件危機的主要問題是軟件質(zhì)量問題。軟件工程主要解決的就是軟件質(zhì)量問題。而軟件測試是軟件質(zhì)量管理體系中一個非常重要的手段。
- 類比: 在軟件生產(chǎn)過程中,項目經(jīng)理、軟件開發(fā)工程師、軟件測試工程師師最基本的三個角色。就像建筑工程里的項目經(jīng)理、建筑師(含建筑工人)
、項目監(jiān)理之間的關(guān)系。
軟件生命周期
1、立項--需求分析--設(shè)計、編碼、測試--發(fā)布--運行維護(hù)--淘汰
2、詳細(xì):軟件立項--可行性研究--需求分析--概要設(shè)計--詳細(xì)設(shè)計--編碼實現(xiàn)--單元測試--集成測試--系統(tǒng)測試--驗收測試--運行維護(hù)
3、軟件開發(fā)過程:需求分析--系統(tǒng)設(shè)計--編碼&測試--用戶驗收--上線維護(hù)
- 瀑布模型: 上一個階段的工作輸出是下一個階段的工作輸入,缺點是測試介入時間太短,不支持迭代
- 快速原型模型:迅速建造一個可運行的軟件模型,便于理解和澄清,使得開發(fā)與客戶達(dá)成共識。
- 增量模型 (常用):
- 增量模型是把待開發(fā)的軟件模塊化,將每個模塊作為一個增量組件,從而分批次的分析、設(shè)計、編碼和測試這些增量組件
- 開放不需要一次性把整個軟件產(chǎn)品交給用戶,而是可以分批次進(jìn)行提交
- 優(yōu)點
- 模塊化
- 降低開發(fā)風(fēng)險
- 開發(fā)順序靈活
- 限制:
- 要求管理人員把握全局水平較高
- 迭代模型:
- 迭代包括產(chǎn)生產(chǎn)品發(fā)布(穩(wěn)定、可執(zhí)行的版本)的全部開發(fā)活動和要使用該發(fā)布必須的所有其他外圍元素
- 某種程度上,開發(fā)迭代是一次完整經(jīng)過所有工作流程的過程: 需求分析、程序設(shè)計、實施、測試
- 優(yōu)點
- 降低在一個增量上的開支風(fēng)險
- 降低了產(chǎn)品無法按照既定進(jìn)度進(jìn)入市場的風(fēng)險
- 加快整個開發(fā)進(jìn)度
- 適應(yīng)需求變化容易
- 敏捷模型
- 輕文檔
- 無界限
- 螺旋模型
軟件測試概述
標(biāo)準(zhǔn)的測試過程至少包括以下:需求分析--測試計劃--測試設(shè)計--測試執(zhí)行--測試總結(jié)
1、V模型
- 揭示了開發(fā)過程與測試過程中各階段的對應(yīng)關(guān)系,通過開發(fā)和測試同時進(jìn)行的方式來縮短周期,提高開發(fā)效率
- 缺點與不足
- 僅僅把測試過程作為在需求分析、系統(tǒng)設(shè)計以及編碼后的一個階段,忽略了測試對需求分析,系統(tǒng)設(shè)計的驗證,需求的滿足情況一直到后期的驗收測試才被驗證。
- 沒有體現(xiàn) 盡早的和不斷地進(jìn)行軟件測試 的原則
- 不支持迭代
- 缺點與不足
V模型
上圖左右對應(yīng)
2、W模型
- 由兩個V組成,分別代表測試與開發(fā)過程,明確的表示了測試與開發(fā)的并行關(guān)系
-
測試伴隨著整個軟件開發(fā)周期,而且測試的對象不僅僅是程序,需求、設(shè)計等開發(fā)輸出的文檔同樣要測試
W模型
3、H模型
- 相對于V和W模型,H模型將測試活動完全獨立出來了,形成一個完全獨立的流程,將測試準(zhǔn)備活動和測試執(zhí)行活動清晰的體現(xiàn)出來
- 途中標(biāo)記的其他流程可以是任意開發(fā)流程,只要測試條件成熟了,測試準(zhǔn)備活動完成了,測試活動就可以進(jìn)行了。
- 支持迭代(好的模型)
- 早準(zhǔn)備早執(zhí)行
-
為了能夠?qū)﹂_發(fā)過程進(jìn)行測試,應(yīng)當(dāng)采用的測試過程模型為 W+H
H模型
4、X模型
X模型
軟件測試管理理念
- 盡早測試
- 測試人員早起參加軟件項目,及時開展測試的準(zhǔn)備工作,包括編寫測試計劃、制定測試方案以及準(zhǔn)備測試用例
- 盡早的開展測試執(zhí)行工作,一旦代碼模塊完成就應(yīng)該及時開展單元測試,一旦代碼模塊被集成成相對獨立的子系統(tǒng),便可以開展集成測試
- 旦有BUILD提交,便可以看展系統(tǒng)測試工作
- 全面測試
- 對軟件的所有產(chǎn)品進(jìn)行全面的測試,包括需求、設(shè)計文檔、代碼,用戶文檔等。
- 軟件開發(fā)及測試人員(有時包括用戶)全面的參與到測試工作中。
- 全過程測試
- 測試人員要充分關(guān)注開發(fā)過程,對開發(fā)過程的各種變化做出響應(yīng)。
- 測試人員要對測試的全過程進(jìn)行跟蹤。
- 獨立、迭代測試
- 測試活動是迭代的
- 應(yīng)當(dāng)將測試過程從開發(fā)過程中適當(dāng)?shù)某橄蟪鰜恚鳛橐粋€獨立的過程進(jìn)行管理
測試方法
單元測試
- 說明:單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位--程序模塊進(jìn)行正確性驗證的測試過程,其目的在于檢查每個程序單元是否能夠正確實現(xiàn)設(shè)計模塊中的
模塊功能、性能、接口和設(shè)計約束等要求,發(fā)現(xiàn)各模塊可能存在的各種錯誤。單元測試需要從程序內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計用例。多個模塊可以平行的
進(jìn)行單元測試。 - 邏輯結(jié)構(gòu)和代碼功能
集成測試
- 說明:集成測試也叫組裝測試。通常在單元測試的基礎(chǔ)上,將所有的程序模塊進(jìn)行有序的、遞增的測試。集成測試是檢驗程序單元或部件
的接口關(guān)系,逐步集成為符合概要設(shè)計要求的程序部件或整個系統(tǒng)。
確認(rèn)測試
- 說明:確認(rèn)測試也叫有效性測試。實在模擬環(huán)境下,驗證軟件的所有功能和性能及其他特征是否與用戶預(yù)期要求一致。通過了確認(rèn)測試之后的軟件,才具備了進(jìn)入系統(tǒng)測試階段的資質(zhì)
系統(tǒng)測試
- 說明:系統(tǒng)測試實在真實的系統(tǒng)運行環(huán)境下,檢查完整的程序系統(tǒng)能否和系統(tǒng)(包括硬件、外設(shè)、網(wǎng)絡(luò)和系統(tǒng)軟件、支持平臺等)正確配置、連接、并最終滿足用戶的所有需求
驗收測試
- 說明: 是軟件產(chǎn)品檢驗的最后一個環(huán)節(jié)。按照項目任務(wù)書或合同、供需雙發(fā)約定的驗收依據(jù)文檔進(jìn)行對整個系統(tǒng)的測試與評審,決定收或者拒收系統(tǒng)
黑盒測試
- 說明:通過軟件表現(xiàn)來發(fā)現(xiàn)缺陷和錯誤,不關(guān)注程序內(nèi)部結(jié)構(gòu)和處理過程。程序界面處進(jìn)行測試,他只是檢查樣序是否按照規(guī)格說明書來。只關(guān)注輸入輸出。
白盒測試
- 通過對程序內(nèi)部結(jié)構(gòu)分析、檢測來尋找問題。也稱結(jié)構(gòu)測試
灰盒測試
- 介于黑盒白盒之間的測試。關(guān)注輸出對于輸入的正確性;同時也關(guān)注內(nèi)部表現(xiàn),但是不會很詳細(xì),只是通過表象、事件、標(biāo)志來判斷內(nèi)部運行狀態(tài)。
- 同時考慮了用戶端、特定的系統(tǒng)知識和操作系統(tǒng)。它在系統(tǒng)組件的協(xié)同性環(huán)境中評價應(yīng)用軟件設(shè)計
靜態(tài)測試
- 指不實際運行被測對象,而是只是靜態(tài)的檢查代碼、界面或文檔中可能存在的錯誤
- 代碼測試:代碼是否符合標(biāo)準(zhǔn)和規(guī)范
- 界面測試: 界面與需求文檔是否相符
- 文檔測試: 測試用戶手冊和需求說明是否真正符合用戶需求
動態(tài)測試
- 實際運行被測對象,輸入相應(yīng)的測試數(shù)據(jù),檢查實際的輸出結(jié)果和預(yù)期結(jié)果是否相符。判斷動態(tài)還是靜態(tài)的標(biāo)準(zhǔn)是看程序是否運行。
功能測試
- 是黑盒測試的一方面,檢查實際軟件功能是否滿足客戶需求
- 邏輯功能測試
- 界面測試
- 易用性測試
- 安裝測試
- 兼容性測試
- 。。。
性能測試
- 功能的另個一指標(biāo),主要關(guān)注軟件在某一功能在指定的時間、空間條件下,是否正常使用
- 性能測試包括很多方面,主要是時間性和空間性。
回歸測試
- 指新版本測試前,重復(fù)執(zhí)行之前某一個重要版本的所有測試用例
- 目的:
- 驗證之前版本的缺陷是否全部被修復(fù)
- 確認(rèn)修復(fù)缺陷沒有引發(fā)新的缺陷
冒煙測試
- 指一個新版本進(jìn)行系統(tǒng)大規(guī)模的測試之前,先驗證一下基本功能是否實現(xiàn),是否具備可測性。也叫可測性測試。
隨機測試
- 隨意性測試,指測試人員基于經(jīng)驗和直覺的探索性測試,目的是模擬用戶的真實操作,并發(fā)現(xiàn)一些邊緣性錯誤
測試原則
- 所有測試標(biāo)準(zhǔn)都建立在用戶需求之上
- 軟件測試必須基于""質(zhì)量第一",當(dāng)時間和質(zhì)量沖突,時間要服從質(zhì)量
- 實現(xiàn)定義好產(chǎn)品質(zhì)量標(biāo)準(zhǔn),只有有了質(zhì)量標(biāo)準(zhǔn),才能根據(jù)測試結(jié)果,對產(chǎn)品質(zhì)量進(jìn)行分析評估
- 軟件項目啟動,軟件測試開始
- 窮舉測試時不可能的
- 第三方測試更有效,更客觀
- 軟件測試計劃是軟件測試的前提
- 測試用例是設(shè)計出來的,不是寫出來的,所以要根據(jù)測試的目的,采用相應(yīng)的方法去設(shè)計測試用例,從而提高測試效率,
更多發(fā)現(xiàn)錯誤,提高程序可靠性 - 對發(fā)現(xiàn)錯誤更多的程序段,應(yīng)該進(jìn)行更深入的測試,一般來說,一段程序中已經(jīng)發(fā)現(xiàn)的錯誤數(shù)越多,其中存在錯誤的概率也越大
- 重試文檔,妥善保存一切測試文檔(測試計劃、測試用例、測試報告)
- 應(yīng)該把“""盡早和不斷測試"作為座右銘
- 回歸測試的關(guān)聯(lián)性一定要引起充分注意,修改一個錯誤而引發(fā)更多錯誤現(xiàn)象很常見
- 測試應(yīng)該從小規(guī)模到大規(guī)模
- 不可將測試用例置之度外,排除隨意性
- 必須徹底檢查每一個測試結(jié)果
- 一定要注意測試中的錯誤集發(fā)生現(xiàn)象,這和程序員的編程水平和習(xí)慣有很大關(guān)系
- 對測試錯誤結(jié)果一定要有一個確認(rèn)的過程
測試計劃編寫(5W1H)
- what、why、who、where、when、how
制定測試目標(biāo)從以下幾個方面著手
- 理解系統(tǒng)
- 及早介入
- 理解企業(yè)文化和過程
- 測試期望
- 吸取教訓(xùn)
- 工作量大小
- 解決方案的類型
- 技術(shù)選擇
- 預(yù)算
- 時間表
- 分階段解決方案