Cyclomatic Complexity提供了一个粗略的指标,用于了解给定函数的难易程度,或者包含错误的可能性.在我已经阅读过的实现中,通常所有基本的控制流构造(if,case,while,for等)都会使函数的复杂度增加1.在我看来,圈复杂度旨在确定"通过程序的源代码的线性独立路径的数量",虚函数调用也应该增加函数的圈复杂度,因为在运行时将调用哪个实现的模糊性(调用在路径中创建另一个分支)执行).
但是,如果它包含一个等效的switch语句(每个'case'关键字一个点,对于实现所讨论的虚函数的层次结构中的每个类都有一个case关键字),那么惩罚函数的量就会过于苛刻,因为虚函数调用通常被认为是更好的编程实践.
虚拟函数调用的圈复杂度的成本应该是多少?我不确定我的推理是否反对将圈复杂度作为衡量虚拟函数或不同东西的度量的指标.
编辑:在人们的回答之后,我意识到它不应该增加圈复杂性,因为我们可以认为虚函数调用等同于对包含大量switch语句的全局函数的调用.即使该函数得分较差,它只在程序中存在一次,而用switch语句直接替换每个虚函数调用会导致成本很多次.
language-agnostic virtual-functions cyclomatic-complexity code-metrics switch-statement
您是否尝试将每个组件的主序距离保持在低位?那些只包含Business Objects定义的程序集呢?是否有可能让他们远离疼痛区?这种组件中的类型通常由其他组件使用,而且非常具体.如何处理这种情况?
我对几个项目运行了静态代码分析,并从生成的报告中获取了这些项目中每个文件的循环复杂度。现在我想计算整个项目的平均圈复杂度。
我怎样才能最好地实现这一目标?
对我来说,仅将每个文件的循环复杂度值相加然后除以文件数似乎是错误的,因为短头文件与很长的文件具有相同的影响。另外,我想避免通过代码行来衡量文件的重要性。
还有其他方法吗?例如,用中位数?
在Visual Studio中,有一种快速的方法可以知道项目中存在多少行代码?
我正在处理的项目(在C中)有许多代码段,可以使用预处理器指令基于编译时配置包含或省略.
我有兴趣估计不同配置添加到我的核心项目或从中减去多少行代码.换句话说,我想在某处写一些#define和几#undef行,并了解它对LOC计数的作用.
我不熟悉LOC计数器,但从粗略的搜索来看,似乎大多数易于使用的工具都没有.我假设这不是一个困难的问题,但只是一个相当罕见的衡量标准.
是否有现成的工具可以完成我正在寻找的工作,或者自己做一些简单的方法?排除评论和空白行也是一个很好的选择.
int maxValue = m[0][0];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if ( m[i][j] >maxValue )
{
maxValue = m[i][j];
}
}
}
cout<<maxValue<<endl;
int sum = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
sum = sum + m[i][j];
}
}
cout<< sum <<endl;
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,如果我们绘制这样的流程图
基本独立路径将遵循六
路径1:1 2 3 10 11 12 13 …
metrics cyclomatic-complexity code-metrics path-finding unstructured-loop
我正在寻找可以为我生成lisp程序中每个函数的代码行的统计信息的程序.在Lisp中,这意味着每个函数或宏可以计算顶级函数中递归包含的函数数量.
任何指针都将非常感激.
code-metrics ×7
metrics ×3
.net ×1
c ×1
common-lisp ×1
lisp ×1
loc ×1
ndepend ×1
path-finding ×1