基于数据代码分离技术的测试用例生成方法.pdf

上传人:g**** 文档编号:1567188 上传时间:2018-06-25 格式:PDF 页数:10 大小:3.26MB
返回 下载 相关 举报
摘要
申请专利号:

CN201210496043.4

申请日:

2012.11.28

公开号:

CN103019934A

公开日:

2013.04.03

当前法律状态:

授权

有效性:

有权

法律详情:

专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 11/36变更事项:专利权人变更前:北京交控科技股份有限公司变更后:交控科技股份有限公司变更事项:地址变更前:100070 北京市丰台区科技园海鹰路6号院北京总部国际2、3号楼变更后:100070 北京市丰台区科技园海鹰路6号院2、3号楼(园区)|||专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 11/36变更事项:专利权人变更前:北京交控科技有限公司变更后:北京交控科技股份有限公司变更事项:地址变更前:100070 北京市丰台区科技园海鹰路6号院北京总部国际2、3号楼变更后:100070 北京市丰台区科技园海鹰路6号院北京总部国际2、3号楼|||授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20121128|||公开

IPC分类号:

G06F11/36; G06F9/44

主分类号:

G06F11/36

申请人:

北京交控科技有限公司

发明人:

何玺胜; 胥志洪

地址:

100070 北京市丰台区科技园海鹰路6号院北京总部国际2、3号楼

优先权:

专利代理机构:

北京路浩知识产权代理有限公司 11002

代理人:

王莹

PDF下载: PDF下载
内容摘要

本发明提供一种基于数据代码分离技术的测试用例生成方法,包括:S1、对程序源代码进行预处理,并生成程序控制流图;S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β;S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A′;S4、对于所述矩阵A′,选取路径Pi计算测试数据,当选取的路径Pi组成的矩阵A″的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。本发明实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。

权利要求书

权利要求书一种基于数据代码分离技术的测试用例生成方法,其特征在于,所述方法包括:
S1、对程序源代码进行预处理,并生成程序控制流图;
S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β;
S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A′;
S4、对于所述矩阵A′,选取路径Pi,当选取的路径Pi组成的矩阵A″的秩等于路径矩阵A的秩时,则路径选取结束;
S5、根据所述路径Pi中谓词的类型,生成测试数据;
S6、根据所述测试数据和所述路径Pi,生成测试用例。
根据权利要求1所述的方法,其特征在于,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。
根据权利要求1所述的方法,其特征在于,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。
根据权利要求1所述的方法,其特征在于,步骤S5之前还包括:设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0;若I0不能经过路径Pi,则跳转步骤S5。
根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径Pi中谓词的类型为非线性,则所述方法包括:
S51、计算所述非线性谓词的线性函数L(Ni,Ik,Pi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点;
S52、用路径Pi中的所有线性函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路径Pi中谓词类型为线性的函数;
S53、计算所述线性约束系统,得到输入Ik+1;
S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S51~S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
根据权利要求5所述的方法,其特征在于,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik,Pi)的方法具体包括:根据路径Pi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L(Ni,Ik,Pi),计算所述线性函数L(Ni,Ik,Pi),使得L(Ni,Ik,Pi)=0,则所述线性函数L(Ni,Ik,Pi)代表谓词函数在Ik处的切平面,则称L(Ni,Ik,Pi)为Ni的谓词函数关于Ik的线性算术表示。
根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径Pi中谓词的类型为线性,则所述方法包括:
S52’、用路径Pi中的线性函数构造输入变量的线性约束系统;
S53’、计算所述线性约束系统,得到输入Ik+1;
S54’、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52’~S53’,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
根据权利要求1所述的方法,其特征在于,在步骤S6之后所述方法还包括:对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态映射到区间0~1。
根据权利要求1所述的方法,其特征在于,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。
根据权利要求1~8任一项所述的方法,其特征在于,执行测试用例生成过程,当所述矩阵A″的秩大于路径矩阵A的秩,且P(p|A)为A状态时,检查激励p的概率其中,A为输入状态,即路径矩阵A作为输入状态,p为激励。

说明书

