我想知道两段代码的圈复杂度,
IF((A>B) AND (C>D))
{ a=a+b;c=c+d;}
Run Code Online (Sandbox Code Playgroud)
据我所知,上述代码的圈复杂度= 2 + 1 = 3,
另一个代码
IF((A>B) OR (C>D))
{a=a+b;c=c+d;}
Run Code Online (Sandbox Code Playgroud)
上面代码的复杂性是= 4 + 1 = 5,
上述复杂性是否正确?
我有一个(C#)函数检查四组条件并返回一个bool.如果其中任何一个为真,则返回true.我确信我可以简化逻辑,但我希望它具有相当的可读性.
Visual Studios中的CodeMaid扩展并告诉我该函数的cylomatic复杂性为12.我查了一下,并且cylomatic复杂性是
通过源代码的独立路径的数量
我不明白为什么它是12.我可以用两种方式来考虑它,要么圈复杂度应该是2,因为它总是通过相同的路径但是可以返回a true或a false.或者可以理解它是否是16,因为最后四个布尔or在一起可能都是真或假,2*2*2*2 = 16.
有人可以告诉我为什么它的12?甚至可能会显示一个图表,以便我可以看到不同的路径?
public bool FitsCheckBoxCriteria(TaskClass tasks)
{
// note: bool == true/false comparisons mean you don't have to cast 'bool?' as bool
// if neither checkboxes are checked, show everything
bool showEverything = NoShutDownRequiredCheckBox.IsChecked == false &&
ActiveRequiredCheckBox.IsChecked == false;
// if both are checked, only show active non-shutdown tasks
bool showActiveNonShutdown = ActiveRequiredCheckBox.IsChecked == true &&
tasks.Active == "YES" &&
NoShutDownRequiredCheckBox.IsChecked == true …Run Code Online (Sandbox Code Playgroud) 我有一个代码块,我有一个问题,减少了圈复杂度.由于必须匹配的多个条件,我不确定进一步分解它的最佳方法.使问题复杂化的是,在2个案例中创建了一个新对象,但在第三个案例中却没有(它调用另一个方法).这是伪代码:
if (!cond3 && !cond1 && cond2 && cond4) {
// actions to perform
calculateValues();
return result;
} else if (!cond1 && cond2 && cond3) {
// actions to perform
Object result = new Result();
return result;
} else if (!cond4 && cond3 && cond1 && cond5) {
// actions to perform
Object result = new Result();
return result;
} else {
// throw error because inputs are invalid
}
Run Code Online (Sandbox Code Playgroud) 在工作中,我们正在研究导致高圈复杂性的常见问题.例如,具有大的if-else语句可能导致高的圈复杂度,但可以通过用多态替换条件来解决.你找到了什么其他的例子?
我认为这个问题更多的是关于风格:我的算法具有非常高的CC(以及很多行!).我想减少它,因为有一些代码可以分组,所以很容易.问题是以这种方式做事我会有一个"大"函数调用"小"函数,只调用一次.
在我看来,尽管函数被调用一次,但是以小块形式打破一个大函数对于代码的易读性(在这种情况下)更好.
你怎么了?在类似情况下你怎么办?
我已经使用CodeMaid和Resharper已有一段时间了,注意到它们都计算了Cyclomatic Complexity。尽管它们的计算总是不同的,所以我认为它们的计算逻辑也是如此。但是,根据您的经验,哪个更准确?似乎Resharper的通常更高,但是CodeMaid的更容易发现。
其中之一算错了吗?还是有所不同,但可以接受?
提前致谢!
有一个类Company,它引用了另一个Company表示的实例parent.比方说,有四家公司c1,c2,c3和c4和c2,c3,c4有母公司设置c1.
例如:
public class Company {
public Company parent;
public Company() { }
public Company(Company parent) {
this.parent = parent;
}
public static void main(String[] args) {
Company c1 = new Company();
Company c2 = new Company(c1);
Company c3 = new Company(c1);
Company c4 = new Company(c1);
}
Run Code Online (Sandbox Code Playgroud)
如果我们设置c2为以下的母公司c1:
c1.parent = c2;
Run Code Online (Sandbox Code Playgroud)
然后它将在公司层次结构中创建一个Cyclomatic …
我有一个java POJO类,如下所示.
public class EmployeeVo {
private String firstName;
private String middleName;
private String lastName;
private String suffix;
private String addressline1;
private String addressline2;
private String city;
private String state;
private String zipCode;
private String country;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
.// Setters and getters for …Run Code Online (Sandbox Code Playgroud) 我正在研究使用 Rascal 计算 java 方法的圈复杂度。
一种方法是:
case, catch, do, while, if, for,foreach另一种是使用图论并使用公式 e-n+2。使用 rascal 函数可以很容易地获得 e 和 n。我的问题是如何构建控制流图,我发现了以下模块:
analysis::flow::ControlFlow这似乎是朝着正确方向迈出的一步,但我完全不知道从哪里开始。
我们的代码库正在使用 Radon 检查高圈复杂度。我有一个触发此 linter 错误的函数,但我希望它能够通过 linter,类似于 pylint 禁用之类的东西。有没有办法用氡做到这一点?