我一直在考虑的事情之一是我们如何使用某种衡量标准衡量变化,我们是否倒退?这是在我们正在改进的大型遗留代码库的背景下.大多数代码都是带有C遗产的C++.一些新功能和GUI是用C#编写的.
首先,我们至少可以检查代码中的简单复杂性级别是否随时间而变化.困难在于有一个表示 - 我们可以做一个3D表面,其中2D地图代表代码,我们有一个颜色的热图表示复杂性,3D表面凸出进出以显示变化.
一旦你能够生成一些数字的数字,就会有大量的数学系统来处理这样的事情.
随着时间的推移,我希望在那里有更复杂的数字,但相同的可视化技术用于表示变化.
我喜欢Crap4j中关于复杂性与覆盖该代码的单元测试数量之间的比例的想法.
我还想包括Bob叔叔的SOLID指标以及一些Chidamber和Kemerer OO指标.困难的部分是找到为C++生成这些工具的工具.唯一的选择似乎是Krakatau Essential Metrics(我不反对支付工具).我希望使用CK指标的部分原因来自Henderson-Sellers 的"面向对象度量标准:复杂性度量"和早期的面向对象软件度量标准.
如果我们开始使用这些指标中的一些,那么最终可能会有十个左右的数字随时间而变化.我对统计数据一无所知,但跟踪一堆这样的指标然后注意哪些指标往往变化可能会很有趣.
请注意,相关问题是关于在大型代码库中测量代码质量.我对测量变化更感兴趣.
我想知道在Visual Studio 2010中有哪些关于代码指标的选项.我知道可以在IDE中运行代码上的手动指标,但还有其他选项吗?
我正在尝试做的是:我的团队和我正在运行Team Foundation Server 2010,我们已经设置了自动构建以及这些构建的通知/警报.通知效果很好,但它们只提供基本信息.通知链接到一个页面,该页面提供了有关构建的更多详细信息,这也很棒.但是,我仍然希望在我的代码中使用这些构建的指标,并自动运行它们的通知.
老实说,我不知道这是否可能,但如果是的话,我想知道是否有人知道如何完成它.
但是,如果无法做到这一点,我正在寻找有关可以实现上述目标的第三方工具(付费或免费)的任何信息.
build-automation tfs notifications code-metrics visual-studio-2010
有关于代码度量的一些问题在这里,尤其是这一个目标价值.我正在寻找的是现实生产项目中的"常用".也许只是我,但是没有任何项目我曾经记住这些事情,所以当我运行ReSharper代码问题或Visual Studio代码指标时,我似乎是第一个 - 所以价值总是让我感到惊讶.
我当前的SharePoint分配示例:
Maintainability | Cyclomatic cmplx. | Inher. depth | Class coupl. | LOC
67 | 6,712 | 7 | 569 | 21,649
68 | 3,192 | 7 | 442 | 11,873
Run Code Online (Sandbox Code Playgroud)
更新:问题是,您通常会在"野外"看到什么价值?除了最佳值和最佳实践,通常会遇到什么值?
Visual Studio中的代码度量分析器以及代码度量电源工具,TestMethod将以下代码方法中的代码行数报告为8.
最多,我希望它报告代码行为3.
[TestClass]
public class UnitTest1
{
private void Test(out string str)
{
str = null;
}
[TestMethod]
public void TestMethod()
{
var mock = new Mock<UnitTest1>();
string str;
mock.Verify(m => m.Test(out str));
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样吗?
更多信息
经过一番挖掘后,我发现out从Test方法中删除参数并更新测试代码会导致LOC被报告为2,我认为这是正确的.添加out会导致跳转,因此不是因为大括号或属性.
用dotPeek反编译DLL会显示相当多的额外代码,因为out参数可以被认为是8 LOC,但删除参数和反编译也会显示生成的代码,可以认为是5 LOC,所以它不仅仅是VS的问题计算编译器生成的代码(我不相信它应该做什么).
我想开始衡量 Michael Feathers 所说的代码动荡,即churn vs. complex。
为此,我需要衡量 C++ 或 Java 文件的复杂性。所以我找到了几个测量圈复杂度(CC)的工具。他们都在功能或方法级别很好地测量了 CC。但是,我需要一个文件级别的指标,而他们在那里做得并不好。一个工具只返回文件中所有方法复杂度的平均值,另一个工具将整个文件视为一个巨大的方法,即计算整个文件中的所有决策点。
所以我做了一些研究,发现 McCabe 仅根据模块来定义 CC——他们将模块定义为函数——而不是文件(参见本演示文稿的幻灯片 20 和 30 )。我认为这是有道理的。
所以现在我要尝试弄清楚如何表示文件复杂性。我的想法是我应该对该文件使用最大方法 CC 。
关于这种方法的任何想法或任何其他建议?
谢谢!
肯
块覆盖是否与分支覆盖相同,类似于它还是完全不同?
解决分支机构范围的Google链接:http://www.tutorialspoint.com/software_testing_dictionary/branch_testing.htm
我了解像素跟踪的基础知识,我能够将跟踪域中引用图像的像素插入其他网站.
但是,如何在跟踪域上增加实际像素数?是否有某种日志告诉我每次提供像素图像?我可以做类似的事情:
<img src="http://www.foo.com/serveImage/getImage.php?id=5123" />
Run Code Online (Sandbox Code Playgroud)
然后有getImage页面,提供图像,并根据传入的id递增?或者有更好的方法来实现这一目标吗?
先感谢您.
Visual Studio - 确定项目中没有项目代码行 - 这在VS 2008中是否可行?
关于代码度量的讨论已经相当多(例如:对代码度量的迷恋是什么?).我(作为软件开发人员)对这些指标非常感兴趣,因为我认为他们可以帮助人们编写更好的代码.至少它们在寻找需要重构的代码区域时很有帮助.
但是,我想知道的是以下内容.是否对这些源代码度量标准进行了一些评估,证明它们确实与错误率或方法的可维护性相关.例如:具有非常高的圈复杂度的方法是否真的比复杂度低的方法引入更多错误?或者,具有高难度级别(Halstead)的方法是否真的需要比具有低难度的方法更多的维护它们?
也许有人知道这方面的一些可靠的研究.
非常感谢!
我刚刚开始为一家大公司工作.在最近的一次内部审计中,测量了Cyclomatic复杂度 和文件大小等指标 ,结果发现包括我团队拥有的模块在内的几个模块的索引非常高.所以在上周我们一直专注于为我们的代码降低这些索引.通过删除决策点和拆分文件.
也许我错过了一些新人,但是,这将如何使我们的软件变得更好?,我知道软件指标可以衡量你的代码有多好,但是相反,它的工作方式却相反吗?我们的代码会变得更好,因为例如我们将10000行文件制作成4 2500行文件吗?
code-metrics ×10
metrics ×2
c# ×1
c++ ×1
churn ×1
cross-domain ×1
java ×1
out ×1
php ×1
pixel ×1
testing ×1
tfs ×1
tracking ×1
unit-testing ×1