首页 / 专利库 / 人工智能 / 人工神经网络 / 基于ANN的程序检测方法和检测系统及应用

基于ANN的程序检测方法和检测系统及应用

阅读:494发布:2020-05-12

专利汇可以提供基于ANN的程序检测方法和检测系统及应用专利检索,专利查询,专利分析的服务。并且本方案涉及 软件 测试领域的一种基于ANN的程序测试方法;针对功能可完成,代码能正常运行的目标程序进行测试,包括先通过 人工神经网络 构建测试模型,然后取目标程序的输入值输入到测试模型中,根据该检测模型的计算得到测试输出值;再然后,输入值输入到目标程序和测试模型中,得到实际输出值和测试输出值;选出两者的偏差量,将选出的输入值传递到目标程序进行运行,运行结果与实际功能需求进行对比,如果运行结果有其一与实际功能需求不符合,则判定目标程序存在 缺陷 。当目标程序具体代码规格和实现需求均不知晓的情况,采用本检测方法可以很好的得到准确的测试 用例 ,减少了测试过程的资源消耗。,下面是基于ANN的程序检测方法和检测系统及应用专利的具体信息内容。

1.基于ANN的程序测试方法,其特征在于,包括如下步骤:
步骤一,常规测试:将目标程序进行代码和功能实现测试,确保目标程序能够正常运行;
步骤二、得到测试模型:利用人工神经网络训练器构建人工神经网络的初始模型,将目标程序的输入值及对应的输出值作为训练样本,通过训练样本对初始模型进行训练,当初始模型处于收敛状态后,停止增加训练样本,并将收敛状态的模型定义为测试模型;
步骤三、测试输出值的选取:当目标程序的输入值范围小于一百万个,取全部输入值,否则至少取随机的一百万个目标程序的输入值输入到测试模型中,根据该检测模型的计算得到测试输出值;
步骤四、实际输出值的选取:取步骤三中同样的输入值输入到目标程序中,进而得到实际输出值;
步骤五、筛选输入值:对同一输入值对应的测试输出值和实际输出值进行比较;如果两者存在偏差量,以偏差量数值从大到小进行排序,选出排在前50~150位所对应的输入值;
得到用于测试目标程序是否正确的测试值;
步骤六、将选出的测试值存储到可读存储介质中以待复制。
2.根据权利要求1所述的基于ANN的程序测试方法的应用,其特征在于:将步骤六中的测试值传递到目标程序进行运行,运行结果与实际功能需求进行对比,如果运行结果有其一与实际功能需求不符合,则判定目标程序存在缺陷;否则,目标程序为符合要求的程序。
3.根据权利要求1所述的基于ANN的程序测试方法,其特征在于:在步骤二中,所述人工神经网络的初始模型为BP神经网络模型;包括输入层隐藏层输出层;将目标程序的输入值作为输入层;将输入值经过目标程序运行后得到的输出值作为输出层;输入层和输出层的节点数为32个。
4.根据权利要求3所述的基于ANN的程序测试方法,其特征在于,所述BP神经网络模型在训练过程中采用的激活函数为: 当f(x)的值小于0.5时,输出层节点的输出值取0;当f(x)的值大于或等于0.5时,输出层节点的输出值取为1。
5.根据权利要求3所述的基于ANN的程序测试方法,其特征在于,BP神经网络模型的隐藏层的输出值满足: 其中w(j,m)表示从输入层节点到隐
藏层节点的权重,k为隐藏层的节点数。
6.根据权利要求5所述的基于ANN的程序测试方法,其特征在于,BP神经网络模型的输出层的输出值满足: 其中w`(m,n)表示从隐藏层节点到
输出层节点的权重。
7.根据权利要求6所述的基于ANN的程序测试方法,其特征在于:步骤五中所述的偏差量满足: 其中on表示函数实现的输出值。
8.根据权利要求1或7所述的基于ANN的程序测试方法,其特征在于:在步骤二中,在对BP神经网络模型进行训练过程中,通过仿真软件观察曲线变化。
9.根据权利要求1所述的基于ANN的程序测试方法,其特征在于:所述步骤二中的训练样本中输入值的取值范围少于100万个,则全部作为训练样本,否则随机选择100万个作为训练样本。
10.一种程序基于ANN的程序测试的检测系统,其特征在于,包括:程序基础测试单元,用于目标程序的功能和程序本身是否错误进行初步测试;
人工神经网络训练器,存储有多种训练模型,通过训练样本得到收敛状态的人工神经网络模型;
与人工神经网络训练器信号连接的曲线显示器,用于实时显示模型曲线的收敛状态;
存储器,用于存储计算机程序
处理器,用于执行所述计算机程序时实现整个检测程序的运行;
可读存储介质,用于在各设备中转移数据。

说明书全文

基于ANN的程序检测方法和检测系统及应用

技术领域

[0001] 本发明属于软件检测技术,具体涉及到软件功能错误检测方法和构建软件检测模型的系统。

背景技术

[0002] 软件测试是用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。
[0003] 现在的软件测试经过长期人们经验积累和技术的改进,基本上形成了:静态测试方法、动态测试方法、黑盒测试方法和白盒测试方法;四种测试方式针对不同的软件有相应的优势。在实际运用过程中经常是混合测试,对于简单程序也可单独测试。四种测试方式具体的作用和概念为公知技术,在此不再赘述。
[0004] 其中,黑盒测试是针对软件功能是否达到预期来进行检测,通过数据输入观察数据输出,检查软件内部功能是否正常。为了尽可能判断出软件功能实现是正确的或者存在错误的结果。从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。
[0005] 测试用例在构建过程中,我们需要了解软件实现的功能是什么,并且需要知道软件的规则,也就是由于功能点较多,需要根据功能来构建测试案例,编写测试用例文档应有文档模板,须符合内部的规范要求。
[0006] 设计基本事件的用例,应该参照用例规约(或设计规格说明书),根据关联的功能、操作按路径分析法设计测试用例。如何灵活运用各种基该方法来设计完整的测试用例,需要很强的逻辑性和专业性,现在要设计出准确的测试用例,全凭测试设计人员的丰富经验和精心设计。
[0007] 随着人工神经网络的概念出现,研究人员也将该概念逐渐应用于软件测试领域中,人工神经网络具有“自我学习”的能,现在用神经网络用于软件检测,用途主要是在形成准确的测试用例上,如作者“吕珊珊”在其硕士论文“基于BP神经网络软件测试缺陷预测技术研究及应用”中提到,采用BP神经网络对软件进行测试,该文中的研究重点是通过对一段算法程序(函数)采用人工神经网络的概率通过对该算法程序的输入和输出值形成“输入输出值集合”,将输入输出值集合作为构建人工神经网络的基础,这样形成的“人工神经网络模型”与被测的“算法程序”具有相同的功能。
[0008] 该文献的观点虽然很好的证明了通过“人工神经网络”构建的模型在功能上可以等价于提供“输入输出集合”的“算法程序”;但是要用于检测一个功能未知、结构未知、程序复杂程度未知的“算法程序”是否有错误,该文献还没有给出指导方向,用上述方法也无法得到测试用例。
[0009] 在实际工程应用中,要加快“软件”尽快推入市场”,企业可以将“软件测试”环节外包给专进行“软件测试”的机构完成,由于知识产权意识逐渐在人们心中受到重视。在外包过程中,其实是不希望将“源代码”和“需求规格”交给软件测试机构的,基于此,可对“源代码”进行加密,检测机构只能进行类似“黑盒检测”方式检测“源代码”的功能是否正确。
[0010] 被测“源代码”在后面的文章中也称目标程序。
[0011] 由于在检测过程中不知晓被测“源代码”(下文也称目标程序)的内部情况,常常我们要检测的“源代码”对应的计算很复杂,输入值为无穷多的一个变量,这个时候我们无法通过“遍历”方式将输入值进行一一验证;这样将导致,我们只能采取随机输入一部分数据来验证目标程序的功能是否正确;但是这样及时输出结果与我们预期结果完全一致,也无法断定目标程序的功能是否正确;即使是有限个输入值,如果输入量非常大时候,采用一一验证的办法也是非常浪费资源。

发明内容

[0012] 本申请的目的是提供一种基于ANN的程序检测方法,来解决在无法得知目标程序实际需求和目标程序本身结构的状态下,无法得到有效的测试输入值的问题。
[0013] 为了达到上述目和解决上述问题,本申请提供的基于ANN的程序测试方法,包括如下步骤:
[0014] 步骤一,常规测试:将目标程序进行代码和功能实现测试,确保目标程序能够正常运行;
[0015] 步骤二、得到测试模型:利用人工神经网络训练器构建人工神经网络的初始模型,将目标程序的输入值及对应的输出值作为训练样本,通过仿真软件将构建的人工神经网络模型进行可视化,通过训练样本对初始模型进行训练,当初始模型处于收敛状态后,停止增加训练样本,并将收敛状态的模型定义为测试模型;
[0016] 步骤三、测试输出值的选取:当目标程序的输入值范围小于一百万个,取全部输入值,否则至少取随机的一百万个目标程序的输入值输入到测试模型中,根据该检测模型的计算得到测试输出值;
[0017] 步骤四、实际输出值的选取:取步骤三中同样的输入值输入到目标程序中,进而得到实际输出值;
[0018] 步骤五、筛选输入值:对同一输入值对应的测试输出值和实际输出值进行比较;如果两者存在偏差量,以偏差量数值从大到小进行排序,选出排在前50~150位所对应的输入值;得到用于测试目标程序是否正确的测试值。
[0019] 步骤六、将步骤五的测试值存储在可复制的存储介质中。
[0020] 通过上述方法,可以准确的找到50~150个测试值,具体内容见实施例中描述。
[0021] 本方法找到的测试值的应用:是将步骤六中的测试值传递到目标程序进行运行,运行结果与实际功能需求进行对比,如果运行结果有其一与实际功能需求不符合,则判定目标程序存在缺陷;否则,目标程序为符合要求的程序。
[0022] 在步骤二中,所述人工神经网络的初始模型为BP神经网络模型;将目标程序的输入值作为输入层;将输入值经过目标程序运行后得到的输出值作为输出层。所述人工神经网络的初始模型为BP神经网络模型;将目标程序的输入值作为输入层;将输入值经过目标程序运行后得到的输出值作为输出层;输入层和输出层的节点数为32个。
[0023] BP神经网络模型在训练过程中采用的激活函数为: 当f(x)的值小于0.5时,输出层节点的输出值取0。当f(x)的值大于或等于0.5时,输出层节点的输出值取为1。
[0024] 隐藏层的输出值满足: 其中w(j,m)表示从输入层节点到隐藏层节点的权重,k为隐藏层的节点数。
[0025] 输出层的输出值满足: 其中w`(m,n)表示从隐藏层节点到输出层节点的权重。
[0026] 偏差量满足: 其中on表示函数实现的输出值。
[0027] 误差反向算法用于计算权重w(j,m)和w`(m.n)。它包括两个过程:信息的正向传播和误差的反向传播。输入层负责接收外部世界的输入信息并将其传递给隐藏层。隐藏层更改信息并将其发送到输出层。这是一个积极的传播过程。当实际输出与预期输出不匹配时,它将进入错误的反向传播阶段。误差通过输出层,根据梯度下降修正各层的权值,并传回隐藏层和输入层。
[0028] 在对BP神经网络模型进行训练过程中,通过仿真软件观察曲线变化;信息正向传播和误差反向传播的过程是不断调整各层权值的过程,可以很直观的体现在曲线变化上,即神经网络学习和训练的过程。
[0029] 为了减少工作强度,训练样本中输入值的取值范围少于100万个,则全部作为训练样本,否则随机选择100万个作为训练样本。针对现在计算机平100万个的计算基本上在几秒中就可以完成,同时根据曲线输出的反馈,选取100万个已经能够将BP神经网络模型训练成熟达到收敛的状态。
[0030] 综上,通过本申请的检测方法的优点,当得知有一个可以执行的程序代码,但是功能全然不知的状态下,本方案通过调用目标程序获得相应的输出,将输入和输出作为训练人工神经网络的训练样本,得到功能与目标函数相近的人工神经网络模型,将输入值通过该模型计算得到输出值,如果目标函数存在问题,那么必定会出现:同一输入值由模型计算的输出值与目标函数的输出值存在较大偏差。
[0031] 如果选取输出值中偏差排在前50位的,那么因为目标函数本身问题导致的偏差对应的输出值必定在此列。将这些输出值对的输入值交付给知晓该程序实际功能需求的人员,他们就可以从很小范围来判断出目标程序是否存在错误了;即实现了使用小范围数据就可以准确的检测目标程序是否在功能实现上存在问题。
[0032] 为实现上述方法,本申请还提供了基于ANN的程序测试的检测系统包括:程序基础测试单元,用于目标程序的功能和程序本身是否错误进行初步测试;
[0033] 人工神经网络训练器,存储有多种训练模型,通过训练样本得到收敛状态的人工神经网络模型;与人工神经网络训练器信号连接的曲线显示器,用于实时显示模型曲线的收敛状态;存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现整个检测程序的运行;可读存储介质,用于在各设备中转移数据。附图说明
[0034] 图1、为本方案的检测方法的流程图
[0035] 图2、BP人工神经网络模型结构图;
[0036] 图3、为本方案的检测系统的连接示意图。

具体实施方式

[0037] 下面通过具体实施方式进一步详细的说明:
[0038] 实施例1:
[0039] 如图1所示:
[0040] 步骤一S1、常规测试:将目标程序进行代码和功能实现测试,常常会采取白盒和黑盒测试,确保目标程序能够正常运行;该步骤采用现在常规的方式来实现即可,在此不做详述。
[0041] 步骤二S2、得到测试模型:利用人工神经网络训练器构建人工神经网络的初始模型,将目标程序的输入值及对应的输出值作为训练样本,通过训练样本对初始模型进行训练,当初始模型处于收敛状态后,停止增加训练样本,并将收敛状态的模型定义为测试模型;
[0042] 步骤三S3、测试输出值的选取:至少取随机的一百万个目标程序的输入值输入到测试模型中,根据该检测模型的计算得到测试输出值;
[0043] 步骤四S4、实际输出值的选取:取步骤三中同样的输入值输入到目标程序中,进而得到实际输出值;
[0044] 步骤五S5、筛选输入值:对同一输入值对应的测试输出值和实际输出值进行比较;如果两者存在偏差量,以偏差量数值从大到小进行排序,选出排在前50~150位所对应的输入值;得到用于测试目标程序是否正确的测试值。
[0045] 测试应用A1:将步骤五S5中测试值通过有效的储存介质递交给知晓该目标程序实际功能需求的判断者;该判断者将测试值传递到目标程序进行运行,运行结果与实际功能需求进行对比,如果运行结果有其一与实际功能需求不符合,则判定目标程序存在缺陷,否则表示目标程序编写无错误,没有功能上的缺陷。
[0046] 实施例2:
[0047] 针对程序在执行过程中,我们通过如下方式对人工神经网络进行训练,方式如下:
[0048] 如图2所示,采用BP人工神经网络结构建立一个三层神经网络模型用于学习。标签分配前表示La  belSpace值的输入层节点为32,隐藏层节点为k,标签分配后表示LabelSpace值的输出层节点为32,
[0049] 其激活功能为:
[0050] 隐藏层节点的输出值为: w(j,m)表示从输入层节点到隐藏层节点的权重。
[0051] 输出层节点的输出值为: w`(m,n)表示从隐藏层节点到输出层节点的权重。
[0052] 偏差定义如下: 其中on表示函数实现的输出值或需求的输出值。
[0053] 由于函数f(x)的值介于0和1之间,但输出层节点的输出值必须是整数0或1,因此规定当f(x)的值小于0.5时,输出层节点的输出值取0。当f(x)的值大于或等于0.5时,输出层节点的输出值取为1。
[0054] 误差反向算法(BP算法)用于计算权重w(j,m)和w`(m.n)。它包括两个过程:信息的正向传播和误差的反向传播。输入层负责接收外部世界的输入信息并将其传递给隐藏层。隐藏层更改信息并将其发送到输出层。这是一个积极的传播过程。当实际输出与预期输出不匹配时,它将进入错误的反向传播阶段。误差通过输出层,根据梯度下降修正各层的权值,并传回隐藏层和输入层。信息正向传播和误差反向传播的过程是不断调整各层权值的过程,即神经网络学习和训练的过程。
[0055] 虽然本实施例是通过BP人工神经网络模型进行测试模型的构建,但是并不只限定使用这一种人工神经网络模型对测试模型进行构造。
[0056] 实施例3
[0057] 通过对存在缺陷的目标函数进行实际检测进行观察,首先选择32位内存的运算器;因为内部数据以二进制方式表示,我们直接观察到相应位置的0/1变化就可以知晓是否能够准确找到缺陷,具体如下:
[0058] 用32位的二进制整数表示32个标签(第0位表示标签0,第1位表示标签1,依此类推),如果任何位的值为0,表示未分配标签;如果任何位的值为1,则已分配相应的标签。
[0059] 我们可以通过计算机编写识别相应位置的状态变化完成自动识别。自动识别的方法如下:
[0060] 步骤1:对标签分配情况进行判断,判断标签空间是否包含连续空闲;
[0061] 步骤2:如果是标签大于或等于分配数,根据表1来分配标签,并返回0;否则,返回1;
[0062] 开始从低位向高位看;在满足“连续空闲标签的数量大于或等于所需分配标签的数量”的范围集中,查找第一次出现的连续空闲标签范围元素的最小数量。
[0063] 在上面找到的元素中从低到高分配标签。
[0064] 下面给出Assign_Label_Func()的函数实现。由于代码已通过了基本功能和代码正确性测试,所以它是可以被执行的代码,因此可以根据输入生成有效的输出。
[0065] 完整代码实现方式:
[0066]
[0067]
[0068]
[0069] 在函数Assn_Label_Func()的实现中,将该函数中一小段代码删除(上文中通过底线标注部分)来模拟目标程序分支遗漏的错误。
[0070] 缺陷代码形式如下:
[0071]
[0072]
[0073]
[0074] 由于这种删除,只是删除了其中个分支,属于部分功能遗漏,然而这种错误通过路径测试无法发现。
[0075] 见表1所示:假设AssignNum的值等于3,即需要分配三个标签。正确代码应选择范围C。但是,因为删除上述部分的代码,循环结束后就直接忽略范围了C,就会从范围B开始选择。
[0076]
[0077] 表1:输出值显示范围可视表
[0078] 函数Assn_Label_Func()将用作被测函数,该函数的实现被删除了一小段代码。下一点是演示如何通过实施例1的检测方法发现代码缺陷。
[0079] 如表2和表3所示,在存在代码缺陷的情况下,当分别给测试模型和目标程序加入输入量后;其中表2是统计输出值中,测试模型和目标程序有多少个不匹配。表3是表示对应输入量中存在的最大的三个偏差值。
[0080]输入量(次) 测试模型 被测函数
300 102 120
400 11 59
600 0 1
800 0 1
1000 0 0
[0081] 表2:出现偏差数量的统计
[0082]
[0083] 表3:对出现偏差的数值大小排序表
[0084] 结论:
[0085] 一、表2和表3中的结果可以说明:随着学习量的增大,测试模型趋于收敛,测试模型和目标程序的偏差值变小。
[0086] 二、在相同条件下,由于目标程序存在缺陷,导致被测函数无法正确输出,因此与实际需求相对应的测试模型更接近于收敛性,且具有较小的偏差。
[0087] 实施例4:
[0088] 如图3所示:下文描述的检测系统与上文的检测方法可相互对应参照。该程序检测设备包括:存储器105,用于存储计算机程序,将本方案中涉及到需要运算的程序代码进行存储;处理器101,用于执行计算机程序时实现上述方法实施例的程序检测方法的步骤。
[0089] 神功神经网络训练器100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器101(central processing units,CPU)(例如,一个或一个以上处理器)和存储器105,存储目标程序和测试模型的存储介质300。其中,存储器105和存储介质300可以是短暂存储或持久存储。存储在存储器105的程序可以包括一个或一个以上单元模,每个单元模块可以包括单独可执行的目标程序。
[0090] 更进一步地,处理器101可以通过输入输出接口106与存储介质300连接通信,在人工神经网络训练器100上执行存储介质中的一系列指令操作。
[0091] 人工神经网络训练器100可以基于多个操作系统上运行。例如,Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等;人工神经网络训练器100通过输入输出接口106与曲线显示器200通信,用于显示测试模型的收敛程度。
[0092] 该可读存储介质具体可以为U盘、移动硬盘只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
[0093] 本领域人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