高效程序员的45个习惯 7.敏捷调试

2021-01-02  本文已影响0人  NeXt4

记录问题解决日志

可以选择符合需求的任何格式。下面这些条目可能会用得上。

要记录团队做出一个重要决策的原因。否则,在6~9个月之后,想再重新回顾决策过程的时候,这些细节就很难再记得了,很容易发生互相指责的情形。

警告就是错误

将警告视为错误。签入带有警告的代码,就跟签入有错误或者没有通过测试的代码一样,都是极差的做法。签入构建工具中的代码不应该产生任何警告信息。

对问题各个击破

在解决问题时,要将问题域与其周边隔离开来,特别是在大型应用中。

单元测试的好处之一,是它会强迫形成代码的分层。因为要保证代码的可测试,就必须把它从周边代码中解脱出来。

识别复杂问题的第一步,是将它们分离出来。就像试图修复正在飞行的飞机的引擎,但是当引擎被从飞机中取出来,而且放在工作台上之后,修复就变得容易了。同理,如何可以隔离出发生问题的模块,也更容易修复发生问题的代码。

隔离问题不应该只在交付软件之后才着手。在构建系统原型、调试和测试时,各个击破的战略都可以起到帮助作用。

报告所有异常

有一条新闻,提到一套大型航空订票系统中发生了严重的问题。系统崩溃,飞机停飞,上千名旅客滞留机场,整个航空运输系统数天之内都乱作一团。原因是什么?在一台应用服务器上发生了一个未检查异常。

处理或是向上传播所有的异常。不要将它们压制不管,就算是临时这样做也不行。在写代码时要估计到会发生的问题

决定由谁来负责处理异常是设计工作的一部分。
不是所有的问题都应该抛出异常。
报告的异常应该在代码的上下文中有实际意义。
要传播不能处理的异常。

提供有用的错误信息

一方面提供给用户清晰、易于理解的问题描述和解释,使他们有可能寻求变通之法。另一方面,还要提供具备关于错误的详细技术细节给用户,这样方便开发人员寻找代码中真正的问题所在。

错误类型:

像“无法找到文件”这样的错误信息,就其本身而言无助于问题的解决。“无法打开/andy/project/main.yaml以供读取”这样的信息更有效。

在提供更多信息的同时,不要泄露安全信息、个人隐私、商业机密,或其他敏感信息(对于基于Web的应用,这一点尤其重要)。

上一篇 下一篇

猜你喜欢

热点阅读