Institution: |
Slovak University of Technology |
Technologies used: |
Java, Eclipse JDT |
Inputs: |
source code files, activity logs, information tags |
Outputs: |
model of activities of programmers and the calculation of the programmer’s karma score |
Addressed problem
Estimation of developer's expertise can be a valuable asset for a software company. It can be beneficial in the planning of a software project, especially in assigning development tasks. The time required to implement a new functionality, to change an existing functionality, or to fix a bug can be significantly reduced if the (issue) task is assigned to a developer who knows corresponding source code. Existing approaches to estimate developer's expertise on a part of a software system rely on the assumption that a number of lines of code committed by a developer reflects his/her expertise on that part of the system. However, we believe that in addition to the amount of final code we should also consider how much effort he/she put into implementation of the code.
Description
We propose an automatic approach to identify and to recommend an appropriate person (expert) for a given development task of a software project that considers both developer's competence for the task (a degree of his/her familiarity with the task and its corresponding source code) and his/her development productivity.
A software system can be viewed as a body of knowledge decomposed into a set of fragments called conceptual concerns (topics). We estimate developer's familiarity with the software system at level of topics. We build a topic model to extract topics from codebase of the system. A degree of developer's familiarity with a topic is estimated from his/her code contributions to source code of this topic. We define an expertise metric that estimates developer's development productivity. It takes into account complexity (size) of code changes performed by the developer per time and the amount of effort he/she spent to perform the changes measured through development activities. To recommend an expert for a topic we consider both developer's familiarity with this topic and his/her development productivity. We also propose an approach that maps tasks in natural language to topics inferred from source code.
We evaluated our approach in three environments - an open environment (three open-source projects), a commercial / closed environment (two software projects) and an academic environment. The results indicate that by using our approach we are able to recommend developers who are competent to participate in and contribute to resolving newly created tasks.
By recommending the right person to a given task we can reduce the overall time needed to resolve the task of the extra time that a developer would need to become familiar with the task and its corresponding code. Both aspects such as developer’s familiarity with source code and his/her development productivity should be taken into account in recommending developers for new tasks.