您认为调试(系统故障排除)是程序员可以拥有的最重要的可测量技术与技术无关的技能之一吗?

Cla*_*ols 6 language-agnostic debugging

程序员可以拥有许多技能(理解问题,提出好的问题,良好的设计技能等).

我认为系统调试技能非常有价值.调试任何技术系统的一般技能(从你的遥控器中的电池死机到来自你邻居的Ham Radio的信号干扰).

这是我教授计算机编程时给学生的方法:

  1. 定义问题(当我执行XYZ Repro步骤时,我得到ABC症状)
  2. 确定测试范围并分为几个部分.
  3. 使用消除过程测试每个部分以找到导致问题的部分.
  4. 如果需要,将部分分解为子部分.
  5. 分析导致问题的小节.
  6. 固定.
  7. 使用步骤重现症状的文本.

Whadaya认为?

Ste*_*owe 4

如果您将“故障排除”定义为包括“调试”,那么是的,这很重要!

编辑:根据您的编辑,您列出的自上而下的消除过程技术是系统性的并且非常有价值。

另一种技术是向后推理:

  • 从最后开始,使用产生症状/错误的变量/调用
  • 从那里向后推理 - 是什么导致了这个不正确的值或错误的调用?
  • 继续从逻辑上追溯,直到找到罪魁祸首

当存在大量可能导致问题的前馈路径/可能性时,这非常有用,但优点是不需要调试器或跟踪来找出最可能的原因。

另一种技术是通常怀疑的技术,您可以从最后接触的代码部分或给您带来最多问题的代码部分开始调查,看看其中是否有某些变化导致了新问题

另一种技巧是坐下来思考什么情况可能会产生观察到的错误/行为/值。当你很匆忙并且不想系统地扫描很多地方时,这种技术很有用,但要求你已经对系统有透彻的了解。当相关错误/行为是由于设计缺陷或疏忽而不是编码错误造成时,这非常有用。