关于分析、解决问题的一些方法讨论。

之前在公司内网上发布了一个关于分析、解决问题的一些方法讨论,后来一直为这个践行,力图总结出一套切实可行的理论。

先引导过来

背景:

    在实际工作中,难免会遇到疑难问题,需要排查、分析、解决。很多时候并不是解决起来有多难,而往往是问题隐藏的比较深,导致表现出来的现象多变,又不容易复现;加上系统功能集成较多,程序员对整体不够了解,不是对每个部件度了解的情况下,无法立即根据经验、设计,推导出可能的原因来验证,导致无法较快定位问题,也就不能最后得到解决方法。相信很多人都遇到过这样的疑难杂症,下面来简单介绍些方法或者说是套路,以供讨论。

传统方法:

   经验+运气:很多时候我们第一选择都喜欢依靠经验,来猜测问题的可能原因,然后调试、测试、验证。这种方法很大程度取决于程序员本身的经验、熟悉度,甚至还有些运气,经验多的人,经常能较快定位到问题点;或者运气好的时候,也可能较快的猜测到了问题点。

常用科学实验方法:

    控制变量法:控制变量法是实验物理学中最常用的的探索问题、分析问题、解决问题的科学方法之一。通俗来讲是将某个测试因素(变量)以外的因素全部控制,保持其不变形,再比较这个可变的因子对实验结果的影响。

   等效替换法:这种方法在实际工作中也很常用,当你怀疑系统中某个模块有问题时,就换一个与之相近的、具有共同特征的模型替代原模块测试实验,有时能很快确认、得出结论。

   转换法:在物理学中,有些物理量不便于直接观察测量,可通过转换为容易测量与之相等或相关联的物理现象测量,从而获得结论。在软件调试中也存在这种方法:比如很多bug现象不容易重现,或者不容易观察现象,我们可以转换思维,比如:故意修改程序,试图让bug现象更容易出现;从而提高整体测试效率。

   头脑风暴法:这个方法适合在调试者没有头绪的情况下使用,召集相关同事、特别是有些经验的讨论,大家一起激发联想和思路,罗列出所有可能性,并逐一分析优先级并实验分析排除。

    类比推理法:这个方法也应用在各个学科中,其目的是比较两个甚至更多的事物相同属性,推出属性的相关程度,比如bug变现的现象多变,需要分析不同现象中的共性,这样才有足浴分析、定位问题。

PS:这里介绍的集中较常见的方法,有些相信很多大家平时都不自觉的在用,只是可能没哟给他们取名字而已,还有些涉及到概率统计之类的方法,可能比较复杂,需要大量的历史数据及模型,这种更适合分析较大型的问题。

    当然也不是说传统方法不好,传统方法在经验充足情况下,效率往往是要高的,这里谈的是在传统方法碰壁后,如何有条理、有方向性、有顺序的推进问题的排查、定位。

    这里也越来越发现,作为新兴学科的”软件工程”对传统学科的广泛借鉴,在模型、算法上源于数学,在软件设计、实践上借鉴建筑学,在软件测试、调试上很多有借鉴与实验物理学。

猜你喜欢

转载自www.cnblogs.com/mic-chen/p/12632598.html
今日推荐