标签: static-code-analysis

如何从Java中的字节码生成程序依赖图(PDG)

我想从Java Bytecode生成程序依赖图(PDG)以进行进一步的程序分析.由于这是旧的(论文来自'87)和可能是众所周知的技术,我认为适当的工具将很容易获得 - 但我无法找到它们.

事实上,广泛的搜索只出现了一些结果:

  • Bandera项目于2006年被废弃.
  • 印度河项目自2007年以来似乎没有得到任何努力,除了它在2009年成为开放源代码.
  • Moose JEE项目似乎很新,因为基本上没有任何文档.
  • 还有Soot框架,它提供了一些类(参见JavaDoc),但似乎缺少一代的实现.事实上,Soot是Bandera和Indus的基础.

所以我的问题如下:那里有没有活着的维护实现?有没有人有上述任何一个项目的经验?你会推荐什么?

感谢您的投入,非常感谢!

java code-analysis static-analysis static-code-analysis

10
推荐指数
1
解决办法
3413
查看次数

RunCodeAnalysis = true在命令提示符下无效(MSBuild)

我正在尝试让msbuild像在VS中一样输出代码分析信息.我在VS中有一个名为"CodeAnalysis"的项目配置,用于在构建时运行代码分析(使用最小规则集).无论如何这在VS中运行良好,但是当我从命令行运行msbuild时它只显示基本的构建警告,并且它根本不运行代码分析.任何人都知道为什么会这样吗?

项目文件中的配置:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU'">
<OutputPath>bin\</OutputPath>
<CodeAnalysisRuleSet>C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
Run Code Online (Sandbox Code Playgroud)

命令行:

msbuild Solution.sln /p:Configuration=CodeAnalysis /t:Rebuild
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

msbuild Solution.sln /p:RunCodeAnalysis=true /t:Rebuild
Run Code Online (Sandbox Code Playgroud)

msbuild configuration code-analysis static-code-analysis

10
推荐指数
2
解决办法
1万
查看次数

如何以编程方式执行Java IDE为方法引用执行的搜索?

您知道eclipse的所有引用功能(搜索>参考>工作区或Ctrl-Shift-G)吗?我该如何以编程方式运行?

我有一个庞大的代码库,我需要审计安全违规,并需要链接大约十几个条件.

是否有可以用Java分析大型项目(我有1GB的源文件)的库?这是我需要回答的问题:

  • 传入接口列表,找到这些接口的所有实现
  • 搜索该列表以获取我们的安全库的调用
  • 搜索上面列表中引用的每个方法,以确认已进行了正确的授权库调用.

我可以在一天内手动执行此操作,但宁可花2写一个漂亮的脚本来为我做这项工作.

我可以用来编写Eclipse的这些常见任务的脚本上的任何线索吗?理想情况下,我想执行命令行,因此它们可以重复和编写脚本,但显然会采取我能得到的.

java eclipse intellij-idea intellij-plugin static-code-analysis

10
推荐指数
1
解决办法
413
查看次数

在Python代码中标记"print"语句

我不想在Python模块中使用"print"语句,因为我们将使用记录器.

我正在尝试生成一个脚本来检查带有pylint的模块.但是,pylint当前不会将此检测为警告或错误.

我想根据我们的内部Python编程标准将"打印"调用检测为错误或警告.

我怎样才能做到这一点?

python lint static-code-analysis

10
推荐指数
2
解决办法
2670
查看次数

cppcheck 如何抑制内联不匹配抑制?

我发现--suppress=unmatchedSuppression仅抑制 cppcheck 选项中不匹配的抑制类型,但不抑制不匹配的内联抑制。

这是预期的行为吗?

测试.c

  • 第4行是错误的。应该予以警告arrayIndexOutOfBounds

  • 7号线还可以。不应该被警告arrayIndexOutOfBounds

cppcheck-suppress对两条线都有内联。

  1 void f() {
  2     char arr[5];
  3     // cppcheck-suppress arrayIndexOutOfBounds
  4     arr[10] = 0;
  5
  6     // cppcheck-suppress arrayIndexOutOfBounds
  7     const char ok[] = "this line is ok";
  8 }
Run Code Online (Sandbox Code Playgroud)

情况1

Suppress cstyleCast,它在代码中不存在。

 cppcheck --inline-suppr --force --enable=all 
          --xml-version=2 --suppress=cstyleCast test.c 
          2>cppcheckresults.xml
Run Code Online (Sandbox Code Playgroud)

我收到警告(以及其他不相关的警告)

  1. unmatchedSuppression: arrayIndexOutOfBoundstest.c line 7(如预期)

  2. unmatchedSuppression: cstyleCast* line 0(如预期)

情况2

与情况 1 相同,但有附加--suppress=unmatchedSuppression选项

 cppcheck --inline-suppr …
Run Code Online (Sandbox Code Playgroud)

c++ static-code-analysis cppcheck

10
推荐指数
1
解决办法
1万
查看次数

使用自定义参数验证助手会破坏代码分析

我想使用自定义助手来简化参数验证,就像这样。

public static void ThrowIfNull(this object value, string parameterName)
{
    if (value == null)
    {
        throw new ArgumentNullException(parameterName);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,静态代码分析当然不知道我在使用此帮助程序时确实验证了公共方法中的输入,因此它会给我CA1062有关未验证公共方法参数的错误。

特别的问题是这个

有没有办法代码分析器这个助手处理参数空验证?这个问题的正确解决方案是什么?

c# validation code-analysis static-code-analysis

10
推荐指数
1
解决办法
903
查看次数

Findbugs for Git Pull Request

有没有办法在Jenkins中设置Findbugs(或任何其他静态代码分析工具)来分析传入的拉取请求并将结果与​​主分支进行比较?我的目标是拒绝拉取请求,这会增加静态代码分析问题的数量.

git findbugs static-code-analysis pull-request jenkins

9
推荐指数
1
解决办法
781
查看次数

检查弃用警告的代码

请考虑以下示例代码:

data = []
try:
    print data[0]
except IndexError as error:
    print error.message
Run Code Online (Sandbox Code Playgroud)

在代码中没有任何语法错误(使用Python2.7),除非你打开警告并运行python ,你会看到DeprecationWarning:

$ python -W always test.py
test.py:5: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
  print error.message
list index out of range
Run Code Online (Sandbox Code Playgroud)

仅供参考,这是因为.messagepython2.6已弃用并在python3中被删除.

现在,我想通过使用静态代码分析工具找到项目中所有.message在任何异常实例上调用的位置.作为最终目标,我计划将此检查作为日常构建和测试以及代码质量检查任务的一部分运行,并在语法仍然使用时引发错误.

可能吗?有什么事情pylint,pyflakes或其他代码分析工具能够?


我发现该pep8工具实现了几个类似的检查,例如,has_key()使用检查:

$ cat test.py
my_dict = {}
print my_dict.has_key('test')
$ pep8 test.py
test.py:2:14: W601 .has_key() is deprecated, use 'in'
Run Code Online (Sandbox Code Playgroud)

作为替代解决方案,我可以将所有警告视为错误(如此 …

python static-code-analysis python-2.7 deprecation-warning

9
推荐指数
1
解决办法
1073
查看次数

Ktlint 与 Detekt - 差异列表

我搜索了很多网站,但没有找到任何比较 Ktlint 与 Detekt 的信息。我需要知道差异,而不是共同特征。我想选择一个,但我不会亲自测试它们。有人可以给我一些差异吗?

lint static-code-analysis kotlin detekt

9
推荐指数
0
解决办法
7276
查看次数

go-staticcheck:应该使用简单的通道发送/接收,而不是使用单个案例进行选择(S1000)

我正在使用 Go 1.16.4。我正在尝试处理这样的代码:

func (pool *myConnPool) GetPooledConnection() (*myConnection, error) {
    go func() {
        conn, err := pool.createConn()
        if err != nil {
            return
        }
        pool.connections <- conn
    }()
    select { // <<<< golint warning here
    case conn := <-pool.connections:
        return pool.packConn(conn), nil
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下 Go linter 警告:should use a simple channel send/receive instead of select with a single case (S1000)在代码中标记的位置。谁能解释一下如何解决这个问题吗?我对 Go 通道还不太有经验。

channel go static-code-analysis

9
推荐指数
1
解决办法
1万
查看次数