问题标签 [code-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
991 浏览

code-analysis - 您使用什么重复检测阈值?

我们都同意重复是邪恶的,应该避免(不要重复自己的原则)。为确保这一点,应使用静态分析代码,如Simian(多语言)或Clone Detective(Visual Studio 插件)

我刚刚阅读了Ayende 关于科比的帖子,他说:

Kobe 的 8.5% 是复制粘贴代码。那就是在灵敏度调高的情况下,如果我们将阈值设置为 3,这是我通常所做的,它会上升到 12.5%。

我认为 3 作为阈值非常低。在我的公司,我们提供质量代码分析即服务,我们的默认重复阈值设置为 20,并且存在大量重复。我无法想象如果我们将其设置为 3,我们的客户甚至都不可能考虑更正。

我理解 Ayende 对 Kobe 的看法:它是一个官方样本,并被宣传为“旨在指导您规划、构建和实施 Web 2.0 应用程序和服务”。所以对质量的期望很高。

但是对于您的项目,您使用什么最小阈值进行复制?

相关问题:您如何狂热地消除代码重复?

0 投票
3 回答
6917 浏览

c# - 使用 String.ToUpperInvariant() 规范化字符串

我目前在我的 SQL Server 数据库中以小写形式存储规范化版本的字符串。例如,在我的 Users 表中,我有一个 UserName 和一个 LoweredUserName 字段。根据上下文,我使用 T-SQL 的 LOWER() 函数或 C# 的 String.ToLower() 方法来生成用户名的小写版本以填充 LoweredUserName 字段。根据Microsoft 的指导方针Visual Studio 的代码分析规则 CA1308,我应该使用 C# 的 String.ToUpperInvariant() 而不是 ToLower()。根据微软的说法,这既是性能问题,也是全球化问题:转换为大写字母是安全的,而转换为小写字母会导致信息丢失(例如,土耳其语的“I”问题)。

如果我转而使用 ToUpperInvariant 进行字符串规范化,我也将不得不更改我的数据库架构,因为我的架构基于Microsoft 的 ASP.NET Membership框架(请参阅此相关问题),它将字符串规范化为小写。

微软告诉我们在 C# 中使用大写规范化,而它自己的 Membership 表和过程中的代码使用小写规范化,这不是自相矛盾吗?我应该将所有内容都切换为大写规范化,还是继续使用小写规范化?

0 投票
5 回答
2783 浏览

python - 识别 C 项目中所有变量的类型

我正在尝试编写一个程序来检查某些 C 源代码是否符合变量命名约定。为此,我需要分析源代码并识别所有局部和全局变量的类型。

最终结果几乎肯定会是一个 python 程序,但分析代码的工具可以是 python 模块,也可以是生成易于解析的报告的应用程序。或者(在下面详细介绍)它可能是从编译器中提取信息的一种方式(通过报告或类似方式)。如果这很有帮助,很可能是Keil ARM 编译器。

我一直在尝试使用ctags,这对于查找所有 typedef 和宏定义等非常有用,但它没有提供查找变量类型的直接方法,尤其是当定义分布在多行时(其中我希望不会!)。

示例可能包括:

等等等等

它还需要确定它们是本地变量还是全局/文件范围变量(ctags 可以这样做),如果它们是本地变量,我最好是在其中声明它们的函数的名称。

另外,我想对函数做类似的事情:识别返回类型,它们是否是静态的以及它们所有参数的类型和名称。

不幸的是,这对于 C 语法来说是相当困难的,因为参数顺序有一定的灵活性,并且参数之间允许的空白数量有很大的灵活性。我曾尝试过使用一些花哨的正则表达式来完成这项工作,但这远非理想,因为可以应用的情况太多了,因此正则表达式很快变得难以管理。我不禁认为编译器必须能够做到这一点(为了工作!),所以我想知道是否可以提取这些信息。Keil 编译器似乎为每个编译的源文件生成一个“.crf”文件,这似乎包含该文件中声明的所有变量,但它是二进制格式,我不能 找不到有关如何解析此文件的任何信息。或者,从 ctags 中获取信息的方法将是完美的。

任何人都可以为此提供任何帮助,我们将不胜感激。

谢谢,

0 投票
6 回答
2916 浏览

c# - C# 代码分析不喜欢受保护的静态 s_Foo (CA1709, CA1707)

我通常在字段m_前面添加一个,在成员之前添加一个。privates_static

使用类似的代码

我通过 VS2008 的代码分析得到以下警告:

  • CA1709:Microsoft.Naming:通过将成员名称“Bar.s_Random”中的“s”更改为“S”来更正其大小写。
  • CA1707:Microsoft.Naming:从成员名称“Bar.s_Random”中删除下划线。

如何解决这个问题?我应该简单地删除s_吗?或者为此警告添加全局抑制?

编辑:我的公司缺乏编码标准,所以由我来为我的代码定义它们。(是的,我知道了...)

如果您认为s_总体上应该被删除,如果您能提供官方来源,我会很高兴。

0 投票
8 回答
28757 浏览

c# - C# 调用图生成工具

我刚刚得到一堆(大部分未记录的)C# 代码,我想在深入研究并开始重构之前可视化它的结构。我过去(在其他语言中)使用生成调用图的工具来完成此操作。

你能推荐一个好工具来促进 C# 中结构的发现吗?

更新

除了这里提到的工具,我(通过管道)看到人们说.NET ReflectorCLR Profiler具有此功能。有这些经验吗?

0 投票
1 回答
1702 浏览

web-applications - 您最喜欢的影响分析工具是什么

您最喜欢的影响分析工具是什么?

尤其是在 Web 应用程序的上下文中,考虑到您的代码引用可能至少有 4 种语言(java、jsp、velocity 模板、javascript、html 和不祥的 xml),IDE 不能总是帮助您。

到目前为止,我已经做到了findgrep还有更好的吗?

0 投票
3 回答
3614 浏览

python - 确定所需 Python 最低版本的工具?

有没有类似于 Pylint 的东西,它会查看 Python 脚本(或运行它),并确定每行(或函数)需要哪个版本的 Python?

例如,理论用法:

这样的事情可能吗?我想最简单的方法是将所有 Python 版本放在光盘上,对每个版本运行脚本,看看会发生什么错误。

0 投票
4 回答
3076 浏览

sql - Oracle死锁检测工具

我正在寻找一个 Oracle 查询和 PL/SQL 过程(触发器、约束等)的静态分析器 - 一个将传递我们的数据库方案并指向潜在死锁的工具。就像Java 的FindBugs一样。

如果这样的工具不存在,你想要吗?

0 投票
5 回答
4837 浏览

lua - 静态分析 Lua 代码的潜在错误

我正在使用一个封闭源代码的应用程序,它加载 Lua 脚本并允许通过修改这些脚本进行一些自定义。不幸的是,如果 Lua 脚本之一出现问题,该应用程序不太擅长生成有用的日志输出(我得到的只是“脚本失败”)。

我意识到动态语言几乎可以抵抗静态代码分析,例如可以分析 C++ 代码的方式。

不过,我希望会有一个工具通过 Lua 脚本运行,例如警告未在特定脚本的上下文中定义的变量。

基本上我正在寻找的是一个用于脚本的工具:

会输出:

对于大多数事情,它只能是真正的警告,但这仍然很有用!这样的工具存在吗?或者可能是具有类似功能的 Lua IDE?

谢谢,克里斯

0 投票
9 回答
4337 浏览

performance - 分析代码以提高效率?

您使用哪些工具来确定代码的效率?您是否使用运行大量测试的本地应用程序或某些商业产品?您是否使用自己的知识来测试代码的某些区域,或者使用一些工具来分析代码的弱点?