说明书基于数据代码分离技术的测试用例生成方法
技术领域
本发明涉及软件测试技术,特别涉及一种基于数据代码分离技术的测试用例生成方法。
背景技术
随着软件开发周期的时间限制、资源限制以及软件的日趋复杂化,一般大型应用软件的白盒测试工作仅靠手工已不能完全胜任。尤其是在迭代开发过程中,每一个版本下的各个组件都需要不断验证。由此产生了数据代码分离系统和自动化白盒测试技术。由于脚本编制工作,是一项较为繁琐的工作,目前通常使用基于控制模型的白盒测试脚本自动生成算法,此种设计方式的益处主要有如下两个方面:1、基于图的最小路径覆盖算法,可以在满足覆盖率要求的条件下,提高测试效率,节省资源;2、基于控制模型生成测试用例,在保证了逻辑完整性及功能的时序性。
然而,该设计方式对于安全要求较高,且没有对源代码进行智能化分析,影响了测试用例生成的效率。
发明内容
(一)解决的技术问题
本发明解决的技术问题是:实现代码智能化分析和测试用例自动生成的问题。
(二)技术方案
本发明提出了一种基于数据代码分离技术的测试用例生成方法,所述方法包括:
S1、对程序源代码进行预处理,并生成程序控制流图;
S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β;
S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A′;
S4、对于所述矩阵A′,选取路径Pi,当选取的路径Pi组成的矩阵A″的秩等于路径矩阵A的秩时,则路径选取结束;
S5、根据所述路径Pi中谓词的类型,生成测试数据;
S6、根据所述测试数据和所述路径Pi,生成测试用例。
优选地,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。
优选地,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。
优选地,步骤S5之前还包括:设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0;若I0不能经过路径Pi,则跳转步骤S5。
优选地,所述步骤S5中若所述路径Pi中谓词的类型为非线性,则所述方法包括:
S51、计算所述非线性谓词的线性函数L(Ni,Ik,Pi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点;
S52、用路径Pi中的所有线性函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路径Pi中谓词类型为线性的函数;
S53、计算所述线性约束系统,得到输入Ik+1;
S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S51~S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
优选地,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik,Pi)的方法具体包括:根据路径Pi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L(Ni,Ik,Pi),计算所述线性函数L(Ni,Ik,Pi),使得L(Ni,Ik,Pi)=0,则所述线性函数L(Ni,Ik,Pi)代表谓词函数在Ik处的切平面,则称L(Ni,Ik,Pi)为Ni的谓词函数关于Ik的线性算术表示。
优选地,所述步骤S5中若所述路径Pi中谓词的类型为线性,则所述方法包括:
S52’、用路径Pi中的线性函数构造输入变量的线性约束系统;
S53’、计算所述线性约束系统,得到输入Ik+1;
S54’、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52’~S53’,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。
优选地,在步骤S6之后所述方法还包括:对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态映射到区间0~1。
优选地,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。
优选地,执行测试用例生成过程,当所述矩阵A″的秩大于路径矩阵A的秩,且P(p|A)为A状态时,检查激励p的概率其中,A为输入状态,即路径矩阵A作为输入状态,p为激励。
(三)有益效果
本发明在生成测试数据时进行代码智能分析,通过自动提取路径中谓词条件中的测试数据,构成谓词线性约束系统,实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。
附图说明
图1是本发明提出的方法流程图;
图2是本发明中程序控制流图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
本发明提出了一种基于数据代码分离技术的测试用例生成方法,参加图1,所述方法包括:
S1、对程序源代码进行预处理,并生成程序控制流图;
S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子β;
S3、将所述路径根据所述优先级因子β逆序排序,获得矩阵A′;
S4、对于所述矩阵A′,选取路径Pi,当选取的路径Pi组成的矩阵A″的秩等于路径矩阵A的秩时,则路径选取结束;
S5、根据所述路径Pi中谓词的类型,生成测试数据;
S6、根据所述测试数据和所述路径Pi,生成测试用例。
本发明提出的一种基于数据代码分离技术的测试用例生成方法具体为以下内容:
对程序源代码进行预处理,所述预处理包括删除注释、空行,提取语句和控制流信息,以及程序中变量的定义和使用情况。
在结构测试中,对于给定覆盖准则C,生成一组路径P,使得这组路径P能够达到C所描述的覆盖要求。本文所期望获得的基路径,是指能够覆盖边集合E的最小P集合。
在图论中,圈复杂度被定义为V(G)=E‑N+p,其中E表示边集合,N表示程序控制流图(Program flow graph,PFG)中结点的数量,p表示连通分支数。如果不考虑PFG的方向性,则V(G)=E‑N+1。但是PFG并不是强连通的,解决方法是增加一条从入口到出口的边,这样PFG的圈复杂度就是V(G)=E‑N+2。
设PFG中E为{e1,e2...en},则可将PFG转化为矩阵A,其中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,矩阵的秩即是程序流图的圈复杂度。
对于程序控制流图如图2所示,根据图2可以得到路径P的集合为:
p1=<S,1,2,3,4,E>
p2=<S,1,3,4,E>
p3=<S,1,2,3,4,5,4,E>
p4=<S,1,3,4,5,4,E>
p5=<S,1,2,3,4,5,4,5,4,E>
p6=<S,1,3,4,5,4,5,4,E>
根据路径P的集合将PFG转化为路径矩阵A,
<mrow><MI>A</MI> <MO>=</MO> <MFENCED close="]" open="["><MTABLE><MTR><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD></MTR><MTR><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD></MTR><MTR><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD></MTR><MTR><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD></MTR><MTR><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>2</MN> </MTD><MTD><MN>2</MN> </MTD><MTD><MN>1</MN> </MTD></MTR><MTR><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>0</MN> </MTD><MTD><MN>1</MN> </MTD><MTD><MN>2</MN> </MTD><MTD><MN>2</MN> </MTD><MTD><MN>1</MN> </MTD></MTR></MTABLE></MFENCED></MROW>]]&gt;</MATH></MATHS> <BR>路径上具有明确取值要求的判断语句中的条件表达式称为分支谓词。在Macabe圈复杂度测试基础上,对每个谓词增加优先级因子β,用以选取高优先级路径生成测试用例。 <BR>使用路径矩阵A,每行中谓词的使用次数与对应谓词的优先级因子β计算乘积,获得该行对应路径的优先级系数,并将路径根据优先级因子逆序排序,获得矩阵A′。 <BR>对于路径矩阵A,由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,路径矩阵的秩就是程序流图的圈复杂度λ。 <BR>对于矩阵A′,根据自顶向下原则,选取路径Pi用以计算测试数据,并使Pi组成矩阵A″,当矩阵A″的秩等于λ时,路径选取结束。 <BR>因为若路径Pi中的谓词的函数是线性的,则其线性算术表示就是谓词函数本身。 <BR>根据筛选后得到的路径Pi,设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0;若I0不能经过路径Pi,则分析Pi上谓词类型,并根据谓词类型生成测试数据,步骤如下: <BR>当路径Pi上谓词的函数为非线性函数,则: <BR>1、计算该点谓词函数的线性算术表示L(Ni,Ik,Pi)。 <BR>2、根据路径Pi上的谓词结点n关于给定输入Ik的输入变量,写出一个通用线性函数L(Ni,Ik,Pi),然后计算该函数,使得L(Ni,Ik,Pi)=0,所述线性函数L(Ni,Ik,Pi)代表谓词函数F在Ik处的切平面,则称L(Ni,Ik,Pi)为结点Ni的谓词函数F关于Ik的线性算术表示。 <BR>3、用Pi中的所有线性谓词函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性谓词函数为路径Pi中谓词类型为线性的函数。 <BR>4、求解线性约束系统,得到新的输入Ik+1。 <BR>5、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤1~4,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。 <BR>当路径P上谓词函数为线性函数,则:S52’、用路径Pi中的线性函数构造输入变量的线性约束系统; <BR>S53’、计算所述线性约束系统,得到输入Ik+1; <BR>S54’、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52’~S53’,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。 <BR>对于程序: <BR>0:read(a,b,c) <BR>1:m=a+b <BR>P1:if(2*a+b≥6)then <BR>2:n=m <BR>3:else&nbsp;n=b&nbsp;&nbsp;end&nbsp;if <BR>P2:if(n‑c)≥4&nbsp;then <BR>4:n=a*b*c <BR>5:m++ <BR>P3:else&nbsp;if(a2+c2&gt;100)then <BR>6:m=a*c+1&nbsp;end&nbsp;if <BR>P4:if(n≥0)then <BR>7:write(m) <BR>P5:else&nbsp;if(b‑Sin(c))&gt;0&nbsp;then <BR>8:write(n)&nbsp;&nbsp;end&nbsp;if <BR>当选取路径P={0,1,P1,2,P2,4,5,P4,7},I0=(1,2,3)。 <BR>因I0不能使经过路径P,故继续执行算法后面的步骤。构造谓词的函数关于输入变量I0的线性约束系统: <BR>2*a+b‑6≥0, <BR>a+b‑c‑4≥0, <BR>a*b*c≥0。 <BR>求解线性约束系统: <BR>可求得一组解a=2,b=2,c=0。则新的输入I1=(2,2,0)。因I1可以经过路径P,故算法结束。 <BR>选取路径P={0,1,P1,3,P2,4,5,P4,P5,8},I0=(1,2,3)。 <BR>因I0不能经过路径P,故继续执行算法后面的步骤。因P中谓词函数P5是非线性的,故求P5F=b‑sin(c)的线性算术表示: <BR>可令其线性算术表示为L(B&nbsp;P5,Ik,P)=kb+lc+p,利用均差近似导数,可得k=1,l=0.89792,p=‑2.83488, <BR>所以谓词函数F=b‑sin(c)关于I0的线性算术表示为L(B&nbsp;P5,I0,P)=b+0.89792c‑2.83488. <BR>构造线性约束系统: <BR>2*a+b‑6≥0, <BR>a+b‑c‑4≥0, <BR>a*b*c≥0, <BR>b+0.89792*c‑2.83488&gt;0。 <BR>求解线性约束系统: <BR>得I1=(2,2,1)可经过路径P,算法结束。 <BR>对程序输入状态的下一个相邻状态即程序输出状态的集合进行映射。根据每一个程序输出状态对应的转移概率,将输出状态映射到区间(因为转移概率和为1,则区间选在0~1)。 <BR>定义输入状态A和激励p的函数F(A,p),p∈P,P(A)为当前输入状态为A时的激励集合。由函数F(A,p)可得输出状态集E(A)。 <BR>根据生成测试数据Ii与Pi构造测试用例,得到测试用例后,到达终止状态。直到终止状态停止。 <BR>测试用例是从从路径起始结点到终止结点所经过的边(或激励)的序列。不断从软件使用模型的初始结点状态开始,执行测试用例的生成过程,直到选取的测试路径数组的秩超过圈复杂度,且P(p|A)为A状态时,检查激励p的概率 <BR>以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。</p></div> </div> </div> </div> <div class="tempdiv cssnone" style="line-height:0px;height:0px; overflow:hidden;"> </div> <div id="page"> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c1.gif' alt="基于数据代码分离技术的测试用例生成方法.pdf_第1页" width='100%'/></div><div class="pageSize">第1页 / 共10页</div> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c2.gif' alt="基于数据代码分离技术的测试用例生成方法.pdf_第2页" width='100%'/></div><div class="pageSize">第2页 / 共10页</div> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c3.gif' alt="基于数据代码分离技术的测试用例生成方法.pdf_第3页" width='100%'/></div><div class="pageSize">第3页 / 共10页</div> </div> <div id="pageMore" class="btnmore" onclick="ShowSvg();">点击查看更多>></div> <div style="margin-top:20px; line-height:0px; height:0px; overflow:hidden;"> <div style=" font-size: 16px; background-color:#e5f0f7; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;">资源描述</div> <div class="detail-article prolistshowimg"> <p>《基于数据代码分离技术的测试用例生成方法.pdf》由会员分享,可在线阅读,更多相关《基于数据代码分离技术的测试用例生成方法.pdf(10页珍藏版)》请在专利查询网上搜索。</p> <p >1、(10)申请公布号 CN 103019934 A(43)申请公布日 2013.04.03CN103019934A*CN103019934A*(21)申请号 201210496043.4(22)申请日 2012.11.28G06F 11/36(2006.01)G06F 9/44(2006.01)(71)申请人北京交控科技有限公司地址 100070 北京市丰台区科技园海鹰路6号院北京总部国际2、3号楼(72)发明人何玺胜 胥志洪(74)专利代理机构北京路浩知识产权代理有限公司 11002代理人王莹(54) 发明名称基于数据代码分离技术的测试用例生成方法(57) 摘要本发明提供一种基于数据代码分离技。</p> <p >2、术的测试用例生成方法,包括:S1、对程序源代码进行预处理,并生成程序控制流图;S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子;S3、将所述路径根据所述优先级因子逆序排序,获得矩阵A;S4、对于所述矩阵A,选取路径Pi计算测试数据,当选取的路径Pi组成的矩阵A的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。本发明实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。(51)Int.Cl.权利要求书2页 说明书5页 附。</p> <p >3、图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书 2 页 说明书 5 页 附图 2 页1/2页21.一种基于数据代码分离技术的测试用例生成方法,其特征在于,所述方法包括:S1、对程序源代码进行预处理,并生成程序控制流图;S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子;S3、将所述路径根据所述优先级因子逆序排序,获得矩阵A;S4、对于所述矩阵A,选取路径Pi,当选取的路径Pi组成的矩阵A的秩等于路径矩阵A的秩时,则路径选取结束;S5、根据所述路径Pi中谓词的类型,生成测试数据;S6、根据所述测试数据和所述路径Pi,生成测试用例。2。</p> <p >4、.根据权利要求1所述的方法,其特征在于,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。3.根据权利要求1所述的方法,其特征在于,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。4.根据权利要求1所述的方法,其特征在于,步骤S5之前还包括:设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即IfI0;若I0不能经过路径Pi,则跳转步骤S5。5.根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径P。</p> <p >5、i中谓词的类型为非线性,则所述方法包括:S51、计算所述非线性谓词的线性函数L(Ni,Ik,Pi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点;S52、用路径Pi中的所有线性函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路径Pi中谓词类型为线性的函数;S53、计算所述线性约束系统,得到输入Ik+1;S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S51S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。6.根据权利要求5所述的方法,其特征在于,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik,Pi)的。</p> <p >6、方法具体包括:根据路径Pi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L(Ni,Ik,Pi),计算所述线性函数L(Ni,Ik,Pi),使得L(Ni,Ik,Pi)=0,则所述线性函数L(Ni,Ik,Pi)代表谓词函数在Ik处的切平面,则称L(Ni,Ik,Pi)为Ni的谓词函数关于Ik的线性算术表示。7.根据权利要求1或4中任一项所述的方法,其特征在于,所述步骤S5中若所述路径Pi中谓词的类型为线性,则所述方法包括:S52、用路径Pi中的线性函数构造输入变量的线性约束系统;S53、计算所述线性约束系统,得到输入Ik+1;S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52。</p> <p >7、S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。8.根据权利要求1所述的方法,其特征在于,在步骤S6之后所述方法还包括:对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态权 利 要 求 书CN 103019934 A2/2页3映射到区间01。9.根据权利要求1所述的方法,其特征在于,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。10.根据权利要求18任一项所述的方法,其特征在于,执行测试用例生成过程,当所述矩阵A的秩大于路径矩阵A的秩,且P(p|A)为A状态时,检查激励p的概率其中,A为输入状态,即路径矩阵A作为。</p> <p >8、输入状态,p为激励。权 利 要 求 书CN 103019934 A1/5页4基于数据代码分离技术的测试用例生成方法技术领域0001 本发明涉及软件测试技术,特别涉及一种基于数据代码分离技术的测试用例生成方法。背景技术0002 随着软件开发周期的时间限制、资源限制以及软件的日趋复杂化,一般大型应用软件的白盒测试工作仅靠手工已不能完全胜任。尤其是在迭代开发过程中,每一个版本下的各个组件都需要不断验证。由此产生了数据代码分离系统和自动化白盒测试技术。由于脚本编制工作,是一项较为繁琐的工作,目前通常使用基于控制模型的白盒测试脚本自动生成算法,此种设计方式的益处主要有如下两个方面:1、基于图的最小路径覆。</p> <p >9、盖算法,可以在满足覆盖率要求的条件下,提高测试效率,节省资源;2、基于控制模型生成测试用例,在保证了逻辑完整性及功能的时序性。0003 然而,该设计方式对于安全要求较高,且没有对源代码进行智能化分析,影响了测试用例生成的效率。发明内容0004 (一)解决的技术问题0005 本发明解决的技术问题是:实现代码智能化分析和测试用例自动生成的问题。0006 (二)技术方案0007 本发明提出了一种基于数据代码分离技术的测试用例生成方法,所述方法包括:0008 S1、对程序源代码进行预处理,并生成程序控制流图;0009 S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级。</p> <p >10、因子;0010 S3、将所述路径根据所述优先级因子逆序排序,获得矩阵A;0011 S4、对于所述矩阵A,选取路径Pi,当选取的路径Pi组成的矩阵A的秩等于路径矩阵A的秩时,则路径选取结束;0012 S5、根据所述路径Pi中谓词的类型,生成测试数据;0013 S6、根据所述测试数据和所述路径Pi,生成测试用例。0014 优选地,步骤S2中所述路径矩阵A中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。0015 优选地,在步骤S3之前所述方法还包括生成路径优先级系数,所述路径优先级系数为路径矩阵A每行中谓词的使用次数与所述每行中谓词对应的优先级因子的乘积。0016 优选地,步骤S5之前。</p> <p >11、还包括:设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0;若I0不能经过路径Pi,则跳转步骤S5。0017 优选地,所述步骤S5中若所述路径Pi中谓词的类型为非线性,则所述方法包括:说 明 书CN 103019934 A2/5页50018 S51、计算所述非线性谓词的线性函数L(Ni,Ik,Pi),其中Ik为输入变量,Pi为选取的路径,Ni为Pi上的结点;0019 S52、用路径Pi中的所有线性函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性函数为所述路径Pi中谓词类型为线性的函数;0020 S53、计算所述线。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>12、性约束系统,得到输入Ik+1;0021 S54、若Ik+1能经过路径Pi,则IfIk+1;否则,重复步骤S51S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。0022 优选地,步骤S51中所述计算所述非线性谓词的线性函数L(Ni,Ik,Pi)的方法具体包括:根据路径Pi上的谓词结点Ni关于输入变量Ik,得到通用线性函数L(Ni,Ik,Pi),计算所述线性函数L(Ni,Ik,Pi),使得L(Ni,Ik,Pi)=0,则所述线性函数L(Ni,Ik,Pi)代表谓词函数在Ik处的切平面,则称L(Ni,Ik,Pi)为Ni的谓词函数关于Ik的线性算术表示。0023 优选地,所述步骤S。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>13、5中若所述路径Pi中谓词的类型为线性,则所述方法包括:0024 S52、用路径Pi中的线性函数构造输入变量的线性约束系统;0025 S53、计算所述线性约束系统,得到输入Ik+1;0026 S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。0027 优选地,在步骤S6之后所述方法还包括:对程序输出状态的集合进行映射,并根据每一个程序输出状态对应的转移概率,将程序输出状态映射到区间01。0028 优选地,步骤S6中的所述测试用例是指从路径起始结点到终止结点所经过的边的序列。0029 优选地,执行测试用例。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>14、生成过程,当所述矩阵A的秩大于路径矩阵A的秩,且P(p|A)为A状态时,检查激励p的概率其中,A为输入状态,即路径矩阵A作为输入状态,p为激励。0030 (三)有益效果0031 本发明在生成测试数据时进行代码智能分析,通过自动提取路径中谓词条件中的测试数据,构成谓词线性约束系统,实现了代码智能化分析,简化人力设计测试用例和测试数据的工时,简化测试脚本编写时间,提高了测试效率。附图说明0032 图1是本发明提出的方法流程图;0033 图2是本发明中程序控制流图。具体实施方式0034 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。0035 本发明提出了一种基于数据。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>15、代码分离技术的测试用例生成方法,参加图1,所述方法包括:0036 S1、对程序源代码进行预处理,并生成程序控制流图;说 明 书CN 103019934 A3/5页60037 S2、根据所述程序控制流图生成路径矩阵A,并为每条路径P中的每个谓词设置对应的优先级因子;0038 S3、将所述路径根据所述优先级因子逆序排序,获得矩阵A;0039 S4、对于所述矩阵A,选取路径Pi,当选取的路径Pi组成的矩阵A的秩等于路径矩阵A的秩时,则路径选取结束;0040 S5、根据所述路径Pi中谓词的类型,生成测试数据;0041 S6、根据所述测试数据和所述路径Pi,生成测试用例。0042 本发明提出的一种基于数。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>16、据代码分离技术的测试用例生成方法具体为以下内容:0043 对程序源代码进行预处理,所述预处理包括删除注释、空行,提取语句和控制流信息,以及程序中变量的定义和使用情况。0044 在结构测试中,对于给定覆盖准则C,生成一组路径P,使得这组路径P能够达到C所描述的覆盖要求。本文所期望获得的基路径,是指能够覆盖边集合E的最小P集合。0045 在图论中,圈复杂度被定义为V(G)=E-N+p,其中E表示边集合,N表示程序控制流图(Program flow graph,PFG)中结点的数量,p表示连通分支数。如果不考虑PFG的方向性,则V(G)=E-N+1。但是PFG并不是强连通的,解决方法是增加一条从入口。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>17、到出口的边,这样PFG的圈复杂度就是V(G)=E-N+2。0046 设PFG中E为e1,e2.en,则可将PFG转化为矩阵A,其中每行表示一条路径经过的边集合,每列表示每条路径经过边的次数。由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,矩阵的秩即是程序流图的圈复杂度。0047 对于程序控制流图如图2所示,根据图2可以得到路径P的集合为:0048 p1=0049 p2=0050 p3=0051 p4=0052 p5=0053 p6=0054 根据路径P的集合将PFG转化为路径矩阵A,0055 0056 路径上具有明确取值。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>18、要求的判断语句中的条件表达式称为分支谓词。在Macabe圈复杂度测试基础上,对每个谓词增加优先级因子,用以选取高优先级路径生成测试用例。0057 使用路径矩阵A,每行中谓词的使用次数与对应谓词的优先级因子计算乘积,说 明 书CN 103019934 A4/5页7获得该行对应路径的优先级系数,并将路径根据优先级因子逆序排序,获得矩阵A。0058 对于路径矩阵A,由于任一矩阵的秩唯一且小于或等于列数。即不管有多少条可能路径,矩阵的秩不会超过程序控制流图中的边数。基于McCabe理论,路径矩阵的秩就是程序流图的圈复杂度。0059 对于矩阵A,根据自顶向下原则,选取路径Pi用以计算测试数据,并使Pi组。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>19、成矩阵A,当矩阵A的秩等于时,路径选取结束。0060 因为若路径Pi中的谓词的函数是线性的,则其线性算术表示就是谓词函数本身。0061 根据筛选后得到的路径Pi,设定程序的初始输入I0以及迭代次数上限T,如果I0能经过路径Pi,则获得经过路径Pi的程序输入If,即If=I0;若I0不能经过路径Pi,则分析Pi上谓词类型,并根据谓词类型生成测试数据,步骤如下:0062 当路径Pi上谓词的函数为非线性函数,则:0063 1、计算该点谓词函数的线性算术表示L(Ni,Ik,Pi)。0064 2、根据路径Pi上的谓词结点n关于给定输入Ik的输入变量,写出一个通用线性函数L(Ni,Ik,Pi),然后计算该。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>20、函数,使得L(Ni,Ik,Pi)=0,所述线性函数L(Ni,Ik,Pi)代表谓词函数F在Ik处的切平面,则称L(Ni,Ik,Pi)为结点Ni的谓词函数F关于Ik的线性算术表示。0065 3、用Pi中的所有线性谓词函数和L(Ni,Ik,Pi)构造输入变量的线性约束系统,所述所有线性谓词函数为路径Pi中谓词类型为线性的函数。0066 4、求解线性约束系统,得到新的输入Ik+1。0067 5、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤14,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。0068 当路径P上谓词函数为线性函数,则:S52、用路径Pi中的线性函数构造输入。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>21、变量的线性约束系统;0069 S53、计算所述线性约束系统,得到输入Ik+1;0070 S54、若Ik+1能经过路径Pi,则If=Ik+1;否则,重复步骤S52S53,直至得到能够经过路径Pi的输入,所述重复步骤的迭代次数上限为T。0071 对于程序:0072 0:read(a,b,c)0073 1:m=a+b0074 P1:if(2*a+b6)then0075 2:n=m0076 3:else n=b end if0077 P2:if(n-c)4 then0078 4:n=a*b*c0079 5:m+0080 P3:else if(a2+c2100)then0081 6:m=a*c+1 en。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>22、d if0082 P4:if(n0)then0083 7:write(m)说 明 书CN 103019934 A5/5页80084 P5:else if(b-Sin(c)0 then0085 8:write(n) end if0086 当选取路径P=0,1,P1,2,P2,4,5,P4,7,I0(1,2,3)。0087 因I0不能使经过路径P,故继续执行算法后面的步骤。构造谓词的函数关于输入变量I0的线性约束系统:0088 2*a+b-60,0089 a+b-c-40,0090 a*b*c0。0091 求解线性约束系统:0092 可求得一组解a=2,b=2,c=0。则新的输入I1=(2,2,0。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>23、)。因I1可以经过路径P,故算法结束。0093 选取路径P=0,1,P1,3,P2,4,5,P4,P5,8,I0(1,2,3)。0094 因I0不能经过路径P,故继续执行算法后面的步骤。因P中谓词函数P5是非线性的,故求P5F=b-sin(c)的线性算术表示:0095 可令其线性算术表示为L(B P5,Ik,P)=kb+lc+p,利用均差近似导数,可得k=1,l=0.89792,p=-2.83488,0096 所以谓词函数F=b-sin(c)关于I0的线性算术表示为L(B P5,I0,P)=b+0.89792c-2.83488.0097 构造线性约束系统:0098 2*a+b-60,0099 。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>24、a+b-c-40,0100 a*b*c0,0101 b+0.89792*c-2.834880。0102 求解线性约束系统:0103 得I1=(2,2,1)可经过路径P,算法结束。0104 对程序输入状态的下一个相邻状态即程序输出状态的集合进行映射。根据每一个程序输出状态对应的转移概率,将输出状态映射到区间(因为转移概率和为1,则区间选在01)。0105 定义输入状态A和激励p的函数F(A,p),pP,P(A)为当前输入状态为A时的激励集合。由函数F(A,p)可得输出状态集E(A)。0106 根据生成测试数据Ii与Pi构造测试用例,得到测试用例后,到达终止状态。直到终止状态停止。0107 测试用例是从从路径起始结点到终止结点所经过的边(或激励)的序列。不断从软件使用模型的初始结点状态开始,执行测试用例的生成过程,直到选取的测试路径数组的秩超过圈复杂度,且P(p|A)为A状态时,检查激励p的概率0108 以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。说 明 书CN 103019934 A1/2页9图1说 明 书 附 图CN 103019934 A2/2页10图2说 明 书 附 图CN 103019934 A10。</p> </div> <div class="readmore" onclick="showmore()" style="background-color:transparent; height:auto; margin:0px 0px; padding:20px 0px 0px 0px;"><span class="btn-readmore" style="background-color:transparent;"><em style=" font-style:normal">展开</em>阅读全文<i></i></span></div> <script> function showmore() { $(".readmore").hide(); $(".detail-article").css({ "height":"auto", "overflow": "hidden" }); } $(document).ready(function() { var dh = $(".detail-article").height(); if(dh >100) { $(".detail-article").css({ "height":"100px", "overflow": "hidden" }); } else { $(".readmore").hide(); } }); </script> </div> <script> var defaultShowPage = parseInt("3"); var id = "1567188"; var total_page = "10"; var mfull = false; var mshow = false; function DownLoad() { window.location.href='https://m.zhuanlichaxun.net/d-1567188.html'; } function relate() { var reltop = $('#relate').offset().top-50; $("html,body").animate({ scrollTop: reltop }, 500); } </script> <script> var pre = "https://img.zhuanlichaxun.net/fileroot2/2018-6/16/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c/e323598a-6ed1-4ffd-ab66-3bab8c6bda0c"; var freepage = parseInt('4'); var total_c = parseInt('10'); var start = defaultShowPage; var adcount = 0; var adindex = 0; var adType_list = ";0;1;2;3;"; var end = start; function ShowSvg() { end = start + defaultShowPage; if (end > freepage) end = freepage; for (var i = start; i < end; i++) { var imgurl = pre + (i + 1) + '.gif'; var html = "<img src='" + imgurl + "' alt=\"基于数据代码分离技术的测试用例生成方法.pdf_第" + (i + 1) + "页\" width='100%'/>"; $("#page").append("<div class='page'>" + html + "</div>"); $("#page").append("<div class='pageSize'>第" + (i + 1) + "页 / 共" + total_c + "页</div>"); if(adcount > 0 && adType_list.indexOf(";"+(i+1)+";")>-1) { if(adindex > (adcount-1)) adindex = 0; $("#page").append("<div class='pagead' id='addiv"+(i + 1)+"'></div>"); document.getElementById("addiv"+(i + 1)+"").innerHTML =document.getElementById("adpre" + adindex).outerHTML; adindex += 1; } } start = end; if (start > (freepage - 1)) { if (start < total_c) { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页,到这儿已超出免费预览范围,如果喜欢就下载吧!"); } else { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页全部预览完了,如果喜欢就下载吧!"); } } } //$(document).ready(function () { // ShowSvg(); //}); </script> <div id="relate" class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">相关资源</div> <div id="relatelist" style="padding-left:5px;"> <li><img alt="变压器承载座.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566189.html" title="变压器承载座.pdf">变压器承载座.pdf</a> </li><li><img alt="一种复合软管抗压铠装层.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566190.html" title="一种复合软管抗压铠装层.pdf">一种复合软管抗压铠装层.pdf</a> </li><li><img alt="用于通过使指令拾取单元掉电来降低处理器中的功耗的方法和装置.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566191.html" title="用于通过使指令拾取单元掉电来降低处理器中的功耗的方法和装置.pdf">用于通过使指令拾取单元掉电来降低处理器中的功耗的方法和装置.pdf</a> </li><li><img alt="检测并响应于用户输入对象的外形和/或高度轮廓的电子设备用显示器.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566192.html" title="检测并响应于用户输入对象的外形和/或高度轮廓的电子设备用显示器.pdf">检测并响应于用户输入对象的外形和/或高度轮廓的电子设备用显示器.pdf</a> </li><li><img alt="一种电视机.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566193.html" title="一种电视机.pdf">一种电视机.pdf</a> </li><li><img alt="LED路灯灯头结构.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566194.html" title="LED路灯灯头结构.pdf">LED路灯灯头结构.pdf</a> </li><li><img alt="移动终端操作方法和使用该方法的装置.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566195.html" title="移动终端操作方法和使用该方法的装置.pdf">移动终端操作方法和使用该方法的装置.pdf</a> </li><li><img alt="用于选择基于经济性的变速器换档的系统.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566196.html" title="用于选择基于经济性的变速器换档的系统.pdf">用于选择基于经济性的变速器换档的系统.pdf</a> </li><li><img alt="一种软硬件协同仿真的验证平台及其构建方法.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566197.html" title="一种软硬件协同仿真的验证平台及其构建方法.pdf">一种软硬件协同仿真的验证平台及其构建方法.pdf</a> </li><li><img alt="一种明布麻茶.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1566198.html" title="一种明布麻茶.pdf">一种明布麻茶.pdf</a> </li> </div> </div> <div class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">猜你喜欢</div> <div id="relatelist" style="padding-left:5px;"> <li><img alt="一种汽车用的悬挂球壳.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457332.html" target="_parent" title="一种汽车用的悬挂球壳.pdf">一种汽车用的悬挂球壳.pdf</a></li> <li><img alt="耐光老化高韧性阻燃热塑性苯乙烯类聚合物的复合物.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457333.html" target="_parent" title="耐光老化高韧性阻燃热塑性苯乙烯类聚合物的复合物.pdf">耐光老化高韧性阻燃热塑性苯乙烯类聚合物的复合物.pdf</a></li> <li><img alt="一种不饱和橡胶用填充油.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457334.html" target="_parent" title="一种不饱和橡胶用填充油.pdf">一种不饱和橡胶用填充油.pdf</a></li> <li><img alt="一种设置有安全带扣的液压爬模架体.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457335.html" target="_parent" title="一种设置有安全带扣的液压爬模架体.pdf">一种设置有安全带扣的液压爬模架体.pdf</a></li> <li><img alt="输送带式的环绕型立体停车库.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457336.html" target="_parent" title="输送带式的环绕型立体停车库.pdf">输送带式的环绕型立体停车库.pdf</a></li> <li><img alt="嵌入式空调和地暖.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457337.html" target="_parent" title="嵌入式空调和地暖.pdf">嵌入式空调和地暖.pdf</a></li> <li><img alt="一种应用于深孔爆破中形成切割面的方法.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457338.html" target="_parent" title="一种应用于深孔爆破中形成切割面的方法.pdf">一种应用于深孔爆破中形成切割面的方法.pdf</a></li> <li><img alt="一种睡垫.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457339.html" target="_parent" title="一种睡垫.pdf">一种睡垫.pdf</a></li> <li><img alt="图象输出控制装置.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1457340.html" target="_parent" title="图象输出控制装置.pdf">图象输出控制装置.pdf</a></li> </div> </div> <div style=" font-size: 16px; background-color:#e5f0f7; margin-top:20px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;"> 相关搜索</div> <div class="widget-box pt0" style="border: none; padding:0px 5px;"> <ul class="taglist--inline multi"> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e5%9f%ba%e4%ba%8e">基于</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%95%b0%e6%8d%ae">数据</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e4%bb%a3%e7%a0%81">代码</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e5%88%86%e7%a6%bb">分离</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%8a%80%e6%9c%af">技术</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%b5%8b%e8%af%95">测试</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e7%94%9f%e6%88%90">生成</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%96%b9%e6%b3%95">方法</a></li> </ul> </div> <br /> <div > 当前位置:<a href="https://m.zhuanlichaxun.net/">首页</a> &gt; <a href="https://m.zhuanlichaxun.net/c-00007.html">物理</a><span> &gt; </span><a href="https://m.zhuanlichaxun.net/c-0000700006.html">计算;推算;计数</a> </div> <br /> <br /> <span id="ctl00_LabelScript"></span> <script src="https://m.zhuanlichaxun.net/JS/bootstrap-collapse.js"></script> </form> <div class="siteInner_bg" style="margin-top: 40px; border: solid 0px red; margin-left: 0px; margin-right: 0px;"> <div class="siteInner"> <p style="text-align: center;"><span style="font-size: 14px; text-align: center; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; line-height: 20px;">copyright@ 2017-2020 zhuanlichaxun.net网站版权所有</span><br style="text-align: center; white-space: normal; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 12px; line-height: 20px;"/><span style="font-size: 14px; text-align: center; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; line-height: 20px;">经营许可证编号:<a href="https://beian.miit.gov.cn/" target="_self" style="font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 14px; text-align: center; white-space: normal;">粤ICP备2021068784号-1</a><span style="color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 14px; text-align: center;">&nbsp;</span></span> &nbsp;</p><script src="/redirect.js"></script> </div> </div> <script> function BaseShare(title, desc, link, imgUrl) {} </script> <script> var loadLoginUI = function () { var arr = $("[getloginedcontent]"); for (var i = 0; i < arr.length; i++) { (function (index) { var url = arr.eq(index).attr("getloginedcontent"); $.get(url + "?t=" + (new Date()).valueOf(), function (d) { try { arr.eq(index).empty().html(d); } catch (e) { } try { arr.html(d); } catch (e) { } }); })(i); } } $(document).ready(function () { loadLoginUI(); }); </script> <script src="https://m.zhuanlichaxun.net/JS/jquery.lazyload.js"></script> <script charset="utf-8"> $("img.lazys").lazyload({ threshold: 200, effect: "fadeIn" }); </script> </body> </html>