# SoftRec: Multi-Relationship Fused Software Developer Recommendation
## 3 The Multi-Relationship Fused Software Developer Recommendation
### Definition of Multi-Relationships
#### 3.1.1. Developer-Developer Collaboration Relationship  
Recent research [33] at Google shows that code review usually depends on close working relationships between authors and reviewers. Through a study of Neusoft Corporation's R&D teams (Neusoft Corporation ([[https://www.neusoft.com/](https://www.neusoft.com/)]([https://www.neusoft.com/](https://www.neusoft.com/))) is the largest software service provider in China, with more than 18,000 developers and tens of thousands of commercial customers all over the world), we also found that developers usually prefer reviewers that have close collaboration relationships with them. Therefore, collaboration relationships can be leveraged to improve developer recommendation accuracy. In this paper, we categorize the collaboration relationship into explicit collaboration and implicit collaboration. The former refers to direct interaction between developers and the latter refers to indirect collaboration between developers. **Explicit Collaboration. ** Suppose \(\mathcal{O}\) denotes a set of interaction objects between \(u\) and \(u^{\prime}\), \(\mathcal{A}_{o}\) denotes a set of actions which performed on object \(o\in\mathcal{O}\), the explicit collaboration relationship is formalized as:  
\[c_{exp}(u,u^{\prime})=\left\{ \begin{array}{ll}\frac{1}{|\mathcal{O}|}\sum \limits_{o\in\mathcal{O}}\sum\limits_{a\in\mathcal{A}_{o}}|\frac{1}{|\mathcal{ A}_{o}|}\sum\limits_{i=1}^{s}\omega^{s-i}\pi_{1}(u,u^{\prime},o,a,i),&\text{ if exists;}\\ 0,&\text{otherwise.}\end{array} \right. \tag{2}\]  
where \(s\) denotes the number of interactions while interactive object is \(o\) and action is \(a\). \(\omega\in[0,1]\) is the decay factor used to weaken the influence of multiple interactions between the same developers. Here, let \(\pi_{1}(\cdot)=\frac{interTime(u,u^{\prime},o,a,i)-beginTime}{entTime(u,u^{ \prime})}\), which is used to reflect the influence of time locality. It supposes that the most recent interaction is more important than it was a long time ago. \(inter\)_\(Time(u,u^{\prime},o,a,i)\)_ denotes the \(i\) th occurrence time of the action \(a\) which occurred between \(u\) and \(u^{\prime}\) on object \(o\), \(i=1\) denotes the first interaction, beginTime and endTime denote the earliest and latest occurrence time of all interactions in the datasets. **Example 1**. : _Suppose \(u\) and \(u^{\prime}\) have the interactive object \(\mathcal{O}\) = \(\{o_{1},o_{2}\}\), where \(\mathcal{O}\) may include many elements (e.g., pull_requests, issue_comments and commit_comments in GitHub dataset). Suppose \(o_{1}=issue\_comments\), \(o_{2}=\) commit_comments and the performed actions \(\mathcal{A}_{o_{1}}\)=\(\{a_{1}\}\), \(\mathcal{A}_{o_{2}}\)=\(\{a_{2}\}\). Suppose \(a_{1}=a_{2}=\) comment, and the performed number of \(a_{1}\) and \(a_{2}\) are \(s_{a_{1}}=1\) and \(s_{a_{2}}=2\). Suppose the occurrence time of \(a_{1}\) and \(a_{2}\) are \(t_{a_{11}}\) and \(t_{a_{21}}\), beginTime and endTime are \(t_{b}\) and \(t_{e}\), respectively. We can calculate: \(c_{exp}(u,u^{\prime})=\frac{1}{2}\{\omega^{0}\frac{(t_{a_{11}}-t_{b})}{t_{e}-t_ {b}}+\omega^{0}\frac{(t_{a_{21}}-t_{b})}{t_{e}-t_{b}}+\omega^{1}\frac{(t_{a_{2 1}}-t_{b})}{t_{e}-t_{b}}\}\)._  
**Implicit Collaboration. ** Suppose \(\mathcal{O}^{\prime}\) denotes a set of co-occurrence objects (e.g., organization, project, team) between \(u\) and \(u^{\prime}\). The implicit collaboration relationship is formalized as:  
\[c_{imp}(u,u^{\prime})=\left\{ \begin{array}{ll}\frac{\sum\limits_{a\in \mathcal{O}^{\prime}}I(u,u^{\prime},o)}{\sum\limits_{o\in\mathcal{O}^{\prime}} I(u,u^{\prime},o)+\psi^{\prime}},&\text{if exists;}\\ 0,&\text{otherwise.}\end{array} \right. \tag{3}\]  
where \(I(\cdot)\) is the indicator function. If \(u,u^{\prime}\) are co-occurred in \(o\), its value is 1, otherwise, its value is 0. \(\psi\) is a constant, used to regularize the results, similar to its use in [4], its default value is 100. **Example 2**.