提问的艺术之3WH提问框架

别笑,提问也是一种特殊的技能,我算是见得多了,从高中开始为各种亲戚朋友同学老师修电脑电视洗衣机,真的是感触良多,刚开始我还认真的排除错误,比如任务管理器打不开了,先不说他们不会使用百度,很多人连话都说不明白,于是只能远程找病毒,真的是一行一行的注册表在改(夸张修辞)。后来我算是明白了,他们那需要保有数据,于是之后,软件毛病一律重装,硬件毛病一律换零件。

但他们大多都是一些非本计算机专业的人,他们又不靠这东西吃饭,而出毛病最多的编程方向,更是有众多的人说的不知所云,乱七八糟。我隐约记得小学时好像有一个老师给我讲过一种学习方法,就是重点是什么(what),重点在哪(where),什么时候进行复习(when),于是我对这一整套的标准加以改造,形成了我所谓的3WH,这个框架是借用了编程语言中的概念,没别的意思,可以理解为模板,当然3WH是专为编程设计,其他方面暂不清楚

 什么是3WH

所谓3WH(What,Where,When,How),是一种用来描述和记录编程故障(Bug)的信息语言,分别指程序中出现错误的一切便于诊断的信息。如果看不明白也没事,这不重要。

What(是什么)

what一般来说就是故障的报错信息,是程序对用户的直接反馈,它应按如下规则叙述:

你可能需要提供:

错误信息(控制台的错误信息(包含单元测试),客户端(浏览器)报错信息,非程序错误信息(如IDE设置错误),数据库错误信息)

//一个经典的算数异常,您需要至少提供一下的内容

java.lang.ArithmeticException: / by zero
	at cn.tineaine.pj.common.dao.testCode.testAty01(testCode.java:16)

Where(在哪里)

错误出现的位置和范围,这部分信息是辅助于错误信息来判断错误原因的,为了表述清楚可以截图附加发送过去

所谓位置,就是指代码中发生故障的位置,而范围,就是指移除该范围内代码程序便可恢复正常,也就是说该范围内存在错误,位置和范围最大的区别就是位置是在不清楚代码那一部分有错误,而范围则将错误收敛到一个最小的异常单元,已经找到了哪里出现问题,但不知道如何解决

你可能需要提供:

故障位置/范围(语句级,方法级,类级,项目级)

按下面这种方法提供故障位置:

    //StudentControllor.java类中出现异常,源程序片段如下:

	@Test
	public void testAty01() {
		...
		System.out.println(0/0);        //这一行提示错误,只要移除该行代码正常运行
        ...
		
	}

//如上所示,用户已经确定了故障的范围,只要移除打印语句,代码即可正常执行,因此这种情况下需要说明最小范围是语句范围

When(触发时机)

触发时机比较好理解,就是指在执行哪一步时出现问题和做了什么之后出现问题,也就是说,代码在执行到哪一步出现问题?你做了什么才导致这个程序报错?需要提供在最早出现故障前对程序的修改操作

你可能需要提供:

代码周期(编辑期【在IDE中就报错,无法编译】,编译期【在编译期报错,无法编译】,运行期【在执行时出现故障】,非预期【程序可以正常运行,但是运行结果不符合预期】)

最晚操作(故障出现前对代码做过哪些修改?)

//假设一个经典的数组引用越界异常(引用不存在的数组下标)

故障周期(编译期)
最晚操作(试图遍历一个数组)

How(解答)

这个部分一般是为了记录如何解决问题,常用于归档问题的解决方案,以便于后续查询

解决方案:

 


总结

其实这种提问模式不难理解,就是要向解答者(比如老师)传递尽可能多有效信息,从而尽可能的让解答者更轻松的进行判断

另外,再说一些和3WH无关的东西,就是提问的礼仪:

  1. 无论解答者是否给出了你满意的答案,一定要说谢谢,这是礼貌问题
  2. 向别人请教就需要放低身段,不要倨傲自大
  3. 别人有不为你无偿解答的权利,很多时候大神也很忙
  4. 提问前一定一定要事先百度一下,遇事就问绝不是一种好习惯

你可能感兴趣的:(C#,Java,日志)