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)
To get explanations concerning these metrics, go to the NDepend home page.

Assemblies Metrics
Assemblies Abstractness vs. Instability
Assemblies Dependencies Diagram
CQL Queries and Constraints




Assemblies Metrics

Assembly# Types# Abstract Types# IL instruction# lines of code# lines of comment% commentAfferent CouplingEfferent CouplingRelational CohesionInstabilityAbstractnessDistance
Dashboard.Domain v1.0.0.14812527552725415831.350.850.250.1
Dashboard.Domain.IO v1.0.0.119570510517131441.580.980.260.24
Dashboard.Data v1.0.0.120416131611796791.90.930.20.13
Dashboard.Charts v1.0.0.013371510031231281.920.970.230.2
Dashboard.App v1.0.0.15187610014122601.20.970.20.17
Dashboard.Tasks v1.0.0.1507404817260260.8100
Dashboard.Console v1.0.0.1806575917220341.38100




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 instructionsCyclomatic Complexity (CC)IL Cyclomatic Complexity (ILCC)IL Nesting Depth# Parameters# Variables# OverloadsFull Name
WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)N/A0N/A00701Dashboard.Domain.IMetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)
WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)898331751Dashboard.Domain.MetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)
.ctor()86132310101Dashboard.Domain.DashboardMetricsList..ctor()
AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader)977241641Dashboard.Domain.NDepend.NDependMetricsSource.AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader)
.ctor(String,String,String,String,IEnumerable<String>,String)726110601Dashboard.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)827110702Dashboard.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>)724110601Dashboard.Data.MetricsUpdater..ctor(IMetricsSource,IDataContextFactory,IAssemblyGuidReader,IEnumerable<String>,IEnumerable<String>,IDictionary<String,Metric>)
Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>)784372662Dashboard.Data.MeasurementsRepository.Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>)
GetLatestMeasurements(Guid[])62412311111Dashboard.Data.MeasurementsRepository.GetLatestMeasurements(Guid[])
GroupMeasurementsByMeasurables(IEnumerable<Measurement>)1078362191Dashboard.Data.MeasurementsRepository.GroupMeasurementsByMeasurables(IEnumerable<Measurement>)
Sum:70126818298474512
Average:7126.81.82.90.84.74.51.2
Minimum:00000001
Maximum:106133727112
Standard deviation:2.569174.280.9797962.16560.74833152.68514.20120.3999999
Variance:6.630372.20.96000024.690.567.2117.650.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 instructionsFull Name
.ctor()613Dashboard.Domain.DashboardMetricsList..ctor()
GetLatestMeasurements(Guid[])241Dashboard.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
methodsIL Nesting DepthFull Name
RemoveQuotes(String)5Dashboard.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
methodsPercentage Comment# lines of code (LOC)Full Name
Write()013Dashboard.Charts.ChartReportWriter.Write()
AppendQuartileValuesForYAxisFromMetricData()012Dashboard.Charts.ChartParameters.ValuesForXandYAxis.AppendQuartileValuesForYAxisFromMetricData()
Execute(Boolean,IEnumerable<Decimal>)013Dashboard.Charts.ConvertValuesToPaddedPercentageOfRange.Execute(Boolean,IEnumerable<Decimal>)
.ctor(IDictionary<String,Metric>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>)013Dashboard.Domain.SolutionComparison..ctor(IDictionary<String,Metric>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>,IEnumerable<KeyValuePair<Measurable,IDictionary<String,Decimal>>>)
.cctor()011Dashboard.Domain.MetricNames..cctor()
Sum:062
Average:012.4
Minimum:011
Maximum:013
Standard deviation:00.8000059
Variance:00.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# ParametersFull Name
Execute(IDashboardConfiguration,IFileSystem,SolutionFileParser,IProgramExecutor,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,String)8Dashboard.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)7Dashboard.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)7Dashboard.App.DashboardApp.UpdateMetricsAndReturnComparison(IDashboardConfiguration,IEnumerable<String>,IDataContextFactory,IAssemblyGuidReader,IDictionary<String,Metric>,IMetricsSource,IMetricsSource)
WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)7Dashboard.Domain.MetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)
WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)7Dashboard.Domain.IMetricsReportWriter.WriteChange(String,Nullable<Decimal>,Nullable<Decimal>,String,String,Decimal,ChangeDirection)
.ctor(String,String,String,String,IEnumerable<String>,String)6Dashboard.Domain.NCover.NCoverConsole..ctor(String,String,String,String,IEnumerable<String>,String)
Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>)6Dashboard.Data.MeasurementsRepository.Save(Guid,Guid,String,Boolean,DateTime,IDictionary<String,Decimal>)
AddAssemblyAggregateResults(String,Decimal&,Decimal&,IDictionary<String,IDictionary<String,Decimal>>,IDictionary<String,Decimal>,CqlResultReader)6Dashboard.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>)6Dashboard.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# MethodsFull Name
NantDashboardTask45Dashboard.Tasks.NantDashboardTask
MSBuildDashboardTask45Dashboard.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# FieldsFull Name
NantDashboardTask22Dashboard.Tasks.NantDashboardTask
MSBuildDashboardTask22Dashboard.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
typesLack of Cohesion Of Methods (LCOM)# Fields# MethodsFull Name
NantDashboardTask0.95353542245Dashboard.Tasks.NantDashboardTask
MSBuildDashboardTask0.95353542245Dashboard.Tasks.MSBuildDashboardTask
Sum:1.90714490
Average:0.95353542245
Minimum:0.95353542245
Maximum:0.95353542245
Standard deviation:NaN00
Variance:-2.126112E-0800


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
typesLCOM Henderson-Sellers (LCOMHS)# Fields# MethodsFull Name
NantDashboardTask0.97520662245Dashboard.Tasks.NantDashboardTask
MSBuildDashboardTask0.97520662245Dashboard.Tasks.MSBuildDashboardTask
Sum:1.95044490
Average:0.97520662245
Minimum:0.97520662245
Maximum:0.97520662245
Standard deviation:NaN00
Variance:-9.310554E-0900


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.Charts100Dashboard.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

