pee*_*002 10 indexing maintainability code-metrics visual-studio
作为一个喜欢遵循最佳实践的人,
如果我运行代码指标(右键单击解决方案资源管理器中的项目名称并选择"计算代码指标" - Visual Studio 2010):
public static string GetFormFactor(int number)
{
string formFactor = string.Empty;
switch (number)
{
case 1:
formFactor = "Other";
break;
case 2:
formFactor = "SIP";
break;
case 3:
formFactor = "DIP";
break;
case 4:
formFactor = "ZIP";
break;
case 5:
formFactor = "SOJ";
break;
}
return formFactor;
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个61的可维护性指数
(当然,如果你只有这个,这是微不足道的,但是如果你使用像哲学这样的类这样的实用程序,你的实用程序类将具有最差的可维护性指数..)
这是什么解决方案?
ahe*_*eil 26
首先:61被认为是可维护的代码.对于可维护性指数,100很容易维护代码,而0很难维护.
可维护性指数基于三个代码指标:即Halstead Volumen,Cyclomatic Complexity和Code of Code,并基于以下公式:
MAX(0,(171 - 5.2*ln(Halstead Volume) - 0.23*(Cyclomatic Complexity) - 16.2*ln(代码行))*100/171)
事实上,在您的示例中,可维护性指数的低值的根本原因是Cyclomatic Complexity.此度量标准是根据代码中的各种执行路径计算的.不幸的是,度量标准不一定与代码的"人类可读性"一致.
例如,您的代码导致索引值非常低(记住,lower越难维护)但实际上它们非常容易阅读.这在使用Cyclomatic Complexity来评估代码时很常见.
想象一下,代码有几天的开关块(Mon-Sun)加上几个月的切换块(Jan-Dec).此代码将具有可读性和可维护性,但会导致巨大的Cyclomatic Complexity,因此Visual Studio 2010中的维护性指数非常低.
这是关于度量的众所周知的事实,如果根据数字判断代码,则应该考虑这一事实.不应查看绝对数字,而应随时监控这些数字,以便将其理解为代码更改的指标.例如,如果可维护性指数始终为100且突然降至10,则应检查导致此问题的变化.
小智 5
可维护性指数可能更高,因为您为解决方案选择的方法缺乏可扩展性.
正确的解决方案(上面提到的Mark Simpson)是可以扩展为使用新形状因子而不重建代码的解决方案 - 代码中的switch/case语句总是表明OO设计已被遗忘并应始终被看到作为一个坏代码的气味.
就个人而言,我会实施......
interface IFormFactor
{
// some methods
}
class SipFormFactor : IFormFactor...
class DipFormFactor : IFormFactor...
Etc.
Run Code Online (Sandbox Code Playgroud)
...并让界面上的方法提供所需的功能 - 您可以将其视为[我猜]与GoF命令模式类似.
这样你的更高级别的方法就可以......
MyMethod(IFormFactor factor)
{
// some logic...
factor.DoSomething();
// some more logic...
}
Run Code Online (Sandbox Code Playgroud)
...而且您可以在以后进行并引入新的外形,而无需像使用硬编码的switch子句那样更改此代码.您还会发现这种方法也很容易适用于TDD(如果你正确地进行TDD,你最终应该这样做),因为它很容易进行模拟.
| 归档时间: |
|
| 查看次数: |
7382 次 |
| 最近记录: |