资讯专栏INFORMATION COLUMN

业务开发中的调试方法总结

KaltZK / 513人阅读

摘要:业务开发中的调试方法总结这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。但是如果你的业务经常变化,但是变化的部分并不会影响单元测试,那这种情况下的单元测试性价比就很高。

业务开发中的调试方法总结

这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。

3种调试方法

狼叔说,常见的三种调试的境界

初级: 打log

中级: 打断点

高级: 测试驱动开发

工作2年,这三种调试方法也算都接触过了,当然这是狼叔的看法,在我看来这几种调试方式,就说一下我认为他们各自的适用场景,

第一种 打log

使用场景:

你完全了解这段程序的运行过程,只是对某一个环节的运行情况时,打印log

学习新知识时,通过打印的方式看看,他们是什么

这是最简单方便的调试方式,

缺点就是如果你不停的打印,再查看结果,是比较浪费时间的。

而且如果你根本不知道程序的运行方式,打log的方式就很低效了

第二种 打断点

使用场景:

你想不清楚程序的运行过程时,适合打几个断点

比如说有一段复杂的异步操作、循环、递归,你完全不知道它运行到某一个阶段,是什么值,也搞不清楚他们的前后顺序。

这时候打几个断点,不仅仅是多打几个log,你还可以清楚的看到程序运行的过程,前进入哪里,进入时的值是多少,都可以方便的看到。

第三种 测试驱动开发

使用场景:

大多数场景都可以用,唯一的缺点可能就是比较费时。

是否写单元测试可能更多还是要结合业务场景。

如果你的业务一旦变化,就会导致单元测试失效,而你的这部分业务又经常变化,可能就不适合了。

但是如果你的业务经常变化,但是变化的部分并不会影响单元测试,那这种情况下的单元测试性价比就很高。

你可以尽情的修改和优化代码,而不用担心自己的代码逻辑出现重大bug,毕竟有测试帮你检查。

但是也要注意测试驱动开发,也无法保证测试通过,业务就一定没问题,毕竟业务往往是很复杂的,这涉及到代码测试覆盖率,就算测试覆盖率100%也不代表没有bug,只能说所有代码都被测试过一遍了

你看,其实这3种调试方式真的不分高低,比如你在写单元测试时,出现了问题,还是要打log来检查嘛,总不能为测试代码再写一套测试吧。

3种排错思路

将三种业务开发中遇到一些“奇葩”问题时的思路。

所谓的“奇葩”问题,有时候真的是自己眼拙,或者自己排查的地方没错,关注点错了,而你盯着那段真的正确的代码,自然怎么检查也查不出问题。

所以有时候需要用一些小方法来排查

二分法排错

删除法排错

对比排错

二分法排错

面对一坨代码,你也不知道bug出在哪里,甚至都没报错,或者你根本不想看这段代码。

你就用二分法,第一行、最后一行、中间一行各自打一个log

因为javascript是自上而下运行的,所以肯定每次都能把错误范围缩小50%

这样应该反复几次就能确定bug在哪里啦。

删除法排错

有时候是不是会出现,我没动呀,怎么刚才还好好的,现在就不能运行了。

这时候你可以选择注释或者删除掉一部分代码,只留下你认知里觉得正确的代码。

不断的删除或者注释,直到不再报错

那么,上一步还报错呢,这一端代码被注释后,错误就消失啦,自然也就定位到bug的位置啦。

对比排错

有时候你也不知道是哪个版本出现的bug,似乎上几次提交就有bug了,而你没注意....

如果删除法和二分法,都无法定位错误,就只能git reset --hard了

回退到绝对没问题的某一次commit

然后利用二分法,找到某一个commit版本没问题,而下一commit版本就出bug了

也就说,定位到问题出现在那一次代码提交

然后通过git diff 对于2次提交,究竟改动了哪些代码。

如何面对没做过的需求

以上是我对于调试、排错的小经验,再分享一种思考方式。

就是面对一个你从来没有做过的需求,你不知道如何做,你甚至怀疑这个需求能不能做?

这种情况下,我建议只要是听上去比较合理的需求,就不用急着拒绝。

先分析一下这个需求是不是合情合理,真的对用户有帮助。

如果合理,那么再想一想,这种需求是否常见?

毕竟常见的需求肯定有人做过,那么你也就不用担心能不能做?如何做?之类问题啦

举一个小例子

在业务中,老板要求我实现一个二维表格,
这个表格的2个表头,横向和纵向表头数量不固定。
说实话,我做过二维表格组件,当时搞的比较麻烦,数据的结构被设计的很麻烦,所以我就想找一个现成组件。

神奇的是,你发现怎么都找不到一个二维表格组件,而老板又叫的很急..
这时候面对的就是一个不知道如何做的需求。

我是这样思考的:

- 这个需求有没有意义?我觉得是有的
- 这个需求比较合理,但是否常见?似乎不常见,我从没见过二维表格组件,比如element-ui或者其他主流ui组件库都没见过。

这个时候我就比较郁闷了,想不通为什么这个世界上,大家就都不做二维表格的组件呢?

这也太奇怪了

- 于是我转而思考,为什么大家都不做二维表格,于是猜想是不是大多数的二维表格,是可以转化为一维表格的呢?

答案的确如此,二维表格跟一维表格是类似的,至于表头里数量不固定的问题,可以后端传值给你。然后你循环渲染就好啦。

所以面对没做过的需求,也不用着急,只要是合理的需求,我们好好思考,总归是有办法解决的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97251.html

相关文章

  • 「前端早读君009」快速小程序开发之微信小程序内嵌 H5

    摘要:前言微信小程序中可以直接运行页面,这一新组件的产生,可能直接导致小程序数量迎来一波高峰。微信小程序配置系列问题配置域名业务域名中配置的就是小程序以及和中引用的域名。 今日励志语 要接受自己行动所带来的责任而非自己成就所带来的荣耀。 前言 微信小程序中可以直接运行 web 页面,这一新组件 web-view 的产生,可能直接导致小程序数量迎来一波高峰。本篇博文将从业务选型,微信小程序后台...

    wh469012917 评论0 收藏0
  • AppHost:大前端融合下的 Hybrid 开发解决方案

    摘要:接口管理独立于的版本号,使用特性嗅探实现新旧的兼容,简单直观。其中在网易有钱上使用了年多,支持了网易有钱的不断增长的业务需求,期间解决了很多遇到的通有的问题。目前还没有在线上系统中使用,目前正逐步将整体接入网易严选和网易推手。 showImg(https://upload-images.jianshu.io/upload_images/277783-33c33da3e99a070d.p...

    XBaron 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<