## 根據軟件的生命周期:
(1)需求分析階段:需求規格說明書——檢測需求文檔是否正確實現了用戶需求
(2)系統設計階段: 概要設計說明書
詳細設計說明書——檢測是否有邏輯和設計中的錯誤
(3)編碼階段:源代碼——檢測是否有編程上的錯誤
(4)系統測試階段:檢測軟件是否滿足了用戶的需求
## 測試級別(明確在不同階段測試的目的)
(1)單元測試(效果好效率低):針對被測系統最小的組成單元實施的測試,一般是類或函數,也可能是最小功能單元。——檢測是否滿足詳細設計中的要求
又稱模塊測試,針對軟件設計中的最小單位——程序模塊,進行正確性檢查的測試工作。單元測試需要從程序的內部結構出發設計測試用例。多個模塊可以平行地獨立進行單元測試。
單元定義:C中指一個函數,Java中指一個類,在圖形化的軟件中,單元一般指1個窗口,1個菜單。

? 1.什么時候進行單元測試?
? 2.由誰來做單元測試?
? 3.單元測試的依據?
? 4.單元測試的通過標準?
? 5.國內單元測試的現狀?
? 6.如何進行單元測試?
(2)集成測試:針對于組件/單元與組件/單元之間的接口進行的測試——檢測接口設計是否與設計相符。分為三種:函數間集成、模塊間集成、子系統間集成

? 1.什么時候進行集成測試?
? 2.由誰來做集成測試?測試人員
? 3.集成測試的依據?
(3)系統測試(效率高商業軟件):通過集成測試得到的軟件,部署在真實的用戶環境下進行的測試。系統測試指的是將整個軟件系統看為一個整體進行測試,包括對功能、性能、以及軟件所運行的軟硬件環境進行測試。系統測試在系統集成完畢后進行測試,前期主要測試系統的功能是否滿足需求,后期主要測試系統運行的性能是否滿足需求,以及系統在不同的軟硬件環境中的兼容性等。
(4)驗收測試:以用戶為主的測試,驗收組應該由項目組成員、用戶代表組成。
分為α(alpha也稱內側版本)測試:測試人員在開發環境下進行,開發人員在場,發現問題及時修改,測試人員在受控環境下進行的測試、β(beta也稱公測本)測試:開發人員不在場,測試人員在在自然環境測試,發現問題專人統一收集,由研發人員修改。Y(gamma也稱候選版)也就是上線前的最終測試,測試完成后需達到上線標準
## 按照測試內容分類
功能測試:關注功能正常(包含兼容性測試),除了下面分類都測;
性能測試:關注(比如前端性能、后端性能);
安全測試:關注傳輸、存儲等安全;
特性測試:特性指平臺差異(即部分兼容性測試),如PC端鼠標,鍵盤操作特性(Tab鍵等);如手機觸屏操作,橫豎屏,中斷恢復(來電)等。
## 按是否查看代碼劃分
### 1 黑盒測試
黑盒測試也稱功能測試或者數據驅動測試,測試中把被測的軟件當成一個黑盒子,不關心盒子的內部結構是什么,只關心軟件的輸入數據與輸出數據。

黑盒測試能發現以下幾類錯誤:
功能不對或功能遺漏。
界面錯誤。
數據庫訪問或者處理錯誤。
性能問題
#### 黑盒測試的優點
? 測試人員不需要了解實現得細節,包括特定的編程語言(沒有編程經驗的人也可以設計測試用例);
? 測試人員和編程人員是相互獨立的(黑盒測試用例設計與程序如何實現無關);
? 從用戶的角度進行測試,很容易被接受和理解;
? 有助于暴露任何與規格不一致或者歧異的地方;
#### 黑盒測試的缺點
? 不能測試程序內部特定部位;
? 如果程序未執行的代碼無法發現;
? 不可能做到窮舉測試
#### 黑盒測試的分類
(1)功能測試(functiontesting)
是黑盒測試的一方面,它檢查實際軟件的功能是否符合用戶的需求。
邏輯功能測試(functiontesting)
界面測試(UItesting)
易用性測試(usability testing)
安裝測試(installationtesting)
兼容性測試(compatibilitytesting)
(2)性能測試(performance testing)峰值(后面詳細 現在了解)
是軟件測試的高端領域,性能測試工程師的待遇和白盒測試工程師不相上下,通常我們所說的高級軟件測試工程師一般就是指性能測試或是白盒測試工程師。
時間性能(事務響應時間等)
空間性能(系統資源消耗)
一般性能測試
穩定性測試
負載測試:通過負載測試來確定在各種工作負載下,系統各項性能指標的變化情況。
壓力測試:通過確定一個系統的瓶頸或者剛好不能接受的性能點,來獲得系統能夠提供的最大服務級別。
#### 2 白盒測
白盒測試又稱結構測試、透明盒測試、邏輯驅動測試或基于代碼的測試。白盒指的打開盒子,去研究里面的源代碼和程序結果。

