标签:
本篇日志主要分两个部分,第一部分是对课件中基础知识的整理。然而,虽然课件对白盒测试的覆盖准则讲解得十分细致,但对如何进行实际操作却无涉及,经过前一阶段的探索,我大致掌握了一些方法,希望可以与大家一起讨论,所以第二部分为对应用商店应用中的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.在测试资源管理器中,选择“全部运行”。
到此为止,已设置测试和代码项目,并验证了可在代码项目中运行运行函数的测试。现在可以开始编写真实测试和代码。
标签:
原文地址:http://www.cnblogs.com/zhangkexin/p/4440381.html