今天學習新知識,軟件測試。?
什么是軟件測試?
使用人工和自動手段來運行或測試某個系統的過程,目的在于檢驗它是否滿足規定的需求或弄清實際結果與預期結果之間的差別。
軟件測試的目的?
1)為了發現程序(軟件)存在的代碼或業務邏輯錯誤(找到Bug)
2)為了檢驗產品是否符合用戶需求(提高質量)
3)為了提高用戶的體驗
測試分類?
按照測試階段劃分
單元測試:主要測試程序代碼,為的是確保各單元模塊被正確地編譯,比如有具體到模塊,類,函數,方法的測試等。一般是由開發人員來完成對代碼模塊的測試。
集成測試:單元測試后,將各單元組合成完整的體系,測試軟件單位之間的接口是否正確,數據能否正常傳遞,也就是把多個函數或模塊組裝到一起進行的測試。比如注冊和充值這兩個功能是否能正常連通。一般也是由開發人員來執行集成測試。
系統測試:把軟件系統搭建起來,結合外設,網絡等其他元素,按照軟件規格說明書中的要求,測試軟件的性能、功能等是否與用戶需求相符合,在系統中運行是否存在漏洞等。由測試人員根據測試用例進行完整的系統測試。
驗收測試:本測試階段以用戶為主,用戶對軟件進行驗收,以確保軟件達到符合的效果。
驗收測試又分為Alpha測試(先)和Beta測試(后)。
Alpha測試:把用戶請到開發方對軟件進行的測試,測試環境受開發方控制,測試人員不多且測試時間較集中。執行者:測試人員、用戶、公司內部人員。(Alpha測試可理解為軟件發布的內測版本)
Beta測試:測試環境不受開發方影響,是真實的測試環境,是真實的用戶真實使用的。測試人員廣泛,測試時間較分散。執行者:用戶。(Beta測試可理解為軟件發布的公測版本)
通過Bate測試之后,軟件產品基本上就可以確定下來等待正式發布上線。
按照測試技術劃分
黑盒測試:只需關注外部的輸入與輸出,不需要太關注程序內部實現邏輯(不需要查看代碼)
舉個例子:當我玩一個競技游戲時,用手指操控人物移動,當我的手指往上移動,人物對應也是往上移動,不需要知道這個人物移動功能是通過什么邏輯來實現。
白盒測試:需要關注程序內部實現邏輯(需要查看代碼),不需要太關注外部的輸入與輸出。
舉個例子:也是一個競技游戲,有一個功能是用戶通過手指操控人物移動,那么具體是怎么實現的,用什么代碼什么邏輯來實現。
灰盒測試:需要關注外部輸入與輸出,也需要關注內部具體邏輯實現(兩者都需要關注)
按照是否運行被測系統來劃分
動態測試:需要運行被測系統而進行的測試。
靜態測試:不需要運行被測系統來進行的測試(如界面檢查、文檔檢查、代碼找茬等)
按照測試手段劃分
手工測試(點點點)
自動化測試(替代手工? 利用工具/寫腳本)
按照測試內容劃分
功能測試:驗證軟件的業務功能是否符合需求。比如一個聊天軟件,在聊天框能正常發送消息,這是一個功能,要對這個功能進行測試。
界面測試:當前被測系統的界面與原型圖是否一致。比如一個軟件的首頁, 跟原型圖的顏色、字體、格式、樣式等是否一致。
安全測試:對被測系統的安全進行測試。檢查是否有一些安全漏洞,例如:對于一個登錄界面,用戶名和密碼輸入框是否能過濾對一些特殊字符,是否存在SQL注入的風險等。
兼容性測試:被測系統在不同的測試環境下是否正常。例如(B/S架構的淘寶,用戶在使用不同瀏覽器(ie/chrome/firefox)訪問淘寶時,功能是否都能正常使用)
易用性測試:被測系統的各個功能是否操作方便,是否容易理解,是否容易上手等。
性能測試:在某個特殊情況(如用戶數量劇增,軟件是否還能正常使用);一般會利用一些工具來模擬對人使用的場景來進行測試(負載測試、壓力測試等都屬于性能測試)
其他測試
冒煙測試:在進行正式測試之前對主要核心功能進行的測試,當基本功能沒問題了,再進行后續的測試。
回歸測試:開發人員對存在問題的功能進行修改之后,再一次進行的測試,也就是找到Bug之后提交給開發人員,開發修改之后,測試人員再次進行驗證。
軟件測試基本流程?
需求分析階段:閱讀需求,理解需求,主要是對業務的學習、分析需求點等。
測試計劃階段:主要人物是編寫測試計劃,參考軟件需求規格說明書,以及測試工作的統籌安排,包括測試內容、人員任務分配、測試環境、運用什么測試工具、時間安排等。
測試設計階段:主要人物是編寫測試用例(測試用例:具體如何進行測試的文檔)。
測試執行階段:首先搭建測試環境,執行預測(冒煙測試),以判斷當前版本可測與否,若預測通過,則正式就進入系統測試;若發現問題則提交Bug到缺陷管理平臺,并對Bug進行跟蹤。知道被測軟件達到測試需求要求,沒有重大Bug,測試結束。
測試評估階段:出測試報告,對整個測試的過程和版本質量做一個詳細的評估,確認是否可以上線