CN110347570B - 一种ide环境下代码自动生成工具分析方法 - Google Patents

一种ide环境下代码自动生成工具分析方法 Download PDF

Info

Publication number
CN110347570B
CN110347570B CN201910588474.5A CN201910588474A CN110347570B CN 110347570 B CN110347570 B CN 110347570B CN 201910588474 A CN201910588474 A CN 201910588474A CN 110347570 B CN110347570 B CN 110347570B
Authority
CN
China
Prior art keywords
code
executing
row
generation
judging whether
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910588474.5A
Other languages
English (en)
Other versions
CN110347570A (zh
Inventor
姜瑛
张晓江
王志军
李凌宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kunming University of Science and Technology
Original Assignee
Kunming University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kunming University of Science and Technology filed Critical Kunming University of Science and Technology
Priority to CN201910588474.5A priority Critical patent/CN110347570B/zh
Publication of CN110347570A publication Critical patent/CN110347570A/zh
Application granted granted Critical
Publication of CN110347570B publication Critical patent/CN110347570B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis

Abstract

本发明公开了一种IDE环境下代码自动生成工具分析方法,本发明方法为:Step1、程序员行为数据获取;Step2、自动生成代码数据获取;Step3、行为与代码自动生成数据预处理;Step4、代码自动生成过程分析。本发明所提出的方法能够有效监测并记录程序员的开发行为、代码自动生成工具在编码过程中所推荐的代码及相关信息;本发明可以分析不同的代码自动生成工具在实际开发过程中对软件开发的影响程度。

Description

一种IDE环境下代码自动生成工具分析方法
技术领域
本发明涉及一种IDE环境下代码自动生成工具分析方法,属于云故障检测领域。
背景技术
随着代码自动生成方法的不断改进和完善,一些代码自动生成工具逐渐成型,包括aiXCoder、Kite、IntelliJ IDEA等。
aiXcoder结合严格筛选的海量领域源代码进行训练,能够充分学习和掌握隐含于海量代码中的编码模式与规律并用于代码的生成和补全。aiXcoder还能快速了解一个程序员的编程习惯,记录程序员常用的程序模式、API调用序列等,从而在开发过程中自动以最大程度协助程序员完成工作。目前AiXcoder以插件的方式集成于IntelliJ IDEA和Pycharm中。
Kite是一款为Python程序员提供实时代码片段的工具,在编写代码时会显示程序员使用的库和终端命令的示例文档,甚至可以自动检测并解决程序员的简单的错误和需求。Kite与程序员现有的编辑器和终端并行运行,目前Kite支持的编辑器包括SublimeText、Emacs、Vim、PyCharm和Atom,并且为程序员提供开源插件,方便程序员在继续使用自己熟悉的编译器的情况下应用Kite来提高编程效率。
IntelliJ IDEA代码自动生成工具是IntelliJ IDEA集成开发环境中自带的代码智能完成工具。IntelliJ IDEA提供了多种代码完成的方式:代码基本完成、代码智能完成、第二次代码完成、第二次代码智能完成、代码声明完成等。
这些工具已被应用于软件开发中,但是缺乏对此类工具结合实际开发的分析。在使用代码自动生成工具时,程序员通常比较关注代码自动生成的质量以及代码自动生成规模的大小,生成代码的正确性,以及在实际开发中能给程序员带来多少开发效率的提升。因此,针对代码自动生成工具的分析成为亟待解决的问题。
发明内容
本发明提供了一种IDE环境下代码自动生成工具分析方法,有助于分析代码自动生成工具在实际开发中的作用。
本发明的技术方案是:一种IDE环境下代码自动生成工具分析方法,所述方法的具体步骤如下:
Step1、程序员行为数据获取:通过监测IDE环境下程序员的按键操作以得到程序员行为数据;其中程序员行为数据包括程序员输入按键,程序员选择生成代码行为标记;
Step2、自动生成代码数据获取:根据程序员行为数据判断是否触发代码自动生成,获取程序员选择的生成代码、代码来源、生成代码、选择生成代码所用键数;
Step3、行为与代码自动生成数据预处理:针对步骤Step2获取的数据进行遍历,将不同代码自动生成工具生成的代码进行分类,将预处理结果存入到生成代码分类结果矩阵中;
Step4、代码自动生成过程分析:针对多次Step2、Step3获取到的生成代码分类结果矩阵进行分析,统计不同工具在代码自动生成过程中的相应表现。
所述Step1具体如下:
Step1.1、初始化Project为当前项目,Editor为当前编辑器,键盘按键KeyStrokes为空,程序员输入按键ProgrammerInput为空,程序员选择生成代码行为标记SelectAction为False,执行Step1.2;
Step1.2、判断当前项目和编辑器是否不等于null,如果是则执行Step1.3,否则结束;
Step1.3、初始化IDE环境中用于编辑器事件处理的Execute方法,执行Step1.4;
Step1.4、判断通过Execute获取的当前按键值是否为null:如果是则执行Step2,否则执行Step1.5;
Step1.5、将获取到的当前按键值赋值给KeyStrokes,执行Step1.6;
Step1.6、判断KeyStrokes是否包含代码自动生成选择按键,如果是则执行Step1.7,否则执行Step1.8;其中代码自动生成选择按键为Enter、Tab;
Step1.7、将程序员选择生成代码行为标记SelectAction置为True,执行Step1.4;
Step1.8、将程序员输入按键ProgrammerInput赋值为KeyStorkes,执行Step1.4。
所述Step2具体如下:
Step2.1、初始化:生成代码列表GeneratedCodeList[]=null,触发代码自动生成按键Input=null,程序员选择的生成代码SelectedCode=null,i=0,代码来源CodeFrom[]=null,生成代码Code[]=null,选择生成代码所用键数SelectCount=-1,执行Step2.2;
Step2.2、判断Step1中的程序员输入按键ProgrammerInput是否为非空:如果是则执行Step2.3,否则结束;
Step2.3、获取当前代码推荐列表中的所有生成代码列表赋值给GeneratedCodeList[],执行Step2.4;
Step2.4、判断第i个生成代码列表GeneratedCodeList[i]是否为非空,如果是则执行Step2.5,否则执行Step3;
Step2.5、从第i行生成代码列表GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],执行Step2.6;
Step2.6、判断SelectAction是否为True,如果是则执行Step2.8,否则执行Step2.7;
Step2.7、i++,执行Step2.4;
Step2.8、将触发代码自动生成按键Input赋值为ProgrammerInput,程序员选择的生成代码SelectedCode=Code[i],选择生成代码所用键数SelectCount=i,选择生成代码动作标记SelectAction=False,执行Step2.7。
所述Step3具体如下:
Step3.1、初始化代码来源标记CodeMarked[]={},表示生成代码来源标记,执行Step3.2;其中:生成代码分类结果矩阵CodeClassify[][]为空,j=0,p=0,k=0,y=p+4,代码自动生成次数GenerateCount;
Step3.2、判断k是否小于代码自动生成次数:如果是则执行Step3.3,否则执行Step4;
Step3.3、判断j是否小于等于CodeFrom[]的个数:如果是则执行Step3.4,否则执行Step3.11;
Step3.4、判断代码来源CodeFrom[j]是否包含CodeMarked[p],如果是执行Step3.5,否则执行3.8;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code[j]存入CodeClassify[][]第k+1行第y+1列,执行Step3.6;
Step3.6、判断选择代码所用键数SelectCount是否等于j,如果是则执行Step3.7,否则执行Step3.8;
Step3.7、将CodeMarked[p]存入CodeCalssify[][]第k行第3列,执行Step3.8;
Step3.8、p++,执行Step3.9;
Step3.9、判断p是否小于CodeMarked[]中代码来源标记个数,如果是则执行Step3.4,否则执行Step3.10;
Step3.10、j++,p=0,执行Setp3.3;
Step3.11、Step2中触发代码自动生成按键Input存入CodeClassify[][]第k+1行第1列,程序员选择的生成代码SelectedCode存入CodeClassify[][]第k+1行第2列,选择生成代码所用键数SelectCount存入CodeClassify[][]第k+1行第4列,执行Step3.12;
Step3.12、k++,执行Step3.2。
所述Step4具体如下:
Step4.1、初始化正确推荐项平均完成键数数组SelectNum[]=null,平均推荐列表长度数组CodeListSize[]=null,正确推荐次数数组CorretCodeNum[]=null,生成总代码占用空间数组CodeSize[]=null,单行代码自动生成次数数组SinglelLineNum[]=null,多行代码自动生成次数数组MultiLineNum[]=null,初始化f=0,u=0,v=u+4,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify[][]的行数,如果是则执行Step4.3,否则执行Step4.13;
Step4.3、判断u是否小于代码来源标记CodeMarked[]的个数,如果是则执行Step4.4,否则执行Step4.12;
Step4.4、获取CodeClassify[][]中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify[][]中第f+1行第v+1列的代码数据存入到CodeSize[u]中,执行Step4.5;
Step4.5、判断CodeClassify[][]中第f+1行第3列代码来源信息是否等于CodeMarked[u],如果是则执行Step4.6,否则执行Step4.11;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,执行Step4.7;
Step4.7、判断CodeClassify[][]中第f+1行第2列程序员选择的生成代码是否为单行代码:如果是则执行Step4.8,否则执行Step4.9;其中,单行代码指生成的代码为整行代码;
Step4.8、将第u个代码来源的单行代码自动生成次数加1,SingleLineNum[u]++,执行Step4.11;
Step4.9、判断CodeClassify[][]中第f+1行第2列程序员选择的生成代码是否为多行代码,如果是则执行Step4.10,否则执行Step4.11;其中,多行代码指生成的代码行数大于1;
Step4.10、将第u个代码来源的多行代码自动生成次数加1,MultiLineNum[u]++,执行Step4.11;
Step4.11、u++,执行Step4.3;
Step4.12、f++,u=0,执行Step4.2;
Step4.13、判断u是否小于代码来源标记CodeMarked[]的个数,如果是则执行Step4.14,否则结束;
Step4.14、使用SelectNum[u]计算正确推荐项平均完成键数,并更新SelectNum[u]中的值;其中SelectNum[u]=SelectNum[u]/CorretCodeNum[u];使用CodeListSize[u]计算平均推荐列表长度,并更新CodelistSize[u]中的值;其中CodelistSize[u]=CodelistSize[u]/GenerateCount;根据CodeSize[u]实际占用空间大小重新赋值CodeSize[u],执行Step4.15。
本发明的有益效果是:
(1)本发明所提出的方法能够有效监测并记录程序员的开发行为、代码自动生成工具在编码过程中所推荐的代码及相关信息;
(2)本发明可以分析不同的代码自动生成工具在实际开发过程中对软件开发的影响程度。
附图说明
图1是本发明总流程图;
图2是步骤Step1的流程图;
图3是步骤Step2的流程图;
图4是步骤Step3的流程图;
图5是步骤Step4的流程图。
具体实施方式
实施例1:如图1-5所示,一种IDE环境下代码自动生成工具分析方法,所述方法的具体步骤如下:
Step1、程序员行为数据获取:通过监测IDE环境下程序员的按键操作以得到程序员行为数据;其中程序员行为数据包括程序员输入按键,程序员选择生成代码行为标记;
Step2、自动生成代码数据获取:根据程序员行为数据判断是否触发代码自动生成,获取程序员选择的生成代码、代码来源、生成代码、选择生成代码所用键数;
Step3、行为与代码自动生成数据预处理:针对步骤Step2获取的数据进行遍历,将不同代码自动生成工具生成的代码进行分类,将预处理结果存入到生成代码分类结果矩阵中;
Step4、代码自动生成过程分析:针对多次Step2、Step3获取到的生成代码分类结果矩阵进行分析,统计不同工具在代码自动生成过程中的相应表现。
进一步地,可以设置所述方法具体步骤如下(如下以具体实验数据进行说明):
Step1、程序员行为数据监测;
Step1.1、初始化Project为表1-开发环境参数中项目”Demo1”,Editor为表1-开发环境参数中的编辑器”IntelliJ IDEA”,键盘按键KeyStrokes为空,程序员当前输入按键ProgrammerInput为空,程序员选择生成代码行为标记SelectAction为False,执行Step1.2;
表1开发环境参数
属性
项目 Demo1
编辑器 IntelliJ IDEA
Step1.2、判断当前项目和编辑器是否为空,Project='Demo1',Editor='IntelliJIDEA',当前项目和编辑器不为空则执行Step1.3;
Step1.3、初始化IDE环境中用于编辑器事件处理的Execute方法,执行Step1.4;
Step1.4、程序员在编辑器中输入按键“d”,通过Execute获取的当前按键值为“d”,判断通过Execute获取的值是否为空,执行Step1.5;
Step1.5、将当前按键值d赋值给KeyStrokes,KeyStrokes=d,执行Step1.6;
Step1.6、判断KeyStrokes是否包含Enter、Tab等代码自动生成选择按键,KeyStrokes='d',执行Step1.8;
Step1.8、给程序员输入按键赋值,ProgrammerInput=KeyStorkes,执行Step1.4;
Step1.4、判断Execute获取的按键值是否为空,通过Execute获取的当前按键值为Enter,执行Step1.5;
Step1.5、将当前按键值赋值给KeyStorkes,KeyStorkes=Enter,执行Step1.6;
Step1.6、判断KeyStorkes是否包含Enter、Tab等代码选择按键,KeyStorkes=Enter,执行Step1.7;
Step1.7、将程序员选择生成代码行为标记置为True,SelectionAction=True;执行Step1.4;
Step1.4、判断Execute获取的按键值是否为空,Execute为空,执行Step2。
Step2、自动生成代码数据获取;
Step2.1、初始化生成代码列表GeneratedCodeList[]=null,触发代码自动生成按键Input=null,程序员选择的生成代码SelectedCode=null,i=0代码来源CodeFrom[],=null,生成代码Code[]=null,选择生成代码所用键数SelectCount=-1,执行Step2.2;
Step2.2、判断Step1中的程序员输入按键ProgrammerInput是否为非空,ProgrammerInput=d,执行Step2.3;
Step2.3、获取当前代码推荐列表中的所有生成代码列表赋值给GeneratedCodeList[],执行Step2.4;此时GeneratedCodeList如表2所示;
表2生成代码列表GeneratedCodeList
序号 数据
0 itemText='def',typeText='aiXcoder'
1 itemText='del',typeText='aiXcoder'
2 itemText='def',typeText='kite'
3 itemText='del',typeText='IDEA'
4 itemText='and',typeText='IDEA'
5 itemText='lambda',typeText='IDEA'
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[i]='itemText='def',typeText='aiXcoder',执行Step2.5;
Step2.5、从第i行生成代码列表GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=0,CodeFrom[0]='aiXcoder',Code[0]='def',执行Step2.6;
Step2.6、判断SelectAction是否为真,根据输入的按键d,可知该条数据情况下SelectAction=False,执行Step2.7;
Step2.7、i++,i=1,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为空,GeneratedCodeList[1]='itemText='del',typeText='aiXcoder',执行Step2.5;
Step2.5、从第i行生成代码GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=1,CodeFrom[1]='aiXcoder',Code[1]='del',执行Step2.6;
Step2.6、判断SelectAction是否为真,根据输入的按键Enter,可知该条数据情况下SelectAction=True,执行Step2.8;
Step2.8、将触发代码自动生成按键Input赋值为ProgrammerInput,程序员选择的生成代码SelectedCode=Code[i],选择生成代码所用键数SelectCount=i,选择生成代码动作标记Selection=False,Input=d,SelectedCode='del',SelectCount=1,Selection=False,执行Step2.7;
Step2.7、i++,i=2,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[2]='itemText='def',typeText='kite',执行Step2.5;
Step2.5、从第i行生成代码GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=2,CodeFrom[2]='kite',Code[2]='def',执行Step2.6;
Step2.6、判断SelectAction是否为真,SelectAction=False,执行Step2.7;
Step2.7、i++,i=3,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[3]='itemText='del',typeText='IDEA',执行Step2.5;
Step2.5、从第i行生成代码GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=3,CodeFrom[3]='aiXcoder',Code[3]='del',执行Step2.6;
Step2.6、判断SelectAction是否为真,SelectAction=False,执行Step2.7;
Step2.7、i++,i=4,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[4]='itemText='and',typeText='IDEA',执行Step2.5;
Step2.5、从第i行生成代码GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=4,CodeFrom[4]='IDEA',Code[4]='and',执行Step2.6;
Step2.6、判断SelectAction是否为真,SelectAction=False,执行Step2.7;
Step2.7、i++,i=5,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[5]='itemText='lambda',typeText='IDEA',执行Step2.5;
Step2.5、从第i行生成代码GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],i=5,CodeFrom[5]='IDEA',Code[5]='lambda',执行Step2.6;
Step2.6、判断SelectAction是否为真,SelectAction=False,执行Step2.7;
Step2.7、i++,i=6,执行Step2.4;
Step2.4、判断GeneratedCodeList[i]是否为非空,GeneratedCodeList[6]=null,执行Step 3;
Step3、行为与代码自动生成数据预处理;
Step3.1、初始化代码来源标记为表3-选择的代码自动生成工具中不同工具的标记字段,即CodeMarked[E]={'aixcoder','kite','IDEA'},生成代码分类结果矩阵CodeClassify[M][N]为空,j=0,p=0,k=0,y=p+4,通过执行1次Step2可得到1条代码自动生成记录,即代码自动生成次数GenerateCount=1;执行Step3.2;
表3选择的代码自动生成工具
代码自动生成工具 标记字段
AiXcoder aiXcoder
Kite kite
IDEA IDEA
Step3.2、判断k是否小于代码自动生成次数GenerateCount,k<1,执行Step3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,0<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=0,p=0,CodeFrom[0]='aiXcoder',CodeMarked[0]='aiXcoder',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code[j]存入CodeClassify第k+1行第y+1列。Code[0]来源标记为CodeMarked[0],将Code[0]存入CodeClassify第1行第5列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==0,执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=0,p=1,CodeFrom[0]='aiXcoder',CodeMarked[1]='kite',执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=0,p=2,CodeFrom[0]='aiXcoder',CodeMarked[2]='IDEA',执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=1,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,1<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=1,p=0,CodeFrom[1]='aiXcoder',CodeMarked[0]='aiXcoder',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code[1]存入CodeClassify第k+1行第y+1列。Code[1]来源标记为CodeMarked[0],将Code[1]存入CodeClassify第1行第5列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==1,执行Step3.7;
Step3.7、将CodeMarked[p]存入CodeCalssify第k+1行第3列,标记选择代码来源为CodeMarked[0]='aiXcoder',将”aiXcoder”存入CodeCalssify第1行第3列,执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=1,p=1,CodeFrom[1]='aiXcoder',CodeMarked[1]='kite',执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=1,p=2,CodeFrom[1]='aiXcoder',CodeMarked[2]='IDEA',执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=2,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,2<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=2,p=0,CodeFrom[2]='kite',CodeMarked[0]='aiXcoder',执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=2,p=1,CodeFrom[2]='kite',CodeMarked[1]='kite',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code[j]存入CodeClassify第k+1行第y+1列。j=2,p=1,y=p+4,Code[2]来源标记为CodeMarked[1],将Code[2]存入CodeClassify第1行第6列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==2,执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=2,p=2,CodeFrom[2]='kite',CodeMarked[2]='IDEA',执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=3,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,3<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=3,p=0,CodeFrom[3]='IDEA',CodeMarked[0]='aiXcoder',执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=3,p=1,CodeFrom[3]='IDEA',CodeMarked[1]='kite',执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=3,p=2,CodeFrom[3]='IDEA',CodeMarked[2]='IDEA',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code存入CodeClassify第k+1行第y+1列。j=3,p=2,y=p+4,Code[3]来源标记为CodeMarked[2],将Code存入CodeClassify第1行第7列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==3,执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=4,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,4<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=4,p=0,CodeFrom[4]='IDEA',CodeMarked[0]='aiXcoder',执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=4,p=1,CodeFrom[3]='IDEA',CodeMarked[1]='kite',执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=4,p=2,CodeFrom[4]='IDEA',CodeMarked[2]='IDEA',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code存入CodeClassify第k+1行第y+1列。j=4,p=2,y=p+4,Code[4]来源标记为CodeMarked[2],将Code存入CodeClassify第1行第7列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==4,执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=5,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,5<=5,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=5,p=0,CodeFrom[5]='IDEA',CodeMarked[0]='aixcoder',执行Step3.8;
Step3.8、p++,p=1,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,1<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=5,p=1,CodeFrom[5]='IDEA',CodeMarked[1]='kite',执行Step3.8;
Step3.8、p++,p=2,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,2<3,执行Step3.4;
Step3.4、判断CodeFrom[j]是否包含CodeMarked[p],j=5,p=2,CodeFrom[5]='IDEA',CodeMarked[2]=‘IDEA',执行Step3.5;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code存入CodeClassify第k+1行第y+1列。j=5,p=2,y=p+4,Code[5]来源标记为CodeMarked[2],将Code存入CodeClassify第1行第7列。执行Step3.6。
Step3.6、判断选择代码所用键数SelectCount是否等于j,1==5,执行Step3.8;
Step3.8、p++,p=3,执行Step3.9;
Step3.9、判断p是否小于代码来源标记个数E,3<3,执行Step3.10;
Step3.10、j++,j=6,p=0,执行Setp3.3;
Step3.3、判断j是否小于等于CodeFrom的个数,6<=5,执行Step3.11;
Step3.11、触发代码自动生成按键Input存入CodeClassify第k+1行第1列,程序员选择的生成代码SelectedCode存入CodeClassify第k+1行第2列,选择生成代码所用键数SelectCount存入CodeClassify第k+1行第4列,Input='d',k=0;SelectedCode='del',SelectCount=1,触发代码自动生成按键“d“存入CodeClassify第1行第1列,程序员选择的生成代码”del”存入CodeClassify第1行第2列,选择生成代码所用键数1存入CodeClassify第1行第4列,执行Step3.12;
Step3.12、k++,k=1,执行Step3.2;
Step3.2、判断k是否小于代码自动生成次数GenerateCount,1<1,执行Step4。
Step4、代码自动生成过程分析;
Step4.1、初始化正确推荐项平均完成键数数组SelectNum[]=null,平均推荐列表长度数组CodeListSize[]=null,正确推荐次数数组CorretCodeNum[]=null,生成总代码占用空间数组CodeSize[]=null,单行代码自动生成次数数组SinglelLineNum[]=null,多行代码自动生成次数数组MultiLineNum[]=null,初始化f=0,u=0,v=u+4,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,0<1,执行Step4.3;通过执行5次Step3,CodeClassify可得到如下数据,其中表4中表头往下,id=1行的数据表示本实施例中步骤Step2执行的结果;
表4生成代码列表GeneratedCodeList数据
Figure BDA0002115278490000131
Figure BDA0002115278490000141
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.4;
Step4.4、获取CodeClassify[][]中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify[][]中第v+1中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=0,u=0,v=4,获取CodeClassify中第1行第5列中的代码条数2(即def和del),CodeListSize[0]=CodeListSize[0]+2,将CodeClassify中第1行第5列的代码数据存入到CodeSize[0]中,CodeSize[0]=CodeSize[0]+'def,del',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=0,u=0,CodeClassify中第1行第3列代码来源信息为”aiXcoder”,CodeMarked[u]='aiXcoder',”aiXcoder”=”aiXcoder”,执行Step4.6;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,f=0,u=0,CodeClassify中第1行第4列选择生成代码所用键数为1,SelectNum[0]=SelectNum[0]+1,CorretCodeNum[0]++,执行Step4.7;
Step4.7、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为单行代码(单行代码指生成的代码为整行代码),f=0,CodeClassify中第1行第2列程序员选择的生成代码为”del",”del”为单关键字生成,不为单行代码自动生成,所以执行Step4.9;
Step4.9、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为多行代码(多行代码指生成的代码行数大于1),f=0,CodeClassify中第1行第2列程序员选择的生成代码为”del”,”del”为单关键字生成,不为多行代码自动生成,所以执行Step4.11;
Step4.11、u++,u=1,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=0,u=1,v=5,获取CodeClassify中第1行第6列中的代码条数1,CodeListSize[1]=CodeListSize[1]+4,将CodeClassify中第1行第6列的代码数据存入到CodeSize[1]中,CodeSize[1]=CodeSize[1]+'def'。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=0,u=1,CodeClassify中第1行第3列代码来源信息为”aiXcoder”,CodeMarked[1]='kite',”aiXcoder”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=2,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=0,u=2,v=6,获取CodeClassify中第1行第7列中的代码条数2,CodeListSize[2]=CodeListSize[2]+2,将CodeClassify中第1行第7列的代码数据存入到CodeSize[2]中,CodeSize[2]=CodeSize[2]+'and,lambda'。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=0,u=2,CodeClassify中第1行第3列代码来源信息为”aiXcoder”,CodeMarked[1]='IDEA',”aiXcoder”!=”IDEA”,所以执行Step4.11;
Step4.11、u++,u=3,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3<3,所以执行Step4.12;
Step4.12、f++,f=1,u=0,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,0<5,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=1,u=0,v=4,获取CodeClassify中第2行第5列中的代码条数2,CodeListSize[0]=CodeListSize[0]+2,将CodeClassify中第2行第5列的代码数据存入到CodeSize[0]中,CodeSize[0]=CodeSize[0]+'instanceof'。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=1,u=0,CodeClassify中第2行第3列代码来源信息为”kite”,CodeMarked[0]='aiXcoder',”aiXcoder”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=1,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=1,u=1,v=5,获取CodeClassify中第2行第6列中的代码条数1,CodeListSize[1]=CodeListSize[1]+2,将CodeClassify中第2行第6列的代码数据存入到CodeSize[1]中,CodeSize[1]=CodeSize[1]+'instanceof'。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=1,u=1,CodeClassify中第2行第3列代码来源信息为”kite”,CodeMarked[1]='kite',”kite”==”kite”,所以执行Step4.6;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,f=1,u=1,CodeClassify中第1行第3列选择生成代码所用键数为2,SelectNum[1]=SelectNum[1]+1,CorretCodeNum[1]++,执行Step4.7;
Step4.7、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为单行代码(单行代码指生成的代码为整行代码),f=1,CodeClassify中第2行第2列程序员选择的生成代码为”import”,”import”为单关键字生成,不为单行代码自动生成,所以执行Step4.9;
Step4.9、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为多行代码(多行代码指生成的代码行数大于1),f=1,CodeClassify中第2行第2列程序员选择的生成代码为”import”,“import”为单关键字生成,不为多行代码自动生成,所以执行Step4.11;
Step4.11、u++,u=2,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=1,u=2,v=6,获取CodeClassify中第2行第7列中的代码条数2,CodeListSize[2]=CodeListSize[2]+2,将CodeClassify中第2行第7列的代码数据存入到CodeSize[2]中,CodeSize[2]=CodeSize[2]+'iter,itere'。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=1,u=2,CodeClassify中第2行第3列代码来源信息为”kite”,CodeMarked[0]='IDEA',”IDEA”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=3,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3<3,所以执行Step4.12;
Step4.12、f++,f=2,u=0,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,2<5,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=2,u=0,v=4,获取CodeClassify中第3行第5列中的代码条数1,CodeListSize[0]=CodeListSize[0]+1,将CodeClassify中第3行第5列的代码数据存入到CodeSize[0]中,CodeSize[0]=CodeSize[0]+”learning_rate”。执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=2,u=0,CodeClassify中第2行第3列代码来源信息为”aiXcoder”,CodeMarked[0]='aiXcoder',”aiXcoder”==”aiXcoder”,所以执行Step4.6;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,f=2,u=0,CodeClassify中第3行第4列选择生成代码所用键数为1,SelectNum[0]=SelectNum[0]+1,CorretCodeNum[0]++,执行Step4.7;
Step4.7、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为单行代码(单行代码指生成的代码为整行代码),f=2,CodeClassify中第3行第2列程序员选择的生成代码为”learning_rate=learning_rate”,”learning_rate=learning_rate”为单行代码自动生成,所以执行Step4.8;
Step4.8、将第u个代码来源的单行代码自动生成次数加1,SingleLineNum[0]++,执行Step4.11;
Step4.11、u++,u=1,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=2,u=1,v=5,获取CodeClassify中第3行第6列中的代码条数7,CodeListSize[1]=CodeListSize[1]+7,将CodeClassify中第3行第6列的代码数据存入到CodeSize[1]中,CodeSize[1]=CodeSize[1]+'learning_rate,logits,loss_op,len,list,locals,long',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=2,u=1,CodeClassify中第3行第3列代码来源信息为”aiXcoder”,CodeMarked[1]='kite',”aiXcoder”!=kite”,所以执行Step4.11;
Step4.11、u++,u=2执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=2,u=2,v=6,获取CodeClassify中第3行第7列中的代码条数9,CodeListSize[2]=CodeListSize[2]+9,将CodeClassify中第3行第7列的代码数据存入到CodeSize[2]中,CodeSize[2]=CodeSize[2]+'learning_rate,len,license,list,locals,long,lambda,device_lib,display_step',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=2,u=2,CodeClassify中第3行第3列代码来源信息为”aiXcoder”,CodeMarked[1]='IDEA',”aiXcoder”!=”IDEA”,所以执行Step4.11;
Step4.11、u++,u=3执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3!<3,所以执行Step4.12;
Step4.12、f++,f=3,u=0,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,3<5,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=3,u=0,v=4,获取CodeClassify中第4行第5列中的代码条数1,CodeListSize[0]=CodeListSize[0]+1,将CodeClassify中第4行第5列的代码数据存入到CodeSize[0]中,CodeSize[0]=CodeSize[0]+'optimizer=tf.train.Gradient-DescentOptimizer()',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=3,u=0,CodeClassify中第4行第3列代码来源信息为”aiXcoder”,CodeMarked[0]='aiXcoder',”aiXcoder”==”aiXcoder”,所以执行Step4.6;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,f=3,u=0,CodeClassify中第4行第4列选择生成代码所用键数为2,SelectNum[0]=SelectNum[0]+2,CorretCodeNum[0]++,执行Step4.7;
Step4.7、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为单行代码(单行代码指生成的代码为整行代码),f=3,CodeClassify中第4行第2列程序员选择的生成代码为“optimizer=tf.train.GradientDescentOptimizer()”,“optimizer=tf.train.GradientDescentOptimizer()”为单行代码自动生成,所以执行Step4.8;
Step4.8、将第u个代码来源的单行代码自动生成次数加1,SingleLineNum[0]++,执行Step4.11;
Step4.11、u++,u=1,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=3,u=1,v=5,获取CodeClassify中第4行第6列中的代码条数1,CodeListSize[1]=CodeListSize[1]+1,将CodeClassify中第4行第6列的代码数据存入到CodeSize[1]中,CodeSize[1]=CodeSize[1]+'open',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=3,u=1,CodeClassify中第4行第3列代码来源信息为”aiXcoder”,CodeMarked[1]='kite',”aiXcoder”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=2,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=3,u=2,v=6,获取CodeClassify中第4行第7列中的代码条数2,CodeListSize[2]=CodeListSize[2]+2,将CodeClassify中第4行第7列的代码数据存入到CodeSize[2]中,CodeSize[2]=CodeSize[2]+'open,loss_p',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=3,u=2,CodeClassify中第4行第3列代码来源信息为”aiXcoder”,CodeMarked[2]='IDEA',”IDEA”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=3,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3!<3,所以执行Step4.12;
Step4.12、f++,f=4,u=0,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,4<5,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=4,u=0,v=4,获取CodeClassify中第5行第5列中的代码条数1,CodeListSize[0]=CodeListSize[0]+1,将CodeClassify中第5行第5列的代码数据存入到CodeSize[0]中,CodeSize[0]=CodeSize[0]+'feed_dict{}',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=4,u=0,CodeClassify中第5行第3列代码来源信息为”aiXcoder”,CodeMarked[0]='aiXcoder',”aiXcoder”==”aiXcoder”,所以执行Step4.6;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第3列选择生成代码所用键数,并且累计加入SelectNum[u]中,f=4,u=0,CodeClassify中第4行第3列选择生成代码所用键数为1,SelectNum[0]=SelectNum[0]+1,CorretCodeNum[0]++,执行Step4.7;
Step4.7、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为单行代码(单行代码指生成的代码为整行代码),f=4,CodeClassify中第5行第2列程序员选择的生成代码为”feed_dict={}”,”feed_dict={}”为多行代码自动生成,所以执行Step4.9;
Step4.9、判断CodeClassify中第f+1行第2列程序员选择的生成代码是否为多行代码(多行代码指生成的代码行数大于1),f=4,CodeClassify中第5行第2列程序员选择的生成代码为”feed_dict={}”,”feed_dict={}”为多行代码自动生成,所以执行Step4.10;
Step4.10、将第u个代码来源的多行代码自动生成次数加1,MultiLineNum[0]++,执行Step4.11;
Step4.11、u++,u=1,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=4,u=1,v=5,获取CodeClassify中第5行第6列中的代码条数6,CodeListSize[1]=CodeListSize[1]+1,将CodeClassify中第5行第6列的代码数据存入到CodeSize[1]中,CodeSize[1]=CodeSize[1]+'feed_dict{}',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=4,u=1,CodeClassify中第5行第3列代码来源信息为”aiXcoder”,
CodeMarked[1]='kite',”aiXcoder”!=”kite”,所以执行Step4.11;
Step4.11、u++,u=2,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.4;
Step4.4、获取CodeClassify中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify中第f+1行第v+1列的代码数据存入到CodeSize[u]中,f=4,u=2,v=6,获取CodeClassify中第5行第7列中的代码条数8,CodeListSize[2]=CodeListSize[2]+1,将CodeClassify中第5行第7列的代码数据存入到CodeSize[2]中,CodeSize[2]=CodeSize[2]+'feed_dict{}',执行Step4.5;
Step4.5、判断CodeClassify中第f+1行第3列代码来源信息是否等于CodeMarked[u],f=4,u=1,CodeClassify中第5行第3列代码来源信息为”aiXcoder”,
CodeMarked[1]='IDEA',”aiXcoder”!=”IDEA”,所以执行Step4.11;
Step4.11、u++,u=3,执行Step4.3;
Step4.3、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3!<3,所以执行Step4.12;
Step4.12、f++,f=5,u=0,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify的行数,5!<5,执行Step4.13;
Step4.13、判断u是否小于代码来源特征标记CodeMarked的个数,u=0,CodeMarked个数为3,0<3,所以执行Step4.14;
Step4.14、使用SelectNum[u]计算正确推荐项平均完成键数,并更新SelectNum[u]中的值,其中SelectNum[u]=SelectNum[u]/CorretCodeNum[u];使用CodeListSize[u]计算平均推荐列表长度,并更新CodelistSize[u]中的值,其中CodelistSize[u]=CodelistSize[u]/GenerateCount;根据CodeSize[u]实际占用空间大小重新赋值CodeSize[u](即将CodeSize[u]重新赋值,当u=0时,即将表4中第5列数据所占空间大小赋值给CodeSize[0]);u=0,GenerateCount=5,
SelectNum[0]=SelectNum[0]/CorretCodeNum[0]=5/5=1,
CodelistSize[0]=CodelistSize[0]/GenerateCount,执行Step4.15;
Step4.15、u++,u=1,执行Step4.13;
Step4.13、判断u是否小于代码来源特征标记CodeMarked的个数,u=1,CodeMarked个数为3,1<3,所以执行Step4.14;
Step4.14、使用SelectNum[u]计算正确推荐项平均完成键数,并更新SelectNum[u]中的值,其中SelectNum[u]=SelectNum[u]/CorretCodeNum[u];使用CodeListSize[u]计算平均推荐列表长度,并更新CodelistSize[u]中的值,其中CodelistSize[u]=CodelistSize[u]/GenerateCount;根据CodeSize[u]实际占用空间大小重新赋值CodeSize[u];u=1,GenerateCount=5,
SelectNum[1]=SelectNum[1]/CorretCodeNum[1],
CodelistSize[1]=CodelistSize[1]/GenerateCount,执行Step4.15;
Step4.15、u++,u=2,执行Step4.13;
Step4.13、判断u是否小于代码来源特征标记CodeMarked的个数,u=2,CodeMarked个数为3,2<3,所以执行Step4.14;
Step4.14、使用SelectNum[u]计算正确推荐项平均完成键数,并更新SelectNum[u]中的值,其中SelectNum[u]=SelectNum[u]/CorretCodeNum[u];使用CodeListSize[u]计算平均推荐列表长度,并更新CodelistSize[u]中的值,其中CodelistSize[u]=CodelistSize[u]/GenerateCount;根据CodeSize[u]实际占用空间大小重新赋值CodeSize[u];u=2,GenerateCount=5,SelectNum[2]=SelectNum[2]/CorretCodeNum[2],
CodelistSize[2]=CodelistSize[2]/GenerateCount,执行Step4.15;
Step4.15、u++,u=3,执行Step4.13;
Step4.13、判断u是否小于代码来源特征标记CodeMarked的个数,u=3,CodeMarked个数为3,3!<3,结束。
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

