首页 / 专利库 / 软件 / 黑盒测试 / 一种基于Agent的码垛机器人控制软件测试方法

一种基于Agent的码垛机器人控制软件测试方法

阅读:997发布:2020-07-18

专利汇可以提供一种基于Agent的码垛机器人控制软件测试方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种基于Agent的码垛 机器人 控制 软件 测试方法,是一种改进的针对码垛 机器人控制系统 软件进行黑盒与 白盒测试 的方法,属于嵌入式软件测试领域。本发明主要包括四个步骤:第一步,建立基于Agent的BDI模型TC_Agent,生成测试所需的 黑盒测试 用例 ;第二步,利用黑盒测试Agent判断系统功能的实现情况;第三步,建立基于遗传 算法 的 覆盖 测试用例生成模型GA_Agent,通过设计编码、适应度函数、选择、交叉、变异等一系列遗传操作,实现覆盖测试用例的自动生成;第四步,建立白盒测试Agent模型,通过预处理Agent、程序插桩Agent完成对程序的插桩操作,将插桩后的程序编译运行后送往目标机,并输入GA_Agent生成的测试用例,利用覆盖率分析Agent得出码垛机器人程序的语句与分支覆盖率。本发明能够应用到不同的程序,简单快捷,能大大提高软件自动化测试的效率,通用性强。,下面是一种基于Agent的码垛机器人控制软件测试方法专利的具体信息内容。

1.一种基于Agent的码垛机器人控制软件测试方法,其特征在于,包括以下步骤:
(1)建立基于Agent的BDI模型TC_Agent,生成测试所需的黑盒测试用例
(2)利用黑盒测试Agent判断系统功能的实现情况;
(3)建立基于遗传算法覆盖测试用例生成模型GA_Agent,通过设计编码、适应度函数、选择、交叉、变异等一系列遗传操作,实现覆盖测试用例的自动生成;
(4)建立白盒测试Agent模型,通过预处理Agent、程序插桩Agent完成对程序的插桩操作,将插桩后的程序编译运行后送往目标机,并输入GA_Agent生成的测试用例,利用覆盖率分析Agent得出码垛机器人程序的语句与分支覆盖率。
2.如权利要求1中所述方法,其特征在于,所述步骤(1)中,将BDI之间的约束关系应用到测试用例生成过程中,建立了基于BDI的黑盒测试用例生成模型TC_Agent,B、D、I分别表示TC_Agent所有可能的信念、愿望和意图的集合。其中B包括设计测试用例基本原则与待测模中功能规格说明的集合;D包括测试用例中所有合理与不合理输入及对应输出的集合;I表示测试用例执行后,对程序运行结果正确与否的判断。
3.如权利要求1中所述方法,其特征在于,所述步骤(2)可描述为将TC_Agent生成的测试用例送往码垛机器人系统并接收其输出,对输出信号进行分析和处理,从而判断系统功能的实现情况。
4.如权利要求1中所述方法,其特征在于,所述步骤(3)进一步包括:
3.1)确定编码方式及种群规模,随机生成初始参数种群;
3.2)按照参数的编码要求对个体进行解码,从而得到各个参数的实际值;
3.3)以当前种群的实际参数值为输入,调用插桩后的被测程序,得到所有个体的目标函数值并返回给遗传算法模块;
3.4)对所有个体目标函数值进行评价,若适应度不满足要求,则进行相应的选择、交叉、变异操作,从而形成一个新的种群;
3.5)对步骤(2)至步骤(4)进行往复操作,直至找到覆盖选定路径的目标参数值或达到预定的最大迭代数。
5.如权利要求1中所述方法,其特征在于,所述步骤(4)进一步包括:
4.1)预处理Agent,通过词法、语法分析得到源程序的语法信息;
4.2)程序插桩Agent,通过对语法信息分析,找出程序的所有插桩点,并自动插入探针函数;
4.3)将插桩后的程序编译并运行,同时输入GA_Agent生成的测试用例;
4.4)覆盖率分析Agent,分别用语句、分支覆盖率算法计算源程序的语句覆盖率和分支覆盖率。

