IP Library Granted Patent US 10,310,853
Granted Patent B2
US 10,310,853 · App. 15/489,441 · Granted Jun 4, 2019

Coding velocity

Inventor: Ian Paul Wright (Oxford, GB)
Assignee: Semmle Limited
G06F8/77G06Q10/06398G06Q10/0633
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,310,853
App. No.
15/489,441
Granted
Jun 4, 2019
Kind
B2
Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for computing coding velocity. One of the methods includes receiving a definition of one or more individual source code developers belonging to a target developer entity. Coding-velocity samples for each individual source code developer belonging to the target developer entity are generated, wherein each coding-velocity sample represents a measure of coding activity by the individual source code developer over a respective time duration. The coding-velocity samples are aggregated according to the definition of the target developer entity. A coding-velocity model for the target developer entity is generated from the aggregated coding-velocity samples of the target developer entity. A value of a particular coding-velocity attribute for the target developer entity is computed using the coding-velocity model.

Claims (86)

1. A computer-implemented method comprising:

receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;

obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;

obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;

generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:

(i) a measure of coding activity for one or more source code contributions in the commit, and

(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;

aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;

aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;

generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:

generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,

generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,

generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and

computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

2. The method of claim 1 , wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

3. The method of claim 1 , wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

4. The method of claim 1 , wherein generating the coding-velocity model for the target developer entity comprises weighting a plurality of possible models according to the coding-velocity posterior distribution by a likeliness of each possible model according to the coding-velocity posterior distribution.

5. The method of claim 1 , further comprising selecting the population of developers including selecting developers who contributed to projects having one or more matching characteristics of a project for the target developer entity.

6. The method of claim 1 , further comprising selecting developers for the population of developers from a plurality of different code bases.

7. The method of claim 1 , wherein generating coding-velocity samples for individual source code developers of the target developer entity comprises collapsing, into a single commit, multiple commits by a same individual source code developer occurring within a particular time interval.

8. The method of claim 1 , wherein coding velocity is measured in terms of total or net lines of code added, churn, or estimated standard effort per each unit of time.

9. The method of claim 1 , further comprising:

computing, for each developer entity of a plurality of developer entities including the target developer entity, a score using a respective coding-velocity model for the developer entity.

10. The method of claim 9 , wherein computing the score using the respective coding-velocity model for the developer entity comprises computing a coding-velocity point estimate.

11. The method of claim 10 , wherein the coding-velocity point estimate is a mean, median, or mode of the coding-velocity model.

12. The method of claim 10 , further comprising:

ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity.

13. The method of claim 12 , wherein ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity comprises ranking each developer entity of the plurality of developer entities according to a measure of stochastic dominance of the respective coding-velocity models for the plurality of developer entities.

14. The method of claim 13 , further comprising computing the measure of stochastic dominance as an approximation of stochastic dominance indicated by sampling the coding-velocity models of each of the plurality of developer entities.

15. The method of claim 12 , wherein ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity comprises computing a relative coding velocity for each developer entity of the plurality of developer entities, the relative coding velocity being a measure of the coding-velocity point estimate compared to that of a standard developer.

16. The method of claim 15 , further comprising generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on the coding-velocity point estimate and the estimated working hours for each developer entity.

17. The method of claim 1 , further comprising generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

18. The method of claim 17 , wherein the user interface presentation includes, for each developer entity, one or more coding-velocity ranges that indicate ranges of coding velocity within a particular credibility interval.

19. The method of claim 1 , further comprising generating a user interface presentation that presents a probability distribution for the coding-velocity model of the target developer entity.

20. The method of claim 1 , further comprising:

computing respective representative coding velocities for the target developer entity for each of multiple time periods; and

generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

21. The method of claim 20 , further comprising generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.

22. The method of claim 1 , further comprising:

receiving a request to compute an estimated number of hours required to implement a particular feature requiring a particular amount of code changes; and

using the coding-velocity model to compute the estimated number of hours required to implement the particular feature.

23. A system comprising:

one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising:

receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;

obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;

obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;

generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:

(i) a measure of coding activity for one or more source code contributions in the commit, and

(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;

aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;

aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;

generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:

generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,

generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,

generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and

computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

24. The system of claim 23 , wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

25. The system of claim 23 , wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

26. A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising:

receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;

obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;

obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;

generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:

(i) a measure of coding activity for one or more source code contributions in the commit, and

(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;

aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;

aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;

generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:

generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,

generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,

generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and

computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

27. The computer program product of claim 26 , wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

28. The computer program product of claim 26 , wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

29. The computer program product of claim 26 , wherein the operations further comprise generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on a coding-velocity point estimate and estimated working hours for each developer entity.

30. The computer program product of claim 26 , wherein the operations further comprise generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

31. The computer program product of claim 26 , wherein the operations further comprise:

computing respective representative coding velocities for the target developer entity for each of multiple time periods; and

generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

32. The computer program product of claim 31 , wherein the operations further comprise generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.

33. The system of claim 23 , wherein the operations further comprise generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on a coding-velocity point estimate and estimated working hours for each developer entity.

34. The system of claim 23 , wherein the operations further comprise generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

35. The system of claim 23 , wherein the operations further comprise:

computing respective representative coding velocities for the target developer entity for each of multiple time periods; and

generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

36. The system of claim 35 , wherein the operations further comprise generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.

Assignments (3)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 27, 2020
From: GITHUB SOFTWARE UK LTD.
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 051710/0252 →
CHANGE OF NAME Recorded Dec 11, 2019
From: SEMMLE LTD.
To: GITHUB SOFTWARE UK LTD.
Reel/Frame 052027/0912 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 27, 2017
From: WRIGHT, IAN PAUL
To: SEMMLE LIMITED
Reel/Frame 042167/0903 →
Continuity (1)
Related Publication 20180300127A1 · Oct 18, 2018