internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var probabilityOfStay = pullRequestContext.GetProbabilityOfStay(reviewer.DeveloperName, _numberOfPeriodsForCalculatingProbabilityOfStay.Value); var effort = pullRequestContext.GetEffort(reviewer.DeveloperName, _numberOfPeriodsForCalculatingProbabilityOfStay.Value); return(effort * probabilityOfStay); }
private double GetPersistSpreadingScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var reviewerImportance = pullRequestContext.IsHoarder(reviewer.DeveloperName) ? _hoarderRatio : 1; var probabilityOfStay = pullRequestContext.GetProbabilityOfStay(reviewer.DeveloperName, _numberOfPeriodsForCalculatingProbabilityOfStay.Value); var effort = pullRequestContext.GetEffort(reviewer.DeveloperName, _numberOfPeriodsForCalculatingProbabilityOfStay.Value); var prFiles = pullRequestContext.PullRequestFiles.Select(q => pullRequestContext.CanononicalPathMapper[q.FileName]) .Where(q => q != null).ToArray(); var reviewedFiles = reviewer.GetTouchedFiles().Where(q => prFiles.Contains(q)); var specializedKnowledge = reviewedFiles.Count() / (double)pullRequestContext.PullRequestFiles.Length; var spreadingScore = 0.0; spreadingScore = reviewerImportance * Math.Pow(probabilityOfStay * effort, _alpha) * Math.Pow(1 - specializedKnowledge, _beta); return(spreadingScore); }