private long GetLoadScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var reviwes = new List <long>(); var overitems = pullRequestContext.Overlap; if (overitems.Count == 0) { return(0); } foreach (var pullreq in pullRequestContext.KnowledgeMap.ReviewBasedKnowledgeMap.GetDeveloperReviews(reviewer.DeveloperName)) { reviwes.Add(pullreq.Number); } var count = overitems.Intersect(reviwes); var commits = pullRequestContext.KnowledgeMap.CommitBasedKnowledgeMap.GetDeveloperCommits(reviewer.DeveloperName); var start = pullRequestContext.PullRequest.CreatedAtDateTime; var end = pullRequestContext.PullRequest.ClosedAtDateTime; var conflict_commits = commits.Where(a => a.AuthorDateTime >= start && a.AuthorDateTime <= end); if (conflict_commits.Count() > 1) { var i = 9; } return(count.Count() + conflict_commits.Count()); }
public ActionResult DeleteConfirmed(string id, string ability) { DeveloperKnowledge developerKnowledge = db.DeveloperKnowledge.Find(id, ability); db.DeveloperKnowledge.Remove(developerKnowledge); db.SaveChanges(); return(RedirectToAction("Index", new { id = developerKnowledge.idEmployeeFKPK })); }
private void Add(Developer developer, KnowledgeDto knowledgeDto) { var developerKnowledge = new DeveloperKnowledge() { Knowledge = _repository.GetByKey <Knowledge> (knowledgeDto?.Knowledge?.KnowledgeId), Rate = knowledgeDto?.Rate, Developer = developer }; _dataAnnotationValidator.Validate(developerKnowledge); _repository.Add(developerKnowledge); }
// GET: DeveloperKnowledges/Details/5 // no se usa public ActionResult Details(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } DeveloperKnowledge developerKnowledge = db.DeveloperKnowledge.Find(id); if (developerKnowledge == null) { return(HttpNotFound()); } return(View(developerKnowledge)); }
// GET: DeveloperKnowledges/Delete/5 //EFE: Elimina el conocimiento seleccionado. public ActionResult Delete(string id, string ability) { if (id == null || ability == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } DeveloperKnowledge developerKnowledge = db.DeveloperKnowledge.Find(id, ability); if (developerKnowledge == null) { return(HttpNotFound()); } return(View(developerKnowledge)); }
public ActionResult Edit([Bind(Include = "idEmployeeFKPK,devKnowledgePK")] DeveloperKnowledge developerKnowledge) { if (!db.DeveloperKnowledge.Any(x => x.idEmployeeFKPK == developerKnowledge.idEmployeeFKPK && x.devKnowledgePK == developerKnowledge.devKnowledgePK) && ModelState.IsValid) { db.Entry(developerKnowledge).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } else { ViewBag.idEmployeeFKPK = new SelectList(db.Employee, "idEmployeePK", "employeeName", developerKnowledge.idEmployeeFKPK); ModelState.AddModelError("devKnowledgePK", "Este empleado ya posee este conocimiento"); return(View(developerKnowledge)); } }
// GET: DeveloperKnowledges/Edit/5 //EFE: Edita el conocimiento requerido public ActionResult Edit(string id, string ability) { if (id == null || ability == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } DeveloperKnowledge developerKnowledge = db.DeveloperKnowledge.Find(id, ability); if (developerKnowledge == null) { return(HttpNotFound()); } ViewBag.idEmployeeFKPK = new SelectList(db.Employee, "idEmployeePK", "employeeName", developerKnowledge.idEmployeeFKPK); return(View(developerKnowledge)); }
public ActionResult Create([Bind(Include = "idEmployeeFKPK,devKnowledgePK")] DeveloperKnowledge developerKnowledge) { if (db.DeveloperKnowledge.Any(x => x.devKnowledgePK == developerKnowledge.devKnowledgePK) && db.DeveloperKnowledge.Any(x => x.idEmployeeFKPK == developerKnowledge.idEmployeeFKPK)) { ModelState.AddModelError("devKnowledgePK", "Este empleado ya posee este conocimiento"); ViewBag.idEmployeeFKPK = new SelectList(db.Employee, "idEmployeePK", "employeeName", developerKnowledge.idEmployeeFKPK); return(View(developerKnowledge)); } if (ModelState.IsValid) { db.DeveloperKnowledge.Add(developerKnowledge); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(developerKnowledge)); }
private long GetLoadScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var reviwes = new List <long>(); var overitems = pullRequestContext.Overlap; if (overitems.Count == 0) { return(0); } foreach (var pullreq in pullRequestContext.KnowledgeMap.ReviewBasedKnowledgeMap.GetDeveloperReviews(reviewer.DeveloperName)) { reviwes.Add(pullreq.Number); } var count = overitems.Intersect(reviwes); return(count.Count()); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { double spreadingScore = GetPersistSpreadingScore(pullRequestContext, reviewer); var expertiseScore = ComputeBirdReviewerScore(pullRequestContext, reviewer); var alpha = pullRequestContext.GetRiskyFiles(_riskOwenershipThreshold).Length > 0 ? 1 : 0; var score = (1 - alpha) * expertiseScore + alpha * spreadingScore; return(score); }
internal abstract double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer);
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); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var totalCommits = pullRequestContext.PullRequestKnowledgeables.Sum(q => q.NumberOfCommits); var totalReviews = pullRequestContext.PullRequestKnowledgeables.Sum(q => q.NumberOfReviews); if (totalCommits + totalReviews == 0) { return(0); } return((reviewer.NumberOfCommits + reviewer.NumberOfCommits) / (double)(totalCommits + totalReviews)); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { 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; return(1 - specializedKnowledge); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var alpha = pullRequestContext.GetRiskyFiles(_riskOwenershipThreshold).Length > 0 ? 1 : 0; if (alpha == 1) { double spreadingScore = GetPersistSpreadingScore(pullRequestContext, reviewer); return(spreadingScore); } else { double loadscore = GetLoadScore(pullRequestContext, reviewer); var load = Math.Pow(Math.E, (0.5 * loadscore)); var expertiseScore = ComputeBirdReviewerScore(pullRequestContext, reviewer); return(expertiseScore / load); } }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var totalLines = pullRequestContext.PullRequestKnowledgeables.Sum(q => q.NumberOfAuthoredLines); if (totalLines == 0) { return(0); } return(reviewer.NumberOfAuthoredLines / (double)totalLines); }
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); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { double?commit_score = 0.0; double?review_score = 0.0; double?neighber_commit_score = 0.0; double?neighber_review_score = 0.0; foreach (var pullRequestFile in pullRequestContext.PullRequestFiles) { var canonicalPath = pullRequestContext.CanononicalPathMapper.GetValueOrDefault(pullRequestFile.FileName); if (canonicalPath == null) { continue; } commit_score += ComputeCommitScore(pullRequestContext, canonicalPath, reviewer); review_score += ComputeReviewScore(pullRequestContext, canonicalPath, reviewer); var blameSnapshot = pullRequestContext.KnowledgeMap.BlameBasedKnowledgeMap.GetSnapshopOfPeriod(pullRequestContext.PullRequestPeriod.Id); var neighbors = blameSnapshot.Trie.GetFileNeighbors(1, canonicalPath); for (int j = 0; j < neighbors.Length; j++) { var neighber_file = neighbors[j]; neighber_commit_score += ComputeCommitScore(pullRequestContext, neighber_file, reviewer); neighber_review_score += ComputeReviewScore(pullRequestContext, neighber_file, reviewer); } } double loadscore = GetLoadScore(pullRequestContext, reviewer); var load = Math.Pow(Math.E, (0.5 * loadscore)); double final_score = Convert.ToDouble(review_score + commit_score + neighber_commit_score + neighber_review_score) / load; double final_score_noload = Convert.ToDouble(review_score + commit_score + neighber_commit_score + neighber_review_score); return(final_score); }
private double ComputeReviewScore(PullRequestContext pullRequestContext, string filePath, DeveloperKnowledge reviewer) { double score = 0.0; DateTime nowTime = pullRequestContext.PullRequest.CreatedAtDateTime ?? DateTime.Now; var data = pullRequestContext.KnowledgeMap.ReviewBasedKnowledgeMap.GetReviowersOnFile(reviewer.DeveloperName, filePath); var reviewNumber = data.Keys.FirstOrDefault(); // var reviewerExpertise = pullRequestContext.KnowledgeMap.PullRequestEffortKnowledgeMap.GetReviewerExpertise(filePath, reviewer.DeveloperName); if (reviewNumber == 0) { return(score); } var recency = data.Values.FirstOrDefault(); if (recency != DateTime.MinValue) { var diff_review = (nowTime - recency).TotalDays == 0 ? 1 : (nowTime - recency).TotalDays; score = reviewNumber / diff_review; } return(score); }
private double ComputeCommitScore(PullRequestContext pullRequestContext, string filePath, DeveloperKnowledge reviewer) { double score = 0.0; DateTime reviewer_recency = DateTime.MinValue; DateTime nowTime = pullRequestContext.PullRequest.CreatedAtDateTime ?? DateTime.Now; var reviewerCommits = pullRequestContext.KnowledgeMap.CommitBasedKnowledgeMap.GetDeveloperCommitsOnFile(reviewer.DeveloperName, filePath, nowTime, reviewer_recency); if (reviewerCommits == 0) { return(score); } if (reviewer_recency != DateTime.MinValue) { var diff_review = (nowTime - reviewer_recency).TotalDays == 0 ? 1 : (nowTime - reviewer_recency).TotalDays; score = reviewerCommits / diff_review; } return(score); }
private double ComputeBirdReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { var score = 0.0; foreach (var pullRequestFile in pullRequestContext.PullRequestFiles) { var canonicalPath = pullRequestContext.CanononicalPathMapper.GetValueOrDefault(pullRequestFile.FileName); if (canonicalPath == null) { continue; } var fileExpertise = pullRequestContext.KnowledgeMap.PullRequestEffortKnowledgeMap.GetFileExpertise(canonicalPath); if (fileExpertise.TotalComments == 0) { continue; } var reviewerExpertise = pullRequestContext.KnowledgeMap.PullRequestEffortKnowledgeMap.GetReviewerExpertise(canonicalPath, reviewer.DeveloperName); if (reviewerExpertise == (0, 0, null)) { continue; } var scoreTotalComments = reviewerExpertise.TotalComments / (double)fileExpertise.TotalComments; var scoreTotalWorkDays = reviewerExpertise.TotalWorkDays / (double)fileExpertise.TotalWorkDays; var scoreRecency = (fileExpertise.RecentWorkDay == reviewerExpertise.RecentWorkDay) ? 1 : 1 / (fileExpertise.RecentWorkDay - reviewerExpertise.RecentWorkDay).Value.TotalDays; score += scoreTotalComments + scoreTotalWorkDays + scoreRecency; } return(score / (3 * pullRequestContext.PullRequestFiles.Length)); }
internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer) { return(_rnd.NextDouble()); }