typesEfferent coupling at type level (TypeCe)Full Name
MeasurementsRepository51Dashboard.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
typesSize of instance# interfaces implementedFull Name
ProjectFileParser00Dashboard.Domain.VisualStudio.ProjectFileParser
SolutionFileParser00Dashboard.Domain.VisualStudio.SolutionFileParser
DashboardApp00Dashboard.App.DashboardApp
ConsoleRunner00Dashboard.Console.ConsoleRunner
ConsoleArgsParser00Dashboard.Console.ConsoleArgsParser
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00


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
IoThreadFactory01Dashboard.Domain.IO.IoThreadFactory
ConfigurationRequiredException01Dashboard.App.ConfigurationRequiredException
LineChartType01Dashboard.Charts.ChartParameters.LineChartType
BottomAndLeftAxis01Dashboard.Charts.ChartParameters.BottomAndLeftAxis
AssemblyNotFoundException01Dashboard.Domain.IO.AssemblyNotFoundException
UnrecognisedSwitchException01Dashboard.Console.UnrecognisedSwitchException
SqlDataContextFactory02Dashboard.Data.Sql.SqlDataContextFactory
MetricsDataContext02Dashboard.Data.MetricsDataContext
Measurement03Dashboard.Domain.Measurement
VisualStudioSolution03Dashboard.Domain.VisualStudio.VisualStudioSolution
Sum:016
Average:01.6
Minimum:01
Maximum:03
Standard deviation:00.8
Variance:00.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.
typesSize of instance# ChildrenDepth of inheritanceFull Name
NCoverRegistration401Dashboard.App.NCoverRegistration
SeriesExtensions001Dashboard.Domain.SeriesExtensions
CompositeMetricsSource401Dashboard.Domain.CompositeMetricsSource
SolutionComparison801Dashboard.Domain.SolutionComparison
MetricChange1401Dashboard.Domain.MetricChange
PathReader801Dashboard.Domain.PathReader
MetricsReportWriter401Dashboard.Domain.MetricsReportWriter
StringEnumerableExtensions001Dashboard.Domain.StringEnumerableExtensions
MetricNames001Dashboard.Domain.MetricNames
NDependMetricsSource401Dashboard.Domain.NDepend.NDependMetricsSource
Sum:46010
Average:4.601
Minimum:001
Maximum:1401
Standard deviation:4.200
Variance:17.6400


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# TypesFull Name
Dashboard.Domain.IO1Dashboard.Domain.IO
Dashboard.Domain1Dashboard.Domain
1
Dashboard.App1Dashboard.App
Dashboard.Domain.NUnit1Dashboard.Domain.NUnit
Dashboard.Data.Sql4Dashboard.Data.Sql
Dashboard.Domain.NCover4Dashboard.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# MethodsFull Name
IFileSystem0Dashboard.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
assembliesRelational cohesionFull Name
Dashboard.Domain1.3542Dashboard.Domain
Dashboard.App1.2Dashboard.App
Dashboard.Tasks0.8Dashboard.Tasks
Dashboard.Console1.375Dashboard.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
typesSize of instanceFull Name
MSBuildDashboardTask100Dashboard.Tasks.MSBuildDashboardTask
NantDashboardTask88Dashboard.Tasks.NantDashboardTask
Measurement72Dashboard.Domain.Measurement
CqlResultReader+<ReadRowValues>d__068Dashboard.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.
methodsAfferent coupling at method level (MethodCa)Full Name
MoveNext()0Dashboard.Domain.NDepend.CqlResultReader+<ReadRowValues>d__0.MoveNext()
MoveNext()0Dashboard.Domain.VisualStudio.VisualStudioSolution+<get_ApplicationAssemblyOutputPaths>d__0.MoveNext()
MoveNext()0Dashboard.Domain.VisualStudio.VisualStudioSolution+<get_UnitTestAssemblyOutputPaths>d__6.MoveNext()
.ctor(SerializationInfo,StreamingContext)0Dashboard.Domain.IO.ExecutionException..ctor(SerializationInfo,StreamingContext)
.ctor(SerializationInfo,StreamingContext)0Dashboard.Domain.IO.KillProcessException..ctor(SerializationInfo,StreamingContext)
CreateModel(Type)0Dashboard.Data.MetricsMappingSource.CreateModel(Type)
ExecuteTask()0Dashboard.Tasks.NantDashboardTask.ExecuteTask()
MoveNext()0Dashboard.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
fieldsSize of instanceFull Name
_sources4Dashboard.Domain.CompositeMetricsSource._sources
NumMethods0Dashboard.Domain.MetricNames.NumMethods
NumMethodsLOCGt100Dashboard.Domain.MetricNames.NumMethodsLOCGt10
PercMethodsLOCGt100Dashboard.Domain.MetricNames.PercMethodsLOCGt10
NumLinesOfCode0Dashboard.Domain.MetricNames.NumLinesOfCode
PercUnitTestCodeCoverage0Dashboard.Domain.MetricNames.PercUnitTestCodeCoverage
AfferentCouplingAssemblyLevel0Dashboard.Domain.MetricNames.AfferentCouplingAssemblyLevel
AfferentCouplingTypeLevel0Dashboard.Domain.MetricNames.AfferentCouplingTypeLevel
RelationalCohesion0Dashboard.Domain.MetricNames.RelationalCohesion
LComHendersonSellers0Dashboard.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)8Dashboard.Domain.SeriesExtensions.ElementsAscendFrom(IEnumerable<Int32>,Int32)
IsAscending(IList<Decimal>)8Dashboard.Domain.SeriesExtensions.IsAscending(IList<Decimal>)
get_MetricName()1Dashboard.Domain.MetricChange.get_MetricName()
get_BeforeValue()0Dashboard.Domain.MetricChange.get_BeforeValue()
set_BeforeValue(Nullable<Decimal>)0Dashboard.Domain.MetricChange.set_BeforeValue(Nullable<Decimal>)
get_AfterValue()0Dashboard.Domain.MetricChange.get_AfterValue()
set_AfterValue(Nullable<Decimal>)0Dashboard.Domain.MetricChange.set_AfterValue(Nullable<Decimal>)
get_BeforeRank()1Dashboard.Domain.MetricChange.get_BeforeRank()
get_AfterRank()1Dashboard.Domain.MetricChange.get_AfterRank()
get_Percent()3Dashboard.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)5Dashboard.Domain.SolutionComparison.AddBeforeValues(Guid,String,IDictionary<String,Decimal>,Boolean)
AddAfterValues(Guid,String,IDictionary<String,Decimal>,Boolean)5Dashboard.Domain.SolutionComparison.AddAfterValues(Guid,String,IDictionary<String,Decimal>,Boolean)
.ctor()8Dashboard.Domain.DashboardMetricsList..ctor()
.ctor(IEnumerable<TKey>)6Dashboard.Domain.DictionaryDictionary<TKey,TValue>..ctor(IEnumerable<TKey>)
RankOf(Decimal)2Dashboard.Domain.Metric.RankOf(Decimal)
RankIndexOf(Decimal)6Dashboard.Domain.Metric.RankIndexOf(Decimal)
GetRankDescriptions()6Dashboard.Domain.Metric.GetRankDescriptions()
DescriptionOf(Decimal)2Dashboard.Domain.Metric.DescriptionOf(Decimal)
.ctor(String,Decimal[],Int32[],String[])3Dashboard.Domain.Metric..ctor(String,Decimal[],Int32[],String[])
.ctor(Decimal[],Int32[])9Dashboard.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
IRankWriterN/ADashboard.Domain.IRankWriter
SeriesExtensions16Dashboard.Domain.SeriesExtensions
MetricChange11Dashboard.Domain.MetricChange
IProgramN/ADashboard.Domain.IProgram
DashboardMetricsList8Dashboard.Domain.DashboardMetricsList
DictionaryDictionary<TKey,TValue>6Dashboard.Domain.DictionaryDictionary<TKey,TValue>
IExecutionOutputsN/ADashboard.Domain.IExecutionOutputs
MetricChangeCollection43Dashboard.Domain.MetricChangeCollection
CqlQuery3Dashboard.Domain.NDepend.CqlQuery
CqlResultReader9Dashboard.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
fieldsSize of instanceFull Name
NumMethods0Dashboard.Domain.MetricNames.NumMethods
NumMethodsLOCGt100Dashboard.Domain.MetricNames.NumMethodsLOCGt10
NumLinesOfCode0Dashboard.Domain.MetricNames.NumLinesOfCode
SequencePoints0Dashboard.Domain.MetricNames.SequencePoints
UnvisitedSequencePoints0Dashboard.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
fieldsSize of instanceFull Name
_sources4Dashboard.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).



