1

我有一个程序要从一种语言移植到另一种语言。我正在使用我自己开发的翻译程序来做这件事。这样做的相关结果是,我预计我的系统中存在许多我需要查找和修复的错误。每个错误都可能出现在许多地方,修复它会修复它出现的所有地方的错误。(我觉得有一个非常大的杠杆,我在短端推动,我非常努力,但是当事情移动时,它们会移动很多。)

我有能力运行执行日志差异,所以我通过测试套件在偏离原始程序执行之前可以运行它多远来衡量我的进度。(感谢 BeyondCompare 的 [whatever you want],它适用于 ~1M 行文件:D)

问题是:如果我将运行长度绘制为时间的函数,我应该期望看到什么形状?(更多时间 == 删除更多错误)

我的第一个想法是类似于泊松分布。然而,因为修复每个错误也会删除所有其他出现的错误,这不应该是完全正确的。

(顺便说一句,这可能对估计程序何时完成调试具有现实意义。)

编辑: 问题的更抽象的陈述:

给定从范围 [0,M](其中 N>>M)中选择的 N 个整数的有序列表,该列表沿列表中的位置均匀分布,但不一定具有数字的均匀分布。最后一个“新”号码的预期位置是什么?倒数第二个呢?ETC?

4

2 回答 2

1

工程师总是受过训练以寻找指数曲线:

错误(t) = ceil [ c 1 e –c 2 t ] + R(t

其中 c 1和 c 2是常数,取决于测试用例的数量和您的编码技能。R( ) 是一个随机函数,其幅度和分布取决于蝴蝶效应、昨晚的睡眠量以及截止日期和经理的距离。

  • 在开始编码之前,在 t = 0 时,所有测试用例都将失败,产生至少 c 1 个错误。

  • 随着您编写代码并且t增加,指数逐渐向零减小,导致计算出的错误数最终达到 1。这是因为我们都知道“总会有一个错误”。

于 2008-11-04T02:26:11.737 回答
0

一般来说,作为时间函数发现的错误的数量应遵循类泊松分布。假设 bug 在发现时基本上已修复,那么打开的 bug 的数量应该遵循相同的分布。

实际上,我在职业生涯的早期就使用它来向我的业务部门“证明”某个特定的功能集还没有准备好发布。我为当前项目以及前两个版本绘制了新的和打开的错误作为时间函数的图表。两个较旧的数据集显示出最初的急剧上升、峰值和逐渐下降,直到它们的发布日期。当前数据显示线性增长,一直持续到我创建图表的那一天。

我们又进行了几天的测试,测试人员接受了有关如何更有效地测试产品的培训。由于这两个决定,该版本相对没有缺陷。

于 2008-11-04T02:53:05.833 回答