找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 1248|回复: 2

[【原创】] 如何排除程序中的bug

[复制链接]
发表于 2007-9-8 16:41:42 | 显示全部楼层 |阅读模式
一点想法,在此抛砖引玉了。

找bug的方法,是值得研究的,因为找bug的时间在软件开发周期中占有极大的比例。只要统计一下,软件开发者花费在排除bug上的时间,与花费在写代码上的时间的比例,就可以知道。排除bug的时间在整个软件开发周期中占到了80%以上。

所以,排除bug的方法就有必要好好研究一下。下面是三种典型的排除bug的方法:

一种是猜bug的方法。很多开发者,并没有花心思去排除bug,而是直接在原代码中找到某个可能出错的地方,修改一下,再执行一次看看bug还在不在,如果还在,就换个地方修改,看看bug解决了没有,如此住复,只到bug解决。这种方法并不是真正的排除bug,而是开发者觉得无法分析出bug出现的原因后,放弃了分析,转而使用省脑力耗体力的方法来猜bug。我们软件组的人,不允许出现这种猜bug的情况,因为这种事情只有业余选手才会干出来。

一种是设断点调试的方法。设断点之后,可以仔细分析当前的变量、结构是否正常,从而找到bug。这个方法虽然比上一种方法要高效,但当随着程序趋于复杂时,调试bug花费的时间会越来越多,也会出现补了东边儿,漏了西边儿的情况。另外,在嵌入式领域,很多情况下是没有办法调试的,而且有很多bug是几天难得一见,不会让你有那么好的机会设下断点调试。

一种是断言分析法。对复杂的逻辑、输入输出条件等,设定断言或判断,并将不符合预想结果的错误信息输出。错误信息输出的越详细越好,而且可以存成log文件待事后分析。这样一但出现bug,就可以很快的通过断言、错误信息输出判断出bug所在的位置,从而即时解决。

在以上几种除错方法中,我最提倡的是第三种断言分析法。对于断言分析法,应该再辅助以自动测试代码,对软件中可以测试的函数、模块均进行自动测试,对边缘条件、分支组合进行尽可能的测试。一个一个的函数、模块都测好了,软件出现bug的机会就会减少,就好像盖高楼大厦时,地基要打牢一样。

断言分析法,与自动测试配合之后。在软件出现bug时,就应该冷静的思考一下,是什么地方可能导致bug,因为有了断言与自动测试,我们可以肯定的排除很多种情况,这样一条一条的理下来,最终达到不用调试,而是凭借逻辑分析,直指bug所在。达到这一步,一个软件高手就诞生了。
回复

使用道具 举报

发表于 2007-9-8 22:02:11 | 显示全部楼层
受益非浅,凡事预则立!
回复

使用道具 举报

发表于 2007-9-9 21:35:27 | 显示全部楼层
学习到不少,这种帖子不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-26 20:22 , Processed in 0.294148 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表