albacore 0.2.0.preview1 → 0.2.0.preview2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +7 -2
- data/VERSION +1 -1
- data/install_dependencies.rb +1 -1
- data/lib/albacore.rb +6 -17
- data/lib/albacore/albacoretask.rb +43 -0
- data/lib/albacore/assemblyinfo.rb +10 -7
- data/lib/albacore/config/assemblyinfoconfig.rb +4 -12
- data/lib/albacore/config/config.rb +16 -8
- data/lib/albacore/config/cscconfig.rb +2 -7
- data/lib/albacore/config/docuconfig.rb +3 -5
- data/lib/albacore/config/execconfig.rb +4 -11
- data/lib/albacore/config/msbuildconfig.rb +2 -5
- data/lib/albacore/config/mspectestrunnerconfig.rb +15 -0
- data/lib/albacore/config/nantconfig.rb +4 -11
- data/lib/albacore/config/ncoverconsoleconfig.rb +4 -11
- data/lib/albacore/config/ncoverreportconfig.rb +4 -11
- data/lib/albacore/config/ndependconfig.rb +4 -11
- data/lib/albacore/config/netversion.rb +0 -2
- data/lib/albacore/config/nunittestrunnerconfig.rb +14 -0
- data/lib/albacore/config/specflowreportconfig.rb +2 -5
- data/lib/albacore/config/sqlcmdconfig.rb +4 -11
- data/lib/albacore/config/unzipconfig.rb +4 -11
- data/lib/albacore/config/xbuildconfig.rb +4 -11
- data/lib/albacore/config/xunittestrunnerconfig.rb +15 -0
- data/lib/albacore/config/zipdirectoryconfig.rb +15 -0
- data/lib/albacore/csc.rb +31 -5
- data/lib/albacore/docu.rb +2 -3
- data/lib/albacore/exec.rb +3 -5
- data/lib/albacore/msbuild.rb +3 -3
- data/lib/albacore/mspectestrunner.rb +5 -6
- data/lib/albacore/nant.rb +4 -6
- data/lib/albacore/ncoverconsole.rb +4 -6
- data/lib/albacore/ncoverreport.rb +4 -6
- data/lib/albacore/ncoverreports/codecoveragebase.rb +2 -2
- data/lib/albacore/ncoverreports/cyclomaticcomplexity.rb +2 -2
- data/lib/albacore/ncoverreports/fullcoveragereport.rb +0 -8
- data/lib/albacore/ncoverreports/reportfilterbase.rb +2 -2
- data/lib/albacore/ncoverreports/summaryreport.rb +0 -4
- data/lib/albacore/ndepend.rb +4 -6
- data/lib/albacore/nunittestrunner.rb +4 -5
- data/lib/albacore/specflowreport.rb +2 -2
- data/lib/albacore/sqlcmd.rb +33 -11
- data/lib/albacore/support/createtask.rb +30 -0
- data/lib/albacore/support/runcommand.rb +21 -30
- data/lib/albacore/support/updateattributes.rb +13 -0
- data/lib/albacore/unzip.rb +3 -5
- data/lib/albacore/xbuild.rb +5 -6
- data/lib/albacore/xunittestrunner.rb +4 -5
- data/lib/albacore/zipdirectory.rb +5 -6
- data/rakefile.rb +7 -8
- data/spec/albacoremodel_spec.rb +20 -2
- data/spec/assemblyinfo_spec.rb +27 -14
- data/spec/config_spec.rb +17 -2
- data/spec/createtask_spec.rb +51 -28
- data/spec/csc_spec.rb +135 -3
- data/spec/docu_spec.rb +11 -14
- data/spec/exec_spec.rb +1 -1
- data/spec/msbuild_spec.rb +9 -9
- data/spec/nant_spec.rb +4 -4
- data/spec/ncoverconsole_spec.rb +13 -13
- data/spec/ncoverreport_spec.rb +17 -17
- data/spec/ndepend_spec.rb +6 -6
- data/spec/runcommand_spec.rb +22 -3
- data/spec/sqlcmd_spec.rb +154 -12
- data/spec/support/assemblyinfotester.rb +1 -1
- data/spec/support/spec_helper.rb +2 -2
- data/spec/yamlconfig_spec.rb +3 -3
- data/spec/zip_spec.rb +4 -4
- metadata +32 -119
- data/lib/albacore/albacoremodel.rb +0 -28
- data/lib/albacore/config/mspecconfig.rb +0 -21
- data/lib/albacore/config/nunitconfig.rb +0 -20
- data/lib/albacore/config/xunitconfig.rb +0 -22
- data/lib/albacore/config/zipconfig.rb +0 -22
- data/lib/rake/assemblyinfotask.rb +0 -3
- data/lib/rake/csctask.rb +0 -3
- data/lib/rake/docutask.rb +0 -3
- data/lib/rake/exectask.rb +0 -3
- data/lib/rake/msbuildtask.rb +0 -3
- data/lib/rake/mspectask.rb +0 -3
- data/lib/rake/nanttask.rb +0 -3
- data/lib/rake/ncoverconsoletask.rb +0 -3
- data/lib/rake/ncoverreporttask.rb +0 -3
- data/lib/rake/ndependtask.rb +0 -3
- data/lib/rake/nunittask.rb +0 -3
- data/lib/rake/specflowreporttask.rb +0 -3
- data/lib/rake/sqlcmdtask.rb +0 -3
- data/lib/rake/support/albacoretask.rb +0 -30
- data/lib/rake/support/createtask.rb +0 -21
- data/lib/rake/unziptask.rb +0 -3
- data/lib/rake/xbuildtask.rb +0 -7
- data/lib/rake/xunittask.rb +0 -3
- data/lib/rake/ziptask.rb +0 -3
- data/spec/assemblyinfotask_spec.rb +0 -32
- data/spec/csctask_spec.rb +0 -1
- data/spec/docutask_spec.rb +0 -52
- data/spec/exectask_spec.rb +0 -46
- data/spec/msbuildtask_spec.rb +0 -46
- data/spec/mspectask_spec.rb +0 -46
- data/spec/nanttask_spec.rb +0 -46
- data/spec/ncoverconsoletask_spec.rb +0 -46
- data/spec/ncoverreporttask_spec.rb +0 -46
- data/spec/ndependtask_spec.rb +0 -46
- data/spec/nunittask_spec.rb +0 -46
- data/spec/spec.opts +0 -1
- data/spec/specflowreporttask_spec.rb +0 -48
- data/spec/sqlcmdtask_spec.rb +0 -32
- data/spec/support/AssemblyInfo/assemblyinfo.yml +0 -2
- data/spec/support/CodeCoverage/mspec/assemblies/Machine.Specifications.NUnit.dll +0 -0
- data/spec/support/CodeCoverage/mspec/assemblies/Machine.Specifications.dll +0 -0
- data/spec/support/CodeCoverage/mspec/assemblies/TestSolution.MSpecTests.dll +0 -0
- data/spec/support/CodeCoverage/mspec/assemblies/TestSolution.dll +0 -0
- data/spec/support/CodeCoverage/mspec/assemblies/nunit.framework.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/TestSolution.Tests.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/TestSolution.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/nunit.framework.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/with spaces/TestSolution.Tests.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/with spaces/TestSolution.dll +0 -0
- data/spec/support/CodeCoverage/nunit/assemblies/with spaces/nunit.framework.dll +0 -0
- data/spec/support/CodeCoverage/nunit/failing_assemblies/TestSolution.FailingTests.dll +0 -0
- data/spec/support/CodeCoverage/nunit/failing_assemblies/nunit.framework.dll +0 -0
- data/spec/support/CodeCoverage/report/coverage.xml +0 -4578
- data/spec/support/CodeCoverage/xunit/assemblies/TestSolution.XUnitTests.dll +0 -0
- data/spec/support/CodeCoverage/xunit/assemblies/TestSolution.dll +0 -0
- data/spec/support/CodeCoverage/xunit/assemblies/xunit.dll +0 -0
- data/spec/support/CodeCoverage/xunit/assemblies/xunit.xml +0 -2306
- data/spec/support/SpecFlow/TechTalk.SpecFlow.dll +0 -0
- data/spec/support/SpecFlow/TestSolution.SpecFlow.dll +0 -0
- data/spec/support/SpecFlow/TestSolution.SpecFlow.pdb +0 -0
- data/spec/support/SpecFlow/TestSolution.dll +0 -0
- data/spec/support/SpecFlow/TestSolution.pdb +0 -0
- data/spec/support/SpecFlow/nunit.framework.dll +0 -0
- data/spec/support/TestSolution/NDependProject.xml +0 -315
- data/spec/support/TestSolution/TestSolution.5.0.ReSharper.user +0 -27
- data/spec/support/TestSolution/TestSolution.FailingTests/FailingTestFixture.cs +0 -19
- data/spec/support/TestSolution/TestSolution.FailingTests/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution.FailingTests/TestSolution.FailingTests.csproj +0 -63
- data/spec/support/TestSolution/TestSolution.MSpecTests/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution.MSpecTests/SomeSpecTest.cs +0 -18
- data/spec/support/TestSolution/TestSolution.MSpecTests/TestSolution.MSpecTests.csproj +0 -77
- data/spec/support/TestSolution/TestSolution.SpecFlow/OneFeature.feature +0 -8
- data/spec/support/TestSolution/TestSolution.SpecFlow/OneFeature.feature.cs +0 -73
- data/spec/support/TestSolution/TestSolution.SpecFlow/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution.SpecFlow/StepDefinition.cs +0 -30
- data/spec/support/TestSolution/TestSolution.SpecFlow/TestSolution.SpecFlow.csproj +0 -84
- data/spec/support/TestSolution/TestSolution.Tests/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution.Tests/SomeTestFixture.cs +0 -23
- data/spec/support/TestSolution/TestSolution.Tests/TestSolution.Tests.csproj +0 -69
- data/spec/support/TestSolution/TestSolution.XUnitTests/Class1.cs +0 -19
- data/spec/support/TestSolution/TestSolution.XUnitTests/FailingTestFixture.cs +0 -14
- data/spec/support/TestSolution/TestSolution.XUnitTests/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution.XUnitTests/TestSolution.XUnitTests.csproj +0 -70
- data/spec/support/TestSolution/TestSolution.build +0 -25
- data/spec/support/TestSolution/TestSolution.sln +0 -50
- data/spec/support/TestSolution/TestSolution/Class1.cs +0 -17
- data/spec/support/TestSolution/TestSolution/Properties/AssemblyInfo.cs +0 -36
- data/spec/support/TestSolution/TestSolution/TestSolution.csproj +0 -59
- data/spec/support/csc/File1.cs +0 -9
- data/spec/support/csc/File2.cs +0 -9
- data/spec/support/csc/output/ignorethis.txt +0 -1
- data/spec/support/test.yml +0 -4
- data/spec/support/yamlconfig/msbuild.yml +0 -5
- data/spec/support/yamlconfig/yaml_autoconfig_test.yml +0 -1
- data/spec/support/zip/files/subfolder/sub file.txt +0 -1
- data/spec/support/zip/files/testfile.txt +0 -1
- data/spec/xunittask_spec.rb +0 -32
- data/spec/ziptask_spec.rb +0 -33
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,315 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
2
|
-
<NDepend AppName="TestProject" Platform="DotNet">
|
3
|
-
<OutputDir KeepHistoric="True" KeepXmlFiles="True" ViewReport="True">.\NDependOut</OutputDir>
|
4
|
-
<Assemblies>
|
5
|
-
<Name>TestSolution</Name>
|
6
|
-
<Name>TestSolution.Tests</Name>
|
7
|
-
<Name>TestSolution.FailingTests</Name>
|
8
|
-
<Name>TestSolution.MSpecTests</Name>
|
9
|
-
<Name>TestSolution.XUnitTests</Name>
|
10
|
-
</Assemblies>
|
11
|
-
<FrameworkAssemblies>
|
12
|
-
<Name>mscorlib</Name>
|
13
|
-
<Name>nunit.framework</Name>
|
14
|
-
<Name>Machine.Specifications</Name>
|
15
|
-
<Name>Machine.Specifications.NUnit</Name>
|
16
|
-
<Name>xunit</Name>
|
17
|
-
</FrameworkAssemblies>
|
18
|
-
<Dirs>
|
19
|
-
<Dir>C:\Windows\Microsoft.NET\Framework\v2.0.50727</Dir>
|
20
|
-
<Dir>C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0</Dir>
|
21
|
-
<Dir>C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5</Dir>
|
22
|
-
<Dir>.\TestSolution\bin\Debug</Dir>
|
23
|
-
<Dir>.\TestSolution.Tests\bin\Debug</Dir>
|
24
|
-
<Dir>.\TestSolution.FailingTests\bin\Debug</Dir>
|
25
|
-
<Dir>.\TestSolution.MSpecTests\bin\Debug</Dir>
|
26
|
-
<Dir>.\TestSolution.XUnitTests\bin\Debug</Dir>
|
27
|
-
</Dirs>
|
28
|
-
<Report XslPath="">
|
29
|
-
<Section Enabled="True">Application Metrics</Section>
|
30
|
-
<Section Enabled="True">Assemblies Metrics</Section>
|
31
|
-
<Section Enabled="True">VisualNDepend View</Section>
|
32
|
-
<Section Enabled="True">Assemblies Abstractness vs. Instability</Section>
|
33
|
-
<Section Enabled="True">Assemblies Dependencies</Section>
|
34
|
-
<Section Enabled="True">Assemblies Dependencies Diagram</Section>
|
35
|
-
<Section Enabled="True">Assemblies build order</Section>
|
36
|
-
<Section Enabled="True">NDepend information and warnings</Section>
|
37
|
-
<Section Enabled="True">CQL Queries and Constraints</Section>
|
38
|
-
<Section Enabled="True">Types Metrics</Section>
|
39
|
-
<Section Enabled="False">Types Dependencies</Section>
|
40
|
-
</Report>
|
41
|
-
<BuildComparisonSetting ProjectMode="DontCompare" BuildMode="MostRecentBuildAvailable" ProjectFileToCompareWith="" BuildFileToCompareWith="" NDaysAgo="1" />
|
42
|
-
<CoverageFiles UncoverableAttribute="" />
|
43
|
-
<SourceFileRebasing FromPath="" ToPath="" /><CQLQueries>
|
44
|
-
<CQLGroup Name="Code Quality" Active="True">
|
45
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Quick summary of methods to refactor</Name>\r\n\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE \r\n\r\n // Metrics' definitions\r\n ( NbLinesOfCode > 30 OR // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode\r\n NbILInstructions > 200 OR // http://www.ndepend.com/Metrics.aspx#NbILInstructions\r\n CyclomaticComplexity > 20 OR // http://www.ndepend.com/Metrics.aspx#CC\r\n ILCyclomaticComplexity > 50 OR // http://www.ndepend.com/Metrics.aspx#ILCC\r\n ILNestingDepth > 4 OR // http://www.ndepend.com/Metrics.aspx#ILNestingDepth\r\n NbParameters > 5 OR // http://www.ndepend.com/Metrics.aspx#NbParameters\r\n NbVariables > 8 OR // http://www.ndepend.com/Metrics.aspx#NbVariables\r\n NbOverloads > 6 ) // http://www.ndepend.com/Metrics.aspx#NbOverloads\r\n AND \r\n\r\n // Here are some ways to avoid taking account of generated methods.\r\n !( NameIs "InitializeComponent()" OR\r\n // NDepend.CQL.GeneratedAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n // You can define your own attribute to mark "Generated".\r\n HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute") </CQLQuery>
|
46
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods too big (NbLinesOfCode)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbLinesOfCode > 30 ORDER BY NbLinesOfCode DESC\r\n// METHODS WHERE NbLinesOfCode > 30 are extremely complex and \r\n// should be split in smaller methods \r\n// (except if they are automatically generated by a tool).\r\n// See the definition of the NbLinesOfCode metric here http://www.ndepend.com/Metrics.aspx#NbLinesOfCode</CQLQuery>
|
47
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods too big (NbILInstructions)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC\r\n// METHODS WHERE NbILInstructions > 200 are extremely complex and \r\n// should be split in smaller methods \r\n// (except if they are automatically generated by a tool).\r\n// See the definition of the NbILInstructions metric here http://www.ndepend.com/Metrics.aspx#NbILInstructions</CQLQuery>
|
48
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods too complex (CyclomaticComplexity)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CyclomaticComplexity > 20 ORDER BY CyclomaticComplexity DESC\r\n// METHODS WHERE CyclomaticComplexity > 15 are hard to understand and maintain.\r\n// METHODS WHERE CyclomaticComplexity > 30 are extremely complex and should be split \r\n// in smaller methods (except if they are automatically generated by a tool).\r\n// See the definition of the CyclomaticComplexity metric here http://www.ndepend.com/Metrics.aspx#CC</CQLQuery>
|
49
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods too complex (ILCyclomaticComplexity)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE ILCyclomaticComplexity > 40 ORDER BY ILCyclomaticComplexity DESC\r\n// METHODS WHERE ILCyclomaticComplexity > 20 are hard to understand and maintain.\r\n// METHODS WHERE ILCyclomaticComplexity > 40 are extremely complex and should be split \r\n// in smaller methods (except if they are automatically generated by a tool).\r\n// See the definition of the ILCyclomaticComplexity metric here http://www.ndepend.com/Metrics.aspx#ILCC</CQLQuery>
|
50
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods too complex (ILNestingDepth)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE ILNestingDepth > 4 ORDER BY ILNestingDepth DESC\r\n// METHODS WHERE ILNestingDepth > 4 are hard to understand and maintain. \r\n// METHODS WHERE ILNestingDepth > 8 is higher than 8 are extremely complex and should be split in smaller methods \r\n// (except if they are automatically generated by a tool). \r\n// See the definition of the NbILInstructions metric here http://www.NDepend.com/Metrics.aspx#ILNestingDepth</CQLQuery>
|
51
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods poorly commented (PercentageComment)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE PercentageComment < 20 AND NbLinesOfCode > 10 ORDER BY PercentageComment ASC\r\n// METHODS WHERE %Comment < 20 and that have at least 10 lines of code should be more commented.\r\n// See the definition of the PercentageComment metric here http://www.ndepend.com/Metrics.aspx#PercentageComment</CQLQuery>
|
52
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods with too many parameters (NbParameters)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbParameters > 5 ORDER BY NbParameters DESC\r\n// METHODS WHERE NbParameters > 5 might be painful to call and might degrade performance. \r\n// You should prefer using additional properties/fields to the declaring type to handle \r\n// numerous states. Another alternative is to provide a class or structure dedicated to \r\n// handle arguments passing (for example see the class System.Diagnostics.ProcessStartInfo \r\n// and the method System.Diagnostics.Process.Start(ProcessStartInfo))\r\n// See the definition of the NbParameters metric here http://www.ndepend.com/Metrics.aspx#NbParameters</CQLQuery>
|
53
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods with too many local variables (NbVariables)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbVariables > 15 ORDER BY NbVariables DESC\r\n// METHODS WHERE NbVariables > 8 are hard to understand and maintain.\r\n// METHODS WHERE NbVariables > 15 are extremely complex and should be split in \r\n// smaller methods (except if they are automatically generated by a tool).\r\n// See the definition of the Nbvariables metric here http://www.ndepend.com/Metrics.aspx#Nbvariables</CQLQuery>
|
54
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods with too many overloads (NbOverloads)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbOverloads > 6 ORDER BY NbOverloads DESC\r\n// METHODS WHERE NbParameters > 6 might be a problem to maintain and provoke higher coupling than necessary. \r\n// This might also reveal a potential misused of the C# and VB.NET language that since C#3 and VB9 support \r\n// object initialization. This feature helps reducing the number of constructors of a class.\r\n// See the definition of the NbOverloads metric here http://www.ndepend.com/Metrics.aspx#NbOverloads</CQLQuery>
|
55
|
-
<CQLGroup Name="Type Metrics" Active="True">
|
56
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types with too many methods</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE NbMethods > 20 ORDER BY NbMethods DESC\r\n// TYPES WHERE NbMethods > 20 might be hard to understand and maintain \r\n// but there might be cases where it is relevant to have a high value for NbMethods. \r\n// For example, the System.Windows.Forms.DataGridView standard class has more than 1000 methods.\r\n// See the definition of the NbMethods metric here http://www.ndepend.com/Metrics.aspx#NbMethods</CQLQuery>
|
57
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types with too many fields</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE NbFields > 20 AND !IsEnumeration ORDER BY NbFields DESC\r\n// TYPES WHERE NbFields > 20 AND !IsEnumeration might be hard to understand and maintain \r\n// but there might be cases where it is relevant to have a high value for NbFields. \r\n// For example, the System.Windows.Forms.Control standard class has more than 200 fields. \r\n// The value of the metric NbFields might be a better indicator of complex type.\r\n// See the definition of the NbFields metric here http://www.ndepend.com/Metrics.aspx#NbFields</CQLQuery>
|
58
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types with poor cohesion (LCOM)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10 ORDER BY LCOM DESC\r\n// TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10 might be problematic. \r\n// However, it is very hard to avoid such non-cohesive types. The LCOMHS metric\r\n// is often considered as more efficient to detect non-cohesive types.\r\n// See the definition of the LCOM metric here http://www.ndepend.com/Metrics.aspx#LCOM</CQLQuery>
|
59
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types with poor cohesion (LCOMHS)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE LCOMHS > 0.95 AND NbFields > 10 AND NbMethods >10 ORDER BY LCOMHS DESC\r\n// TYPES WHERE LCOMHS > 1.0 AND NbFields > 10 AND NbMethods >10 should be avoided. \r\n// Note that this constraint is stronger than the constraint \r\n// TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10. \r\n// See the definition of the LCOMHS metric here http://www.ndepend.com/Metrics.aspx#LCOMHS</CQLQuery>
|
60
|
-
</CQLGroup>
|
61
|
-
</CQLGroup>
|
62
|
-
<CQLGroup Name="Design" Active="True">
|
63
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Assembly should not contain namespaces dependency cycles</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 ASSEMBLIES WHERE ContainsNamespaceDependencyCycle\r\n// Dependency cycles between namespaces must be avoided \r\n// in order to have a levelized and comprehensive design.\r\n// More info available on the screencast 'Reduce the complexity' http://s3.amazonaws.com/NDependOnlineDemos/NDependReducingComplexity_viewlet_swf.html\r\n// You can also read this article http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies</CQLQuery>
|
64
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Type should not have too many responsabilities (Efferent Coupling)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE TypeCe > 50 ORDER BY TypeCe DESC \r\n// The Efferent Coupling (TypeCe) for a particular type is the number of types \r\n// it directly depends on. Notice that types declared in tier assemblies are taken into account. \r\n\r\n// Types that depends on too many others type (more than 50) are complex and have\r\n// more than one responsability. They are good candidate for refactoring.\r\n\r\n// More information available in this article:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/02/15/code-metrics-on-coupling-dead-code-design-flaws-and-re-engineering.aspx\r\n\r\n</CQLQuery>
|
65
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>A stateless type might be turned into a static type</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n SizeOfInst ==0 AND \r\n NbInterfacesImplemented == 0 AND // To be accurate, this constraint doesn't take \r\n // account of types that implement some interfaces.\r\n !IsStatic AND \r\n !IsGeneric AND \r\n !IsInterface \r\n// It indicates stateless types that might eventually be turned into static classes.\r\n// See the definition of the SizeOfInst metric here http://www.ndepend.com/Metrics.aspx#SizeOfInst</CQLQuery>
|
66
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Class shouldn't be too deep in inheritance tree </Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE DepthOfInheritance >= 6 ORDER BY DepthOfInheritance DESC \r\n// Branches too long in the derivation should be avoided.\r\n// See the definition of the DepthOfInheritance metric here http://www.ndepend.com/Metrics.aspx#DIT\r\n \r\n// You can discard specific classes with by-design high DepthOfInheritance with such condition for example:\r\n// AND !DeriveFrom "System.Windows.Forms.Form" </CQLQuery>
|
67
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Class with no descendant should be sealed if possible</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n IsClass AND \r\n NbChildren ==0 AND \r\n !IsSealed AND \r\n !IsStatic \r\n // AND !IsPublic : You might want to add this condition if you are developping a framework\r\n // with classes that are intended to be sub-classed by your clients.\r\n ORDER BY NbLinesOfCode</CQLQuery>
|
68
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Classes that are candidate to be turned into Structures</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n IsClass AND\r\n SizeOfInst <= 16 AND // Structure instance must not be too big, else it degrades performance.\r\n NbChildren == 0 AND // Must not have children\r\n DepthOfInheritance == 1 // Must derive directly from System.Object\r\n // AND IsSealed : You might want to add this condition to restreint the set.\r\n // AND IsImmutable : Structures should be immutable type.\r\n // AND !IsPublic : You might want to add this condition if you are developping a framework\r\n // with classes that are intended to be sub-classed by your clients.\r\n</CQLQuery>
|
69
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Avoid namespaces with few types</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 NAMESPACES WHERE NbTypes < 5 ORDER BY NbTypes ASC \r\n\r\n// Make sure that there is a logical organization to each of your namespaces, \r\n// and that there is a valid reason for putting types in a sparsely populated \r\n// namespace. Namespaces should contain types that are used together in most \r\n// scenarios. When their applications are mutually exclusive, types should be \r\n// located in separate namespaces</CQLQuery>
|
70
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Nested types should not be visible</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsNested AND !IsPrivate AND !IsInFrameworkAssembly \r\n\r\n// A nested type is a type declared within the scope of another type. \r\n// Nested types are useful for encapsulating private implementation details of the containing type. \r\n// Used for this purpose, nested types should not be externally visible. Do not use externally \r\n// visible nested types for logical grouping or to avoid name collisions; instead, use namespaces.</CQLQuery>
|
71
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Avoid empty interfaces</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsInterface AND NbMethods == 0\r\n\r\n// Interfaces define members that provide a behavior or usage contract. The functionality described by \r\n// the interface can be adopted by any type, regardless of where the type appears in the inheritance\r\n// hierarchy. A type implements an interface by providing implementations for the interface's members.\r\n// An empty interface does not define any members, and as such, does not define a contract that can be implemented.\r\n\r\n// If your design includes empty interfaces that types are expected to implement, you are probably using\r\n// an interface as a marker, or a way of identifying a group of types. If this identification will occur \r\n// at runtime, the correct way to accomplish this is to use a custom attribute. Use the presence or absence \r\n// of the attribute, or the attribute's properties, to identify the target types. If the identification must\r\n// occur at compile time, then using an empty interface is acceptable.</CQLQuery>
|
72
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Declare types in namespaces</Name>\r\nWARN IF Count > 0 IN SELECT NAMESPACES WHERE NameIs "" AND !IsInFrameworkAssembly \r\n\r\n// Types are declared within namespaces to prevent name collisions, and as a way of organizing related types \r\n// in an object hierarchy. Types outside any named namespace are in a global namespace that cannot be referenced in code.\r\n// If an anonymous namespace can be found, it means that it contains types outside of namespaces.</CQLQuery>
|
73
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Empty static constructor can be discarded</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE IsClassConstructor AND NbLinesOfCode == 0</CQLQuery>
|
74
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Assemblies with poor cohesion (RelationalCohesion)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 ASSEMBLIES WHERE RelationalCohesion < 1.5 OR RelationalCohesion > 4.0\r\n\r\n// As classes inside an assembly should be strongly related, \r\n// the cohesion should be high. On the other hand, a value which is too high may \r\n// indicate over-coupling. A good range for RelationalCohesion is 1.5 to 4.0.\r\n// See the definition of the RelationalCohesion metric here http://www.ndepend.com/Metrics.aspx#RelationalCohesion</CQLQuery>
|
75
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Assemblies that don't satisfy the Abstractness/Instability principle</Name>\r\n\r\nWARN IF Percentage > 15 IN SELECT ASSEMBLIES WHERE NormDistFromMainSeq > 0.7 ORDER BY NormDistFromMainSeq DESC\r\n\r\n// See the definition of the NormDistFromMainSeq metric here http://www.ndepend.com/Metrics.aspx#DitFromMainSeq</CQLQuery>
|
76
|
-
<CQLGroup Name="Performance" Active="True">
|
77
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Instances size shouldn't be too big (SizeOfInst)</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE SizeOfInst > 64 ORDER BY SizeOfInst DESC\r\n// TYPES WHERE SizeOfInst > 64 might degrade performance (depending on the number of \r\n// instances created at runtime) and might be hard to maintain. \r\n// However it is not a rule since sometime there is no alternative \r\n// (the size of instances of the System.Net.NetworkInformation.SystemIcmpV6Statistics \r\n// standard class is 2064 bytes).\r\n// See the definition of the SizeOfInst metric here http://www.ndepend.com/Metrics.aspx#SizeOfInst</CQLQuery>
|
78
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Boxing/unboxing should be avoided (Method)</Name>\r\nWARN IF Percentage > 5 IN SELECT METHODS WHERE IsUsingBoxing OR IsUsingUnboxing \r\n// Thanks to generics, boxing and unboxing should be rare.</CQLQuery>
|
79
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Boxing/unboxing should be avoided (Type)</Name>\r\nWARN IF Percentage > 5 IN SELECT TYPES WHERE IsUsingBoxing OR IsUsingUnboxing \r\n// Thanks to generics, boxing and unboxing should be rare.</CQLQuery>
|
80
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Attribute classes should be sealed</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE IsAttributeClass \r\nAND !IsSealed AND !IsAbstract AND IsPublic AND !IsInFrameworkAssembly \r\n\r\n// The .NET Framework class library provides methods for retrieving custom attributes. \r\n// By default, these methods search the attribute inheritance hierarchy; for example \r\n// System.Attribute.GetCustomAttribute searches for the specified attribute type, or \r\n// any attribute type that extends the specified attribute type. Sealing the attribute \r\n// eliminates the search through the inheritance hierarchy, and can improve performance.</CQLQuery>
|
81
|
-
</CQLGroup>
|
82
|
-
</CQLGroup>
|
83
|
-
<CQLGroup Name="Unused Code / Dead Code" Active="True">
|
84
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Potentially unused methods</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE \r\n MethodCa == 0 AND // Ca=0 -> No Afferent Coupling -> The method is not used in the context of this application.\r\n !IsPublic AND // Public methods might be used by client applications of your assemblies.\r\n !IsEntryPoint AND // Main() method is not used by-design.\r\n !IsExplicitInterfaceImpl AND // The IL code never explicitely calls explicit interface methods implementation.\r\n !IsClassConstructor AND // The IL code never explicitely calls class constructors.\r\n !IsFinalizer // The IL code never explicitely calls finalizers.\r\n</CQLQuery>
|
85
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Potentially unused fields</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE \r\n FieldCa == 0 AND // Ca=0 -> No Afferent Coupling -> The field is not used in the context of this application.\r\n !IsPublic AND // Although not recommended, public fields might be used by client applications of your assemblies.\r\n !IsLiteral AND // The IL code never explicitely uses literal fields.\r\n !IsEnumValue AND // The IL code never explicitely uses enumeration value.\r\n !NameIs "value__" // Field named 'value__' are relative to enumerations and the IL code never explicitely uses them.</CQLQuery>
|
86
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Potentially unused types</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n TypeCa == 0 AND // Ca=0 -> No Afferent Coupling -> The type is not used in the context of this application.\r\n !IsPublic AND // Public types might be used by client applications of your assemblies.\r\n !NameIs "Program" // Generally, types named Program contain a Main() entry-point method and this condition avoid to consider such type as unused code.\r\n</CQLQuery>
|
87
|
-
</CQLGroup>
|
88
|
-
<CQLGroup Name="Encapsulation" Active="True">
|
89
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields should be declared as private</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE \r\n !IsPrivate AND \r\n // These conditions filter cases where fields doesn't represent state that should be encapsulated. \r\n !IsInFrameworkAssembly AND \r\n !IsGeneratedByCompiler AND \r\n !IsSpecialName AND \r\n !IsInitOnly AND \r\n !IsLiteral AND \r\n !IsEnumValue</CQLQuery>
|
90
|
-
<CQLGroup Name="Methods Optimal Encapsulation" Active="True">
|
91
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods that could be declared as 'internal' in C#, 'Friend' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBeInternal</CQLQuery>
|
92
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods that could be declared as 'protected internal' in C#, 'Protected Friend' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBeInternalProtected</CQLQuery>
|
93
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods that could be declared as 'protected' in C#, 'Protected' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBeProtected</CQLQuery>
|
94
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods that could be declared as 'private' in C#, 'Private' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBePrivate</CQLQuery>
|
95
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods that should be declared as 'public' in C#, 'Public' in VB.NET</Name>\r\nSELECT METHODS WHERE ShouldBePublic \r\n// The keyword 'ShouldBePublic' shows code elements declared as 'internal\Friend' that are used outside of their assembly\r\n// thanks to the Attribute System.Runtime.CompilerServices.InternalsVisibleTo</CQLQuery>
|
96
|
-
</CQLGroup>
|
97
|
-
<CQLGroup Name="Types Optimal Encapsulation" Active="True">
|
98
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types that could be declared as internal</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE CouldBeInternal</CQLQuery>
|
99
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types that could be declared as 'protected internal' in C#, 'Protected Friend' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE CouldBeInternalProtected</CQLQuery>
|
100
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types that could be declared as 'protected' in C#, 'Protected' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE CouldBeProtected</CQLQuery>
|
101
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types that could be declared as 'private' in C#, 'Private' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE CouldBePrivate</CQLQuery>
|
102
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types that should be declared as 'public' in C#, 'Public' in VB.NET</Name>\r\nSELECT TYPES WHERE ShouldBePublic \r\n// The keyword 'ShouldBePublic' shows code elements declared as 'internal\Friend' that are used outside of their assembly\r\n// thanks to the Attribute System.Runtime.CompilerServices.InternalsVisibleTo</CQLQuery>
|
103
|
-
</CQLGroup>
|
104
|
-
<CQLGroup Name="Fields Optimal Encapsulation" Active="True">
|
105
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields that could be declared as internal</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBeInternal</CQLQuery>
|
106
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields that could be declared as 'protected internal' in C#, 'Protected Friend' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBeInternalProtected</CQLQuery>
|
107
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields that could be declared as 'protected' in C#, 'Protected' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBeProtected</CQLQuery>
|
108
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields that could be declared as 'private' in C#, 'Private' in VB.NET</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBePrivate</CQLQuery>
|
109
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields that should be declared as 'public' in C#, 'Public' in VB.NET</Name>\r\nSELECT FIELDS WHERE ShouldBePublic \r\n// The keyword 'ShouldBePublic' shows code elements declared as 'internal\Friend' that are used outside of their assembly\r\n// thanks to the Attribute System.Runtime.CompilerServices.InternalsVisibleTo</CQLQuery>
|
110
|
-
</CQLGroup>
|
111
|
-
</CQLGroup>
|
112
|
-
<CQLGroup Name="Diff / Changes / Evolution" Active="True">
|
113
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>API Breaking Changes: Methods</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS\r\nWHERE IsPublic AND (VisibilityWasChanged OR WasRemoved)\r\n\r\n// This constraint warns if a public method is not public anymore or if it has been removed.\r\n// This can break the code of your clients.\r\n// More information on breaking changes here: \r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/20/avoid-api-breaking-changes.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison\r\n\r\n</CQLQuery>
|
114
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>API Breaking Changes: Types</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES\r\nWHERE IsPublic AND (VisibilityWasChanged OR WasRemoved)\r\n\r\n// This constraint warns if a public type is not public anymore or if it has been removed.\r\n// This can break the code of your clients.\r\n// More information on breaking changes here: \r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/20/avoid-api-breaking-changes.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison\r\n\r\n\r\n</CQLQuery>
|
115
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>API Breaking Changes: Interfaces</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES\r\nWHERE IsInterface AND IsPublic AND (WasChanged AND !CommentsWereChanged)\r\n\r\n// This constraint warns if a public interface has been changed, but not because of comment change.\r\n// This can break the code of your clients that implements such interface.\r\n// More information on breaking changes here: \r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/20/avoid-api-breaking-changes.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison</CQLQuery>
|
116
|
-
<CQLGroup Name="Changes Summary" Active="False">
|
117
|
-
<CQLGroup Name="Methods" Active="False">
|
118
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods added</Name>\r\nSELECT METHODS WHERE WasAdded\r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
119
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods removed</Name>\r\nSELECT METHODS WHERE WasRemoved \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
120
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods where code was changed</Name>\r\nSELECT METHODS WHERE CodeWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
121
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods where comments were changed</Name>\r\nSELECT METHODS WHERE CommentsWereChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
122
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods where visibility was changed</Name>\r\nSELECT METHODS WHERE VisibilityWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
123
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods that became obsolete</Name>\r\nSELECT METHODS WHERE BecameObsolete \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
124
|
-
</CQLGroup>
|
125
|
-
<CQLGroup Name="Fields" Active="False">
|
126
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Fields added</Name>\r\nSELECT FIELDS WHERE WasAdded\r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
127
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Fields removed</Name>\r\nSELECT FIELDS WHERE WasRemoved \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
128
|
-
</CQLGroup>
|
129
|
-
<CQLGroup Name="Types" Active="False">
|
130
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types added</Name>\r\nSELECT TYPES WHERE WasAdded\r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
131
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types removed</Name>\r\nSELECT TYPES WHERE WasRemoved \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
132
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types where code was changed</Name>\r\nSELECT TYPES WHERE CodeWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
133
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types where comments were changed</Name>\r\nSELECT TYPES WHERE CommentsWereChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
134
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types where visibility was changed</Name>\r\nSELECT TYPES WHERE VisibilityWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
135
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tyoes that became obsolete</Name>\r\nSELECT TYPES WHERE BecameObsolete \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
136
|
-
</CQLGroup>
|
137
|
-
<CQLGroup Name="Namespaces" Active="False">
|
138
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces added</Name>\r\nSELECT NAMESPACES WHERE WasAdded\r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
139
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces removed</Name>\r\nSELECT NAMESPACES WHERE WasRemoved \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
140
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces where code was changed</Name>\r\nSELECT NAMESPACES WHERE CodeWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
141
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces where comments were changed</Name>\r\nSELECT NAMESPACES WHERE CommentsWereChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
142
|
-
</CQLGroup>
|
143
|
-
<CQLGroup Name="Assemblies" Active="False">
|
144
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies added</Name>\r\nSELECT ASSEMBLIES WHERE WasAdded\r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
145
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies removed</Name>\r\nSELECT ASSEMBLIES WHERE WasRemoved \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
146
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies where code was changed</Name>\r\nSELECT ASSEMBLIES WHERE CodeWasChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
147
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies where comments were changed</Name>\r\nSELECT ASSEMBLIES WHERE CommentsWereChanged \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
148
|
-
</CQLGroup>
|
149
|
-
<CQLGroup Name="Tier Code Usage" Active="False">
|
150
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Methods that were not used and that are now used</Name>\r\nSELECT METHODS WHERE IsUsedRecently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
151
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Methods that were used and that are not used anymore</Name>\r\nSELECT METHODS WHERE IsNotUsedAnymore \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
152
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Types that were not used and that are now used</Name>\r\nSELECT TYPES WHERE IsUsedRecently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
153
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Types that were used and that are not used anymore</Name>\r\nSELECT TYPES WHERE IsNotUsedAnymore \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
154
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Types where usage changed</Name>\r\nSELECT TYPES WHERE IsUsedDifferently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
155
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Namespaces that were not used and that are now used</Name>\r\nSELECT NAMESPACES WHERE IsUsedRecently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
156
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Namespaces that were used and that are not used anymore</Name>\r\nSELECT NAMESPACES WHERE IsNotUsedAnymore \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
157
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Namespaces where usage changed</Name>\r\nSELECT NAMESPACES WHERE IsUsedDifferently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
158
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Assemblies that were not used and that are now used</Name>\r\nSELECT ASSEMBLIES WHERE IsUsedRecently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
159
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Assemblies that were used and that are not used anymore</Name>\r\nSELECT ASSEMBLIES WHERE IsNotUsedAnymore \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
160
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Assemblies where usage changed</Name>\r\nSELECT ASSEMBLIES WHERE IsUsedDifferently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
161
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Fields that were not used and that are now used</Name>\r\nSELECT FIELDS WHERE IsUsedRecently \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
162
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Tier Fields that were used and that are not used anymore</Name>\r\nSELECT FIELDS WHERE IsNotUsedAnymore \r\n\r\n// To run this query properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base</CQLQuery>
|
163
|
-
</CQLGroup>
|
164
|
-
</CQLGroup>
|
165
|
-
<CQLGroup Name="Test Coverage of Changes Summary" Active="False">
|
166
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method changed 100% covered by tests</Name>\r\nSELECT METHODS WHERE PercentageCoverage == 100 AND CodeWasChanged ORDER BY NbLinesOfCode DESC \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
167
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method added 100% covered by tests</Name>\r\nSELECT METHODS WHERE WasAdded AND PercentageCoverage == 100 ORDER BY NbLinesOfCode DESC \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
168
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method changed partially covered by tests</Name>\r\nSELECT METHODS WHERE \r\n PercentageCoverage < 100 AND PercentageCoverage > 0 AND\r\n CodeWasChanged \r\n ORDER BY PercentageCoverage DESC , NbLinesOfCodeCovered , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
169
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method added partially covered by tests</Name>\r\nSELECT METHODS WHERE \r\n PercentageCoverage < 100 AND PercentageCoverage > 0 AND\r\n WasAdded \r\n ORDER BY PercentageCoverage DESC , NbLinesOfCodeCovered , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
170
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method changed not covered at all</Name>\r\nSELECT METHODS WHERE PercentageCoverage == 0 AND CodeWasChanged ORDER BY NbLinesOfCode DESC \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
171
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method added not covered at all</Name>\r\nSELECT METHODS WHERE PercentageCoverage == 0 AND WasAdded ORDER BY NbLinesOfCode DESC \r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in throught the menu: Start Page -> Compare 2 versions of a code base\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
172
|
-
</CQLGroup>
|
173
|
-
</CQLGroup>
|
174
|
-
<CQLGroup Name="Test Coverage" Active="True">
|
175
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on methods 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.FullCoveredAttribute" AND PercentageCoverage < 100\r\n\r\n// NDepend.CQL.FullCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag '100% covered' methods.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
176
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on methods 100% Branch-covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.FullBranchCoveredAttribute" AND PercentageBranchCoverage < 100\r\n\r\n// NDepend.CQL.FullCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag '100% branch covered' methods.\r\n\r\n// To run this constraint properly branch coverage data must be gathered from NCover™.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx\r\n\r\n// The metric BranchCoverage is not available if you are using Visual Studio™ Coverage.</CQLQuery>
|
177
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on type 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.FullCoveredAttribute" AND PercentageCoverage < 100\r\n\r\n// NDepend.CQL.FullCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag '100% covered' types.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
178
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on assembly 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.FullCoveredAttribute" AND PercentageCoverage < 100\r\n\r\n// NDepend.CQL.FullCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag '100% covered' assemblies.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
179
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on methods at least 95% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.MoreThan95PercentCoveredAttribute" AND PercentageCoverage < 95\r\n\r\n// NDepend.CQL.MoreThan95PercentCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'at least 95% Covered' methods.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
180
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on types at least 95% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.MoreThan95PercentCoveredAttribute" AND PercentageCoverage < 95\r\n\r\n// NDepend.CQL.MoreThan95PercentCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'at least 95% Covered' types.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
181
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Coverage regression on assemblies at least 95% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\nHasAttribute "OPTIONAL:NDepend.CQL.MoreThan95PercentCoveredAttribute" AND PercentageCoverage < 95\r\n\r\n// NDepend.CQL.MoreThan95PercentCoveredAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'at least 95% Covered' assemblies.\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
182
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Complex methods should be 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE \r\n // These metrics' definitions are available here: http://www.ndepend.com/Metrics.aspx#MetricsOnMethods\r\n ( NbILInstructions > 200 OR \r\n ILCyclomaticComplexity > 50 OR \r\n ILNestingDepth > 4 OR\r\n NbParameters > 5 OR \r\n NbVariables > 8 OR\r\n NbOverloads > 6 ) AND \r\n !PercentageCoverage < 100\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
183
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Complex methods should be 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE \r\n // These metrics' definitions are available here: http://www.ndepend.com/Metrics.aspx#MetricsOnMethods\r\n ( NbILInstructions > 200 OR \r\n ILCyclomaticComplexity > 50 OR \r\n ILNestingDepth > 4 OR\r\n NbParameters > 5 OR \r\n NbVariables > 8 OR\r\n NbOverloads > 6 ) AND \r\n !PercentageCoverage < 100\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
184
|
-
<CQLGroup Name="Test Coverage Summary" Active="False">
|
185
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods 100% covered</Name>\r\nSELECT METHODS WHERE PercentageCoverage == 100\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
186
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types 100% covered</Name>\r\nSELECT TYPES WHERE PercentageCoverage == 100\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
187
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces 100% covered</Name>\r\nSELECT NAMESPACES WHERE PercentageCoverage == 100\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
188
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies 100% covered</Name>\r\nSELECT ASSEMBLIES WHERE PercentageCoverage == 100\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
189
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods not covered</Name>\r\nSELECT METHODS WHERE PercentageCoverage == 0\r\nORDER BY NbLinesOfCode DESC\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
190
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types not covered</Name>\r\nSELECT TYPES WHERE PercentageCoverage == 0\r\nORDER BY NbLinesOfCode DESC\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
191
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces not covered</Name>\r\nSELECT NAMESPACES WHERE PercentageCoverage == 0\r\nORDER BY NbLinesOfCode DESC\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
192
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies not covered</Name>\r\nSELECT ASSEMBLIES WHERE PercentageCoverage == 0\r\nORDER BY NbLinesOfCode DESC\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
193
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods 95% to 99% covered</Name>\r\nSELECT METHODS WHERE PercentageCoverage >= 95 AND PercentageCoverage <= 99 \r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
194
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types 95% to 99% covered</Name>\r\nSELECT TYPES WHERE PercentageCoverage >= 95 AND PercentageCoverage <= 99 \r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
195
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces 95% to 99% covered</Name>\r\nSELECT NAMESPACES WHERE PercentageCoverage >= 95 AND PercentageCoverage <= 99 \r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
196
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies 95% to 99% covered</Name>\r\nSELECT ASSEMBLIES WHERE PercentageCoverage >= 95 AND PercentageCoverage <= 99 \r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
197
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods 70% to 94% covered</Name>\r\nSELECT METHODS WHERE PercentageCoverage >= 70 AND PercentageCoverage <= 94\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
198
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types 70% to 94% covered</Name>\r\nSELECT TYPES WHERE PercentageCoverage >= 70 AND PercentageCoverage <= 94\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
199
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces 70% to 94% covered</Name>\r\nSELECT NAMESPACES WHERE PercentageCoverage >= 70 AND PercentageCoverage <= 94\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
200
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies 70% to 94% covered</Name>\r\nSELECT ASSEMBLIES WHERE PercentageCoverage >= 70 AND PercentageCoverage <= 94\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
201
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods 1% to 69% covered</Name>\r\nSELECT METHODS WHERE PercentageCoverage >= 1 AND PercentageCoverage <= 69\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
202
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types 1% to 69% covered</Name>\r\nSELECT TYPES WHERE PercentageCoverage >= 1 AND PercentageCoverage <= 69\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
203
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces 1% to 69% covered</Name>\r\nSELECT NAMESPACES WHERE PercentageCoverage >= 1 AND PercentageCoverage <= 69\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
204
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Assemblies 1% to 69% covered</Name>\r\nSELECT ASSEMBLIES WHERE PercentageCoverage >= 1 AND PercentageCoverage <= 69\r\nORDER BY NbLinesOfCode DESC , NbLinesOfCodeNotCovered \r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
205
|
-
</CQLGroup>
|
206
|
-
</CQLGroup>
|
207
|
-
<CQLGroup Name="Purity / Immutability / Side-Effects" Active="True">
|
208
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Fields should be marked as ReadOnly when possible</Name>\r\nWARN IF Count > 0 IN SELECT FIELDS WHERE IsImmutable AND !IsInitOnly\r\n\r\n// A field that matches the condition IsImmutable is a field that is assigned only by constructors of its class.\r\n// For an instance field, this means its value will remain constant throught the lifetime of the object.\r\n// For a static field, this means its value will remain constant throught the lifetime of the program.\r\n// In both cases, such field can safely be marked with the C# readonly keyword (ReadOnly in VB.NET).\r\n\r\n// The condition IsInitOnly matches fields that are marked with the C# readonly keyword (ReadOnly in VB.NET).\r\n\r\n\r\n\r\n</CQLQuery>
|
209
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Structures should be immutable</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE IsStructure AND !IsImmutable AND !IsInFrameworkAssembly\r\n\r\n// It is deemed as a good practice to make your structure immutable.\r\n// An object is immutable if its state doesn’t change once the object has been created. \r\n// Consequently, a structure is immutable if its instances are immutable.\r\n// Immutable types naturally simplify code by limiting side-effects.\r\n// See some explanations on immutability and how NDepend supports it here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx\r\n</CQLQuery>
|
210
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Regression on immutable types</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE HasAttribute "OPTIONAL:NDepend.CQL.ImmutableAttribute" AND !IsImmutable\r\n\r\n// An object is immutable if its state doesn’t change once the object has been created. \r\n// Consequently, a class or a structure is immutable if its instances are immutable.\r\n// Immutable types naturally simplify code by limiting side-effects.\r\n// See some explanations on immutability and how NDepend supports it here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx\r\n\r\n// NDepend.CQL.ImmutableAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'immutable' types.\r\n\r\n</CQLQuery>
|
211
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Regression on pure methods</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n HasAttribute "OPTIONAL:NDepend.CQL.PureAttribute" AND \r\n ( ChangesObjectState OR ChangesTypeState ) AND\r\n NbLinesOfCode > 0\r\n\r\n// A method is pure if its execution doesn’t change the value of any instance or static field. \r\n// Pure methods naturally simplify code by limiting side-effects.\r\n// See some explanations on immutability / purity and how NDepend supports it here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx\r\n\r\n// NDepend.CQL.PureAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'pure' methods.\r\n\r\n</CQLQuery>
|
212
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Missing usage of ImmutableAttribute</Name>\r\nSELECT TYPES WHERE !HasAttribute "OPTIONAL:NDepend.CQL.ImmutableAttribute" AND IsImmutable\r\n\r\n// Types matched by this query are immutable but are not tagged with the ImmutableAttribute.\r\n// The benefit of tagging them with the ImmutableAttribute is that the constraint 'Regression on immutable types' \r\n// will warn when the immutability of a type gets broken.\r\n\r\n// NDepend.CQL.ImmutableAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'immutable' types.\r\n</CQLQuery>
|
213
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Missing usage of PureAttribute</Name>\r\nSELECT METHODS WHERE \r\n !HasAttribute "OPTIONAL:NDepend.CQL.PureAttribute" AND \r\n !ChangesObjectState AND !ChangesTypeState AND\r\n NbLinesOfCode > 0\r\n\r\n// Methods matched by this query are pure but are not tagged with the PureAttribute.\r\n// The benefit of tagging them with the PureAttribute is that the constraint 'Regression on pure methods'\r\n// will warn when the purity of a method gets broken.\r\n\r\n// NDepend.CQL.PureAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll\r\n// You can define your own attribute to tag 'pure' methods.</CQLQuery>
|
214
|
-
</CQLGroup>
|
215
|
-
<CQLGroup Name="Naming Conventions" Active="True">
|
216
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Instance fields should be prefixed with a 'm_'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE \r\n !NameLike "^m_" AND \r\n !IsStatic AND \r\n !IsLiteral AND \r\n !IsGeneratedByCompiler AND \r\n !IsSpecialName AND \r\n !IsEventDelegateObject \r\n\r\n// This naming convention provokes debate.\r\n// Don't hesitate to customize the regex of NameLike to your preference.</CQLQuery>
|
217
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Static fields should be prefixed with a 's_'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE \r\n !NameLike "^s_" AND \r\n IsStatic AND \r\n !IsLiteral AND \r\n !IsGeneratedByCompiler AND \r\n !IsSpecialName AND \r\n !IsEventDelegateObject \r\n\r\n// This naming convention provokes debate.\r\n// Don't hesitate to customize the regex of NameLike to your preference.\r\n</CQLQuery>
|
218
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Interface name should begin with a 'I'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsInterface AND !NameLike "^I" AND !IsNested AND !IsInFrameworkAssembly\r\n</CQLQuery>
|
219
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Abstract base class should be suffixed with 'Base'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n IsAbstract AND \r\n IsClass AND\r\n DepthOfInheritance == 1 AND // equivalent to: DepthOfDeriveFrom "System.Object" == 1\r\n !NameLike "Base$"\r\n</CQLQuery>
|
220
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Exception class name should be suffixed with 'Exception'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsExceptionClass AND !NameLike "Exception$" AND !IsInFrameworkAssembly\r\n// The name of an exception class should end with 'Exception'.</CQLQuery>
|
221
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Attribute class name should be suffixed with 'Attribute'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsAttributeClass AND !NameLike "Attribute$" AND !IsInFrameworkAssembly\r\n</CQLQuery>
|
222
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Types name should begin with an Upper character</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n !NameLike "^[A-Z]" AND // The name of a type should begin with an Upper letter.\r\n !IsGeneratedByCompiler AND // Except if it is generated by compiler or ...\r\n !IsInFrameworkAssembly // ... if it is declared in a framework assembly.</CQLQuery>
|
223
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Methods name should begin with an Upper character</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE \r\n !NameLike "^[A-Z]" AND \r\n !(IsClassConstructor OR IsConstructor OR \r\n IsPropertyGetter OR IsPropertySetter OR\r\n IsIndexerGetter OR IsIndexerSetter OR\r\n IsEventAdder OR IsEventRemover OR\r\n IsOperator) AND !IsGeneratedByCompiler AND !IsInFrameworkAssembly\r\n// The name of a regular method should begin with an Upper letter.</CQLQuery>
|
224
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Do not name enum values 'Reserved'</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE IsEnumValue AND NameLike "Reserved"\r\n\r\n// This rule assumes that an enumeration member with a name that contains "reserved" \r\n// is not currently used but is a placeholder to be renamed or removed in a future version.\r\n// Renaming or removing a member is a breaking change. You should not expect users to ignore\r\n// a member just because its name contains "reserved" nor can you rely on users to read or \r\n// abide by documentation. Furthermore, because reserved members appear in object browsers \r\n// and smart integrated development environments, they can cause confusion as to which members \r\n// are actually being used.\r\n\r\n// Instead of using a reserved member, add a new member to the enumeration in the future version.\r\n// In most cases, the addition of the new member is not a breaking change, as long as the \r\n// addition does not cause the values of the original members to change.</CQLQuery>
|
225
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Type names should not match namespaces</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n NameIs "Collections" OR\r\n NameIs "Forms" OR\r\n NameIs "System" OR\r\n NameIs "UI"\r\n\r\n// Type names should not match the names of namespaces defined in the .NET Framework \r\n// class library. Violating this rule can reduce the usability of the library.</CQLQuery>
|
226
|
-
<CQLGroup Name="Name too long" Active="True">
|
227
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Avoid methods with name too long</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS \r\n WHERE NameLike "^[^\<\(]{35,}.*$" AND \r\n !IsExplicitInterfaceImpl AND !IsInFrameworkAssembly \r\n// The regex matches methods with name longer than 35 characters.\r\n// Method Name doesn't contain the type and namespace prefix, FullName does.\r\n// The regex computes the method name length from the beginning until the first open parenthesis or first lower than (for generic methods).\r\n// Explicit Interface Implementation methods are discarded because their names are prefixed with the interface name.</CQLQuery>
|
228
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Avoid types with name too long</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n NameLike "^[^\<]{35,}.*$" AND \r\n !IsNested AND !IsInFrameworkAssembly \r\n// The regex matches types with name longer than 35 characters.\r\n// Type Name doesn't contain the namespace prefix, FullName does.\r\n// The regex computes the type name length from the beginning until the end or the first lower than (for generic types).\r\n// Nested types are discarded because their names are prefixed with outer type's name.</CQLQuery>
|
229
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Avoid fields with name too long</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE \r\n NameLike "^[^\<]{35,}.*$" AND \r\n !IsInFrameworkAssembly \r\n// The regex matches fields with name longer than 35 characters.\r\n// Field Name doesn't contain the type and namespace prefix, FullName does.</CQLQuery>
|
230
|
-
</CQLGroup>
|
231
|
-
</CQLGroup>
|
232
|
-
<CQLGroup Name=".NET Framework Usage" Active="True">
|
233
|
-
<CQLGroup Name="System" Active="True">
|
234
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Mark ISerializable types with serializable</Name>\r\nSELECT TYPES WHERE \r\n IsPublic AND !IsDelegate AND\r\n Implement "OPTIONAL:System.Runtime.Serialization.ISerializable" AND \r\n !HasAttribute "OPTIONAL:System.SerializableAttribute"\r\n\r\n// To be recognized by the CLR as serializable, types must be marked with the SerializableAttribute \r\n// attribute even if the type uses a custom serialization routine through implementation of the ISerializable interface.</CQLQuery>
|
235
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Mark assemblies with assembly version</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n !HasAttribute "OPTIONAL:System.Reflection.AssemblyVersionAttribute" AND\r\n !IsFrameworkAssembly \r\n\r\n// The identity of an assembly is composed of the following information:\r\n// - Assembly name\r\n// - Version number\r\n// - Culture\r\n// - Public key (for strong-named assemblies).\r\n// The .NET Framework uses the version number to uniquely identify an assembly, \r\n// and to bind to types in strong-named assemblies. The version number is used \r\n// together with version and publisher policy. By default, applications run only \r\n// with the assembly version with which they were built.</CQLQuery>
|
236
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Mark assemblies with CLSCompliant</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n !HasAttribute "OPTIONAL:System.CLSCompliantAttribute" AND\r\n !IsFrameworkAssembly \r\n\r\n// The Common Language Specification (CLS) defines naming restrictions, data types, \r\n// and rules to which assemblies must conform if they are to be used across programming languages.\r\n// Good design dictates that all assemblies explicitly indicate CLS compliance with \r\n// CLSCompliantAttribute. If the attribute is not present on an assembly, the assembly is not compliant.</CQLQuery>
|
237
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Mark assemblies with ComVisible</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n !HasAttribute "OPTIONAL:System.Runtime.InteropServices.ComVisibleAttribute" AND\r\n !IsFrameworkAssembly \r\n\r\n// The ComVisibleAttribute attribute determines how COM clients access managed code. \r\n// Good design dictates that assemblies explicitly indicate COM visibility. \r\n// COM visibility can be set for an entire assembly and then overridden for individual \r\n// types and type members. If the attribute is not present, the contents of the assembly\r\n// are visible to COM clients.</CQLQuery>
|
238
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Mark attributes with AttributeUsageAttribute</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\nDeriveFrom "OPTIONAL:System.Attribute" AND\r\n!HasAttribute "OPTIONAL:System.AttributeUsageAttribute" AND\r\n!IsInFrameworkAssembly \r\n\r\n// When defining a custom attribute, mark it using AttributeUsageAttribute to \r\n// indicate where in the source code the custom attribute can be applied.\r\n// An attribute's meaning and intended usage will determine its valid locations \r\n// in code. For example, if you are defining an attribute that identifies the \r\n// person responsible for maintaining and enhancing each type in a library, \r\n// and responsibility is always assigned at the type level, compilers should \r\n// allow the attribute on classes, enumerations, and interfaces, but should \r\n// not allow it on methods, events, or properties. Organizational policies and\r\n// procedures would dictate whether the attribute should be allowed on assemblies.</CQLQuery>
|
239
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Remove calls to GC.Collect()</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n IsDirectlyUsing "OPTIONAL:System.GC.Collect()" OR\r\n IsDirectlyUsing "OPTIONAL:System.GC.Collect(Int32)" OR\r\n IsDirectlyUsing "OPTIONAL:System.GC.Collect(Int32,GCCollectionMode)"\r\n\r\n// It is preferrable to avoid calling GC.Collect() explicitely\r\n// in order to avoid some performance pitfall.\r\n// More in information on this here:\r\n// http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx</CQLQuery>
|
240
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Don't call GC.Collect() without calling GC.WaitForPendingFinalizers()</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n (IsDirectlyUsing "OPTIONAL:System.GC.Collect()" OR\r\n IsDirectlyUsing "OPTIONAL:System.GC.Collect(Int32)" OR\r\n IsDirectlyUsing "OPTIONAL:System.GC.Collect(Int32,GCCollectionMode)") \r\n AND\r\n !IsDirectlyUsing "OPTIONAL:System.GC.WaitForPendingFinalizers()" \r\n\r\n// It is preferrable to avoid calling GC.Collect() explicitely\r\n// in order to avoid some performance pitfall.\r\n// But if you wish to call GC.Collect(), you must do it this way:\r\n// GC.Collect();\r\n// GC.WaitForPendingFinalizers();\r\n// GC.Collect();\r\n// To make sure that finalizer got executed, and object with finalizer got cleaned properly.</CQLQuery>
|
241
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Enum Storage should be Int32</Name>\r\nWARN IF Count > 0 IN SELECT FIELDS WHERE \r\n NameIs "value__" AND \r\n !IsOfType "OPTIONAL:System.Int32" AND\r\n !IsInFrameworkAssembly\r\n\r\n// An enumeration is a value type that defines a set of related named constants. By default, \r\n// the System.Int32 data type is used to store the constant value. Even though you can change \r\n// this underlying type, it is not necessary or recommended for most scenarios. Note that there \r\n// is no significant performance gain in using a data type smaller than Int32. If you cannot \r\n// use the default data type, you should use one of the CLS-compliant integral types, Byte, \r\n// Int16, Int32, or Int64, to ensure that all of the enumeration's values are representable in \r\n// CLS-compliant programming languages.</CQLQuery>
|
242
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Do not raise too general exception types</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n // The following exception types are too general to provide sufficient information to the user:\r\n ( ( DepthOfCreateA "OPTIONAL:System.Exception" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.ApplicationException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.SystemException" == 1 )\r\n // Test for non-constructor, else this constraint would warn \r\n // on ctor of classes that derive from these exception types.\r\n AND !IsConstructor )\r\n</CQLQuery>
|
243
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Do not raise reserved exception types</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n // The following exception types are reserved and should be thrown only by the Common Language Runtime:\r\n ( DepthOfCreateA "OPTIONAL:System.ExecutionEngineException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.IndexOutOfRangeException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.NullReferenceException" == 1 OR\r\n DepthOfCreateA "OPTIONAL:System.OutOfMemoryException" == 1 OR\r\n DepthOfCreateA "OPTIONAL:System.StackOverflowException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.InvalidProgramException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.AccessViolationException" == 1 OR\r\n DepthOfCreateA "OPTIONAL:System.CannotUnloadAppDomainException" == 1 OR\r\n DepthOfCreateA "OPTIONAL:System.BadImageFormatException" == 1 OR \r\n DepthOfCreateA "OPTIONAL:System.DataMisalignedException" == 1 )\r\n</CQLQuery>
|
244
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Use integral or string argument for indexers</Name>\r\nSELECT METHODS WHERE \r\nIsIndexerGetter AND \r\n !( NameIs "get_Item(String)" OR \r\n NameLike "get_Item\(Int" OR \r\n NameLike "get_Item\(Byte" OR\r\n NameLike "get_Item\(SByte" )\r\n\r\n// Indexers, that is, indexed properties, should use integer or string types for the index. \r\n// These types are typically used for indexing data structures and increase the usability of \r\n// the library. Use of the Object type should be restricted to those cases where the specific \r\n// integer or string type cannot be specified at design time. If the design requires other \r\n// types for the index, reconsider whether the type represents a logical data store. If it \r\n// does not represent a logical data store, use a method.</CQLQuery>
|
245
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Uri fields should be of type System.Uri</Name>\r\nWARN IF Count > 0 IN SELECT FIELDS WHERE \r\n (NameLike "Uri$" OR NameLike "Url$") AND !IsOfType "OPTIONAL:System.Uri"\r\n\r\n// A field which name end with 'Uri' is deemed as representing a uri.\r\n// Such field should be of type System.Uri.</CQLQuery>
|
246
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Types should not extend System.ApplicationException</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE\r\n DepthOfDeriveFrom "OPTIONAL:System.ApplicationException" == 1 AND\r\n !IsInFrameworkAssembly\r\n\r\n// For .NET Framework version 1, it was recommended to derive new exceptions from ApplicationException. \r\n// The recommendation has changed and new exceptions should derive from System.Exception or one of its \r\n// subclasses in the System namespace.</CQLQuery>
|
247
|
-
</CQLGroup>
|
248
|
-
<CQLGroup Name="System.Collection" Active="True">
|
249
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Don't use .NET 1.x HashTable and ArrayList</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE\r\n\r\n // Prefer using the class System.Collections.Generic.Dictionary<K,V> over System.Collections.HashTable.\r\n CreateA "OPTIONAL:System.Collections.HashTable" OR\r\n\r\n // Prefer using the class System.Collections.Generic.List<T> over System.Collections.ArrayList.\r\n CreateA "OPTIONAL:System.Collections.ArrayList"\r\n\r\n// You can be forced to use HashTable or ArrayList \r\n// because if you are using tier code that requires working with these classes\r\n// or because you are coding with .NET 1.x.</CQLQuery>
|
250
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Caution with List.Contains()</Name>\r\nSELECT METHODS WHERE \r\nIsDirectlyUsing "OPTIONAL:System.Collections.Generic.List<T>.Contains(T)" OR\r\nIsDirectlyUsing "OPTIONAL:System.Collections.Generic.IList<T>.Contains(T)" OR\r\nIsDirectlyUsing "OPTIONAL:System.Collections.ArrayList.Contains(Object)"\r\n\r\n// The cost of checking if a list contains an object is proportional to the size of the list (O(N) operation).\r\n// For large lists and/or frequent calls to Contains(), prefer using the System.Collections.Generic.HashSet<T> class \r\n// where calls to Contains() takes a constant time (O(0) operation).</CQLQuery>
|
251
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Prefer return collection abstraction instead of implementation</Name>\r\nSELECT METHODS WHERE \r\n ReturnTypeIs "OPTIONAL:System.Collections.Generic.List<T>" OR \r\n ReturnTypeIs "OPTIONAL:System.Collections.Generic.HashSet<T>" OR\r\n ReturnTypeIs "OPTIONAL:System.Collections.Generic.Dictionary<TKey,TValue>"\r\n\r\n// Most of the time, clients of a method doesn't need to know the exact implementation of the collection returned.\r\n// It is preferrable to return a collection interface such as IList<T>, ICollection<T> or IEnumerable<T>.</CQLQuery>
|
252
|
-
</CQLGroup>
|
253
|
-
<CQLGroup Name="System.Runtime.InteropServices" Active="True">
|
254
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>P/Invokes should be static and not be visible</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n !IsInFrameworkAssembly AND\r\n (HasAttribute "OPTIONAL:System.Runtime.InteropServices.DllImportAttribute") AND\r\n ( IsPublic OR \r\n !IsStatic)\r\n\r\n// Methods marked with the DllImportAttribute attribute (or methods defined using the \r\n// Declare keyword in Visual Basic) use Platform Invocation Services to access unmanaged \r\n// code. Such methods should not be exposed. Keeping these methods private or internal \r\n// ensures that your library cannot be used to breach security by allowing callers access \r\n// to unmanaged APIs they could not call otherwise.</CQLQuery>
|
255
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Move P/Invokes to NativeMethods class</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n !IsInFrameworkAssembly AND\r\n HasAttribute "OPTIONAL:System.Runtime.InteropServices.DllImportAttribute" AND\r\n !FullNameLike "NativeMethods."\r\n\r\n// Platform Invocation methods, such as those marked with the System.Runtime.InteropServices.DllImportAttribute \r\n// attribute, or methods defined by using the Declare keyword in Visual Basic, access unmanaged code. \r\n// These methods should be in one of the following classes:\r\n//\r\n// - NativeMethods - This class does not suppress stack walks for unmanaged code permission. \r\n// (System.Security.SuppressUnmanagedCodeSecurityAttribute must not be applied to this class.) \r\n// This class is for methods that can be used anywhere because a stack walk will be performed.\r\n//\r\n// - SafeNativeMethods - This class suppresses stack walks for unmanaged code permission. \r\n// (System.Security.SuppressUnmanagedCodeSecurityAttribute is applied to this class.) \r\n// This class is for methods that are safe for anyone to call. Callers of these methods are not \r\n// required to do a full security review to ensure that the usage is secure because the methods\r\n// are harmless for any caller.\r\n//\r\n// - UnsafeNativeMethods - This class suppresses stack walks for unmanaged code permission. \r\n// (System.Security.SuppressUnmanagedCodeSecurityAttribute is applied to this class.) \r\n// This class is for methods that are potentially dangerous. Any caller of these methods must do\r\n// a full security review to ensure that the usage is secure because no stack walk will be performed.\r\n</CQLQuery>
|
256
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>NativeMethods class should be static and internal</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE\r\n !IsInFrameworkAssembly AND\r\n ( NameIs "NativeMethods" OR\r\n NameIs "SafeNativeMethods" OR\r\n NameIs "UnsafeNativeMethods") AND\r\n IsPublic OR\r\n !IsStatic \r\n\r\n// Native Methods' classes are declared as internal (Friend, in Visual Basic) and static.\r\n</CQLQuery>
|
257
|
-
</CQLGroup>
|
258
|
-
<CQLGroup Name="System.Threading" Active="True">
|
259
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Method non-synchronized that read mutable states</Name>\r\nSELECT METHODS WHERE \r\n (ReadsMutableObjectState OR ReadsMutableTypeState) AND \r\n !IsDirectlyUsing "OPTIONAL:System.Threading.Monitor" AND \r\n !IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock"\r\n\r\n// Mutable object states are instance fields that can be modifed throught the lifetime of the object.\r\n// Mutable type states are static fields that can be modifed throught the lifetime of the program.\r\n// This query lists methods that read mutable state without synchronizing access.\r\n// In the case of multi-threaded program, doing so can lead to state corruption.</CQLQuery>
|
260
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Don't create threads explicitely</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n CreateA "OPTIONAL:System.Threading.Thread"\r\n\r\n// Prefer using the thread pool instead of creating manually your own thread.\r\n// Threads are costly objects. \r\n// They take approximately 200,000 cycles to create and about 100,000 cycles to destroy. \r\n// By default they reserve 1 megabyte of virtual memory for its stack and use 2,000-8,000 cycles for each context switch.\r\n// As a consequence, it is preferrable to let the thread pool recycle threads.\r\n\r\n// Creating custom thread can also be the sign of flawed design, where tasks and threads have affinity.\r\n// It is preferrable to code tasks that can be ran on any thread.</CQLQuery>
|
261
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Don't use Thread.Sleep()</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE IsDirectlyUsing "OPTIONAL:System.Threading.Thread.Sleep(Int32)"\r\n\r\n// Usage of Thread.Sleep() is a sign of flawed design.\r\n// More information on this here:\r\n// http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx\r\n</CQLQuery>
|
262
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Don't use Thread.Abort()</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n IsDirectlyUsing "OPTIONAL:System.Threading.Thread.Abort()" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Thread.Abort(Object)" \r\n\r\n// Usage of Thread.Abort() is dangerous.\r\n// More information on this here:\r\n// http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation</CQLQuery>
|
263
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Monitor Enter/Exit must be both called within the same method</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.Enter(Object)" AND\r\n !IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.Exit(Object)" </CQLQuery>
|
264
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Monitor TryEnter/Exit must be both called within the same method</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n ( IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.Enter(Object)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.TryEnter(Object,Int32)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.TryEnter(Object,TimeSpan)") AND\r\n !IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.Exit(Object)" </CQLQuery>
|
265
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>ReaderWriterLock AcquireReaderLock/ReleaseLock must be both called within the same method</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n ( IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.AcquireReaderLock(Int32)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.AcquireReaderLock(TimeSpan)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.TryEnter(Object,TimeSpan)") \r\nAND\r\n !( IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.ReleaseReaderLock()" OR \r\n IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.ReleaseLock()") </CQLQuery>
|
266
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>ReaderWriterLock AcquireWriterLock/ReleaseLock must be both called within the same method</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE\r\n ( IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.AcquireWriterLock(Int32)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.AcquireWriterLock(TimeSpan)" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor.TryEnter(Object,TimeSpan)") \r\nAND\r\n !( IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.ReleaseWriterLock()" OR \r\n IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock.ReleaseLock()") </CQLQuery>
|
267
|
-
</CQLGroup>
|
268
|
-
<CQLGroup Name="System.Xml" Active="True">
|
269
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Method should not return concrete XmlNode</Name>\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n( ReturnTypeIs "OPTIONAL:System.Xml.XmlDocument" OR \r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlAttribute" OR \r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlDocumentFragment" OR \r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlEntity" OR \r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlLinkedNode" OR \r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlNotation" OR\r\n ReturnTypeIs "OPTIONAL:System.Xml.XmlNode" )\r\n\r\n// The class System.Xml.XmlNode implements the interface System.Xml.Xpath.IXPathNavigable.\r\n// It is preferrable to return this interface instead of a concrete class.\r\n</CQLQuery>
|
270
|
-
<CQLQuery Active="True" DisplayList="False" DisplayStat="True" DisplaySelectionView="False">// <Name>Types should not extend System.Xml.XmlDocument</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE DepthOfDeriveFrom "OPTIONAL:System.Xml.XmlDocument" == 1\r\n\r\n// Do not create a subclass of XmlDocument if you want to create an XML view of an underlying object model or data source.</CQLQuery>
|
271
|
-
</CQLGroup>
|
272
|
-
</CQLGroup>
|
273
|
-
<CQLGroup Name="Statistics" Active="False">
|
274
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Most used types (TypeRank)</Name>\r\nSELECT TOP 50 TYPES ORDER BY TypeRank DESC\r\n// TypeRank values are computed by applying the Google PageRank \r\n// algorithm on the graph of types' dependencies \r\n// Types with high Rank are the most used ones.\r\n// See the definition of the TypeRank metric here http://www.ndepend.com/Metrics.aspx#TypeRank</CQLQuery>
|
275
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Most used methods (MethodRank)</Name>\r\nSELECT TOP 50 METHODS ORDER BY MethodRank DESC\r\n// MethodRank values are computed by applying the Google PageRank \r\n// algorithm on the graph of methods' dependencies\r\n// Methods with high Rank are the most used ones.\r\n// See the definition of the MethodRank metric here http://www.ndepend.com/Metrics.aspx#MethodRank</CQLQuery>
|
276
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Most used namespaces (NamespaceCa)</Name>\r\nSELECT TOP 50 NAMESPACES ORDER BY NamespaceCa DESC\r\n// The Afferent Coupling for a particular namespace is the number of namespaces that depends directly on it.\r\n// Namespaces with high Ca are the most used ones.\r\n// See the definition of the NamespaceCa metric here http://www.ndepend.com/Metrics.aspx#NamespaceCa</CQLQuery>
|
277
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Most used types (TypeCa)</Name>\r\nSELECT TOP 50 TYPES ORDER BY TypeCa DESC\r\n// The Afferent Coupling for a particular type is the number of types that depends directly on it.\r\n// Types with high Ca are the most used ones.\r\n// See the definition of the TypeCa metric here http://www.ndepend.com/Metrics.aspx#TypeCa</CQLQuery>
|
278
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Most used methods (MethodCa)</Name>\r\nSELECT TOP 50 METHODS ORDER BY MethodCa DESC\r\n// The Afferent Coupling for a particular method is the number of methods that depends directly on it.\r\n// Methods with high Ca are the most used ones\r\n// See the definition of the MethodCa metric here http://www.ndepend.com/Metrics.aspx#MethodCa</CQLQuery>
|
279
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Namespaces that use many other namespaces (NamespaceCe)</Name>\r\nSELECT TOP 50 NAMESPACES ORDER BY NamespaceCe DESC\r\n// The Efferent Coupling for a particular namespace is the number of namespaces it directly depends on.\r\n// Namespaces declared in Framework assemblies are taken account.\r\n// See the definition of the NamespaceCe metric here http://www.ndepend.com/Metrics.aspx#NamespaceCe</CQLQuery>
|
280
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Types that use many other types (TypeCe)</Name>\r\nSELECT TOP 50 TYPES ORDER BY TypeCe DESC\r\n// The Efferent Coupling for a particular type is the number of types it directly depends on.\r\n// Types declared in Framework assemblies are taken account.\r\n// See the definition of the TypeCe metric here http://www.ndepend.com/Metrics.aspx#TypeCe</CQLQuery>
|
281
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>Methods that use many other methods (MethodCe)</Name>\r\nSELECT TOP 50 METHODS ORDER BY MethodCe DESC\r\n// The Efferent Coupling for a particular method is the number of methods it directly depends on.\r\n// Methods declared in Framework assemblies are taken account.\r\n// See the definition of the MethodCe metric here http://www.ndepend.com/Metrics.aspx#MethodCe</CQLQuery>
|
282
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>High-level to low-level assemblies (AssemblyLevel)</Name>\r\nSELECT ASSEMBLIES ORDER BY AssemblyLevel DESC\r\n// Classify assemblies by their Level values.\r\n// See the definition of the AssemblyLevel metric here http://www.ndepend.com/Metrics.aspx#Level</CQLQuery>
|
283
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>High-level to low-level namespaces (NamespaceLevel)</Name>\r\nSELECT NAMESPACES ORDER BY NamespaceLevel DESC\r\n// Classify namespaces by their Level values.\r\n// See the definition of the NamespaceLevel metric here http://www.ndepend.com/Metrics.aspx#Level</CQLQuery>
|
284
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>High-level to low-level types (TypeLevel)</Name>\r\nSELECT TYPES ORDER BY TypeLevel DESC\r\n// Classify types by their Level values.\r\n// See the definition of the TypeLevel metric here http://www.ndepend.com/Metrics.aspx#Level</CQLQuery>
|
285
|
-
<CQLQuery Active="False" DisplayList="False" DisplayStat="False" DisplaySelectionView="False">// <Name>High-level to low-level methods (MethodLevel)</Name>\r\nSELECT METHODS ORDER BY MethodLevel DESC\r\n// Classify methods by their Level values.\r\n// See the definition of the MethodLevel metric here http://www.ndepend.com/Metrics.aspx#Level</CQLQuery>
|
286
|
-
</CQLGroup>
|
287
|
-
<CQLGroup Name="Samples of Custom Constraints" Active="False">
|
288
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the assembly Asm1 is not using the assembly Asm2</Name>\r\n\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n IsDirectlyUsing "OPTIONAL:ASSEMBLY:Asm2" AND\r\n NameIs "Asm1"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no assembly named Asm2.\r\n</CQLQuery>
|
289
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the namespace N1.N2 is not using the namespace N3.N4.N5</Name>\r\n\r\nWARN IF Count > 0 IN SELECT NAMESPACES WHERE \r\n IsDirectlyUsing "OPTIONAL:ASSEMBLY:N3.N4.N5" AND\r\n NameIs "N1.N2"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no namespace named N3.N4.N5.\r\n</CQLQuery>
|
290
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the assembly Asm1 is only using the assemblies Asm2, Asm3 or mscorlib</Name>\r\n\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n ( !IsDirectlyUsing "OPTIONAL:ASSEMBLY:Asm2" OR\r\n !IsDirectlyUsing "OPTIONAL:ASSEMBLY:Asm3" OR\r\n !IsDirectlyUsing "ASSEMBLY:mscorlib" OR\r\n AsmCe != 3) // Must not be used more than 3 assemblies \r\n // AsmCe = Efferent Coupling for assembly\r\nAND \r\n NameIs "Asm1"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no assembly named Asm2 or Asm3.\r\n</CQLQuery>
|
291
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the namespace N1.N2 is only using the namespaces N3.N4, N5 or System</Name>\r\n\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n ( !IsDirectlyUsing "OPTIONAL:NAMESPACE:N3.N4" OR\r\n !IsDirectlyUsing "OPTIONAL:NAMESPACE:N5" OR\r\n !IsDirectlyUsing "NAMESPACE:System" OR\r\n AsmCe != 3) // Must not be used more than 3 assemblies \r\n // AsmCe = Efferent Coupling for assembly\r\nAND \r\n NameIs "Asm1"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no namespace named N3.N4 or N5.\r\n</CQLQuery>
|
292
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that AsmDrawing is the only assembly that is using System.Drawing</Name>\r\nWARN IF Count> 0 IN SELECT ASSEMBLIES WHERE \r\n IsDirectlyUsing "OPTIONAL:ASSEMBLY:System.Drawing" AND\r\n !NameIs "AsmDrawing"\r\n\r\n// The OPTIONAL: prefix is just use to avoid an error because System.Drawing might not be currently referenced.\r\n</CQLQuery>
|
293
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that only 3 assemblies are using System.Drawing</Name>\r\nWARN IF Count > 3 IN SELECT ASSEMBLIES WHERE \r\n IsDirectlyUsing "OPTIONAL:ASSEMBLY:System.Drawing"\r\n\r\n// The OPTIONAL: prefix is just use to avoid an error because System.Drawing might not be currently referenced.\r\n</CQLQuery>
|
294
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all methods that call Foo.Fct1() also call Foo.Fct2(Int32)</Name>\r\n\r\nWARN IF Count > 0 IN SELECT METHODS WHERE \r\n IsDirectlyUsing "OPTIONAL:Foo.Fct1()" AND\r\n !IsDirectlyUsing "OPTIONAL:Foo.Fct2(Int32)"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no methods named Foo.Fct1() or Foo.Fct2(Int32)</CQLQuery>
|
295
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all types that derive from Foo, also implement IFoo</Name>\r\n\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\n DeriveFrom "OPTIONAL:TYPE:Foo" AND\r\n !Implement "OPTIONAL:TYPE:IFoo"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no class named Foo and no interface named IFoo</CQLQuery>
|
296
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all types that has the attribute FooAttribute are declared in the namespace N1.N2</Name>\r\n\r\nWARN IF Count > 0 IN SELECT TYPES \r\n OUT OF NAMESPACES "OPTIONAL:N1.N2" \r\n WHERE \r\n HasAttribute "OPTIONAL:FooAttribute"\r\n\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no attribute class named FooAttribute and no namespace named N1.N2</CQLQuery>
|
297
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all synchronization objects are only used from the namespaces under MyNamespace.Sync</Name>\r\n\r\nWARN IF Count > 0 IN SELECT NAMESPACES \r\n WHERE \r\n IsDirectlyUsing "OPTIONAL:System.Threading.Monitor" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.ReaderWriterLock" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Mutex" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.EventWaitHandle" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Semaphore" OR\r\n IsDirectlyUsing "OPTIONAL:System.Threading.Interlocked" \r\n AND !NameLike "^MyNamespace.Sync"\r\n\r\n // The OPTIONAL: prefix is just use to avoid an error because there some code elemnts might not currently exists.</CQLQuery>
|
298
|
-
<CQLQuery Active="False" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the graph of namespaces dependencies of the assembly Asm is acyclic</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\n NameIs "OPTIONAL:Asm" AND\r\n ContainsNamespaceDependencyCycle\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no assembly named Asm</CQLQuery>
|
299
|
-
<CQLGroup Name="Check that the Quality is respected from Now!" Active="True">
|
300
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>From now, all methods added or refactored should respect basic quality principles</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE \r\n\r\n // Metrics' definitions\r\n ( NbLinesOfCode > 30 OR // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode\r\n NbILInstructions > 200 OR // http://www.ndepend.com/Metrics.aspx#NbILInstructions\r\n CyclomaticComplexity > 20 OR // http://www.ndepend.com/Metrics.aspx#CC\r\n ILCyclomaticComplexity > 50 OR // http://www.ndepend.com/Metrics.aspx#ILCC\r\n ILNestingDepth > 4 OR // http://www.ndepend.com/Metrics.aspx#ILNestingDepth\r\n NbParameters > 5 OR // http://www.ndepend.com/Metrics.aspx#NbParameters\r\n NbVariables > 8 OR // http://www.ndepend.com/Metrics.aspx#NbVariables\r\n NbOverloads > 6 ) // http://www.ndepend.com/Metrics.aspx#NbOverloads\r\n\r\n AND (WasAdded OR CodeWasChanged)\r\n\r\n// This constraint warns if a method with low-quality has been added or refactored.\r\n// With NDepend and such constraint, you can Ensure Quality From Now! as explained here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/01/ensure-the-quality-of-the-code-that-will-be-developed-this-year.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison</CQLQuery>
|
301
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>From now, all types added or refactored should respect basic quality principles</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n // These metrics' definitions are available here: http://www.ndepend.com/Metrics.aspx#MetricsOnMethods\r\n ( NbMethods > 20 OR\r\n (NbFields > 20 AND !IsEnumeration) OR\r\n (LCOMHS > 0.95 AND NbFields > 10 AND NbMethods > 10) OR\r\n TypeCe > 50 ) \r\n AND (WasAdded OR CodeWasChanged)\r\n\r\n// This constraint warns if a type with low-quality has been added or refactored.\r\n// With NDepend and such constraint, you can Ensure Quality From Now! as explained here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/01/ensure-the-quality-of-the-code-that-will-be-developed-this-year.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison</CQLQuery>
|
302
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>From now, all methods added or refactored should be 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE \r\n // These metrics' definitions are available here: http://www.ndepend.com/Metrics.aspx#MetricsOnMethods\r\n PercentageCoverage < 100\r\n AND (WasAdded OR CodeWasChanged)\r\n\r\n// This constraint warns if a method has been added or refactored and hasn't been 100% covered by tests.\r\n// With NDepend and such constraint, you can Ensure Quality From Now! as explained here:\r\n// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/01/ensure-the-quality-of-the-code-that-will-be-developed-this-year.aspx\r\n\r\n// To run this constraint properly 2 analysis must be compared.\r\n// This can be done in VisualNDepend throught the menu: Start Page -> Compare 2 versions of a code base\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Analysis Comparison\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx</CQLQuery>
|
303
|
-
</CQLGroup>
|
304
|
-
<CQLGroup Name="Check Coverage on particular Code Elements" Active="True">
|
305
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the assembly Asm is 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT ASSEMBLIES WHERE \r\nNameIs "Asm" AND PercentageCoverage < 100\r\n\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx\r\n\r\n</CQLQuery>
|
306
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the namespace N1.N2 is 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT NAMESPACES WHERE \r\nNameIs "N1.N2" AND PercentageCoverage < 100\r\n\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx\r\n\r\n</CQLQuery>
|
307
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the class Namespace.Foo is 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\nFullNameIs "Namespace.Foo" AND PercentageCoverage < 100\r\n\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx\r\n\r\n</CQLQuery>
|
308
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that the class Namespace.Foo.Method(Int32) is 100% covered by tests</Name>\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\nFullNameIs "Namespace.Foo.Method(Int32)" AND PercentageCoverage < 100\r\n\r\n\r\n// To run this constraint properly coverage data must be gathered from NCover™ or Visual Studio™ Coverage.\r\n// This can be done in VisualNDepend throught the menu: Coverage -> Import Coverage Files\r\n// This can be done at analysis time throught the menu: Project Properties -> Analysis -> Code Coverage\r\n// More information on how to import coverage data here:\r\n// http://www.ndepend.com/Coverage.aspx\r\n\r\n</CQLQuery>
|
309
|
-
</CQLGroup>
|
310
|
-
<CQLGroup Name="Custom Naming Conventions" Active="True">
|
311
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all types that derive from Foo, has a name that ends up with Foo</Name>\r\n\r\nWARN IF Count > 0 IN SELECT TYPES WHERE \r\n DeriveFrom "OPTIONAL:TYPE:Foo" AND\r\n !NameLike "Foo$"\r\n // The OPTIONAL: prefix is just use to avoid an error because there is currently no class named Foo</CQLQuery>
|
312
|
-
<CQLQuery Active="True" DisplayList="True" DisplayStat="True" DisplaySelectionView="False">// <Name>Check that all namespaces begins with CompanyName.ProductName</Name>\r\nWARN IF Count > 0 IN SELECT NAMESPACES WHERE \r\n !NameLike "^CompanyName.ProductName"\r\n AND !IsInFrameworkAssembly </CQLQuery>
|
313
|
-
</CQLGroup>
|
314
|
-
</CQLGroup>
|
315
|
-
</CQLQueries></NDepend>
|
@@ -1,27 +0,0 @@
|
|
1
|
-
<Configuration>
|
2
|
-
<SettingsComponent>
|
3
|
-
<string />
|
4
|
-
<integer />
|
5
|
-
<boolean>
|
6
|
-
<setting name="SolutionAnalysisEnabled">False</setting>
|
7
|
-
</boolean>
|
8
|
-
</SettingsComponent>
|
9
|
-
<RecentFiles>
|
10
|
-
<RecentFiles>
|
11
|
-
<File id="57F50D38-0EA8-401F-AD2A-CA50738F4F14/f:OneFeature.feature.cs" caret="0" fromTop="0" />
|
12
|
-
<File id="57F50D38-0EA8-401F-AD2A-CA50738F4F14/f:OneFeature.feature" caret="0" fromTop="0" />
|
13
|
-
</RecentFiles>
|
14
|
-
<RecentEdits />
|
15
|
-
</RecentFiles>
|
16
|
-
<NAntValidationSettings>
|
17
|
-
<NAntPath value="" />
|
18
|
-
</NAntValidationSettings>
|
19
|
-
<UnitTestRunner>
|
20
|
-
<Providers />
|
21
|
-
</UnitTestRunner>
|
22
|
-
<UnitTestRunnerNUnit>
|
23
|
-
<NUnitInstallDir IsNull="False">
|
24
|
-
</NUnitInstallDir>
|
25
|
-
<UseAddins>Never</UseAddins>
|
26
|
-
</UnitTestRunnerNUnit>
|
27
|
-
</Configuration>
|
@@ -1,19 +0,0 @@
|
|
1
|
-
using System;
|
2
|
-
using System.Collections.Generic;
|
3
|
-
using System.Linq;
|
4
|
-
using System.Text;
|
5
|
-
using NUnit.Framework;
|
6
|
-
|
7
|
-
namespace TestSolution.FailingTests
|
8
|
-
{
|
9
|
-
[TestFixture]
|
10
|
-
public class FailingTestFixture
|
11
|
-
{
|
12
|
-
|
13
|
-
[Test]
|
14
|
-
public void FailingTest()
|
15
|
-
{
|
16
|
-
Assert.Fail("I'm A Failing Test!");
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}
|
@@ -1,36 +0,0 @@
|
|
1
|
-
using System.Reflection;
|
2
|
-
using System.Runtime.CompilerServices;
|
3
|
-
using System.Runtime.InteropServices;
|
4
|
-
|
5
|
-
// General Information about an assembly is controlled through the following
|
6
|
-
// set of attributes. Change these attribute values to modify the information
|
7
|
-
// associated with an assembly.
|
8
|
-
[assembly: AssemblyTitle("TestSolution.FailingTests")]
|
9
|
-
[assembly: AssemblyDescription("")]
|
10
|
-
[assembly: AssemblyConfiguration("")]
|
11
|
-
[assembly: AssemblyCompany("")]
|
12
|
-
[assembly: AssemblyProduct("TestSolution.FailingTests")]
|
13
|
-
[assembly: AssemblyCopyright("Copyright © 2009")]
|
14
|
-
[assembly: AssemblyTrademark("")]
|
15
|
-
[assembly: AssemblyCulture("")]
|
16
|
-
|
17
|
-
// Setting ComVisible to false makes the types in this assembly not visible
|
18
|
-
// to COM components. If you need to access a type in this assembly from
|
19
|
-
// COM, set the ComVisible attribute to true on that type.
|
20
|
-
[assembly: ComVisible(false)]
|
21
|
-
|
22
|
-
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
23
|
-
[assembly: Guid("ba25e11c-9bbb-4787-8fd2-5a648d84a54b")]
|
24
|
-
|
25
|
-
// Version information for an assembly consists of the following four values:
|
26
|
-
//
|
27
|
-
// Major Version
|
28
|
-
// Minor Version
|
29
|
-
// Build Number
|
30
|
-
// Revision
|
31
|
-
//
|
32
|
-
// You can specify all the values or you can default the Build and Revision Numbers
|
33
|
-
// by using the '*' as shown below:
|
34
|
-
// [assembly: AssemblyVersion("1.0.*")]
|
35
|
-
[assembly: AssemblyVersion("1.0.0.0")]
|
36
|
-
[assembly: AssemblyFileVersion("1.0.0.0")]
|
@@ -1,63 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
3
|
-
<PropertyGroup>
|
4
|
-
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
5
|
-
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
6
|
-
<ProductVersion>9.0.30729</ProductVersion>
|
7
|
-
<SchemaVersion>2.0</SchemaVersion>
|
8
|
-
<ProjectGuid>{8D680D34-363A-4AB4-BC8B-ECA28AFE1D46}</ProjectGuid>
|
9
|
-
<OutputType>Library</OutputType>
|
10
|
-
<AppDesignerFolder>Properties</AppDesignerFolder>
|
11
|
-
<RootNamespace>TestSolution.FailingTests</RootNamespace>
|
12
|
-
<AssemblyName>TestSolution.FailingTests</AssemblyName>
|
13
|
-
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
14
|
-
<FileAlignment>512</FileAlignment>
|
15
|
-
</PropertyGroup>
|
16
|
-
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
17
|
-
<DebugSymbols>true</DebugSymbols>
|
18
|
-
<DebugType>full</DebugType>
|
19
|
-
<Optimize>false</Optimize>
|
20
|
-
<OutputPath>bin\Debug\</OutputPath>
|
21
|
-
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
22
|
-
<ErrorReport>prompt</ErrorReport>
|
23
|
-
<WarningLevel>4</WarningLevel>
|
24
|
-
</PropertyGroup>
|
25
|
-
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
26
|
-
<DebugType>pdbonly</DebugType>
|
27
|
-
<Optimize>true</Optimize>
|
28
|
-
<OutputPath>bin\Release\</OutputPath>
|
29
|
-
<DefineConstants>TRACE</DefineConstants>
|
30
|
-
<ErrorReport>prompt</ErrorReport>
|
31
|
-
<WarningLevel>4</WarningLevel>
|
32
|
-
</PropertyGroup>
|
33
|
-
<ItemGroup>
|
34
|
-
<Reference Include="nunit.framework, Version=2.5.2.9222, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
|
35
|
-
<SpecificVersion>False</SpecificVersion>
|
36
|
-
<HintPath>..\..\Tools\NUnit-v2.5\nunit.framework.dll</HintPath>
|
37
|
-
</Reference>
|
38
|
-
<Reference Include="System" />
|
39
|
-
<Reference Include="System.Core">
|
40
|
-
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
41
|
-
</Reference>
|
42
|
-
<Reference Include="System.Xml.Linq">
|
43
|
-
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
44
|
-
</Reference>
|
45
|
-
<Reference Include="System.Data.DataSetExtensions">
|
46
|
-
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
47
|
-
</Reference>
|
48
|
-
<Reference Include="System.Data" />
|
49
|
-
<Reference Include="System.Xml" />
|
50
|
-
</ItemGroup>
|
51
|
-
<ItemGroup>
|
52
|
-
<Compile Include="FailingTestFixture.cs" />
|
53
|
-
<Compile Include="Properties\AssemblyInfo.cs" />
|
54
|
-
</ItemGroup>
|
55
|
-
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
56
|
-
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
57
|
-
Other similar extension points exist, see Microsoft.Common.targets.
|
58
|
-
<Target Name="BeforeBuild">
|
59
|
-
</Target>
|
60
|
-
<Target Name="AfterBuild">
|
61
|
-
</Target>
|
62
|
-
-->
|
63
|
-
</Project>
|