<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 軟件測試中的變異測試:變異分數&分析示例 > 原文: [https://www.guru99.com/mutation-testing.html](https://www.guru99.com/mutation-testing.html) ### 什么是突變測試? 變異測試是一種軟件測試,其中我們變異(更改)源代碼中的某些語句,并檢查測試用例是否能夠找到錯誤。 它是[白盒測試](/white-box-testing.html)的一種,主要用于[單元測試](/unit-testing-guide.html)。 變異程序中的更改保持很小,因此不會影響程序的總體目標。 突變測試的目標是評估測試案例的質量,測試案例的強度應足以使突變代碼失敗。 此方法也稱為基于故障的測試策略,因為它涉及在程序中創建故障 突變最初是在 1971 年提出的,但由于涉及的高昂費用而喪失了熱情。 現在,它再次受到青睞,并廣泛用于 [Java](/java-tutorial.html) 和 XML 之類的語言。 在本教程中,您將學習- * [什么是變異測試?](#1) * [如何執行變異測試?](#2) * [如何創建變異程序?](#3) * [突變程序中要更改什么?](#4) * [突變測試的類型](#5) * [突變得分:](#6) * [突變測試的優勢:](#7) * [突變測試的缺點:](#8) ## 如何執行突變測試? **![Mutation Testing: Complete Guide](https://img.kancloud.cn/b9/e5/b9e57f6cfc54a6a6461149905f812813_553x443.png)** 以下是執行變異測試(變異分析)的步驟: **步驟 1** :通過創建稱為變體的許多版本,將錯誤引入程序的源代碼中。 每個突變體都應包含一個故障,目的是使突變體版本失敗,從而證明測試用例的有效性。 **步驟 2** :將測試用例應用于原始程序以及突變程序。 [測試用例](/test-case.html)應該足夠,并且經過調整以檢測程序中的錯誤。 **步驟 3** :比較原始程序和突變程序的結果。 **步驟 4** :如果原始程序和突變程序產生不同的輸出,則該突變被測試用例殺死。 因此,測試用例足以檢測原始程序和突變程序之間的變化。 **步驟 5** :如果原始程序和突變程序生成相同的輸出,則 Mutant 保持活動狀態。 在這種情況下,需要創建更有效的測試用例以殺死所有突變體。 ## 如何創建變異程序? ![Mutation Testing: Complete Guide](https://img.kancloud.cn/c1/2a/c12a21785d04f4488b6bc9c58844c302_126x88.png) 變異不過是對程序語句進行的單個語法更改。 每個突變程序應與原始程序相差一個突變。 | **原始程序** | **突變程序** | | --- | --- | | If(x > y) 打印“你好” 其他 打印“ Hi” | If( **x < y** ) **打印“你好”** **其他 HTG12]打印“嗨”** | ## 突變程序中要更改什么? 有幾種技術可用于生成突變程序。 讓我們看看他們 | **操作數替換運算符** | **表達式修飾運算符** | **語句修改運算符** | | --- | --- | --- | | 用另一個操作數(x 表示 y 或 y 表示 x)或常數替換操作數。 | 在程序語句中替換運算符或插入新的運算符。 | 修改程序語句以創建突變程序。 | | 示例- If(x > y)替換 x 和 y 值 If(5 > y)用常數 5 替換 x | 示例- If(x == y) 我們可以將==替換為> =,并使用突變程序作為 If(x [HT [9] ),然后在語句 If(x == ++ y)中插入++ | 示例- 刪除 if-else 語句中的 else 部分 刪除整個 if-else 語句以檢查程序的行為 一些示例突變運算符: * GOTO 標簽替換 * 返回語句替換 * 語句刪除 * 一元運算符插入(如-和++) * 邏輯連接器替換 * 可比較的數組名稱替換 * 刪除 if-else 語句中的 else 部分 * 添加或替換運算符 * 通過更改數據來替換語句 * 變量的數據修改 * 程序 中數據類型的修改 | 變異測試自動化: 變異測試非常耗時且手動執行很復雜。 為了加快該過程,建議您使用自動化工具。 自動化工具也降低了測試成本。 可用工具清單- * [史賽克](https://stryker-mutator.io/ "Stryker") * [PIT 測試](http://pitest.org/ "PIT Testing") ## 突變測試的類型 在軟件工程中,突變測試可以從根本上分為三種類型:語句突變,決策突變和值突變。 1. **語句突變**-開發人員剪切并粘貼了一部分代碼,其結果可能是刪除了某些行 2. **值突變**-修改了主要參數的值 3. **決策突變**-要更改控制語句 ## 突變得分: 突變得分定義為被殺死的突變體占突變體總數的百分比。 * 變異分數=(殺死的變異體/變異總數)* 100 ![Mutation Testing: Complete Guide](https://img.kancloud.cn/47/8c/478c5203728e6099c073089626d4df9f_250x139.png) 如果分數為 100%,則測試用例具有足夠的變異性。 實驗結果表明,變異測試是衡量測試用例是否充分的有效方法。 但是,主要缺點是生成突變體和針對該突變體程序執行每個測試用例的成本很高。 ## 變異測試的優點: 以下是突變測試的優點: * 這是一種強大的方法,可以使源程序獲得更高的覆蓋率。 * 此測試能夠全面測試突變程序。 * 變異測試為軟件開發人員帶來了良好的錯誤檢測水平。 * 此方法發現了源代碼中的歧義,并具有檢測程序中所有錯誤的能力。 * 通過獲得最可靠,最穩定的系統,客戶將從此測試中受益。 ## 突變測試的缺點: 另一方面,以下是 Mutant 測試的缺點: * 突變測試非常昂貴且耗時,因為需要生成許多突變程序。 * 由于它很耗時,可以說沒有自動化工具就無法完成此測試。 * 每個變異將具有與原始程序相同數量的測試用例。 因此,可能需要針對原始測試套件測試大量的突變程序。 * 由于此方法涉及源代碼更改,因此根本不適用于[黑盒測試](/black-box-testing.html)。 ## 結論: 您是否要對應用程序進行詳盡的測試? 答案是變異測試。 它是測試程序的最全面的技術。 這是一種檢查測試程序的有效性和準確性以檢測系統中的故障或錯誤的方法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看