程序中错误量的估算--测试、捞鱼问题
2017-10-26 21:53
162 查看
两个小组独立地测试同一个程序,第一组发现25个错误,第二组发现30个错误,在两个小组发现的错误中有15个是共同的,那么可以估计程序中的错误总数是 ___个。
A.25 B.30 C.50 D.60
当然,任何一个了解估算方法的朋友都可以根据公式计算出最终的结果是50个,这没有什么问题。——但是,我在这里引用这个题目,是希望我们可以把学习这件事情通过类比变得更加有趣一点。
其实,如何估算一个系统中存在的缺陷数,我们的老祖宗早就有现成的方法了。不信,请看我在我们老祖宗的数学专著中找到的一个实践问题:“有一口鱼塘,不知道其中有多少条鱼,如何才能估算出池塘中鱼的数量?”(当然,原文不是这样,请原谅我一下子找不到出处,只好凭记忆用我的语言描述一下了)。我们老祖宗给出的答案是这样的:
首先,从鱼塘中打捞出一些鱼(假设数量为m);
将这些鱼做上记号,然后将其放回鱼塘;
等待一段时间,等到鱼均匀分布在鱼塘中了之后,再次打捞上来一些鱼(假设数量为n);
统计第二次打捞上来的鱼中的带记号者(假设数量为p);
计算得出鱼塘中鱼的数量为 S = m / (p/n)
对这个答案最简单的理解是:假设第一次做了记号的鱼在鱼塘中是均匀分布的,第二次打捞上来的n条鱼中有p条是有记号的,则说明有记号的鱼的分布密度是p/n,鱼塘中一共有m条有记号的鱼,当然总的鱼数量就是 S = m / (p/n)了。
再回到我们的原始问题,很容易做一个类比,第一个小组发现了25个缺陷(相当于第一次打捞的鱼m),第二个小组发现了30个缺陷(相当于第二次打捞上来的鱼n),两者相同的是15个(相当于是p),所以答案是 50。
所以,从现在开始,不要再认为这个方法是什么深奥的方法——看看,我们的老祖宗都能熟练运用呢
本来,到这里就可以告一段落了,可是我们能不能再深入点思考这个问题呢?
这种方法显然是可以得到一个估算结果,但这种方法在哪些情况下不合适,使用时有什么注意事项没有呢?
还是回过头看我们养鱼的例子,很显然,我们讨论的前提是“做记号的鱼在池塘中分布均匀”,如果这个条件不满足,我们的估算结果显然是有很大的偏差的。就鱼塘来说,不同类型的鱼由于喜欢的食物种类不同,喜欢分布在不同的层次,这样一来的话,在打捞的时候就要注意,如果只侧重在某一个水层,显然结果是有很大的偏差的,另外,由于鱼塘边上的温度相对较低,夏天鱼更加喜欢在鱼塘边休息……,可见,要达到“平均”这样的条件还是有难度的…… —— 等等,我们讨论了这么久的鱼,和我们的缺陷有什么关系呢?
别忘了,缺陷在系统中的分布和鱼在鱼塘中的分布可是有异曲同工之妙的哦。缺陷有不同的类型(功能缺陷,性能缺陷,安全性缺陷……),分布在不同的模块,由于模块设计和实现人员的水平的差异,模块自身复杂度的差异等,不同模块中的缺陷分布显然是不同的,一个系统中,由于测试的测试不同,不同类型缺陷的发现效率也是不同的……——再看看,这和我们的鱼塘是不是一回事?
原文:http://www.blogjava.net/xiekai-blog/archive/2008/08/19/222929.html
A.25 B.30 C.50 D.60
当然,任何一个了解估算方法的朋友都可以根据公式计算出最终的结果是50个,这没有什么问题。——但是,我在这里引用这个题目,是希望我们可以把学习这件事情通过类比变得更加有趣一点。
其实,如何估算一个系统中存在的缺陷数,我们的老祖宗早就有现成的方法了。不信,请看我在我们老祖宗的数学专著中找到的一个实践问题:“有一口鱼塘,不知道其中有多少条鱼,如何才能估算出池塘中鱼的数量?”(当然,原文不是这样,请原谅我一下子找不到出处,只好凭记忆用我的语言描述一下了)。我们老祖宗给出的答案是这样的:
首先,从鱼塘中打捞出一些鱼(假设数量为m);
将这些鱼做上记号,然后将其放回鱼塘;
等待一段时间,等到鱼均匀分布在鱼塘中了之后,再次打捞上来一些鱼(假设数量为n);
统计第二次打捞上来的鱼中的带记号者(假设数量为p);
计算得出鱼塘中鱼的数量为 S = m / (p/n)
对这个答案最简单的理解是:假设第一次做了记号的鱼在鱼塘中是均匀分布的,第二次打捞上来的n条鱼中有p条是有记号的,则说明有记号的鱼的分布密度是p/n,鱼塘中一共有m条有记号的鱼,当然总的鱼数量就是 S = m / (p/n)了。
再回到我们的原始问题,很容易做一个类比,第一个小组发现了25个缺陷(相当于第一次打捞的鱼m),第二个小组发现了30个缺陷(相当于第二次打捞上来的鱼n),两者相同的是15个(相当于是p),所以答案是 50。
所以,从现在开始,不要再认为这个方法是什么深奥的方法——看看,我们的老祖宗都能熟练运用呢
本来,到这里就可以告一段落了,可是我们能不能再深入点思考这个问题呢?
这种方法显然是可以得到一个估算结果,但这种方法在哪些情况下不合适,使用时有什么注意事项没有呢?
还是回过头看我们养鱼的例子,很显然,我们讨论的前提是“做记号的鱼在池塘中分布均匀”,如果这个条件不满足,我们的估算结果显然是有很大的偏差的。就鱼塘来说,不同类型的鱼由于喜欢的食物种类不同,喜欢分布在不同的层次,这样一来的话,在打捞的时候就要注意,如果只侧重在某一个水层,显然结果是有很大的偏差的,另外,由于鱼塘边上的温度相对较低,夏天鱼更加喜欢在鱼塘边休息……,可见,要达到“平均”这样的条件还是有难度的…… —— 等等,我们讨论了这么久的鱼,和我们的缺陷有什么关系呢?
别忘了,缺陷在系统中的分布和鱼在鱼塘中的分布可是有异曲同工之妙的哦。缺陷有不同的类型(功能缺陷,性能缺陷,安全性缺陷……),分布在不同的模块,由于模块设计和实现人员的水平的差异,模块自身复杂度的差异等,不同模块中的缺陷分布显然是不同的,一个系统中,由于测试的测试不同,不同类型缺陷的发现效率也是不同的……——再看看,这和我们的鱼塘是不是一回事?
原文:http://www.blogjava.net/xiekai-blog/archive/2008/08/19/222929.html
相关文章推荐
- spark on yarn 出现的问题【测试wordcount程序遇到的错误,ipc.client连接到yarn的端口失败】
- 在做项目时偶尔会遇到这样的问题,有点感觉莫名其妙,也不是什么具体程序的错误,那倒时好发现。感觉无从下手,所以就从CSDN上狠搜了一下,有了感觉了之从记载下来以免看好!
- 程序错误信息"unfortunately android keyboard has stopped“问题
- 修改桌面堆栈大小,解决运行大量程序时出现”Out of Memory”(内存不足)错误信息的问题
- 解决vc++DEBUG ERROR问题前几天师弟调试程序的时候出现了这样一个错误,出错的位置是在delete [] 一个动态分配的数组时出现的。 经过调查发现错误是因为他之前在给数组赋值的时候越界了
- ANSYS调用fortran程序(cfx5mkext 错误问题的解决方法)
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 在程序出现问题,当找不到错误时,第一时间用try ,catch包括起来
- 解决MATLAB安装软件出现错误Error 1935安装程序集问题
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 软件测试(二)——分析程序中的错误(Fault,Failure,Error)
- SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
- 打开office出现错误:向程序发送命令时出现问题 无法更改 中注册的office 加载项的连接状态 解决办法
- Win2000/XP 打开方式-选择程序错误相关问题
- 程序RPC 1726错误问题的追踪
- 微信小程序开发之真机测试 地图定位 map API 无法获取当前位置的问题
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx
- SQL SERVER问题解决:已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程。)
- 关于ORA-00257问题的解决(归档程序错误)
- 关于ORA-00257问题的解决(归档程序错误)