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

重现第一,提问第二

问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它

首先按照缺陷报告的描述的步骤来做, 抓住重点,包含三个控制因素

软件本身:确保你使用的软件版本和bug提交的版本一致,使用相同的编译工具和相同的编译参数。

软件运行环境:如果要与外界环境交互,则确保使用相同外部系统。比如测距仪,需要在同样的光照环境、温度和供电方式。

提供的输入:如果软件代码的运行和配置参数相关,则应该使用相同配置。

控制输入之详细说明

软件的输入可能时本地文件,也可能是用户的一系列操作或者是第三方设备

推测可能的输入:

  • 回溯工作:错误位置明确时,该方法可能可以重现问题,或者提供有效线索
  • 探测可能输入值:利用边界值分析法和分支覆盖法,经验表明,这两处最易出错
  • 利用错误条件:编码时,人的天性是关注正常的情况,于是未处理的错误条件很可能诱发一系列bug,因此模拟错误条件可能可以重现问题
  • 引入随机性:选取一系列不同的输入值,也叫模糊测试。该模糊测试器的关键特征是,可以根据一些列规则重新创建曾经的输入,以便能够随意重现问题

记录输入值:

  • 程序日志:在JAVA中有日志功能,可以打开或者关闭,C语言可以采用独立文本
  • 外部日志:这个在客户端和服务器端的软件中采用,独立的系统可以忽略

注意负载和压力:

  • 有些缺陷只有软件在某种压力下运行是才能表现出来,这个在服务器端软件最明显,其必须通过压力测试;测距仪软件需要注意的在电池电量供应不足情况下,是否会运行出错!

改进问题重现

如何才能让问题重现即可靠又方便,并且代价最小?

  • 最小化反馈周期:
  • 将问题重现最小化:第一次就做到最小化不太可能,需要逐步删除不必要的方面,缩小问题重现的范围。
  • 最大限度的减少重现所需的时间:有些bug只是需要时间来重现,因此需要采取措施使其早些发生,比如怀疑资源泄露,则可以故意营造资源耗尽的局面。

将不确定的缺陷变为确定的:

  • 软件之美在于它的确定性,不确定性往往有以下几个原因:
  • 开始于不可预知的状态:比如C/C++程序,使用未初始化的内存或变量。
  • 与外部系统进行交互:这种情况,最好的选择是使用你能控制的东西代替外部系统,比如使用串口助手模拟外设发送指令。
  • 故意使用随机性:软件中的随机函数,都是伪随机,只要种子一样,结果就相同
  • 多线程:PC端的软件叫多线程,嵌入式端一般叫多任务,可以采取措施增加竞争情况,是问题更容易实现

自动化:

  • 采用自动化测试,不但可以加快进程还可以见笑犯错误的几率
  • 自动化测试:需要构建自动化测试框架和用户借口测试工具
  • 重放日志文件:如果bug重现需要通过日志,则需要通过重放日志构造相同的操作序列

迭代:

  • 在诊断过程中,随着获得软件运行信息越来越多,你可以使用这些信息不断改进你的重现。逐步缩小导致bug发生的范围,比如缩小到一个函数、一个变量、一段语句。 通过反复优化确保你的重现问题的程序既方便又可靠!

如果真的不能重现怎么办?

缺陷真的存在吗?

  • 用户一般不会恶意报告缺陷,极有可能是软件出错了,也有可能是不清楚为何这样,误解了软件的一些方面。

在相同的区域解决不同的问题

  • 重现问题的区域还有其它缺陷吗?如果有,也要一查到底。这样做可以清理这个区域的代码、使你从整体上更好的了解代码,并找到重现问题的关键因素。

让其他人参与其中

  • 开发人员很容易有盲点,其工作重点是让编写的软件可以正确运行,而不是证明这个软件有缺陷,因此让别人参与进来时必要的。

充分利用用户群体

  • 如果缺陷出现在外部系统中,获取应该让用户为你收集重要信息,不过这种方法往往并不理想。

推测

  • 虽然实证方法是最好的,但是其不是唯一的解决办法,纯逻辑推理就是其中一种。该方法费时费力,在其它方法无效时,往往可以起到作用。该方法需要把自己融入到软件中,执行到每一步时,考虑有哪些错误的可能性,并尝试解释你跟踪的缺陷。

读书笔记软件调试之道 :问题的核心-重现问题相关推荐

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

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

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

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

  3. 读书笔记软件调试之道 :从大局看调试-零容忍策略

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

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

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

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

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

  6. 读书笔记02-《术与道》上

    此书为一份UI设计基础指南,虽说是基础指南,却有很多我在UI工作中并不知道的知识盲点,下面开始记录: 01 基础知识 1.1什么是UI设计 1.1.1 UI的相关概念 UI=User Interfac ...

  7. Bullmind在线读书笔记软件

    Bullmind是一种结构化思维生产力工具 录制注释 思考完成 内容创建 任务管理以结构化方式组织内容构建清晰的思维逻辑 它具有在线读书笔记软件 在线思维导图功能,强调逻辑和层次与传统笔记形式相比. ...

  8. 免费好用的笔记软件:有道云笔记 Mac中文版

    有道云笔记 Mac版是网易官方推出的一款优秀的笔记软件,有道云笔记mac版支持以文字.图片.语音.OCR.Markdown等多种形式进行记录,另外还包含了快速搜索.分类查找.安全备份云端笔记.自动同步 ...

  9. [读书笔记] 代码整洁之道(一)

    最近读完了马丁的clean code,颇有收获,简单整理下读书笔记,虽然整书是以Java代码做代码示例,但语言无国界,特别是编程语言更是如此,不管你从事的是以何种语言为主的开发环境,我相信,从本书中都 ...

最新文章

  1. 人工智能创意赛复选赛成绩单
  2. python哪一版好用-学习 Python 用哪本书好?
  3. 当您访问未加密的HTTP网站时,谁能看到您的数据?—Vecloud微云
  4. [Web 前端] mobx教程(二)-mobx主要概念
  5. 主板怎么开启csm_华擎Z490主板移植AMD SAM加速技术:游戏性能提升最多11.5%
  6. vue双向数据绑定的原理
  7. ansible安装和基本使用
  8. linux命令大全文档,LINUX命令大全文档
  9. 将分支指针移动到不同的提交而不签出
  10. nacos-demo feign调用
  11. 一个软件工程师在北京的反省
  12. 在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案...
  13. 文件系统 -- 磁盘基础知识和FAT32文件系统详细介绍
  14. 8086微处理器介绍
  15. 逆函数求导公式_反函数求导法则
  16. python 问题Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
  17. 图像质量评估-BRISQUE
  18. Web应用跨域访问解决方案
  19. 【20保研】北京航空航天大学计算机学院2019年全国优秀大学生夏令营活动通知...
  20. 无锡设计培训——怎么自学室内设计

热门文章

  1. python获取文件修改时间 错误_python 封装selenium 出错后,以时间生成文件夹保存错误图片 做梦的人...
  2. 编译c或c++代码出现error “***” was not declared in this scope 的解决方法
  3. Java 使用 POI 操作 Excel(反射,大数据量)
  4. [POI2005]DWU-Double-row
  5. 城市公交管理系统 JAVA MySQL
  6. python 读取图片转换为一维向量_对Python中一维向量和一维向量转置相乘的方法详解...
  7. OSRAM欧司朗3030灯珠,看完就明白了
  8. 马贼——选自《萌芽》王若虚
  9. 【HDU】 4833 Best Financing DP
  10. ftp主动模式和被动模式的区别