说明书全文

一种基于Agent的码垛机器人控制软件测试方法

技术领域

[0001] 发明涉及一种码垛机器人软件测试方法,特别地涉及一种基于Agent的码垛机器人控制软件测试方法。

背景技术

[0002] 近年来,随着生产生活节奏的加快,自动化技术呈现加速发展的趋势,自动化仓库和自动化柔性生产线进入发展和普及阶段。码垛机器人以其在机械结构、适用范围、设备占地空间、灵活性、成本以及维护等方面的优势使其应用渐为广泛,并成为一种趋势。
[0003] 码垛机器人系统一般有如下要求:控制系统主机为嵌入式微处理器;采用交流伺服控制技术,能按预定轨迹,平稳运行,低能耗;控制系统具备自动、手动工作模式;系统人机接口为具备点动、示教功能;提供参数设置和状态监控操作终端;控制系统具备外部接口,可实现与外围设备的联动及安全保护功能;系统可预存5组参数;具备过载保护、超程保护、超速保护及应急停机等安全保护功能。
[0004] 软件测试是保证软件系统正确性的一个重要手段,也是计算机软件工程方法和技术的一个主要组成部分。虽然测试并不能证明软件系统的正确性,但是,它通过运行选定的测试用例来发现软件中的错误,并通过纠正错误使软件的质量达到令人以满意的程度。所以,在今后相当长的时间内测试仍是保证软件质量的主要手段。
[0005] 随着各种测试技术的深入研究与发展,一些专的嵌入式软件测试工具也应运而生,比较有代表性的有:英国IPL公司提供的一种强大的测试工具Cantata,它的静态分析部分Static Analysis可完成一般的静态测试。Cantata检查代码标准,测量并检查代码复杂性,确定软件的可维护性和标准。英国LDRA公司的静态测试工具Testbed,可用于完成静态分析功能,包括编程规则检查、软件度量分析、静态数据流分析、交叉索引分析等等,并能对源代码进行插桩。
[0006] 但是,这些已有的软件测试工具或方法中,一般仍然或多或少存在以下不足:
[0007] (1)对软件可靠性评价只是一个整体的概念,预测软件缺陷的个数,但不能具体指出缺陷存在的位置
[0008] (2)对隐含的代码错误测试效果不好,如果再次测试将花费大量的人物力;
[0009] (3)人为参与的步骤太多,使用起来很不方便;
[0010] (4)没有进行系统的黑盒与白盒测试,不能全面的反映软件的质量。
[0011] (5)大部分测试软件价格昂贵,很难大规模普及。

发明内容