fieldsSize of instanceFull 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.
fieldsSize of instanceFull Name
_configuration4Dashboard.App.NCoverRegistration._configuration
_sources4Dashboard.Domain.CompositeMetricsSource._sources
_metricsByName4Dashboard.Domain.SolutionComparison._metricsByName
_assemblyChanges4Dashboard.Domain.SolutionComparison._assemblyChanges
_metric4Dashboard.Domain.MetricChange._metric
_fileSystem4Dashboard.Domain.PathReader._fileSystem
_path4Dashboard.Domain.PathReader._path
_current4Dashboard.Domain.MetricsReportWriter._current
_name4Dashboard.Domain.Metric._name
_rankNames4Dashboard.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.
fieldsSize of instanceFull Name
NumMethods0Dashboard.Domain.MetricNames.NumMethods
NumMethodsLOCGt100Dashboard.Domain.MetricNames.NumMethodsLOCGt10
PercMethodsLOCGt100Dashboard.Domain.MetricNames.PercMethodsLOCGt10
NumLinesOfCode0Dashboard.Domain.MetricNames.NumLinesOfCode
PercUnitTestCodeCoverage0Dashboard.Domain.MetricNames.PercUnitTestCodeCoverage
AfferentCouplingAssemblyLevel0Dashboard.Domain.MetricNames.AfferentCouplingAssemblyLevel
AfferentCouplingTypeLevel0Dashboard.Domain.MetricNames.AfferentCouplingTypeLevel
RelationalCohesion0Dashboard.Domain.MetricNames.RelationalCohesion
LComHendersonSellers0Dashboard.Domain.MetricNames.LComHendersonSellers
SequencePoints0Dashboard.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[])2Dashboard.Data.MeasurementsRepository.GetHistoricDataForMeasurementForMultipleMeasurables(String,Guid[])
ConvertMeasurementsToHistoricalMetricsData(String,List<Measurement>)7Dashboard.Data.MeasurementsRepository.ConvertMeasurementsToHistoricalMetricsData(String,List<Measurement>)
AppendQuartileValuesForYAxisFromMetricData()12Dashboard.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
ConvertValuesToPaddedPercentageOfRange13Dashboard.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 )
methodsDepthOfCreateA "OPTIONAL:System.Exception"DepthOfCreateA "OPTIONAL:System.ApplicationException"DepthOfCreateA "OPTIONAL:System.SystemException"Full Name
Sum:001
Average:001
Minimum:001
Maximum:001
Standard deviation:000
Variance:000


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.
methodsDepthOfCreateA "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
methodsDepthOfIsUsing "OPTIONAL:System.Threading.Thread.Abort()"DepthOfIsUsing "OPTIONAL:System.Threading.Thread.Abort(Object)"Full Name
Sum:10
Average:10
Minimum:10
Maximum:10
Standard deviation:00
Variance:00