NDepend documentation comes with some pretty cool and advanced online blog posts, articles and white books concerning code quality and testing of .NET code:
Fighting Fabricated Complexity
Layering, the Level metric and the Discourse of Method
82 code metrics definition
Code metrics on Coupling, Dead Code, Design flaws and Re-engineering
Make the most of your test coverage data
Are you sure added and refactored code is covered by tests?
Also, NDepend comes with Code Query language (CQL). CQL is dedicated to write code quality rules about code quality that can be verified live in Visual Studio, or that can be verified during build process and through a report. Here are a few samples of CQL rules (designed to be highly customizable):
Code refactored recently should be 100% covered by test:
WARN IF Count > 0 IN SELECT METHODS WHERE CodeWasChanged AND PercentageCoverage < 100
I don’t want that my User Interface layer to depend directly on the DataBase layer:
WARN IF Count > 0 IN SELECT METHODS WHERE CyclomaticComplexity > 15 AND PercentageComment < 10
I don’t want that my User Interface layer to depend directly on the DataBase layer:
WARN IF Count > 0 IN SELECT NAMESPACES WHERE IsDirectlyUsing "DataLayer" AND NameIs "UILayer"
Static fields should not be named m_XXX (Custom naming conventions):
WARN IF Count > 0 IN SELECT FIELDS WHERE NameLike "^m_" AND IsStatic
Methods out of MyAssembly and MyAssembly2 should not have more than 30 lines of code:
WARN IF Count > 0 IN SELECT METHODS OUT OF ASSEMBLIES "MyAssembly1", "MyAssembly2" WHERE NbLinesOfCode > 30
Public methods should not be removed to avoid API breaking changes:
WARN IF Count > 0 IN SELECT METHODS WHERE IsPublic AND IsInOlderBuild AND WasRemoved
Types tagged with the attribute MyNamespace.FullCoveredAttribute must be thoroughly covered by tests:
WARN IF Count > 0 IN SELECT TYPES WHERE HasAttribute "MyNamespace.FullCoveredAttribute" AND PercentageCoverage < 100