索引
0. 前言
这个ACTS工具有点小众,网络上的教程几乎是屈指可数,因此也无从借鉴只能啃英文版的用户文档,好在文档也不长也比较好定位我需要的内容。
事先声明,对于这门课我的理解很是浅显,其实就是学艺不精……很多概念太抽象了我无法理解,因此也就是就ACTS工具本身简单的说明一下,对于真正实现什么我可能做得不是很正确。
博客的前半部分(1-5)是对于软件使用的介绍,后半部分(6)是对于作业的一些提示吧,只能说是提示,因为我压根不是真正的理解我在做什么,而且不可能每个人的模型都是一样的。
鄙人不自力量的发一篇博客,在这里也算是抛砖引玉了,希望朋友们可以不吝分享自己的真知灼见,让更多人可以了解一下。
内容来自博主自己手搓、用户文档等等,仅供参考,更多内容可以查看大三下指南专栏。
1. ACTS 获取
在正式开始之前请先了解一下上面的前言部分!!!
先介绍一下这个ACTS工具:
ACTS的全称是"Automated Combinatorial Testing for Software",即软件自动组合测试。ACTS是一种自动化组合测试策略,可用于生成有效和高效的测试用例。ACTS由美国国家标准技术研究所(NIST)开发,是一种基于组合测试理论的测试技术,可以帮助测试人员减少测试用例的数量,同时保持测试覆盖率。
这个工具的官网是国外的,而且工具是通过发送邮件来获取的。
用自己的邮箱(qq、163……都可以)给kuhn@nist.gov
发送一封包含自己姓名以及组织(学校)的邮件,差不多一天内就能收到回信包含了工具的谷歌云盘(Google Drive)链接。
下面附上我下载的ACTS3.2
的百度网盘链接 提取码:fy2j。如果失效了就通过上述邮件方法获取吧。
压缩包中会带一个当前版本的使用说明,如:acts_user_guide_3.2.pdf
,其实文档不是很长阅读起来也不是太麻烦,大多数问题在3.x
的标题下解决,下面的操作也会结合用户文档。
2. ACTS 启动
用户文档第6页3 GUI Interface
中提到了如何启动GUI:
There are two ways to launch the GUI. One way is to double-click the jar file, which is executable. The other way is to execute the jar file on the command prompt as follows:
java -jar acts.jar
也就是说有下面两种方法可以启动GUI
2.1 双击启动GUI
不同于其他的.exe
文件,这个工具其实是一个jar包,我们用java运行这个jar包就能运行GUI。
可以看得出来下面acts_3.2.jar
的打开方式是java。
2.2 终端启动GUI
如果通过这种方式打不开(或终端闪退),可以尝试在文件夹中右键选择在终端打开
。
然后输入java -jar acts_3.2.jar
即可
当然命令中间可以加很多参数,如果感兴趣可以去看一下文档第7页。
如果还进不去就修改注册表,参考博客
2.3 进入GUI
通过上面任意一种方法打开ACTS的GUI可以看到下面的加载页面
之后就会进入到ACTS的GUI
3. ACTS 参数类型
用户文档第9页3.1 Create New System
中提到了这一点
The Parameters tab (Fig. 3) allows the user to specify the parameters, as well as the values of those parameters, in the new system. Currently, four parameter types are supported, Boolean, Enum, Number, and Range. Range is a convenience feature that allows multiple, consecutive integers to be input quickly. Note that parameter names cannot contain spaces. (The characters that can be contained in a parameter name are the same as those in a variable name in Java programs.)
由此可知目前支持四种参数类型Boolean
, Enum
,Number
, and Range
。并且成员名不能带空格!
3.1 新建系统
点击System
->New
,就能进入到新建页面。
我们看一下新建页面
3.2 ACTS 添加成员
3.2.1 Boolean类型
只有两种情况true
或者false
假设有一个记住登录的选项应该选择布尔类型。
3.2.2 Enum类型
这个类型就相当于字符串(String)类型,支持数字以及字母符号等。
假设登录需要选择身份访客Guest
、用户User
以及管理员Administrator
。
3.2.3 Number类型
就是整数(int)类型,只能是整数。
假设需要键入几个ID
3.2.4 Range类型
那么实际上呢Range和Number的值类型其实是一样的,只是Range类型可以自动添加一段范围。
Number添加1-100需要添加100次,Range只需要添加1次。
比如以年龄作为一个例子:
需要注意的是,这个范围不能太大,最好是1000以内,否则会卡住。
3.2.5 其他
似乎ACTS可以自定义类型,比如自己做一个日期类型、时间类型之类的,但是我没有找到,文档似乎没有提到……这里不多做说明了,如果感兴趣可以去了解一下。
4. ACTS 约束
我说实话这里比较抽象我不是很懂,可能是我数学不太好?我都不知道约束有啥类型……
总之就是要用这个约束来限制ACTS生成的测试样例,比如说如果你想要小学生的钱不能超过10元,那就得添加年级 == "小学" => 钱 <= 10
这个约束,这样生成样例的时候就不会出现是小学而且钱还超过10元的样例了。
用户文档的第11页提到了以下的内容:
The following are examples of various constraints that can be specified:
Constraint 1: (OS = “Windows”) => (Browser = “IE” || Browser = “FireFox” || Browser = “Netscape”), where OS and Browser are two parameters of type Enum. This constraint specifies that if OS is Windows, then Browser must be IE, FireFox, or Netscape.
Constraint 2: (P1 > 100) || (P2 > 100), where P1 and P2 are two parameters of type Number or Range. This constraint specifies that P1 or P2 must be greater than 100.
Constraint 3: (P1 > P2) => (P3 > P4), where P1, P2, P3, and P4 are parameters of type Number or Range. This constraint specifies that if P1 is greater than P2, then P3
must be greater than P4.Constraint 4: (P1 = true || P2 >= 100) => (P3 = “ABC”), where P1 is a Boolean parameter, P2 is a parameter of type Number or Range, and P3 is of type Enum. This constraint specifies that if P1 is true or P2 is no less than 100, then P3 must be “ABC”.
说白了添加约束就是写如果怎么样(if)就怎么样(then)
这种语句的,下面写一段伪代码吧:
如果不添加约束,生成样例时就类似于这种情况,基本上有几个成员就是几层for循环。
for 年级 ["小学","初中","高中"]{
for 零花钱 [1-100]{
样例 = 年级 + 零花钱
}
}
如果添加了约束:
for 年级 ["小学","初中","高中"]{
for 零花钱 [1-100]{
if 年级 == "小学" && 零花钱 > 10{
continue
}
样例 = 年级 + 零花钱
}
}
很明显在添加了约束之后你的样例更加符合你的要求,并且只需要更少的样例就能覆盖你的需求。
当然上面的代码只是为了方便说明,与实际上肯定是有偏差的。
还有一点Enum声明的是字符串类型,在写约束语句的时候需要使用双引号“”
。
Note that parameter values that are strings (i.e., Enum type) in a constraint must be quoted in double quotes
具体都可以用哪些语句可以查阅用户文档第11页。
ACTS工具中在这里添加约束
5. 混合组合强度
这个混合组合强度在用户文档第14页也提到了一嘴
Strength: This option specifies the strength of the test set. Currently, ACTS supports a strength value ranging from 1 to 6. If the strength is set to a number between 1 and 6, only the specified strength will be used for test generation. If the strength is set to “Mixed”, the relations specified in the system configuration (Section 3.1, Relations tab) will be used. For the Base Choice algorithm the strength will be set to 1.
然后根据它提到的Section 3.1,我们可以在用户文档第12页最后一段话和13页顶部的图片找到相关的演示。下面附上13页的演示图,可以看到给一些"关系"选择了"测试强度"(2、3)。
之后我们所有一切准备完全之后点击Operations
->Build...
强度的位置选择Mixed
,然后Build
就可以了。
6. 参考模型
6.1 设定模型
在这一阶段,一定要想好可以完成任务的模型,也就是说必须要用到4种参数类型至少各一次,并且把所有的4种约束都用一次!
我觉得硬要用所有的约束就像是给自行车加装赛车发动机还要改装成八座的一样令人迷惑,当然任务得完成,就算是大炮也得加。
举个例子,模型的场景如下:
(用户类型)UserType[Enum] = new,old,vip
(卡类型)CardType[Enum] = flowCard,phoneCard,welfareCard
(消费)Cost[Number] = 18,28,38
(信用值)Credit[Range] = [500-1000]
(是否订阅)Subscription[Boolean] = true,false
约束大概如下(我不懂内涵是什么只能照葫芦画瓢):
- 新用户只能买前两种类型的卡(满足约束1)
- 信用值大于等于600(满足约束2)
- 信用值不足700只能买大于18元的卡(满足约束3)
- 如果订阅或者信用值大于800那么就是vip(满足约束4)
- 如果是vip必须订阅或者信用值大于800(为了自圆其说)
6.2 参数设置
点击System
->New
创建一个新的系统,记得保存……保存了以后可以通过Edit
->Modify
修改。
按照6.1所述设置参数
6.3 约束设置
按照6.1所述设置约束,当然不保证是对的……
其中大多数的符号和编程时意义相同;=>
左边是如果(条件),右边是那么(结果);还有Enum类型一定要双引号。
如果语句有问题是无法添加到下面的。
6.4 混合组合强度
就是强度越高生成的样例数越多最大值是元素的数量,巴拉巴拉,想了解的百度一下吧。
6.5 生成测试集
Build
一下啦
然后就产生了一大堆样例
在生成个图玩一下。。。
我觉得大概就是要最后这两张图。