Claims (4)

1.一种IDE环境下代码自动生成工具分析方法,其特征在于:所述方法的具体步骤如下:
Step1、程序员行为数据获取:通过监测IDE环境下程序员的按键操作以得到程序员行为数据;其中程序员行为数据包括程序员输入按键,程序员选择生成代码行为标记;
Step2、自动生成代码数据获取:根据程序员行为数据判断是否触发代码自动生成,获取程序员选择的生成代码、代码来源、选择生成代码所用键数;
Step3、行为与代码自动生成数据预处理:针对步骤Step2获取的数据进行遍历,将不同代码自动生成工具生成的代码进行分类,将预处理结果存入到生成代码分类结果矩阵中;
Step4、代码自动生成过程分析:针对多次Step2、Step3获取到的生成代码分类结果矩阵进行分析,统计不同工具在代码自动生成过程中的相应表现,相应表现包括代码自动生成工具正确推荐项平均完成键数、平均推荐列表长度、正确推荐次数、生成总代码占用空间、单行代码自动生成次数、多行代码自动生成次数;
所述Step1具体如下:
Step1.1、初始化Project为当前项目,Editor为当前编辑器,键盘按键KeyStrokes为空,程序员输入按键ProgrammerInput为空,程序员选择生成代码行为标记SelectAction为False,执行Step1.2;
Step1.2、判断当前项目和编辑器是否不等于null,如果是则执行Step1.3,否则结束;
Step1.3、初始化IDE环境中用于编辑器事件处理的Execute方法,执行Step1.4;
Step1.4、判断通过Execute获取的当前按键值是否为null:如果是则执行Step2,否则执行Step1.5;
Step1.5、将获取到的当前按键值赋值给KeyStrokes,执行Step1.6;
Step1.6、判断KeyStrokes是否包含代码自动生成选择按键,如果是则执行Step1.7,否则执行Step1.8;其中代码自动生成选择按键为Enter、Tab;
Step1.7、将程序员选择生成代码行为标记SelectAction置为True,执行Step1.4;
Step1.8、将程序员输入按键ProgrammerInput赋值为KeyStorkes,执行Step1.4。
2.根据权利要求1所述的IDE环境下代码自动生成工具分析方法,其特征在于:所述Step2具体如下:
Step2.1、初始化:生成代码列表GeneratedCodeList[]=null,触发代码自动生成按键Input=null,程序员选择的生成代码SelectedCode=null,i=0,代码来源CodeFrom[]=null,生成代码Code[]=null,选择生成代码所用键数SelectCount=-1,执行Step2.2;
Step2.2、判断Step1中的程序员输入按键ProgrammerInput是否为非空:如果是则执行Step2.3,否则结束;
Step2.3、获取当前代码推荐列表中的所有生成代码列表赋值给GeneratedCodeList[],执行Step2.4;
Step2.4、判断第i个生成代码列表GeneratedCodeList[i]是否为非空,如果是则执行Step2.5,否则执行Step3;
Step2.5、从第i行生成代码列表GeneratedCodeList[i]中获取代码来源数据并赋值给CodeFrom[i],获取生成代码并赋值给Code[i],执行Step2.6;
Step2.6、判断SelectAction是否为True,如果是则执行Step2.8,否则执行Step2.7;
Step2.7、i++,执行Step2.4;
Step2.8、将触发代码自动生成按键Input赋值为ProgrammerInput,程序员选择的生成代码SelectedCode=Code[i],选择生成代码所用键数SelectCount=i,选择生成代码动作标记SelectAction=False,执行Step2.7。
3.根据权利要求2所述的IDE环境下代码自动生成工具分析方法,其特征在于:所述Step3具体如下:
Step3.1、初始化代码来源标记CodeMarked[]={},执行Step3.2;其中:生成代码分类结果矩阵CodeClassify[][]为空,j=0,p=0,k=0,y=p+4,代码自动生成次数GenerateCount;
Step3.2、判断k是否小于代码自动生成次数:如果是则执行Step3.3,否则执行Step4;
Step3.3、判断j是否小于或等于CodeFrom[]的个数:如果是则执行Step3.4,否则执行Step3.11;
Step3.4、判断代码来源CodeFrom[j]是否包含CodeMarked[p],如果是执行Step3.5,否则执行3.8;
Step3.5、将生成代码Code[j]来源标记为CodeMarked[p],将Code[j]存入CodeClassify[][]第k+1行第y+1列,执行Step3.6;
Step3.6、判断选择代码所用键数SelectCount是否等于j,如果是则执行Step3.7,否则执行Step3.8;
Step3.7、将CodeMarked[p]存入CodeCalssify[][]第k行第3列,执行Step3.8;
Step3.8、p++,执行Step3.9;
Step3.9、判断p是否小于CodeMarked[]中代码来源标记个数,如果是则执行Step3.4,否则执行Step3.10;
Step3.10、j++,p=0,执行Setp3.3;
Step3.11、Step2中触发代码自动生成按键Input存入CodeClassify[][]第k+1行第1列,程序员选择的生成代码SelectedCode存入CodeClassify[][]第k+1行第2列,选择生成代码所用键数SelectCount存入CodeClassify[][]第k+1行第4列,执行Step3.12;
Step3.12、k++,执行Step3.2。
4.根据权利要求3所述的IDE环境下代码自动生成工具分析方法,其特征在于:所述Step4具体如下:
Step4.1、初始化正确推荐项平均完成键数数组SelectNum[]=null,平均推荐列表长度数组CodeListSize[]=null,正确推荐次数数组CorretCodeNum[]=null,生成总代码占用空间数组CodeSize[]=null,单行代码自动生成次数数组SinglelLineNum[]=null,多行代码自动生成次数数组MultiLineNum[]=null,初始化f=0,u=0,v=u+4,执行Step4.2;
Step4.2、判断f是否小于矩阵CodeClassify[][]的行数,如果是则执行Step4.3,否则执行Step4.13;
Step4.3、判断u是否小于代码来源标记CodeMarked[]的个数,如果是则执行Step4.4,否则执行Step4.12;
Step4.4、获取CodeClassify[][]中第f+1行第v+1列中的代码条数,并累加到CodeListSize[u]中,将CodeClassify[][]中第f+1行第v+1列的代码数据存入到CodeSize[u]中,执行Step4.5;
Step4.5、判断CodeClassify[][]中第f+1行第3列代码来源信息是否等于CodeMarked[u],如果是则执行Step4.6,否则执行Step4.11;
Step4.6、CorretCodeNum[u]++,获取CodeClassify中第f+1行第4列选择生成代码所用键数,并且累计加入SelectNum[u]中,执行Step4.7;
Step4.7、判断CodeClassify[][]中第f+1行第2列程序员选择的生成代码是否为单行代码:如果是则执行Step4.8,否则执行Step4.9;其中,单行代码指生成的代码为整行代码;
Step4.8、将第u个代码来源的单行代码自动生成次数加1,SingleLineNum[u]++,执行Step4.11;
Step4.9、判断CodeClassify[][]中第f+1行第2列程序员选择的生成代码是否为多行代码,如果是则执行Step4.10,否则执行Step4.11;其中,多行代码指生成的代码行数大于1;
Step4.10、将第u个代码来源的多行代码自动生成次数加1,MultiLineNum[u]++,执行Step4.11;
Step4.11、u++,执行Step4.3;
Step4.12、f++,u=0,执行Step4.2;
Step4.13、判断u是否小于代码来源标记CodeMarked[]的个数,如果是则执行Step4.14,否则结束;
Step4.14、使用SelectNum[u]计算正确推荐项平均完成键数,并更新SelectNum[u]中的值;其中SelectNum[u]=SelectNum[u]/CorretCodeNum[u];使用CodeListSize[u]计算平均推荐列表长度,并更新CodelistSize[u]中的值;其中CodelistSize[u]=CodelistSize[u]/GenerateCount;根据CodeSize[u]实际占用空间大小重新赋值CodeSize[u],执行Step4.15;
Step4.15、u++,执行Step4.13。
CN201910588474.5A 2019-07-02 2019-07-02 一种ide环境下代码自动生成工具分析方法 Active CN110347570B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910588474.5A CN110347570B (zh) 2019-07-02 2019-07-02 一种ide环境下代码自动生成工具分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910588474.5A CN110347570B (zh) 2019-07-02 2019-07-02 一种ide环境下代码自动生成工具分析方法

