声明:本文档的内容主要来源于书籍《软件调试修炼之道》作者Paul Butcher,属于读书笔记。欢迎转载!

--------------------------------------------------------------------------------------------

缺陷优先

如何使缺陷修复与软件开发相结合?

如何估计缺陷修复花费的时间?

如何确保项目不会陷入《人月神话》中所描述的无数缺陷修复的焦油坑中呢?

  1. 缺陷优先
  • 要采用早起缺陷修复原则,并且基于以下两个原则
  1. 测试、代码审查、让用户使用软件要贯穿于整个开发过程中
  2. 缺陷修复要由于其它任何事情
  • 早期缺陷修复可以大大降低软件运行的不可靠性,并估计修复上所需要的大概时间以调整你的测试计划,后期修复只会积累技术债务,也不知道何时能修复他们并结束项目。
  • 质量低下具有传染性,因此要没有破窗,软件开发与维护,是一个持续与熵抗争的过程

2.调试的思维

  • 调试首先是一种心理活动,要保持健康的调试心态。天真的说,“没有破窗”可以被理解为只有绝对完美的情况下才能实现。任何参加过软件开发的人都知道,缺陷不可避免,无论多么努力,总会有遗漏,如何解决这个问题?
  • 最有效的思维模式是务实的零容忍策略,非常接近于零,但是用务实的心态去实现,虽然我们远远做不到完美,但是可以用正确的方式无限的接近它。
  • 采取无破窗策略时,要分清是缺陷还是特性,缺陷是无意识行为,其它都是特性,对于客户来说二者可能一样,但是软件开发人员要分清,并且要明白特性就是软件按照设计运行的,问题没有缺陷那么严重。

3.自己解决质量问题

  • 没有快速修复缺陷的灵丹妙药,唯一可靠的方法就是修复所有缺陷。 停止开发有缺陷的程序,构建实验,观察结果
  • 把不干净的代码从干净的代码中分离出来,如果没有足够的时间修复它,那么就先阻断它,这种方法的一个变化形式是采用“沙箱模型”来解决问题模块。
  • 错误分类,定期更新缺陷数据库,并保证新创建项目具有合理的优先级。
  • 缺陷闪电战,即在一天、一周或者一个时期内,除了修复缺陷不做其它任何工作,但是要谨慎使用,持续时间一长,很容易让人疲惫,并累垮每一个人。
  • 专项小组,是闪电缺陷战的变形,让一个小组在有限的时间内聚集在一起解决特殊的质量问题。

4.修复已经发布的软件时,要集中精力减少风险

  • 一个真正的修复可能涉及大范围的软件重构,深层次的软件体系变化,在缺少发布过程的正常检验和各环节平衡的前提下,很难确定其带来的连锁反应,最终使事情变得更糟而不是更好。因此实施一个补丁时,治标不治本可能是一个更好的选择。
  • 不要以为修复程序试一次修改就疏忽大意,要注意与这样的修复产生关联的潜在问题,因此要尽可能多的检查。
  • 在开发版经历完整的发布周期时,要得到一个完整的、解决根本的修复。

5.向后兼容

  • 确定代码本身的修复不会引起兼容性问题,回归测试可以查明向后兼容性问题
  • 解决兼容性问题,如果确认导致兼容性问题,那么需要按照下面的选择
  1. 提供迁移办法
  2. 实现一个兼容模式
  3. 提供预警
  4. 不修复缺陷

6.海森堡缺陷

  • 如果在调试器下运行软件,尝试将插桩直接加到源码中。
  • 海森堡缺陷依赖于某些不确定性因素,这本身就是一条线索,把你的任务变为寻找某种方法来收集你所需要的信息,这种方法对软件影响极小,保证不会改变它的行为
  • 修复该缺陷的唯一办法就是比平时更仔细些,确保你真正了解潜藏的根本原因。
  • 在未了解问题本质前,不要假设你已经修复它了。比如缺陷是由一个未出生的变量引起的,那么要弄明白未出生的变量如何引起你观察到的行为?将其初始化为坏值,你能看到预期的结果吗? 性能缺陷 寻找瓶颈,是哪个特定区域的代码限制了整体性能 准确性能分析

7.嵌入式软件

  • 调试嵌入式软件是非常棘手的,不是它错综复杂,而是它所在的运行环境。
  • 利用嵌入式调试工具,可以通过网络电缆进行远程调试,或者通过JTAG,SW在线调试,其中挑战之一是软硬件并行发展,通常修复一个硬件问题比解决软件问题更难。
  • 提取信息的痛苦过程,一个LCD、LED、串口等手段当做通信通道往往就够了,虽然并不方便,但是它是可能的。
  • 利用逻辑分析仪作为软件的调试工具,解决时序错误!

