IP Library Granted Patent US 11,188,323
Granted Patent B2
US 11,188,323 · App. 16/409,047 · Granted Nov 30, 2021

Coding output

Inventors: Ian Paul Wright (Oxford, GB); Albert Ziegler (Oxford, GB)
Assignee: Microsoft Technology Licensing, LLC
G06F8/77G06F8/35G06F8/71G06N3/084G06N5/02G06Q10/04G06Q10/06313G06Q10/06315
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 11,188,323
App. No.
16/409,047
Granted
Nov 30, 2021
Kind
B2
Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for receiving a source code change; computing a distribution of standard coding durations using a model that takes as input features of source code changes; and computing a representative duration for the code change using the distribution of standard coding durations, wherein the representative duration represents a measure of how long a standard developer defined by the model would take to make the code change.

Claims (50)

1. 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 configure the one or more computers to perform operations comprising:

receiving a source code change;

computing a plurality of code change feature values for the source code change by at least generating composite change strings for the one or more source code files that are affected by the code change, tokenizing the composite change strings, and generating one or more feature vectors representing the tokens associated with the composite change strings, wherein computing the plurality of code change feature values for the source code change comprises computing values for a bag-of-words feature vector representing a quantity of token turnover for the tokens;

using the computed feature values and computed coding time as training data to train a model that predicts a distribution of observed coding times given the plurality of code change feature values;

computing a distribution of standard coding durations using the model that takes the features of source code changes as input; and

computing a representative duration for the code change using the distribution of standard coding durations, wherein the representative duration represents a measure of how long a standard developer defined by the model would take to make the code change.

2. The system of claim 1 , wherein the standard developer is representative of a population of developer entities.

3. The system of claim 2 , wherein the operations further comprise:

obtaining a training dataset comprising a plurality of code changes committed by a plurality of respective developer entities;

computing, for each code change, a developer-specific commit interval, wherein the commit interval is a measure of elapsed time since the same developer committed a previous commit;

converting each developer-specific commit interval into a respective coding time using a trained developer-specific coding time model;

computing the plurality of code change feature values for each code change; and

using the computed feature values and computed coding time as training data to train the model that predicts a distribution of observed coding times given a plurality of code change feature values.

4. The system of claim 1 , wherein the bag-of-words feature vector has one vector element for each of a plurality of separators, keywords, and frequent words.

5. The system of claim 1 , wherein generating the composite change string comprises concatenating all inserted and deleted lines of code in the code change into the composite change string.

6. The system of claim 1 , wherein the model is a deep mixture density network.

7. The system of claim 6 , wherein the deep mixture density network predicts a distribution of durations.

8. The system of claim 1 , wherein the operations further comprise:

generating a different respective model for each of a plurality of programming languages.

9. The system of claim 8 , wherein the operations further comprise:

computing, for a single developer entity, a plurality of respective aggregate measures of efficiency for each of the plurality of programming languages.

10. The system of claim 1 , wherein the operations further comprise:

obtaining a measure of clock time spent making the first code change;

computing a measure of efficiency of the first code change by computing a ratio that compares the representative coding duration to the measure of clock time spent making the first code change.

11. The system of claim 1 , wherein the operations further comprise:

using a plurality of respective code changes for each of a plurality of developer entities to compute a representative measure of coding output for each developer entity; and

ranking the developers according to the representative measure of coding output for each developer entity.

12. The system of claim 1 , wherein the operations further comprise tracking an aggregate measure of efficiency over time for a developer entity, wherein the aggregate measure of efficiency over each time period represents an aggregate duration of one or more commits in the time period relative to the length of the time period.

13. A method comprising:

receiving a source code change;

computing a plurality of code change feature values for the source code change by at least generating composite change strings for the one or more source code files that are affected by the code change, tokenizing the composite change strings, and generating one or more feature vectors representing the tokens associated with the composite change strings, wherein computing the plurality of code change feature values for the source code change comprises computing values for a bag-of-words feature vector representing a quantity of token turnover for the tokens;

using the computed feature values and computed coding time as training data to train a model that predicts a distribution of observed coding times given the plurality of code change feature values;

computing a distribution of standard coding durations using the model that takes the features of source code changes as input; and

computing a representative duration for the code change using the distribution of standard coding durations, wherein the representative duration represents a measure of how long a standard developer defined by the model would take to make the code change.

14. The method of claim 13 , wherein the standard developer is representative of a population of developer entities.

15. The method of claim 14 , further comprising:

obtaining a training dataset comprising a plurality of code changes committed by a plurality of respective developer entities;

computing, for each code change, a developer-specific commit interval, wherein the commit interval is a measure of elapsed time since the same developer committed a previous commit;

converting each developer-specific commit interval into a respective coding time using a trained developer-specific coding time model;

computing the plurality of code change feature values for each code change; and

using the computed feature values and computed coding time as training data to train the model that predicts a distribution of observed coding times given a plurality of code change feature values.

16. The method of claim 13 , wherein the bag-of-words feature vector has one vector element for each of a plurality of separators, keywords, and frequent words.

17. The method of claim 13 , wherein generating the composite change string comprises concatenating all inserted and deleted lines of code in the code change into the composite change string.

18. One or more hardware storage devices comprising stored computer-executable instructions that are executable by one or more processors of a computing system to configure the computing system to perform the following:

receive a source code change;

compute a plurality of code change feature values for the source code change by at least generating composite change strings for the one or more source code files that are affected by the code change, tokenizing the composite change strings, and generating one or more feature vectors representing the tokens associated with the composite change strings, wherein computing the plurality of code change feature values for the source code change comprises computing values for a bag-of-words feature vector representing a quantity of token turnover for the tokens;

use the computed feature values and computed coding time as training data to train a model that predicts a distribution of observed coding times given the plurality of code change feature values;

compute a distribution of standard coding durations using the model that takes the features of source code changes as input; and

compute a representative duration for the code change using the distribution of standard coding durations, wherein the representative duration represents a measure of how long a standard developer defined by the model would take to make the code change.

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 Aug 7, 2019
From: WRIGHT, IAN PAUL; ZIEGLER, ALBERT
To: SEMMLE LIMITED
Reel/Frame 049984/0448 →
Continuity (2)
Provisional Application 62669596 · May 10, 2018
Related Publication 20200225945A1 · Jul 16, 2020