Nod*_*s2k 5 java static-analysis cyclomatic-complexity reactive-programming java-stream
在一个使用 spring reactor 的项目中,我们检测到我们的静态分析工具没有检测到反应代码的真正复杂性。目前我们正在使用 PMD、Checkstyle、Spotbugs 和 SonarQube 的组合,但它们都无法检测“复杂的反应代码”。
有没有其他工具可以考虑到 Java 中新的响应式 API 和流 API?
一些被认为具有圈复杂度 0 的非常简单的例子可能是:
// EXAMPLE 1: Optional usage for avoiding null field checks
int activeSensors = Optional.of(sensorData).map(SensorData::getActiveCount).orElse(0);
// EXAMPLE 2: Stream API usage for replacing iterations and conditionals
list.stream().filter(Objects::nonNull).forEach(item -> do_something(item));
// EXAMPLE 3: Reactive API
Flux<Float> historyValuesFlux = Mono.justOrEmpty(sensorData)
.filter(Objects::nonNull)
.flatMapMany(data -> Flux.fromIterable(data.getHistoryPoints()))
.filter(Objects::nonNull)
.map(SensorHistoryPoint::getValue);
Run Code Online (Sandbox Code Playgroud)
在这三种情况下,“经典等效”代码具有更高的复杂度值,因此我们担心代码的实际复杂度被新语法隐藏了。这意味着我们对代码可维护性的估计是错误的,并且会随着时间的推移而恶化。
归档时间: |
|
查看次数: |
376 次 |
最近记录: |