前段时间,我和一个好朋友的一次谈话中,听到这样一句话:
——程序员的数量会不断增长——因为代码量不断增长,并且不断需要越来越多的开发人员来支持。
— 但代码已经过时,其中一些不再受支持。 甚至有可能存在某种平衡。
几天后想起它们,我想知道随着时间的推移,维护代码是否需要越来越多的资源,最终会导致新功能的开发瘫痪,还是需要无限增加程序员的数量? 数学分析和微分方程有助于定性评估支持金额对发展的依赖性并找到问题的答案。
问题一。 能支持“吃掉”所有开发资源吗?
考虑一个程序员团队,其中参与者的数量是恒定的。 他们的工作时间比例 ()用于开发新代码,剩余时间 去支持。 在模型的假设范围内,我们假设第一类活动旨在增加代码量,第二类活动旨在更改代码量(纠正错误)并且不会对代码量产生重大影响。
让我们表示 截至该时间点编写的全部代码量 。 假设编写代码的速度成正比 ,我们得到:
很自然地假设维护代码的劳动力成本与其数量成正比:
или
从那里
我们得到一个可以很容易积分的微分方程。 如果在初始时刻代码量为零,则
在 功能 和 。 这意味着随着时间的推移,新功能的开发逐渐减少到零,并转移所有支持资源。
不过,如果在这段时间里 代码变得过时并且不再受支持,然后是一次需要支持的代码量 已经相等 然后
а 是带有延迟变元的微分方程的解 [1]:
这种方程的解是通过指定值唯一确定的 “在时间开始之前” 。 由于代码在初始时刻之前尚未编写,因此在我们的例子中 在 .
让我们看几个例子。 我们将以年为单位来衡量时间,以数千行来衡量代码量。 那么对于 十数量级的值是可以接受的,我们取50和100。也就是说,开发团队一年内将分别编写五十和十万行代码。 为了 可接受的值可能是: , , 。 这意味着开发团队可以支持一年内编写的代码量,无论是四分之一、一半还是全职。 作为代码的平均生命周期,我们将设置以下值:1年、2年和4年。 对方程进行数值求解,我们获得了函数行为的示例 对于某些参数组合 .
函数的行为 随着代码的老化,它已经发生了变化。 功能不再单调,而是随着时间的推移波动“平静下来”,并有趋向 到某个恒定值。 图表显示:更多 , и ,也就是说,代码老化越慢,新代码的开发速度越快,代码质量越低,留给新功能开发的资源就越少。 人们希望至少举一个例子,其中 “依偎”接近于零。 但这需要选择非常差的开发质量指标和不会长期老化的代码。 即使在左下图中,也为新功能保留了大量资源。 因此,第一个问题的正确答案是这样的:理论上——是的,这是可能的; 实际上——几乎没有。
无法回答的问题:
- 是不是真的 趋于某种极限 为了所有人 ? 如果不适合所有人,那么适合哪些人?
- 如果存在极限,它的值如何取决于 ?
问题二。 代码维护会导致程序员数量无限增长吗?
让我们表示 参与开发新代码的程序员数量。 如上, — 到某个时间点为止编写的代码量 。 然后
让代码支持保持忙碌 程序员。 考虑到代码老化,
从那里
如果 ,然后
因此,第二个问题的答案是否定的:如果新代码的开发人员数量有限,那么在代码老化的情况下,支持并不能导致程序员数量的无限增加。
结论
所考虑的模型是“软”数学模型[2]。 它们很简单。 尽管如此,模拟结果对参数值的依赖性符合实际系统的预期,这有利于模型的充分性和足够的精度来获得高质量的估计。
参考文献
1. Elsgolts L.E.,Norkin S.B. 带有偏差参数的微分方程理论简介。 莫斯科。 《科学》出版社。 1971年。
2.阿诺德六世“硬”和“软”数学模型。 莫斯科。 MCNMO 出版社。 2004年。
来源: habr.com