public void Single_throughput_history() { var historicalTPs = new[] { 1, 2, 3 }; var randomNumbers = new Queue <int>(new[] { 2, 2, 2, 2, 0, 1, 2, 0, 1, 2 }); var sut = new SoftwareDeliverySimulation(2, maxNumber => randomNumbers.Dequeue()); var result = sut.SimulateIssueDeliveryBasedOnThroughput(new DateTime(2019, 10, 3), 10, historicalTPs); Assert.Empty(randomNumbers); Assert.Equal(new[] { 5, 7 }, result); }
public void Forecast_8_issues() { DateTime START_DATE = new DateTime(2019, 11, 18); const int NUMBER_OF_ISSUES = 8; var issues = IssueRepository.Import().ToArray(); var tp = issues.BusinessDayThroughputs(); _testOutputHelper.WriteLine($"TP sum: {tp.Sum()}"); var sut = new SoftwareDeliverySimulation(); var simulationresult = sut.SimulateIssueDeliveryBasedOnThroughput(START_DATE, NUMBER_OF_ISSUES, tp); var distribution = Statistics.Distribution(simulationresult); var deDE = new CultureInfo("de-DE"); foreach (var x in distribution.OrderBy(o => o.value)) { _testOutputHelper.WriteLine($"{x.value}\t{x.frequency}\t{x.probability.ToString("0.000", deDE)}\t{x.percentile.ToString("0.0", deDE)}"); } }
public void Forecast_10_stories_with_single_issue_forecast() { DateTime START_DATE = new DateTime(2019, 11, 18); const int NUMBER_OF_STORIES = 10; var issues = IssueRepository.Import().ToArray(); var issuesPerStory = issues.IssuesPerStory(); var sut = new SoftwareDeliverySimulation(); var issueSimulationresult = sut.SimulateIssuesDerivedFromStories( Enumerable.Range(1, NUMBER_OF_STORIES).Select(_ => issuesPerStory).ToArray() ); var issueDistribution = Statistics.Distribution(issueSimulationresult); _testOutputHelper.WriteLine("issues from stories forecast"); var deDE = new CultureInfo("de-DE"); foreach (var x in issueDistribution.OrderBy(o => o.value)) { _testOutputHelper.WriteLine($"{x.value}\t{x.frequency}\t{x.probability.ToString("0.000", deDE)}\t{x.percentile.ToString("0.0", deDE)}"); } _testOutputHelper.WriteLine("delivery forecast"); var number_of_issues = issueDistribution.First(x => x.percentile > 80.0).value; _testOutputHelper.WriteLine($"Number of issues selected: {number_of_issues}"); var tp = issues.BusinessDayThroughputs(); var deliverySimulationresult = sut.SimulateIssueDeliveryBasedOnThroughput(START_DATE, number_of_issues, tp); var distribution = Statistics.Distribution(deliverySimulationresult); foreach (var x in distribution.OrderBy(o => o.value)) { _testOutputHelper.WriteLine($"{x.value}\t{x.frequency}\t{x.probability.ToString("0.000", deDE)}\t{x.percentile.ToString("0.0", deDE)}"); } }
public void Multiple_throughput_histories() { var historicalTPsA = new[] { 1, 2, 3 }; var historicalTPsB = new[] { 0, 1, 2 }; var randomNumbers = new Queue <int>(new[] { 1, 2, // 2+2=4 2, 0, // 3+0=3/7 0, 2, // 1+2=3/10 0, 1, // 1+1=2 1, 0, // 2+0=2/4 2, 0, // 3+0=3/7 0, 0, // 1+0=1/8 0, 0, // 1+0=1/9 1, 2 // 2+2=4/13 }); //2,2,3,1,1, var sut = new SoftwareDeliverySimulation(2, maxNumber => randomNumbers.Dequeue()); var result = sut.SimulateIssueDeliveryBasedOnThroughput(new DateTime(2019, 10, 3), 10, historicalTPsA, historicalTPsB); Assert.Empty(randomNumbers); Assert.Equal(new[] { 4, 7 }, result); }