8. 第三方软件的错误

  • 不要太快去指责,第三方也只是代码,也会包含缺陷,首先要怀疑自己的代码。
  • 如果确信第三方代码存在缺陷,那么出了提交错误报告并等待解决,别无它法,最好是短期内搁置问题。
  • 开源代码,很多开源项目只获得了有限的关注,因此其开源不意味着调试的结束。
  • 开源社区的一个伟大之处是,为我们提高了高质量、免费的软件,往往高质量的技术支持也是免费的。因此要学会有效的寻求帮助。

<读书笔记>软件调试之道 :从大局看调试-零容忍策略的更多相关文章

  1. &lt;读书笔记&gt;软件调试之道 :从大局看调试-理想的调试环境

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...

  2. &lt;读书笔记&gt;软件调试之道 :从大局看调试-发现代码存在问题

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...

  3. &lt;读书笔记&gt;软件调试之道 :问题的核心-修复后的反思

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...

  4. &lt;读书笔记&gt;软件调试之道 :问题的核心-如何修复缺陷

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! 修复缺陷 对于一个好的修复来说,不仅仅是让软件运行正确,还需要为将来奠定基础.一 ...

  5. &lt;读书笔记&gt;软件调试之道 :问题的核心-诊断

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 不要急于动手! 尽管可以利用各种工具和技术以及软件自身查找缺陷,但是你最重要的财富是你的智 ...

  6. &lt;读书笔记&gt;软件调试之道 :问题的核心-重现问题

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 重现第一,提问第二 问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它 ...

  7. &lt;读书笔记&gt; 代码整洁之道

    概述      1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...

  8. &lt;读书笔记&gt;软件调试之道 :实证方法

    有效调试不仅仅是排除缺陷,其包含如下几个步骤 弄明白软件为何运行错误 修复这个问题 避免破坏其它部分 保持或者提高代码的总体质量 确保同样的问题不在其它地方发生,也不会再次发生 构建实验.观察结果 依 ...

  9. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

随机推荐

  1. 72个可交付成果(PMBOK2008)

    成果名称 包括内容 来自 用于 事业环境因素 组织文化.政府法规.行业标准.市场条件.工作授权系统.商业数据库.项目管理信息系统 外部现有的 启动.规划.执行过程的输入 组织过程资产 流程与程序(模板 ...

  2. Predicting purchase behavior from social media-www2013

    1.Information publication:www2013 author:Yongzheng Zhang 2.What 用社交媒体用户特征 预测用户购买商品类别(排序问题) 3.Dataset ...

  3. hive中行转换成列

    python代码 #!/bin/bashimport sys; if __name__=='__main__': for line in sys.stdin: m=line.strip().split ...

  4. There is an internal error in the React performance measurement code.Did not expect componentDidMount timer to start while render timer is still in progress for another instance

    一.There is an internal error in the React performance measurement code.Did not expect componentDidMo ...

  5. c#String的不变特性,可读但不可写性

    谈到字符串,大家自然觉得简单,但是总是有一些小的问题隐约出现,下面我就系统的说一下字符串的问题,有说不到日后再予补充. 1,首先String是一个类,string只是String类的一个别名,别名的意 ...

  6. swift学习网站

    http://letsswift.com/category/swiftguide/http://www.imooc.com/course/list?is_easy=3&c=ioshttp:// ...

  7. llnq SqlMethods like

    http://www.cnblogs.com/freeliver54/archive/2009/09/05/1560815.html http://www.cnblogs.com/chen1388/a ...

  8. jetty上传 Form too large: 275782 &gt; 200000

    1,找到jetty服务器下的jetty.xml,在 <Configure id="Server" class="org.eclipse.jetty.server.S ...

  9. Linux/UNIX流程关系

    流程关系 过程组 除了一个过程,每个过程ID此外.也属于一个进程组.过程基是一个或多个过程的集合. 通常它们与相同的作业相关联,它接受各种信号从相同终端. #include<unistd.h&g ...

  10. Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务

    目录 目录 1.GitLab11.3.9的安装 2.域名在阿里云托管,申请免费的1年证书 3.Gitlab 的 https 配置 4.Nginx 配置 https,反向代理指向 Gitlab 配置 目 ...