NDepend Report
Application name: Dashboards
This report has been built on: 11/03/2009 15:41:04
in 00:05
by NDepend v2.12.1.3123 (Pro Edition)
Assemblies Metrics
Assemblies Abstractness vs. Instability
Assemblies Dependencies Diagram
CQL Queries and Constraints
Assemblies Metrics
Assemblies Abstractness vs. Instability

Assemblies Dependencies Diagram
Blue : Assemblies of your application.
Yellow : Tiers assemblies referenced by assemblies of your application.

CQL Queries and Constraints
{Code Quality} Some CQL constraints are not satisfied.
{Code Quality \ Type Metrics} Some CQL constraints are not satisfied.
{Design} Some CQL constraints are not satisfied.
{Design \ Performance} Some CQL constraints are not satisfied.
{Unused Code / Dead Code} Some CQL constraints are not satisfied.
{Encapsulation} Some CQL constraints are not satisfied.
{Encapsulation \ Methods Optimal Encapsulation} Some CQL constraints are not satisfied.
{Encapsulation \ Types Optimal Encapsulation} Some CQL constraints are not satisfied.
{Encapsulation \ Fields Optimal Encapsulation} Some CQL constraints are not satisfied.
{Diff / Changes / Evolution} All CQL queries compile and all CQL contraints are satisfied.
{Test Coverage} All CQL queries compile and all CQL contraints are satisfied.
{Purity / Immutability / Side-Effects} Some CQL constraints are not satisfied.
{Naming Conventions} Some CQL constraints are not satisfied.
{Naming Conventions \ Name too long} Some CQL constraints are not satisfied.
{.NET Framework Usage} Some CQL constraints are not satisfied.
{.NET Framework Usage \ System} Some CQL constraints are not satisfied.
{.NET Framework Usage \ System.Collection} All CQL queries compile and all CQL contraints are satisfied.
{.NET Framework Usage \ System.Runtime.InteropServices} All CQL queries compile and all CQL contraints are satisfied.
{.NET Framework Usage \ System.Threading} Some CQL constraints are not satisfied.
{.NET Framework Usage \ System.Xml} All CQL queries compile and all CQL contraints are satisfied.
{Constraints extracted from Source Code} No active CQL query compiled.
WARNING: The following CQL constraint is not satisfied. 10 methods on 872 tested match the condition. --> Group {Code Quality}
// <Name>Quick summary of methods to refactor</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE
// Metrics' definitions
( NbLinesOfCode > 30 OR // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode
NbILInstructions > 200 OR // http://www.ndepend.com/Metrics.aspx#NbILInstructions
CyclomaticComplexity > 20 OR // http://www.ndepend.com/Metrics.aspx#CC
ILCyclomaticComplexity > 50 OR // http://www.ndepend.com/Metrics.aspx#ILCC
ILNestingDepth > 4 OR // http://www.ndepend.com/Metrics.aspx#ILNestingDepth
NbParameters > 5 OR // http://www.ndepend.com/Metrics.aspx#NbParameters
NbVariables > 8 OR // http://www.ndepend.com/Metrics.aspx#NbVariables
NbOverloads > 6 ) // http://www.ndepend.com/Metrics.aspx#NbOverloads
AND
// Here are some ways to avoid taking account of generated methods.
!( NameIs "InitializeComponent()" OR
// NDepend.CQL.GeneratedAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
// You can define your own attribute to mark "Generated".
HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute")
| methods | # lines of code (LOC) | # IL instructions | Cyclomatic Complexity (CC) | IL Cyclomatic Complexity (ILCC) | IL Nesting Depth | # Parameters | # Variables | # Overloads | Full Name |
| WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) | N/A | 0 | N/A | 0 | 0 | 7 | 0 | 1 | Dashboard.Domain.IMetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) |
| WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) | 8 | 98 | 3 | 3 | 1 | 7 | 5 | 1 | Dashboard.Domain.MetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) |
| .ctor() | 8 | 613 | 2 | 3 | 1 | 0 | 10 | 1 | Dashboard.Domain.DashboardMetricsList..ctor() |
| AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader) | 9 | 77 | 2 | 4 | 1 | 6 | 4 | 1 | Dashboard.Domain.NDepend.NDependMetricsSource.AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader) |
| .ctor(String,String,String,String,IEnumerable<String>,String) | 7 | 26 | 1 | 1 | 0 | 6 | 0 | 1 | Dashboard.Domain.NCover.NCoverConsole..ctor(String,String,String,String,IEnumerable<String>,String) |
| .ctor(Action,Func<Int32,Boolean>,Func<TextReader>,Func<TextReader>,Func<Boolean>,Func<Int32>,Action) | 8 | 27 | 1 | 1 | 0 | 7 | 0 | 2 | Dashboard.Domain.IO.IoProcess..ctor(Action,Func<Int32,Boolean>,Func<TextReader>,Func<TextReader>,Func<Boolean>,Func<Int32>,Action) |
| .ctor(IMetricsSource,IDataContextFactory,IAssemblyGuidReader,IEnumerable<String>,IEnumerable<String>,IDictionary<String,Metric>) | 7 | 24 | 1 | 1 | 0 | 6 | 0 | 1 | Dashboard.Data.MetricsUpdater..ctor(IMetricsSource,IDataContextFactory,IAssemblyGuidReader,IEnumerable<String>,IEnumerable<String>,IDictionary<String,Metric>) |
| Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>) | 7 | 84 | 3 | 7 | 2 | 6 | 6 | 2 | Dashboard.Data.MeasurementsRepository.Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>) |
| GetLatestMeasurements(Guid[]) | 6 | 241 | 2 | 3 | 1 | 1 | 11 | 1 | Dashboard.Data.MeasurementsRepository.GetLatestMeasurements(Guid[]) |
| GroupMeasurementsByMeasurables(IEnumerable<Measurement>) | 10 | 78 | 3 | 6 | 2 | 1 | 9 | 1 | Dashboard.Data.MeasurementsRepository.GroupMeasurementsByMeasurables(IEnumerable<Measurement>) |
| Sum: | 70 | 1268 | 18 | 29 | 8 | 47 | 45 | 12 | |
| Average: | 7 | 126.8 | 1.8 | 2.9 | 0.8 | 4.7 | 4.5 | 1.2 | |
| Minimum: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | |
| Maximum: | 10 | 613 | 3 | 7 | 2 | 7 | 11 | 2 | |
| Standard deviation: | 2.569 | 174.28 | 0.979796 | 2.1656 | 0.7483315 | 2.6851 | 4.2012 | 0.3999999 | |
| Variance: | 6.6 | 30372.2 | 0.9600002 | 4.69 | 0.56 | 7.21 | 17.65 | 0.1599999 | |
WARNING: The following CQL constraint is not satisfied. 2 methods on 872 tested match the condition. --> Group {Code Quality}
// <Name>Methods too big (NbILInstructions)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC
// METHODS WHERE NbILInstructions > 200 are extremely complex and
// should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbILInstructions metric here http://www.ndepend.com/Metrics.aspx#NbILInstructions
| methods | # IL instructions | Full Name |
| .ctor() | 613 | Dashboard.Domain.DashboardMetricsList..ctor() |
| GetLatestMeasurements(Guid[]) | 241 | Dashboard.Data.MeasurementsRepository.GetLatestMeasurements(Guid[]) |
| Sum: | 854 | |
| Average: | 427 | |
| Minimum: | 241 | |
| Maximum: | 613 | |
| Standard deviation: | 186 | |
| Variance: | 34596 | |
WARNING: The following CQL constraint is not satisfied. 1 methods on 872 tested match the condition. --> Group {Code Quality}
// <Name>Methods too complex (ILNestingDepth)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE ILNestingDepth > 4 ORDER BY ILNestingDepth DESC
// METHODS WHERE ILNestingDepth > 4 are hard to understand and maintain.
// METHODS WHERE ILNestingDepth > 8 is higher than 8 are extremely complex and should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbILInstructions metric here http://www.NDepend.com/Metrics.aspx#ILNestingDepth
| methods | IL Nesting Depth | Full Name |
| RemoveQuotes(String) | 5 | Dashboard.Console.RemoveQuotesExtensions.RemoveQuotes(String) |
| Sum: | 5 | |
| Average: | 5 | |
| Minimum: | 5 | |
| Maximum: | 5 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 5 methods on 872 tested match the condition. --> Group {Code Quality}
// <Name>Methods poorly commented (PercentageComment)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE PercentageComment < 20 AND NbLinesOfCode > 10 ORDER BY PercentageComment ASC
// METHODS WHERE %Comment < 20 and that have at least 10 lines of code should be more commented.
// See the definition of the PercentageComment metric here http://www.ndepend.com/Metrics.aspx#PercentageComment
| methods | Percentage Comment | # lines of code (LOC) | Full Name |
| Write() | 0 | 13 | Dashboard.Charts.ChartReportWriter.Write() |
| AppendQuartileValuesForYAxisFromMetricData() | 0 | 12 | Dashboard.Charts.ChartParameters.ValuesForXandYAxis.AppendQuartileValuesForYAxisFromMetricData() |
| Execute(Boolean,IEnumerable<Decimal>) | 0 | 13 | Dashboard.Charts.ConvertValuesToPaddedPercentageOfRange.Execute(Boolean,IEnumerable<Decimal>) |
| .ctor(IDictionary<String,Metric>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>) | 0 | 13 | Dashboard.Domain.SolutionComparison..ctor(IDictionary<String,Metric>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>) |
| .cctor() | 0 | 11 | Dashboard.Domain.MetricNames..cctor() |
| Sum: | 0 | 62 | |
| Average: | 0 | 12.4 | |
| Minimum: | 0 | 11 | |
| Maximum: | 0 | 13 | |
| Standard deviation: | 0 | 0.8000059 | |
| Variance: | 0 | 0.6400095 | |
WARNING: The following CQL constraint is not satisfied. 9 methods on 872 tested match the condition. --> Group {Code Quality}
// <Name>Methods with too many parameters (NbParameters)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbParameters > 5 ORDER BY NbParameters DESC
// METHODS WHERE NbParameters > 5 might be painful to call and might degrade performance.
// You should prefer using additional properties/fields to the declaring type to handle
// numerous states. Another alternative is to provide a class or structure dedicated to
// handle arguments passing (for example see the class System.Diagnostics.ProcessStartInfo
// and the method System.Diagnostics.Process.Start(ProcessStartInfo))
// See the definition of the NbParameters metric here http://www.ndepend.com/Metrics.aspx#NbParameters
| methods | # Parameters | Full Name |
| Execute(IDashboardConfiguration,IFileSystem,SolutionFileParser,IProgramExecutor,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,String) | 8 | Dashboard.App.DashboardApp.Execute(IDashboardConfiguration,IFileSystem,SolutionFileParser,IProgramExecutor,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,String) |
| .ctor(Action,Func<Int32,Boolean>,Func<TextReader>,Func<TextReader>,Func<Boolean>,Func<Int32>,Action) | 7 | Dashboard.Domain.IO.IoProcess..ctor(Action,Func<Int32,Boolean>,Func<TextReader>,Func<TextReader>,Func<Boolean>,Func<Int32>,Action) |
| UpdateMetricsAndReturnComparison(IDashboardConfiguration,IEnumerable<String>,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,IMetricsSource,IMetricsSource) | 7 | Dashboard.App.DashboardApp.UpdateMetricsAndReturnComparison(IDashboardConfiguration,IEnumerable<String>,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,IMetricsSource,IMetricsSource) |
| WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) | 7 | Dashboard.Domain.MetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) |
| WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) | 7 | Dashboard.Domain.IMetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection) |
| .ctor(String,String,String,String,IEnumerable<String>,String) | 6 | Dashboard.Domain.NCover.NCoverConsole..ctor(String,String,String,String,IEnumerable<String>,String) |
| Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>) | 6 | Dashboard.Data.MeasurementsRepository.Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>) |
| AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader) | 6 | Dashboard.Domain.NDepend.NDependMetricsSource.AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader) |
| .ctor(IMetricsSource,IDataContextFactory,IAssemblyGuidReader,IEnumerable<String>,IEnumerable<String>,IDictionary<String,Metric>) | 6 | Dashboard.Data.MetricsUpdater..ctor(IMetricsSource,IDataContextFactory,IAssemblyGuidReader,IEnumerable<String>,IEnumerable<String>,IDictionary<String,Metric>) |
| Sum: | 60 | |
| Average: | 6.6667 | |
| Minimum: | 6 | |
| Maximum: | 8 | |
| Standard deviation: | 0.6666682 | |
| Variance: | 0.4444466 | |
WARNING: The following CQL constraint is not satisfied. 2 types on 288 tested match the condition. --> Group {Code Quality \ Type Metrics}
// <Name>Types with too many methods</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE NbMethods > 20 ORDER BY NbMethods DESC
// TYPES WHERE NbMethods > 20 might be hard to understand and maintain
// but there might be cases where it is relevant to have a high value for NbMethods.
// For example, the System.Windows.Forms.DataGridView standard class has more than 1000 methods.
// See the definition of the NbMethods metric here http://www.ndepend.com/Metrics.aspx#NbMethods
| types | # Methods | Full Name |
| NantDashboardTask | 45 | Dashboard.Tasks.NantDashboardTask |
| MSBuildDashboardTask | 45 | Dashboard.Tasks.MSBuildDashboardTask |
| Sum: | 90 | |
| Average: | 45 | |
| Minimum: | 45 | |
| Maximum: | 45 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 2 types on 288 tested match the condition. --> Group {Code Quality \ Type Metrics}
// <Name>Types with too many fields</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE NbFields > 20 AND !IsEnumeration ORDER BY NbFields DESC
// TYPES WHERE NbFields > 20 AND !IsEnumeration might be hard to understand and maintain
// but there might be cases where it is relevant to have a high value for NbFields.
// For example, the System.Windows.Forms.Control standard class has more than 200 fields.
// The value of the metric NbFields might be a better indicator of complex type.
// See the definition of the NbFields metric here http://www.ndepend.com/Metrics.aspx#NbFields
| types | # Fields | Full Name |
| NantDashboardTask | 22 | Dashboard.Tasks.NantDashboardTask |
| MSBuildDashboardTask | 22 | Dashboard.Tasks.MSBuildDashboardTask |
| Sum: | 44 | |
| Average: | 22 | |
| Minimum: | 22 | |
| Maximum: | 22 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 2 types on 288 tested match the condition. --> Group {Code Quality \ Type Metrics}
// <Name>Types with poor cohesion (LCOM)</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10 ORDER BY LCOM DESC
// TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10 might be problematic.
// However, it is very hard to avoid such non-cohesive types. The LCOMHS metric
// is often considered as more efficient to detect non-cohesive types.
// See the definition of the LCOM metric here http://www.ndepend.com/Metrics.aspx#LCOM
| types | Lack of Cohesion Of Methods (LCOM) | # Fields | # Methods | Full Name |
| NantDashboardTask | 0.9535354 | 22 | 45 | Dashboard.Tasks.NantDashboardTask |
| MSBuildDashboardTask | 0.9535354 | 22 | 45 | Dashboard.Tasks.MSBuildDashboardTask |
| Sum: | 1.9071 | 44 | 90 | |
| Average: | 0.9535354 | 22 | 45 | |
| Minimum: | 0.9535354 | 22 | 45 | |
| Maximum: | 0.9535354 | 22 | 45 | |
| Standard deviation: | NaN | 0 | 0 | |
| Variance: | -2.126112E-08 | 0 | 0 | |
WARNING: The following CQL constraint is not satisfied. 2 types on 288 tested match the condition. --> Group {Code Quality \ Type Metrics}
// <Name>Types with poor cohesion (LCOMHS)</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE LCOMHS > 0.95 AND NbFields > 10 AND NbMethods >10 ORDER BY LCOMHS DESC
// TYPES WHERE LCOMHS > 1.0 AND NbFields > 10 AND NbMethods >10 should be avoided.
// Note that this constraint is stronger than the constraint
// TYPES WHERE LCOM > 0.8 AND NbFields > 10 AND NbMethods >10.
// See the definition of the LCOMHS metric here http://www.ndepend.com/Metrics.aspx#LCOMHS
| types | LCOM Henderson-Sellers (LCOMHS) | # Fields | # Methods | Full Name |
| NantDashboardTask | 0.9752066 | 22 | 45 | Dashboard.Tasks.NantDashboardTask |
| MSBuildDashboardTask | 0.9752066 | 22 | 45 | Dashboard.Tasks.MSBuildDashboardTask |
| Sum: | 1.9504 | 44 | 90 | |
| Average: | 0.9752066 | 22 | 45 | |
| Minimum: | 0.9752066 | 22 | 45 | |
| Maximum: | 0.9752066 | 22 | 45 | |
| Standard deviation: | NaN | 0 | 0 | |
| Variance: | -9.310554E-09 | 0 | 0 | |
WARNING: The following CQL constraint is not satisfied. 1 assemblies on 16 tested match the condition. --> Group {Design}
// <Name>Assembly should not contain namespaces dependency cycles</Name>
WARN IF Count > 0 IN SELECT TOP 10 ASSEMBLIES WHERE ContainsNamespaceDependencyCycle
// Dependency cycles between namespaces must be avoided
// in order to have a levelized and comprehensive design.
// More info available on the screencast 'Reduce the complexity' http://s3.amazonaws.com/NDependOnlineDemos/NDependReducingComplexity_viewlet_swf.html
// You can also read this article http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies
| assemblies | # lines of code (LOC) | Full Name |
| Dashboard.Charts | 100 | Dashboard.Charts |
| Sum: | 100 | |
| Average: | 100 | |
| Minimum: | 100 | |
| Maximum: | 100 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 1 types on 118 tested match the condition. --> Group {Design}
// <Name>Type should not have too many responsabilities (Efferent Coupling)</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE TypeCe > 50 ORDER BY TypeCe DESC
// The Efferent Coupling (TypeCe) for a particular type is the number of types
// it directly depends on. Notice that types declared in tier assemblies are taken into account.
// Types that depends on too many others type (more than 50) are complex and have
// more than one responsability. They are good candidate for refactoring.
// More information available in this article:
// http://codebetter.com/blogs/patricksmacchia/archive/2008/02/15/code-metrics-on-coupling-dead-code-design-flaws-and-re-engineering.aspx
| types | Efferent coupling at type level (TypeCe) | Full Name |
| MeasurementsRepository | 51 | Dashboard.Data.MeasurementsRepository |
| Sum: | 51 | |
| Average: | 51 | |
| Minimum: | 51 | |
| Maximum: | 51 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 5 types on 288 tested match the condition. --> Group {Design}
// <Name>A stateless type might be turned into a static type</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE
SizeOfInst ==0 AND
NbInterfacesImplemented == 0 AND // To be accurate, this constraint doesn't take
// account of types that implement some interfaces.
!IsStatic AND
!IsGeneric AND
!IsInterface
// It indicates stateless types that might eventually be turned into static classes.
// See the definition of the SizeOfInst metric here http://www.ndepend.com/Metrics.aspx#SizeOfInst
| types | Size of instance | # interfaces implemented | Full Name |
| ProjectFileParser | 0 | 0 | Dashboard.Domain.VisualStudio.ProjectFileParser |
| SolutionFileParser | 0 | 0 | Dashboard.Domain.VisualStudio.SolutionFileParser |
| DashboardApp | 0 | 0 | Dashboard.App.DashboardApp |
| ConsoleRunner | 0 | 0 | Dashboard.Console.ConsoleRunner |
| ConsoleArgsParser | 0 | 0 | Dashboard.Console.ConsoleArgsParser |
| Sum: | 0 | 0 | |
| Average: | 0 | 0 | |
| Minimum: | 0 | 0 | |
| Maximum: | 0 | 0 | |
| Standard deviation: | 0 | 0 | |
| Variance: | 0 | 0 | |
WARNING: The following CQL constraint is not satisfied. 10 types on 288 tested match the condition. --> Group {Design}
// <Name>Class with no descendant should be sealed if possible</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE
IsClass AND
NbChildren ==0 AND
!IsSealed AND
!IsStatic
// AND !IsPublic : You might want to add this condition if you are developping a framework
// with classes that are intended to be sub-classed by your clients.
ORDER BY NbLinesOfCode
| types | # Children | # lines of code (LOC) | Full Name |
| IoThreadFactory | 0 | 1 | Dashboard.Domain.IO.IoThreadFactory |
| ConfigurationRequiredException | 0 | 1 | Dashboard.App.ConfigurationRequiredException |
| LineChartType | 0 | 1 | Dashboard.Charts.ChartParameters.LineChartType |
| BottomAndLeftAxis | 0 | 1 | Dashboard.Charts.ChartParameters.BottomAndLeftAxis |
| AssemblyNotFoundException | 0 | 1 | Dashboard.Domain.IO.AssemblyNotFoundException |
| UnrecognisedSwitchException | 0 | 1 | Dashboard.Console.UnrecognisedSwitchException |
| SqlDataContextFactory | 0 | 2 | Dashboard.Data.Sql.SqlDataContextFactory |
| MetricsDataContext | 0 | 2 | Dashboard.Data.MetricsDataContext |
| Measurement | 0 | 3 | Dashboard.Domain.Measurement |
| VisualStudioSolution | 0 | 3 | Dashboard.Domain.VisualStudio.VisualStudioSolution |
| Sum: | 0 | 16 | |
| Average: | 0 | 1.6 | |
| Minimum: | 0 | 1 | |
| Maximum: | 0 | 3 | |
| Standard deviation: | 0 | 0.8 | |
| Variance: | 0 | 0.6399999 | |
WARNING: The following CQL constraint is not satisfied. 10 types on 288 tested match the condition. --> Group {Design}
// <Name>Classes that are candidate to be turned into Structures</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE
IsClass AND
SizeOfInst <= 16 AND // Structure instance must not be too big, else it degrades performance.
NbChildren == 0 AND // Must not have children
DepthOfInheritance == 1 // Must derive directly from System.Object
// AND IsSealed : You might want to add this condition to restreint the set.
// AND IsImmutable : Structures should be immutable type.
// AND !IsPublic : You might want to add this condition if you are developping a framework
// with classes that are intended to be sub-classed by your clients.
| types | Size of instance | # Children | Depth of inheritance | Full Name |
| NCoverRegistration | 4 | 0 | 1 | Dashboard.App.NCoverRegistration |
| SeriesExtensions | 0 | 0 | 1 | Dashboard.Domain.SeriesExtensions |
| CompositeMetricsSource | 4 | 0 | 1 | Dashboard.Domain.CompositeMetricsSource |
| SolutionComparison | 8 | 0 | 1 | Dashboard.Domain.SolutionComparison |
| MetricChange | 14 | 0 | 1 | Dashboard.Domain.MetricChange |
| PathReader | 8 | 0 | 1 | Dashboard.Domain.PathReader |
| MetricsReportWriter | 4 | 0 | 1 | Dashboard.Domain.MetricsReportWriter |
| StringEnumerableExtensions | 0 | 0 | 1 | Dashboard.Domain.StringEnumerableExtensions |
| MetricNames | 0 | 0 | 1 | Dashboard.Domain.MetricNames |
| NDependMetricsSource | 4 | 0 | 1 | Dashboard.Domain.NDepend.NDependMetricsSource |
| Sum: | 46 | 0 | 10 | |
| Average: | 4.6 | 0 | 1 | |
| Minimum: | 0 | 0 | 1 | |
| Maximum: | 14 | 0 | 1 | |
| Standard deviation: | 4.2 | 0 | 0 | |
| Variance: | 17.64 | 0 | 0 | |
WARNING: The following CQL constraint is not satisfied. 7 namespaces on 47 tested match the condition. --> Group {Design}
// <Name>Avoid namespaces with few types</Name>
WARN IF Count > 0 IN SELECT TOP 10 NAMESPACES WHERE NbTypes < 5 ORDER BY NbTypes ASC
// Make sure that there is a logical organization to each of your namespaces,
// and that there is a valid reason for putting types in a sparsely populated
// namespace. Namespaces should contain types that are used together in most
// scenarios. When their applications are mutually exclusive, types should be
// located in separate namespaces
| namespaces | # Types | Full Name |
| Dashboard.Domain.IO | 1 | Dashboard.Domain.IO |
| Dashboard.Domain | 1 | Dashboard.Domain |
| 1 | |
| Dashboard.App | 1 | Dashboard.App |
| Dashboard.Domain.NUnit | 1 | Dashboard.Domain.NUnit |
| Dashboard.Data.Sql | 4 | Dashboard.Data.Sql |
| Dashboard.Domain.NCover | 4 | Dashboard.Domain.NCover |
| Sum: | 13 | |
| Average: | 1.8571 | |
| Minimum: | 1 | |
| Maximum: | 4 | |
| Standard deviation: | 1.3553 | |
| Variance: | 1.8367 | |
WARNING: The following CQL constraint is not satisfied. 1 types on 288 tested match the condition. --> Group {Design}
// <Name>Avoid empty interfaces</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE IsInterface AND NbMethods == 0
// Interfaces define members that provide a behavior or usage contract. The functionality described by
// the interface can be adopted by any type, regardless of where the type appears in the inheritance
// hierarchy. A type implements an interface by providing implementations for the interface's members.
// An empty interface does not define any members, and as such, does not define a contract that can be implemented.
// If your design includes empty interfaces that types are expected to implement, you are probably using
// an interface as a marker, or a way of identifying a group of types. If this identification will occur
// at runtime, the correct way to accomplish this is to use a custom attribute. Use the presence or absence
// of the attribute, or the attribute's properties, to identify the target types. If the identification must
// occur at compile time, then using an empty interface is acceptable.
| types | # Methods | Full Name |
| IFileSystem | 0 | Dashboard.Domain.IFileSystem |
| Sum: | 0 | |
| Average: | 0 | |
| Minimum: | 0 | |
| Maximum: | 0 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 1 namespaces on 47 tested match the condition. --> Group {Design}
// <Name>Declare types in namespaces</Name>
WARN IF Count > 0 IN SELECT NAMESPACES WHERE NameIs "" AND !IsInFrameworkAssembly
// Types are declared within namespaces to prevent name collisions, and as a way of organizing related types
// in an object hierarchy. Types outside any named namespace are in a global namespace that cannot be referenced in code.
// If an anonymous namespace can be found, it means that it contains types outside of namespaces.
| namespaces | # lines of code (LOC) | Full Name |
| 0 | |
| Sum: | 0 | |
| Average: | 0 | |
| Minimum: | 0 | |
| Maximum: | 0 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 4 assemblies on 16 tested match the condition. --> Group {Design}
// <Name>Assemblies with poor cohesion (RelationalCohesion)</Name>
WARN IF Count > 0 IN SELECT TOP 10 ASSEMBLIES WHERE RelationalCohesion < 1.5 OR RelationalCohesion > 4.0
// As classes inside an assembly should be strongly related,
// the cohesion should be high. On the other hand, a value which is too high may
// indicate over-coupling. A good range for RelationalCohesion is 1.5 to 4.0.
// See the definition of the RelationalCohesion metric here http://www.ndepend.com/Metrics.aspx#RelationalCohesion
| assemblies | Relational cohesion | Full Name |
| Dashboard.Domain | 1.3542 | Dashboard.Domain |
| Dashboard.App | 1.2 | Dashboard.App |
| Dashboard.Tasks | 0.8 | Dashboard.Tasks |
| Dashboard.Console | 1.375 | Dashboard.Console |
| Sum: | 4.7292 | |
| Average: | 1.1823 | |
| Minimum: | 0.8 | |
| Maximum: | 1.375 | |
| Standard deviation: | 0.2308342 | |
| Variance: | 0.05328443 | |
WARNING: The following CQL constraint is not satisfied. 4 types on 288 tested match the condition. --> Group {Design \ Performance}
// <Name>Instances size shouldn't be too big (SizeOfInst)</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE SizeOfInst > 64 ORDER BY SizeOfInst DESC
// TYPES WHERE SizeOfInst > 64 might degrade performance (depending on the number of
// instances created at runtime) and might be hard to maintain.
// However it is not a rule since sometime there is no alternative
// (the size of instances of the System.Net.NetworkInformation.SystemIcmpV6Statistics
// standard class is 2064 bytes).
// See the definition of the SizeOfInst metric here http://www.ndepend.com/Metrics.aspx#SizeOfInst
| types | Size of instance | Full Name |
| MSBuildDashboardTask | 100 | Dashboard.Tasks.MSBuildDashboardTask |
| NantDashboardTask | 88 | Dashboard.Tasks.NantDashboardTask |
| Measurement | 72 | Dashboard.Domain.Measurement |
| CqlResultReader+<ReadRowValues>d__0 | 68 | Dashboard.Domain.NDepend.CqlResultReader+<ReadRowValues>d__0 |
| Sum: | 328 | |
| Average: | 82 | |
| Minimum: | 68 | |
| Maximum: | 100 | |
| Standard deviation: | 12.806 | |
| Variance: | 164 | |
WARNING: The following CQL constraint is not satisfied. 8 methods on 582 tested match the condition. --> Group {Unused Code / Dead Code}
// <Name>Potentially unused methods</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE
MethodCa == 0 AND // Ca=0 -> No Afferent Coupling -> The method is not used in the context of this application.
!IsPublic AND // Public methods might be used by client applications of your assemblies.
!IsEntryPoint AND // Main() method is not used by-design.
!IsExplicitInterfaceImpl AND // The IL code never explicitely calls explicit interface methods implementation.
!IsClassConstructor AND // The IL code never explicitely calls class constructors.
!IsFinalizer // The IL code never explicitely calls finalizers.
| methods | Afferent coupling at method level (MethodCa) | Full Name |
| MoveNext() | 0 | Dashboard.Domain.NDepend.CqlResultReader+<ReadRowValues>d__0.MoveNext() |
| MoveNext() | 0 | Dashboard.Domain.VisualStudio.VisualStudioSolution+<get_ApplicationAssemblyOutputPaths>d__0.MoveNext() |
| MoveNext() | 0 | Dashboard.Domain.VisualStudio.VisualStudioSolution+<get_UnitTestAssemblyOutputPaths>d__6.MoveNext() |
| .ctor(SerializationInfo,StreamingContext) | 0 | Dashboard.Domain.IO.ExecutionException..ctor(SerializationInfo,StreamingContext) |
| .ctor(SerializationInfo,StreamingContext) | 0 | Dashboard.Domain.IO.KillProcessException..ctor(SerializationInfo,StreamingContext) |
| CreateModel(Type) | 0 | Dashboard.Data.MetricsMappingSource.CreateModel(Type) |
| ExecuteTask() | 0 | Dashboard.Tasks.NantDashboardTask.ExecuteTask() |
| MoveNext() | 0 | Dashboard.Console.RemoveQuotesExtensions+<RemoveQuotes>d__0.MoveNext() |
| Sum: | 0 | |
| Average: | 0 | |
| Minimum: | 0 | |
| Maximum: | 0 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 10 fields on 249 tested match the condition. --> Group {Encapsulation}
// <Name>Fields should be declared as private</Name>
WARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE
!IsPrivate AND
// These conditions filter cases where fields doesn't represent state that should be encapsulated.
!IsInFrameworkAssembly AND
!IsGeneratedByCompiler AND
!IsSpecialName AND
!IsInitOnly AND
!IsLiteral AND
!IsEnumValue
| fields | Size of instance | Full Name |
| _sources | 4 | Dashboard.Domain.CompositeMetricsSource._sources |
| NumMethods | 0 | Dashboard.Domain.MetricNames.NumMethods |
| NumMethodsLOCGt10 | 0 | Dashboard.Domain.MetricNames.NumMethodsLOCGt10 |
| PercMethodsLOCGt10 | 0 | Dashboard.Domain.MetricNames.PercMethodsLOCGt10 |
| NumLinesOfCode | 0 | Dashboard.Domain.MetricNames.NumLinesOfCode |
| PercUnitTestCodeCoverage | 0 | Dashboard.Domain.MetricNames.PercUnitTestCodeCoverage |
| AfferentCouplingAssemblyLevel | 0 | Dashboard.Domain.MetricNames.AfferentCouplingAssemblyLevel |
| AfferentCouplingTypeLevel | 0 | Dashboard.Domain.MetricNames.AfferentCouplingTypeLevel |
| RelationalCohesion | 0 | Dashboard.Domain.MetricNames.RelationalCohesion |
| LComHendersonSellers | 0 | Dashboard.Domain.MetricNames.LComHendersonSellers |
| Sum: | 4 | |
| Average: | 0.4 | |
| Minimum: | 0 | |
| Maximum: | 4 | |
| Standard deviation: | 1.2 | |
| Variance: | 1.44 | |
WARNING: The following CQL constraint is not satisfied. 10 methods on 872 tested match the condition. --> Group {Encapsulation \ Methods Optimal Encapsulation}
// <Name>Methods that could be declared as 'internal' in C#, 'Friend' in VB.NET</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBeInternal
| methods | # lines of code (LOC) | Full Name |
| ElementsAscendFrom(IEnumerable<Int32>,Int32) | 8 | Dashboard.Domain.SeriesExtensions.ElementsAscendFrom(IEnumerable<Int32>,Int32) |
| IsAscending(IList<Decimal>) | 8 | Dashboard.Domain.SeriesExtensions.IsAscending(IList<Decimal>) |
| get_MetricName() | 1 | Dashboard.Domain.MetricChange.get_MetricName() |
| get_BeforeValue() | 0 | Dashboard.Domain.MetricChange.get_BeforeValue() |
| set_BeforeValue(Nullable<Decimal>) | 0 | Dashboard.Domain.MetricChange.set_BeforeValue(Nullable<Decimal>) |
| get_AfterValue() | 0 | Dashboard.Domain.MetricChange.get_AfterValue() |
| set_AfterValue(Nullable<Decimal>) | 0 | Dashboard.Domain.MetricChange.set_AfterValue(Nullable<Decimal>) |
| get_BeforeRank() | 1 | Dashboard.Domain.MetricChange.get_BeforeRank() |
| get_AfterRank() | 1 | Dashboard.Domain.MetricChange.get_AfterRank() |
| get_Percent() | 3 | Dashboard.Domain.MetricChange.get_Percent() |
| Sum: | 22 | |
| Average: | 2.2 | |
| Minimum: | 0 | |
| Maximum: | 8 | |
| Standard deviation: | 3.0265 | |
| Variance: | 9.16 | |
WARNING: The following CQL constraint is not satisfied. 10 methods on 872 tested match the condition. --> Group {Encapsulation \ Methods Optimal Encapsulation}
// <Name>Methods that could be declared as 'private' in C#, 'Private' in VB.NET</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE CouldBePrivate
| methods | # lines of code (LOC) | Full Name |
| AddBeforeValues(Guid,String,IDictionary<String,Decimal>,Boolean) | 5 | Dashboard.Domain.SolutionComparison.AddBeforeValues(Guid,String,IDictionary<String,Decimal>,Boolean) |
| AddAfterValues(Guid,String,IDictionary<String,Decimal>,Boolean) | 5 | Dashboard.Domain.SolutionComparison.AddAfterValues(Guid,String,IDictionary<String,Decimal>,Boolean) |
| .ctor() | 8 | Dashboard.Domain.DashboardMetricsList..ctor() |
| .ctor(IEnumerable<TKey>) | 6 | Dashboard.Domain.DictionaryDictionary<TKey,TValue>..ctor(IEnumerable<TKey>) |
| RankOf(Decimal) | 2 | Dashboard.Domain.Metric.RankOf(Decimal) |
| RankIndexOf(Decimal) | 6 | Dashboard.Domain.Metric.RankIndexOf(Decimal) |
| GetRankDescriptions() | 6 | Dashboard.Domain.Metric.GetRankDescriptions() |
| DescriptionOf(Decimal) | 2 | Dashboard.Domain.Metric.DescriptionOf(Decimal) |
| .ctor(String,Decimal[],Int32[],String[]) | 3 | Dashboard.Domain.Metric..ctor(String,Decimal[],Int32[],String[]) |
| .ctor(Decimal[],Int32[]) | 9 | Dashboard.Domain.Metric..ctor(Decimal[],Int32[]) |
| Sum: | 52 | |
| Average: | 5.2 | |
| Minimum: | 2 | |
| Maximum: | 9 | |
| Standard deviation: | 2.2271 | |
| Variance: | 4.96 | |
WARNING: The following CQL constraint is not satisfied. 10 types on 288 tested match the condition. --> Group {Encapsulation \ Types Optimal Encapsulation}
// <Name>Types that could be declared as internal</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE CouldBeInternal
| types | # lines of code (LOC) | Full Name |
| IRankWriter | N/A | Dashboard.Domain.IRankWriter |
| SeriesExtensions | 16 | Dashboard.Domain.SeriesExtensions |
| MetricChange | 11 | Dashboard.Domain.MetricChange |
| IProgram | N/A | Dashboard.Domain.IProgram |
| DashboardMetricsList | 8 | Dashboard.Domain.DashboardMetricsList |
| DictionaryDictionary<TKey,TValue> | 6 | Dashboard.Domain.DictionaryDictionary<TKey,TValue> |
| IExecutionOutputs | N/A | Dashboard.Domain.IExecutionOutputs |
| MetricChangeCollection | 43 | Dashboard.Domain.MetricChangeCollection |
| CqlQuery | 3 | Dashboard.Domain.NDepend.CqlQuery |
| CqlResultReader | 9 | Dashboard.Domain.NDepend.CqlResultReader |
| Sum: | 96 | |
| Average: | 9.6 | |
| Minimum: | 0 | |
| Maximum: | 43 | |
| Standard deviation: | 12.225 | |
| Variance: | 149.44 | |
WARNING: The following CQL constraint is not satisfied. 5 fields on 249 tested match the condition. --> Group {Encapsulation \ Fields Optimal Encapsulation}
// <Name>Fields that could be declared as internal</Name>
WARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBeInternal
| fields | Size of instance | Full Name |
| NumMethods | 0 | Dashboard.Domain.MetricNames.NumMethods |
| NumMethodsLOCGt10 | 0 | Dashboard.Domain.MetricNames.NumMethodsLOCGt10 |
| NumLinesOfCode | 0 | Dashboard.Domain.MetricNames.NumLinesOfCode |
| SequencePoints | 0 | Dashboard.Domain.MetricNames.SequencePoints |
| UnvisitedSequencePoints | 0 | Dashboard.Domain.MetricNames.UnvisitedSequencePoints |
| Sum: | 0 | |
| Average: | 0 | |
| Minimum: | 0 | |
| Maximum: | 0 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 1 fields on 249 tested match the condition. --> Group {Encapsulation \ Fields Optimal Encapsulation}
// <Name>Fields that could be declared as 'private' in C#, 'Private' in VB.NET</Name>
WARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE CouldBePrivate
| fields | Size of instance | Full Name |
| _sources | 4 | Dashboard.Domain.CompositeMetricsSource._sources |
| Sum: | 4 | |
| Average: | 4 | |
| Minimum: | 4 | |
| Maximum: | 4 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 5 fields on 249 tested match the condition. --> Group {Purity / Immutability / Side-Effects}
// <Name>Fields should be marked as ReadOnly when possible</Name>
WARN IF Count > 0 IN SELECT FIELDS WHERE IsImmutable AND !IsInitOnly
// A field that matches the condition IsImmutable is a field that is assigned only by constructors of its class.
// For an instance field, this means its value will remain constant throught the lifetime of the object.
// For a static field, this means its value will remain constant throught the lifetime of the program.
// In both cases, such field can safely be marked with the C# readonly keyword (ReadOnly in VB.NET).
// The condition IsInitOnly matches fields that are marked with the C# readonly keyword (ReadOnly in VB.NET).
| fields | Size of instance | Full Name |
| Sum: | 20 | |
| Average: | 4 | |
| Minimum: | 4 | |
| Maximum: | 4 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 2 types on 288 tested match the condition. --> Group {Purity / Immutability / Side-Effects}
// <Name>Structures should be immutable</Name>
WARN IF Count > 0 IN SELECT TYPES WHERE IsStructure AND !IsImmutable AND !IsInFrameworkAssembly
// It is deemed as a good practice to make your structure immutable.
// An object is immutable if its state doesn’t change once the object has been created.
// Consequently, a structure is immutable if its instances are immutable.
// Immutable types naturally simplify code by limiting side-effects.
// See some explanations on immutability and how NDepend supports it here:
// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx
| types | # lines of code (LOC) | Full Name |
| Sum: | 4 | |
| Average: | 2 | |
| Minimum: | 1 | |
| Maximum: | 3 | |
| Standard deviation: | 1 | |
| Variance: | 1 | |
WARNING: The following CQL constraint is not satisfied. 10 fields on 249 tested match the condition. --> Group {Naming Conventions}
// <Name>Instance fields should be prefixed with a 'm_'</Name>
WARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE
!NameLike "^m_" AND
!IsStatic AND
!IsLiteral AND
!IsGeneratedByCompiler AND
!IsSpecialName AND
!IsEventDelegateObject
// This naming convention provokes debate.
// Don't hesitate to customize the regex of NameLike to your preference.
| fields | Size of instance | Full Name |
| _configuration | 4 | Dashboard.App.NCoverRegistration._configuration |
| _sources | 4 | Dashboard.Domain.CompositeMetricsSource._sources |
| _metricsByName | 4 | Dashboard.Domain.SolutionComparison._metricsByName |
| _assemblyChanges | 4 | Dashboard.Domain.SolutionComparison._assemblyChanges |
| _metric | 4 | Dashboard.Domain.MetricChange._metric |
| _fileSystem | 4 | Dashboard.Domain.PathReader._fileSystem |
| _path | 4 | Dashboard.Domain.PathReader._path |
| _current | 4 | Dashboard.Domain.MetricsReportWriter._current |
| _name | 4 | Dashboard.Domain.Metric._name |
| _rankNames | 4 | Dashboard.Domain.Metric._rankNames |
| Sum: | 40 | |
| Average: | 4 | |
| Minimum: | 4 | |
| Maximum: | 4 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 10 fields on 249 tested match the condition. --> Group {Naming Conventions}
// <Name>Static fields should be prefixed with a 's_'</Name>
WARN IF Count > 0 IN SELECT TOP 10 FIELDS WHERE
!NameLike "^s_" AND
IsStatic AND
!IsLiteral AND
!IsGeneratedByCompiler AND
!IsSpecialName AND
!IsEventDelegateObject
// This naming convention provokes debate.
// Don't hesitate to customize the regex of NameLike to your preference.
| fields | Size of instance | Full Name |
| NumMethods | 0 | Dashboard.Domain.MetricNames.NumMethods |
| NumMethodsLOCGt10 | 0 | Dashboard.Domain.MetricNames.NumMethodsLOCGt10 |
| PercMethodsLOCGt10 | 0 | Dashboard.Domain.MetricNames.PercMethodsLOCGt10 |
| NumLinesOfCode | 0 | Dashboard.Domain.MetricNames.NumLinesOfCode |
| PercUnitTestCodeCoverage | 0 | Dashboard.Domain.MetricNames.PercUnitTestCodeCoverage |
| AfferentCouplingAssemblyLevel | 0 | Dashboard.Domain.MetricNames.AfferentCouplingAssemblyLevel |
| AfferentCouplingTypeLevel | 0 | Dashboard.Domain.MetricNames.AfferentCouplingTypeLevel |
| RelationalCohesion | 0 | Dashboard.Domain.MetricNames.RelationalCohesion |
| LComHendersonSellers | 0 | Dashboard.Domain.MetricNames.LComHendersonSellers |
| SequencePoints | 0 | Dashboard.Domain.MetricNames.SequencePoints |
| Sum: | 0 | |
| Average: | 0 | |
| Minimum: | 0 | |
| Maximum: | 0 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 3 methods on 872 tested match the condition. --> Group {Naming Conventions \ Name too long}
// <Name>Avoid methods with name too long</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS
WHERE NameLike "^[^\<\(]{35,}.*$" AND
!IsExplicitInterfaceImpl AND !IsInFrameworkAssembly
// The regex matches methods with name longer than 35 characters.
// Method Name doesn't contain the type and namespace prefix, FullName does.
// The regex computes the method name length from the beginning until the first open parenthesis or first lower than (for generic methods).
// Explicit Interface Implementation methods are discarded because their names are prefixed with the interface name.
| methods | # lines of code (LOC) | Full Name |
| GetHistoricDataForMeasurementForMultipleMeasurables(String,Guid[]) | 2 | Dashboard.Data.MeasurementsRepository.GetHistoricDataForMeasurementForMultipleMeasurables(String,Guid[]) |
| ConvertMeasurementsToHistoricalMetricsData(String,List<Measurement>) | 7 | Dashboard.Data.MeasurementsRepository.ConvertMeasurementsToHistoricalMetricsData(String,List<Measurement>) |
| AppendQuartileValuesForYAxisFromMetricData() | 12 | Dashboard.Charts.ChartParameters.ValuesForXandYAxis.AppendQuartileValuesForYAxisFromMetricData() |
| Sum: | 21 | |
| Average: | 7 | |
| Minimum: | 2 | |
| Maximum: | 12 | |
| Standard deviation: | 4.0825 | |
| Variance: | 16.667 | |
WARNING: The following CQL constraint is not satisfied. 1 types on 288 tested match the condition. --> Group {Naming Conventions \ Name too long}
// <Name>Avoid types with name too long</Name>
WARN IF Count > 0 IN SELECT TOP 10 TYPES WHERE
NameLike "^[^\<]{35,}.*$" AND
!IsNested AND !IsInFrameworkAssembly
// The regex matches types with name longer than 35 characters.
// Type Name doesn't contain the namespace prefix, FullName does.
// The regex computes the type name length from the beginning until the end or the first lower than (for generic types).
// Nested types are discarded because their names are prefixed with outer type's name.
| types | # lines of code (LOC) | Full Name |
| ConvertValuesToPaddedPercentageOfRange | 13 | Dashboard.Charts.ConvertValuesToPaddedPercentageOfRange |
| Sum: | 13 | |
| Average: | 13 | |
| Minimum: | 13 | |
| Maximum: | 13 | |
| Standard deviation: | 0 | |
| Variance: | 0 | |
WARNING: The following CQL constraint is not satisfied. 7 assemblies on 16 tested match the condition. --> Group {.NET Framework Usage \ System}
// <Name>Mark assemblies with CLSCompliant</Name>
WARN IF Count > 0 IN SELECT ASSEMBLIES WHERE
!HasAttribute "OPTIONAL:System.CLSCompliantAttribute" AND
!IsFrameworkAssembly
// The Common Language Specification (CLS) defines naming restrictions, data types,
// and rules to which assemblies must conform if they are to be used across programming languages.
// Good design dictates that all assemblies explicitly indicate CLS compliance with
// CLSCompliantAttribute. If the attribute is not present on an assembly, the assembly is not compliant.
| assemblies | # lines of code (LOC) | Full Name |
| Sum: | 1100 | |
| Average: | 157.14 | |
| Minimum: | 48 | |
| Maximum: | 527 | |
| Standard deviation: | 154.74 | |
| Variance: | 23943.3 | |
WARNING: The following CQL constraint is not satisfied. 1 methods on 872 tested match the condition. --> Group {.NET Framework Usage \ System}
// <Name>Do not raise too general exception types</Name>
WARN IF Count > 0 IN SELECT METHODS WHERE
// The following exception types are too general to provide sufficient information to the user:
( ( DepthOfCreateA "OPTIONAL:System.Exception" == 1 OR
DepthOfCreateA "OPTIONAL:System.ApplicationException" == 1 OR
DepthOfCreateA "OPTIONAL:System.SystemException" == 1 )
// Test for non-constructor, else this constraint would warn
// on ctor of classes that derive from these exception types.
AND !IsConstructor )
| methods | DepthOfCreateA "OPTIONAL:System.Exception" | DepthOfCreateA "OPTIONAL:System.ApplicationException" | DepthOfCreateA "OPTIONAL:System.SystemException" | Full Name |
| Sum: | 0 | 0 | 1 | |
| Average: | 0 | 0 | 1 | |
| Minimum: | 0 | 0 | 1 | |
| Maximum: | 0 | 0 | 1 | |
| Standard deviation: | 0 | 0 | 0 | |
| Variance: | 0 | 0 | 0 | |
WARNING: The following CQL constraint is not satisfied. 3 methods on 872 tested match the condition. --> Group {.NET Framework Usage \ System.Threading}
// <Name>Don't create threads explicitely</Name>
WARN IF Count > 0 IN SELECT METHODS WHERE
CreateA "OPTIONAL:System.Threading.Thread"
// Prefer using the thread pool instead of creating manually your own thread.
// Threads are costly objects.
// They take approximately 200,000 cycles to create and about 100,000 cycles to destroy.
// By default they reserve 1 megabyte of virtual memory for its stack and use 2,000-8,000 cycles for each context switch.
// As a consequence, it is preferrable to let the thread pool recycle threads.
// Creating custom thread can also be the sign of flawed design, where tasks and threads have affinity.
// It is preferrable to code tasks that can be ran on any thread.
| methods | DepthOfCreateA "OPTIONAL:System.Threading.Thread" | Full Name |
| Sum: | 3 | |
| Average: | 1 | |
| Minimum: | 0 | |
| Maximum: | 2 | |
| Standard deviation: | 0.8164966 | |
| Variance: | 0.6666667 | |
WARNING: The following CQL constraint is not satisfied. 1 methods on 872 tested match the condition. --> Group {.NET Framework Usage \ System.Threading}
// <Name>Don't use Thread.Abort()</Name>
WARN IF Count > 0 IN SELECT METHODS WHERE
IsDirectlyUsing "OPTIONAL:System.Threading.Thread.Abort()" OR
IsDirectlyUsing "OPTIONAL:System.Threading.Thread.Abort(Object)"
// Usage of Thread.Abort() is dangerous.
// More information on this here:
// http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation
| methods | DepthOfIsUsing "OPTIONAL:System.Threading.Thread.Abort()" | DepthOfIsUsing "OPTIONAL:System.Threading.Thread.Abort(Object)" | Full Name |
| Sum: | 1 | 0 | |
| Average: | 1 | 0 | |
| Minimum: | 1 | 0 | |
| Maximum: | 1 | 0 | |
| Standard deviation: | 0 | 0 | |
| Variance: | 0 | 0 | |