Publications (2)

Publication Number Publication Date
CN110347570A CN110347570A (zh) 2019-10-18
CN110347570B true CN110347570B (zh) 2021-08-10

Family

ID=68177970

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910588474.5A Active CN110347570B (zh) 2019-07-02 2019-07-02 一种ide环境下代码自动生成工具分析方法

Country Status (1)

Country Link
CN (1) CN110347570B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928930B (zh) * 2020-02-10 2020-06-02 北京东方通科技股份有限公司 一种软件开发行为监控系统
US11132181B1 (en) 2020-07-30 2021-09-28 International Business Machines Corporation Computer enhanced and automatic computer-generated integrated development environment reconfiguration

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9275232B2 (en) * 2014-05-13 2016-03-01 Wipro Limited Systems and methods for evaluating a source code scanner
CN105683924A (zh) * 2013-06-06 2016-06-15 微软技术许可有限责任公司 通过从在本机模式中执行转变为在经解释的模式中执行来调试本机代码
CN109101417A (zh) * 2018-07-09 2018-12-28 无锡天脉聚源传媒科技有限公司 一种自动化软件测试机器人及其实现方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8839218B2 (en) * 2007-06-04 2014-09-16 International Business Machines Corporation Diagnosing alias violations in memory access commands in source code
CN102214099B (zh) * 2011-06-16 2013-07-03 浙江大学 用于autosar的rte代码自动生成方法
US20140372988A1 (en) * 2013-06-14 2014-12-18 Microsoft Corporation Using a Static Analysis for Configuring a Follow-On Dynamic Analysis for the Evaluation of Program Code
CN105653245A (zh) * 2014-11-13 2016-06-08 朗新科技股份有限公司 代码自动生成系统、装置及方法
US10915430B2 (en) * 2017-07-17 2021-02-09 Red Hat Israel, Ltd. Source code test consolidation
CN109445771B (zh) * 2018-10-25 2021-06-15 北京和普威视科技股份有限公司 一种cs架构下网络层模块代码自动生成工具及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105683924A (zh) * 2013-06-06 2016-06-15 微软技术许可有限责任公司 通过从在本机模式中执行转变为在经解释的模式中执行来调试本机代码
US9275232B2 (en) * 2014-05-13 2016-03-01 Wipro Limited Systems and methods for evaluating a source code scanner
CN109101417A (zh) * 2018-07-09 2018-12-28 无锡天脉聚源传媒科技有限公司 一种自动化软件测试机器人及其实现方法