#### 優點
? 迫使測試人員去仔細思考軟件的實現
? 可以檢測代碼中的每條分支和路徑
? 揭示隱藏在代碼中的錯誤
? 對代碼的測試比較徹底
? 最優化
#### 缺點
? 昂貴
? 無法檢測代碼中遺漏的路徑和數據敏感性錯誤
? 不驗證規格的正確性
### 3 灰盒測試
灰盒測試,是介于白盒測試與黑盒測試之間的一種測試,既可保證黑盒的關注點又可掌控白盒的內部結構,但不會去對內部程序功能和運作做詳細了解,灰盒測試結合了白盒測試和黑盒測試的要素。
## 按是否執行程序劃分?
### 靜態方法
靜態方法是指不運行被測程序本身,僅通過分析或檢查源程序的語法、結構、過程、接口等來檢查程序的正確性。對需求規格說明書、軟件設計說明書、源程序做結構分析、流程圖分析、符號執行來找錯。阿旺分析如下
* 檢查項:代碼風格和規則審核;程序設計和結構的審核;業務邏輯的審核;走查、審查與技術復審手冊。
* 靜態質量:度量所依據的標準是ISO9126。在該標準中,軟件的質量用以下幾個方面來衡量,即功能性(Functionality)、可靠性(Reliability)、可用性(Usability)、有效性(Efficiency)、可維護性(Maintainability)、可移植性(Portability)。
### 動態測試方
動態測試方法是指通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率、正確性和健壯性等性能。這種方法由三部分組成:構造測試用例、執行程序、分析程序的輸出結果。
## 按是否查看代碼劃分
1 手工測(Manual testing)
手工測試就是由人去一個一個的輸入用例,然后觀察結果,和機器測試相對應,屬于比較原始但是必須的一個步驟。阿旺總結優缺點:
* 優點:自動化無法替代探索性測試、發散思維類無既定結果的測試。
* 缺點:執行效率慢,量大易錯。
2 自動化測試(Automation Testing)
就是在預設條件下運行系統或應用程序,評估運行結果,預先條件應包括正常條件和異常條件。簡單說自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。
自動化測試比如功能測試自動化、性能測試自動化、安全測試自動化。
通常所說的自動化是指功能測試自動化。
Findyou看AI技術的興起發展,類似可預見工作都有可能會被偽AI代替。
## 冒煙測試(Smoke Testing)
在《微軟項目求生法則》一書第14章“構建過程”關于冒煙測試,就是開發人員在個人版本的軟件上執行目前的冒煙測試項目,確定新的程序代碼不出故障。
冒煙測試目的是確認軟件基本功能正常,冒煙測試的執行者是版本編譯人員。
現基本執行對象為測試人員,在正規測試一個新版本之前,投入較少的人力和時間驗證基本功能,通過則測試準入
## 隨機測試(Ad-hoc Testing)
隨機測試主要是根據測試者的經驗對軟件進行功能和性能抽查。
根據測試說明書執行用例測試的重要補充手段,是保證測試覆蓋完整性的有效方式和過程。隨機測試主要是對被測軟件的一些重要功能進行復測,也包括測試那些當前的測試用例(TestCase)沒有覆蓋到的部分。
## 安全測試(Security Testing)
安全測試是在IT軟件產品的生命周期中,特別是產品開發基本完成到發布階段,對產品進行檢驗以驗證產品符合安全需求定義和產品質量標準的過程 。
Findyou覺現在對安全知識的普及,大家意識都提上來了。比如現在越來越多的不支持HTTP協議,轉用HTTPS等。
## 探索性測試(Exploratory testing)
探索性測試可以說是一種測試思維技術。它沒有很多實際的測試方法、技術和工具,但是卻是所有測試人員都應該掌握的一種測試思維方式。探索性強調測試人員的主觀能動性,拋棄繁雜的測試計劃和測試用例設計過程,強調在碰到問題時及時改變測試策略。
探索性測試自動化暫時無法代替。Findyou也無法被代替。
## 回歸測試(Regression Testing)
回歸測試是指修改了舊代碼后,重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。自動回歸測試將大幅降低系統測試、維護升級等階段的成本。
在整個軟件測試過程中占有很大的工作量比重,軟件開發的各個階段都會進行多次回歸測試。通過選擇正確的回歸測試策略來改進回歸測試的效率和有效性是很有意義的。
