主讲:张银奎
《软件调试》一书的作者,《程序员》杂志调试之剑栏目作者,高端调试网站(ADVDBG.ORG)的创始人。毕业于上海交通大学信息与控制工程系,长期从事软件开发和研究工作,对 IA-32 架构、操作系统内核、驱动程序、尤其是软件调试有较深入研究。从2005年开始公开讲授“Windows内核及高级调试”课程,曾在微软的Webcast和各种技术会议上做过《Windows Vista内核演进》、《调试之剑》(2008年中国软件技术大会)、《感受和思考调试器的威力》(CSDN SD2.0大会)、《Windows启动过程》、《如何诊断和调试蓝屏错误》、《Windows体系结构——从操作系统的角度》(以上三个讲座都是微软“深入研究Windows内部原理系列”的一部分)等。翻译(合译)作品有《观止——微软创建NT和未来的夺命狂奔》、《数据挖掘原理》、《机器学习》、《人工智能:复杂问题求解的结构和策略》等。
介绍了瑕疵的分类:
1)海森伯瑕疵(Heisen Bug):测不准原理,观察者效应,在调试分析时便消失的Bug
2)曼德罗瑕疵(Mandel Bug):根源复杂,行为混沌无序
3)薛丁格瑕疵:只有读过源代码或者使用非常方式才能发现的瑕疵
介绍了著名的瑕疵:北美大停电,火星探测器因为没有进入预定轨道而摧毁,水手一号太空船发射293秒后因为偏离轨道而销毁。
相互依赖是拖延软件进度的最好的理由,要从管理和技术两个方面双管齐下减省依赖,防止推诿扯皮。
不断增加的功能和随之引入的瑕疵是软件工程中的基本矛盾。
软件的根本在代码,不要脱离代码来讨论软件问题。
瑕疵的根源在代码:
多余代码
缺少代码
错误代码
DFT
DFD
DTRACE
应该像重视消防设施那样重视调试设施,使其成为始终存在,不可缺少的部分。
D4D
提高开发开发效率,及早发现瑕疵
基本原则:
1、最短距离原则:使错误检查代码距离失败操作的距离最短
2、最小范围原则:使错误报告或高度信息所能定位到的范围尽可能小
3、立刻终止原则:当检测到严重的错误时,使程序立刻终止并报告第一现场的信息
4、可追溯原则:使代码的执行轨迹可以
追溯,数据的变化过程可以追溯
5、可控制原则:通过简单的方式可以控制程序的执行轨迹
6、可重复原则:使程序的行为可以被简单地重复
7、可观察原则:使软件的特征和内部状态可以被方便地观察
8、可辨识原则:可以简单地辨识出每个模块乃至类或函数的版本
尽量少用system.out,要有一个debug的内部版本,其实如果用log4j的话,因为log4j有不同的level, 比如info, debug and error,完全可以开闭不同的level。
自动屏幕截图
自动诊断和远程报告,cron job?
Windows Error Reporting (WER)
用户80%的时间是在使用20%的常用功能
用户有80%可能遇到的瑕疵存在于只占20%的代码中
优先测试常用功能