【软件测试】白盒测试

    本篇日志主要分两个部分,第一部分是对课件中基础知识的整理。然而,虽然课件对白盒测试的覆盖准则讲解得十分细致,但对如何进行实际操作却无涉及,经过前一阶段的探索,我大致掌握了一些方法,希望可以与大家一起讨论,所以第二部分为对应用商店应用中的Visual C#代码进行白盒测试方法初探

【基础知识整理】

一、定义

    白盒测试又称结构测试,它一般用来测试程序的内部结构(Control Flow , Data Flow)。并判定其结果是否与预期的结果一致。

二、种类

    静态分析测试(Static Analysis Test,Code Inspection)、语句分支覆盖测试(Ctrl  Flow Test)等。

三、控制流测试及覆盖准则

1.语句覆盖准则(Statement Coverage)

    是最简单的结构性测试方法之一,它要求测试中,程序中的每条语句都得到运行。即,控制流图中的所有语句都被运行的充分必要条件是,覆盖图中的所有节点。

2.分支覆盖准则(Branch Coverage 或Decision Coverage)

    分支覆盖要求在软件测试中,每个分支都至少获得一次真/假取值的经历。

3.谓词测试

    一个分支的条件是由谓词组成。单个谓词称为原子谓词。

(1)原子谓词覆盖准则(也称 Condition Coverage) 

    测试数据集T称为原子谓词覆盖充分的,如果对任意一个分支中的任意一个原子谓词,T中存在一个测试数据使其在运行时为“真”、为“假”各一次。

(2)分支-谓词覆盖准则(也称Branch Condition Coverage 或Decision Condition Coverage )

     测试数据集T称为分支-谓词覆盖充分的,如果对任意一个分支所包含的任意一个原子谓词,T中存在一个测试数据在运行时为真/假值至少各一次,并且任意一个复合谓词本身也至少获得真/假值各一次。

(3)复合谓词覆盖准则(也称Multi Condition Coverage)

    测试数据集T称为复合谓词覆盖充分的,如果任意一个分支,对该分支所包含的原子谓词的任意一个可行的真/假值组合,T中都存在一个测试数据使该组合谓词运行时,原子谓词的取值恰好为该真/假值组合。即每个复合谓词内的原子谓词的各种可能的组合都至少出现一次。

4.路径覆盖准则(Path Coverage)

    测试数据集T称为路径覆盖充分的,当且仅当LT覆盖了GP中的所有完整路径。

四、数据流测试及覆盖准则

1.定义覆盖测试准则

    测试数据集T对测试程序P满足定义覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义性出现,若该定义性出现能够可行地传递到该变量的某一个引用性出现,那么LT中存在一条路径A,它包含一条子路径A’,使得A’将该定义出现传递到某一引用性出现。

2.引用覆盖测试准则

    测试数据集T对测试程序P满足引用覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义n,以及该定义的每一个能够可行地传递到的引用n’,LT中都存在一条路径A,它包含一条子路径A’,使得A’将n传递到n’。

3.定义-引用覆盖测试准则

    测试数据集T对测试程序P满足定义-引用覆盖准则,如果对具有数据流信息的控制流图GP中的任意一条从定义传递到其引用的路径A,若A是无回路的或A是简单回路,那么LT中存在一条路径B,使得A是B的子路径。

【对应用商店应用中的Visual C#代码进行白盒测试方法初探】   

1.在“文件”菜单上选择“新建”,然后选择“新建项目”。     

2.在“新建项目”对话框中,展开“已安装”、“Visual C#”,选择“Windows Store”。然后从项目模板列表中选择“空白应用程序”。 

3.将项目命名为 Maths1,并确保选中“创建解决方案的目录”。

4.在解决方案资源管理器中,选择解决方案名称,从快捷菜单中选择“添加”,然后选择“新建项目”。                               

5.“新建项目”对话框中,展开“已安装”、“Visual C#”,然后选择“Windows 应用商店”。后从项目模板列表中选择“单元测试库(Windows Store 应用程序)”。

6.在 Visual Studio 编辑器中打开 UnitTest1.cs。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;

namespace RooterTests1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
}

(1)每个测试都是使用 [TestMethod] 定义的。测试方法必须返回 void,并且不能具有任何参数。 

(2)测试方法必须位于使用 [TestClass] 特性修饰的类中。运行测试时,将为每个测试类创建一个实例。  将按未指定顺序调用测试方法。

7.在 UnitTest1.cs 文件的 TestMethod1 中插入一些测试代码。

[TestMethod]
public void TestMethod1()
{
    Assert.AreEqual(0, 0);
}

8.在“测试”菜单上,选择“运行”,然后选择“全部运行”,将生成并运行测试项目。

  随即显示“测试资源管理器”窗口,并且测试列出在“已通过的测试”下。  窗口底部的“摘要”窗格将提供有关所选测试的其他详细信息。

   到这里验证了测试是否在资源管理器中运行。

9.在“解决方案资源管理器”中,选择“Maths1”项目名称。从快捷菜单中选择“添加”,然后选择“类”。 

10.将类文件命名为 Rooter.cs

11.将以下代码添加到 Rooter 类 Rooter.cs 文件中:

public Rooter()
    {
    }
    
    // estimate the square root of a number
    public double SquareRoot(double x)
    {
        return 0.0;
    }

12.将对 Maths1 应用程序的引用添加到 RooterTests1项目。                               

(1)在解决方案资源管理器中,选择“RooterTests1”项目,然后选择快捷菜单上的“添加引用...”。                                       

(2)在“添加引用 - RooterTests1”对话框上,展开“解决方案”,再选择“项目”。然后选择“Maths1”项目。

13.向 UnitTest1.cs 文件添加 using 语句:

(1)打开 UnitTest1.cs

(2)在 using Microsoft.VisualStudio.TestPlatform.UnitTestFramework; 行下添加以下代码:

using Maths1;

14.添加使用 Rooter 函数的测试。 将下列代码添加到 UnitTest1.cs

[TestMethod]
    public void BasicTest()
    {
        Maths1.Rooter rooter = new Rooter();
        double expected = 0.0;
        double actual = rooter.SquareRoot(expected * expected);
        double tolerance = .001;
        Assert.AreEqual(expected, actual, tolerance);
    }

  发现程序报错,查看提示原因:

 解决方法:在class Rooter()前加public

15.生成解决方案。新测试将显示在测试资源管理器的“未运行的测试”节点中。                               

16.在测试资源管理器中,选择“全部运行”。

到此为止,已设置测试和代码项目,并验证了可在代码项目中运行运行函数的测试。现在可以开始编写真实测试和代码。

 

原文地址:https://www.cnblogs.com/zhangkexin/p/4440381.html