Better

Ethan的博客,欢迎访问交流

Node与Express开发之工具篇

最近准备系统的学习Node和Express,学习笔记-工具篇!主要内容有版本控制系统Git的基本使用和QA测试工具等介绍。

工作习惯

最佳实践

他的意思是你应该正确的做事,而不要走捷径。毫无疑问,你一定听说过那句工程格言:面对“快速” “低廉” “优质”三个选项,你总是只能任选其中两个

你需要考虑正确做事的累计价值,你第一次正确做事所用的事件可能是你马马虎虎迅速做事所需时间的5倍。然而第二次将只需要3倍的事件。等你做过很多次后,正确做事的速度几乎能与马马虎虎迅速做事一样了。

你应该遵循完美的规则去练习,这样才能成就完美。

版本控制

版本控制的价值:

  • 文档
  • 归属
  • 试验

git使用

首先就是安装啦,输入git --version,如果没有输出版本号,则需要安装Git。

安装完成后,基本使用:

  1. 仓库初始化 - git init
  2. 文件忽略 - .gitignore
    创建.gitignore文件,以防止不慎把不想添加的东西加进去,你可以把任何想让Git默认忽略的文件或目录写在该文件里,每个一行,支持通配符,如果你的编辑器会创建带波形号的备份文件,可以在文件中加入*~。Mac的话还要在文件里加入.DS_Store,Node应用的话肯定需要加入node_modules。
  3. 文件添加 - git add -A
  4. 文件提交 - git commit -m "test"

.gitignore文件中的条目也适用于子目录。一个项目在不同层次的目录中可以有多个.gitignore文件。

更多git使用,见Git相关!

npm包

package.json文件具有双重作用:描述项目和列出依赖项。

注意包版本号之前的插入符^,这表明在下一个主要版本号之前,所有以指定版本号开始的版本都可以使用。这是使用npm install --save时默认指定的版本范围,并且通常很安全。

因为package.json文件中列出了所有的依赖项,所以说node_modules目录实际上是个衍生品,如果你把它删除了,要让项目重新恢复工作,只需要运行npm install即可。

不管什么时候再项目中使用了Node模块,你都要确保他作为依赖项出现在package.json文件中。如果没能做到这一点,npm将无法构建出恰当的依赖项,而当其他开发人员检出项目时,就无法正确安装依赖项,包管理器的价值也不能得到有效发挥。

Node模块

Node模块和npm包是两个关联但又彼此不同的概念,Node模块就像他的名字一样,提供了一个模块化和封装的机制。npm包则提供了一种存储、版本化和引用项目的标准范式。

require是一个用来引入模块的Node函数。Node默认会在目录node_modules中寻找这些模块。同时Node还提供了创建自有模块的机制,但是你永远不要在node_modules中创建自己的模块。

首先创建保存模块的目录,名字随意,但一般可以称为lib。Demo如下:

var fortuneCookies = ['data1','data2','data3','data4','data5'];
exports.getFortune = function(){
    var idx = Math.floor(Math.random()*fortuneCookies.length);
    return fortuneCookies[idx];
}

如果你想让一个东西在模块外可见,则必须把它加到exports上。这是一件好事,因为封装可以减少容易出错和较脆弱的代码。

如何使用自己构建的Node模块呢?

var fortune = require('./lib/fortune.js');
fortune.getFortune();

我们在模块名称前添加了前缀./,这是告诉Node,他不应该到node_modules目录中查找这个模块,如果我们忽略了这个前缀就会导致失败!

使用模块封装功能既强大又简便,他能改善项目的总体设计和可维护性,又能使测试变得更加容易!

质量保证

质量保证是很容易让开发人员感到恐惧的词汇,毕竟每个人都希望制作出高品质的软件!

  • 大型或资金充裕的组织
    通常会有QA部门,但是QA和开发部门之间是一种敌对关系。
  • 小型或预算有限的组织
    通常没有QA部门,开发人员既要开发,又要承担QA工作。然而QA和开发大不相同,它需要不同的个性和才能,即使开发人员有QA思维模式,但当最终期限临近时,在QA上投入的力量无法保证,从而对项目造成损害。

QA值得吗?

QA的成本很高,对于QA而言,投入和产出之间的关系很难理清。一个完善的产品需要花费更长的时间去处理质量问题。

在Web开发中,质量可以分解为四个维度:

  • 到达率 - 市场普及程度,从开发角度看,搜索引擎优化(SEO)对到达率影响最大
  • 功能 - 能否把用户留下很大程度取决于功能的质量,功能测试一般可以自动执行
  • 可用性 - 可用性评估的是人机交互,因为可用性评估的根本输入是用户,因此一般无法自动完成
  • 审美

测试类型与技术概览

测试主要分为两大类:

  • 单元测试 - 测试力度非常细,对单个组件进行测试以确保其功能正常
  • 集成测试 - 多个组件甚至整个系统之间的交互进行测试

测试技术概览

  • 页面测试
    测试页面的表示和前端功能,同时设计单元和集成测试,常用工具Mocha。
  • 跨页测试
    一个页面跳转到另一个页面的功能测试。常用工具Zombie.js
  • 逻辑测试
    逻辑测试会对逻辑域进行单元和集成测试。
  • 去毛
    • 去毛不是要找错误,而是要找潜在的错误。去毛的一般概念是找出可能有错误的区域,或者可能在将来导致错误发生的问题代码,常用工具JSHint。
    • 好的去毛机就想第二双眼睛,它能发现被我们人类大脑忽略的东西
    • 坚持用去毛机能让你变成更优秀的程序员
  • 链接检查
    • 链接检查确保网站没有破损的链接,链接检查属于单元测试(链接有效或无效),常用工具LinkChecker。
    • 检查死链接看起来没什么吸引力,但它对搜索引擎如何给你的网站评级却有巨大的影响

介绍完了基本工具,有没有什么东西能自动化完成且强迫开发者运行QA呢?

  • Grunt实现自动化
  • 持续集成CI
    • 基本上你每次向共享服务器贡献代码时,CI都会运行部分或全部测试。测试通过与否的结果取决于CI的配置
    • Node中最流行的CI服务器时Travis CI。


留言