我们拥有庞大的代码库,并且我们正在生成在编译时以Java等类型语言捕获的问题,但我们直到Ruby中的运行时才会捕获它们。这很糟糕,因为我们生成的错误大部分时间都是错别字或重构会留下一些无效的代码。
示例:
def mysuperfunc
# some code goes here
# this was a valid call but not anymore since enforcesecurity
# signature changed
@system.enforcesecurity
end
我的意思是,IDE可以做到但有些人使用ATOM或崇高,所以我们需要一些东西来编译"并报告此类问题,以便他们无法实现部署。你一直在用什么?
这产生了我们的错误报告的一小部分,但由于我们被迫以荒谬的速度生产,我们没有100%的代码覆盖率。如果没有工具可以提供帮助,我只需确保每个人都使用IDE并使用Rubymine等工具运行报告。
我们的堆栈包括rspec,minitest,SimpleCov。我们强制执行代码审查,多包部署(dev,qa,pre-prod,sandbox,prod)。还有一些问题正在达到更高的水平,并使我们的程序员看起来很糟糕。我不是在寻找魔法,只是一点自动化可能会有所帮助。
答案 0 :(得分:4)
不幸的是,Halting问题,Rice的定理以及所有其他Undecidability和Uncomputability Results告诉我们,在一般情况下,根本不可能静态地确定关于运行时行为的任何“有趣”属性一个程序。我们甚至无法静态地确定像“它会停止”这样简单的事情,那么我们如何确定“没有错误”?
某些可以静态确定的东西,并且某些受限制的程序可以静态地确定一些有趣的属性,但在很大程度上,这是不可能的。即使在很小的范围内 可能,它通常要求语言专门设计为易于静态分析(Ruby不是)。
话虽如此,有些工具包含某些启发式来指出可能有问题的代码。某些编码标准可能有助于避免错误,并且有一些工具可以强制执行这些编码标准。要搜索的关键字是“代码质量工具”,“linter”,“静态分析器”等。您已经在其他答案和评论中给出了示例,并且给出了这些示例和这些关键字,您可能会发现更多。
但是,我也想讨论你写的东西:
我们被迫以荒谬的速度制作,我们没有100%的代码覆盖率
这是一个问题,必须从两个方面来解决:
答案 1 :(得分:2)
我没有意识到你想要的任何东西。但是,有一些宝石将分析代码并警告您一些错误和/或不良做法。试试这些:
答案 2 :(得分:2)
<强>去皮强>
https://rubygems.org/gems/flay
通过回购https://github.com/seattlerb/flay:
描述:
Flay分析结构相似性的代码。字面上的差异 值,变量,类,方法名称,空格,编程风格, 大括号vs do / end等都被忽略了。完全做到这一点。
[特性:
- 报告任何级别代码的差异。
- 为相同的节点添加分数乘数。
- 忽略文字值,变量,类和方法名称的差异。
- 忽略空格,编程风格,大括号与do / end等的差异。
- 跨文件工作。
- 添加flay-persistent插件以适应大型/多个项目。
- 运行
--diff
以查看代码的N路差异。- 提供保守(默认)和
--liberal
修剪选项。- 提供
--fuzzy
重复检测。- 语言无关:插件系统允许其他语言被剥离。
- 使用
.rb
和.erb
发货。- javascript和其他人会 单独提供。
- 为Rakefiles包含
FlayTask
。- 使用
path_expander
,您可以使用:
dir_arg
- 自动展开目录@file_of_args
- 在文件中保留参数-path_to_subtract
- 忽略相交的子集 文件/目录- 跳过通过
.flayignore
中的模式匹配的文件(.gitignore
的子集格式)。- Totally rad。
<强> FLOG 强>
https://rubygems.org/gems/flog
通过回购https://github.com/seattlerb/flog:
描述:
Flog在易于阅读的痛苦报告中报告最受折磨的代码。 分数越高,代码就越痛苦。
[特性:
- 易于阅读报告复杂性/痛苦。
- 使用
path_expander
,您可以使用:
dir_arg
- 自动展开目录@file_of_args
- 在文件中保留参数-path_to_subtract
- 忽略文件/目录的交叉子集概要:
% ./bin/flog -g lib Total Flog = 1097.2 (17.4 flog / method) 323.8: Flog total 85.3: Flog#output_details 61.9: Flog#process_iter 53.7: Flog#parse_options ...
答案 3 :(得分:1)