标签: static-analysis

多个文件的平均循环复杂度

我对几个项目运行了静态代码分析,并从生成的报告中获取了这些项目中每个文件的循环复杂度。现在我想计算整个项目的平均圈复杂度。

我怎样才能最好地实现这一目标?

对我来说,仅将每个文件的循环复杂度值相加然后除以文件数似乎是错误的,因为短头文件与很长的文件具有相同的影响。另外,我想避免通过代码行来衡量文件的重要性。

还有其他方法吗?例如,用中位数?

metrics static-analysis cyclomatic-complexity code-metrics

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

抑制某些类别中的 PMD 违规

我有ViewStatePOJO 类,它们的构造函数带有许多参数。问题是 PMDExcessiveParameterList对他们施加了违规行为。

现在我试图抑制所有以ViewState.java(例如 in DashboardViewState.java)结尾的类的这种违规行为。我已将其添加到我的rules-pmd.xml

<rule ref="category/java/design.xml/ExcessiveParameterList">
    <properties>
        <!--Ignore ExcessiveParameterList on ViewState classes -->
        <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['*ViewState.java']"/>
    </properties>
</rule>
Run Code Online (Sandbox Code Playgroud)

问题是,这将压制所有针对ExcessiveParameterList哪个阶级的违规行为。我究竟做错了什么?

java static-analysis pmd suppress-warnings static-code-analysis

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

为什么错误消息不应该在 Go 中以标点符号结尾?

我有错误文本的问题。

如果我使用下面显示的错误消息,编辑器的 linter 会发出这样的警告:“错误字符串不应以标点符号或换行符结尾”

return errors.New("Test!")
                       ^
Run Code Online (Sandbox Code Playgroud)

问题是:为什么我不应该使用标点符号?背后的真正原因是什么?

error-handling static-analysis go

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

mypy 中的可选[]类型

我有以下嵌套函数

from typing import Optional

def outer(
    outer_foo:int,
    outer_bar:Optional[int] = 5
):
    return inner(outer_foo, outer_bar)

def inner(
    inner_foo:int,
    inner_bar:int
):
    return inner_foo+inner_bar

print(outer((1)))
Run Code Online (Sandbox Code Playgroud)

mypy抛出以下错误:

error: Argument 2 to "inner" has incompatible type "Optional[int]"; expected "int"
Run Code Online (Sandbox Code Playgroud)

鉴于我给出了int默认值outer_bar,我没有看到潜在的问题。但是,我能够解决 mypy 错误,将代码更改为:

from typing import Optional

def outer(
    outer_foo:int,
    outer_bar:Optional[int] = None
):
    if outer_bar is None:
        outer_bar = 5
    return inner(outer_foo, outer_bar)

def inner(
    inner_foo:int,
    inner_bar:int
):
    return inner_foo+inner_bar

print(outer((1)))
Run Code Online (Sandbox Code Playgroud)

这似乎破坏了声明中默认参数的用处。这是最好的/Python式的方法吗?

python static-analysis python-3.x mypy

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

gosec linter:G101:潜在的硬编码凭据

我从goseclinter 收到此消息:

foo/cloud.go:34:2: G101: Potential hardcoded credentials (gosec)
        fooAPIKeyENVVar = "Foo_API_KEY"
Run Code Online (Sandbox Code Playgroud)

如何禁用此警告?

static-analysis go gosec

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

为什么 TypeScript 流程分析不覆盖 else 块?

让我们考虑以下代码:

function f(x : number) {
    if (x === 1) {
        if (x === 2) {} // error
    }
    else {
        if (x === 1) {} // OK
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,编译器给了我一个错误x === 2。原因很简单:如果执行已经到达此块,则x应该1通过x === 1。由于12没有重叠,因此不可能x同时是12

但编译器完全可以x === 1接受else. 这应该是不可能的,因为语句中的x检查已经失败。由于不能满足两者,第二个应该给我与 相同的错误。x === 1ifxx === 1!(x === 1)ifx === 2

这怎么可能?这是高级流量分析的某种未实现的功能吗?这是一个错误吗?又或许这个案例有一些隐藏的逻辑,最终还是有一定道理的? …

types static-analysis typescript

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

什么是静态工具分析选项(除了CAST)通过带有框架的Java代码插件?

需要通过Eclipse插件获取有关Java代码的静态工具分析选项,特别是针对Struts,Spring和Hibernate的框架.目的主要是引用的分析(而不是质量度量)(类似于Eclipse中的References选项).完成的任务是对具有大量基于框架的代码的应用程序进行影响分析.

java static-analysis eclipse-plugin java-ee

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

使用Java的DelayQueue时,我是否应该实现equals()和hashCode()?

我正在处理一个使用a的类DelayQueue.我注意到,由于DelayQueue实现Delayed接口中的对象,所述对象也需要实现一个compareTo()已经完成的方法.

这是否隐含意味着我也应该考虑实施equals()方法和hashCode()方法?

我问的原因是因为我在通过FindBugs搜索项目时偶然发现了这个建议,而我正试图弄清楚这个特殊情况是否需要它.

java static-analysis findbugs

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

得到警告-在C代码中可能为null之前取消引用

对代码执行静态分析(SA)时收到警告。我在下面做了简化(带有第一个警告)-

typedef struct testStruct_ {
int *ptr;
} testStruct;

testStruct a;
testStruct *a_ptr;
a_ptr = &a;
a_ptr->ptr = NULL; #WARNING: Directly dereferencing pointer a_ptr.
Run Code Online (Sandbox Code Playgroud)

该代码继续对进行一些操作a_ptr。为了完成起见,我发布了一个示例-

rc = fn_a (filename, a_ptr);
rc = fn_b (a_ptr);
rc = fn_c (a_ptr->ptr);
Run Code Online (Sandbox Code Playgroud)

fn_a定义为-

fn_a (const char *filename, testStruct *a_ptr)
{
    a_ptr->ptr = fn_a_2(filename);
    if (!a_ptr->ptr) {
        ERR("Loading (%s) failed", filename);
        return (FALSE);
    }
    return (TRUE);
}
Run Code Online (Sandbox Code Playgroud)

稍后,我又收到另一条警告:

if (a_ptr && a_ptr->ptr) {
    freeFn(a_ptr->ptr);
}
#WARNING: Dereference before NULL check - NULL checking …
Run Code Online (Sandbox Code Playgroud)

c pointers static-analysis coverity

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

gcc:快速检查所有错误,但不编译C吗?

我想检查流中的所有语法和语义错误,同时又不浪费时间等待每次编译。

  1. gcc使用的编译器架构是否可能?

  2. 如果可能的话,怎么办?

c gcc static-analysis compiler-errors

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