组里正在做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

最新文章

  1. Nginx基础知识之————RTMP模块专题(实践文档)
  2. 一起来花5分钟写一个PHP入门Demo
  3. 顺序执行到来的消息 actor
  4. 深入理解OAuth2.0
  5. [Locked] Longest Substring with At Most Two Distinct Characters
  6. UVa 674: Coin Change
  7. .NET获取机器信息
  8. 1106关于解决erp单个商品同步的问题
  9. iOS AVAudioPlayer 提示音
  10. BZOJ 1832: [AHOI2008]聚会( LCA )
  11. 【iOS】swift 让程序挂起后,能在后台继续运行任务
  12. navicate连接不上阿里云mysql
  13. js中几种实用的跨域方法原理详解【转】
  14. C++11标准中常用到的各种算法汇总.
  15. nginx 项目部署
  16. docker容器的安装与使用
  17. npm -D -S 的区别
  18. odoo开发笔记 -- self详解
  19. Android-SpinKit 进度条 (ProgressBar)
  20. C# DataTable详解

热门文章

  1. Exadata扩展
  2. 奇妙的 CSS几何图形
  3. Codeforces Round #532 (Div. 2)- C(公式计算)
  4. poj 2763 求树上的两个节点的最短距离+在线修改答案
  5. BestCoder Round #64 1001
  6. Html背景图
  7. Java中Array与ArrayList的主要区别
  8. ora-1652
  9. Win7 IIS 局域网中无法访问网页
  10. android 闹钟设置问题