Example #1
0
        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());
        }
Example #2
0
        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 }));
        }
Example #3
0
        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);
        }
Example #4
0
        // 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));
        }
Example #5
0
        // 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));
        }
Example #6
0
 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));
     }
 }
Example #7
0
        // 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));
        }
Example #8
0
        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));
        }
Example #9
0
        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);
        }
Example #11
0
 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));
        }
Example #14
0
        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);
        }
Example #15
0
        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);
        }
Example #18
0
        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);
        }
Example #19
0
        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);
        }
Example #20
0
        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));
        }
Example #22
0
 internal override double ComputeReviewerScore(PullRequestContext pullRequestContext, DeveloperKnowledge reviewer)
 {
     return(_rnd.NextDouble());
 }