解决问题:心态 原则 方法

简介:
 什么是问题?

1. 上下文 -- 和问题相关的场景,指一组已经是明确已知的,关于问题的条件的描述。

2. 目标 -- 指关于构成问题的结论的明确的描述。

3. 障碍 -- 指问题的正确解决方法不是显而易见的,必须通过一定的思维活动,才能找到答案。

 

良好的定义问题是解决问题的关键步骤。

定义问题就是鉴别期望和现状的差异。有如下几个关键点:

1. 首要的是,收集整理关于现状的可信的信息,而不要假设已经拥有完备的可信信息;

2. 不暗示倾向于某种原因或者解决方法;

3. 只陈述现状和期望的状态;

4. 在解决问题的过程中,问题的定义可能(有必要)会不断的改进或者转换形式。

 

源文档 <http://zh.wikipedia.org/w/index.php?title=%E9%97%AE%E9%A2%98&variant=zh-cn>

 

心态

    静心:在定位问题之前,最好先安静下来,摒除杂念。放下自己的身份(项目经理、开发人员),以解决当前系统的问题为中心。静心之后,将问题现象在脑中过一遍,弄清问题。

 

问题解决者不轻信,不盲从
    绝不因为一句“应该是对的”“大概没有变化”而抛弃一个怀疑的点。
 

大局观:不要尽早的陷入细节
    实际上,在整个问题定位和解决的过程中,都应该尽量在头脑中对整个系统的映像以及当前位置保持清晰的认知。这样有助于前后、上下联系,在更高更广阔的空间中发现问题。在解决问题的时候提醒自己:我现在处于一个什么位置?如果不启动调试环境我能不能解决掉这个问题?

 

预判断,然后验证:尽量将日志、调试、HttpFox等都用作验证问题的工具——首先对问题的原因做预判断(猜测),然后确定该原因会导致什么现象,然后验证该现象(日志等)。预判断比验证更应被关注。

 

当很难预判断问题位置时,可以采用排除法:每次排除系统范围的一半左右,逐步将包围圈缩小到问题原因本身。应注意:排除的过程中,同样要注意验证排除的是否正确,即:排除、验证、排除、验证……

 

关注日志
     很多问题解决过程中其实打开日志文件就能马上得到结论,但是开发人员宁可自己猜也不愿意动手打开日志。
另外也暴露了我们系统日志没有为开发人员提供足够的信息支持用以解决问题,后面的设计中要把异常设计作为一个重要部分。

 

充分利用工具,能得到事实就不猜测

比如:HttpFox等工具能将HTTP请求录下来,我们不需要猜测;还有Windows事件日志,性能计数器,Windbg等等工具可用

 

通过差异找到问题的原因

很多问题的解决可以不依赖开发态的调试,比如通过比较当前版本和上一版本的区别,比较产品和产品之间的差别就能通过差异来定位问题。

 

解决掉一个问题不是终结
之前往往满足于一个能够解决眼前问题的答案;这是远远不够的,一个问题的出现暴露出我们系统的缺陷,这是一个线索,需要避免同样的问题的出现

一个问题的出现我们要追究到问题的本质,例如前段时间SSO登陆失败和验证码本地使用失败,本质上都是由于配置文件中指定了Cookie的域。

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
设计模式 算法 程序员
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
作为开发者,我们在日常开发过程中,往往会遇到反复修改bug的情况,而且不能一次性把代码写的完美无瑕,其实开发项目是一项复杂而富有挑战性的任务,即使经验丰富的程序员也难以在一次性编写完美无瑕地完成代码,我个人觉得一次性写好代码是不可能完成的事情。虽然在设计之初已经尽力思考全面,并在实际操作中力求精确,但程序员仍然需要花费大量时间和精力来调试和修复Bug。那么本文就来分享程序员需要反复修改Bug的原因,以及在开发中所面临的复杂性与挑战。
63 1
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
|
7月前
|
测试技术
解决Bug应有的心态和解决方法的一些思路、方法和心得
永远要相信程序是不会骗你的,是自己在处理理逻辑中出问题,而在特定的环境中才会出现或者是自己压根就想不到情况下出现。 前几天在处理一个接口任务时,在测试环境跑是一点都没有,但在正式环境却没有将数据拉下来。没有报任何错误,一度怀疑、抱怨! 还好最后找到问题解决了!
36 0
|
12月前
|
敏捷开发 安全 项目管理
「敏捷」也许敏捷就是问题所在
「敏捷」也许敏捷就是问题所在
发散性思维(一)——通过变通和联想来解决问题
发散性思维(一)——通过变通和联想来解决问题
73 0
发散性思维(一)——通过变通和联想来解决问题
|
安全 测试技术
软件测试怎么学?这些学习软件测试的方法你肯定能用上
软件测试是保障软件质量的重要环节,对于软件开发过程中的每个阶段都有至关重要的作用。如果想从事软件测试行业,或者是提升自己的测试技能,那么软件测试该怎么学? 下面介绍一些学习软件测试的方法。
127 0
|
测试技术
软件测试面试题:软件测试中8020原则?
软件测试面试题:软件测试中8020原则?
169 0
|
测试技术
软件测试面试题:软件测试的过程的V模型,说出它的缺点?
软件测试面试题:软件测试的过程的V模型,说出它的缺点?
149 0
|
测试技术 程序员
软件测试面试题:什么是软件测试?软件测试的目的与原则?
软件测试面试题:什么是软件测试?软件测试的目的与原则?
81 0
谈谈讲清楚这件事的重要性
如何讲清楚一件事我相信很多人都很困惑也很无助,尤其是在晋升场合,在向上汇报或者是做大范围分享的时候,恨不得找个地缝钻进去。很多时候我们常常是这样安慰自己,我是实干派技术人,不需要那些花里胡哨的东西,我技术过硬比什么都重要。曾经一度我也是这样认为,最后改变我这个想法的是一句话:如果你讲不清楚多半是想不清楚,如果你都想不清楚如何能够带领更多人拿到结果?
1563 1
|
测试技术 程序员
那些会阻碍程序员成长的细节[1]
罗马非一日建成,软件系统也不是一天能够写出来的,在经年累月的编码生活中,总会有那么些个不经意的瞬间暴露出来,而这些不经意的外在表现日积月累,犹如水滴石穿,会产生巨大的力量反作用于程序员的成长。我简单列了几条,你来看一看,兴许就在身边实实在在发生过。
1112 0