1

我会尽力解释这一点,但请随时要求澄清。

首先,我将尝试解释问题。

我需要计算任何给定迭代的资源成本(点)数。话虽如此,请想象一个 excel 文档。最左边的列有一个版本列表,或者需要完成的项目。在第一行,列标题是迭代。

我有以下信息。我有每个单独版本所需的资源数量。但是,由于一个版本可以跨越多个迭代,我需要一种方法来公平地分配每次迭代所需的资源。

例如,发布可能在下一次迭代前一天开始,所以我必须只分配一小部分资源给该发布/迭代组合。

我已经在图像中包含了我到目前为止所拥有的内容。由于某种原因,我无法正确计算出正确的数量,这很可能是由于我的数学能力差。我希望这对你们中的一个人来说是微不足道的,并感谢任何尝试。

这是我第一次尝试 javascript,所以也可以随意提出任何建议。

我现在所拥有的大致是这样的。

for (var i = 0; i < results.Iterations.length; i++) {
var iteration = results.Iterations[i];
for (var z = 0; z < results.Releases.length; z++) {
    var release = results.Releases[z];
    release[iteration.Name] = release[iteration.Name] || 0;

    if (dates.inRange(iteration.StartDate, release.ReleaseStartDate, release.ReleaseDate) 
    || dates.inRange(iteration.EndDate, release.ReleaseStartDate, release.ReleaseDate))
    {
       var availableReleaseDays = dates.workingDaysBetweenDates(release.ReleaseStartDate, release.ReleaseDate);
       var availableIterationDays = dates.workingDaysBetweenDates(iteration.StartDate, iteration.EndDate);
       var iterations = calculateIterations(release, results.Iterations, dates);
       var resources = Math.round(release.Resources/iterations );

       release[iteration.Name] += resources;
    }

}

目前来看

4

1 回答 1

1

我已经编写了可以满足您要求的代码。它在这个要点中。

基本思想是,对于每个版本,我将它的所有资源分配给它开始和结束之间的所有工作日。然后我遍历每一天,如果那一天在迭代中,我将这些资源添加到该迭代中。那是你想要做的吗?

我以前的敏捷教练想质疑这种方法。感觉有点过多的长期计划,计算的精度超过了资源估计的准确性……但我已经忍住了这些直觉,足以给你可用的代码。

对于这种情况,这可能有点矫枉过正,但该解决方案使用了一个我正在研究的名为ChartTime的库。ChartTime 允许您进行日期和时间框操作和计算。它具有淘汰节假日和周末的能力,即使不需要这种精度,我也在我的示例解决方案中使用了它来解决您的问题。它还具有我没有使用的时区精度。

ChartTime 是用 CoffeeScript 编写的,我对您的问题的解决方案也是用 CoffeeScript 编写的。CoffeeScript 只是一种更简洁的 JavaScript 语法,它可以编译为 JavaScript,因此您可以直接从 JavaScript 使用 ChartTime 库。我每个周末/晚上都在做这个,效果很好。文档非常好,但还不完整。

于 2012-01-25T02:47:49.063 回答