基于GitLab的小规模团队软件开发者工作量度量方法

文档序号:31129221发布日期:2022-08-13 04:54阅读:284来源:国知局
基于gitlab的小规模团队软件开发者工作量度量方法
技术领域
:1.本发明涉及属于软件工程领域,具体的说是涉及一种基于gitlab的小规模团队软件开发者工作量度量方法。
背景技术
::2.在很多高校的程序设计实践课程中,要求学生以3至5人为一组进行软件开发,以模拟软件开发人员在实际生产环境中的团队合作。但目前尚没有针对小规模团队软件的质量度量以及开发者贡献度的度量方法,对整体程序质量和每个开发者工作量的评价只能依靠授课教师的主观感受和经验。3.除了使用传统的人工判分外,另一种方法是对学生开发过程中产生的数据进行收集和分析,如代码资源库、日志文件等,扫描这类资源并实现自动判分。这种方法通常要求学生团队在他们的开发中使用支持协作编码的版本控制系统(versioncontrolsystem,vcs)。授课教师可以通过vcs收集有关学生如何与这些平台互动以及他们正在做的工作的数据。目前,已有研究将gitlab、数据挖掘技术等平台引入教学领域,研究学生行为。sukrueraslan等人将gitlab指标融入教学活动,验证了在教学环境中衡量开发者贡献的可行性,但他们选择的指标相对简单,无法全面衡量开发者的工作量。4.在软件工程领域,传统的开发模式中,开发人员的工作量主要是根据他们生成的源代码的规模来计算的,即代码行(lineofcode,loc)测量方法。但这种方法检测指标过于单一,不能很好地衡量开发者工作量。随着开源软件和开源社区的发展,研究人员依据开源软件的协作开发特点,以及开源社区资源库(如版本控制系统和错误跟踪数据库),提出了更符合开源开发特点的开发者贡献评价模型。但这些模型较为复杂,指标数众多且测量困难,应用于高校内小规模学生团队时测量结果并不准确。技术实现要素:5.为了解决上述问题,本发明提出了一种基于gitlab的小规模团队软件开发者工作量度量方法,通过收集软件源代码及团队开发过程产生的数据,并计算23个软件指标从软件规模、源代码质量及合作中的工作量以全面衡量团队中每个开发成员的工作量,以克服现有方法中难以定量统计小规模团队中开发者工作量的问题。6.为实现上述目的,本发明提出一种基于gitlab收集开发数据,并依据针对小规模开发团队的指标体系计算开发人员工作量的方法。该度量方法包括如下步骤:7.步骤1:基于gitlab收集开发团队的软件源代码及开发过程数据:开发团队在同一个软件开发项目中,使用各自的账号上传commit提交数据,团队组长除了提交代码外,还需要承担查看队员提交的commit、解决冲突并进行合并操作。收集的开发过程数据包括每个开发成员的提交次数、每次commit中增加的代码行数、每次commit中删除的代码行数以及组长的合并操作次数。对于收集的软件源代码需要根据开发者进行归属分类,将每个开发者生产的代码划分到个人源代码文件中。8.步骤2:扫描步骤1中commit提交数据及软件源代码,初步提取可直接测量指标。考虑工作分配和非代码层面,可直接测量指标包括提交指标:提交次数(numberofcommits,nc)、平均每次提交增加代码行数(averagelinesofcodeaddedpercommit,aapc)、平均每次提交删除代码行数(averagelinesofcodedeletedpercommit,adpc)、合并操作次数(numberofmergeoperations,nm);代码行指标(linesofcode,loc)从从代码行数衡量软件规模层面考虑:可执行代码行数(totallinesofexecutablecode,tloc)、空行数(emptylinesofcode,eloc)、注释行数(commentlinesofcode,cloc);大小指标为从软件结构衡量软件规模考虑:模块总数(totalnumberofmodules,nmd)、文档数(numberofdocuments,nd)、类的个数(numberofclasses,nca)、平均每个类的方法个数(averagenumberoffunctionsperclass,afpc)、静态属性数(numberofstaticattributes,nsa)、类外函数总数(totalnumberofmethods,nmt)、全局变量数(numberofglobalvariables,ngv)。9.提交类别指标用于衡量开发者在协作开发中的工作量,以及开发团队组长的额外工作量,具体的包括提交次数、平均每次提交增加代码行数、平均每次提交删除代码行数、合并操作次数;所述平均每次提交增加代码行数为所述开发人员所有提交中增加的代码总行数,所述平均每次提交删除代码行数为所述开发人员所有提交中删除的代码总行数;10.大小类别指标用于衡量开发者在软件规模大小方面的工作量,具体的主要包括模块总数、文档数、类的个数、平均每个类的方法个数、所述静态属性数、类外函数总数、全局变量数;所述模块总数为所述开发者提交中所有可执行文件总数,所述文档数为所述开发者提交中所有文档总数,所述类的个数为所述开发者提交中所有类的个数,所述平均每个类的方法个数为所述开发者提交中所有类中方法数,所述静态属性数为该开发者提交中所有静态属性个数,所述类外函数总数为所述开发者提交中所有类外函数个数,所述全局变量数为所述开发者提交中所有全局变量总数;11.代码行指标包括:可执行代码行数、空行数、注释行数,所述可执行代码行数为所述开发者提交中所有可执行代码行数,所述空行数为所述开发者提交中所有空行总数,所述注释行数为所述开发者提交中所有注释行总数。12.本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则nca、afpc指标不需要测量,也不参与最终工作量的综合评价值计算。13.步骤3:根据步骤2获取到的可直接测量指标,计算不可直接测量指标。不可直接测量指标包括复杂度指标,从复杂度衡量源代码质量层面,复杂指标包括:mccabe圈复杂度(mccabe'scyclomaticcomplexity,mcc)、类复杂度(weightedmethodsperclass,wmc)、方法内聚度(lackofcohesioninmethodmetric,lcom)、嵌套块深度(nestedblockdepth,nbd);继承指标:从继承衡量源代码质量层面,继承指标包括:子类数(numberofchildren,noc)、继承树深度(depthofinheritancetree,dit);耦合指标:从耦合衡量源代码质量层面,耦合指标包括:传入耦合(afferentcoupling,ac)、传出耦合(efferentcoupling,ec)、不稳定指数(instabilitymetric,im)。14.其中:1、复杂度指标包括mccabe圈复杂度、类复杂度、方法内聚度、嵌套块深度,15.(1)对于程序段中的方法,绘制程序控制流图g,计算mccabe圈复杂度:16.mcc=e-n+2ꢀꢀꢀ(1)17.其中,e是控制流图g中边的条数,n是结点数。18.(2)若类中共有n个方法,定义类复杂度wmc为:[0019][0020]其中,mcci为第i个方法的mccabe圈复杂度。[0021]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则wmc指标改为测量开发者产生的源代码中所有函数的mcc值之和。[0022](3)方法内聚度lcom定义为在类中不共享实例变量的方法对的数量。[0023]对于某程序段,嵌套块深度nbd定义为一条路径中经历的分支和循环语句数。如图3所示程序段,nbd值为2。[0024]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则lcom指标不需要测量,也不参与最终工作量的综合评价值计算。[0025]2、继承指标包括子类数、继承树深度。该软件源代码中所有自定义类的集合为classset,若有类a继承于类b,且类b属于classset,则类a为子类。子类数noc为该开发者产生源代码中所有子类个数。[0026]继承树深度dit为从节点到继承树根的最大长度。[0027]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则noc、dit指标不需要测量,也不参与最终工作量的综合评价值计算。[0028]3、耦合指标包括传入耦合、传出耦合、不稳定指数。[0029]传入耦合ac为依赖于特定模块的模块数量。依赖关系指一个类的对象出现在另一个类的操作中。若类a将类b的对象作为自己某个方法的参数(形参),或者是某个方法的局部变量,则称类a依赖类b。如图5所示,graphics类的ac值为3。[0030]传出耦合ec为某个模块所依赖的模块数量。[0031]不稳定指数im定义如下:[0032][0033]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则ac指标定义为依赖于特定函数的函数数量。ec指标定义为某个函数所依赖的函数数量。依赖关系定义为一个函数调用另一个函数。若函数a的函数体中调用函数b,则称函数a依赖函数b。[0034]步骤4:根据步骤2和步骤3计算的指标建立数据表并计算开发者在每一项指标的得分,并计算最终加权得分,即为开发者工作量。[0035]在计算传入耦合ac和传出耦合ec指标时,对于某开发人员产生的源代码中的类a,应以整个软件为范围计算a被调用次数或调用其他类次数。其余指标以被评测开发者个人产生的源代码为范围进行计算。[0036]以类为模块计算指标值时,对于某些指标如耦合度中传入耦合ac,将产生多个值,计算该开发者产生源代码中所有ac的值并取平均值。[0037]指标圈复杂度mcc计算范围为程序段,在指标类复杂度wmc中使用该指标计算类复杂度。指标不稳定指数im使用指标传入耦合ac、传出耦合ec计算程序稳定程度。因此圈复杂度mcc、传入耦合ac、传出耦合ec不参与综合评价值计算。[0038](1)对指标提交次数nc、平均每次提交增加代码行数aapc、平均每次提交删除代码行数adpc、合并操作次数nm、可执行代码行数tloc、空行数eloc、注释行数cloc、模块总数nmd、文档数nd、类的个数nca、平均每个类的方法个数afpc、静态属性数nsa、类外函数总数nmt、全局变量数ngv进行min-max归一化,将数据映射到[0,1]范围中,即:[0039][0040]其中xnew为归一化后的指标值,x为原指标值,xmax为同一指标值的数据集中不同开发者中最大的值,xmin为最小值。[0041](2)对衡量复杂度的类复杂度wmc、方法内聚度lcom、嵌套块深度ndb及衡量继承程度的子类数noc、继承树深度dit指标,当此类指标数值过大或过小时均对软件质量有负面影响。重新计算此类指标的值:[0042][0043]其中xnew为重新计算后的指标值,x为原指标值,为同一指标值的数据集中平均值。再使用公式(4)对新的指标值进行归一化。[0044](3)对衡量耦合度的指标,不稳定指数im表示模块的不稳定程度。不稳定指数范围在[0,1]之间。如果该值趋向于0,则组件将趋向于最大稳定性。进行以下计算:[0045]xnew=1-xꢀꢀꢀ(6)[0046]其中xnew为重新计算后的指标值,x为原指标值。[0047][0048]表1[0049]对于表1中列出的23个指标,除了mcc、ac、ec三个指标不参与工作量综合评价值计算,对于参与计算的其他20个指标,即nc、aapc、adpc、nm、tloc、eloc、cloc、nmd、nd、nca、afpc、nsa、nmt、ngv、wmc、lcom、nbd、noc、dit、im,分别定义为xi(1≤i≤20),给出以下公式计算该开发人员d工作量l:[0050][0051]上述公式中,ai为权重系数。本发明中规定所有指标权重相同,即ai为1。l(d)代表开发人员d的工作量,此数值越高代表d在此项目中工作量越大。[0052]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则mcc、ac、ec、nca、afpc、lcom、noc、dit共8个指标不参与工作量综合评价值计算,最终参与计算的指标共有15个,即nc、aapc、adpc、nm、tloc、eloc、cloc、nmd、nd、nsa、nmt、ngv、wmc、nbd、im,公式(7)中变量i的范围为[1,15]。[0053]本发明的有益效果是:[0054]1.本发明中提出的指标定义清晰,具有明确的测量方法。[0055]2.本发明提出的测量方法样本数越大,测量结果越准确。[0056]3.本发明提出的指标体系针对小规模团队开发特点,且能够全面衡量开发者的工作量。ofcode,cloc);大小指标为从软件结构衡量软件规模考虑:模块总数(totalnumberofmodules,nmd)、文档数(numberofdocuments,nd)、类的个数(numberofclasses,nca)、平均每个类的方法个数(averagenumberoffunctionsperclass,afpc)、静态属性数(numberofstaticattributes,nsa)、类外函数总数(totalnumberofmethods,nmt)、全局变量数(numberofglobalvariables,ngv)。[0072]提交类别指标用于衡量开发者在协作开发中的工作量,以及开发团队组长的额外工作量,具体的包括提交次数、平均每次提交增加代码行数、平均每次提交删除代码行数、合并操作次数;所述平均每次提交增加代码行数为所述开发人员所有提交中增加的代码总行数,所述平均每次提交删除代码行数为所述开发人员所有提交中删除的代码总行数;[0073]大小类别指标用于衡量开发者在软件规模大小方面的工作量,具体的主要包括模块总数、文档数、类的个数、平均每个类的方法个数、静态属性数、类外函数总数、全局变量数;所述模块总数为所述开发者提交中所有可执行文件总数,所述文档数为所述开发者提交中所有文档总数,所述类的个数为所述开发者提交中所有类的个数,所述平均每个类的方法个数为所述开发者提交中所有类中方法数,所述静态属性数为该开发者提交中所有静态属性个数,也就是该开发者个人源代码文件中所有静态属性个数,所述类外函数总数为所述开发者提交中所有类外函数个数,所述全局变量数为所述开发者提交中所有全局变量总数;[0074]代码行指标包括:可执行代码行数、空行数、注释行数,所述可执行代码行数为所述开发者提交中所有可执行代码行数,所述空行数为所述开发者提交中所有空行总数,所述注释行数为所述开发者提交中所有注释行总数。[0075]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则nca、afpc指标不需要测量,也不参与最终工作量的综合评价值计算。[0076]具体包括如下步骤:[0077]步骤2-1:收集开发者的所有历史commit提交数据,将每次提交中增加的源代码划分到该开发者个人源代码文件中,每次提交中删除的代码在个人源代码文件中删除;[0078]步骤2-2:统计以下指标:提交次数、每次提交增加代码行数、每次提交删除代码行数、模块总数、文档数,若该开发者为具有合并分支权限的项目组长,则还需统计合并操作次数,否则合并操作次数值为0;[0079]步骤2-3:重复步骤2-1、步骤2-2完成该项目中其他开发者数据收集。[0080]步骤3:根据步骤2获取到的可直接测量指标,计算不可直接测量指标。[0081]不可直接测量指标包括复杂度指标,从复杂度衡量源代码质量层面,复杂指标包括:mccabe圈复杂度(mccabe'scyclomaticcomplexity,mcc)、类复杂度(weightedmethodsperclass,wmc)、方法内聚度(lackofcohesioninmethodmetric,lcom)、嵌套块深度(nestedblockdepth,nbd);继承指标:从继承衡量源代码质量层面,继承指标包括:子类数(numberofchildren,noc)、继承树深度(depthofinheritancetree,dit);耦合指标:从耦合衡量源代码质量层面,耦合指标包括:传入耦合(afferentcoupling,ac)、传出耦合(efferentcoupling,ec)、不稳定指数(instabilitymetric,im)。[0082]其中:1、复杂度指标包括mccabe圈复杂度、类复杂度、方法内聚度、嵌套块深度,[0083](1)对于程序段中的方法,绘制程序控制流图g,计算mccabe圈复杂度:[0084]mcc=e-n+2ꢀꢀꢀ(1)[0085]其中,e是控制流图g中边的条数,n是结点数。[0086](2)若类中共有n个方法,定义类复杂度wmc为:[0087][0088]其中,mcci为第i个方法的mccabe圈复杂度。[0089]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则wmc指标改为测量开发者产生的源代码中所有函数的mcc值之和。[0090](3)方法内聚度lcom定义为在类中不共享实例变量的方法对的数量。[0091]对于某程序段,嵌套块深度nbd定义为一条路径中经历的分支和循环语句数。如图3所示程序段,nbd值为2。[0092]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则lcom指标不需要测量,也不参与最终工作量的综合评价值计算。[0093]2、继承指标包括子类数、继承树深度。该软件源代码中所有自定义类的集合为classset,若有类a继承于类b,且类b属于classset,则类a为子类。子类数noc为该开发者产生源代码中所有子类个数。[0094]继承树深度dit为从节点到继承树根的最大长度。[0095]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则noc、dit指标不需要测量,也不参与最终工作量的综合评价值计算。[0096]3、耦合指标包括传入耦合、传出耦合、不稳定指数。[0097]传入耦合ac为依赖于特定模块的模块数量。依赖关系指一个类的对象出现在另一个类的操作中。若类a将类b的对象作为自己某个方法的参数(形参),或者是某个方法的局部变量,则称类a依赖类b。如图5所示,graphics类的ac值为3。[0098]传出耦合ec为某个模块所依赖的模块数量。[0099]不稳定指数im定义如下:[0100][0101]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则ac指标定义为依赖于特定函数的函数数量。ec指标定义为某个函数所依赖的函数数量。依赖关系定义为一个函数调用另一个函数。若函数a的函数体中调用函数b,则称函数a依赖函数b。[0102]具体包括如下步骤:[0103]步骤3-1:统计以下指标:平均每次提交增加代码行数和平均每次提交删除代码行数;[0104]步骤3-2:扫描开发者个人源代码文件,统计可直接测量指标:可执行代码行数、空行数、注释行数、类的个数、平均每个类的方法个数、静态属性数、类外函数总数、全局变量数;[0105]步骤3-3:扫描开发者个人源代码文件,计算以下不可直接测量指标:mccabe圈复杂度、类复杂度、方法内聚度、嵌套块深度、子类数、继承树深度、传入耦合、传出耦合、不稳定指数;[0106]步骤3-4:对步骤3-3中的指标计算平均值,并以平均值作为指标值,如一个开发者源代码文件中不止有一个类,则类复杂度wmc有多个值,计算其平均值即wmc所有值之和/类的个数;[0107]步骤3-5:重复以上步骤,完成该项目中其他开发者指标值计算。[0108]步骤4:根据步骤2和步骤3计算的指标建立数据表并计算开发者在每一项指标的得分,并计算最终加权得分,即为开发者工作量。[0109]6.根据权利要求5所述基于gitlab的小规模团队软件开发者工作量度量方法,其特征在于:所述步骤4具体包括如下步骤:[0110]步骤4-1:对指标提交次数、平均每次提交增加代码行数、平均每次提交删除代码行数、合并操作次数、可执行代码行数、空行数、注释行数、模块总数、文档数、类的个数、平均每个类的方法个数、静态属性数、类外函数总数、全局变量数、类复杂度、方法内聚度、嵌套块深度、子类数、继承树深度、不稳定指数进行min-max归一化,将数据映射到[0,1]范围中,即:[0111][0112]其中xnew为归一化后的指标值,x为原指标值,xmax为同一指标值的数据集中不同开发者中最大的值,xmin为最小值;[0113]步骤4-2:重新计算衡量复杂度的类复杂度、方法内聚度、嵌套块深度及衡量继承程度的子类数、继承树深度指标值,使指标值反映开发者工作量大小,再使用所述计算公式对新的指标值进行归一化,计算公式为[0114][0115]其中xnew为重新计算后的指标值,x为原指标值,为同一指标值的数据集中平均值;[0116]步骤4-3:重新计算不稳定指数指标,使其数值范围在[0,1]之间,且指标值反映开发者工作量大小,计算公式为xnew=1-x,其中xnew为重新计算后的指标值,x为原指标值;[0117]步骤4-4:对指标提交次数、平均每次提交增加代码行数、平均每次提交删除代码行数、合并操作次数、可执行代码行数、空行数、注释行数、模块总数、文档数、类的个数、平均每个类的方法个数、静态属性数、类外函数总数、全局变量数、类复杂度、方法内聚度、嵌套块深度、子类数、继承树深度进行min-max归一化,将数据映射到[0,1]范围中,即:[0118][0119]其中xnew为归一化后的指标值,x为原指标值,xmax为同一指标值的数据集中不同开发者中最大的值,xmin为最小值;[0120]步骤4-5:结合下式计算所述开发人员d工作量l:[0121][0122]其中,ai为权重系数,xi(1≤i≤20),所有指标权重相同,即ai为1,l(d)代表开发人员d的工作量,此数值越高代表d在此项目中工作量越大。[0123]具体的,在计算传入耦合ac和传出耦合ec指标时,对于某开发人员产生的源代码中的类a,应以整个软件为范围计算a被调用次数或调用其他类次数。其余指标以被评测开发者个人产生的源代码为范围进行计算。[0124]以类为模块计算指标值时,对于某些指标如耦合度中传入耦合ac,将产生多个值,计算该开发者产生源代码中所有ac的值并取平均值。[0125]指标圈复杂度mcc计算范围为程序段,在指标类复杂度wmc中使用该指标计算类复杂度。指标不稳定指数im使用指标传入耦合ac、传出耦合ec计算程序稳定程度。因此圈复杂度mcc、传入耦合ac、传出耦合ec不参与综合评价值计算。[0126](1)对指标提交次数nc、平均每次提交增加代码行数aapc、平均每次提交删除代码行数adpc、合并操作次数nm、可执行代码行数tloc、空行数eloc、注释行数cloc、模块总数nmd、文档数nd、类的个数nca、平均每个类的方法个数afpc、静态属性数nsa、类外函数总数nmt、全局变量数ngv进行min-max归一化,将数据映射到[0,1]范围中,即:[0127][0128]其中xnew为归一化后的指标值,x为原指标值,xmax为同一指标值的数据集中不同开发者中最大的值,xmin为最小值。[0129](2)对衡量复杂度的类复杂度wmc、方法内聚度lcom、嵌套块深度ndb及衡量继承程度的子类数noc、继承树深度dit指标,当此类指标数值过大或过小时均对软件质量有负面影响。重新计算此类指标的值:[0130][0131]其中xnew为重新计算后的指标值,x为原指标值,为同一指标值的数据集中平均值。再使用公式(4)对新的指标值进行归一化。[0132](3)对衡量耦合度的指标,不稳定指数im表示模块的不稳定程度。不稳定指数范围在[0,1]之间。如果该值趋向于0,则组件将趋向于最大稳定性。进行以下计算:[0133]xnew=1-xꢀꢀꢀ(6)[0134]其中xnew为重新计算后的指标值,x为原指标值。[0135][0136]表1[0137]对于表1中列出的23个指标,除了mcc、ac、ec三个指标不参与工作量综合评价值计算,对于参与计算的其他20个指标,即nc、aapc、adpc、nm、tloc、eloc、cloc、nmd、nd、nca、afpc、nsa、nmt、ngv、wmc、lcom、nbd、noc、dit、im,分别定义为xi(1≤i≤20),给出以下公式计算该开发人员d工作量l:[0138][0139]上述公式中,ai为权重系数。本发明中规定所有指标权重相同,即ai为1。l(d)代表开发人员d的工作量,此数值越高代表d在此项目中工作量越大。[0140]本发明提出的开发者工作量计算方法针对使用面向对象程序设计实现的软件项目,若使用面向过程程序设计,则mcc、ac、ec、nca、afpc、lcom、noc、dit共8个指标不参与工作量综合评价值计算,最终参与计算的指标共有15个,即nc、aapc、adpc、nm、tloc、eloc、cloc、nmd、nd、nsa、nmt、ngv、wmc、nbd、im,公式(7)中变量i的范围为[1,15]。[0141]本发明利用gitlab平台收集软件项目开发过程中产生的数据和软件源代码,整理该项目每个开发者产生的源代码,然后根据commit数据统计提交类别指标,扫描开发者源代码文件对每个开发者分别计算代码行、软件规模、复杂度、继承以及耦合度类别指标,对有多个测量值的指标取均值。然后建立数据表,处理部分指标值使其反映工作量大小,对所有指标进行归一化处理,最后将待评估开发者的指标值代入工作量计算公式计算得到该开发者的工作量综合评估值。本发明提出的方法从软件规模、源代码质量和协作开发中的工作量三个方面衡量团队中每个开发成员的工作量,同时使用提交类别中的合并指标衡量团队组长承担的额外工作量。[0142]以上所述仅为本发明的实施方式而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理的内所作的任何修改、等同替换、改进等,均应包括在本发明的权利要求范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1