Abstract:
A system and method capable of summarizing data for all of a software company&#39;s engineers, repos (projects) and the entire organization so the executives and managers of the organization can make better decisions. The system is configured to fetch and mine data related to the end-user&#39;s organization, projects, people, source code and source code metadata and use proprietary algorithms to calculate various scores such as Velocity, Churn and Skill. The end-user is able to see the various scores, including a Master Score, for various contexts such as the Organization, repos (projects) or individuals (engineers). The score provides a CTO or VP of Engineering, for instance, with a quick health status that would otherwise be unknown or very time-consuming to obtain.

Description:
TECHNICAL FIELD 
     The present disclosure relates generally to source control management systems, and more particularly to ascertaining history of a project, also known as commit data. 
     BACKGROUND 
     Software systems are complex to write, maintain, and manage. The need arises for an organization manager, leader or executive to obtain a simple and holistic view of their organizations source code health without having to spend a lot of time digging into the source code itself, or using tools that take hours to setup and only provide software engineering feedback. For example, an executive wants to be able to know who&#39;s writing the most source code, the best source code, which projects are suffering from low code contribution or low skill, and how each team member is affecting other team member&#39;s source code contributions. 
     While operating a software company, the amount of work to manage quality of work and overall engineer contributions becomes more difficult with growth (internal and sales). Finding the time to go through source code, line-by-line is unfeasible. There are various source code review products, such as Crucible, Black Duck, HP Fortify and others. Those tools are time consuming to setup and interpret. 
     What is desired is a system capable of summarizing data for all of a software company&#39;s engineers, repos (projects) and the entire organization so the executives and managers of the organization can make better decisions. The system should be very easy-to-understand, fast, and meaningful analysis of source code to help differentiate the bad engineers and projects from the great ones to assist in strategic decisions. For example, how to form teams, which project to put John Doe engineer, which engineers to pair with one another, which projects need more resources, etc. 
     SUMMARY 
     The present disclosure provides a system and method capable of summarizing data for all of a software company&#39;s engineers, repos (projects) and the entire organization so the executives and managers of the organization can make better decisions. 
     In a first example, the system is configured to fetch and mine data related to the end-user&#39;s organization, projects, people, source code and source code metadata and use proprietary algorithms to calculate various scores such as Velocity, Churn and Skill. These scores may be combined in a weighted calculation over time to provide a Master Score; the combined score for a specific context. The end-user is able to see the various scores, including the Master Score, for various contexts such as the Organization, repos (projects) or individuals (engineers). The score provides a CTO or VP of Engineering, for instance, with a quick health status that would otherwise be unknown or very time-consuming to obtain. 
     Other technical features may be readily apparent to one skilled in the art from the following figures, descriptions, and claims. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       For a more complete understanding of the present disclosure, and the advantages thereof, reference is now made to the following descriptions taken in conjunction with the accompanying drawings, wherein like numbers designate like objects, and in which: 
         FIG. 1  illustrates a high-level system architecture of one embodiment of the disclosure; 
         FIG. 2  illustrates source control object structure and relationships; 
         FIGS. 3A-J  illustrate examples of source code and programming language metadata; 
         FIGS. 4A-D  illustrates samples produced by the summarization engine; 
         FIG. 5  illustrates a scoring engine; 
         FIG. 6A  illustrates 3 hunks, and  FIGS. 6B ,  6 C and  6 D illustrates scoring of velocity, churn and skill, respectively; 
         FIGS. 7A-7L  illustrate wireframes of a graphical user interface; 
         FIGS. 8A-8G  illustrate screenshots of a graphical user interface of a tablet; and 
         FIG. 9  illustrates a detailed diagram of a typical component according to the present disclosure. 
     
    
    
     DETAILED DESCRIPTION 
     This disclosure introduces and/or involves the following terms and definitions: 
     Source Control Management System (SCM) 
     Sometimes also referred to as simply Source Control, is a tool used to manage the coding source for a team and track the development of a source file to prevent it from being altered by more than one person at a time. 
     Source Code 
     A readable format of step-by-step programming instructions that become translated into machine language to run on computers. 
     Organization 
     Organizations simplify management of group-owned repositories (for example: a company&#39;s code), expand on a permissions system, and help focus workflow for business and large open source projects. 
     Repository (Repo) 
     Every time an engineer commits code, it is stored in a repository. This is sometimes synonymous with the word “project”. 
     Commit 
     The process that adds code changes to the history of the repository and assigns a commit name to it. This is a local action, as commits must then be pushed to the server. 
     Contributor 
     The author or committer of a piece of code. The author and committer may not be the same person, but both are considered contributors. See Committer. 
     Committer 
     The individual that adds the source code history to a repository. See Commit. 
     Velocity 
     The rate of change. It includes the number of lines added, deleted or changed within a period of time (typically per day). 
     Churn 
     The number of lines of code that are edited again. For example, if lines 20-30 in a source code file are touched every day for a week, this may be considered High Churn. 
     Skill 
     The ability to do something well. Skill includes a representation of an individual contributor&#39;s level of mastery of a specific language, project (repo) or software architecture. 
     Referring to  FIG. 1 , there is shown a high-level architecture of a system  100  according to the present disclosure. The system  100  is configured to be implemented on a computer, such as a PC or a server, within a portable device such as a smart phone or tablet, or on a distributed cloud computing system. The system  100  is configured to obtain source code  106  from public or private repositories with user credentials. System  100  further includes an application engine  103  that is configured to pull source code  106 , source code metadata  107  and programming language metadata  108  from source control systems, such as GitHub offered by Codalytics, Subversion, Microsoft TFS, Bitbucket and any other source control system that provide communications over internet protocols. An example of source control object structure and relationships is illustrated at  200  in  FIG. 2 . 
     By way of example, the system  100  may operate according to the following methodology. For every source code repository, the application engine  103  obtains one or more source code files  106 , source code metadata  107  and programming language metadata  108 . Examples of source code and programming language metadata are illustrated in  FIGS. 3A-3J . The source code  106 , source code metadata  107  and programming language metadata  108  are then sent to a summary engine  111  for processing summarization data. The summarization engine  111  aggregates and adds the additions, deletions and total changes per organization, repository, user and contributor. Summary data  112  samples produced by summarization engine  111  are illustrated in  FIGS. 4A-4D .  FIG. 4A  illustrates organizational summary data at  410 .  FIG. 4B  illustrates repository summary data at  420 .  FIG. 4C  illustrates user summary data at  430 , and  FIG. 4D  illustrates contributor summary data at  430 . 
     The application engine  103  then sends the summary data  112  along with source code  106 , source code metadata  107  and programming language metadata  108  to a scoring engine  109 . The scoring engine  109  uses algorithms and baseline data  105  to generate more metadata, shown as score data  110 . A high-level diagram of the scoring engine can be seen at  500  in  FIG. 5 . 
     The first process of the scoring engine  500  comprises the scoring engine  500  going through every file for every commit in every repository, and extracting unified diff hunk information. For every source file changed in a diff patch, the algorithm looks for a pattern that matches: “@@ −1,s +1,s @@”. This pattern is known as the hunk range information of a unified diff format. For every occurrence of the above pattern, the algorithm extracts the source start, source length, target start and target length info. This is useful in determining the Churn Score. 
     The following is a sample unified diff patch: 
     @@ −1,3 +1,9 @@ 
     +This is an important 
     +notice! It should 
     +therefore be located at 
     +the beginning of this 
     +document! 
     + 
     This part of the 
     document has stayed the 
     same from version to 
     @@ −5,16 +11,10 @@ 
     be shown if it doesn&#39;t 
     change. Otherwise, that 
     would not be helping to 
     −compress the size of the 
     −changes. 
     − 
     −This paragraph contains 
     −text that is outdated. 
     −It will be deleted in the 
     −near future. 
     +compress anything. 
     It is important to spell 
     −check this document. On 
     +check this document. On 
     the other hand, a 
     misspelled word isn&#39;t 
     the end of the world. 
     @@ −22,3 +22,7 @@ 
     this paragraph needs to 
     be changed. Things can 
     be added after it. 
     + 
     +This paragraph contains 
     +important new additions 
     +to this document. 
     The algorithm populates the hunk data store for each file that&#39;s part of the commit. From the above sample, three hunks are pulled as shown in  FIG. 6A . 
     Velocity is then calculated for every repository and contributor, for each day, week, month and year, using the velocity score algorithm(s) as shown in  FIG. 6B . Churn is calculated for every repository and contributor, for each day, week, month and year, using the churn score algorithm(s) in  FIG. 6C . Skill is then extracted for each repository and contributor, for each day, week, month and year using the skill algorithm(s) shown in  FIG. 6D . Skill is calculated by crawling through each line of code in the source file, checking for the existence of advanced or high-competency terms, and adding a positive integer 1 one (1) to for each occurrence. Each advanced or high-competency term comes from academic knowledge of each programming language, in combination with domain experience of engineering professionals that specialize in each one of the programming languages that are being scored. To generate a master score, velocity, churn and skill are added and the total is then divided by three, giving an average. Velocity score, churn score, skill score and master score is then output to the score data  110  for each organization, user, repository and contributor in a daily, weekly, monthly and yearly format. 
     Periodically (hourly, daily and weekly), the application engine  103  invokes the baseline engine  104 . The baseline engine  104  is responsible for generating comparison data from popular and well-architected public source repositories that have been created by well-known companies and skilled engineers. Hundreds of publicly available repositories of various programming languages are pulled by the application engine  103  and sent to the baseline engine  104 . An administrator of system  100  can define the repositories that are included in this process, and the application engine  103  is configured to scan popular source control managements systems online and automatically select the best ones using data and popularity criteria. Baseline data  105  is then output for each repository. Baseline data  105  contains programming language, architecture, skill, source code metadata and popularity information for each of the repositories. Baseline data  105  is used by the scoring engine  109  as a measurement and point of reference so the scoring engine  109  can provide more accurate output based on learned skill levels, architectures and other source code metadata for those popular repositories. 
     When an end-user views the display of information using a touch screen device  101  or a web browser  102 , information is presented in a hierarchical format as can be seen in  FIGS. 7A-7L  depicting wireframes of a graphical user interface, and  FIGS. 8A-8G  depicting a graphical user interface of a tablet wherein like numerals refer to like elements. 
       FIG. 7A  depicts a screen shot of score trending at  700  for a plurality of contributors  702 . This screen shot is produced in response to selecting the contributors window  703 . Three (3) scores are shown for each contributor  702 , shown as churn  704 , velocity  706  and skill  708 . A company field is shown at  710  that is associated with the data shown. A plurality of repos associated with the selected company are shown at  712 . Fields  704 ,  706  and  708  depict the average scores for the contributors  702  of the selected company  710 , and individual scores for each contributor  702  is shown adjacent the respective name at  714 . The score trending over time is shown in window  716 . 
     Additional data is shown in window  720 , including the total number of lines of code for this company, the number of days of activity for this company, the number of watchers, the number of committers, and the number of teams. Drop down window  722  allows the user to select different metrics for displaying data, with the selection “across all time” being selected for this screen shot  700 . 
       FIG. 7B  depicts commit activity in screenshot  730  for the plurality of contributors  702 . 
       FIG. 7C  depicts file activity in screenshot  740  for the plurality of contributors  702 . 
       FIG. 7D  depicts commit activity in screen shot  750  for the various repos  752  in response to the repos window  705  being selected. Each repo  752  for selected company  710  has an associated average score displayed adjacent the respective repo at  754 . The associated activity of each repo over time is shown in window  716 . 
       FIG. 7E  depicts file activity in screen shot  760  for the various repos  752  in response to the repos window  705  being selected. 
       FIG. 7F  depicts score trending for the plurality of contributors  702  in screen shot  770  wherein the user has selected a specific user defined time period at  772 . This enables a user to appreciate more detailed information over a specific time period. 
       FIG. 7G  depicts score trending for the plurality of contributors  702  in screen shot  780 , wherein the user has selected a specific contributor such that a window  782  pops up and displays a summary of the user&#39;s activity as a function of different time periods in a day. 
       FIG. 7H  depicts a screen shot  790  including a detailed pop up window  792  created in response to a user selecting window  704 , such as by positioning a cursor over the window  704  and clicking. Window  792  provides the user a top level display of commit activity over time compared to an industry average at  794 , as well as contributions over time compared to an industry average at  796 . 
       FIG. 7I  depicts a screen shot  800  including a detailed pop up window  802  illustrating a quality score history compared to an industry average over time. 
       FIG. 7J  depicts a screen shot  810  illustrating score trending for 2 selected contributors, a subset of all contributors  702 . The average scores for this subset of users  702  are shown in windows  704 ,  706  and  708 . This window helps a user understand the productivity of a subset of contributors such as an analysis of a team of contributors can be appreciated. 
       FIG. 7K  depicts a screen shot  820  illustrating commit activity for 2 selected contributors, a subset of all contributors  702 . 
       FIG. 7L  depicts a screen shot  830  illustrating file activity for 2 selected contributors, a subset of all contributors  702 . 
       FIGS. 8A-8G  depict additional embodiments of this disclosure, including screen shots showing score trending similar to that shown in  FIGS. 7A-7L  wherein like numerals refer to like elements. 
       FIG. 8A  depicts score trending for the plurality of contributors  702 , wherein the user has selected a specific contributor  702  such that window  782  pops up and displays a summary of the user&#39;s activity as a function of different time periods in a day. 
       FIG. 8B  depicts the repos  712  of company  710 . 
       FIG. 8C  shows a selected repo  712 . 
       FIG. 8D  shows the option to select a time period from dropdown window  722  for displaying data. 
       FIG. 8E  shows a top level display of commit activity over time compared to an industry average at  794 , as well as contributions over time compared to an industry average at  796 . 
       FIG. 8F  depicts a screen shot including a detailed pop up window  802  illustrating a quality score history compared to an industry average over time. 
       FIG. 8G  shows a drop down window  804  from a settings tab. 
     An end-user can view summary data  112  and score data  110  for every organization, repository, user or contributor that they have access to view. Access is defined by the source control management system, which is used to determine the view access within the display  101 . Source code metadata  107 , programming language metadata  108  can also be viewed. Summary data  112  and score data  110  are also available in a historical view, and the end-user can browse historical data by a day, week, month or year look back. Graphical representations of the summary data  112 , score data  110 , source code metadata  107 , programming language metadata  108  and source code history are also shown to the end user. 
     The components described above may be implemented on any general-purpose network component, such as a computer, tablet, or network component with sufficient processing power, memory resources, and network throughput capability to handle the necessary workload placed upon it.  FIG. 9  illustrates a typical, general-purpose component  1100  suitable for implementing one or more embodiments of the components disclosed herein. The component  1100  includes a processor  1102  (which may be referred to as a central processor unit or CPU) that is in communication with memory devices including secondary storage  1104 , read only memory (ROM)  1106 , random access memory (RAM)  1108 , input/output (I/O) devices  1110 , and network connectivity devices  1112 . The processor  1102  may be implemented as one or more CPU chips, or may be part of one or more application specific integrated circuits (ASICs). 
     The secondary storage  1104  is typically comprised of one or more disk drives or tape drives and is used for non-volatile storage of data and as an over-flow data storage device if RAM  1108  is not large enough to hold all working data. Secondary storage  1104  may be used to store programs that are loaded into RAM  1108  when such programs are selected for execution. The ROM  1106  is used to store instructions and perhaps data that are read during program execution. ROM  1106  is a non-volatile memory device that typically has a small memory capacity relative to the larger memory capacity of secondary storage  1104 . The RAM  1108  is used to store volatile data and perhaps to store instructions. Access to both ROM  1106  and RAM  1108  is typically faster than to secondary storage  1104 . 
     It may be advantageous to set forth definitions of certain words and phrases used throughout this patent document. The terms “include” and “comprise,” as well as derivatives thereof, mean inclusion without limitation. The term “or” is inclusive, meaning and/or. The phrases “associated with” and “associated therewith,” as well as derivatives thereof, mean to include, be included within, interconnect with, contain, be contained within, connect to or with, couple to or with, be communicable with, cooperate with, interleave, juxtapose, be proximate to, be bound to or with, have, have a property of, or the like. 
     While this disclosure has described certain embodiments and generally associated methods, alterations and permutations of these embodiments and methods will be apparent to those skilled in the art. Accordingly, the above description of example embodiments does not define or constrain this disclosure. Other changes, substitutions, and alterations are also possible without departing from the spirit and scope of this disclosure, as defined by the following claims.