CN114365095A - 用于评估软件开发者的代码贡献的系统和方法 - Google Patents

用于评估软件开发者的代码贡献的系统和方法 Download PDF

Info

Publication number
CN114365095A
CN114365095A CN201980097344.XA CN201980097344A CN114365095A CN 114365095 A CN114365095 A CN 114365095A CN 201980097344 A CN201980097344 A CN 201980097344A CN 114365095 A CN114365095 A CN 114365095A
Authority
CN
China
Prior art keywords
code
software developer
developer
structural
score
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.)
Pending
Application number
CN201980097344.XA
Other languages
English (en)
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.)
Mairui Technology Beijing Co ltd
Original Assignee
Mairui Technology Beijing Co ltd
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 Mairui Technology Beijing Co ltd filed Critical Mairui Technology Beijing Co ltd
Publication of CN114365095A publication Critical patent/CN114365095A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/101Collaborative creation, e.g. joint development of products or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Business, Economics & Management (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • Quality & Reliability (AREA)
  • Strategic Management (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Operations Research (AREA)
  • Data Mining & Analysis (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Stored Programmes (AREA)

Abstract

提供了一种用于评估不同软件开发者对软件项目的贡献的工具,该工具考虑了每个开发者的贡献的结构价值和非结构价值二者。在项目期间的不同时间处解析项目的源代码以生成表示代码的抽象语法树(AST)。该工具可以对每个开发者的代码贡献执行结构价值分析和非结构价值分析二者。对每个开发者的结构价值分析可以包括对从AST生成的调用‑提交图表进行调用‑提交分析以分析可归因于每个开发者的函数调用和提交。对每个软件开发者的非结构价值分析可以包括基于可归因于每个开发者的提交对项目的影响来对这样的提交进行识别和分类。该工具然后可以基于对每个开发者的结构度量和非结构度量来针对每个开发者计算开发价值分数。

Description

用于评估软件开发者的代码贡献的系统和方法
技术领域
本公开内容涉及微控制器,并且更具体地,涉及用于评估不同软件开发者对软件项目的相应代码贡献的系统和方法。
背景技术
在典型的软件开发环境中,开发者将代码贡献给软件项目存储库。每个开发者的代码贡献通常通过简单的度量来表征,所述度量例如可归因于每个开发者的提交数量(NOC)或代码行(LOC)数。例如,GitHub使用NOC对软件项目的开发者进行排序。作为另一示例,Expertise Browser——用于识别开发者专业知识的经典工具——使用更改的LOC的数量作为每个开发者的贡献的指标。这样的度量衡量每个开发者的代码贡献量,而不是代码贡献的价值。例如,位于应用逻辑核心的函数通常比辅助脚本更有价值,但常规的代码贡献度量无法捕获这种区别。
在许多情况下,除了常规的基于数量的度量之外,识别和比较不同开发者的贡献的价值是有用的。虽然传统的基于价值的软件工程通常聚焦于创造经济价值作为优先考虑资源分配和调度的一种方式,但在某些情况下,其他价值衡量更为相关。例如,(除了非代码贡献之外),编程教师可能想要评估各个学生对小组项目的代码贡献,尽管这样的代码贡献通常与经济回报无关。作为另一示例,工程经理可能需要对各个团队成员的相应表现执行定量衡量。另外,软件工程研究人员通常观察开发活动本身,但不一定观察其经济回报。作为又一示例,对于自由开源软件(FOSS)项目,不同开发者的贡献极大地影响了相关项目的协作、协调和领导方面。
因此,存在一个目的是提供用于分析软件开发者的代码贡献的工具,所述工具捕获代码贡献的内在价值——例如贡献代码对开发活动的影响,而不仅仅是对代码行或提交进行计数,例如以对各个开发者进行更有效的评估和/或排序并且提高对软件开发过程的理解。
发明内容
一般而言,并且在一个方面,提供了一种用于评估多个软件开发者中的每一个对软件项目的代码贡献的系统,该系统考虑每个开发者的贡献的结构价值和非结构价值二者。该系统可以包括至少一个存储器设备和与所述存储器设备通信地耦接的至少一个处理器。存储器设备可以存储包括代码集合的代码存储库,该代码集合包括由多个软件开发者中的每一个开发的代码部分,该代码部分包括多个函数。存储器设备还可以存储用于根据提交的影响对提交进行分类的定义的代码影响类别的列表。
处理器可以被配置成从代码存储库访问代码集合,并且在软件项目期间的多个不同时间处解析代码集合以生成表示代码集合或其部分的抽象语法树(AST)。处理器可以对每个软件开发者的代码贡献执行结构价值分析和非结构价值分析二者。对每个软件开发者的结构价值分析可以包括(a)从AST生成至少一个调用-提交图表,(b)对至少一个调用-提交图表执行调用-提交分析以分析可归因于每个软件开发者的函数调用和提交,以及(c)至少基于调用-提交分析来计算每个软件开发者的结构价值分数。对每个软件开发者的非结构价值分析可以包括(a)分析AST以识别可归因于每个软件开发者的提交,(b)基于定义的代码影响类别的列表执行提交分类以对每个所识别的提交进行分类,以及(c)至少基于对可归因于每个软件开发者的提交的提交分类来计算该软件开发者的非结构代码影响分数。
处理器然后可以至少基于(a)每个软件开发者的结构价值分数和(b)每个软件开发者的非结构代码影响分数来针对每个软件开发者计算开发价值分数。处理器可以例如通过生成曲线图、图表或其他可显示的视觉资料来显示针对每个软件开发者计算的开发价值分数的表示。
本发明的一个基本方面是提供基于以下的组合来自动量化开发者对项目的代码贡献的价值的系统和方法:(a)每个开发者的代码贡献的结构价值,例如每个开发者的代码的结构影响,以及(b)每个开发者的代码贡献的非结构价值,例如每个开发者的代码对软件项目开发的影响。计算并且组合这两个分量以针对每个开发者计算整体开发价值。发明人已经发现,根据本发明对软件开发者的评估提供了比通过人员评定或通过简单的常规计数方法例如仅对代码行或提交进行计数而获得的结果更好且更有用的结果。
在另一方面,提供了一种用于评估多个软件开发者中的每一个的代码贡献的方法,该方法考虑每个开发者的贡献的结构价值和非结构价值二者。代码存储库可以存储代码集合,该代码集合包括由多个软件开发者中的每一个开发的代码部分,该代码部分包括多个函数。还可以存储用于根据提交的影响对提交进行分类的定义的代码影响类别的列表。可以从代码存储库访问代码集合,并且在软件项目期间的多个不同时间处解析代码集合以生成表示代码集合或其部分的抽象语法树(AST)。
可以基于AST来执行对每个软件开发者的代码贡献的结构价值分析和非结构价值分析二者。对每个软件开发者的结构价值分析可以包括:从AST生成至少一个调用-提交图表,对至少一个调用-提交图表执行调用-提交分析以分析可归因于每个软件开发者的函数调用和提交,以及至少基于调用-提交分析来计算每个软件开发者的结构价值分数。对每个软件开发者的非结构价值分析可以包括:分析AST以识别可归因于每个软件开发者的提交,基于定义的代码影响类别的列表执行提交分类以对每个所识别的提交进行分类,以及至少基于对可归因于每个软件开发者的提交的提交分类来计算该软件开发者的非结构代码影响分数。可以基于多个开发价值分数输入针对每个软件开发者计算开发价值分数,多个开发价值分数输入包括(a)每个软件开发者的结构价值分数和(b)每个软件开发者的非结构代码影响分数。然后可以显示或以其他方式输出针对每个软件开发者计算的开发价值分数的表示。
附图说明
通过以下结合附图的详细描述将容易地理解本发明,其中,相似的附图标记表示相似的结构元素。
图1是根据本发明的实施方式的用于评估软件开发者的代码贡献的示例系统的图,该系统考虑每个开发者的贡献的结构价值和非结构价值二者;
图2示出了根据本发明的一个示例实施方式的由图1所示的系统执行的示例方法,该方法用于评估多个软件开发者中的每一个对软件项目的代码贡献。
图3表示具有两个代码提交的示例文件;
图4和图5表示针对图3所示的示例文件中的两个提交的抽象语法树(AST);
图6-1和图6-2表示从图4和图5中所示的AST生成的示例调用-提交图表;
图7示出了根据本发明的一个实施方式的示例可显示视图,其包括指示软件项目随时间的开发进度的示例开发历史图;
图8示出了根据本发明的一个实施方式的指示每个相应开发者的技能集的开发者技能集图形的示例可显示视图;
图9示出了根据本发明的一个实施方式的针对所选开发者的、指示开发价值分数及其分量的开发价值分数图形的示例可显示视图;以及
图10A至图10C示出了根据本发明的一个实施方式的示例人力分配图形的示例可显示视图,其提供了与软件项目相关联的开发者与技术类别(或任务)之间的关系的视觉指示。
具体实施方式
下面详细描述本发明的具体实施方式。在以下对本发明的实施方式的描述中,描述具体细节以提供对本发明的透彻理解。然而,对于本领域普通技术人员来说明显的是,可以在没有这些具体细节的情况下实践本发明。在其他情况下,没有详细描述众所周知的特征以避免不必要地使本说明书复杂化。
存在一个目的是提供用于分析软件开发者的代码贡献的工具,所述工具捕获代码贡献的内在价值——例如贡献代码对开发活动的影响,而不仅仅是对代码行或提交进行计数,例如以对各个开发者进行更有效的评估和/或排序并且提高对软件开发过程的理解。因此,本发明提供了基于以下的组合来评估软件开发者的代码贡献的系统和方法:(a)每个开发者的代码贡献的结构价值,例如每个开发者的代码的结构影响,和(b)每个开发者的代码贡献的非结构价值,例如每个开发者的代码对软件项目开发的影响。发明人已经发现,对软件开发者的这样的评估提供了与使用常规评估技术而获得的结果相比更好且更有用的结果。
在一个方面,提供了一种用于评估多个软件开发者中的每一个对软件项目的代码贡献的系统,该系统考虑每个开发者的贡献的结构价值和非结构价值。例如,系统可以针对每个开发者计算开发价值分数,该开发价值分数结合了(a)表示相应开发者的代码贡献的结构价值的至少一个结构价值分数和(b)表示相应开发者的代码贡献的非结构价值的至少一个非结构价值分数。
该系统可以包括存储器设备和连接至存储器设备的处理器。存储器设备可以存储包括软件项目的源代码集合的代码存储库,源代码集合包括由不同开发者中的每一个开发的代码部分。归因于每个开发者的代码部分可以包括称为函数的各种代码段。归因于每个开发者的每个函数可以与归因于同一开发者或其他开发者的其他函数具有依赖关系或其他关系。
在一些实施方式中,存储器设备还可以存储用于评估每个开发者的代码贡献的算法、规则和/或其他数据,如本文所公开的。例如,在一些实施方式中,存储器设备可以存储用于根据归因于每个开发者的提交的影响对这样的提交进行分类和评分的定义的代码影响类别的列表,如下文所说明的。
作为另一示例,存储器设备可以存储规则和/或权重,规则和/或权重用于例如通过评估可归因于每个开发者的函数和提交之间的关系来评估可归因于每个开发者的代码的结构价值,如下面讨论的。
作为另一示例,存储器设备可以存储用于评估可归因于每个开发者的代码的质量的一组代码质量规则。
作为另一示例,存储器设备可以存储用于针对每个开发者计算开发价值分数的算法和/或一组权重,该组权重包括例如:针对表示相应开发者的代码贡献的结构价值的每个结构价值分数的权重和针对表示相应开发者的代码贡献的非结构价值的每个非结构价值分数的权重。
在一些实施方式中,系统可以存储和利用上面列出的各种类型的数据中的每一种。在其他实施方式中,系统可以仅存储和利用上面列出的数据中的一些数据。例如,系统可以存储和利用用于对可归因于每个开发者的提交进行分类的定义的代码影响类别的列表以及用于评估可归因于每个开发者的代码的质量的一组代码质量规则,但可以不存储或利用用于针对每个开发者计算开发价值分数的权重。
该系统可以包括源代码解析器,该源代码解析器被配置成从代码存储库访问软件项目源代码,并且在软件项目期间的多个不同时间处将源代码转换成表示代码或其部分的一组抽象语法树(AST)。每个AST包括表示相应代码的逻辑的树结构。解析器可以包括或利用本领域已知的用于从源代码生成AST的任何合适的工具和技术。典型地,不同的编程语言例如C++、Javascript等具有不同的AST表达。因此,在一些实施方式中,解析器被配置成生成表示多个特定于语言的AST的抽象版本的通用的、独立于语言的AST。
该系统还可以包括(a)用于对每个开发者的代码贡献的结构方面进行分析和评分的结构价值分析工具以及(b)用于对每个开发者的代码贡献的非结构方面进行分析和评分的非结构价值分析工具二者。在一些实施方式中,结构价值分析工具和非结构价值分析工具二者均可以基于由解析器生成的AST来执行其相应的分析和评分。
在一些实施方式中,结构价值分析工具可以包括(a)工作负荷计算器以及(b)结构价值评分单元中的一个或两个,该工作负荷计算器被配置成基于归因于每个开发者的代码来计算表示归因于该开发者的工作量或劳动量的开发等效分数,该结构价值评分单元被配置成针对每个开发者计算结构价值分数。
工作负荷计算器可以被配置成衡量由AST反映的编码的劳动。在一个实施方式中,工作负荷计算器被配置成对由可归因于每个开发者的代码表达或执行的逻辑操作的数量进行计数,并且基于逻辑操作的数量针对相应开发者计算开发等效分数。由代码表达的逻辑操作的数量表示由相应开发者开发的代码的复杂程度,并且因此表示该开发者的劳动量。开发等效分数总体上类似于对代码行(LOC)进行计数,但提供了对由每个开发者执行的工作量的更准确且有用的衡量。例如,LOC通常是任意的(例如,由于代码中返回的数量或其他格式类型的详细信息),并且也可能被开发者钻空子。相比之下,通过开发等效分数计算的开发等效分数可以避免LOC和其他常规工作估计技术常见的这样的问题(issue)。
结构价值评分单元可以被配置成针对每个开发者计算结构价值分数。结构价值评分单元可以被配置成从相关的AST针对每个开发者生成“调用-提交”图表,对这样的调用-提交图表执行调用-提交分析以分析可归因于每个开发者的函数调用和提交,并且至少基于调用-提交分析来针对每个软件开发者计算结构价值分数。
在一个实施方式中,结构价值评分单元包括图表构建器,该图表构建器被配置成从所选AST生成调用-提交图表。调用-提交图表可以包括两种类型的节点:(1)表示函数(代码段)的函数节点和(2)表示代码提交的提交节点。代码中的每个提交可能引入新函数或者对现有函数进行更改。调用-提交图表还可以定义各种节点之间的两种类型的节点关系:(1)函数节点(代码段)之间的函数调用关系,其中,一个函数调用另一个函数(或多个其他函数)以实现某些功能,(2)提交节点与函数节点之间的提交更改关系,表示更改了现有函数的提交;每个这样的关系可以由从相应提交节点到由相应提交更改的函数的函数节点的边缘来定义。
结构价值评分单元还可以包括结构价值计算器,该结构价值计算器被配置成基于由图表构建器生成的调用-提交图表中的节点和/或节点关系来针对每个开发者计算结构价值分数。在一个实施方式中,结构价值计算器包括开发排序算法,该开发排序算法被配置成以类似于已知页面排序算法的方式计算结构价值分数,结构价值分数在本文中也称为“开发排序”分数。该算法假设访问者访问了调用-提交图表,并且将规则应用于访问者行为。该算法计算访问者到达每个节点(包括函数节点和提交节点)处的概率,其表示该节点的重要性。因此,该算法将由所确定的到达每个节点处的概率定义的或者基于所确定的到达每个节点处的概率的结构价值分配给每个节点。然后,该算法将图表中归因于每个开发者的所有节点的结构价值相加,从而针对相应开发者计算结构价值分数。在另一个实施方式中,该算法仅对归因于每个开发者的提交节点的结构价值求和,以针对相应开发者计算结构价值分数。
如上面描述的,除了上面讨论的示例结构价值分析工具之外,该系统还包括用于对每个开发者的代码贡献的非结构方面进行分析和评分的非结构价值分析工具。在一些实施方式中,非结构价值分析工具可以包括(a)影响编码分析单元、(b)代码质量分析器和/或(c)项目质量分析器中的任何一个、两个或全部三个,该影响编码分析单元被配置成基于开发者的提交的类型对归因于每个开发者的提交进行分类和评分,该代码质量分析器被配置成计算表示归因于每个开发者的代码的质量的代码质量分数,该项目质量分析器被配置成基于一组软件工程度量来针对每个开发者计算项目质量分数。
影响编码分析单元被配置成对代码中的提交进行分类和评分。代码中的每个提交(包括创建新函数的提交和更改现有函数的提交)会更改代码库,其被转换成AST。每个代码提交产生两个AST版本,一个是提交之前的AST版本,一个是提交之后的AST版本。影响编码分析单元可以包括提交差异生成器,该提交差异生成器被配置成比较AST版本以识别代表代码提交的差异。提交差异生成器可以被配置成识别可归因于每个开发者的代码提交。
影响编码分析单元还可以包括提交分类器,该提交分类器被配置成基于定义的代码影响类别的列表来对归因于每个开发者的每个提交进行分类。代码影响类别可以定义通常对软件项目具有不同水平的影响的代码类别。例如,代码影响类别可以包括以下类别:(a)特征提交,(b)改进提交,(c)错误修复提交以及(d)维护提交。
影响编码分析单元还可以包括影响编码计算器,该影响编码计算器被配置成基于归因于每个开发者的提交的分类类别来针对该开发者计算影响编码分数。影响编码计算器可以对每个提交类别应用加权分数并且将归因于每个开发者的所有提交的加权分数相加,以针对每个开发者计算影响编码分数。每个提交类别的加权分数可以表示该类提交对软件项目的典型影响水平。
代码质量分析器可以被配置成计算代码质量分数,该代码质量分数表示归因于每个开发者的代码的质量。代码质量分析单元可以基于向归因于开发者的代码应用的一组定义的代码质量规则来针对每个相应开发者计算代码质量分数。代码质量规则可以包括定义代码的质量的任何规则。一个示例代码质量规则检查是否在代码中实际使用在代码中定义的每个变量。另一示例代码质量规则检查打开文件(例如,以读取某些数据)的每段代码是否具有随后关闭文件例如以释放处理资源的对应代码段。在一个实施方式中,代码质量分析器被配置成对每个开发者违反代码质量规则的次数进行识别和计数,并且基于违反次数对每个开发者评分。
项目质量分析器可以被配置成基于一组定义的软件工程度量来针对每个开发者计算项目质量分数。例如,项目质量分析器可以确定和量化归因于每个开发者的提交影响每个软件工程度量的程度,并且基于他们对整组软件工程度量的影响来针对每个开发者计算分数。在一些实施方式中,项目质量分析器可以(通过将软件工程度量应用于源代码)分析源代码本身,或者可以分析表示源代码的AST,或者可以分析源代码和AST二者,以确定每个开发者的代码贡献对每个相应软件工程度量的影响。该组定义的软件工程度量可以包括用于分析归因于每个开发者的代码的任何可量化度量。
示例软件工程度量可以包括:
■模块性:表示将代码划分成内聚的、分离的分量有多容易。该度量被计算为代码的调用-提交图表的最佳划分的模块性分数。
■文档覆盖率:指示具有格式化注释的函数的百分比。
■速度:指示开发团队在上一定义的时间段内(例如,上个月)进展得有多快。该度量被计算为上一定义的时间段(例如,上个月)内开发价值曲线的斜率。
■测试覆盖率:指示由测试用例覆盖的函数的百分比。
■稳健性:指示开发价值低于被分析的开发者的平均价值的开发者的百分比。
■干度:指示不重复的代码的百分比。
该系统还可以包括开发价值计算单元,该开发价值计算单元被配置成基于相应开发者的(a)由结构价值分析工具输出的分数和(b)由非结构价值分析工具输出的分数来针对每个开发者计算开发价值分数。例如,在一个实施方式中,开发价值计算单元可以基于以下开发价值分数输入的任何组合来针对每个开发者计算开发价值分数:(a)由工作负荷计算器计算的开发者的开发等效分数(结构价值输入),(b)由结构价值评分单元计算的结构价值分数(结构价值输入),(c)由影响编码分析单元产生的开发者的影响编码分数(非结构价值输入),以及(d)由代码质量分析单元计算的开发者的代码质量分数。
在一些实施方式中,该系统还包括开发价值加权单元,该开发价值加权单元被配置成对用于针对每个相应开发者计算开发价值分数的各种开发价值分数输入的权重进行评分和/或动态调整。开发价值加权单元可以包括权重学习单元,该权重学习单元被配置成实现排序学习算法,以例如基于指示代码中的提交的比较或排序的用户输入来随时间动态地确定和调整不同开发价值分数输入的权重。
由于结构分析和非结构分析捕获了开发价值的两个基本方面,因此开发价值加权单元将两者组合以计算总体开发价值。假设提交具有结构价值d和非结构价值t。在一些实施方式中,目标是找到对两者进行组合的函数
Figure BDA0003401514010000091
d可以表示每个结构分数或结构分数(例如,开发等效分数和/或结构价值分数)的组合,而t可以表示每个非结构分数或非结构分数(例如,代码影响分数、代码质量分数和/或项目质量分数)的组合。
如果可靠的基础事实——即,具有已知整体开发价值的大量提交——可用,则任务可以作为优化问题提出:从数据集确定以下中的权重向量w:
Figure BDA0003401514010000101
使得每个提交的真实值与
Figure BDA0003401514010000102
之间的平均误差最小化。
不幸的是,开发者发现很难以自由形式直接对代码价值进行评分,例如,向一个提交赋予0.17并且向另一个提交赋予0.06,因此难以以这种形式获得可靠的基础事实。因此,在一个实施方式中,开发者被要求比较同一开发者的提交对并且识别每一对中的哪一个更有价值,并且这样的人工输入用于权重学习。这种技术有助于消除个人兴趣和人际关系的影响。基于此“成对基础事实”,可以使用排序学习(L2R)算法来确定
Figure BDA0003401514010000103
示例算法使用d和t作为排序SVM的输入特征。训练后,将SVM的权重向量视为
Figure BDA0003401514010000104
中的w。这种方法允许将每个提交的结构价值分数和非结构价值分数组合,从而针对每个开发者确定整体开发价值分数。
在针对每个开发者计算开发价值分数之后,系统可以例如通过生成曲线图、图表或用于在任何合适的显示设备上显示的其他视觉资料来显示或以其他方式输出开发价值分数的表示。
上述系统的每个部件——包括至少源代码解析器、工作负荷计算器、结构价值评分单元、调用-提交图表构建器、结构价值计算器、影响编码分析单元、提交差异生成器、提交分类器、影响编码计算器、代码质量分析单元、代码质量检查器、开发价值计算单元和开发价值加权单元——包括或可以访问用于执行相应系统部件的功能的任何合适的硬件、软件和/或固件元件。在一些实施方式中,系统部件中的一个、一些或全部以存储在存储器中并且可由一个或更多个处理器执行以执行相应系统部件的功能的软件来实施。
图1示出了根据本发明的一个示例实施方式的用于评估多个软件开发者中的每一个对软件项目的代码贡献的示例系统100,系统100考虑每个开发者的贡献的结构价值和非结构价值二者。示例系统100包括存储器102、开发者分析工具104和用户接口106。存储器102可以由一个或更多个数据存储设备实施,一个或更多个数据存储设备例如硬盘驱动器、RAM、ROM、EEPROM、闪存、可移除存储器设备(例如,USB驱动器)等中的任何一个或其组合。存储器102可以存储代码存储库110,该代码存储库110存储软件项目的源代码112,该源代码112包括由多个不同软件开发者开发的函数114即代码段的集合。存储器102还可以在软件项目期间的多个不同时间处存储表示源代码或其部分的一组抽象语法树(AST)120。存储器102还可以存储一组调用-提交图表122,该组调用-提交图表122包括并定义函数节点与代码提交节点之间的关系,如本文所讨论的。
存储器102还可以存储用于针对每个开发者计算结构价值分数的开发排序算法124。开发排序算法124可以被配置成计算访问者到达调用-提交图表122中的每个节点的概率,并且通过将与由相应开发者开发的代码对应的概率相加来针对每个开发者计算分数。
存储器102还可以存储用于对代码提交进行分类的代码影响类别130的列表或集合以及用于相应代码影响类别130的一组影响类别权重132,其中,权重132可以指示提交的每个类别130对软件项目的重要性或影响。
存储器102还可以存储一组代码质量规则136和软件工程度量138,用于分析由每个开发者贡献的代码的质量。最后,存储器102还可以存储开发价值权重学习算法140,该开发价值权重学习算法140被配置成动态地确定和/或调整一组权重142以将各种输入加权到每个开发者的总体开发价值分数,并且存储器102还可以存储由权重学习算法140用于调整权重142的开发价值用户输入144。开发价值用户输入144可以包括例如关于被分析的代码中的不同提交或不同类型的提交的相对价值的人工输入。
开发者分析工具104包括用于分析源项目代码112以针对每个开发者计算开发价值分数的任何合适的工具,该开发价值分数表示每个相应开发者的代码贡献的价值。开发者分析工具104被配置成访问、利用存储器102中的任何相关数据和/或算法以及在存储器102中存储任何相关数据和/或算法。在该示例实施方式中,开发者分析工具104包括源代码解析器150、工作负荷计算器152、结构价值评分单元160、影响编码分析单元170、代码质量检查器180、项目质量检查器182、开发价值加权单元190和开发价值计算单元192。结构价值评分单元160可以包括调用-提交图表构建器162以及结构价值计算器164。影响编码分析单元170可以包括提交差异生成器172、提交分类器174和影响编码计算器176。参考下面讨论的图2所示的处理流程详细描述图1中所示的开发者分析工具104中的每一个的功能操作。
用户接口106可以包括一个或更多个用户输入设备194和一个或更多个显示设备196。输入设备194可以包括被配置成允许用户与开发者分析工具104接口的任何设备,例如至少一个键盘、小键盘、鼠标、触摸板、触摸屏、基于语音的输入设备等。显示设备196可以包括用于显示由系统100生成的或与系统100有关的信息的任何设备,例如至少一个监视器、触摸屏或其他显示屏等。
图2示出了根据本发明的一个示例实施方式的用于评估多个软件开发者中的每一个对软件项目的代码贡献的示例方法200,方法200考虑每个开发者的贡献的结构价值和非结构价值二者。示例方法200可以由图1所示的示例系统100执行。因此,方法200示出了系统100的各个部件的操作关系。
首先,源代码解析器150可以从代码存储库110访问软件项目的源代码112,并且在软件项目期间的多个不同时间处将源代码转换成表示代码或其部分的一组AST 120。每个AST包括表示相应代码的逻辑的树结构。解析器150可以生成表示多种语言特定的AST格式的抽象版本的语言无关的AST。
系统可以基于生成的AST 120执行各种不同的分析。可以以任何顺序或者完全或部分地同时执行各种分析。如210所示,可以执行结构工作负荷分析以分析由相应开发者付出的工作量或劳动量。在该示例中,工作负荷计算器152可以对由可归因于每个开发者的代码表达或执行的逻辑操作的数量进行计数,并且基于所计数的逻辑操作的数量来针对开发者计算开发等效分数212。
如220所示,可以执行对可归因于每个开发者的函数(代码段)和提交的结构价值分析,以针对每个开发者计算结构价值分数。图表构建器162可以从所选AST 120生成调用-提交图表122。如上面描述的,每个调用-提交图表122可以包括两种类型的节点:(1)表示函数(代码段)的函数节点和(2)表示代码提交的提交节点,并且可以定义两种类型的节点关系:(1)函数节点之间的函数调用关系,以及(2)提交节点与函数节点之间的提交更改关系。
图中提供了示例来说明上面讨论的一些概念。
首先,图3表示具有两个提交310和320的示例文件“patent.py”。在第一提交中,patent.py具有四个函数:“fibonacci”、“bubble_sort”、“reverse_array”和“main”。在第二提交中,“fibonacci”和“bubble_sort”二者均被重命名并修改;“reverse_array”被完全移除;“main”被修改,使得其不再调用“reverse_array”。
接下来,图4和图5分别表示图3所示的patent.py中的两个示例提交310和320的AST。在AST中,“term(项)”指定节点的类型;“lhs”/“rhs”是指左侧/右侧。
最后,图6-1和图6-2表示从图4和图5中所示的AST生成的示例调用-提交图表500。调用-提交图表500由“提交”、作为函数的“节点”和节点之间的“链接”构成。每个提交可以由它的“id”例如“ff6f447c7d8a0a97d0ea472b4ca6b3f5edc59d93”表示。每个节点可以由函数路径、名称和位置例如“patent.py::fibonacci((n)::<GLOBAL>::3::11::186”表示;它还包含修改函数的所有提交的“history(历史)”。
返回到图1进行参考,结构价值计算器164可以基于调用-提交图表112中的节点和/或节点关系来针对每个开发者计算结构价值分数222。例如,结构价值计算器164可以执行开发排序算法124来以类似于已知页面排序算法的方式计算结构价值分数222。一般而言,算法124假设访问者访问调用-提交图表,并且将规则应用于访问者行为。该算法计算访问者到达每个节点(包括函数节点和提交节点)的概率,所述概率表示该节点的重要性。因此,该算法向每个节点分配通过或基于所确定的到达该节点的概率定义的结构价值。然后,该算法将图表中归因于每个开发者的所有节点的结构价值相加,从而针对相应开发者计算结构价值分数222。
如下说明开发排序算法124的具体示例。在大多数命令式编程语言中,函数(过程、方法)是程序结构的基本单元。函数的开发价值不仅基于创建函数所花费的劳动,还基于当其他代码调用该函数时节省的劳动。开发价值的结构分量(结构价值)由示例开发排序算法捕获,示例开发排序算法在本文称为“DevRank算法”,其是本领域已知的原始PageRank(页面排序)算法的扩展。
PageRank是Google Web Search(谷歌网页搜索)的基础,并且可以在各个领域中找到应用。该算法在网页的有向图上运行。它假设网络冲浪者具有假定的访问行为,并且迭代计算冲浪者访问每个页面的概率。计算出的概率的含义取决于冲浪者的行为。在原始的PageRank中,冲浪者从事两个随机动作:(1)到达页面后,冲浪者以概率α随机选择该页面上的链接并访问链接页面;(2)冲浪者以概率1-α转移至随机页面并继续。阻尼因子α是预先选择的固定概率。基于行为,所产生的概率反映了根据页面的链接结构访问页面的可能性。直观地,反映的是页面在网络上的受欢迎程度或重要性。
为了计算每个函数的结构价值,示例DevRank算法构建了代码的静态函数-调用图表。尽管程序执行从未如在PageRank中那样随机跳转到不相关的函数,但是本发明人已经发现PageRank是一种用于表征代码开发的非常方便的模型。因此,发明人将随机转移解释为导航代码的开发活动,而不是执行行为。
在DevRank算法中,假设的“冲浪者”变成了开发嗅探器,其任务是检测开发劳动。该算法假设在函数上花费的开发劳动是通过整个开发历史中产生该函数的所有更改的总LOC来显示。发明人相信,与对最新快照处的LOC进行计数相比,该技术更精确地量化了开发劳动。基于该假设,嗅探器的行为按以下方式构建:(1)到达函数后,嗅探器以概率α访问被调用函数之一,其概率与这些函数的开发劳动成比例。由于发明人认为调用函数是调用者一方节省开发劳动的一种方式,因此这种行为反映了通过对每个函数的调用进行编码而节省了多少开发劳动。(2)嗅探器以概率1-α转移至随机函数,其概率与函数的开发劳动成比例。这样的转移可以被解释为嗅探器对开发劳动的搜索。总的来说,可以看出嗅探器出现在每个函数上的所得概率反映了花费在该函数上的开发劳动,并且该函数节省了其他开发者。因此,它反映了函数的开发价值。
在计算函数的DevRank分数222之后,结构价值计算器164可以将函数的开发价值分发给提交,并且进一步分发给开发者,从而针对每个开发者计算结构价值分数222。这可以通过将函数的价值分配给更改函数的所有提交——该价值与它们更改的大小(即更改的LOC的数量)成比例——并且然后将提交的价值分配给其对应的作者来完成。以这种方式,开发者接收针对其贡献的积分(credit)。
工作负荷分析210和结构价值分析220表示对不同开发者的代码贡献的结构分析。除了这些结构分析之外,方法200可以包括以下对开发者对项目的相应贡献的非结构分析:(a)影响编码分析230,(b)代码质量分析240,以及(c)项目质量分析250。
对于影响编码分析230,影响编码分析单元170可以例如基于每个开发者的提交的类型对归因于每个开发者的提交进行分类和评分,因为不同类型的提交通常对项目具有不同水平的重要性或影响。影响编码分析单元170的提交差异生成器172可以比较表示不同时间处的代码快照的不同AST版本以识别AST版本中的差异232,从而识别可归因于每个开发者的代码提交。提交分类器174然后可以基于定义的代码影响类别130的列表例如特征提交、改进提交、错误修复提交或维护提交,来对归因于每个开发者的每个提交进行分类。
然后,影响编码计算器176可以基于归因于每个开发者的提交的分类类别来针对该开发者计算影响编码分数236。影响编码计算器可以基于提交类别将代码影响类别权重132应用于每个提交,并且将归因于每个开发者的所有提交的加权分数相加,以针对每个开发者计算影响编码分数236。每个提交类别的权重132可以表示该类型提交对软件项目的典型影响水平。
对于代码质量分析240,代码质量分析器180可以被配置成通过将一组代码质量规则136应用于归因于每个开发者的代码来计算表示归因于每个开发者的代码的质量的代码质量分数。在一个实施方式中,代码质量分析器180可以对相应开发者违反每个代码质量规则136的次数进行识别和计数,并且基于违反的总次数对开发者评分。
对于代码质量分析250,项目质量分析器182可以被配置成基于向归因于相应开发者的代码应用的一组定义的软件工程度量138来针对每个开发者计算项目质量分数252。项目质量分析器182可以将软件工程度量138直接应用于项目源代码112,而不是分析AST120。
可以基于如上面描述地计算的各种开发价值分数输入来针对每个开发者计算开发价值分数270,各种开发价值分数输入包括以下开发等效分数212(结构)、结构价值分数222(结构),影响编码分数232(非结构)、代码质量分数242(非结构)和项目质量分数252(非结构)中的一个、一些或全部。
在一些实施方式中,例如,如方法200中所示,可以在260处执行分数输入加权。例如,开发价值加权单元190可以至少基于用户输入144来执行权重学习算法140,以确定并动态地调整各种开发价值分数输入的一组权重142(例如,分数212、222、232、242和252的相应权重)。用户输入144可以包括随时间指示代码中的提交或提交类型的比较或排序的人工输入。
开发价值计算单元192然后可以基于开发价值分数输入(例如,分数212、222、232、242和252)和在260处确定的分数输入权重142来针对每个开发者计算开发价值分数270。因此,每个开发者的开发价值分数270考虑由该开发者提供的贡献的结构方面和非结构方面二者,并且因此提供了优于常规开发者分析技术的各种优势。
在针对每个开发者计算开发价值分数270之后,系统100可以例如通过生成曲线图、图表或用于在任何合适的显示设备196上显示的其他视觉资料来显示或以其他方式输出开发价值分数的表示。
图7至图10C示出了可以由系统100生成并且显示在任何合适的显示设备196上的示例图形和视图。图7示出了示例视图,其包括(a)指示软件项目随时间的开发进度的示例开发历史图表700,以及(b)指示应用于软件项目代码的六个示例软件工程度量138的测量的示例蜘蛛图(或雷达图)702。项目质量分析器182可以针对每个不同的开发者生成蜘蛛图702,其指示例如该开发者的提交对总体项目代码的影响。在一个实施方式中,项目质量分析器182允许用户针对特定开发者选择(例如,点击)蜘蛛图702中的每个软件工程度量138,并且自动显示用于改进与所选度量138有关的开发者的代码的建议。例如,用户可以点击蜘蛛图702中的“干度”度量,并且项目质量分析器182可以自动显示影响干度度量的重复或冗余代码段的实例。
图8示出了由系统100生成的开发者技能集图形800的示例视图。系统可以基于由开发者在编写代码时添加的一组定义的标签来将项目代码分类成不同的技术类别,并且基于标记有相应技术类别标签的该开发者的代码的量来确定每个开发者在每个技术类别上的技术水平。如图所示,图形800可以以任何合适的方式显示所选开发者的各种技能水平。
图9示出了由系统100生成的开发价值分数图形900的示例视图。开发价值分数图形900可以针对所选开发者显示开发价值分数270和/或其所选分量。在所示示例中,开发价值分数图形900显示了具有最高开发价值分数270以及以下分量分数的开发者:开发等效分数212、影响编码分数236和代码质量分数242。
图10A至图10C示出了由系统100生成的示例人力分配图形的示例视图。图10A示出了示例人力分配图形1000A,其提供与项目相关联的各个开发者与各种技术类别(或任务)之间的关系的视觉指示,视觉指示通过各种宽度的线指示。如图所示,每个开发者可能与一个或更多个技术类别有关,并且每个技术类别可能与一个或更多个开发者有关。在一个实施方式中,所述关系可以由每个开发者代码中的技术类别标签来确定,例如,如以上关于图8所讨论的。因此,人力分配图形1000A可以表示针对每个相应开发者在开发者技能集图形800中指示的开发者技能数据的汇编。人力分配图形1000A中每条线的宽度可以指示针对每个相应技术类别归因于每个开发者的代码量或提交价值。
在一个实施方式中,用户可以选择单独的开发者或单独的技术类别以突出显示与该开发者或技术类别有关的数据。图10B示出了由于选择特定开发者而产生的示例图形1000B,其示出了该开发者的技能集,而图10C示出了由于选择特定技术类别而产生的示例图形1000C,其示出了对该技术类别做出贡献的开发者以及来自每个开发者的相对贡献量(由线宽度指示)。例如,人力分配图形1000A至1000C可以用于管理和调整向软件项目的各个方面的人力分配。
虽然本文描述和示出了本发明的示例性实施方式,但是应当理解,它们仅是说明性的,并且可以在不脱离本发明的精神和范围的情况下对这些实施方式进行修改。本文描述的动作可以是可以由一个或更多个处理器实现并存储在计算机可读存储器或物品上的计算机可读和可执行指令。计算机可读和可执行指令可以包括例如应用程序、程序模块、例程和子例程、执行线程等。在某些情况下,并非所有动作都需要实现在本文描述的方法中。
诸如“部件”、“模块”、“单元”和“系统”的术语旨在涵盖硬件、软件、固件或其任何组合。例如,系统或部件可以是过程、在处理器上执行的过程或处理器。此外,功能、部件或系统可以位于单个设备上或分布在若干设备上。所描述的主题可以被实现为使用标准编程或工程技术来产生软件、固件、硬件或其任何组合以控制一个或更多个计算设备的装置、方法或制品。
因此,本发明的范围旨在仅根据可以修改的所附权利要求来限定,其中每个权利要求明确地并入本具体实施方式的该描述中作为本发明的实施方式。

Claims (18)

1.一种用于评估多个软件开发者中的每一个对软件项目的代码贡献的系统,所述系统包括:
至少一个存储器设备,存储:
包括代码集合的代码存储库,所述代码集合包括由所述多个软件开发者中的每一个开发的代码部分,所述代码部分包括多个函数;
定义的代码影响类别的列表,用于根据提交的影响对提交进行分类;
至少一个处理器,通信地耦接至所述至少一个存储器设备并且被配置成:
从所述代码存储库访问所述代码集合;
在所述软件项目期间的多个不同时间处解析所述代码集合以生成表示所述代码集合或所述代码集合的部分的抽象语法树(AST);
通过结构价值分析来针对每个软件开发者执行结构价值分析,包括:
从所述AST生成至少一个调用-提交图表;
对所述至少一个调用-提交图表执行调用-提交分析,以分析可归因于每个软件开发者的函数调用和提交;以及
至少基于所述调用-提交分析来计算每个软件开发者的结构价值分数;
通过结构价值分析来针对每个软件开发者执行非结构价值分析,包括:
分析所述AST以识别可归因于每个软件开发者的提交;
基于所述定义的代码影响类别的列表执行提交分类以对每个所识别的提交进行分类;以及
至少基于对可归因于每个软件开发者的提交的所述提交分类来计算该软件开发者的非结构代码影响分数;以及
基于多个开发价值分数输入来针对每个软件开发者计算开发价值分数,所述多个开发价值分数输入包括(a)每个软件开发者的所述结构价值分数和(b)每个软件开发者的所述非结构代码影响分数;以及
显示针对每个软件开发者计算的所述开发价值分数的表示。
2.根据权利要求1所述的系统,其中:
所述至少一个存储器设备存储一组代码质量规则;以及
通过结构价值分析来针对每个软件开发者执行所述非结构价值分析还包括:
通过将所述一组代码质量规则应用于由每个软件开发者开发的所述代码部分来执行代码质量分析;以及
至少基于所述代码质量分析来计算每个软件开发者的非结构代码质量分数;以及
每个软件开发者的所述开发价值分数包括是基于开发价值分数输入计算的,所述开发价值分数输入包括(a)每个软件开发者的所述结构价值分数,(b)每个软件开发者的所述非结构代码影响分数,以及(c)每个软件开发者的所述结构代码质量分数。
3.根据前述权利要求中的一项所述的系统,其中,从所述至少一个AST生成调用-提交图表包括:生成表示(a)所述代码集合中的所选函数之间的函数调用关系和(b)所选提交与受所述所选提交影响的函数之间的关系的调用-提交图表。
4.根据前述权利要求中的一项所述的系统,其中,从所述至少一个AST生成调用-提交图表包括:生成包括(a)表示所述代码集合中的函数的第一节点和(b)表示提交的第二节点的调用-提交图表。
5.根据前述权利要求中的一项所述的系统,其中,基于多个开发价值分数输入来针对每个软件开发者计算所述开发价值分数包括:
访问或确定所述多个开发价值分数输入的一组加权值;以及
基于(a)所述多个开发价值分数输入和(b)所述一组加权值来针对每个软件开发者计算所述开发价值分数。
6.根据前述权利要求中的一项所述的系统,其中,所述处理器被配置成基于关于提交的比较或排序的用户输入来随时间动态地调整所述一组加权值。
7.根据前述权利要求中的一项所述的系统,其中,对所述至少一个调用-提交图表执行所述调用-提交分析以分析可归因于每个软件开发者的函数调用和提交包括:确定对可归因于每个软件开发者的函数的函数调用的次数或函数调用的概率。
8.根据前述权利要求中的一项所述的系统,其中,分析AST以识别可归因于每个软件开发者的提交包括:
比较表示不同时间处的代码快照的多个AST;
基于多个比较的AST的差异来识别提交。
9.根据前述权利要求中的一项所述的系统,其中,所述定义的代码影响类别的列表包括以下类别中的至少一个:特征、改进、错误修复和维护。
10.一种用于评估多个软件开发者中的每一个对软件项目的代码贡献的方法,所述方法包括:
存储包括代码集合的代码存储库,所述代码集合包括由所述多个软件开发者中的每一个开发的代码部分,所述代码部分包括多个函数;
存储用于根据提交的影响对提交进行分类的定义的代码影响类别的列表;
从所述代码存储库访问所述代码集合;
在所述软件项目期间的多个不同时间处解析所述代码集合以生成表示所述代码集合或所述代码集合的部分的抽象语法树(AST);
通过结构价值分析来针对每个软件开发者执行结构价值分析,包括:
从所述AST生成至少一个调用-提交图表;
对所述至少一个调用-提交图表执行调用-提交分析,以分析可归因于每个软件开发者的函数调用和提交;以及
至少基于所述调用-提交分析来计算每个软件开发者的结构价值分数;
通过结构价值分析来针对每个软件开发者执行非结构价值分析,包括:
分析所述AST以识别可归因于每个软件开发者的提交;
基于所述定义的代码影响类别的列表执行提交分类以对每个所识别的提交进行分类;以及
至少基于对可归因于每个软件开发者的提交的所述提交分类来计算该软件开发者的非结构代码影响分数;以及
基于多个开发价值分数输入来针对每个软件开发者计算开发价值分数,所述多个开发价值分数输入包括(a)每个软件开发者的所述结构价值分数和(b)每个软件开发者的所述非结构代码影响分数;以及
显示针对每个软件开发者计算的所述开发价值分数的表示。
11.根据权利要求10所述的方法,其中:
通过结构价值分析来针对每个软件开发者执行所述非结构价值分析还包括:
通过向由每个软件开发者开发的所述代码部分应用一组存储的代码质量规则来执行代码质量分析;以及
至少基于所述代码质量分析来计算每个软件开发者的非结构代码质量分数;并且
每个软件开发者的所述开发价值分数包括是基于开发价值分数输入计算的,所述开发价值分数输入包括(a)每个软件开发者的所述结构价值分数,(b)每个软件开发者的所述非结构代码影响分数,以及(c)每个软件开发者的所述结构代码质量分数。
12.根据权利要求10至11中的一项所述的方法,其中,从所述至少一个AST生成调用-提交图表包括:生成表示(a)所述代码集合中的所选函数之间的函数调用关系和(b)所选提交与受所述所选提交影响的函数之间的关系的调用-提交图表。
13.根据权利要求10至12中的一项所述的方法,其中,从所述至少一个AST生成调用-提交图表包括:生成包括(a)表示所述代码集合中的函数的第一节点和(b)表示提交的第二节点的调用-提交图表。
14.根据权利要求10至13中的一项所述的方法,其中,基于多个开发价值分数输入来针对每个软件开发者计算所述开发价值分数包括:
访问或确定所述多个开发价值分数输入的一组加权值;以及
基于(a)所述多个开发价值分数输入和(b)所述一组加权值来针对每个软件开发者计算所述开发价值分数。
15.根据权利要求10至14中的一项所述的方法,还包括基于关于提交的比较或排序的用户输入来随时间动态地调整所述一组加权值。
16.根据权利要求10至15中的一项所述的方法,其中,对所述至少一个调用-提交图表执行所述调用-提交分析以分析可归因于每个软件开发者的函数调用和提交包括:确定对可归因于每个软件开发者的函数的函数调用的次数或函数调用的概率。
17.根据权利要求10至16中的一项所述的方法,其中,分析AST以识别可归因于每个软件开发者的提交包括:
比较表示不同时间处的代码快照的多个AST;
基于多个比较的AST的差异来识别提交。
18.根据权利要求10至17中的一项所述的方法,其中,所述定义的代码影响类别的列表包括以下类别中的至少一个:特征、改进、错误修复和维护。
CN201980097344.XA 2019-11-04 2019-11-04 用于评估软件开发者的代码贡献的系统和方法 Pending CN114365095A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/115270 WO2021087648A1 (en) 2019-11-04 2019-11-04 Systems and methods for evaluating code contributions by software developers

Publications (1)

Publication Number Publication Date
CN114365095A true CN114365095A (zh) 2022-04-15

Family

ID=75848362

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980097344.XA Pending CN114365095A (zh) 2019-11-04 2019-11-04 用于评估软件开发者的代码贡献的系统和方法

Country Status (4)

Country Link
US (1) US11816017B2 (zh)
EP (1) EP4055484A4 (zh)
CN (1) CN114365095A (zh)
WO (1) WO2021087648A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115167834A (zh) * 2022-09-08 2022-10-11 杭州新中大科技股份有限公司 一种基于代码数据化的源代码自动生成方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230046771A1 (en) * 2021-08-12 2023-02-16 Morgan Stanley Services Group Inc. Automated collaboration analytics
US20240078107A1 (en) * 2021-08-26 2024-03-07 Microsoft Technology Licensing, Llc Performing quality-based action(s) regarding engineer-generated documentation associated with code and/or application programming interface
US11941373B2 (en) * 2021-12-17 2024-03-26 Microsoft Technology Licensing, Llc. Code generation through reinforcement learning using code-quality rewards
US20240095027A1 (en) * 2022-09-16 2024-03-21 Microsoft Technology Licensing, Llc Software development quality assessment

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102023921A (zh) 2010-12-17 2011-04-20 江苏大学 Sql程序自动评分方法及装置
US9436452B2 (en) * 2012-11-12 2016-09-06 Keysight Technologies, Inc. Method for enforcing language subsets
CN104281096B (zh) * 2013-07-08 2017-10-13 广州中国科学院先进技术研究所 数控代码编译器的构造方法
EP2937779B1 (en) * 2014-04-24 2017-01-25 Semmle Limited Source code violation matching and attribution
US9946625B2 (en) * 2015-03-18 2018-04-17 New Iron Group, Inc. Diagnostic tool and method for efficient software development
US10810009B2 (en) * 2017-07-14 2020-10-20 Microsoft Technology Licensing, Llc Visualizations of software project and contributor activity
US10467004B2 (en) * 2017-12-28 2019-11-05 Semmle Limited Commit history linearization
US11157844B2 (en) * 2018-06-27 2021-10-26 Software.co Technologies, Inc. Monitoring source code development processes for automatic task scheduling
US10783051B2 (en) * 2018-09-06 2020-09-22 Servicenow, Inc. Performance regression framework
CN109947428B (zh) * 2019-01-14 2022-04-26 浙江工商大学 一种基于软件稳定性度量的优质软件推荐方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115167834A (zh) * 2022-09-08 2022-10-11 杭州新中大科技股份有限公司 一种基于代码数据化的源代码自动生成方法及装置

Also Published As

Publication number Publication date
EP4055484A1 (en) 2022-09-14
EP4055484A4 (en) 2023-07-26
WO2021087648A1 (en) 2021-05-14
US11816017B2 (en) 2023-11-14
US20220382541A1 (en) 2022-12-01

Similar Documents

Publication Publication Date Title
US11023689B1 (en) Applied artificial intelligence technology for narrative generation using an invocable analysis service with analysis libraries
CN114365095A (zh) 用于评估软件开发者的代码贡献的系统和方法
Shen et al. Automating performance bottleneck detection using search-based application profiling
Mirshokraie et al. Guided mutation testing for javascript web applications
Mahajan et al. Using visual symptoms for debugging presentation failures in web applications
Altman Accelerating MATLAB Performance: 1001 tips to speed up MATLAB programs
US8719799B2 (en) Measuring coupling between coverage tasks and use thereof
US20120124495A1 (en) System and method for object relationship identification in a user interface
Chen et al. Coverage prediction for accelerating compiler testing
US9824075B1 (en) System and method for interaction coverage
Mariano Benchmarking javascript frameworks
US20230086361A1 (en) Automatic performance evaluation in continuous integration and continuous delivery pipeline
Alrubaye et al. How does library migration impact software quality and comprehension? an empirical study
CN109240912A (zh) 一种基于大数据分析的网页应用的性能评估方法及终端
Biçer et al. Defect prediction for cascading style sheets
US11526429B1 (en) Identifying critical methods and critical paths in software code
Coppola et al. A taxonomy of metrics for GUI-based testing research: A systematic literature review
Caglayan et al. Merits of using repository metrics in defect prediction for open source projects
Aman et al. A doc2vec-based assessment of comments and its application to change-prone method analysis
Ndia et al. A survey of cascading style sheets complexity metrics
CN109032946B (zh) 一种测试方法和装置、计算机可读存储介质
Bruch et al. On evaluating recommender systems for API usages
Avros et al. Boosted decision trees for behaviour mining of concurrent programmes
Alrubaye et al. How does API migration impact software quality and comprehension? an empirical study
Fontes et al. Automated support for unit test generation

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