是否有可以在Maven中使用的东西来自动进行这种检查?我看到checkstyle和PMD,但我没有找到这个功能.
基本上我觉得如果有一个类A而且没有一个类,那么构建就会失败ATestCase.我知道,这不是一个严格的检查,只需创建一个类就可以轻松绕过,但此刻就足够了.
使用Visual Studio计算度量标准.
第一种方法有CC = 4
private IEnumerable<string> GetRows(DataTable dt, string columnDelimiter)
{
return from DataRow row in dt.Rows
select string.Join(columnDelimiter, row.ItemArray.Select(k => k.ToString()));
}
Run Code Online (Sandbox Code Playgroud)
第二种方法有CC = 5.
private IEnumerable<string> GetRowsForeach(DataTable dt, string columnDelimiter)
{
var rows = new List<string>();
foreach (DataRow row in dt.Rows)
{
var rowString = string.Join(columnDelimiter, row.ItemArray.Select(k => k.ToString()));
rows.Add(rowString);
}
return rows;
}
Run Code Online (Sandbox Code Playgroud)
我会说第一种方法应该有CC = 1而第二种方法可能是CC = 1或者可能是2(了解最终条件的情况.但我永远不会说他们的CC是如此之高.我有什么误解?
我有三个参数的方法:List<Class1> source,List<Class2) results,和DateTime endDate.我可以看出为什么类耦合是四.但是,当我添加此语句时,它会跳到十:
var warnings = from s in source
join r in results on s.Field1 equals r.Field1 into joined
from j in joined.DefaultIfEmpty( )
where j == null
select string.Format( "{0}{1}", A_CONSTANT, s.Field2 );
Run Code Online (Sandbox Code Playgroud)
我的问题:
在最近的早期版本的Visual Studio(即:早于VS2017),微软发布,可以通过命令行运行并产生含有某些代码度量的XML单独的代码度量工具机智能无极(例如代码,复杂线,和可维护性)为您的代码库.有关此工具的详细信息.
据我所知,他们还没有发布一个基于VS2017安装的工具版本.虽然VS2017 IDE确实包含以产生甚至导出这些指标(下Analyze->计算代码度量)的工具,我不能想出一个办法通过命令行使用它,使得该过程可以是自动化的.
没有第三方软件,有没有办法做到这一点?
我使用 Visual Studio Code Metrics 做了一些测试。由于我可以计算圈复杂度,因此每个if, while, for- 运算符都会将复杂度增加 1。我有下一个简单的方法:
static bool ContainsNegative(int a, int b, int c, int d)
{
if (a < 0 || b < 0 || c < 0 || d < 0) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
但对于它来说,圈复杂度是 5,而不是 2(1 表示方法 + 1 表示if)。我的问题是 - 这是因为代码指标将if运算符中的每个条件计算为不同的if?即我的方法相当于:
static bool ContainsNegative(int a, int b, int c, int d)
{
if (a < 0) return false;
if (b …Run Code Online (Sandbox Code Playgroud) 所以我试图在这里采取正确的路径并了解如何解决这个警察,在我看来这看起来像是一小段代码,为什么它会抱怨?
移动嵌套的 if-else 不会改变任何东西,关于如何解决这个警察有什么建议吗?
class WebPush::Register
include Interactor
# rubocop:disable Metrics/AbcSize
def call
user = Learner.find_by(id: context.user_id)
# return if existing
if user.web_push_subscription
context.subscription = user.web_push_subscription
else
subscription = WebPushSubscription.new(
endpoint: context.push_params[:endpoint],
auth_key: context.push_params[:keys][:auth],
p256dh_key: context.push_params[:keys][:p256dh],
learner: user
)
if subscription.save
context.subscription = subscription
else
context.error = subscription.errors.full_messages
context.fail!
end
end
end
# rubocop:enable Metrics/AbcSize
end
Run Code Online (Sandbox Code Playgroud) 我是 Brownfield 应用程序开发的忠实粉丝。毫无疑问,这是一本好书,我会向所有开发人员推荐它。我在这里是因为我在书中谈到了代码覆盖率。在我的新店里,我们使用 Team City 进行自动构建/持续集成,构建完成需要大约 40 分钟。Brownfield 的书讨论了无摩擦开发以及我们希望如何减轻开发人员必须承受的共同负担。这是我在第 130 页上读到的内容。
“代码覆盖率:一个进程的代价?从清单 5.2 中的示例目标可以看出,你最终得到了两个输出文件:一个是测试结果,一个是代码覆盖率结果。这是因为你实际上在此任务期间执行您的测试。
如果您正在运行代码覆盖任务,从技术上讲,您不需要在单独的任务中执行测试。出于这个原因,许多团队会将自动化代码覆盖任务替换为他们的测试任务,基本上在 CI 过程中执行这两个操作。CI 服务器将编译代码、测试它,并在每次签入时生成代码覆盖率统计信息。
尽管这种方法在概念上没有任何问题,但请注意一些缺点。首先,生成代码覆盖率统计数据存在开销。当有大量测试时,这种开销可能会大到足以导致长时间运行的自动构建脚本形式的摩擦。请记住,主构建脚本应尽可能快地运行,以鼓励团队成员经常运行它。如果运行时间太长,您可能会发现开发人员正在寻找解决方法。
出于这些原因,我们建议将代码覆盖任务与构建脚本的默认任务分开执行。它应该定期运行,也许作为您的构建文件中的一个单独的计划任务,每两周甚至每月执行一次,但我们认为该指标没有足够的好处来保证在每次检查时执行它的额外开销 -在。”
这与我当前商店的做法相反,我们在每次构建时执行 NCover。我想去找我的领导并要求我们不要这样做,但我能做的最好的事情就是告诉他“这就是 Brownfield 的书所说的”。我认为这还不够好。因此,我依靠你们来为我提供有关此主题的个人经验和建议。谢谢。
teamcity continuous-integration code-analysis ncover code-metrics
我不明白这个指标/规则的原因:
不应从超过 5 个不同的函数中调用一个函数。同一函数内的所有调用均计为 1。该规则仅限于翻译单元范围。
在我看来,这完全不直观,因为这与代码重用以及将代码拆分为常用函数而不是重复代码的方法相矛盾。
有人可以解释其原理吗?
这似乎是一件非常简单的事情,但我找不到相关信息。在 Visual Studio 中,计算所有项目的代码指标非常容易,我希望在 Azure DevOps 中的构建管道期间执行相同的操作。
有人做过这样的事吗?
code-metrics ×10
c# ×3
azure-devops ×1
checkstyle ×1
devops ×1
java ×1
javascript ×1
linq ×1
maven ×1
metrics ×1
msbuild ×1
ncover ×1
pmd ×1
rubocop ×1
ruby ×1
teamcity ×1