问题标签 [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.
code-analysis - 您使用什么重复检测阈值?
我们都同意重复是邪恶的,应该避免(不要重复自己的原则)。为确保这一点,应使用静态分析代码,如Simian(多语言)或Clone Detective(Visual Studio 插件)
我刚刚阅读了Ayende 关于科比的帖子,他说:
Kobe 的 8.5% 是复制粘贴代码。那就是在灵敏度调高的情况下,如果我们将阈值设置为 3,这是我通常所做的,它会上升到 12.5%。
我认为 3 作为阈值非常低。在我的公司,我们提供质量代码分析即服务,我们的默认重复阈值设置为 20,并且存在大量重复。我无法想象如果我们将其设置为 3,我们的客户甚至都不可能考虑更正。
我理解 Ayende 对 Kobe 的看法:它是一个官方样本,并被宣传为“旨在指导您规划、构建和实施 Web 2.0 应用程序和服务”。所以对质量的期望很高。
但是对于您的项目,您使用什么最小阈值进行复制?
相关问题:您如何狂热地消除代码重复?
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 表和过程中的代码使用小写规范化,这不是自相矛盾吗?我应该将所有内容都切换为大写规范化,还是继续使用小写规范化?
python - 识别 C 项目中所有变量的类型
我正在尝试编写一个程序来检查某些 C 源代码是否符合变量命名约定。为此,我需要分析源代码并识别所有局部和全局变量的类型。
最终结果几乎肯定会是一个 python 程序,但分析代码的工具可以是 python 模块,也可以是生成易于解析的报告的应用程序。或者(在下面详细介绍)它可能是从编译器中提取信息的一种方式(通过报告或类似方式)。如果这很有帮助,很可能是Keil ARM 编译器。
我一直在尝试使用ctags,这对于查找所有 typedef 和宏定义等非常有用,但它没有提供查找变量类型的直接方法,尤其是当定义分布在多行时(其中我希望不会!)。
示例可能包括:
等等等等
它还需要确定它们是本地变量还是全局/文件范围变量(ctags 可以这样做),如果它们是本地变量,我最好是在其中声明它们的函数的名称。
另外,我想对函数做类似的事情:识别返回类型,它们是否是静态的以及它们所有参数的类型和名称。
不幸的是,这对于 C 语法来说是相当困难的,因为参数顺序有一定的灵活性,并且参数之间允许的空白数量有很大的灵活性。我曾尝试过使用一些花哨的正则表达式来完成这项工作,但这远非理想,因为可以应用的情况太多了,因此正则表达式很快变得难以管理。我不禁认为编译器必须能够做到这一点(为了工作!),所以我想知道是否可以提取这些信息。Keil 编译器似乎为每个编译的源文件生成一个“.crf”文件,这似乎包含该文件中声明的所有变量,但它是二进制格式,我不能 找不到有关如何解析此文件的任何信息。或者,从 ctags 中获取信息的方法将是完美的。
任何人都可以为此提供任何帮助,我们将不胜感激。
谢谢,
铝
c# - C# 代码分析不喜欢受保护的静态 s_Foo (CA1709, CA1707)
我通常在字段m_
前面添加一个,在成员之前添加一个。private
s_
static
使用类似的代码
我通过 VS2008 的代码分析得到以下警告:
CA1709
:Microsoft.Naming:通过将成员名称“Bar.s_Random”中的“s”更改为“S”来更正其大小写。CA1707
:Microsoft.Naming:从成员名称“Bar.s_Random”中删除下划线。
如何解决这个问题?我应该简单地删除s_
吗?或者为此警告添加全局抑制?
编辑:我的公司缺乏编码标准,所以由我来为我的代码定义它们。(是的,我知道了...)
如果您认为s_
总体上应该被删除,如果您能提供官方来源,我会很高兴。
c# - C# 调用图生成工具
我刚刚得到一堆(大部分未记录的)C# 代码,我想在深入研究并开始重构之前可视化它的结构。我过去(在其他语言中)使用生成调用图的工具来完成此操作。
你能推荐一个好工具来促进 C# 中结构的发现吗?
更新
除了这里提到的工具,我(通过管道)看到人们说.NET Reflector和CLR Profiler具有此功能。有这些经验吗?
web-applications - 您最喜欢的影响分析工具是什么
您最喜欢的影响分析工具是什么?
尤其是在 Web 应用程序的上下文中,考虑到您的代码引用可能至少有 4 种语言(java、jsp、velocity 模板、javascript、html 和不祥的 xml),IDE 不能总是帮助您。
到目前为止,我已经做到了find
,grep
还有更好的吗?
python - 确定所需 Python 最低版本的工具?
有没有类似于 Pylint 的东西,它会查看 Python 脚本(或运行它),并确定每行(或函数)需要哪个版本的 Python?
例如,理论用法:
这样的事情可能吗?我想最简单的方法是将所有 Python 版本放在光盘上,对每个版本运行脚本,看看会发生什么错误。
sql - Oracle死锁检测工具
我正在寻找一个 Oracle 查询和 PL/SQL 过程(触发器、约束等)的静态分析器 - 一个将传递我们的数据库方案并指向潜在死锁的工具。就像Java 的FindBugs一样。
如果这样的工具不存在,你想要吗?
lua - 静态分析 Lua 代码的潜在错误
我正在使用一个封闭源代码的应用程序,它加载 Lua 脚本并允许通过修改这些脚本进行一些自定义。不幸的是,如果 Lua 脚本之一出现问题,该应用程序不太擅长生成有用的日志输出(我得到的只是“脚本失败”)。
我意识到动态语言几乎可以抵抗静态代码分析,例如可以分析 C++ 代码的方式。
不过,我希望会有一个工具通过 Lua 脚本运行,例如警告未在特定脚本的上下文中定义的变量。
基本上我正在寻找的是一个用于脚本的工具:
会输出:
对于大多数事情,它只能是真正的警告,但这仍然很有用!这样的工具存在吗?或者可能是具有类似功能的 Lua IDE?
谢谢,克里斯
performance - 分析代码以提高效率?
您使用哪些工具来确定代码的效率?您是否使用运行大量测试的本地应用程序或某些商业产品?您是否使用自己的知识来测试代码的某些区域,或者使用一些工具来分析代码的弱点?