本发明专利技术公开了一种基于遗传算法和日志分析的异常单元测试自动生成的方法,包括以下步骤:步骤S1:智能日志分析;步骤S2:构建参数数据库;步骤S3:改进遗传算法;智能分析以往的程序日志,将参数值为静态以及参数值连续的参数选出,构建参数数据库,作为遗传算法的初始值及变异值;并使用合理的适应度函数,采用遗传算法生成测试用例;实验结果表明本发明专利技术的有益效果是,该方法在代码函数覆盖率和异常问题召回率方面均具有优越性。
An automatic generation method of abnormal unit test based on genetic algorithm and log analysis
【技术实现步骤摘要】
一种基于遗传算法和日志分析的异常单元测试自动生成的方法
本专利技术涉及到软件测试
,具体是一种基于遗传算法和日志分析的异常单元测试自动生成的方法。
技术介绍
软件测试是保证软件可靠性和稳定性的关键手段和必备环节,测试用例的设计和选择将直接影响软件测试的质量,异常测试是提高系统代码健壮性的测试手段之一,常见的异常测试可以大致分为四类,基于压力的、功能测试的、单元测试的,静态代码扫描的异常测试方法;通过对比发现,异常单元测试除了人力成本外,召回、定位和闭环能力是最好的,其它方法都有一定的异常覆盖欠缺,无法有效地拦截异常代码问题,使得线上稳定性问题依然频繁发生,因此本专利技术采用异常单元测试的方法解决当前问题;为了智能化选择覆盖率高的测试用例,提高测试质量,减少测试时间和人力的消耗,专家和学者们进行了大量的研究;有学者在面向对象类测试用例生成中使用遗传算法,在对类中方法的分支覆盖率和测试用例生成数量上都有明显的改进;还有基于提高分支覆盖率改进了遗传算法的研究,使得改进后方法在覆盖率和进化代数方面均具有优越性;但目前多数的开源测试用例自动生成框架都是针对C语言或者JAVA语言的代码生成用例所以现有的需要一种基于遗传算法和日志分析,并针对C++语言的代码生成异常单元测试用例的方法。
技术实现思路
本专利技术的目的在于提供一种基于遗传算法和日志分析的异常单元测试自动生成的方法,以解决上述
技术介绍
中所提到的问题。为实现上述目的,本专利技术提供如下技术方案:一种基于遗传算法和日志分析的异常单元测试自动生成的方法,包括以下步骤:步骤S1:智能日志分析;步骤S2:构建参数数据库;步骤S3:改进遗传算法。作为本专利技术进一步的方案:所述步骤S1包括:业务功能模块的代码中经常会有大量的分支判断以达到覆盖不同业务场景的需求,例如条件判断if也就是a==1&&b<c的条件,但一般自动生成的测试用例中,a==1的条件往往不易得到满足,从而无法覆盖到分支,类似的情况还有固定的字符串值等;由于商业产品的线上系统每天都会根据真实的用户请求打印出专门的业务日志,日志中会包括参数的名称以及参数值及其他各项指标,本专利技术通过离线分析业务日志中各个目标参数的历史数据,发现历史的任务中,数值参数的值类型大致可分为固定值、离散值、连续值、稳定值;固定值类型的参数不需要处理,直接进行赋值作为最终的预测值;离散值类型的参数统计出现频次最高的参数值作为最终的预测值;连续值类型的参数根据历史参数的最大值与最小值给出参数的阈值,然后从中随机选出一个作为最终的预测值;参数类型占比最大的就是稳定值类型的参数,稳定值参数是在历史的任务中,大多数是呈稳定趋势的,但当有功能迭代或者流量等因素对参数有较大影响时,曲线中会出现一个拐点,拐点后的参数值又会趋于稳定;如图2所示;从图中可以看出参数a的变化趋势,其中拐点处产生了一次功能迭代,导致参数值由9降为6.5;对于此类参数,本专利技术采用指数平滑法来进行参数值的预测,指数平滑法是一种特殊的加权移动平均法;其特点是:第一,指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映市场实际的变化;权数之间按等比级数减少,此级数之首项为平滑常数a,公比为1-a;第二,指数平滑法对于观察值所赋予的权数有伸缩性,可以取不同的a值以改变权数的变化速率;如a取小值,则权数变化较迅速,观察值的新近变化趋势较能迅速反映于指数移动平均值中;因此,运用指数平滑法,可以选择不同的a值来调节时间序列观察值的均匀程度即趋势变化的平稳程度;根据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等;本文采用一次指数平滑法其计算公式如公式:St=a*yt+(1-a)St-1其中,St是时间t的平滑值、St-1是时间t-1的平滑值;a是平滑常数,其取值范围为[0,1];yt是时间t的实际值;根据一次指数平滑法简历模型,将稳定值类型的参数值预测出来作为最终的参数值;这样,固定值、离散值、连续值、稳定值类型的参数都可依据历史日志得到预测值;此外,由于传统遗传算法无法解决非数值数据的自动生成,有文献提出了一种基于遗传算法的非数值型软件测试数据自动生成的方法,通过根据程序执行路径上含有的谓词中的关系运算符,自动选用路径适应度函数或字符适应度函数,以指导给定路径的非数值型软件测试数据自动生成;由于商业产品的参数命名非常规范,因本专利技术此可以基本通过参数名称判断出参数类型及参数含义,对于参数值为非数值的参数,例如字符串类型的参数,可以通过日志分析出参数值的使用日志分析出的参数值,不能通过日志分析得出参数值的本文默认初始值也就是预测值为:“测试Test123@“,包含了中文英文数字及特殊符号;再例如参数为数组,多数开发人员实际中会忽略的数组越界问题,如图3所示,self_material_list这个参数线上正常业务逻辑不会为空,所以开发人员忽略了数组溢出的问题,直接进行取值操作;实际情况是由于线上数据延迟,使得self_material_list为空,导致出现问题,因此本文基于工业界实际情况,为了提高代码健壮性,更多的检测出代码异常,参数为数组类型的初始值也就是预测值为空。作为本专利技术进一步的方案:所述步骤S2包括:基于工业产品参数命名的规范性,不同程序中的相同作用的参数命名也相同这一情况,构建参数数据库,数据库选用MySQL数据库;MySQL数据库速度快、可靠性高和适应性强,使用简单方便且为开源,因此是工业界轻量级软件使用率较高的一款数据库,本专利技术数据存储量在千级别,MySQL数据库可以完全胜任;数据库设计为:①自增id;②参数名,varchar型,20字符,不可为空;③参数值varchar型,255字符,可为空;④参数类型,varchar型,20字符,不可为空;⑤参数是否可用标志,int型,1为可用状态,2为不可用状态,默认值为1;每一个参数及参数值为一条数据,保证数据的实时性,每周两次更新数据,选取本次更新前历史20次的日志数据作为依据,进行数据的选取、预测;对于已有的参数值本专利技术进行更新操作,对于新增的参数值进行插入操作;为了便于管理,本文增加了参数是否可用标志字段,对于暂时不需要的参数值将该字段改写为2状态;在使用时,本专利技术选取参数名字段作为key,基于日志分析得到的动态参数预测值作为value,构建key-value形式的键值对,使用JSON串的形式储存,构建离线参数预测值词表;如图4所示。作为本专利技术进一步的方案:所述步骤S3包括:遗传算法由美国密歇根大学的霍兰德教授创建,源于生物进化理论,模拟了自然界“自然选择”和“优胜略汰”的进化规律,是一种全局优化搜索方法,也是一种迭代的搜索,具有良好的全局搜索能力;遗传算法的主要是一个“生产-迭代”的过程,主要的环节是种群选择、染色体交叉、染色体变异;遗传算法的整个工作流程如下图5所示;根据流程图,先基于智能日志分析得到的数据对参本文档来自技高网...
【技术保护点】
1.一种基于遗传算法和日志分析的异常单元测试自动生成的方法,其特征在于:包括以下步骤:/n步骤S1:智能日志分析;/n步骤S2:构建参数数据库;/n步骤S3:改进遗传算法。/n
【技术特征摘要】
1.一种基于遗传算法和日志分析的异常单元测试自动生成的方法,其特征在于:包括以下步骤:
步骤S1:智能日志分析;
步骤S2:构建参数数据库;
步骤S3:改进遗传算法。
2.根据权利要求1所述的一种基于遗传算法和日志分析的异常单元测试自动生成的方法,其特征在于:所述步骤S1包括:业务功能模块的代码中有大量的分支判断以达到覆盖不同业务场景的需求,日志中会包括参数的名称以及参数值及其他各项指标,通过离线分析业务日志中各个目标参数的历史数据,发现历史的任务中,数值参数的值类型分为固定值、离散值、连续值、稳定值;固定值类型的参数不需要处理,直接进行赋值作为最终的预测值;离散值类型的参数统计出现频次最高的参数值作为最终的预测值;连续值类型的参数根据历史参数的最大值与最小值给出参数的阈值,然后从中随机选出一个作为最终的预测值;运用指数平滑法,选择不同的a值来调节时间序列观察值的均匀程度即趋势变化的平稳程度;根据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法;采用一次指数平滑法其计算公式如公式:
St=a*yt+(1-a)St-1
其中,St是时间t的平滑值、St-1是时间t-1的平滑值;a是平滑常数,其取值范围为[0,1];yt是时间t的实际值;根据一次指数平滑法简历模型,将稳定值类型的参数值预测出来作为最终的参数值;固定值、离散值、连续值、稳定值类型的参数都依据历史日志得到预测值。
3.根据权利要求1所述的一种基于遗传算法和日志分析的异常单元测试自动生成的方法,其特征在于:所述步骤S2包括:基于工业产品参数命名的规范性,不同程序中的相同作用的参数命名也相同这一情况,构建参数数据库,数据库选用MySQL数据库;数据存储量在千级别,MySQL数据库设计为:①自增id;②参数名,varchar型,20字符,不可为空;③参数值varchar型,255字符,可为空;④参数类型,varchar型,20字符,不可为空;⑤参数是否可用标志,int型,1为可用状态,2为不可用状态,默认值为1;每一个参数及参数值为一条数据,保证数据的实时性,每周两次更新数据,选取本次更新前历史20次的日...
【专利技术属性】
技术研发人员:刘宇豪,贺国平,陈子豪,
申请(专利权)人:北京工业大学,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。