Effective Debugging:软件和系统调试的66个有效方法
上QQ阅读APP看书,第一时间看更新

本书对软件开发的其他方面所起的作用

本书里的所有条目都是针对故障的诊断与调试而写的,不过其中有很多建议同样可以用来缩减代码中的bug数量,并且可以使你在遇到这样的bug时能够更为迅速地将其修复。严谨的调试技术与优秀的软件开发方式之间能够形成良性的循环,因此,书中的建议对于你当前或者将来要面对的软件设计、软件构建以及软件管理工作,是可以起到帮助作用的。

设计软件的时候,应该遵循下列建议:

❏使用与其角色相称的高级机制(参见第47条和第66条)。

❏提供调试模式(参见第6条和第40条)。

❏提供对系统操作进行监控与记录的机制(参见第27条、第41条和第56条)。

❏提供一个选项,使得开发者可以用Unix命令行工具来编写与组件有关的脚本(参见第22条)。

❏把内部的错误暴露出来,使其表现为软件故障,而不要将其隐藏起来,使其成为软件中的不稳定因素(参见第55条)。

❏提供一种方式,使得开发者能够在软件发生故障之后获得内存转储(memory dump)信息(参见第35条和第60条)。

❏从数量和范围方面,尽量缩减软件在执行时的不确定因素(参见第63条)。

构建软件的时候,应该遵循下列建议:

❏征求同事的意见(参见第39条)。

❏为你所编写的每个例程创建单元测试(参见第42条)。

❏用断言来验证自己所做的假设是否成立,以及代码的功能是否正确(参见第43条)。

❏尽量把代码写得易于维护,也就是要写出易读、稳定且便于分析和修改的代码(参见第46条和第48条)。

❏在构建程序时避免不确定的因素(参见第52条)。

在对软件的开发及运作进行管理时,应该遵循下列建议(无论是要管理一个团队,还是只管理自己的流程):

❏用适当的事务追踪系统,把遇到的问题记录下来(参见第1条)。

❏对各种有待处理的事务进行分类,并排定其优先次序(参见第8条)。

❏把对软件所做的修改适当地记录在修订管理系统中,并且对该系统进行较好的维护(参见第26条)。

❏渐进地部署软件,使得我们可以在新旧版本之间进行对比(参见第5条)。

❏尽量采用各种不同的工具来开发,并试着把程序部署在各种环境中(参见第7条)。

❏经常对工具与程序库进行更新(参见第14条)。

❏如果使用了第三方的程序库,那么可以考虑购买该程序库的源代码(参见第15条);考虑购买一些较为完善的工具来锁定那些不太容易找到的错误(参见第51条、第59条、第62条、第64条及第65条)。

❏寻找专门的工具来调试硬件接口及嵌入式系统(参见第16条)。

❏使得开发者能够远程调试软件(参见第18条)。

❏对于消耗资源较多的故障诊断任务来说,要留出足够的CPU及磁盘资源(参见第19条)。

❏鼓励开发者之间通过代码评审及编程指导等手段进行协作(参见第39条)。

❏鼓励大家进行测试驱动开发(参见第42条)。

❏在构建软件的时候,要做性能分析、静态分析以及动态分析(参见第57条、第51条及第59条),并且要打造一套迅速而高效的构建流程与测试流程(参见第53条及第11条)。