随机生成算法测试用例

测试算法时,经常使用随机数,针对排序算法测试,建立一个名字空间SortTestHelper

1 namespace SortTestHelper
2 {
3     int* generateRandomArray(int n,int rangeL,int rangeR);//生成随机数组
4     void printArray(int *arr,int n);//打印数组
5     template<typename T> bool isSorted(T *arr,int n);//判断是否成功排序
6     template<typename T> void testSort(string sortName,void(*sort)(T [],int),T arr[],int n);//测试排序时间并打印
7 }

生成随机数组时,三个参数分别为元素个数,元素下限和元素上限。

在这个函数中,默认rangR>rangeL,所以在函数中使用了assert(rangeR>rangeL),如果括号内成立,则继续运行,不成立则打断。

生成随机数的方式是使用srand和rand()配合产生伪随机数序列,rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

 1     //生成有n个元素的随机数组,每个数组元素范围为[rangeL,rangeR]
 2     int* generateRandomArray(int n,int rangeL,int rangeR)
 3     {
 4         assert(rangeR>rangeL);
 5         int *arr=new int[n];
 6         srand(time(NULL));
 7         for(int i=0;i<n;i++)
 8             arr[i]=rand()%(rangeR-rangeL+1)+rangeL;
 9         return arr;
10     }
11     
12     void printArray(int *arr,int n)
13     {
14         for(int i=0;i<n;i++)
15             cout<<arr[i]<<" ";
16         cout<<endl;
17     }

在使用随机数组生成函数后,为数组分配了地址空间,在测试结束后要加delete[] arr,否则会造成内存泄漏。

判断数组是否排序成功时,构造成了函数模板,进行n-1次循环,如果存在某个元素比其后一个元素大,则返回错误

    template<typename T>
    bool isSorted(T *arr,int n)
    {
        for(int i=0;i<n-1;i++)
        {
            if(arr[i]>arr[i+1])
                return false;
        }
        return true;
    }

测试排序时间时,使用了clock()函数,clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。

clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的,一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。而与之对应的宏CLOCKS_PER_SEC适用于将计算系统时间类型转换为用户可读的秒时间,包含于头文件ctime中。

 1     template<typename T>
 2     void testSort(string sortName,void(*sort)(T[],int),T arr[],int n)
 3     {
 4         clock_t startTime=clock();
 5         sort(arr,n);
 6         clock_t endTime=clock();
 7         
 8         assert(isSorted(arr, n));
 9         cout<<sortName<<":"<<double(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;
10         return;
11     }

在函数中,使用了assert()来确定数组是否排序成功,如果成功则继续运行,不成功则打断。

转载于:https://www.cnblogs.com/Bird-of-Paradise/p/6379454.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法可以用来生成测试用例,它是一种基于生物进化理论的优化算法。下面是一个简单的步骤,说明如何使用遗传算法生成测试用例: 1. 定义问题:确定测试目标和测试需求,需要测试一个软件的特定功能或性能。 2. 确定适应度函数:将问题转化为适应度函数,该函数衡量每个个体的适应程度。在测试用例生成中,适应度函数可以根据测试目标和需求来评估测试用例的质量。 3. 初始化种群:随机生成一组初始测试用例作为种群的个体。 4. 选择操作:根据适应度函数选择部分个体作为父代,用于产生下一代个体。选择操作可以使用不同的方法,如轮盘赌选择、锦标赛选择等。 5. 交叉操作:从父代中选择两个个体,并通过交叉操作生成两个子代。交叉操作可以使用不同的方法,如单点交叉、多点交叉等。 6. 变异操作:对子代进行变异操作,以引入新的基因组合。变异操作可以随机改变个体的某些基因或参数。 7. 评估适应度:对新一代个体进行适应度评估,使用定义好的适应度函数。 8. 判断终止条件:判断是否满足终止条件,例如达到最大迭代次数或找到满足要求的测试用例。 9. 重复步骤4到步骤8,直到满足终止条件。 10. 输出结果:输出找到的最优测试用例测试用例集。 需要注意的是,遗传算法生成的测试用例可能并不是最优解,但它可以帮助发现一些较好的测试用例,以覆盖软件的不同功能和边界情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值