[0012] 本发明要解决的技术问题是针对目前流行的码垛机器人软件控制系统,如何在减少人为参与和降低费用的情况下,对其进行全面且快速有效的测试。
[0013] 为了解决上述问题,本发明提供了一种基于Agent的码垛机器人控制软件测试方法,包括以下步骤:
[0014] (1)建立基于Agent的BDI模型TC_Agent,生成测试所需的黑盒测试用例;
[0015] (2)利用黑盒测试Agent判断系统功能的实现情况;
[0016] (3)建立基于遗传算法覆盖测试用例生成模型GA_Agent,通过设计编码、适应度函数、选择、交叉、变异等一系列遗传操作,实现覆盖测试用例的自动生成;
[0017] (4)建立白盒测试Agent模型,通过预处理Agent、程序插桩Agent完成对程序的插桩操作,将插桩后的程序编译运行后送往目标机,并输入GA_Agent生成的测试用例,利用覆盖率分析Agent得出码垛机器人程序的语句与分支覆盖率。
[0018] 进一步地,所述步骤(1)中,将BDI之间的约束关系应用到测试用例生成过程中,建立了基于BDI的黑盒测试用例生成模型TC_Agent,B、D、I分别表示TC_Agent所有可能的信念、愿望和意图的集合。其中B包括设计测试用例基本原则与待测模中功能规格说明的集合;D包括测试用例中所有合理与不合理输入及对应输出的集合;I表示测试用例执行后,对程序运行结果正确与否的判断。
[0019] 进一步地,所述步骤(2)可描述为将TC_Agent生成的测试用例送往码垛机器人系统并接收其输出,对输出信号进行分析和处理,从而判断系统功能的实现情况。
[0020] 进一步地,所述步骤(3)进一步包括:
[0021] 3.1)确定编码方式及种群规模,随机生成初始参数种群;
[0022] 3.2)按照参数的编码要求对个体进行解码,从而得到各个参数的实际值;
[0023] 3.3)以当前种群的实际参数值为输入,调用插桩后的被测程序,得到所有个体的目标函数值并返回给遗传算法模块;
[0024] 3.4)对所有个体目标函数值进行评价,若适应度不满足要求,则进行相应的选择、交叉、变异操作,从而形成一个新的种群;
[0025] 3.5)对步骤(2)至步骤(4)进行往复操作,直至找到覆盖选定路径的目标参数值或达到预定的最大迭代数。
[0026] 进一步地,所述步骤(4)进一步包括:
[0027] 4.1)预处理Agent,通过词法、语法分析得到源程序的语法信息;
[0028] 4.2)程序插桩Agent,通过对语法信息进行分析,找出程序的所有插桩点,并自动插入探针函数;
[0029] 4.3)将插桩后的程序编译并运行,同时输入GA_Agent生成的测试用例;
[0030] 4.4)覆盖率分析Agent,分别用语句、分支覆盖率算法计算源程序的语句覆盖率和分支覆盖率。
[0031] 与现有技术相比,本发明提出的基于Agent的码垛机器人控制软件测试方法有如下显著优点:
[0032] (1)实现对嵌入式软件的功能测试,通过将黑盒测试用例输入至嵌入式软件平台,观察系统运行,从而检测软件能否实现预期的功能要求;
[0033] (2)实现对嵌入式软件的白盒覆盖测试,首先进行预处理过程,得到程序结构的语法信息,然后往程序中插入一些能够记录程序信息的探针函数,最后将插桩后的程序编译并移植到目标机运行,通过相关算法来计算程序的语句覆盖率和分支覆盖率,同时还能查询未覆盖目标;
[0034] (3)建立了基于BDI的生成黑盒测试用例模型,通过对信念、愿望、意图三者约束关系的建模及具体实现算法的设计,实现了黑盒测试用例的自动生成;
[0035] (4)建立了遗传算法生成覆盖测试用例的模型,通过对编码、适应度函数、选择算子、交叉算子、变异算子的设计,实现了覆盖测试用例的自动生成。附图说明
[0036] 图1为本发明的体系结构图。
[0037] 图2为GA_Agent的实现流程。
[0038] 图3为白盒测试Agent的实现流程。

具体实施方式

[0039] 本发明的核心思想是:将Agent的概念运用到测试过程中,利用Agent的自治特性,在没有其它Agent或测试者的直接命令和干预下进行独立的判断,利用Agent的智能特性理解测试者的测试目标,利用Agent的社交能力与其它的Agent进行通信。并将码垛机器人软件测试系统分为黑盒测试Agent、白盒测试Agent、测试用例生成Agent(TC_Agent与GA_Agent)三个Agent模块。下面结合附图1对本发明的工作流程及各步骤功能进行详细说明。
[0040] 1.建立基于Agent的BDI模型TC_Agent,生成测试所需的黑盒测试用例。
[0041] 本发明将BDI之间的约束关系应用到测试用例生成过程中,建立了基于BDI的黑盒测试用例生成模型TC_Agent,其中,B、D、I分别表示TC_Agent所有可能的信念、愿望和意图的集合。下面对各组成部分进行详细描述:
[0042] (1)信念(B)
[0043] B是TC_Agent的BDI模型中一组Belief的集合,即BEL(TC_Agent,B)。
[0044] 我们将其定义为:B=。其中,
[0045] BP是设计测试用例基本原则的集合,如果以 表示谓词说明,则
[0046] BF是待测模块中功能规格说明的集合,如果以 表示谓词说明,则
[0047] (2)愿望(D)
[0048] D是TC_Agent的BDI模型中一组Desire的集合,即DES(TC_Agent,D)。
[0049] 我们将其定义为:D=[60]。其中,DRI为所有测试用例中合理输入的集合;DRO为所有测试用例中与合理输入相对应的预期输出的集合;DWI为所有测试用例中不合理输入的集合;DWO为所有测试用例中与不合理输入相对应的预期输出的集合;DAO为任意测试用例输入对应的不合理输出的集合。
[0050] (3)意图(I)
[0051] I是TC_Agent的BDI模型中一组Intention的集合,即INT(TC_Agent,I)。在这里,I表示测试用例执行后,对程序运行结果正确与否的判断。
[0052] 我们将其定义为:I=。其中,
[0053] IC表示测试用例执行后,得到的输出结果与预期结果相同;
[0054] IW表示测试用例执行后,得到的输出结果与预期结果不同,即程序需要修改
[0055] 其中,执行的测试用例包括合理的输入和不合理的输入。
[0056] TC_Agent生成测试用例的具体步骤如下:
[0057] 第一步:初始化操作。将TC_Agent模型中的B、I置初始状态,形成TC_Agent关于当前环境的初始信念和意图。信念取决于设计测试用例的基本原则和程序的功能规格说明,意图则表示为对程序运行后结果正确与否的判断。信念B的设计。
[0058] 首先,BF的设计。程序的功能规格说明要非常详细,即要细化到每个功能模块的不可再分的功能点,TC_Agent需掌握这些功能点作为自己信念的组成部分,即BF。
[0059] 其次,BP的设计。根据黑盒测试用例的基本设计原则,本文对BP设计主要从等价类划分法、边界值分析法和错误推测法三个度来进行。
[0060] 第二步:获取外界信息,通过感知外界输入来修正已有的信念。
[0061] 进行功能测试之前,TC_Agent应获取最新的功能规格说明,通过修正函数,使BF能够与当前最新功能说明相对应。
[0062] 其中修正函数表示为:Ψ(BEL)×P→Ψ(BEL),P表示感知到的外界输入。
[0063] 第三步:生成TC_Agent可能的愿望。根据Step1中信念、意图的初始化及Step2中修正后的信念,通过愿望生成函数DGF,生成TC_Agent模型中的DRI、DRO、DWI、DWO、DAO。
[0064] 其中,愿望生成函数DGF:Ψ(BEL)×Ψ(INT)→Ψ(DES)。
[0065] 第四步:TC_Agent根据Step3中生成的DRI、DRO、DWI、DWO、DAO,得出程序是否正确运行的结果I,作为最终完整的测试用例。
[0066] 2.利用黑盒测试Agent判断系统功能的实现情况。
[0067] 黑盒测试Agent允许用户通过输入测试用例来完成对目标系统的功能测试,主要是通过以下步骤来进行:
[0068] (1)将TC_Agent生成的测试用例以串口通信的方式输送到码垛机器人控制系统,并运行码垛机器人控制程序;
[0069] (2)接收输入测试用例后码垛机器人的相应输出信息;
[0070] (3)对输出信息进行分析和处理,从而判断目标系统是否实现测试用例要求的功能。
[0071] 3.建立基于遗传算法的覆盖测试用例生成模型GA_Agent,通过设计编码、适应度函数、选择、交叉、变异等一系列遗传操作,实现覆盖测试用例的自动生成。下面结合附图2对GA_Agent的实现流程进行详细说明。
[0072] (1)参数编、解码及种群初始化
[0073] GA_Agent采用二进制编码方式对输入参数进行编码,针对程序单元的结构测试,被测程序中影响执行路径的参数个数是不定的,类型也是不一致的,另外,遗传算法中的相关遗传操作均工作在参数的编码上,因此,参数的编码是遗传算法首先要解决的问题,下面将分几个方面来讨论:
[0074] 1)不同参数的编码。
[0075] a)单元的入口参数:如果指定路径的条件表达式中包含此变量,则对其进行编码,否则不编码;
[0076] b)单元的出口参数:因为其并不影响所执行的路径,因此不对其进行编码;
[0077] c)全局变量:仅对指定路径的条件表达式中包含的全局变量进行编码;
[0078] d)局部变量:仅对指定路径的条件表达式中包含的局部变量进行编码;
[0079] 2)编码长度的选取
[0080] 采用二进制编码,就是将某个变量值代表的个体表示为一个{0,1}二进制串,串长取决于求解的精度
[0081] 3)多参数编码的方法
[0082] 对于程序中的一个变量可以选取为串长一定的{0,1}二进制串,但程序单元中的变量往往会多于一个,在对多个参数进行编码时,考虑到进化计算中的个体都只有一条染色体串,因此本文采用“多参数级联编码”的方案,即将每个变量的的编码按顺序级联,组成一条新的二进制串。
[0083] 4)不同数据类型参数的编码
[0084] a)整型变量:编码时不作修改,在解码时进行取整运算;
[0085] b)字符型变量:由于C语言在存储字符型数据时实际存储的是其ASCII码的码值,因此,本文采用相应的ASCII码的码值代替字符型变量进行编码;
[0086] c)数组型变量:将每一个数组元素都作为一个参数进行编码;
[0087] d)结构体变量:将结构体中每个变量均作为一个参数进行编码;
[0088] e)指针变量:指针变量的处理有一定难度,需在编码之前借助静态分析工具,对其指向的变量进行编码;
[0089] f)布尔型变量:将其当作取值区间为[0,1]的整形变量进行编码;
[0090] GA_Agent中初始种群为随机生成,即种群中所有个体二进制编码串的每一位均为随机生成;对于种群规模的设置则从种群多样性和算法效能两个角度考虑。
[0091] (2)插桩函数及适应度函数的构造
[0092] GA_Agent模型中,需在指定路径上生成测试用例,我们的目标是引导算法最终找到覆盖指定路径的测试数据,因此,每个个体的优劣应该体现在它满足该路径条件表达式的程度。
[0093] 通常情况下,程序的分支一般都出现在选择和循环结构的判断语句中,因此,每一个分支都可由一个分支谓词来表示,常见的分支谓词有“>,<,>=,<=,=,!=”。本文中GA_Agent采用的适应度函数是在Kore1的分支函数概念的基础上来构造的,对六种分支谓词的构造方法为:
[0094] E1>E2:f(n)=E1-E2,当f(n)<0时,f(n)=0;
[0095] E1<E2:f(n)=E2-E1,当f(n)<0时,f(n)=0;
[0096] E1>=E2:f(n)=E1-E2,当f(n)<0时,f(n)=0;
[0097] E1<=E2:f(n)=E2-E1,当f(n)<0时,f(n)=0;
[0098] E1=E2:f(n)=|E1-E2|;
[0099] E1!=E2:f(n)=|E1-E2|+K1,当f(n)≠K时,f(n)=0,(K>0)
[0100] 对于分支插桩函数f(n),当分支谓词为真时,分支插桩函数f(n)取0;当分支谓词为假时,分支插桩函数f(n)>0。
[0101] 以如上所述的分支插桩函数为基础,在所选定的路径上各分支点前插入相应的插桩函数f(1),f(2)…,f(n),使这些插桩函数为0,既可以覆盖该选定的路径。由插桩函数叠加,从而形成最终的适应度函数,即:F=f(1)+f(2)+…+f(n)。另外由于遗传算法中适应度函数一般取正值且最好搜索其最大值,因此本文对此适应度函数做幂指数变化,最终的适应度函数为:
[0102] f(i)为指定路径上的分支插桩函数
[0103] (3)遗传算子的设计
[0104] 1)选择算子
[0105] GA_Agent选用的选择算子采用按适应度比例分配的方法来进行,即根据种群中个体的相对适应度来决定个体被遗传到下一代的概率,其中相对适应度为个体适应度占总适应度的比值。
[0106] 比例选择的具体算法实现步骤为:
[0107] 1.1)由适应度函数计算每个个体的适应度值f(xi);
[0108] 1.2)累加所有个体的适应度值,得最终累加值SUM=∑f(xi),累加过程中记录下对应于每个个体的中间累加值Si;
[0109] 1.3)产生一个随机数N,N的取值范围为(0,SUM);
[0110] 1.4)判断N所在所有个体累加值的位置,即如果Si<N<Si+1,则第i+1个个体被选中;
[0111] 1.5)重复1.3),1.4),直至选出的个体数目满足要求为止。
[0112] 2)交叉算子
[0113] GA_Agent采用的交叉算子为多点交叉。最主要的问题是交叉点的位置。由于交叉点是随机确定的,如果这些交叉点在整个位串上分布不均匀,特别是当交叉点过分集中于某一个或少数几个参数的位串上时,交叉操作对位串结构的改变将仅限于局部位串。
[0114] 为解决上述问题,GA_Agent在实现多点交叉时,有意识地将交叉点均匀地落在每个参数的位串上,从而保证每个参数的位串上均实现单点交叉。
[0115] GA_Agent中多点交叉的具体算法实现步骤为:
[0116] 2.1)对种群中个体依适应度值大小进行排序,选出适应度值较小的M-2个个体,其中M表示种群规模;
[0117] 2.2)对选出的M-2个个体进行两两配对,这样做的目的是保护当前种群中最优的2个个体,保证其在本次遗传过程中不会退化;
[0118] 2.3)依照个体中参数的个数确定交叉点的个数,这里将两者数目设置为相同;
[0119] 2.4)首先在个体第一个参数的位串长度范围内随机设定一个点作为交叉点,然后依次将交叉点的位置加上参数位串长度,新位置作为下一参数的交叉点,以此类推;
[0120] 2.5)对相互配对的个体,依设定的交叉概率相互交换个体中每个参数交叉点后的染色体基因,从而生成两个新的个体。
[0121] 3)变异算子
[0122] GA_Agent选用的变异算子为基本位变异,即以变异概率随机指定个体编码串的某一位或某几位为变异位,并对其作变异运算,其中变异概率一般都设为很小的值,通常在0.001-0.01之间。考虑到变异算子优越的局部搜索能力,本文将其应用到从逼近目标值到最终找到目标值的过程,具体做法是通过有意识地控制变异的位置,是参数位串的末几位发生变异,这相当于给参数的值增加或减少了一个很小的步长,从而可能以较小的代价找到参数的目标值。
[0123] 基本位变异具体的算法实现步骤为:
[0124] 3.1)对种群中所有个体编码串中每一个参数的末几位基因座,依变异概率判断其是否为变异点;
[0125] 3.2)对每一个指定的变异点,对其基因值作取反运算。
[0126] 4.建立白盒测试Agent模型,通过预处理Agent、程序插桩Agent完成对程序的插桩操作,将插桩后的程序编译运行后送往目标机,并输入GA_Agent生成的测试用例,利用覆盖率分析Agent得出码垛机器人程序的语句与分支覆盖率。下面结合附图3对百合测试Agent进行详细说明。
[0127] (1)预处理Agent
[0128] 预处理Agent主要包括词法分析Agent和语法分析Agent,用来生成源程序的语法信息。首先,对于源程序中的空白符、跳格符、回车符、换行符和注释等程序的非必要组成部分,预处理时可将其剔掉;词法分析Agent是采用词法分析工具Lex将被测程序分解成单独的词的表示,形成初步的符号表,并将结果传递给语法分析Agent;语法分析Agent则通过接收词法分析的结果,采用Yacc将输入字符串识别为单词符号流,找出变量声明语句,并相应分离出指针变量和数组变量,其结果是生成语法信息,每一个语法规则对应一个相应的处理函数,并作为语法信息的重要结点与对外的接口。
[0129] 1)词法分析Agent
[0130] 本发明词法分析Agent主要借助词法分析工具Lex实现,Lex是一种词法分析程序的生成程序,专门用于对字符输入流进行词法分析处理,它可以使用一系列对符号表内容的描述,产生一个能识别这些符号的C例程(也称为词法分析器或词法分析程序),而且可以将这些描述转变为词法分析程序能够扫描输入文本的形式。
[0131] 2)语法分析Agent
[0132] 本发明语法分析Agent采用语法分析工具Yacc来实现,它主要采用简明的语法来描述并产生一个能分析语法的C例程,即语法分析程序,使用之前可以先指定所需要的输入格式规则以及语法分析程序在识别相关结构时所需要执行的代码,之后Yacc即可将这些规则及执行代码转换为用来处理输入的子程序。
[0133] 本发明将词法分析Agent和语法分析Agent结合起来使用,通过编写一系列的规则来完成对源码的分析,并提取所需信息。首先在词法分析之前,须先去掉源程序中的注释并将源程序的头文件、宏等进行扩展;其次对源程序进行词法分析,生成一些三元数组,即函数表和变量表;最后进行语法分析,生成源程序的语法信息。其实现过程如下所述:
[0134] a)编写词法规则文件bas.1,根据之前所述的词法分析流程给出特定的词法规则,即表达式和相关动作;
[0135] b)由Lex将其转变成一个通用宿主语言,生成一个C程序lex.yy.c,其主函数为yylex();
[0136] c)根据任务需求制定一个输入处理的功能说明,即一个语法规则文件bas.y,其内容就是指定的语法规则集及其各规则对应的动作;
[0137] d)利用Yacc将这样的说明转换成一个处理相应输入流的C语言程序yy.tab.c,其主函数是yyparse();
[0138] e)yyparse()通过调用词法分析Agent的分析程序yylex(),进而从输入流中找到“单词”,再根据输入结构对这些单词加以组织。当某条规则被匹配,并完整地识别出来后,就调用用户指定的对应于这条规则的一个动作,该动作具有返回值和利用其他动作的值的能力。
[0139] (2)程序插桩Agent
[0140] 本发明中程序插桩Agent包括语法信息分析Agent和自动插桩Agent,主要是通过找出源程序的关键点,并向其中插入探针函数,从而获取程序执行时的动态信息。
[0141] 语法信息分析Agent主要识别源程序语法信息中的如下几个关键点:
[0142] 1)整型变量、长整型变量、字符变量、浮点变量等;
[0143] 2)类对象及类定义起始处;
[0144] 3)If选择结构中,then分支和else分支处;
[0145] 4)switch语句的每个分支处;
[0146] 5)对于循环结构(for、while、do…while),存在两个分支,即空循环分支和循环1次,这两个分支均需考虑;
[0147] 6)顺序基本快结构中,程序入口处和出口处;
[0148] 7)子函数入口处和出口处;
[0149] 8)转移指令return语句,break语句,continue语句等处。
[0150] 语法信息分析Agent结果产生后,由其返回值来启动自动插桩Agent。自动插桩Agent通过接收语法信息分析Agent的结果,自动地往这些位置插入能收集源程序控制流信息的语句即插桩函数,并且这些插装函数能在执行过程中将执行标记写入到特定的文件。
[0151] 自动插桩Agent在对程序进行插桩时,必须考虑相应的插桩策略,即植入探针的位置以及探针函数的设计方法。本发明主要考虑块探针、分支探针、函数探针、类探针、子程序探针,下面分别对这几种探针进行描述:
[0152] 1)块探针:所谓块又称顺序块,是若干条顺序执行语句的序列集合。具体表现为,在程序执行过程中,如果顺序块的第一条语句被执行,那么整个顺序块都将被执行。因此,只需在每个顺序块的开始或末尾处插入一个探针即可。
[0153] 2)分支探针:对所有需要进行TRUE或FALSE判断的语句,在每个分支的开始处均需插入一个探针,它主要用来统计分支覆盖率。
[0154] 3)函数探针:在所有函数的起始点插入探针,从而获得该函数被调用的次数。
[0155] 4)类探针:根据类的构造函数在建立对象时自动执行的特性,在类定义体的起始处插入探针,输出类的相关覆盖信息。
[0156] 5)子程序探针:在所有子程序调用标号指向的语句后插入探针,从而获得子程序的调用情况。
[0157] 进行程序插桩的最终目的是为了实现用户对软件覆盖率的测试需求,根据不同的测试类型,会有不同的插桩策略,相应地生成不同的插桩记录文件。该文件用来记录此种测试类型中所有插桩语句的ID或地址,是连接动态测试环境与测试数据生成的桥梁。该文件主要包括以下内容:
[0158] 1)数据的长度:整个数据的长度;
[0159] 2)插桩的类型:用户所选择的测试覆盖率类型;
[0160] 3)插桩的对象:用户想测试的对象,通过其ID号来识别;
[0161] 4)插桩函数的个数:对程序插入的探针函数的个数;
[0162] 5)插桩函数所在地址:插桩函数的位置,通过顺序块语句ID或分支语句ID来标识。
[0163] 自动插桩Agent的具体算法实现过程为:
[0164] 1)读语法信息分析Agent发送来的的消息文件,从中分离出所有关键词,从而确定程序插桩位置;
[0165] 2)分析各关键词的分类,确定探针函数;
[0166] 3)将探针函数插入到设定的位置,函数定义位于插桩库中;
[0167] 4)将插桩后的程序连同插桩库一同编译并运行;
[0168] 5)输入测试用例,通过选择不同的覆盖率类型生成相应的插桩记录文件。
[0169] (3)覆盖率分析Agent
[0170] 将插桩后的源程序进行编译并运行,然后输入事先准备好的测试用例,这里测试用例通过GA_Agent来完成,具体在第五章详细介绍,通过选择需要的测试类型(语句覆盖或分支覆盖),覆盖率分析Agent会调用自动插桩Agent中的语句或分支覆盖探针函数库,根据插桩函数的执行情况,即能判定覆盖率是否满足要求。
[0171] 1)语句覆盖率分析Agent
[0172] 本发明采用如下算法来计算源程序的语句覆盖率:
[0173] a)如遇到能够产生分支的关键词(比如if、else、for、switch、return、continue、break等)及“{”和“}”,则程序继续向下判断,否则返回读下一个词语;
[0174] b)如果是上述能产生分支的关键词,则将其对应的当前标号(如flagif、flagelse、flagswitch等)推进栈中account单元保存,同时将当前标号加1;
[0175] c)当读取到关键词后的第一个“{”时,将标志fflag加1,同时判断其是否大于1,如果大于1,则将此时对应的行号推进栈中nline单元保存,否则直接返回读下一个词;
[0176] d)若碰到“}”,首先判断链表节点是否大于0,如果是且等于1,则“}”所在行数减去栈中保存的“{”的行数,然后再减去最近嵌套内层的总行数即可得到该层相对应的行数;
[0177] e)若链表节点大于1,则判断链表节点数与对应层数是否相等,若相等则用此时“}”所在行数减去栈中保存的“{”行数的总数,即该层的总行数,然后用总行数减去嵌套内层行数之和,即可得到该层行数的对应记录;
[0178] f)若链表节点数不等于对应层数,则将对应层数加1,然后循环做判断。
[0179] g)待所有词语读取完毕之后,读取程序动态运行时写入的插桩文件,同时读取关键词标号,将对应关键词链表中的行数与总行数变数相加,直到插桩文件读取完毕。此时即可输出被覆盖的语句总数,从而得到语句覆盖率。
[0180] 2)分支覆盖率分析Agent
[0181] 本发明采用如下算法来计算源程序的分支覆盖率:
[0182] a)初始化定义一个链表队列;
[0183] b)读取插装记录文件,读取时分别将分支标号与链表队列中的关键词标号作比较;
[0184] c)若此时已存在于链表队列中,则读取下一条记录,否则覆盖分支总数加1;
[0185] d)将分支标号添加到链表队列中,直至插装记录文件读取完毕,输出被覆盖的分支数;
[0186] e)根据分支覆盖率计算公式计算分支覆盖率。
[0187] 以上所述,即为本发明的具体实施方式。本发明提出了一种基于Agent技术的码垛机器人控制软件测试方法,将Agent技术引入软件测试过程中,利用Agent自身的特性对码垛机器人控制软件进行黑盒及白盒测试,有效地解决了传统手工测试程序运行效率低、繁琐等一些问题,保证了码垛机器人软件控制系统的高效稳定的运行,通用性强,同时还能大大降低测试费用。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