軟體測試基礎知識

(一)軟體測試的定義

規定的條件下對程式進行操作,以發現程式錯誤衡量軟體品質,並對其是否能滿足設計要求進行評估的過程。

規定條件 --> 測試用例
發現程式錯誤 --> 找bug
衡量軟體品質 --> 品質評估
滿足設計要求 --> 滿足要求
(二)軟體測試方法的分類

按開發階段劃分:

  1. 單元測試(Unit Testing)

    又稱模組測試。對軟體的組成單位進行測試,其目的是檢驗軟體基本組成單位的正確性。測試的對象是軟體測試的最小單位:模組。【例如:登錄測試】

  2. 集成測試(Integration Testing)

    集成測試也稱聯合測試(聯調)、組裝測試:將程式模組採用適當的集成策略組裝起來,對系統的介面及集成後的功能進行正確性檢測的測試工作。集成主要目的是檢查軟體單位之間的介面是否正確。【例如:京東購物用微信支付】

  3. 系統測試(System Testing)

    將軟體系統看成是一個系統的測試。包括對功能、性能以及軟體所運行的軟硬體環境進行測試。時間大部分在系統測試執行階段,包括回歸測試和冒煙測試。

    【例如:房子能不能住人(功能) 房子抗不抗颱風(性能);

    ​ QQ能不能註冊,能不能登錄,能不能聊天發消息(功能) 人數太多會不會卡頓(性能)】

    🐒Tips:系統測試如何開展?

    需求評審(功能需求、性能需求、介面需求) – 測試計劃 – 測試用例 – 用例評審 – 測試環境搭建(平台、架構、web伺服器、資料庫) – 執行用例 – 提交問題 – 缺陷的跟蹤和回歸測試 – 測試報告

  4. 驗收測試(Acceptance Testing)

    是部署軟體前的最後一個測試操作。它是技術測試的最後一個階段,也稱為交付測試向軟體購買者展示該軟體系統滿足原始需求

    實施驗收測試的策略有三種:

    • 正式驗收測試
    • 非正式驗收測試或α測試
    • β測試

按是否手工執行劃分:

  1. 手工測試(Manual Testing)

    手工測試是由人一個一個的輸入用例,然後觀察結果,和機器測試(指使用機器去測試,例如:手機、電腦)相對應,屬於比較原始但是必須的一種

  2. 自動化測試(Automation Testing)

    所謂自動化測試,就是在預設條件下運行系統或應用程式,評估運行結果。(預先條件包括:正常條件和異常條件)。簡單來說,自動化測試就是把人為驅動的測試行為,轉化為機器執行的一種過程。

按是否查看程式碼劃分:

  1. 黑色測試(Black-Box Testing)

    黑盒測試也是功能測試,測試中把被測的軟體當做一個黑盒子,不關心盒子的內部結構是什麼,只關心軟體的輸入數據和輸出數據。

  2. 白盒測試(White-Box Testing)

    白盒測試又稱結構測試、透明盒測試、邏輯驅動測試或基於程式碼的測試。白盒測試是指打開盒子,去研究裡面的源程式碼和程式結果。

  3. 灰盒測試(Gray-Box Testing)

    灰盒測試是介於白盒測試和黑盒測試之間的一種,灰盒測試多用於集成測試階段,不僅關注輸入、輸出的正確性,同時也關注程式內部的情況

按是否運行劃分:

  1. 靜態測試(Static Testing)

    靜態方法是指不運行被測程式本身,僅通過分析或檢查源程式的語法、結構、過程、介面等來檢查程式的正確性,對需求規格說明書、軟體設計說明書、源程式做結構分析、流程圖分析、符號執行來找錯。【靜態測試屬於白盒測試】

  2. 動態測試(Dynamic Testing)

    動態測試是指通過運行被測程式,檢查運行結果與預期結果的差異。【黑盒測試屬於動態測試】

按測試對象劃分:

