【发布时间】:2012-10-14 18:03:12
【问题描述】:
我阅读了很多关于 pex 的论文,我专注于探索策略。我知道 Fitnex 策略是默认使用的,但我不明白 Pex 如何创建第一个参数化单元测试。
我在哪里可以找到这些信息?
通过实验测试,我认为: - 如果参数是“int”,则从 0 开始 - 如果参数是“bool”,则以 false 开头 - 如果参数是一个以 Null 开头的对象
对吗?
现在关于 Fitnex 策略和求解器约束 Z3,我认为它只能通过迭代解决一个约束,对不起我的小英语现在我做一个例子:
假设有以下方法:
public void branchOverTests(bool a, bool b)
{
1 if (a)
{
2 Console.WriteLine("B1");
}
else
{
3 Console.WriteLine("B2");
}
4 if (b)
{
5 Console.WriteLine("B3");
}
else
{
6 Console.WriteLine("B4");
}
}
数字是行标识,Pex 生成 3 个测试:
--- Test 1
branchOverTests(a=false,b=false)
Path: 1F 3T 4F 6T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false && b == false;
--- Test 2
branchOverTests(a=false,b=true)
Path: 1F 3T 4T 5T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && b != false && a == false;
Note: From Test 1 Flipped last branch:
return target != (ClassMethod)null && a == false && b == false;
-> return target != (ClassMethod)null && b != false && a == false;
=> b = true
--- Test 3
branchOverTests(a=true,b=false)
Path: 1T 2T 4F 6T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false && b == false;
Note: From Test 2 Resolve second condition of last branch:
return return target != (ClassMethod)null && b != false && a == false;
-> return target != (ClassMethod)null && a != false && b == false;
=> a = true
=> return target != (ClassMethod)null && a != false;
=> return target != (ClassMethod)null && a != false;
但最有效的参数化测试集是:
branchOverTests(a=false,b=false)
branchOverTests(a=true,b=true)
测试 1 之后:
return target != (ClassMethod)null && a == false;
-> return target != (ClassMethod)null && a != false;
=> a = true
=> return target != (ClassMethod)null && a != false && b != false;
=> b = true
理想测试 2:
branchOverTests(a=true,b=true)
Path: 1T 2T 4T 5T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false && b != false;
我认为正确吗?
致以最诚挚的问候。
【问题讨论】:
标签: performance pex