Also Published As

Publication number Publication date
CN110347570A (zh) 2019-10-18

Similar Documents

Publication Publication Date Title
CN110347570B (zh) 一种ide环境下代码自动生成工具分析方法
CN105929690B (zh) 一种基于分解多目标进化算法的柔性车间鲁棒调度方法
CN110162972B (zh) 一种基于语句联合编码深度神经网络的uaf漏洞检测方法
CN111860981B (zh) 一种基于lstm深度学习的企业国民行业类别预测方法及系统
CN110096503B (zh) 一种白车身三坐标测点数据的分析方法及系统
CN111045670B (zh) 一种二进制代码与源代码间复用关系的识别方法与装置
KR102409101B1 (ko) 결측값 대체 시스템 및 결측값 대체 방법
CN111858358A (zh) 一种面向二进制代码的导向型模糊测试方法
CN106919576A (zh) 利用二级类目下的关键词库搜索应用程序的方法及装置
CN109633748B (zh) 一种基于改进遗传算法的地震属性优选方法
CN110543869A (zh) 滚珠丝杠寿命预测方法、装置、计算机设备及存储介质
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
CN112199376B (zh) 一种基于聚类分析的标准知识库管理方法及系统
CN111105041B (zh) 一种用于智慧数据碰撞的机器学习方法及装置
Shaochuan Bayesian multiple changepoint detection for stochastic models in continuous time
CN115186776B (zh) 一种红宝石产地分类的方法、装置及存储介质
CN109639283B (zh) 基于决策树的工件编码方法
CN115579060A (zh) 基因位点检测方法、装置、设备及介质
CN113505283B (zh) 一种测试数据的筛选方法及系统
CN115829925A (zh) 外观缺陷检测方法、装置、计算机设备及存储介质
US20090175520A1 (en) Method and apparatus for matching of bracketed patterns in test strings
Cebeci et al. Comparison of Chi-square based algorithms for discretization of continuous chicken egg quality traits
CN115221045A (zh) 一种基于多任务多视角学习的多目标软件缺陷预测方法
CN107783942A (zh) 一种异常行为检测方法及装置
CN111898807A (zh) 一种基于全基因组选择烟叶产量预测方法及应用

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant