<读书笔记>软件调试之道 :问题的核心-如何修复缺陷
声明:本文档的内容主要来源于书籍《软件调试修炼之道》作者Paul Butcher,属于读书笔记。欢迎转载!
修复缺陷
对于一个好的修复来说,不仅仅是让软件运行正确,还需要为将来奠定基础。一些列零散的未经仔细考虑的修改,都将是原本的简洁设计逐步消失。
好的修复必须同时实现以下目标:
- 修复问题
- 避免引入回归
- 维持或者提高代码的整体质量
-----------需要参考的规则如下----------
1、清除障碍
- 确保一切从头开始,当你不舍得抛弃诊断阶段所做的修改时,利用源码控制系统。
- 需要对所做的修改进行快速审核,不要跳过这一步!
- 随时做记录,或者保留相关文件的副本。
2、测试
- 如果开发过程包括测试优先(测试驱动)开发,因此你拥有一个自动化测试框架和大量的单元测试工具,修改源码时,这种方法在避免引入回归方面能够收到良好的效果。
- 运行现有的测试程序,并证明它们能够通过
- 添加一个或者多个新的测试程序,后者修复现有的测试程序
- 修复缺陷证明你的修复起了作用(以前的失败不再出现)
- 证明没有引入任何回归(以前通过的测试现在都没有失败)
3、修复问题产生的原因而非修复现象
实际工作中,非常时期,一边是客户愤怒的大声叫嚷,一边是项目经理不耐烦的脸色,你可能就迫于压力只是让缺陷消失,然后进行下一个任务;或者是因为你分析的远远不够,也会导致仅仅修复现象,而非原因。无论这么做多么不好,起码你了解根本原因,并且采取了一个“明智”的办法迅速解决了问题。但是这个办法只是修复缺陷的三个目标之一,后两者更加重要。此时要发挥学术真诚的精神,如果不能确信自己真正理解了问题的症结,就不要相信你的修复!
4、重构
最近几年,随着敏捷开发方法的日益普及,最显著的两项技术的广泛应用就是自动化测试和重构技术。 重构是改善既有代码设计而不改变其行为的过程,具体参考《重构:改善既有代码的设计》。
修复缺陷往往不涉及重构,但是如果缺乏经验的话,为修改缺陷而做出的必要修改时会产生重复,这是不该有的,这就是《程序员修炼之道》一书中描述的“不要重复你自己”的原则。
在修复缺陷之后重构比先重构再修复更合理,当然,如果修复工作很复杂,可能要反复经历修复和重构的过程!
切记:重构的同时不可改动代码功能,同样也不能修复缺陷!
5、签入
要合理利用源码控制系统,如果将很多错误集合起来一起签入,就会大大降低其作用
请坚持这项原则:一次逻辑修改只做一次签入
6、代码审查
代码审查没有固定执行时间,有时让同事参与修复的初期阶段,有时只是让其签字确认!该方法是开发过程固有的一部分,而不必看成一个很正式的调试方法!
<读书笔记>软件调试之道 :问题的核心-如何修复缺陷的更多相关文章
- <读书笔记>软件调试之道 :从大局看调试-理想的调试环境
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :从大局看调试-零容忍策略
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :从大局看调试-发现代码存在问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :问题的核心-修复后的反思
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :问题的核心-诊断
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 不要急于动手! 尽管可以利用各种工具和技术以及软件自身查找缺陷,但是你最重要的财富是你的智 ...
- <读书笔记>软件调试之道 :问题的核心-重现问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 重现第一,提问第二 问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它 ...
- <读书笔记>软件调试之道 :实证方法
有效调试不仅仅是排除缺陷,其包含如下几个步骤 弄明白软件为何运行错误 修复这个问题 避免破坏其它部分 保持或者提高代码的总体质量 确保同样的问题不在其它地方发生,也不会再次发生 构建实验.观察结果 依 ...
- 读书笔记|Windows 调试原理学习|持续更新
关于调试方面的学习笔记,主要来源于<软件调试>的读书笔记和梦织未来论坛的视频教程 1.调试器使用一个死循环监听调试信息. DebugActiveProcess(PID);while(TRU ...
- <读书笔记> 代码整洁之道
概述 1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...
随机推荐
- linux第三方程序移植
摘要:在linux开发过程中经常需要用到第三方的程序,有时需要用到它们的库,有时需要它们生成的可执行文件,如何正确地编译这些第三方的程序,以方便地使用和开发自己需要的程序,将是本文要论述的内容. 1. ...
- oracle数据库备份和还原
ip导出方式:exp demo/demo@127.0.0.1:1521/orcl file=f:\f.dmp full=y 备份:exp demo/demo@orcl file=f:\f.dmp f ...
- php.ini修改php上传文件大小限制的方法详解
打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就 ...
- svn import后,服务器上少了所有*.a文件的问题解决
转载自:http://blog.csdn.net/lwl_ls/article/details/20222051 将本地代码import到svn服务器. svn co出代码,编译却报错少了这个那个*. ...
- 用两个Stack来实现一个Queue
import java.util.Stack; /** * 问题:用两个Stack来实现一个Queue; * 方法:栈的特点是先进后出:而队列的特点是先进先出: * 用两个栈正好能把顺序调过来: * ...
- E: Unable to correct problems, you have held broken packages 解决方法
在Ubuntu中安装软件的时候经常碰到E: Unable to correct problems, you have held broken packages.的错误,顾名思义是因为某些软件包冲突导致 ...
- dingding post POST请求
POST请求请在HTTP Header中设置 Content-Type:application/json,否则接口调用失败 获取AccessToken Https请求方式: GET https://o ...
- 项目中Zookeeper配置参数笔记
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxo ...
- 红黑树(Red-Black tree)
红黑树又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性.同时红黑树更是一颗自平衡的排序二叉树.我们知道一颗基本的二叉树他们都需要满足一个基本性质–即树中的任何节点的值大于它的左子节点,且小 ...
- fuser 命令小结
fuser 概述 fuser命令是用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息. 例一: #fuser –m –u /mnt/usb1 /mnt/us ...