分类: 系统运维
2013-12-17 23:31:18
原文地址:如何高效找出软件中存在的问题 作者:haiyong_wu
作为一名程序员,很多时候面对的就是要找出软件中存在的一个又一个的问题。基于工作中遇到与解决的形形色色的问题,总结出如下几条原则:
1.这真的是一个问题么?
在《你的灯还亮着么》这本小册子中,将问题描述为“人们的期望与实际不
符时,问题就出现了”。当人们对软件功能的期望是错误的时候,软件的运行可能就是正常的,我们要做的只需要更正人们的期望即可,无须对软件进行任何的改动,这也是我们最希望遇到的一类问题。
2.改变条件,使问题更容易出现。
多数情况下,再现问题比解决问题要更困难。有些问题很长时间才会出现一次,出现了还不一定马上就会被发现。通过研究问题出现时留下的蛛丝马迹,适当的改变运行条件,使问题能较快的出现,从而可以更容易的去观测并解决问题。如解决内存泄漏的问题时,增加调用可能存在问题的模块的次数。
3.什么样的变化导致了问题的出现?还能恢复到以前的状态么?
在一个投运的系统中,问题的出现往往是伴随着运行环境的改变,或某些特定的操作产生的。了解运行环境的变化和用户的操作就显得至关重要。因为这里面的某一个因素可能就是问题产生的直接原因。如果还能恢复到以前的正常状态,则可以通过比较两者之间的区别来定位问题所在。
4.剥茧抽丝,构造最小化运行的问题/正常模型。
如果通过去掉各个因素,构造出一个最小化运行的问题模型,那么当前的运行条件就是问题出现的原因。反之,如果能构造一个最小化运行的正常模型,然后通过不断添加各个实际运行因素进行测试,直到问题出现,则最后添加的那个因素就可能是问题出现的原因。
5.问题的解决不仅仅需要技术和方法,更需要决心和毅力。
实际运行系统中,很多问题的出现是网络、节点、系统等各方面因素共同作用的结果。出现的几率很小。如果抱着可能以后不会再出现这类问题的心态来处理,很可能就不了了之了。但现实中,“可能发生的事情就一定会发生”。心存侥幸,只能是坑了用户,拖累了自己。
解决问题最好的方法当然是预防问题的发生,防患于未然。但现实世界中,使用软件的人每天都在变化,科技每天都在更新,今天觉得是无懈可击的方案,明天就可能是漏洞百出,掌握一定查找和解决问题的方法对工作会有很大的裨益。