【问题标题】:How to manage FxCop overwhelming reports如何管理 FxCop 压倒性的报告
【发布时间】:2009-01-09 18:53:59
【问题描述】:

我最近开始使用它。但是,在针对我公司最大的项目之一运行它之后。它会出现大量问题。

问题列表如此之多,如果不是全部,也需要几天时间才能找到并解决一些问题。

现在,我知道修复 FxCop 要求您修复的所有内容并不是很实际。但由于我是这个小工具的新手......

有哪些有效使用 FxCop 的好技巧?

在新项目和现有项目上?

如果还提供我公司的程序员一般都会写好代码?

【问题讨论】:

    标签: .net coding-style fxcop


    【解决方案1】:

    一开始你可以从一小组规则开始。然后增加您应用的规则数量。

    你也必须看看this question 的答案......

    【讨论】:

      【解决方案2】:

      通过运行 fxCop 一次并排除它找到的所有内容来创建基线。

      将其保存为 .fxcop 文件并使用它来运行未来的检查。

      然后,当您更改代码时,您将创建新的、可管理的违规行为。例如,如果您更改方法的签名,FxCop 将重新标记事物。

      如果您有时间,您可以通过取消排除来一次解决一类违规行为。

      【讨论】:

        【解决方案3】:

        明确过滤掉对您的组织不重要的那些。例如,整个国际化块对于我们的一个项目在很大程度上并不重要,因此我们只是将其排除在外,仅此一项就足以使列表易于管理。 (我们希望在该区块中实施一些很棒的建议,但它们当时对应用程序并不重要。)

        您还可以创建一些 FxCop 项目,将异常分组,直到将数量减少到可以管理的程度(“立即修复这些问题”、“尽快修复这些问题”、“随时修复这些问题”)。

        我很确定我花了整整一周的时间来排除/包含违规行为,直到我们有了一个适合我们政策的列表。然后另一个 2-3 只是修复违规行为。 :-(

        【讨论】:

        • 这几乎等于一个月... :-(
        • 悲伤但真实......你在项目中运行它越晚,你的情况就越糟糕 - 从经验中学到这一点。
        【解决方案4】:

        FxCop 的特点是,它是一个出色的工具针对它所设计的特定用例。它旨在帮助类库开发人员。因此,如果您是 Developer Express 或 Infragistics,并且您正在创建一个供全球开发人员使用的代码库,那么您需要良好的命名、良好的全球化以及许多其他的东西。

        因此,如果您将所有表单命名为 frmMain,FxCop 会抱怨,因为这在类库中看起来很难看。但是,如果您只是在开发内部 WinForms 应用程序,则不必在意。同样,您会为有关 IFormatProvider、指定文本方向的 MessageBox 重载等所有内容而发疯。但除非您正在为全球受众创建代码,否则您可以忽略这些。

        重要的是要了解 FxCop 的目标受众。您可以根据您与该受众的不同方式忽略某些建议。

        【讨论】:

          【解决方案5】:

          按规则类型对输出进行排序...然后通过排序列表查看损坏的规则类型的哪个子集是重要的并且值得修复 IYO。

          【讨论】:

            【解决方案6】:

            并非 fxCop 报告的所有问题都是“必须解决”的问题。例如,使用字符串连接将用户输入插入数据库命令比匈牙利语或捕获异常等样式问题而不是更具体的异常要糟糕得多。

            【讨论】:

              【解决方案7】:

              FxCop 的替代方法是使用工具NDepend。该工具允许编写C# LINQ 查询上的代码规则(我们称之为CQLinq)。 免责声明:我是该工具的开发人员之一

              默认建议超过200 code rules。借助众所周知的 C# LINQ 语法,自定义现有规则或创建自己的规则非常简单。

              为了减少误报的数量(即避免大量报告),CQLinq 提供了独特的功能来定义集合是什么JustMyCode 通过以 notmycode 为前缀的特殊代码查询。有关此功能的更多说明,请参见 here。下面是例如两个 notmycode 默认查询:

              为了保持低误报的数量,使用 CQLinq,您还可以将规则结果仅集中在添加的代码或重构的代码上,因为 defined baseline in the past。请参阅以下规则,该规则检测自基线以来添加或重构的过于复杂的方法:

              warnif count > 0 
              from m in Methods
              where m.CyclomaticComplexity > 20 &&
                    m.WasAdded() || m.CodeWasChanged()
              select new { m, m.CyclomaticComplexity }
              

              最后,请注意,使用 NDepend 代码规则可以在 live in Visual Studio 和构建过程中验证 generated HTML+javascript report

              【讨论】:

                猜你喜欢
                • 2011-10-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-12-20
                • 1970-01-01
                相关资源
                最近更新 更多