码农与程序员区别1——快速定位bug与修复bug

前言

每一个程序员的成长老是伴随着各类各样的BUG。在最初阶段的语法bug,到后面逻辑繁杂的业务bug,此类逻辑bug若是有迹可查还好,最怕就是它无迹可查,又极难重现。本文根据做者、做者的狐朋狗友一干人等开发经验,介绍一些bug的快速定位与快速修复。本文主要以PHP为主,由于做者更多的时间仍是在与最好的语音打交道。本文每一个阶段都将分为三部分,分别是介绍、示例、与解决。程序员

目录

初级语法bug

介绍

初级语法BUG,就是编写代码时候,遇到编译器报错。例如PHP的换行没有加分号,js的无效对象的值得引用。此类的bug是最容易发现而且修复的,毕竟编译器已经将bug出现的缘由及行数都送到脸上了,这都不会那就须要加紧学习了。下面介绍一些常见实例。sql

示例

  1. 像通常的分号错误,稍微有代码提示的IDE就会进行判断。

    clipboard.png

  2. 常常会出现的类型错误数据库

    $t = '1562996654a';
    echo date('Y-m-d H:i:s', $t);

    clipboard.png

    这种错误的话,只把错误内容读一遍,不懂英文就将错误内容翻译一下,而后对比着行数,就能够解决了。途中的错误信息是A non well formed numeric value encountered,翻译过来就是遇到格式不正确的数值,因此只需把$t进行一次类型转换或者字符过滤。就能够解决掉该错误。json

    $t = 'aaaaa';
    $t = intval($t);
    if ($t === 0) {
        throw new Exception("时间戳不容许为0或时间戳类型错误");
    }
    echo date('Y-m-d H:i:s', intval($t));
  3. 函数类型错误与函数缺乏参数后端

    class Friend
    {
        public $name;
    }
    
    function test(Friend $a, $b, $c, $d)
    {
        echo $a->name;
        return $b + $c + $d;
    }
    
    $f = new Friend();
    $f->name = 'g';
    
    echo test(null, 1, 'a', '2');

    clipboard.png

    代码中出现的问题有几处,其他几个很普通,有一个须要特别注意的就是null不是对象类型,必须函数参数默承认觉得空才能使用null,否则会出现错误。callable同理,数组

  4. 数组下标不存在或对象缓存

    class a
    {
    
    }
    
    $a = new a();
    echo $a->a;

    clipboard.png
    这个类BUG同样的,翻译一下错误内容,找到相应行数,对对象属性或数据下标 用issetempty判断便可。微信

总结

示例中不少已经解释了。对相应的错误内容与错误行数,进行排查,就能够修复了。

业务BUG

介绍

代码在实际运行中,未出现常见的语法问题,可是却在一连串的业务处理后,没有获得相应的结果。例如订单金额计算,最后少了0.1元;拼团抢购,购买成功人数超过库存;微信jssdk验证失败等等。以上能说出的已是有部分相应解决方案了,毕竟已经碰到了,还有说不出的,没遇到过的BUG有时候即使最熟悉的业务的程序员,也极为头痛。总结而言,就是程序员秃顶的缘由所在。并发

示例

  1. 缓存冲突

    曾今遇到过一个问题,同一套缓存被另一我的偷偷使用,致使微信accesstoken与ticket互刷,没法使用微信。找BUG找到头皮发麻,最后发现有人和我一块儿出现这个问题,才解决。在开发程序时候,尤为共用某些配置,必定要团队一些协约好该类配置。函数

  2. 微信jssdk
    通常初学者使用微信sdk时候容易遇到的问题。后端取host与js取host少一个/,致使微信校验错误。碰到此类错误,仍是多咨询已经常常开发的人为妙。
  3. 第三方API 请求body解析失败
    通常再使用第三方API时候,body主体使用json,然是请求是也使用的json,可是就是请求失败,不经过。这种必定要多查文档,由于json对象与json字符串还有body要求格式关系。
  4. 拼团,砍价,抽奖等高并发情景超出奖池
    这种问题须要对每一条语句进行排序,主要排查对象仍是再SQL语句,知晓sql update 何如工做以及合理使用事务,通常奖池更新,须要查出符合条件奖品进行更新中奖者,可是新手会在查的时候是对的,可是更新时候,未设置更新条件,sql update 也是有 where 条件的.
  5. 多服务协同处理时候,使用同一个数据库,致使两边事务互锁,一直等待。
    首先,多服务使用同一个数据库就已是BUG了,已是设计缺陷了。而后,两边同时开启事务更是问题,须要对病句进行出,必需要事务,既然是同一套数据库,为什么不在一块儿处理。因此服务拆分时候要当心数据库。

总结

业务BUG更多的仍是团队沟通与细节,还有经验的不足致使的,更多的状况下,遇见这种问题,不能死钻牛角尖,须要对BUG区域进行逐一排查,一我的思路不清晰,就使用小黄鸭思路。小黄鸭是什么请自行百度 程序员 小黄鸭

设计BUG

无需多言,要有点本身想法,怼产品就完事。

BUG排查方法

  1. 普通BUG看编译器就好了
  2. 一个好的IDE能够省去80%垃圾BUG
  3. 学会善用xdebug
  4. 无论如何,日志不怕多,必定要全
  5. 排查BUG要记住 语言执行顺序,例如PHP是从上倒下,那么排查也应该是从上倒下,一步一步,根据日志数据,进行合理分析,像的话,记住setget还有 __construct等特殊方法。
  6. 大多数BUG是业务BUG,仍是要提早了解业务需求,不要由于本身的想法,与产品的须要的不一致,致使最后设计出错。而后就是一步错,全盘错
  7. 千万不要过分设计,有时候过分设计,也是bug出现的缘由之一
  8. 排查BUG不能心急。容易秃顶
  9. 全部BUG理论上不该该重复出现,重复出现就是自身的缘由,若是说是一个团队,那么重复出现,其实也是团队的问题。

结论

总的来讲,全部的bug更多的仍是经验不足,与开发时候考虑不周致使出现的问题。在修复BUG的同时,咱们还须要在本身信用的小本本上记上一笔,防止之后重复出现,毕竟每个程序员都有一个伟大的梦。若是说各位有什么本身特殊的技巧与经验,欢迎分享!

相关文章
相关标签/搜索