Ruby/Rails 代码静态分析

  • September 27, 2016 12:36
  • Posted by dino
  • 0 comments

目的

引入代码静态分析是为了让开发人员可以检查项目的代码,根据 Ruby GuideRails Best Practices 等等code style可以写出更美观,更易读,更高效, 更易维护,更安全的代码。

使用的工具

  1. RuboCop. View on Github
  2. Rails Best Practices. View on Github

RuboCop

RuboCop是一款针对ruby代码的静态语法分析工具,主要是以Ruby Style Guide为参考依据。

Quick start:

$ cd my/cool/ruby/project
$ rubocop

Report

RuboCop 接受Formatters参数,常用参数有:

  • Progress Formatter (default)
  • Emacs Style Formatter
  • File List Formatter
  • JSON Formatter
  • HTML Formatter
  • ...

例如:rubocop --format html -o rubocop.html,就会将输出结果以HTML的形式输出到rubocop.html文件上。

输出的HTML Report非常清晰直观: RuboCop Report

Configuration

RuboCop可以通过读取.rubocop.yml配置文件来配置参数设置等。并且可以在.rubocop.yml里继承其他定义好的文件:

inherit_from:
  - ../.rubocop.yml
  - ../conf/.rubocop.yml

这样就可以非常方便的将一些全局性的,常用的配置放在一个global的配置文件内,具体项目配置文件再继承就可以了。可以理解为global configlocal config

Caching

通过在.rubocop.yml中配置AllCops: UseCachetrue,可以开启缓存的功能。在针对大型项目的时候非常有用! 当rubocop运行时被中断后,再次运行将会先从cache文件中读取缓存好的信息,而不是重新开始读取分析项目文件

RuboCop小结

优点:

  • 默认提供多种formatters的输出方式。
  • 有缓存功能,在针对大型项目时非常有用!
  • 拓展容易,可以自己定制Cop和Formatter。
  • 可以集成到编辑器上!

缺点:

  • 输入的结果列表没有分类,只是简单的排列,不便于查找与管理。

Rails Best Practices

Rails Best Practices是针对Rails Projects的静态代码质量分析工具。主要是根据ruby开发人员网站上总结出来的众多最佳实现方式来分析项目的代码。包括方法的定义,使用数据查询视图渲染等等。

Quick start

$ cd my/cool/ruby/project
$ rails_best_practices .

常见的建议

Rails Best Practices总结了很多最佳实践,常见的有以下几种类型:

  • Move code from Controller to Model
  • RESTful Conventions
  • Model
  • Migration
  • Controller
  • ...

Custom Configuration

首先跑下面这个命令:

rails_best_practices -g

会生出一个rails_best_practices.yml的配置文件。接着我们就可以在这个文件内制定不同的配置了。

Report

Rails Best Practices 也支持HTMLformatter参数,具体有多少种Formatters不太清楚。

rails_best_practices -f html .

输出的HTML文件:

Rails Best Practices Report

在这份report上,我们只能看到简单的 Warning Message,需要通过点击 Warning Message,跳转到Rails Best Practices上查看详细的描述以及原由。 但是有一点好处就是它提供警告类型分类,用户可以通过点击checkbox来选择需要显示的分类。

Rails Best Practices小结

优点:

  • 有很多很好的对于Rails项目的建议。
  • 使用简单。

缺点:

  • 官网上的内容已经很久没有更新了,git repo时有更新。

总结

通过对RuboCopRails Best Practices的简单了解,我觉得开发人员可以把RuboCop集成到编辑器或者集成到项目上,这样就可以在开发的过程中避免一下简单的错误,写出符合Ruby Style的代码。而Rails Best Practices,可以集成到项目里面。在一个合适的项目开发时期(QA期或者维护期),开发人员可以根据Report进行代码优化或者重构,提升项目和代码的维护性、扩展可能性等等。

Comments

Post your comment