日志档案

发表于 2009/5/7 13:40:36

1

精华帖

标签: 软件测试

测试不能证明软件没有故障---理解Dijkstra

迪杰斯特拉(Dijkstra)被西方学术界称为“结构程序设计之父”和“先知先觉”(Oracle),他一生致力于把程序设计发展成一门科学。

王选曾引用迪杰斯特拉的名言:“程序测试是表明存在故障的非常有效的方法,但对于证明没有故障,调试是很无能为力的”, 认为至今还有意义。

目前,很多纵横科技的研发和技术同事提问:开发完成的软件构件和驱动程序已经提交测试,甚至交付客户使用,为什么过很长时间还会出现问题?

这个问题我也考虑了很久。今天,看到王选院士的文章,我有了答案!

首先,我们理解一下迪杰斯特拉的思想:软件本身就像人!人无完人!复杂软件很难无故障。即便你认识某人很久,你也不能说明此人就不会犯错误。软件,尤其是复杂的软件,其运行路径随软件复杂度的几何级数增长而增长,以至于复杂软件的运行就像一个人的存在,你无法用简单测试的方法证明他肯定不会出故障。

然后,迪杰斯特拉的另一句名言是:“有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引入”。这告诉我们,程序员尤其是系统架构人员能否通过对软件系统架构的设计规避故障的发生,对后续开发软件可能引发故障的几率有着重要的影响。软件设计是门科学,软件的开发是有章可循的,正确的程序开发,可以规避问题的发生。

最后,这些思想影响着软件科学,影响着诸如微软一样的软件企业的管理,在本贴附有《微软的开发管理经验:100%以Bug为核心》。这也给我们如下的思考:
  • 1、软体的目标是正常运行,和应用脱离,就是闭门造车;
  • 2、软件bug的发现来自应用,测试是应用的一小部分;
  • 3、软件有一定的应用环境,所以,规格说明很重要,没有规格说明,测试软件就没有了依据;
  • 4、定义Bug的类型很重要,比如你可以将软件兼容性,软体提示不够准确,不友好,文档与帮助信息中的缺陷等,当做bug,也可以不!
  • 5、软件测试管理规范;
  • 6、最后,测试不可能确定软件不存在bug,只能让Bug数目奔向零。
综上所述,技术团队和研发的同事们,我要说的是:虽然,研发将软体的某些功能开发,提交测试,甚至交付使用,但是,并不能说软件故障完全消除!所以,让我们以平和的心态、科学的方法面对不断出现的软件故障吧。
 
详细,请参阅:

系统分类: 自动化软件   |   用户分类: 无分类   |   来源: 原创

    阅读(8108)    回复(29)