TinyOS论文08:Proteum

来源:互联网 发布:linux根目录介绍 编辑:程序博客网 时间:2024/06/04 01:24

一个评估C程序测试充分性的工具

Abstract

  1. 该论文提出了Proteum的主要特征,Proteum是一个支持变异测试标准的测试工具;
  2. 通过配置可以让Proteum测试很多面向过程的编程语言;
  3. Proteum的相关环境:SUM工作站 + OPENWIONDOWS环境。

Introduce

  1. 在Proteum中,由测试session来引导程序测试过程。在测试session中测试人员可以创建、中断或者继续执行一个测试程序。一个可以被测试的程序可以是源程序、可执行的程序、函数功能、一个用于创建可执行文件的编译命令和标识测试和用于保存/检测测试session的名字。
  2. 测试人员可以选择正常测试类型或者搜索测试类型来测试程序。
  3. 创建测试程序之后,可以保存当前session防止当前工作丢失、也可以退出Proteum或者检测当前、或者其它的测试程序。
  4. 测试的核心任务是定义一个测试集 + 生成变异体 + 执行测试集中的变异体
  5. 创建测试用例时:Proteum询问测试人员初始化参数(命令行方式),然后开始执行被测程序
  6. 测试人员可以与程序进行交互并且可以提供运行时输入,并且能够查看程序执行时的输入看是否符合与其结构、
  7. 测试用例也有可能是从测试用例集文件中插入。Proteum可以引入的三种文件类型:简单的ASCII文件、POKE TOOL测试文件和其它Proteum测试文件。
  8. 测试用例有可能被删除,也有可能失能;删除的话物理上就没有了这个测试用例;失能的话就是不可用,但是可以重新使能。
  9. 变异体的生成和执行过程:
    首先、测试人员选择变异算子。
    (Proteum提供了71中变异算子,四类:语句、运算符、变量和常亮变异算子),对于每一种变异算子,测试人员可以指定生成对应变异体的百分比,Proteum会随机生成指定百分比的编译算子;变异体可以增量地生成,因此允许将测试分成两个不同的阶段,每一个阶段变异体可以快速执行并且容易分析。
  10. Proteum输出包括:输出(写入stdio和stderr的输出),返回的代码(辨别有相同输出但是异常终止的返回)和执行时间(用于辨别进入死循环和终止执行的变异体)
  11. Proteum执行变异体的两种方式:
    1、正常测试类型:从第一个测试用例开始执行直到变异体被杀死或者没有测试用例杀死变异体直到测试集全部执行完毕。
    2、搜索测试类型:不管变异体有没有被杀死每一个变异体都会被执行;这个方法允许手机额外的数据,例如可以分析出哪一个操作算子很无效;或者统计杀死变异体的测试用例数量。
  12. 然后(变异体执行完后),测试人员可以对测试集进行评估,即对当前的变异测试的一个数据分析,例如:变异体总数;活着的变异体;异常的变异体;变异分数。
  13. 变异分数用力啊衡量一个测试集的充分性;或者的变异体多,变异分数低;就表示测试集的质量不高。或者的变异体有可能跟源程序等价(有测试人员来判定),不能被杀死
  14. Proteum还能报告每一个测试用例的有效性,例如:使用测试用例执行的变异体术 ;杀死的变异体术;原因的分类;活着的变异体数;输入和输出。

Environment

  1. 以命令行的方式调用Proteum;
  2. 设置黄静变量PROTEUMHOME,Proteum的安装目录
setenv PROTEUMHOME /usr/bin/proteum

Testing Session

Proteum的操作是基于测试session的,启动一个测试session,Proteum需要了解标识测试session的参数

创建一个新的测试

  1. Directory:类似于workspace,要构建的程序测试目录,该目录应经包含了源文件和相应的可执行文件;

  2. program Test name:选择一个文件用于标识一个测试session,这个目录用于标识一个测试session。一个测试session根据不同的变异体会生成多个程序测试。

  3. Source Program:在Directory目录中,该目录包含被测程序源文件,以.c为后缀。
  4. Executable Program:与Source file 同一目录,包含的是可执行程序。
  5. Compilation Command
    1、包含了根据源程序来创建可执行程序的系统命令(编译 + 链接)。
    2、只有一个限制:源程序文件名和可执行文件名在编译命令中至少使用一次;
    3、编译命令根据生成的变异体创建可执行程序:变异体原文件名字替代源文件名字 + 可执行文件名字替代变异体可执行文件
    4、链接操作;

  6. Type
    两种类型的测试session:
    1、普通测试类型:杀死一个变异体之后,该变异体将不再会被执行;
    2、搜索测试类型:杀死一个变异体后,该变异体还可以被杀死,这样就可以收集很多有用的信息。

  7. Functions
    可以选择对某段子程序或者某个函数进行变异测试。

搜索一个程序测试

  1. Load选项卡:保存 + 终止 + 取消

保存一个session

  1. save选项卡

四、退出Proteum

五、测试集

Proteum提供了四种对测试用例的操作
添加 + 查看 + 删除 + 引入
1、Add:插入测试用例

为了实现插入测试用例,Proteum需要相应的初始化程序参数,例如 cd /user/bin + 之后Proteum执行被测程序,执行过程中Proteum实现了相应的输入和输出
Proteum的具体实现插入测试用例步骤为:

  1. 输入初始化参数(但是不知道初始化参数到底是什么鬼东东)
  2. 测试人员与被测程序交互的子窗口(Ctrl + C = 终止程序)

2、View:查询测试集

  1. 通过View选项卡查看插入的测试集

3、删除测试用例

  1. 通过delete选项卡删除测试用例

4、导入测试用例
Proteum支持三种导入测试用例的方法:其它Proteum session + POKE-TOOL测试 + ASCII文件

  1. 从Proteum session中引入
    例如:测试同意程序、一同意测试集但是有不同的变异算子时。
  2. 从 POKE-TOOL中引入
    POKE-TOOL支持使用一下控制和数据流标准的结构化测试:所有结点、所有变和潜在使用的标准。

  3. 从ASCII文件中导入
    每一个ASCII文件代表一个测试用例

六、变异体的相关操作

1、生成变异体

  1. 生成变异体选项卡
    1、可以选择变异算子(有四类)
    选择每一类之后的两个选项:生成的变异体数 + 变异百分比(有些不可以执行)
    2、generate选项卡可以被多次使用,第一次之后生成变异体都是之前没有生成过的变异体。

2、变异体的执行

  1. 变异体执行后结果与测试结果不同的话被标记为dead变异体;否变变异体为live
  2. 如果测试session是搜索类型的话,dead变异体还是会被执行;如果是测试session是测试类型的话,只有live的变异体会被执行。
  3. 也可以选择变异体的子集来执行

3、变异体的分析

0 0
原创粉丝点击