(一)非功能測試

  1. 性能測試(Performance Testing)

    檢查系統是否滿足需求規格說明書中規定的性能。

    通常表現在以下方面:

    • 穩定性【例如:一萬人的時候和十萬人的時候,甚至一百萬的時候系統會不會卡頓】
    • 響應時間【例如:等待相應的時間是否過慢】
    • 吞吐量(TPS)
  2. 安全測試(Safety Testing)

    安全測試是一個相對獨立的領域,需要更多的專業知識。

    如:WEB的安全測試、需要熟悉各種網路協議、防火牆、CDN、熟悉各種作業系統的漏洞、熟悉路由器等。

  3. 兼容性測試(Compatibility Testing)

    兼容性測試主要指軟體之間能否很好的運作,會不會有影響、軟體和硬體之間能否發揮很好的效率工作,會不會影響導致系統的崩潰。

    • 平台測試【例如:各種不同品牌型號、不同作業系統(如:android、iOS)的手機是否兼容】
    • 瀏覽器測試【例如:不同瀏覽器兼容性測試(火狐、Google、360等)】
    • 軟體本身是否向前或向後兼容【例如:本版本和上一版本是否兼容】
    • 測試軟體是否與其他相關軟體兼容【例如:同時下載兩款軟體是否都能正常使用】
    • 數據兼容性測試【數據之間有一定的隔離性,兩個軟體裡面的數據不會串、相互隔離、兼容】
  4. 文檔測試(Document Testing)

    • 開發文件:可行性研究報告、軟體需求說明書、數據要求說明書、概要設計說明書、詳細設計說明書、資料庫設計說明書、模組開發卷宗。
    • 用戶文件:用戶手冊、操作手冊,用戶文檔的作用:改善易安裝性;改善軟體的易學性與易用性;改善軟體可靠性;降低技術支援成本。
    • 管理文件:項目開發計劃、測試計劃、測試分析報告、開發進度月報、項目開發總結報告。

    在實際的測試中,最常見的就是用戶文件的測試,例如:用戶操作說明書等。

    文檔測試關注的點:

  • ​ 文檔的術語

  • ​ 文檔的正確性

  • ​ 文檔的完整性

  • ​ 文檔的一致性

  • ​ 文檔的易用性

  1. 易用性(用戶體驗性測試)(User Ability Testing)

    易用性是交互的適應性、功能性和有效性的集中體現。又叫用戶體驗測試。

  2. 介面測試(User Interface Testing)

    介面測試(簡稱UI測試),測試用戶介面的功能模組的布局是否合理、整體風格是否一致、各個控制項的放置位置是否符合客戶使用習慣,此外還要測試介面操作便捷性、導航簡單易懂性,頁面元素的可用性,介面中文字是否正確,命名是否統一,頁面是否美觀,文字、圖片組合是否完美等。

  3. 安裝測試(Installation Testing)

    安裝測試是指:測試程式的安裝、卸載。最經典的就是APP的安裝、卸載。

(二)功能測試(Functional Testing)

按測試實施的組織劃分:

  1. α測試(Alpha Testing)

  2. β測試(Beta Testing)

    🐒α測試與β測試區別:

    1. 測試的場所不同:Alpha測試是指把用戶請到開發方的場所來測試,Beta測試是指在一個或多個用戶的場所進行的測試。【例如:遊戲內測版本】

    2. Alpha測試的環境是受開發方控制的,用戶的數量相對比較少時間比較集中

      Beta測試的環境是不受開發方控制的,用戶數量相對比較多時間不集中

    3. Alpha測試先於Beta測試執行。通用的軟體產品需要較大規模的Beta測試測試周期比較長

  3. 第三方測試(Third-party Testing)

    介於開發方和用戶之前的測試組織。【例如:眾測網】

按測試地域劃分:

  1. 國際化測試(International Testing)

    軟體的國際化和軟體的本地化是開發面向全球不同地區用戶使用的軟體系統的兩個過程。而本地化測試和國際化測試則是針對這類軟體產品進行的測試。由於軟體的全球化普及,還有軟體外包行業的興起,軟體的本地化和國際化測試儼然成為一個獨特的測試專門領域。

  2. 本地化測試(Localization Testing)

    本地化測試的對象是軟體的本地化版本。

    之前我們一起學習的測試都是本地化測試。

