组里正在做SaaS产品,其中一些模块(Module)是Node.js实现,这里我们主要使用Node.js实现Web Server来提供服务。

  在做SaaS项目之前,组里的开发模式是传统的Deverloper + QA的模式,这是传统的协作模式,Developer负责写代码开发,当然也会有基本的自测,QA负责测试,遇到问题,提Bug给Developer去修复,Developer修复Bug后,由QA来验证并记录Bug。但这样的协作模式已不适合SaaS产品的开发,SaaS产品更新迭代快,模块众多,这就要求要转变模式。Developer要负责自身模块更多的测试,单元测试要覆盖全。仅有少量的QA会负责集成测试。

  由此更多的模块质量要求Developer来保证。

  因为我刚好参与其中的Node.js模块,因为我小结了一些目前Node.js模块开发时如何自测。

  建议在项目目录中,新建为"test"的文件夹,存放测试用的脚本和数据。

  主要有三,如下。

一. 假数据(Mock Data)和写测试脚本(Script)

   Node.js做Server,通常要依赖其他模块,来获取数据或服务等。如果你做的模块OK了,但别人的模块往往不一定完全OK。所以接口十分重要。因此可以写一些脚本来自测,同时需要的其他模块数据,可以自己制造些假数据,放在JSON文件中,来调用。

   脚本可以是JS或Bash脚本等,根据实际。

   有了脚本和数据,就可以来测试自己的模块,测试接口是否OK等。

二. Benchmark

   在Node.js中,有一个NPM模块很流行,叫benchmark,它的作用是用来做性能分析和测试。它的GitHub官网是:https://github.com/bestiejs/benchmark.js

   它的使用场景,例如你有几种方法来实现同一个功能,但你又不知道哪种性能更好。它便可以帮你分析。

   例如下面官方提供的示例。

 var suite = new Benchmark.Suite;

 // add tests
suite.add('RegExp#test', function() {
/o/.test('Hello World!');
})
.add('String#indexOf', function() {
'Hello World!'.indexOf('o') > -1;
})
// add listeners
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
// run async
.run({ 'async': true }); // logs:
// => RegExp#test x 4,161,532 +-0.99% (59 cycles)
// => String#indexOf x 6,139,623 +-1.00% (131 cycles)
// => Fastest is String#indexOf

  在这个测试例子中,分析比较了用正则表达式还是indeOf哪种方法的性能更高。最终indexOf胜出。

  因此Benchmark在Node.js模块中建议使用,用来做性能测试。

三. JSHint - 一款Javascript代码分析工具

   这个工具很常用,每次写完Javascript的代码,就可以通过这个工具来扫描下代码,如果有错误(Error)或者警告(Warning)提示,就可以用来发现代码中的问题和可优化的地方,可及时修改。

   同时JSHint提供对文本编辑器插件的各种支持,像我用的Vim就配置了JSHint,每次开发完,直接输入命令:JSHint,很好用,推荐。

   同时建议在Javascript代码文件首行增加"user strict;",这样是默认使用严格模式,更安全,更严谨。例如下例。

 /* jshint strict: true, undef:true, unused:true, latedef: true, newcap: true, noempty: true, forin: true,
freeze: true, node: true, curly:true, camelcase: true */
"use strict";

   JSHint官网:http://jshint.com/

目前根据自己的经验,只总结出以上三点。后面如果有更多的实践和总结,会及时更新在这里。谢谢

Kevin Song

2015-5-28

Developer - 如何自我保证Node.js模块质量的更多相关文章

  1. 如何发布一个自定义Node.js模块到NPM(详细步骤)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  2. 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  3. Node.js模块

    每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js).JSON文本文件(.json)和二进制模块文件(.node). mymodul.js function Hell ...

  4. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  5. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  6. Node.js模块封装及使用

    Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一.Node.js模块封装 1.创建一个名为censorify的文件夹 2.在c ...

  7. 10、Node.js模块系统

    ##################################################################################介绍Node.js模块系统为了让No ...

  8. node.js 模块和其下载资源的镜像设置

    以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...

  9. Node Js模块讲解

    Node JS模块 所谓的Node JS模块其实就是指Node JS package,即nodejs包. 一 什么是NodeJS模块? 在说这个问题之前,我们有必要提出一个概念,即模块规范. 现阶段J ...

随机推荐

  1. 最小生成树算法 prim kruskal两种算法实现 HDU-1863 畅通工程

    最小生成树 通俗解释:一个连通图,可将这个连通图删减任意条边,仍然保持连通图的状态并且所有边权值加起来的总和使其达到最小.这就是最小生成树 可以参考下图,便于理解 原来的图: 最小生成树(蓝色线): ...

  2. html表单笔记

    1.下面是 <form> 属性的列表: accept-charset 规定在被提交表单中使用的字符集(默认:页面字符集). action 规定向何处提交表单的地址(URL)(提交页面). ...

  3. 利用Android studio开发Java工程

    1. 新建项目 新建项目肯定是去new,但到底是new project还是new module是一个问题.在这解释一下,如果new project的话是新建一个工程,相当于新建一个工作区,工程中可以有 ...

  4. thinkPHP5.0获取器

    获取器的作用是在获取数据的字段值后自动进行处理,例如,我们需要对状态值进行转换,可以使用: class Cate extends Model { public function getTypeAttr ...

  5. py---------常用模块

    一.认识模块? 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1. 使用pytho ...

  6. ES6结构赋值

    解构赋值 从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值. 什么是解构赋值?我们先看看传统的做法,如何把一个数组的元素分别赋值给几个变量: var array = ['h ...

  7. kafka原生producer API

    转自https://blog.csdn.net/tianlan996/article/details/80495208 1. 类 public class KafkaProducer<K,V&g ...

  8. springboot 启动的java进程默默终止

    首先说明这是一个灵异事件......... 场景1 :把之前用map实现的缓存用Redis重构,高高兴兴上线更新,10 分钟后,老板告诉我,项目停了,what ??? 像我这么帅气,英俊,聪明的人,更 ...

  9. Django自定义过滤器

    1.首先在在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名只能是temp ...

  10. django中的Ajax文件上传

    主要介绍两个 1.ajax文件上传 2.写路由器 3.创建对应的函数 4.file_put.html代码 <!DOCTYPE html> <html lang="en&qu ...