Ejemplo n.º 1
0
 public WorkItemMetricsViewModel(WorkItemMetricsModel model)
 {
     WorkItemID           = model.WorkItemID;
     WorkItemTitle        = model.WorkItemTitle;
     FormattedDevelopment = model.SumCompletedDev == 0 ? "Not Started" : $"{model.SumCompletedDev} / {model.SumOriginalDev} ({model.DevAccuracy.ToString("P0")})";
     FormattedTesting     = model.SumCompletedTesting == 0 ? "Not Started" : $"{model.SumCompletedTesting} / {model.SumOriginalTesting} ({model.TestingAccuracy.ToString("P0")})";
     FormattedOverall     = $"{model.SumCompleted} / {model.SumOriginal} ({model.OverallAccuracy.ToString("P0")})";
     Closed = model.Closed;
     DevelopmentAccuracy = model.DevAccuracy * 100;
     TestingAccuracy     = model.TestingAccuracy * 100;
     OverallAccuracy     = model.OverallAccuracy * 100;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Calculates metrics for a set of work items in a single sprint.
        /// </summary>
        /// <param name="workItems"></param>
        /// <returns></returns>
        private IEnumerable <WorkItemMetricsModel> CalculateSprintMetrics(IEnumerable <WorkItemModel> workItems)
        {
            return(workItems.AsParallel().Where(x => x.IsUserStory).Select(topLevelWorkItem =>
            {
                var metrics = new WorkItemMetricsModel
                {
                    WorkItemID = topLevelWorkItem.ID,
                    WorkItemTitle = topLevelWorkItem.Title,
                    Closed = topLevelWorkItem.Closed
                };

                foreach (var childItem in topLevelWorkItem.ChildItems)
                {
                    if (!childItem.Closed)
                    {
                        continue;
                    }

                    switch (childItem.Activity)
                    {
                    case "Development":
                        metrics.SumCompletedDev += childItem.CompletedWork.GetValueOrDefault();
                        metrics.SumOriginalDev += childItem.OriginalEstimate.GetValueOrDefault();
                        break;

                    case "Testing":
                        metrics.SumCompletedTesting += childItem.CompletedWork.GetValueOrDefault();
                        metrics.SumOriginalTesting += childItem.OriginalEstimate.GetValueOrDefault();
                        break;
                    }
                }

                metrics.SumOriginal = metrics.SumOriginalDev + metrics.SumOriginalTesting;
                metrics.SumCompleted = metrics.SumCompletedDev + metrics.SumCompletedTesting;

                if (metrics.SumCompletedDev != 0)
                {
                    metrics.DevAccuracy = (float)Math.Round(metrics.SumOriginalDev / metrics.SumCompletedDev, 2);
                }

                if (metrics.SumCompletedTesting != 0)
                {
                    metrics.TestingAccuracy = (float)Math.Round(metrics.SumOriginalTesting / metrics.SumCompletedTesting, 2);
                }

                if (metrics.SumCompleted != 0)
                {
                    metrics.OverallAccuracy = (float)Math.Round(metrics.SumOriginal / metrics.SumCompleted, 2);
                }

                return metrics;
            }));
        }