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

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

缺陷优先

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

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

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

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

2.调试的思维

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

3.自己解决质量问题

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

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

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

5.向后兼容

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

6.海森堡缺陷

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

7.嵌入式软件

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

8. 第三方软件的错误

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

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

  1. <读书笔记>软件调试之道 :从大局看调试-理想的调试环境

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

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

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

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

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

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

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

  5. <读书笔记>软件调试之道 :问题的核心-诊断

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

  6. <读书笔记>软件调试之道 :问题的核心-重现问题

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

  7. <读书笔记> 代码整洁之道

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

  8. <读书笔记>软件调试之道 :实证方法

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

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

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

随机推荐

  1. unity, 调节图片导入尺寸

    unity中直接导入高清图,通过max size来调节图片尺寸. 打包的时候通过看editor log或通过插件来监视是否有过大尺寸的图片.

  2. python 模块库

    python mod --------------------os              https://segmentfault.com/a/1190000003061079logging    ...

  3. React Native 网络请求

    如下面的Code,分别介绍了GET,POST,以及使用XMLHttpRequest的Get请求. import React, { Component } from 'react'; import { ...

  4. linux for循环更改文件名字

    #!/bin/bash # for a in CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo Ce ...

  5. [转]C/C++ 实现文件透明加解密

    今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市, 我们高科技的从业者,真是造原子弹不如卖茶 ...

  6. 数据挖掘之KNN算法(C#实现)

    在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅 ...

  7. mysql处理高并发,防止库存超卖

    先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购.秒杀.特价之类的活动,而这样的活动有一个共同的特点就是访问量激增.上千甚至上万人抢购一个商品.然而,作为活动商品,库存肯定是很有限的,如何控 ...

  8. 每天一个 Linux 命令(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  9. dedecms 模板静态化

    require_once (dirname(__FILE__) . "/../include/common.inc.php"); require_once DEDEINC.&quo ...

  10. dbms_output.put_line 不显示

    再写oracle sql时候,写循环语句,想知道循环对不对,使用dbms_output.put_line()没有打印出任何东西,网上查找发现少了一句. 加上 set serverouput on  就 ...