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 相关文章推荐
javascript数字数组去重复项的实现代码
Dec 30 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
JavaScript数组迭代器实例分析
Jun 09 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
Feb 20 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
Vue中img的src属性绑定与static文件夹实例
May 18 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
JavaScript"模拟事件"的注意要点详解
Feb 13 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 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
1.PHP简介
2006/10/09 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
Javascript学习笔记 delete运算符
2011/09/13 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
python选择排序算法实例总结
2015/07/01 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python 项目目录结构设置
2020/02/14 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
祖国在我心中演讲稿
2014/01/15 职场文书
个人简历自我评价范文
2014/02/04 职场文书
装修活动策划方案
2014/08/27 职场文书
地道战观后感500字
2015/06/04 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js