是否有任何静态分析工具可以报告SOLID原则的遵循程度?

Ken*_*ran 7 static-analysis solid-principles

我知道盲目跟随任何"最佳实践"仍然可能导致一堆严重遵守最佳实践的垃圾.SOLID原则就是原则.它们并不适用于所有情况,但它们仍然是非常好的启发式方法,可以在代码中找到可能的改进.

它们的缺点是它们有时需要对源代码进行深入分析才能应用它们.我和大多数程序员一样,一直在寻找更有效的做事方式,所以我很好奇是否有人听说过试图测试SOLID原则(或缺乏原则)应用的分析工具.

SRP 单一责任原则

一堂课应该只有一个改变的理由.

OCP 开放原则

软件实体(类,模块,函数等)应该是可以扩展的,但是关闭以进行修改.

LSP Liskov替代原则

子类型必须可替代其基类型.

ISP 接口隔离原则

客户不应该被迫依赖他们不使用的方法.接口属于客户端,而不属于层次结构.

DIP 依赖倒置原则

抽象不应该依赖于细节.细节应取决于抽象.

- 从敏捷原则,模式和实践

Mon*_*get 8

我不认为自动静态分析可以确定原则是否得到尊重.要编写这样的工具,您需要正式定义每个概念的含义,并有办法根据任何代码进行检查.您如何正式确定责任的概念?我个人不知道.

也就是说,您可以使用工具来帮助您检测违规的可能性.例如,您可以使用代码度量标准,例如每个类的方法数,每个类的成员数,以确定类是否太大,因此可能违反SRP.

Liskov替换原则可能是个例外. 如果您在所有方法(前置条件,后置条件,不变量)上定义合约,那么您可以检查重新定义超类方法的方法是否不强化前置条件,不要削弱后置条件并尊重超类方法的不变量.我认为工具ESC/Java执行这些检查.阅读有关LSP维基百科页面,必须执行更多检查.