zoukankan      html  css  js  c++  java
  • 单一项原则

    单一项原则真的很有用,特别是用于找出问题的根源.

    上周改一个bug,bug的现象是:

    火狐中,打开界面(当然是公司产品的界面,不便给出地址),点击导航项时,除了打开导航的模块,同时会打开一个空白的页面.

    我是怎么解决这个bug的呢?

    我找到导航的那段代码,以及相应的事件处理的js,copy到一个简单的html页面中.

    如下:

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="jquery-1.11.1.js"></script>
        <script type="text/javascript">
           $(function(){
               if($("#intro").length > 0){
                   $('#intro').click(function(){
                       window.open("http://hw1287789687.iteye.com/");
                   });
               }
           })
        </script>
    </head>
    <body>
    <a id="intro" href="javascript:void(0)" target="_blank">功能介绍</a>
    </body>
    </html>
    

      首先,我想到的是要在火狐上重现.于是很容易地重现了.

    然后我就试图找原因,不断的尝试,因为就这个简单的页面,没有其他因素的干扰,所以很快就找到了原因和解决方法.

    注意:以上的bug在chrome中无法重现,必须在火狐中才能重现.

    请问,我为什么不深入产品的代码中去找原因呢?

    (1)如果使用产品的代码找原因,首先我得让它在我本机运行起来,光搭建环境就很费劲,麻烦!

    (2)不便于测试,因为产品的代码很多,功能模块多,比较庞大,刷新一下页面就得两三秒,问题是大部分资源的请求与这个bug一毛钱关系都没有;

    (3)干扰因素比较多,不确定是这个模块的问题,还是那个模块抽筋.而我把关键代码抽出来,思路就很清晰了,影响的因素就只有一个了.这就是我要说的单一项原则.

    单一项原则,核心思想就是无论在什么情况下,都必须保证只有一个因素在影响,或者说只有一个变量.必须是一次方程,不是二次方程(初中数学里面的).

    x+3的结果就只与x有关,如果它的结果增加了10,我们就能够确定是x增加了10,因为它的结果只与x有关系.

    x+y+3的结果同时与x,y有关,如果它的结果增加了10,我们无法判断是x的影响还是y的影响,抑或是x,y共同作用的结果.

    之前不知道在哪里(知乎?)看过一篇文章说的好像是关于"最强大脑"(吕飞龙用声音吹破玻璃杯)的,说这个人可以通过口吹气把玻璃杯吹破 ,表演时第一次没有成功,他要求再试一次,并且提出用自己的手拿着玻璃杯.有一个教授站出来不同意他用手接触玻璃杯,解释说如果他用手接触玻璃杯的话,就会对结果有干扰.

    到底是吹破的,还是捏破的呢?

    因为有两个因素,所以不确定是哪个在起作用.所以这是不符合单一项原则的.但是现场的嘉宾竟然同意了吕飞龙的(扯淡的)要求,唉,真理经常站在少数人一边.那个正直的教授竟然被人骂....

    总结:我们在思考问题的时候,也要充分利用单一项原则,这样我们的思路就会豁然开朗,也更容易抓住主要(关键)因素.

  • 相关阅读:
    2016.6.26考试
    爆搜。。。。。。。
    9.18目标
    9.17水题总结
    9.16测试
    9.10考试
    jzoj P1163 生日派对灯
    9.04考试总结
    8/8刷题记录
    a[i++]
  • 原文地址:https://www.cnblogs.com/huangwei520/p/4526664.html
Copyright © 2011-2022 走看看