(三)軟體測試的原則
  1. 測試應該儘早進行,最好在需求階段就開始介入,因為最嚴重的錯誤不外乎是系統不能滿足用戶的需求。

  2. 程式設計師(開發)應該避免檢查自己的程式,軟體測試應該由第三方(測試人員)來負責。

  3. 設計測試用例時應考慮到合法的輸入和不合法的輸入。【比如:金額輸入框】

  4. 在測試程式時,不僅要檢驗程式是否做了該做的事,還要檢驗程式是否做了不該做的事,多餘的工作會帶來副作用,影響程式的效率,有時會帶來潛在的危害或錯誤。

  5. 長期保留所有測試用例,保留測試用例有助於以後修改程式後的回歸測試。

(四)軟體測試策略
  1. 選擇測試方法:選擇最合適當前項目的測試方法(比如項目緊急的時候?項目頻繁發版)(例如:重複測試的工作可以採用自動化測試)

  2. 角色和職責:需要在測試策略裡面明確定義各個角色,以及該角色的職責。比如項目經理、測試組長、測試工程師。

  3. 環境需求:這一點非常重要,它將描述測試時需要的系統環境(軟體,伺服器Linux,windows,資料庫MySQL),包括軟硬體以及網路環境等等。在澄清環境需求的時候,測試組織可以識別出資源方面的風險。

  4. 風險分析:影響測試過程的風險都應該儘早被識別出來,而且必須有相應的解決辦法以便消除或減輕這些風險。(例如:人員休假、軟體是否完成)

  5. 測試進度評估:測試進度將會評估完成測試所需要的時間。在設定進度的時候,首先需要明測試範圍(比如說這次增加一個D模組,部分功能會影響原來已經上線的B模組的功能)然後根據測試資源的多少來指定能被各方面認可的測試進度計劃。

  6. 回歸測試(Regression Testing)策略:回歸測試用來保證之前fix bug的程式碼不會影響軟體的其他部分,這樣需要我們選擇已經執行過的測試用例重新運行。測試人員需要找到一個方法來確定哪些測試用例應該在回歸測試中運行,用例不能太多,因為資源有限,用例也不能太少,否則會達不到必須的測試強度。

  7. 優先順序:測試範圍內的東西不會都是一樣重要的,加上測試資源各種有限,所以為測試的模組排定優先順序是十分的必要。

(五)軟體測試模型
  1. 瀑布模型

    瀑布模型適合於結構化方法。

    軟體項目或產品選擇瀑布模型必須滿足下列條件:

    • 在開發時間內需求沒有或很少變化
    • 分析設計人員應對應用領域很熟悉
    • 低風險項目(對目標、環境很熟悉)(例如:銀行項目)
    • 用戶使用環境很穩定
    • 用戶除提出需求以外,很少參答與開發工作

    瀑布模型

  2. V模型

    • 優點:包含了底層測試(單元測試)和高層測試(系統測試);清楚的標識了開發和測試的各個階段;自上而下逐步求精,每個階段分工明確,便於整體項目的把控。

    • 缺點:自上而下的順序導致測試工作在編碼後,不能及時的進行修改;實際工作中,需求經常變化,導致V模型步驟反覆執行,返工量很大,靈活度較低。

      V模型

V模型和瀑布模型有一些共同的特性,V模型中的過程從左到右,描述了基本的開發過程和測試行為。

  • 優點:V模型的價值在於它非常明確地標明了測試過程中存在的不同級別,並且清楚地描述了這些測試階段和開發過程期間各個階段的對應關係。

  • 局限性:(測試介入太晚)把測試作為編碼之後的最後一個活動,需求分析等前期產生的錯誤知道後期的驗收測試才能發現。

  1. 敏捷模型

    敏捷測試

  2. W模型

    定義:開發一個v,測試一個v,組合起來的模型(w模型也叫雙v模型)。

    W模型

  3. H模型

    相對於V模型和W模型,H模型將測試活動完全獨立出來,形成了一個完全獨立的流程,將測試準備活動和測試執行活動清晰地體現出來。

    H模型

  4. 探索性測試

    探索性測試可以說是一種測試思維模式

    他沒有很多實際的測試方法、技術和工具,但是卻是所有測試人員都應該掌握的一種測試思維方式。

    探索性測試強調測試人員的主觀能動性,拋棄繁雜的測試計劃和測試用例設計過程,強調在碰到問題時及時改變測試策略。

(六)軟體測試生命周期

軟體測試生命周期