软件测试修炼之道之——诊断

发表于:2013-3-27 13:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Ribbon    来源:51Testing软件测试网采编

  诊断问题是程序调试的关键,这个阶段,我们可以开始解决缺陷问题了,你可以了解看到的运行结果背后的根本原因。

  真正有效的缺陷修复要求思维方式既开放又有条不紊,解决方法既创新又注重全面综合,这和软件开发的其他很多方面是一样的。

  一种调试方法:提出一个可能提供解释的假设,然后再构建实验去证明你的假设,如下:

  1、按照你对软件运行情况的理解,提出一个可以导致这种运行状况的假设

  2、设计一个实验,证明你的假设正确与否

  3、如果你设计的实验不能证明你的假设,那么重新设计一个实验,然后再次进行实验

  4、如果实验支持你的假设,那么继续进行实验,直到能证明或伪证你的假设

  这种方法十分有效,但却十分抽象,怎么才能把它转化为实际行动呢?

  不同类型的实验:首先,你可以检查该软件内部状态的某个方面(直接运行程序,利用调试器运行等),然后你可以改变软件运行的某个方式(改变输入参数,换一个运行环境等),看它的结果是否有所不同,最后,你可以改变软件本身编码的逻辑,检查这种变化的影响。

  做出什么样的选择要由你的假设的性质而定,而能否做出最佳的选择取决于你的经验和直觉,记住:你的实验必须要有一个明确的目标。

  实验必须起到验证的作用:如果假设始终成立,尽了最大的努力也无法推翻它,那么可以底气十足的宣称你的假设坚不可摧。

  每次只做一个修改:多个修改会导致错误的结论。此规则适用于任何可能影响软件运行的要素。

  记录你所做过的调试:定期回顾你已经尝试过的实验和学到的东西。

  不要忽略任何的细节:凡是你不明白的都是潜在的缺陷。

  相关策略

  插桩:最简单,最直接的方法,充分利用语言环境,收集和整理数据,评估任何代码,测试相关条件。

  假设你正在追踪java代码中数据结构方面的错误,并依次处理各个节点:

while(node != null)
{
    node.process();
    node = node.getNext();
}

  会得到提示:有节点被处理了多次,但我们并不知道不止一次返回的是哪些节点,此时可以使用插桩技术解决这个问题:

HashSet processed = new HashSet();
 
while(node != null)
{
    if(!processed.add(node))
    {
        System.out.printfln("The problem node is:" + node);
    }
     
    node.process();
    node.getNext();
}

  我们可以使用插桩技术编写出自调试软件。

  分而治之:二分法,是一种搜索策略,但是不要太依赖于这种方法,只有当你的搜索空间可以被均分成两部分时才是最有效的。

  利用原代码控制工具:有时我们会陷入回归状态,即,一个缺陷本来不影响正常运行,但做了改变之后却变成了实实在在的缺陷,此时在回归跟踪时有一个特别有价值的工具——源代码控制系统。

  聚焦差异:通过比对差异寻找出最有可能的问题。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号