如何为.net编写静态代码分析器
我有兴趣为vb.net编写静态代码分析器,以查看其是否符合我公司的标准编码准则。请从我必须开始的地方提出建议。
解决方案
回答
建议我们不要使用自己的静态代码分析器,而应使用FxCop:而是根据需要编写自定义FxCop规则。这样可以节省很多时间。
http://www.binarycoder.net/fxcop/
回答
从FxCop开始。如果我们在那儿做不到的事情,请尝试使用NStatic或者NDepend之类的方法。
回答
我建议我们使用Mono的Gendarme。这是一个非常不错的工具,具有许多内置规则。它还会生成漂亮的HTML报告。
回答
最好的选择是使用FxCop或者StyleCop并在必要时编写自定义规则。
回答
FXCop是编码问题/错误的一个很好的开始,StyleCop是编码样式(显然)的一个很好的开始,但是如果这两个都不起作用,那么我们可以自己编写一个解析器,也可以在.Net Framework中使用VBCodeProvider类
回答
使用FxCop,这不是我们要亲自进行的项目。涉及的解析/词法规则以及可能的陷阱将是疯狂的。我可以想象在保持一点理智的同时做到这一点的唯一方法是使用Lisp,这要归功于其极高的表现力,但同样,最好还是使用FxCop。
如果出于某种(教义性的)原因必须编写自定义内部工具,我建议编写仅执行基本规则检查的Lisp程序。不要试图使其全面,我们是在就软件的解析能力而言,谈论AI研究人员正在处理的前沿领域。
只需使用Lisp查找可能的明显违规者,或者仅捕获任何最终擅长捕获不合规代码的内容,然后对其进行简短的人眼扫描即可。如果我们确实使用Lisp编写解析器,我强烈建议我们滥用宏。
回答
如果我们需要有关体系结构的见解,请使用NDepend。这个工具不会停止让我惊奇。它可以做的比FxCop还要多。虽然是商业版本,但有免费试用版
回答
我同意其中的一张海报,这将是一件非常困难的事情,但是我不会使用Lisp而是使用F#,就像Microsoft为其第三方Windows驱动程序分析工具所做的那样:
http://arstechnica.com/journals/microsoft.ars/2005/11/10/1796
Fshares Lisp的表现力(不错,差不多)并且可以像VB.NET一样在CLR上工作,这将使整个事情变得容易。