node.js学习总结之调式代码的方法


Posted in Javascript onJune 25, 2014

前言

你有没有曾经调式某段代码时,总觉得世界上有鬼?

你有没有曾经调式API时,总感觉是调用第三方的接口问题或者文档说明不对?

你有没有曾经调式一个bug 时,总感觉问题的来源是使用的方式不对?

你有没有在安装一个服务时,总感觉文档或者环境不相符合?

相信过程和方法,切勿被结果误导 ............

概述

调式代码很多时候类似于查案一样,只是结果的重要程度不同,警察查案为的是人民安稳,而我们调式则是为了系统的安稳。既然这样我们就不要冤枉任何一段代码和程序,以免他们受到不合理的惩罚。

以下的一些过程方法都来自于个人的总结,从个人角度说前人的一些方法都是经过长期的经验积累,当然参考性理论性都比较强,而作为个人的方法,则可能更适合像我等 DS 。

测试方法

代码过程式调式方法

代码调式首先要注意的是过程,你必须要理清楚导致最终结果的思路,也就是作案的过程,从作案过程中的一步步跟进得到作案结果。在作案过程分析中对于每一个疑点都必须打上标记(也就是代码中所提到的 log 信息)。经过这样的分析过程后,再进行黑盒测试,添加输入,验证结果。最终根据每一步的标记来验证你的判断,从而找到原因。

以上的方案是一种过程式的调式方式。这种方式的优点不言而喻,直接可以通过一个测试就可以分析清楚整个过程,但是这种方式很耗时间,理清楚自己的代码逻辑尚可,而想要理清楚他人逻辑代码则可要难于上青天。

单元测试调式方法

单元测试的基本目的是保证某个函数、类或者某个功能模块的正常运作,包括其异常情况的测试验证。而作为程序员最喜欢的验证方式莫过于“打桩”(打桩的含义就是提供假默认数据),这种方式调式起来非常方便,但是有一个不利的地方就是无法再次利用,因为在我们验证正常以后,很多开发人员都会将其注释或者删除,因此如果我们在开发环境开发完成,但我们希望在测试环境验证时,则必须又要重新写一篇打桩逻辑,那么这样看,到现网时,则会更加的麻烦。既然这么多不便,你可以尝试下面的做法。

添加一个单元测试类,这个类需要控制其权限,只有通过后台登录或者是命令行才可以执行,该类承载的作用就是对系统的关键逻辑进行检测,并且做出相应的测试输出结果。要相信所有的接口类都是可以通过单元测试类去完成测试的。很多时候程序员在质疑,这件事情是不是应该我们做?其实还真是需要我们去做,毕竟很多测试现在做的都是黑盒测试。

这种调式方法适合在开发过程中,并且可以保证我们现网的代码发布后运行正常。希望大家在计划开发时间时也将该过程并于开发阶段。

快速定位法

前面两个那么复杂的过程太理想化了?我的代码就只有 100 行,并且系统也不复杂。如果是这样的话,那么就快速的进行定位分析。很多时候会遇到

1、输入正常,输出异常;

2、输入正常,逻辑异常,输出异常;

3、输入异常,逻辑正常,输出正常;

4、输入异常,逻辑异常,输出无。

在个人的开发过程中,我经常会遇到上面的某种类型的问题,比如在 Node.js 开发过程中,遇到 string.length 提示 string 没有 length 方法。当时就昏头的在问自己,为什么其他 string 都有 length 方法,为什么这个就没有呢?应该很多同学都知道问题就在于这个 string 根本就不是 string ,只是说你自己把它理想化为 string 了,也就是你输入的本来就有问题。那么定位这个问题的最好办法就是打印输入,打印输出即可。

可能其他的程序没有这么简单,但是最基本的就是在主函数中的会遇到异常的函数都进行输入输出判断,那样就可以快速的定位。

切记:不要断章取义,自以为是。

上面的方法以及过程都只是基于 PHP 或者 Node.js 总结出来的,对于 C & C++ 可能存在相似或者相异处。不喜勿喷,且看且珍惜吧。

Javascript 相关文章推荐
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
让人蛋疼的JavaScript语法特性
Sep 30 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
Mar 31 Javascript
Bootstrap每天必学之前端开发框架
Nov 19 Javascript
jQuery实现获取绑定自定义事件元素的方法
Dec 02 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
js实现内置计时器
Dec 16 Javascript
Vue单文件组件开发实现过程详解
Jul 30 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 Javascript
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
javascript获取元素偏移量的方法有哪些
Jun 24 #Javascript
Jquery之Bind方法参数传递与接收的三种方法
Jun 24 #Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 #Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 #Javascript
搭建pomelo 开发环境
Jun 24 #Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 #Javascript
Node.js中require的工作原理浅析
Jun 24 #Javascript
You might like
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
php检查页面是否被百度收录
2015/10/28 PHP
php中数组最简单的使用方法
2020/12/27 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python模拟事件触发机制详解
2018/01/19 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python列表使用实现名字管理系统
2019/01/30 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
python中format函数如何使用
2020/06/22 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
市场营销专业毕业生自荐信
2013/11/02 职场文书
终端业务员岗位职责
2013/11/27 职场文书
整改报告怎么写
2014/11/06 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
nginx部署多前端项目的几种方法
2021/05/25 Servers