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实现浏览器的各种菜单命令比如打印、查看源文件等等
Oct 24 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
JavaScript数组迭代器实例分析
Jun 09 Javascript
javascript实现密码验证
Nov 10 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
vue+iview 兼容IE11浏览器的实现方法
Jan 07 Javascript
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
Mar 24 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 Javascript
详解vue中在父组件点击按钮触发子组件的事件
Nov 13 Javascript
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
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
vue实现选中效果
2020/10/07 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Python反转序列的方法实例分析
2018/03/21 Python
在python中bool函数的取值方法
2018/11/01 Python
详解python 中in 的 用法
2019/12/12 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
业务员简历自我评价
2014/03/06 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
创业计划书之农家乐
2019/10/09 职场文书
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers