It is recommended to use the NDepend interactive UI capabilities
to make the most of NDepend by mastering all aspects of your code.
Diagrams
Application Metrics
Note: Further Application Statistics are available.
|
Quality Gates summary
1001can be stopped upon quality gate
failure. Online documentation.
be run on the baseline. Hence they
have blank trend and baseline value.
Name | Trend | Baseline Value | Value | Group | |||
---|---|---|---|---|---|---|---|
| N/A because no coverage data | Project Rules \ Quality Gates | |||||
| N/A because no coverage data | Project Rules \ Quality Gates | |||||
| N/A because no coverage data | Project Rules \ Quality Gates | |||||
| 0 issues | 0 issues | Project Rules \ Quality Gates | ||||
| 0 issues | 0 issues | Project Rules \ Quality Gates | ||||
| 0 issues | Project Rules \ Quality Gates | |||||
| 3 rules | 3 rules | Project Rules \ Quality Gates | ||||
| 6.82 % | 6.82 % | Project Rules \ Quality Gates | ||||
| 0 man-days | Project Rules \ Quality Gates | |||||
| 0 namespaces | 0 namespaces | Project Rules \ Quality Gates | ||||
| 0 man-days | Project Rules \ Quality Gates |
Rules summary
131183- Number of Rules or Queries with Error (syntax error, exception thrown, time-out): 0
- Number of Rules violated: 21
development-time, from within Visual
Studio. Online documentation.
run on the baseline. Hence they
have blank # Issues Fixed or Added.
Name | # Issues | Added | Fixed | Elements | Group | |||
---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | type | Project Rules \ Code Smells | |||
| 1 | 0 | 0 | type | Project Rules \ Code Smells | |||
| 1 | 0 | 0 | method | Project Rules \ Code Smells | |||
| 13 | 0 | 0 | methods | Project Rules \ Code Smells | |||
| 3 | 0 | 0 | types | Project Rules \ Code Smells | |||
| 1 | 0 | 0 | type | Project Rules \ Object Oriented Design | |||
| 8 | 0 | 0 | methods | Project Rules \ Object Oriented Design | |||
| 6 | 0 | 0 | types | Project Rules \ Architecture | |||
| 5 | 0 | 0 | types | Project Rules \ Architecture | |||
| 3 | 0 | 0 | methods | Project Rules \ Visibility | |||
| 1 | 0 | 0 | type | Project Rules \ Visibility | |||
| 2 | 0 | 0 | fields | Project Rules \ Visibility | |||
| 18 | 0 | 0 | methods | Project Rules \ Visibility | |||
| 6 | 0 | 0 | fields | Project Rules \ Immutability | |||
| 1 | 0 | 0 | field | Project Rules \ Immutability | |||
| 1 | 0 | 0 | field | Project Rules \ Naming Conventions | |||
| 32 | 0 | 0 | methods | Project Rules \ Naming Conventions | |||
| 1 | 0 | 0 | method | Project Rules \ Naming Conventions | |||
| 3 | 0 | 0 | types | Project Rules \ Source Files Organization | |||
| 1 | 0 | 0 | method | Project Rules \ .NET Framework Usage \ System | |||
| 1 | 0 | 0 | method | Project Rules \ .NET Framework Usage \ System.Globalization |
Application Statistics
Stat | # Occurences | Avg | StdDev | Max |
---|---|---|---|---|
Properties on interfaces | interfaces | 0 | 0 | -1 properties on |
Methods on interfaces | interfaces | 0 | 0 | -1 methods on |
Arguments on methods on interfaces | methods | 0 | 0 | -1 arguments on |
Public properties on classes | 15 Classes | 1.87 | 2.47 | 9 public properties on SqlWrangler.FieldDefinition |
Public methods on classes | 15 classes | 4.47 | 4.94 | 19 public methods on SqlWrangler.FieldDefinition |
Arguments on public methods on classes | 67 methods | 0.55 | 0.72 | 4 arguments on SqlWrangler.Wizard.WriteCsWizard(DataTable,StreamWriter,String,String) |
IL instructions in non-abstract methods | 176 methods | 52.68 | 120.34 | 1256 IL instructions in SqlWrangler.SqlClient.InitializeComponent() |
Cyclomatic complexity on non abstract Methods | 176 Methods | 3.1 | 4.07 | CC = 25 for SqlWrangler.DataRowComparerViewer.ToggleMenuItems() |
Assemblies Metrics
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Assemblies | # lines of code | # IL instruction | # Types | # Abstract Types | # lines of comment | % Comment | % Coverage | Afferent Coupling | Efferent Coupling | Relational Cohesion | Instability | Abstractness | Distance |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SqliteTools v1.0.0.0 | 76 | 541 | 3 | 0 | 59 | 43.7 | - | 1 | 34 | 1 | 0.97 | 0 | 0.02 |
SqlWrangler v1.0.0.0 | 1459 | 8731 | 14 | 0 | 410 | 21.94 | - | 0 | 200 | 1.57 | 1 | 0 | 0 |
If you wish to define thresholds on types' Code Metrics, consider writing some Rule.
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Types Metrics : Code Quality
Type Name | Type Rank | # Lines Of Code | # IL Instructions | # Lines Of Comment | % Comment | Cyclomatic Complexity | IL Cyclomatic Complexity | % Coverage | Afferent Coupling | Efferent Coupling | Type Namespace |
---|---|---|---|---|---|---|---|---|---|---|---|
FrmLogin | 2.03 | 205 | 1127 | 50 | 19.61 | 35 | 45 | - | 2 | 74 | SqlWrangler |
Resources | 1.36 | 37 | 217 | 52 | 58.43 | 20 | 20 | - | 6 | 14 | SqlWrangler.Properties |
DataUpdateMode | 0.8 | - | - | 12 | 100 | 0 | - | - | 2 | 2 | SqliteTools |
SqliteTypes | 0.58 | 1 | 77 | 1 | 50 | 1 | 1 | - | 1 | 17 | SqliteTools |
MapperAttributeType | 0.57 | - | - | 0 | - | 0 | - | - | 1 | 2 | SqlWrangler |
FieldDefinition | 0.57 | 18 | 67 | 0 | 0 | 18 | 19 | - | 1 | 7 | SqlWrangler |
Settings | 0.55 | 12 | 98 | 0 | 0 | 12 | 13 | - | 2 | 12 | SqlWrangler.Properties |
TextSnippet | 0.44 | 4 | 18 | 0 | 0 | 4 | 5 | - | 2 | 5 | SqlWrangler |
Table | 0.37 | 75 | 464 | 29 | 27.88 | 31 | 45 | - | 1 | 28 | SqliteTools |
SqlClient | 0.35 | 469 | 2979 | 112 | 19.28 | 97 | 145 | - | 1 | 128 | SqlWrangler |
FrmMain | 0.33 | 110 | 636 | 37 | 25.17 | 26 | 35 | - | 1 | 59 | SqlWrangler |
RowComparerResult | 0.31 | 4 | 18 | 0 | 0 | 4 | 5 | - | 1 | 7 | SqlWrangler |
FrmNameInput | 0.24 | 62 | 318 | 26 | 29.55 | 11 | 12 | - | 1 | 33 | SqlWrangler |
FrmExportSql | 0.24 | 130 | 776 | 39 | 23.08 | 25 | 35 | - | 1 | 53 | SqlWrangler |
Wizard | 0.24 | 172 | 1059 | 5 | 2.82 | 49 | 69 | - | 1 | 28 | SqlWrangler |
DataRowComparerViewer | 0.24 | 233 | 1408 | 44 | 15.88 | 57 | 96 | - | 1 | 76 | SqlWrangler |
Program | 0.15 | 3 | 10 | 3 | 50 | 1 | 1 | - | 0 | 7 | SqlWrangler |
Types Metrics : Code Members and Inheritance
Type Name | # Instance Methods | Nb Static Methods | Nb Properties | # Fields | # Children Classes | Depth Of Inheritance Tree | Type Namespace |
---|---|---|---|---|---|---|---|
FrmLogin | 11 | 0 | 0 | 12 | 0 | 7 | SqlWrangler |
Resources | 1 | 18 | 17 | 2 | 0 | 1 | SqlWrangler.Properties |
DataUpdateMode | - | - | - | - | - | - | SqliteTools |
SqliteTypes | 0 | 1 | 0 | 1 | 0 | 1 | SqliteTools |
MapperAttributeType | - | - | - | - | - | - | SqlWrangler |
FieldDefinition | 19 | 0 | 9 | 9 | 0 | 1 | SqlWrangler |
Settings | 11 | 2 | 6 | 1 | 0 | 3 | SqlWrangler.Properties |
TextSnippet | 5 | 0 | 2 | 2 | 0 | 1 | SqlWrangler |
Table | 12 | 0 | 3 | 2 | 0 | 1 | SqliteTools |
SqlClient | 33 | 0 | 2 | 31 | 0 | 7 | SqlWrangler |
FrmMain | 16 | 0 | 2 | 11 | 0 | 7 | SqlWrangler |
RowComparerResult | 5 | 0 | 2 | 2 | 0 | 1 | SqlWrangler |
FrmNameInput | 8 | 0 | 1 | 6 | 0 | 7 | SqlWrangler |
FrmExportSql | 9 | 0 | 1 | 10 | 0 | 7 | SqlWrangler |
Wizard | 10 | 0 | 0 | 1 | 0 | 1 | SqlWrangler |
DataRowComparerViewer | 14 | 0 | 0 | 14 | 0 | 7 | SqlWrangler |
Program | 0 | 1 | 0 | 0 | 0 | 1 | SqlWrangler |
Types Metrics : Lack Of Cohesion Of Methods and Association Between Classes
Type Name | Lack Of Cohesion Of Methods | Lack Of Cohesion Of Methods HS | Association Between Classes | Type Namespace |
---|---|---|---|---|
FrmLogin | 0.82 | 0.9 | 115 | SqlWrangler |
Resources | 0 | 0 | 5 | SqlWrangler.Properties |
DataUpdateMode | - | - | 0 | SqliteTools |
SqliteTypes | 0 | 0 | 3 | SqliteTools |
MapperAttributeType | - | - | 0 | SqlWrangler |
FieldDefinition | 0 | 0 | 1 | SqlWrangler |
Settings | 0 | 0 | 4 | SqlWrangler.Properties |
TextSnippet | 0 | 0 | 1 | SqlWrangler |
Table | 0 | 0 | 36 | SqliteTools |
SqlClient | 0.93 | 0.96 | 248 | SqlWrangler |
FrmMain | 0.88 | 0.96 | 80 | SqlWrangler |
RowComparerResult | 0 | 0 | 1 | SqlWrangler |
FrmNameInput | 0.73 | 0.88 | 42 | SqlWrangler |
FrmExportSql | 0.73 | 0.85 | 79 | SqlWrangler |
Wizard | 0.8 | 0.89 | 61 | SqlWrangler |
DataRowComparerViewer | 0.79 | 0.85 | 134 | SqlWrangler |
Program | 0 | 0 | 4 | SqlWrangler |
Namespaces Metrics
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Namespaces | # lines of code | # IL instruction | # Types | # lines of comment | % Comment | % Coverage | Afferent Coupling | Efferent Coupling |
---|---|---|---|---|---|---|---|---|
SqliteTools | 76 | 541 | 3 | 42 | 35.59 | - | 1 | 8 |
SqlWrangler | 1410 | 8416 | 12 | 316 | 18.31 | - | 0 | 33 |
SqlWrangler.Properties | 49 | 315 | 2 | 59 | 54.63 | - | 1 | 10 |
Project Rules | 1001 |
Quality Gates | 1001 |
|
Quality Gate Pass: Percentage Coverage |
Scalar Result: N/A %
Quality Gate Pass: Percentage Coverage on New Code |
Scalar Result: N/A %
Quality Gate Pass: Percentage Coverage on Refactored Code |
Scalar Result: N/A %
Quality Gate Pass: Blocker Issues |
No issue matched
Quality Gate Pass: Critical Issues |
No issue matched
Quality Gate Pass: New Blocker / Critical / High Issues |
No issue matched
Quality Gate Fail: Critical Rules Violated |
3 rules matched
3 rules | issues | Full Name |
---|---|---|
Avoid types too big | 1 issue | Rule |
Avoid methods too big, too complex | 1 issue | Rule |
Avoid non-readonly static fields | 1 issue | Rule |
Statistics
Stat | issues |
---|---|
Sum: | 3 |
Average: | 1 |
Minimum: | 1 |
Maximum: | 1 |
Standard deviation: | 0 |
Variance: | 0 |
Quality Gate Pass: Percentage Debt |
Scalar Result: 6.82 %
Quality Gate Pass: New Debt since Baseline |
Scalar Result: 0 man-days
Quality Gate Pass: Debt Rating per Namespace |
No namespace matched
Quality Gate Pass: New Annual Interest since Baseline |
Scalar Result: 0 man-days
Rules extracted from Source Code | 000 |
Project Rules | 131183 |
Code Smells | 332 |
|
Critical Rule Violated: Avoid types too big |
• How to Fix Issues of this Rule: Types with many lines of code should be split in a group of smaller types. To refactor a God Class you'll need patience, and you might even need to recreate everything from scratch. Here are a few refactoring advices: • The logic in the God Class must be splitted in smaller classes. These smaller classes can eventually become private classes nested in the original God Class, whose instances objects become composed of instances of smaller nested classes. • Smaller classes partitioning should be driven by the multiple responsibilities handled by the God Class. To identify these responsibilities it often helps to look for subsets of methods strongly coupled with subsets of fields. • If the God Class contains way more logic than states, a good option can be to define one or several static classes that contains no static field but only pure static methods. A pure static method is a function that computes a result only from inputs parameters, it doesn't read nor assign any static or instance field. The main advantage of pure static methods is that they are easily testable. • Try to maintain the interface of the God Class at first and delegate calls to the new extracted classes. In the end the God Class should be a pure facade without its own logic. Then you can keep it for convenience or throw it away and start to use the new classes only. • Unit Tests can help: write tests for each method before extracting it to ensure you don't break functionality. The estimated Debt, which means the effort to fix such issue, varies linearly from 1 hour for a 200 lines of code type, up to 10 hours for a type with 2.000 or more lines of code. In Debt and Interest computation, this rule takes account of the fact that static types with no mutable fields are just a collection of static methods that can be easily splitted and moved from one type to another.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1000:AvoidTypesTooBig", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 type | locJustMyCode | # IL instructions | Methods | Fields | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|---|---|
SqlClient | 246 | 2 979 | 32 methods | 31 fields | 1h 13min | 5min | SqlWrangler.SqlClient |
Rule Violated: Avoid types with too many methods |
• How to Fix Issues of this Rule: To refactor properly a God Class please read HowToFix advices from the default rule Types to Big. // The estimated Debt, which means the effort to fix such issue, varies linearly from 1 hour for a type with 20 methods, up to 10 hours for a type with 200 or more methods. In Debt and Interest computation, this rule takes account of the fact that static types with no mutable fields are just a collection of static methods that can be easily splitted and moved from one type to another.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1001:AvoidTypesWithTooManyMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 type | nbMethods | instanceMethods | staticMethods | # lines of code (LOC) | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|---|---|
SqlClient | 28 | 28 methods | no method | 469 | 1h 24min | 7min | SqlWrangler.SqlClient |
Critical Rule Violated: Avoid methods too big, too complex |
• How to Fix Issues of this Rule: A large and complex method should be split in smaller methods, or even one or several classes can be created for that. During this process it is important to question the scope of each variable local to the method. This can be an indication if such local variable will become an instance field of the newly created class(es). Large switch…case structures might be refactored through the help of a set of types that implement a common interface, the interface polymorphism playing the role of the switch cases tests. Unit Tests can help: write tests for each method before extracting it to ensure you don't break functionality. The estimated Debt, which means the effort to fix such issue, varies from 40 minutes to 8 hours, linearly from a weighted complexity score.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1003:AvoidMethodsTooBigTooComplex", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 method | # lines of code (LOC) | Cyclomatic Complexity (CC) | IL Cyclomatic Complexity (ILCC) | IL Nesting Depth | complexityScore | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|---|---|---|
ToggleMenuItems() | 36 | 11 | 25 | 3 | 46 | 59min | 5min | SqlWrangler.DataRowComparerViewer .ToggleMenuItems() |
Rule Violated: Avoid methods potentially poorly commented |
• How to Fix Issues of this Rule: Typically add more comment. But code commenting is subject to controversy. While poorly written and designed code would needs a lot of comment to be understood, clean code doesn't need that much comment, especially if variables and methods are properly named and convey enough information. Unit-Test code can also play the role of code commenting. However, even when writing clean and well-tested code, one will have to write hacks at a point, usually to circumvent some API limitations or bugs. A hack is a non-trivial piece of code, that doesn't make sense at first glance, and that took time and web research to be found. In such situation comments must absolutely be used to express the intention, the need for the hacks and the source where the solution has been found. The estimated Debt, which means the effort to comment such method, varies linearly from 2 minutes for 10 lines of code not commented, up to 20 minutes for 200 or more, lines of code not commented.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1006:AvoidMethodsPotentiallyPoorlyCommented", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
13 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
13 methods | Percentage Comment | # lines of code (LOC) | # lines of comment | nbLinesOfCodeNotCommented | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|---|---|
CreateNhSessionFactory(String) | 8.16 | 45 | 4 | 41 | 4min 6s | 10min | SqlWrangler.FrmLogin .CreateNhSessionFactory(String) |
ToggleMenuItems() | 0 | 36 | 0 | 36 | 3min 36s | 16min | SqlWrangler.DataRowComparerViewer .ToggleMenuItems() |
BuildSnippetMenu() | 0 | 30 | 0 | 30 | 3min 0s | 16min | SqlWrangler.SqlClient.BuildSnippetMenu() |
WriteCsWizard(DataTable,StreamWriter ,String,String) | 0 | 28 | 0 | 28 | 2min 48s | 16min | SqlWrangler.Wizard.WriteCsWizard (DataTable,StreamWriter,String,String) |
WriteModelClass(DataTable,StreamWriter ,IEnumerable<FieldDefinition> ,MapperAttributeType) | 0 | 27 | 0 | 27 | 2min 42s | 16min | SqlWrangler.Wizard.WriteModelClass (DataTable,StreamWriter,IEnumerable <FieldDefinition>,MapperAttributeType) |
GetFields(DataTableReader) | 3.45 | 28 | 1 | 27 | 2min 42s | 13min | SqlWrangler.Wizard.GetFields (DataTableReader) |
WriteMaterializer(DataTable,StreamWriter ,IEnumerable<FieldDefinition>) | 3.57 | 27 | 1 | 26 | 2min 36s | 13min | SqlWrangler.Wizard.WriteMaterializer (DataTable,StreamWriter,IEnumerable <FieldDefinition>) |
Compare(DataRow,DataTable,String) | 6.9 | 27 | 2 | 25 | 2min 30s | 11min | SqlWrangler.DataRowComparerViewer .Compare(DataRow,DataTable,String) |
SaveExternalFile(Boolean) | 0 | 24 | 0 | 24 | 2min 24s | 16min | SqlWrangler.SqlClient.SaveExternalFile (Boolean) |
WriteMappings(DataTable,StreamWriter ,IEnumerable<FieldDefinition>) | 3.85 | 25 | 1 | 24 | 2min 24s | 13min | SqlWrangler.Wizard.WriteMappings (DataTable,StreamWriter,IEnumerable <FieldDefinition>) |
GenerateInsertSql(DataRow) | 7.41 | 25 | 2 | 23 | 2min 18s | 10min | SqliteTools.Table.GenerateInsertSql (DataRow) |
WizardToolStripMenuItem1_Click(Object ,EventArgs) | 0 | 22 | 0 | 22 | 2min 12s | 16min | SqlWrangler.SqlClient .WizardToolStripMenuItem1_Click(Object ,EventArgs) |
GetSnippets() | 8.33 | 22 | 2 | 20 | 2min 0s | 10min | SqlWrangler.FrmMain.GetSnippets() |
Rule Violated: Avoid types with poor cohesion |
• How to Fix Issues of this Rule: To refactor a poorly cohesive type and increase code quality and maintainability, certainly you'll have to split the type into several smaller and more cohesive types that together, implement the same logic. The estimated Debt, which means the effort to fix such issue, varies linearly from 5 minutes for a type with a low poorCohesionScore, up to 4 hours for a type with high poorCohesionScore.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1007:AvoidTypesWithPoorCohesion", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 types matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
3 types | Lack of Cohesion Of Methods (LCOM) | # Methods | # Fields | poorCohesionScore | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|---|---|
SqlClient | 0.93 | 33 | 31 | 11.94 | 41min | 14min | SqlWrangler.SqlClient |
FrmMain | 0.88 | 16 | 11 | 7.67 | 18min | 6min | SqlWrangler.FrmMain |
FrmLogin | 0.82 | 11 | 12 | 5.21 | 6min | 2min 22s | SqlWrangler.FrmLogin |
Object Oriented Design | 1220 |
Rule Violated: Class with no descendant should be sealed if possible |
• How to Fix Issues of this Rule: For each matched class, take the time to assess if it is really meant to be subclassed. Certainly most matched class will end up being declared as sealed.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1203:ClassWithNoDescendantShouldBeSealedIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 type | # lines of code (LOC) | Debt | Severity | Full Name |
---|---|---|---|---|
FieldDefinition | 18 | 0min 30s | Medium | SqlWrangler.FieldDefinition |
Rule Violated: Methods should be declared static if possible |
• How to Fix Issues of this Rule: Declare matched methods as static. Since such method doesn't use any instance fields and methods of its type and base-types, you should consider if it makes sense, to move such a method to a static utility class.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1208:MethodsShouldBeDeclaredStaticIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
8 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
8 methods | staticFieldsUsed | methodsCallingMe | Debt | Severity | Full Name |
---|---|---|---|---|---|
IsString(Type) | no field | 1 method | 1min 0s | Medium | SqliteTools.Table.IsString(Type) |
IsDateTime(Type) | no field | 1 method | 1min 0s | Medium | SqliteTools.Table.IsDateTime(Type) |
ExportSql(FileInfo,DataTable,String ,String,Boolean,Boolean) | no field | 1 method | 1min 0s | Medium | SqlWrangler.FrmExportSql.ExportSql (FileInfo,DataTable,String,String ,Boolean,Boolean) |
CreateNhSessionFactory(String) | no field | 2 methods | 1min 30s | Medium | SqlWrangler.FrmLogin .CreateNhSessionFactory(String) |
GetExcelConnectionString(String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.FrmLogin .GetExcelConnectionString(String) |
WriteLinq2DbField(StreamWriter ,FieldDefinition,String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.Wizard.WriteLinq2DbField (StreamWriter,FieldDefinition,String) |
WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.Wizard .WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) |
GetFieldName(String) | no field | 4 methods | 2min 30s | Medium | SqlWrangler.Wizard.GetFieldName(String) |
Architecture | 620 |
Rule Violated: UI layer shouldn't use directly DB types |
• How to Fix Issues of this Rule: This rule lists precisely which UI type uses which DB framework type. Instead of fixing matches one by one, first imagine how DB framework accesses could be encapsulated into a dedicated layer.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1403:UILayerShouldntUseDirectlyDBTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
6 types matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
6 types | dbTypesAndMembersUsed | Debt | Severity | Full Name |
---|---|---|---|---|
DataRowComparerViewer | 4 types 5 methods | 1h 0min | High | SqlWrangler.DataRowComparerViewer |
FrmExportSql | 2 types 1 method | 24min | High | SqlWrangler.FrmExportSql |
FrmLogin | 17 types 16 methods 1 field | 2h 36min | High | SqlWrangler.FrmLogin |
FrmMain | 1 type 2 methods | 28min | High | SqlWrangler.FrmMain |
SqlClient | 10 types 8 methods 1 field | 1h 48min | High | SqlWrangler.SqlClient |
Wizard | 4 types 2 methods | 36min | High | SqlWrangler.Wizard |
Rule Violated: UI layer shouldn't use directly DAL layer |
• How to Fix Issues of this Rule: This rule lists precisely which UI type uses which DAL type. More about this particular design topic here: http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1404:UILayerShouldntUseDirectlyDALLayer", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
5 types matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
5 types | dalTypesAndMembersUsed | Debt | Severity | Full Name |
---|---|---|---|---|
FrmExportSql | 1 type 4 methods | 32min | High | SqlWrangler.FrmExportSql |
FrmLogin | 1 type 3 methods | 32min | High | SqlWrangler.FrmLogin |
FrmMain | 2 types 2 methods | 28min | High | SqlWrangler.FrmMain |
SqlClient | 3 types 4 methods | 48min | High | SqlWrangler.SqlClient |
Program | 1 type 1 method | 20min | High | SqlWrangler.Program |
Visibility | 640 |
Rule Violated: Methods that could have a lower visibility |
• How to Fix Issues of this Rule: Declare each matched method with the specified optimal visibility in the CouldBeDeclared rule result column. By default, this rule matches public methods. If you are publishing an API many public methods matched should remain public. In such situation, you can opt for the coarse solution to this problem by adding in the rule source code && !m.IsPubliclyVisible or you can prefer the finer solution by tagging each concerned method with CannotDecreaseVisibilityAttribute.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1800:MethodsThatCouldHaveALowerVisibility", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
3 methods | Visibility | CouldBeDeclared | MethodsCallingMe | Debt | Severity | Full Name |
---|---|---|---|---|---|---|
get_TableName() | Public | Private | no method | 0min 30s | Medium | SqlWrangler.FieldDefinition .get_TableName() |
get_TableSchema() | Public | Private | no method | 0min 30s | Medium | SqlWrangler.FieldDefinition .get_TableSchema() |
get_ClassName() | Public | Private | no method | 0min 30s | Medium | SqlWrangler.FieldDefinition .get_ClassName() |
Rule Violated: Types that could be declared as private, nested in a parent type |
• How to Fix Issues of this Rule: Nest each matched type into the specified parent type and declare it as private. However nested private types are hardly testable. Hence this rule might not be applied to types consumed directly by tests.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1803:TypesThatCouldBeDeclaredAsPrivateNestedInAParentType", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 type | couldBeNestedIn | Debt | Severity | Full Name |
---|---|---|---|---|
FieldDefinition | Wizard | 3min 0s | Low | SqlWrangler.FieldDefinition |
Rule Violated: Fields should be declared as private |
• How to Fix Issues of this Rule: Declare a matched mutable field as private, or declare it as readonly. If code outside the type needs to access the field you can encapsulate the field accesses in a read-write property. At least with a read-write property you can set a debug breakpoint on the property setter, which makes easier to track write-accesses in case of problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1805:FieldsShouldBeDeclaredAsPrivate", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 fields matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
2 fields | Visibility | outsideMethodsAssigningMe | Debt | Annual Interest | Full Name |
---|---|---|---|---|---|
Types | Public | no method | 1min 0s | 6min | SqliteTools.SqliteTypes.Types |
Snippets | Public | no method | 1min 0s | 6min | SqlWrangler.FrmMain.Snippets |
Rule Violated: Avoid public methods not publicly visible |
• How to Fix Issues of this Rule: Declare the method as internal if it is used outside of its type, else declare it as private.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1807:AvoidPublicMethodsNotPubliclyVisible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
18 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
18 methods | parentTypeVisibility | declareMethodAs | methodsCaller | Debt | Severity | Full Name |
---|---|---|---|---|---|---|
get_TableName() | Internal | Private | no method | 0min 30s | Low | SqlWrangler.FieldDefinition .get_TableName() |
set_TableName(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_TableName(String) |
get_TableSchema() | Internal | Private | no method | 0min 30s | Low | SqlWrangler.FieldDefinition .get_TableSchema() |
set_TableSchema(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_TableSchema(String) |
get_ClassName() | Internal | Private | no method | 0min 30s | Low | SqlWrangler.FieldDefinition .get_ClassName() |
set_ClassName(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_ClassName(String) |
get_Name() | Internal | Internal | 6 methods | 0min 30s | Low | SqlWrangler.FieldDefinition.get_Name() |
set_Name(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition.set_Name (String) |
get_DbFieldName() | Internal | Internal | 6 methods | 0min 30s | Low | SqlWrangler.FieldDefinition .get_DbFieldName() |
set_DbFieldName(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_DbFieldName(String) |
get_Length() | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition.get_Length() |
set_Length(Int32) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition.set_Length (Int32) |
get_AllowsNull() | Internal | Internal | 5 methods | 0min 30s | Low | SqlWrangler.FieldDefinition .get_AllowsNull() |
set_AllowsNull(Boolean) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_AllowsNull(Boolean) |
get_Type() | Internal | Internal | 3 methods | 0min 30s | Low | SqlWrangler.FieldDefinition.get_Type() |
set_Type(String) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition.set_Type (String) |
get_IsShortBool() | Internal | Internal | 2 methods | 0min 30s | Low | SqlWrangler.FieldDefinition .get_IsShortBool() |
set_IsShortBool(Boolean) | Internal | Internal | 1 method | 0min 30s | Low | SqlWrangler.FieldDefinition .set_IsShortBool(Boolean) |
Immutability | 911 |
|
Rule Violated: Fields should be marked as ReadOnly when possible |
• How to Fix Issues of this Rule: Declare the field with the C# readonly keyword (ReadOnly in VB.NET). This way the intention that the field value shouldn't change is made explicit.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1900:FieldsShouldBeMarkedAsReadOnlyWhenPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
6 fields matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
6 fields | MethodsReadingMeButNotAssigningMe | MethodsAssigningMe | Debt | Severity | Full Name |
---|---|---|---|---|---|
components | 2 methods | no method | 5min | Medium | SqlWrangler.DataRowComparerViewer .components |
components | 2 methods | no method | 5min | Medium | SqlWrangler.FrmExportSql.components |
components | 2 methods | no method | 5min | Medium | SqlWrangler.FrmLogin.components |
components | 2 methods | no method | 5min | Medium | SqlWrangler.FrmMain.components |
components | 2 methods | no method | 5min | Medium | SqlWrangler.FrmNameInput.components |
components | 2 methods | no method | 5min | Medium | SqlWrangler.SqlClient.components |
Critical Rule Violated: Avoid non-readonly static fields |
• How to Fix Issues of this Rule: If the static field is just assigned once in the program lifetime, make sure to declare it as readonly and assign it inline, or from the static constructor. Else if methods other than the static constructor need to assign the state hold by the static field, refactoring must occur to ensure that this state is hold through an instance field.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1901:AvoidNonReadOnlyStaticFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 field matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 field | methodAssigningField | Debt | Severity | Full Name |
---|---|---|---|---|
Types | no method | 2min 0s | High | SqliteTools.SqliteTypes.Types |
Statistics
Stat | methodAssigningField | Debt | Severity |
---|---|---|---|
Sum: | 0 | 2min 0s | - |
Average: | 0 | 2min 0s | - |
Minimum: | 0 | 2min 0s | - |
Maximum: | 0 | 2min 0s | - |
Standard deviation: | 0 | 0min 0s | - |
Variance: | 0 | 0min 0s | - |
Naming Conventions | 1730 |
Rule Violated: Instance fields naming convention |
• How to Fix Issues of this Rule: Once the rule has been adapted to your own naming convention make sure to name all matched instance fields adequately.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2000:InstanceFieldsNamingConvention", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 field matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 field | Size of instance | Debt | Severity | Full Name |
---|---|---|---|---|
Snippets | 4 | 3min 0s | Medium | SqlWrangler.FrmMain.Snippets |
Rule Violated: Methods name should begin with an Upper character |
• How to Fix Issues of this Rule: Pascal Case the names of matched methods.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2007:MethodsNameShouldBeginWithAnUpperCharacter", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
32 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
32 methods | Debt | Severity | Full Name |
---|---|---|---|
dataGridView1_CellFormatting(Object ,DataGridViewCellFormattingEventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .dataGridView1_CellFormatting(Object ,DataGridViewCellFormattingEventArgs) |
dataGridView1_RowHeaderMouseClick(Object ,DataGridViewCellMouseEventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .dataGridView1_RowHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) |
setKeyToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .setKeyToolStripMenuItem_Click(Object ,EventArgs) |
dataGridView1_ColumnHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .dataGridView1_ColumnHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) |
setCheckFieldsToolStripMenuItem_Click (Object,EventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .setCheckFieldsToolStripMenuItem_Click (Object,EventArgs) |
clearAllCheckFieldsToolStripMenuItem_Cli ck(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .clearAllCheckFieldsToolStripMenuItem_Cl ick(Object,EventArgs) |
btnCancel_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmExportSql.btnCancel_Click (Object,EventArgs) |
btnOk_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmExportSql.btnOk_Click (Object,EventArgs) |
button1_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin.button1_Click (Object,EventArgs) |
button2_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin.button2_Click (Object,EventArgs) |
frmLogin_Load(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin.frmLogin_Load (Object,EventArgs) |
comboBox1_SelectedIndexChanged(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin .comboBox1_SelectedIndexChanged(Object ,EventArgs) |
txtPassword_KeyDown(Object,KeyEventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin.txtPassword_KeyDown (Object,KeyEventArgs) |
button3_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmLogin.button3_Click (Object,EventArgs) |
newToolStripMenuItem_Click_1(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmMain .newToolStripMenuItem_Click_1(Object ,EventArgs) |
frmMain_FormClosed(Object ,FormClosedEventArgs) | 3min 0s | Medium | SqlWrangler.FrmMain.frmMain_FormClosed (Object,FormClosedEventArgs) |
frmMain_DragDrop(Object,DragEventArgs) | 3min 0s | Medium | SqlWrangler.FrmMain.frmMain_DragDrop (Object,DragEventArgs) |
helpToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmMain .helpToolStripMenuItem_Click(Object ,EventArgs) |
aboutToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmMain .aboutToolStripMenuItem_Click(Object ,EventArgs) |
button1_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmNameInput.button1_Click (Object,EventArgs) |
button2_Click(Object,EventArgs) | 3min 0s | Medium | SqlWrangler.FrmNameInput.button2_Click (Object,EventArgs) |
txtName_KeyPress(Object ,KeyPressEventArgs) | 3min 0s | Medium | SqlWrangler.FrmNameInput .txtName_KeyPress(Object ,KeyPressEventArgs) |
executeToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .executeToolStripMenuItem_Click(Object ,EventArgs) |
toCSVToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .toCSVToolStripMenuItem_Click(Object ,EventArgs) |
textBox1_KeyUp_1(Object,KeyEventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient.textBox1_KeyUp_1 (Object,KeyEventArgs) |
toXMLToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .toXMLToolStripMenuItem_Click(Object ,EventArgs) |
cancelToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .cancelToolStripMenuItem_Click(Object ,EventArgs) |
toDaveSqlToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .toDaveSqlToolStripMenuItem_Click(Object ,EventArgs) |
dataGridView1_DataError(Object ,DataGridViewDataErrorEventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .dataGridView1_DataError(Object ,DataGridViewDataErrorEventArgs) |
toJSONToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .toJSONToolStripMenuItem_Click(Object ,EventArgs) |
colorToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .colorToolStripMenuItem_Click(Object ,EventArgs) |
compareRowsToolStripMenuItem_Click (Object,EventArgs) | 3min 0s | Medium | SqlWrangler.SqlClient .compareRowsToolStripMenuItem_Click (Object,EventArgs) |
Rule Violated: Avoid methods with name too long |
• How to Fix Issues of this Rule: To fix a violation of this rule, rename the method with a shortest name that equally conveys the behavior of the method. Or eventually split the method into several smaller methods.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2010:AvoidMethodsWithNameTooLong", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 method | SimpleName | NameLength | Debt | Severity | Full Name |
---|---|---|---|---|---|
clearAllCheckFieldsToolStripMenuItem_Cli ck(Object,EventArgs) | clearAllCheckFieldsToolStripMenuItem_Click | 42 | 3min 0s | Medium | SqlWrangler.DataRowComparerViewer .clearAllCheckFieldsToolStripMenuItem_Cl ick(Object,EventArgs) |
Source Files Organization | 510 |
|
Rule Violated: Avoid defining multiple types in a source file |
• How to Fix Issues of this Rule: To fix a violation of this rule, create a source file for each type. By default issues of this rule have a Low severity because they reflect more an advice than a problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2102:AvoidDefiningMultipleTypesInASourceFile", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 types matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
3 types | TypesInSourceFile | SourceFilePathString | Debt | Severity | Full Name |
---|---|---|---|---|---|
DataRowComparerViewer | 2 types | D:\src\SqlWrangler\SqlWrangler\SqlWrangler\DataRowComparerViewer.cs | 3min 0s | Low | SqlWrangler.DataRowComparerViewer |
SqlClient | 2 types | D:\src\SqlWrangler\SqlWrangler\SqlWrangler\SqlClient.cs | 3min 0s | Low | SqlWrangler.SqlClient |
Wizard | 2 types | D:\src\SqlWrangler\SqlWrangler\SqlWrangler\Wizard.cs | 3min 0s | Low | SqlWrangler.Wizard |
.NET Framework Usage | 2320 |
System | 910 |
|
Rule Violated: Do not raise too general exception types |
• How to Fix Issues of this Rule: To fix a violation of this rule, change the type of the thrown exception to either a more derived type that already exists in the framework, or create your own type that derives from System.Exception. The estimated Debt, which means the effort to fix such issue, is equal to 15 minutes per method matched, plus 5 minutes per too general exception types instantiated by the method.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2207:DoNotRaiseTooGeneralExceptionTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 method | exceptionsCreated | Debt | Severity | Full Name |
---|---|---|---|---|
GenerateInsertSql(DataRow) | 1 type | 20min | High | SqliteTools.Table.GenerateInsertSql (DataRow) |
System.Globalization | 010 |
|
Rule Violated: Float and Date Parsing must be culture aware |
• How to Fix Issues of this Rule: Globalize your applicaton and make sure to use the globalized overloads of these methods. In the column MethodsCallingMe of this rule result are listed the methods of your application that call the non-globalized overloads. More information on Creating Globally Aware Applications here: https://msdn.microsoft.com/en-us/library/cc853414(VS.95).aspx The estimated Debt, which means the effort to fix such issue, is equal to 5 minutes per application method calling at least one non-culture aware method called, plus 3 minutes per non-culture aware method called.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2700:FloatAndDateParsingMustBeCultureAware", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 method | shouldntCall | Debt | Annual Interest | Full Name |
---|---|---|---|---|
GenerateInsertSql(DataRow) | 1 method | 8min | 5min | SqliteTools.Table.GenerateInsertSql (DataRow) |
Quality Gates
|
Code Query: Quality Gates Evolution |
8 quality gates matched
8 quality gates | Evolution | BaselineStatus | Status | BaselineValue | Value | Full Name |
---|---|---|---|---|---|---|
Blocker Issues | Pass | Pass | 0 issues | 0 issues | Quality Gate | |
Critical Issues | Pass | Pass | 0 issues | 0 issues | Quality Gate | |
New Blocker / Critical / High Issues | N/A | N/A | Pass | null | 0 issues | Quality Gate |
Critical Rules Violated | Fail | Fail | 3 rules | 3 rules | Quality Gate | |
Percentage Debt | Pass | Pass | 6.82 % | 6.82 % | Quality Gate | |
New Debt since Baseline | N/A | N/A | Pass | null | 0 man-days | Quality Gate |
Debt Rating per Namespace | Pass | Pass | 0 namespaces | 0 namespaces | Quality Gate | |
New Annual Interest since Baseline | N/A | N/A | Pass | null | 0 man-days | Quality Gate |
Statistics
Stat | Evolution | BaselineStatus | Status | BaselineValue | Value |
---|---|---|---|---|---|
Sum: | - | - | - | - | - |
Average: | - | - | - | - | - |
Minimum: | - | - | - | - | - |
Maximum: | - | - | - | - | - |
Standard deviation: | - | - | - | - | - |
Variance: | - | - | - | - | - |
Quality Gate Pass: Percentage Coverage |
Scalar Result: N/A %
Quality Gate Pass: Percentage Coverage on New Code |
Scalar Result: N/A %
Quality Gate Pass: Percentage Coverage on Refactored Code |
Scalar Result: N/A %
Quality Gate Pass: Blocker Issues |
No issue matched
Quality Gate Pass: Critical Issues |
No issue matched
Quality Gate Pass: New Blocker / Critical / High Issues |
No issue matched
Quality Gate Fail: Critical Rules Violated |
3 rules matched
3 rules | issues | Full Name |
---|---|---|
Avoid types too big | 1 issue | Rule |
Avoid methods too big, too complex | 1 issue | Rule |
Avoid non-readonly static fields | 1 issue | Rule |
Statistics
Stat | issues |
---|---|
Sum: | 3 |
Average: | 1 |
Minimum: | 1 |
Maximum: | 1 |
Standard deviation: | 0 |
Variance: | 0 |
Quality Gate Pass: Percentage Debt |
Scalar Result: 6.82 %
Quality Gate Pass: New Debt since Baseline |
Scalar Result: 0 man-days
Quality Gate Pass: Debt Rating per Namespace |
No namespace matched
Quality Gate Pass: New Annual Interest since Baseline |
Scalar Result: 0 man-days
Hot Spots
Code Query: Types Hot Spots |
11 types matched
11 types | Debt | Issues | Annual Interest | Breaking Point | # lines of code (LOC) | DebtRating | DebtRatio | Full Name |
---|---|---|---|---|---|---|---|---|
SqlClient | 6h 40min | 20 issues | 2h 16min | 1 072d | 469 | B | 8.68 | SqlWrangler.SqlClient |
FrmLogin | 3h 43min | 13 issues | 1h 10min | 1 155d | 205 | C | 11.31 | SqlWrangler.FrmLogin |
DataRowComparerViewer | 2h 34min | 13 issues | 1h 8min | 818d | 233 | B | 6.81 | SqlWrangler.DataRowComparerViewer |
FrmMain | 1h 40min | 12 issues | 1h 16min | 479d | 110 | B | 8.47 | SqlWrangler.FrmMain |
FrmExportSql | 1h 8min | 6 issues | 48min | 517d | 130 | B | 5.25 | SqlWrangler.FrmExportSql |
Wizard | 56min | 10 issues | 1h 38min | 210d | 172 | A | 3.57 | SqlWrangler.Wizard |
Table | 32min | 5 issues | 39min | 296d | 75 | A | 4.15 | SqliteTools.Table |
Program | 20min | 1 issue | 20min | 365d | 3 | D | 46.3 | SqlWrangler.Program |
FrmNameInput | 14min | 4 issues | 8min | 638d | 62 | A | 2.1 | SqlWrangler.FrmNameInput |
FieldDefinition | 14min | 23 issues | 8min | 638d | 18 | A | 3.45 | SqlWrangler.FieldDefinition |
SqliteTypes | 3min 0s | 2 issues | 26min | 42d | 1 | B | 8.68 | SqliteTools.SqliteTypes |
Statistics
Stat | Debt | Issues | Annual Interest | Breaking Point | # lines of code (LOC) | DebtRating | DebtRatio |
---|---|---|---|---|---|---|---|
Sum: | 2d 2h | 109 | 1d 2h | 6 234d | 1 478 | - | 108.76 |
Average: | 1h 38min | 9.91 | 54min | 566d | 134.36 | - | 9.89 |
Minimum: | 3min 0s | 1 | 8min | 42d | 1 | - | 2.1 |
Maximum: | 6h 40min | 23 | 2h 16min | 1 155d | 469 | - | 46.3 |
Standard deviation: | 1h 55min | 6.83 | 38min | 330d | 130.06 | - | 11.83 |
Variance: | 1 667d | 46.63 | 183d | overflow | 16 916 | - | 139.86 |
Code Query: Types to Fix Priority |
7 types matched
7 types | Breaking Point | Debt | Annual Interest | Issues | # lines of code (LOC) | DebtRating | DebtRatio | Full Name |
---|---|---|---|---|---|---|---|---|
Wizard | 210d | 56min | 1h 38min | 10 issues | 172 | A | 3.57 | SqlWrangler.Wizard |
Table | 296d | 32min | 39min | 5 issues | 75 | A | 4.15 | SqliteTools.Table |
FrmMain | 479d | 1h 40min | 1h 16min | 12 issues | 110 | B | 8.47 | SqlWrangler.FrmMain |
FrmExportSql | 517d | 1h 8min | 48min | 6 issues | 130 | B | 5.25 | SqlWrangler.FrmExportSql |
DataRowComparerViewer | 818d | 2h 34min | 1h 8min | 13 issues | 233 | B | 6.81 | SqlWrangler.DataRowComparerViewer |
SqlClient | 1 072d | 6h 40min | 2h 16min | 20 issues | 469 | B | 8.68 | SqlWrangler.SqlClient |
FrmLogin | 1 155d | 3h 43min | 1h 10min | 13 issues | 205 | C | 11.31 | SqlWrangler.FrmLogin |
Statistics
Stat | Breaking Point | Debt | Annual Interest | Issues | # lines of code (LOC) | DebtRating | DebtRatio |
---|---|---|---|---|---|---|---|
Sum: | 4 550d | 2d 1h | 1d 0h | 79 | 1 394 | - | 48.23 |
Average: | 650d | 2h 28min | 1h 16min | 11.29 | 199.14 | - | 6.89 |
Minimum: | 210d | 32min | 39min | 5 | 75 | - | 3.57 |
Maximum: | 1 155d | 6h 40min | 2h 16min | 20 | 469 | - | 11.31 |
Standard deviation: | 343d | 1h 59min | 30min | 4.65 | 121.23 | - | 2.58 |
Variance: | overflow | 1 784d | 112d | 21.63 | 14 697 | - | 6.64 |
Code Query: Issues to Fix Priority |
109 issues matched
109 issues | Debt | Annual Interest | Breaking Point | CodeElement | Full Name |
---|---|---|---|---|---|
High issue on: SqliteTools.SqliteTypes.Types | 2min 0s | 20min | 36d | Types | Rule violated: Avoid non-readonly static fields |
Medium issue on: SqlWrangler.SqlClient .WizardToolStripMenuItem1_Click(Object ,EventArgs) | 2min 12s | 16min | 50d | WizardToolStripMenuItem1_Click(Object,EventArgs) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.SqlClient .SaveExternalFile(Boolean) | 2min 24s | 16min | 54d | SaveExternalFile(Boolean) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqliteTools.SqliteTypes.Types | 1min 0s | 6min | 60d | Types | Rule violated: Fields should be declared as private |
Medium issue on: SqlWrangler.FrmMain.Snippets | 1min 0s | 6min | 60d | Snippets | Rule violated: Fields should be declared as private |
Medium issue on: SqlWrangler.Wizard .WriteModelClass(DataTable,StreamWriter ,IEnumerable<FieldDefinition> ,MapperAttributeType) | 2min 42s | 16min | 61d | WriteModelClass(DataTable,StreamWriter,IEnumerable<FieldDefinition>,MapperAttributeType) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.Wizard .WriteCsWizard(DataTable,StreamWriter ,String,String) | 2min 48s | 16min | 63d | WriteCsWizard(DataTable,StreamWriter,String,String) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.Wizard .WriteMappings(DataTable,StreamWriter ,IEnumerable<FieldDefinition>) | 2min 24s | 13min | 65d | WriteMappings(DataTable,StreamWriter,IEnumerable<FieldDefinition>) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.SqlClient .BuildSnippetMenu() | 3min 0s | 16min | 68d | BuildSnippetMenu() | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.Wizard .WriteMaterializer(DataTable ,StreamWriter,IEnumerable <FieldDefinition>) | 2min 36s | 13min | 70d | WriteMaterializer(DataTable,StreamWriter,IEnumerable<FieldDefinition>) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.FrmMain.GetSnippets() | 2min 0s | 10min | 71d | GetSnippets() | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.Wizard .GetFields(DataTableReader) | 2min 42s | 13min | 72d | GetFields(DataTableReader) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqliteTools.Table .GenerateInsertSql(DataRow) | 2min 18s | 10min | 77d | GenerateInsertSql(DataRow) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler .DataRowComparerViewer.Compare(DataRow ,DataTable,String) | 2min 30s | 11min | 81d | Compare(DataRow,DataTable,String) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler .DataRowComparerViewer.ToggleMenuItems() | 3min 36s | 16min | 82d | ToggleMenuItems() | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqlWrangler.FieldDefinition | 0min 30s | 2min 0s | 91d | FieldDefinition | Rule violated: Class with no descendant should be sealed if possible |
Medium issue on: SqlWrangler .FieldDefinition.get_TableName() | 0min 30s | 2min 0s | 91d | get_TableName() | Rule violated: Methods that could have a lower visibility |
Medium issue on: SqlWrangler .FieldDefinition.get_TableSchema() | 0min 30s | 2min 0s | 91d | get_TableSchema() | Rule violated: Methods that could have a lower visibility |
Medium issue on: SqlWrangler .FieldDefinition.get_ClassName() | 0min 30s | 2min 0s | 91d | get_ClassName() | Rule violated: Methods that could have a lower visibility |
Medium issue on: SqlWrangler.FrmLogin .CreateNhSessionFactory(String) | 4min 6s | 10min | 145d | CreateNhSessionFactory(String) | Rule violated: Avoid methods potentially poorly commented |
Medium issue on: SqliteTools.Table.IsString(Type) | 1min 0s | 2min 0s | 182d | IsString(Type) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqliteTools.Table.IsDateTime(Type) | 1min 0s | 2min 0s | 182d | IsDateTime(Type) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqlWrangler .FrmExportSql.ExportSql(FileInfo ,DataTable,String,String,Boolean,Boolean ) | 1min 0s | 2min 0s | 182d | ExportSql(FileInfo,DataTable,String,String,Boolean,Boolean) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqlWrangler.FrmLogin .GetExcelConnectionString(String) | 1min 0s | 2min 0s | 182d | GetExcelConnectionString(String) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqlWrangler.Wizard .WriteLinq2DbField(StreamWriter ,FieldDefinition,String) | 1min 0s | 2min 0s | 182d | WriteLinq2DbField(StreamWriter,FieldDefinition,String) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqlWrangler.Wizard .WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) | 1min 0s | 2min 0s | 182d | WriteEntityFrameworkField(StreamWriter,FieldDefinition,String) | Rule violated: Methods should be declared static if possible |
Medium issue on: SqlWrangler.FrmLogin .CreateNhSessionFactory(String) | 1min 30s | 2min 0s | 273d | CreateNhSessionFactory(String) | Rule violated: Methods should be declared static if possible |
High issue on: SqlWrangler.Program | 20min | 20min | 365d | Program | Rule violated: UI layer shouldn't use directly DAL layer |
High issue on: SqliteTools.Table .GenerateInsertSql(DataRow) | 20min | 20min | 365d | GenerateInsertSql(DataRow) | Rule violated: Do not raise too general exception types |
High issue on: SqlWrangler.FrmExportSql | 24min | 20min | 438d | FrmExportSql | Rule violated: UI layer shouldn't use directly DB types |
Medium issue on: SqlWrangler.Wizard.GetFieldName(String) | 2min 30s | 2min 0s | 456d | GetFieldName(String) | Rule violated: Methods should be declared static if possible |
High issue on: SqlWrangler.FrmMain | 28min | 20min | 511d | FrmMain | Rule violated: UI layer shouldn't use directly DB types |
High issue on: SqlWrangler.FrmMain | 28min | 20min | 511d | FrmMain | Rule violated: UI layer shouldn't use directly DAL layer |
Medium issue on: SqlWrangler.FrmMain.Snippets | 3min 0s | 2min 0s | 547d | Snippets | Rule violated: Instance fields naming convention |
Medium issue on: SqlWrangler.DataRowComparerViewer .dataGridView1_CellFormatting(Object ,DataGridViewCellFormattingEventArgs) | 3min 0s | 2min 0s | 547d | dataGridView1_CellFormatting(Object,DataGridViewCellFormattingEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .dataGridView1_RowHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) | 3min 0s | 2min 0s | 547d | dataGridView1_RowHeaderMouseClick(Object,DataGridViewCellMouseEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .setKeyToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | setKeyToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .dataGridView1_ColumnHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) | 3min 0s | 2min 0s | 547d | dataGridView1_ColumnHeaderMouseClick(Object,DataGridViewCellMouseEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .setCheckFieldsToolStripMenuItem_Click (Object,EventArgs) | 3min 0s | 2min 0s | 547d | setCheckFieldsToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .clearAllCheckFieldsToolStripMenuItem_Cl ick(Object,EventArgs) | 3min 0s | 2min 0s | 547d | clearAllCheckFieldsToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler .FrmExportSql.btnCancel_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | btnCancel_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler .FrmExportSql.btnOk_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | btnOk_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .button1_Click(Object,EventArgs) | 3min 0s | 2min 0s | 547d | button1_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .button2_Click(Object,EventArgs) | 3min 0s | 2min 0s | 547d | button2_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .frmLogin_Load(Object,EventArgs) | 3min 0s | 2min 0s | 547d | frmLogin_Load(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .comboBox1_SelectedIndexChanged(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | comboBox1_SelectedIndexChanged(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .txtPassword_KeyDown(Object,KeyEventArgs ) | 3min 0s | 2min 0s | 547d | txtPassword_KeyDown(Object,KeyEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmLogin .button3_Click(Object,EventArgs) | 3min 0s | 2min 0s | 547d | button3_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmMain .newToolStripMenuItem_Click_1(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | newToolStripMenuItem_Click_1(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmMain .frmMain_FormClosed(Object ,FormClosedEventArgs) | 3min 0s | 2min 0s | 547d | frmMain_FormClosed(Object,FormClosedEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmMain .frmMain_DragDrop(Object,DragEventArgs) | 3min 0s | 2min 0s | 547d | frmMain_DragDrop(Object,DragEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmMain .helpToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | helpToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.FrmMain .aboutToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | aboutToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler .FrmNameInput.button1_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | button1_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler .FrmNameInput.button2_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | button2_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler .FrmNameInput.txtName_KeyPress(Object ,KeyPressEventArgs) | 3min 0s | 2min 0s | 547d | txtName_KeyPress(Object,KeyPressEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .executeToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | executeToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .toCSVToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | toCSVToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .textBox1_KeyUp_1(Object,KeyEventArgs) | 3min 0s | 2min 0s | 547d | textBox1_KeyUp_1(Object,KeyEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .toXMLToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | toXMLToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .cancelToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | cancelToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .toDaveSqlToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | toDaveSqlToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .dataGridView1_DataError(Object ,DataGridViewDataErrorEventArgs) | 3min 0s | 2min 0s | 547d | dataGridView1_DataError(Object,DataGridViewDataErrorEventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .toJSONToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | toJSONToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .colorToolStripMenuItem_Click(Object ,EventArgs) | 3min 0s | 2min 0s | 547d | colorToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.SqlClient .compareRowsToolStripMenuItem_Click (Object,EventArgs) | 3min 0s | 2min 0s | 547d | compareRowsToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Methods name should begin with an Upper character |
Medium issue on: SqlWrangler.DataRowComparerViewer .clearAllCheckFieldsToolStripMenuItem_Cl ick(Object,EventArgs) | 3min 0s | 2min 0s | 547d | clearAllCheckFieldsToolStripMenuItem_Click(Object,EventArgs) | Rule violated: Avoid methods with name too long |
High issue on: SqlWrangler.FrmExportSql | 32min | 20min | 584d | FrmExportSql | Rule violated: UI layer shouldn't use directly DAL layer |
High issue on: SqlWrangler.FrmLogin | 32min | 20min | 584d | FrmLogin | Rule violated: UI layer shouldn't use directly DAL layer |
Medium issue on: SqliteTools.Table .GenerateInsertSql(DataRow) | 8min | 5min | 584d | GenerateInsertSql(DataRow) | Rule violated: Float and Date Parsing must be culture aware |
High issue on: SqlWrangler.Wizard | 36min | 20min | 657d | Wizard | Rule violated: UI layer shouldn't use directly DB types |
High issue on: SqlWrangler.SqlClient | 48min | 20min | 876d | SqlClient | Rule violated: UI layer shouldn't use directly DAL layer |
Medium issue on: SqlWrangler .DataRowComparerViewer.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.FrmExportSql.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.FrmLogin.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.FrmMain.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.FrmNameInput.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.SqlClient.components | 5min | 2min 0s | 912d | components | Rule violated: Fields should be marked as ReadOnly when possible |
Medium issue on: SqlWrangler.FrmLogin | 6min | 2min 22s | 941d | FrmLogin | Rule violated: Avoid types with poor cohesion |
Medium issue on: SqlWrangler.FrmMain | 18min | 6min | 1 043d | FrmMain | Rule violated: Avoid types with poor cohesion |
Medium issue on: SqlWrangler.SqlClient | 41min | 14min | 1 073d | SqlClient | Rule violated: Avoid types with poor cohesion |
High issue on: SqlWrangler.DataRowComparerViewer | 1h 0min | 20min | 1 095d | DataRowComparerViewer | Rule violated: UI layer shouldn't use directly DB types |
High issue on: SqlWrangler.SqlClient | 1h 48min | 20min | 1 971d | SqlClient | Rule violated: UI layer shouldn't use directly DB types |
High issue on: SqlWrangler.FrmLogin | 2h 36min | 20min | 2 847d | FrmLogin | Rule violated: UI layer shouldn't use directly DB types |
Medium issue on: SqlWrangler .DataRowComparerViewer.ToggleMenuItems() | 59min | 5min | 3 863d | ToggleMenuItems() | Rule violated: Avoid methods too big, too complex |
Medium issue on: SqlWrangler.SqlClient | 1h 24min | 7min | 4 232d | SqlClient | Rule violated: Avoid types with too many methods |
Medium issue on: SqlWrangler.SqlClient | 1h 13min | 5min | 5 370d | SqlClient | Rule violated: Avoid types too big |
Low issue on: SqlWrangler.FieldDefinition | 3min 0s | 0min 0s | 00:00:00 | FieldDefinition | Rule violated: Types that could be declared as private, nested in a parent type |
Low issue on: SqlWrangler .FieldDefinition.get_TableName() | 0min 30s | 0min 0s | 00:00:00 | get_TableName() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_TableName(String) | 0min 30s | 0min 0s | 00:00:00 | set_TableName(String) | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.get_TableSchema() | 0min 30s | 0min 0s | 00:00:00 | get_TableSchema() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_TableSchema(String) | 0min 30s | 0min 0s | 00:00:00 | set_TableSchema(String) | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.get_ClassName() | 0min 30s | 0min 0s | 00:00:00 | get_ClassName() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_ClassName(String) | 0min 30s | 0min 0s | 00:00:00 | set_ClassName(String) | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler.FieldDefinition.get_Name() | 0min 30s | 0min 0s | 00:00:00 | get_Name() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_Name(String) | 0min 30s | 0min 0s | 00:00:00 | set_Name(String) | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.get_DbFieldName() | 0min 30s | 0min 0s | 00:00:00 | get_DbFieldName() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_DbFieldName(String) | 0min 30s | 0min 0s | 00:00:00 | set_DbFieldName(String) | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.get_Length() | 0min 30s | 0min 0s | 00:00:00 | get_Length() | Rule violated: Avoid public methods not publicly visible |
Low issue on: SqlWrangler .FieldDefinition.set_Length(Int32) | 0min 30s | 0min 0s | 00:00:00 | set_Length(Int32) | Rule violated: Avoid public methods not publicly visible |
Statistics
Stat | Debt | Annual Interest | Breaking Point | CodeElement |
---|---|---|---|---|
Sum: | 2d 2h | 1d 2h | 55 316d | - |
Average: | 9min | 5min | 507d | - |
Minimum: | 0min 30s | 0min 0s | 00:00:00 | - |
Maximum: | 2h 36min | 20min | 5 370d | - |
Standard deviation: | 22min | 6min | 795d | - |
Variance: | 64d | 5d 6h | overflow | - |
Code Query: Debt and Issues per Rule |
21 rules matched
21 rules | Issues | Debt | Annual Interest | Breaking Point | Category | Full Name |
---|---|---|---|---|---|---|
UI layer shouldn't use directly DB types | 6 issues | 6h 52min | 2h 0min | 1 253d | Project Rules \ Architecture | Rule |
UI layer shouldn't use directly DAL layer | 5 issues | 2h 40min | 1h 40min | 584d | Project Rules \ Architecture | Rule |
Methods name should begin with an Upper character | 32 issues | 1h 36min | 1h 4min | 547d | Project Rules \ Naming Conventions | Rule |
Avoid types with too many methods | 1 issue | 1h 24min | 7min | 4 232d | Project Rules \ Code Smells | Rule |
Avoid types too big | 1 issue | 1h 13min | 5min | 5 370d | Project Rules \ Code Smells | Rule |
Avoid types with poor cohesion | 3 issues | 1h 6min | 23min | 1 050d | Project Rules \ Code Smells | Rule |
Avoid methods too big, too complex | 1 issue | 59min | 5min | 3 863d | Project Rules \ Code Smells | Rule |
Avoid methods potentially poorly commented | 13 issues | 35min | 2h 58min | 72d | Project Rules \ Code Smells | Rule |
Fields should be marked as ReadOnly when possible | 6 issues | 30min | 12min | 912d | Project Rules \ Immutability | Rule |
Do not raise too general exception types | 1 issue | 20min | 20min | 365d | Project Rules \ .NET Framework Usage \ System | Rule |
Methods should be declared static if possible | 8 issues | 10min | 16min | 228d | Project Rules \ Object Oriented Design | Rule |
Avoid public methods not publicly visible | 18 issues | 9min | 0min 0s | 00:00:00 | Project Rules \ Visibility | Rule |
Avoid defining multiple types in a source file | 3 issues | 9min | 0min 0s | 00:00:00 | Project Rules \ Source Files Organization | Rule |
Float and Date Parsing must be culture aware | 1 issue | 8min | 5min | 584d | Project Rules \ .NET Framework Usage \ System.Globalization | Rule |
Types that could be declared as private, nested in a parent type | 1 issue | 3min 0s | 0min 0s | 00:00:00 | Project Rules \ Visibility | Rule |
Instance fields naming convention | 1 issue | 3min 0s | 2min 0s | 547d | Project Rules \ Naming Conventions | Rule |
Avoid methods with name too long | 1 issue | 3min 0s | 2min 0s | 547d | Project Rules \ Naming Conventions | Rule |
Fields should be declared as private | 2 issues | 2min 0s | 12min | 60d | Project Rules \ Visibility | Rule |
Avoid non-readonly static fields | 1 issue | 2min 0s | 20min | 36d | Project Rules \ Immutability | Rule |
Methods that could have a lower visibility | 3 issues | 1min 30s | 6min | 91d | Project Rules \ Visibility | Rule |
Class with no descendant should be sealed if possible | 1 issue | 0min 30s | 2min 0s | 91d | Project Rules \ Object Oriented Design | Rule |
Statistics
Stat | Issues | Debt | Annual Interest | Breaking Point | Category |
---|---|---|---|---|---|
Sum: | 109 | 2d 2h | 1d 2h | 20 438d | - |
Average: | 5.19 | 51min | 28min | 973d | - |
Minimum: | 1 | 0min 30s | 0min 0s | 00:00:00 | - |
Maximum: | 32 | 6h 52min | 2h 58min | 5 370d | - |
Standard deviation: | 7.41 | 1h 30min | 46min | 1 497d | - |
Variance: | 54.92 | 1 021d | 269d | overflow | - |
Code Query: New Debt and Issues per Rule |
No rule matched
Code Query: Debt and Issues per Code Element |
86 members matched
86 types and members | Issues | Debt | Annual Interest | Breaking Point | Full Name |
---|---|---|---|---|---|
SqlClient | 6 issues | 5h 58min | 1h 6min | 1 971d | SqlWrangler.SqlClient |
FrmLogin | 3 issues | 3h 14min | 42min | 1 672d | SqlWrangler.FrmLogin |
FrmMain | 3 issues | 1h 14min | 46min | 586d | SqlWrangler.FrmMain |
DataRowComparerViewer | 2 issues | 1h 3min | 20min | 1 149d | SqlWrangler.DataRowComparerViewer |
ToggleMenuItems() | 2 issues | 1h 2min | 21min | 1 059d | SqlWrangler.DataRowComparerViewer .ToggleMenuItems() |
FrmExportSql | 2 issues | 56min | 40min | 511d | SqlWrangler.FrmExportSql |
Wizard | 2 issues | 39min | 20min | 711d | SqlWrangler.Wizard |
GenerateInsertSql(DataRow) | 3 issues | 30min | 35min | 308d | SqliteTools.Table.GenerateInsertSql (DataRow) |
Program | 1 issue | 20min | 20min | 365d | SqlWrangler.Program |
clearAllCheckFieldsToolStripMenuItem_Cli ck(Object,EventArgs) | 2 issues | 6min | 4min 0s | 547d | SqlWrangler.DataRowComparerViewer .clearAllCheckFieldsToolStripMenuItem_Cl ick(Object,EventArgs) |
CreateNhSessionFactory(String) | 2 issues | 5min | 12min | 166d | SqlWrangler.FrmLogin .CreateNhSessionFactory(String) |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.DataRowComparerViewer .components |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.FrmExportSql.components |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.FrmLogin.components |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.FrmMain.components |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.FrmNameInput.components |
components | 1 issue | 5min | 2min 0s | 912d | SqlWrangler.SqlClient.components |
Snippets | 2 issues | 4min 0s | 8min | 182d | SqlWrangler.FrmMain.Snippets |
FieldDefinition | 2 issues | 3min 30s | 2min 0s | 638d | SqlWrangler.FieldDefinition |
Types | 2 issues | 3min 0s | 26min | 42d | SqliteTools.SqliteTypes.Types |
dataGridView1_CellFormatting(Object ,DataGridViewCellFormattingEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.DataRowComparerViewer .dataGridView1_CellFormatting(Object ,DataGridViewCellFormattingEventArgs) |
dataGridView1_RowHeaderMouseClick(Object ,DataGridViewCellMouseEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.DataRowComparerViewer .dataGridView1_RowHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) |
setKeyToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.DataRowComparerViewer .setKeyToolStripMenuItem_Click(Object ,EventArgs) |
dataGridView1_ColumnHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.DataRowComparerViewer .dataGridView1_ColumnHeaderMouseClick (Object,DataGridViewCellMouseEventArgs) |
setCheckFieldsToolStripMenuItem_Click (Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.DataRowComparerViewer .setCheckFieldsToolStripMenuItem_Click (Object,EventArgs) |
btnCancel_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmExportSql.btnCancel_Click (Object,EventArgs) |
btnOk_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmExportSql.btnOk_Click (Object,EventArgs) |
button1_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin.button1_Click (Object,EventArgs) |
button2_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin.button2_Click (Object,EventArgs) |
frmLogin_Load(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin.frmLogin_Load (Object,EventArgs) |
comboBox1_SelectedIndexChanged(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin .comboBox1_SelectedIndexChanged(Object ,EventArgs) |
txtPassword_KeyDown(Object,KeyEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin.txtPassword_KeyDown (Object,KeyEventArgs) |
button3_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmLogin.button3_Click (Object,EventArgs) |
newToolStripMenuItem_Click_1(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmMain .newToolStripMenuItem_Click_1(Object ,EventArgs) |
frmMain_FormClosed(Object ,FormClosedEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmMain.frmMain_FormClosed (Object,FormClosedEventArgs) |
frmMain_DragDrop(Object,DragEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmMain.frmMain_DragDrop (Object,DragEventArgs) |
helpToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmMain .helpToolStripMenuItem_Click(Object ,EventArgs) |
aboutToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmMain .aboutToolStripMenuItem_Click(Object ,EventArgs) |
button1_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmNameInput.button1_Click (Object,EventArgs) |
button2_Click(Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmNameInput.button2_Click (Object,EventArgs) |
txtName_KeyPress(Object ,KeyPressEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.FrmNameInput .txtName_KeyPress(Object ,KeyPressEventArgs) |
BuildSnippetMenu() | 1 issue | 3min 0s | 16min | 68d | SqlWrangler.SqlClient.BuildSnippetMenu() |
executeToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .executeToolStripMenuItem_Click(Object ,EventArgs) |
toCSVToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .toCSVToolStripMenuItem_Click(Object ,EventArgs) |
textBox1_KeyUp_1(Object,KeyEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient.textBox1_KeyUp_1 (Object,KeyEventArgs) |
toXMLToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .toXMLToolStripMenuItem_Click(Object ,EventArgs) |
cancelToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .cancelToolStripMenuItem_Click(Object ,EventArgs) |
toDaveSqlToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .toDaveSqlToolStripMenuItem_Click(Object ,EventArgs) |
dataGridView1_DataError(Object ,DataGridViewDataErrorEventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .dataGridView1_DataError(Object ,DataGridViewDataErrorEventArgs) |
toJSONToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .toJSONToolStripMenuItem_Click(Object ,EventArgs) |
colorToolStripMenuItem_Click(Object ,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .colorToolStripMenuItem_Click(Object ,EventArgs) |
compareRowsToolStripMenuItem_Click (Object,EventArgs) | 1 issue | 3min 0s | 2min 0s | 547d | SqlWrangler.SqlClient .compareRowsToolStripMenuItem_Click (Object,EventArgs) |
WriteCsWizard(DataTable,StreamWriter ,String,String) | 1 issue | 2min 48s | 16min | 63d | SqlWrangler.Wizard.WriteCsWizard (DataTable,StreamWriter,String,String) |
WriteModelClass(DataTable,StreamWriter ,IEnumerable<FieldDefinition> ,MapperAttributeType) | 1 issue | 2min 42s | 16min | 61d | SqlWrangler.Wizard.WriteModelClass (DataTable,StreamWriter,IEnumerable <FieldDefinition>,MapperAttributeType) |
GetFields(DataTableReader) | 1 issue | 2min 42s | 13min | 72d | SqlWrangler.Wizard.GetFields (DataTableReader) |
WriteMaterializer(DataTable,StreamWriter ,IEnumerable<FieldDefinition>) | 1 issue | 2min 36s | 13min | 70d | SqlWrangler.Wizard.WriteMaterializer (DataTable,StreamWriter,IEnumerable <FieldDefinition>) |
Compare(DataRow,DataTable,String) | 1 issue | 2min 30s | 11min | 81d | SqlWrangler.DataRowComparerViewer .Compare(DataRow,DataTable,String) |
GetFieldName(String) | 1 issue | 2min 30s | 2min 0s | 456d | SqlWrangler.Wizard.GetFieldName(String) |
SaveExternalFile(Boolean) | 1 issue | 2min 24s | 16min | 54d | SqlWrangler.SqlClient.SaveExternalFile (Boolean) |
WriteMappings(DataTable,StreamWriter ,IEnumerable<FieldDefinition>) | 1 issue | 2min 24s | 13min | 65d | SqlWrangler.Wizard.WriteMappings (DataTable,StreamWriter,IEnumerable <FieldDefinition>) |
WizardToolStripMenuItem1_Click(Object ,EventArgs) | 1 issue | 2min 12s | 16min | 50d | SqlWrangler.SqlClient .WizardToolStripMenuItem1_Click(Object ,EventArgs) |
GetSnippets() | 1 issue | 2min 0s | 10min | 71d | SqlWrangler.FrmMain.GetSnippets() |
IsString(Type) | 1 issue | 1min 0s | 2min 0s | 182d | SqliteTools.Table.IsString(Type) |
IsDateTime(Type) | 1 issue | 1min 0s | 2min 0s | 182d | SqliteTools.Table.IsDateTime(Type) |
ExportSql(FileInfo,DataTable,String ,String,Boolean,Boolean) | 1 issue | 1min 0s | 2min 0s | 182d | SqlWrangler.FrmExportSql.ExportSql (FileInfo,DataTable,String,String ,Boolean,Boolean) |
GetExcelConnectionString(String) | 1 issue | 1min 0s | 2min 0s | 182d | SqlWrangler.FrmLogin .GetExcelConnectionString(String) |
get_TableName() | 2 issues | 1min 0s | 2min 0s | 182d | SqlWrangler.FieldDefinition .get_TableName() |
get_TableSchema() | 2 issues | 1min 0s | 2min 0s | 182d | SqlWrangler.FieldDefinition .get_TableSchema() |
get_ClassName() | 2 issues | 1min 0s | 2min 0s | 182d | SqlWrangler.FieldDefinition .get_ClassName() |
WriteLinq2DbField(StreamWriter ,FieldDefinition,String) | 1 issue | 1min 0s | 2min 0s | 182d | SqlWrangler.Wizard.WriteLinq2DbField (StreamWriter,FieldDefinition,String) |
WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) | 1 issue | 1min 0s | 2min 0s | 182d | SqlWrangler.Wizard .WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) |
set_TableName(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_TableName(String) |
set_TableSchema(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_TableSchema(String) |
set_ClassName(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_ClassName(String) |
get_Name() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.get_Name() |
set_Name(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.set_Name (String) |
get_DbFieldName() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .get_DbFieldName() |
set_DbFieldName(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_DbFieldName(String) |
get_Length() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.get_Length() |
set_Length(Int32) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.set_Length (Int32) |
get_AllowsNull() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .get_AllowsNull() |
set_AllowsNull(Boolean) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_AllowsNull(Boolean) |
get_Type() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.get_Type() |
set_Type(String) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition.set_Type (String) |
get_IsShortBool() | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .get_IsShortBool() |
set_IsShortBool(Boolean) | 1 issue | 0min 30s | 0min 0s | 00:00:00 | SqlWrangler.FieldDefinition .set_IsShortBool(Boolean) |
Statistics
Stat | Issues | Debt | Annual Interest | Breaking Point |
---|---|---|---|---|
Sum: | 109 | 2d 2h | 1d 2h | 35 120d |
Average: | 1.27 | 12min | 6min | 408d |
Minimum: | 1 | 0min 30s | 0min 0s | 00:00:00 |
Maximum: | 6 | 5h 58min | 1h 6min | 1 971d |
Standard deviation: | 0.71 | 44min | 11min | 369d |
Variance: | 0.5 | 250d | 17d 2h | overflow |
Code Query: New Debt and Issues per Code Element |
No code element matched
Object Oriented Design
Validated Rule: Avoid interfaces too big |
• How to Fix Issues of this Rule: Typically to fix such issue, the interface must be refactored in a grape of smaller single-responsibility interfaces. A classic example is a ISession large interface, responsible for holding states, run commands and offer various accesses and facilities. The classic problem for a large public interface is that it has many clients that consume it. As a consequence splitting it in smaller interfaces has an important impact and it is not always feasible. The estimated Debt, which means the effort to fix such issue, varies linearly from 20 minutes for an interface with 10 methods, up to 7 hours for an interface with 100 or more methods. The Debt is divided by two if the interface is not publicly visible, because in such situation only the current project is impacted by the refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1200:AvoidInterfacesTooBig", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Base class should not use derivatives |
• How to Fix Issues of this Rule: Understand the need for using derivatives, then imagine a new design, and then refactor. Typically an algorithm in the base class needs to access something from derived classes. You can try to encapsulate this access behind an abstract or a virtual method. If you see in the base class some conditions on typeof(DerivedClass) not only urgent refactoring is needed. Such condition can easily be replaced through an abstract or a virtual method. Sometime you'll see a base class that creates instance of some derived classes. In such situation, certainly using the factory method pattern http://en.wikipedia.org/wiki/Factory_method_pattern or the abstract factory pattern http://en.wikipedia.org/wiki/Abstract_factory_pattern will improve the design. The estimated Debt, which means the effort to fix such issue, is equal to 3 minutes per derived class used by the base class + 3 minutes per member of a derived class used by the base class.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1201:BaseClassShouldNotUseDerivatives", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Class shouldn't be too deep in inheritance tree |
• How to Fix Issues of this Rule: In Object-Oriented Programming, a well-known motto is Favor Composition over Inheritance. This is because inheritance comes with pitfalls. In general, the implementation of a derived class is very bound up with the base class implementation. Also a base class exposes implementation details to its derived classes, that's why it's often said that inheritance breaks encapsulation. On the other hands, Composition favors binding with interfaces over binding with implementations. Hence, not only the encapsulation is preserved, but the design is clearer, because interfaces make it explicit and less coupled. Hence, to break a long inheritance chain, Composition is often a powerful way to enhance the design of the refactored underlying logic. You can also read: http://en.wikipedia.org/wiki/Composition_over_inheritance and http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance The estimated Debt, which means the effort to fix such issue, depends linearly upon the depth of inheritance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1202:ClassShouldntBeTooDeepInInheritanceTree", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Rule Violated: Class with no descendant should be sealed if possible |
• How to Fix Issues of this Rule: For each matched class, take the time to assess if it is really meant to be subclassed. Certainly most matched class will end up being declared as sealed.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1203:ClassWithNoDescendantShouldBeSealedIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
1 type | # lines of code (LOC) | Debt | Severity | Full Name |
---|---|---|---|---|
FieldDefinition | 18 | 0min 30s | Medium | SqlWrangler.FieldDefinition |
Validated Rule: Overrides of Method() should call base.Method() |
• How to Fix Issues of this Rule: You should investigate if inheritance is the right choice to bind the base class implementation with the derived classes implementations. Does presenting the method with polymorphic behavior through an interface, would be a better design choice? In such situation, often using the design pattern template method http://en.wikipedia.org/wiki/Template_method_pattern might help improving the design.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1204:OverridesOfMethodShouldCallBaseMethod", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Do not hide base class methods |
• How to Fix Issues of this Rule: To fix a violation of this rule, remove or rename the method, or change the parameter signature so that the method does not hide the base method. However method hiding is for those times when you need to have two things to have the same name but different behavior. This is a very rare situations, described here: http://blogs.msdn.com/b/ericlippert/archive/2008/05/21/method-hiding-apologia.aspx
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1205:DoNotHideBaseClassMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: A stateless class or structure might be turned into a static type |
• How to Fix Issues of this Rule: Declare all methods as static and transform the class or structure into a static class. By default issues of this rule have a Low severity because they reflect more an advice than a problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1206:AStatelessClassOrStructureMightBeTurnedIntoAStaticType", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Non-static classes should be instantiated or turned to static |
• How to Fix Issues of this Rule: First it is important to investigate why the class is never instantiated. If the reason is the class hosts only static methods then the class can be safely declared as static. Others reasons like, the class is meant to be instantiated via reflection, or is meant to be instantiated only by client code should lead to adapt this rule code to avoid these matches.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1207:NonStaticClassesShouldBeInstantiatedOrTurnedToStatic", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Rule Violated: Methods should be declared static if possible |
• How to Fix Issues of this Rule: Declare matched methods as static. Since such method doesn't use any instance fields and methods of its type and base-types, you should consider if it makes sense, to move such a method to a static utility class.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1208:MethodsShouldBeDeclaredStaticIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
8 methods matched
-
Formatting: bold means added, underlined means code was changed,
strike-boldmeans removed (since baseline)
8 methods | staticFieldsUsed | methodsCallingMe | Debt | Severity | Full Name |
---|---|---|---|---|---|
IsString(Type) | no field | 1 method | 1min 0s | Medium | SqliteTools.Table.IsString(Type) |
IsDateTime(Type) | no field | 1 method | 1min 0s | Medium | SqliteTools.Table.IsDateTime(Type) |
ExportSql(FileInfo,DataTable,String ,String,Boolean,Boolean) | no field | 1 method | 1min 0s | Medium | SqlWrangler.FrmExportSql.ExportSql (FileInfo,DataTable,String,String ,Boolean,Boolean) |
CreateNhSessionFactory(String) | no field | 2 methods | 1min 30s | Medium | SqlWrangler.FrmLogin .CreateNhSessionFactory(String) |
GetExcelConnectionString(String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.FrmLogin .GetExcelConnectionString(String) |
WriteLinq2DbField(StreamWriter ,FieldDefinition,String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.Wizard.WriteLinq2DbField (StreamWriter,FieldDefinition,String) |
WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) | no field | 1 method | 1min 0s | Medium | SqlWrangler.Wizard .WriteEntityFrameworkField(StreamWriter ,FieldDefinition,String) |
GetFieldName(String) | no field | 4 methods | 2min 30s | Medium | SqlWrangler.Wizard.GetFieldName(String) |
Validated Rule: Constructor should not call a virtual method |
• How to Fix Issues of this Rule: Violations reported can be solved by re-designing object initialisation or by declaring the parent class as sealed, if possible.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1209:ConstructorShouldNotCallAVirtualMethod", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Avoid the Singleton pattern |
• How to Fix Issues of this Rule: This rule matches the classic syntax of singletons, where one static field hold the single instance of the parent class. We underline that the problem is this particular syntax, that plays against testability. The problem is not the fact that a single instance of the class lives at runtime. Hence to fix matches fo this rule, creates the single instance at the startup of the program, and pass it to all classes and methods that need to access it. If multiple singletons are identified, they actually form together a program execution context. Such context can be unified in a unique singleton context. Doing so will make it easier to propagate the context across the various program units. The estimated Debt, which means the effort to fix such issue, is equal to 3 minutes per method relying on the singleton. It is not rare that hundreds of methods rely on the singleton and that it takes hours to get rid of a singleton, refactoring the way just explained above. The severity of each singleton issue is Critical because as explained, using a the singleton pattern can really prevent the whole program to be testable.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1210:AvoidTheSingletonPattern", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Don't assign static fields from instance methods |
• How to Fix Issues of this Rule: If the static field is just assigned once in the program lifetime, make sure to declare it as readonly and assign it inline, or from the static constructor. In Object-Oriented-Programming the natural artifact to hold states that can be modified is instance fields. Hence to fix violations of this rule, make sure to hold assignable states through instance fields, not through static fields.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1211:DontAssignStaticFieldsFromInstanceMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
Validated Rule: Avoid empty interfaces |
• How to Fix Issues of this Rule: Remove the interface or add members to it. If the empty interface is being used to label a set of types, replace the interface with a custom attribute. The estimated Debt, which means the effort to fix such issue, is equal to 10 minutes to discard an empty interface plus 3 minutes per type implementing an empty interface.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1212:AvoidEmptyInterfaces", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Avoid types initialization cycles |
• How to Fix Issues of this Rule: Types initialization cycles create confusion and unexpected behaviors. If several states hold by several classes must be initialized during the first access of any of those classes, a better design option is to create a dedicated class whose responsibility is to initialize and hold all these states. The estimated Debt, which means the effort to fix such issue, is equal to 20 minutes per cycle plus 10 minutes per type class constructor involved in the cycle.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1213:AvoidTypesInitializationCycles", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
API Breaking Changes
Validated Rule: API Breaking Changes: Types |
• How to Fix Issues of this Rule: Make sure that public types that used to be presented to clients, still remain public now, and in the future. If a public type must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match types removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1500:APIBreakingChangesTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: API Breaking Changes: Methods |
• How to Fix Issues of this Rule: Make sure that public methods that used to be presented to clients, still remain public now, and in the future. If a public method must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match methods removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1501:APIBreakingChangesMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: API Breaking Changes: Fields |
• How to Fix Issues of this Rule: Make sure that public fields that used to be presented to clients, still remain public now, and in the future. If a public field must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match fields removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1502:APIBreakingChangesFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
Validated Rule: API Breaking Changes: Interfaces and Abstract Classes |
• How to Fix Issues of this Rule: Make sure that the public contracts of interfaces and abstract classes that used to be presented to clients, remain stable now, and in the future. If a public contract must really be changed, you can tag abstract methods that will be removed with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consummers of the API. The severity is not set to Critical because an interface is not necessarily meant to be implemented by the consummer of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1503:APIBreakingChangesInterfacesAndAbstractClasses", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Broken serializable types |
• How to Fix Issues of this Rule: Make sure that the serialization process of serializable types remains stable now, and in the future. Else you'll have to deal with Version Tolerant Serialization that is explained here: https://msdn.microsoft.com/en-us/library/ms229752(v=vs.110).aspx Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consummers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1504:BrokenSerializableTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Avoid changing enumerations Flags status |
• How to Fix Issues of this Rule: Make sure the FlagsAttribute status of each enumeration remains stable now, and in the future.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1505:AvoidChangingEnumerationsFlagsStatus", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Code Coverage
Validated Rule: Code should be tested |
• How to Fix Issues of this Rule: Write unit tests to test and cover the methods and their parent classes matched by this rule.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1600:CodeShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: New Methods should be tested |
• How to Fix Issues of this Rule: Write unit-tests to cover the code of most methods and classes added.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1601:NewMethodsShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Methods refactored should be tested |
• How to Fix Issues of this Rule: Write unit-tests to cover the code of most methods and classes refactored.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1602:MethodsRefactoredShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Assemblies Namespaces and Types should be tested |
• How to Fix Issues of this Rule: Write unit and integration tests to cover, even partially, code elements matched by this rule. Then use issues of the rules Code should be tested, New Methods should be tested and Methods refactored should be tested to write more tests where it matters most, and eventually refactor some code to make it more testable.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1603:AssembliesNamespacesAndTypesShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No code element parent matched
Validated Rule: Types almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1604:TypesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Namespaces almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet in the namespace. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1605:NamespacesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No namespace matched
Validated Rule: Types that used to be 100% covered by tests should still be 100% covered |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered anymore. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring. You'll find code impossible to cover by unit-tests, like calls to MessageBox.Show(). An infrastructure must be defined to be able to mock such code at test-time.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1606:TypesThatUsedToBe100PercentCoveredByTestsShouldStillBe100PercentCovered", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Types tagged with FullCoveredAttribute should be 100% covered |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code of matched classes not covered yet. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1607:TypesTaggedWithFullCoveredAttributeShouldBe100PercentCovered", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Types 100% covered should be tagged with FullCoveredAttribute |
• How to Fix Issues of this Rule: Just tag types 100% covered by tests with the FullCoveredAttribute that can be found in NDepend.API.dll, or by an attribute of yours defined in your own code (in which case this rule must be adapted).
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1608:Types100PercentCoveredShouldBeTaggedWithFullCoveredAttribute", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Methods should have a low C.R.A.P score |
• How to Fix Issues of this Rule: In such situation, it is recommended to both refactor the complex method logic into several smaller and less complex methods (that might belong to some new types especially created), and also write unit-tests to full cover the refactored logic. You'll find code impossible to cover by unit-tests, like calls to MessageBox.Show(). An infrastructure must be defined to be able to mock such code at test-time.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1609:MethodsShouldHaveALowCRAPScore", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Dead Code
Validated Rule: Potentially Dead Types |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead types, because there are several ways to use a type dynamically (like through reflection). For each type matched by this query, first investigate if the type is used somehow (like through reflection). If the type is really never used, it is important to remove it to avoid maintaining useless code. If you estimate the code of the type might be used in the future, at least comment it, and provide an explanatory comment about the future intentions. If a type is used somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the type again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 15 minutes because it only takes a short while to investigate if a type can be safely discarded. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is proportional to the type #lines of code, because the bigger the type is, the more it slows down maintenance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1700:PotentiallyDeadTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Validated Rule: Potentially Dead Methods |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead methods, because there are several ways to invoke a method dynamically (like through reflection). For each method matched by this query, first investigate if the method is invoked somehow (like through reflection). If the method is really never invoked, it is important to remove it to avoid maintaining useless code. If you estimate the code of the method might be used in the future, at least comment it, and provide an explanatory comment about the future intentions. If a method is invoked somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the method again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 10 minutes because it only takes a short while to investigate if a method can be safely discarded. On top of these 10 minutes, the depth of usage of such method adds up 3 minutes per unity because dead method only called by dead code takes a bit more time to be investigated. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is proportional to the type #lines of code, because the bigger the method is, the more it slows down maintenance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1701:PotentiallyDeadMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Validated Rule: Potentially Dead Fields |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead fields, because there are several ways to assign or read a field dynamically (like through reflection). For each field matched by this query, first investigate if the field is used somehow (like through reflection). If the field is really never used, it is important to remove it to avoid maintaining a useless code element. If a field is used somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the field again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 10 minutes because it only takes a short while to investigate if a method can be safely discarded. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is set by default to 8 minutes per unused field matched.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1702:PotentiallyDeadFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
Validated Rule: Wrong usage of IsNotDeadCodeAttribute |
• How to Fix Issues of this Rule: Just remove IsNotDeadCodeAttribute tagging of types, methods and fields matched by this rule because this tag is not useful anymore.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1703:WrongUsageOfIsNotDeadCodeAttribute", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No member matched
Code Diff Summary
Code Query: New assemblies |
No assembly matched
Code Query: Assemblies removed |
No assembly matched
Code Query: Assemblies where code was changed |
No assembly matched
Code Query: New namespaces |
No namespace matched
Code Query: Namespaces removed |
No namespace matched
Code Query: Namespaces where code was changed |
No namespace matched
Code Query: New types |
No type matched
Code Query: Types removed |
No type matched
Code Query: Types where code was changed |
No type matched
Code Query: Heuristic to find types moved from one namespace or assembly to another |
No type matched
Code Query: Types directly using one or several types changed |
No type matched
Code Query: Types indirectly using one or several types changed |
No type matched
Code Query: New methods |
No method matched
Code Query: Methods removed |
No method matched
Code Query: Methods where code was changed |
No method matched
Code Query: Methods directly calling one or several methods changed |
No method matched
Code Query: Methods indirectly calling one or several methods changed |
No method matched
Code Query: New fields |
No field matched
Code Query: Fields removed |
No field matched
Code Query: Third party types that were not used and that are now used |
No type matched
Code Query: Third party types that were used and that are not used anymore |
No type matched
Code Query: Third party methods that were not used and that are now used |
No method matched
Code Query: Third party methods that were used and that are not used anymore |
No method matched
Code Query: Third party fields that were not used and that are now used |
No field matched
Code Query: Third party fields that were used and that are not used anymore |
No field matched
Trend Charts
Size
% Coverage and % Debt
Issues
Rules
Quality Gates
Debt
Assemblies Dependencies
Assembly | Depends on | Is referenced by |
---|---|---|
SqliteTools v1.0.0.0 | mscorlib v4.0.0.0 ; System.Data v4.0.0.0 ; System.Core v4.0.0.0 ; | SqlWrangler v1.0.0.0 ; |
SqlWrangler v1.0.0.0 | mscorlib v4.0.0.0 ; System.Data v4.0.0.0 ; System.Drawing v4.0.0.0 ; System v4.0.0.0 ; System.Windows.Forms v4.0.0.0 ; System.Core v4.0.0.0 ; System.Data.DataSetExtensions v4.0.0.0 ; SqliteTools v1.0.0.0 ; NHibernate v4.0.0.4000 ; System.Configuration v4.0.0.0 ; System.Xml v4.0.0.0 ; ScintillaNET v3.5.6.0 ; Newtonsoft.Json v9.0.0.0 ; Oracle.ManagedDataAccess v4.121.2.0 ; | - |
Assemblies Build Order
- SqliteTools
- SqlWrangler
Assemblies Build Order
- SqliteTools
- SqlWrangler
Analysis Log : Information and Warnings
The Warnings can reveal potential flaws concerning the health of the build process.
A particular warn can be disabled through the NDepend interactive UI, panel Error List, tick the checkbox Disabled corresponding to the warn to disable.
Message | |
---|---|
Begin full analysis with NDepend v2019.2.5 | |
Compare with analysis result obtained on 2019 July - 21 Sunday 06:51 (which is the analysis result with date closest to 30 days ago) | |
.NET Assemblies resolved from the Visual Studio solution file {D:\src\SqlWrangler\SqlWrangler\SqlWrangler.sln} D:\src\SqlWrangler\SqlWrangler\SqlWrangler\bin\Debug\SqlWrangler.exe D:\src\SqlWrangler\SqlWrangler\SqliteTools\bin\Debug\SqliteTools.dll | |
No .NET Assembly filtered out from the Visual Studio solution file {D:\src\SqlWrangler\SqlWrangler\SqlWrangler.sln}. | |
Concurrent mode | |
.NET Assemblies loaded from {C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319} System.Core.dll v4.0.0.0 System.Data.DataSetExtensions.dll v4.0.0.0 System.Xml.dll v4.0.0.0 System.Configuration.dll v4.0.0.0 System.Drawing.dll v4.0.0.0 System.dll v4.0.0.0 System.Data.dll v4.0.0.0 System.Windows.Forms.dll v4.0.0.0 mscorlib.dll v4.0.0.0 | |
21 source files parsed ; all source files found ; all source files in-sync with PDB | |
0 code rule has been extracted from code. | |
No dependency cycle detected in assemblies referencement graph. | |
Do merge code generated by compiler into application code. | |
Analyse dependencies of your application. | |
No SuppressMessageAttribute found in the analyzed code base. Since NDepend v2018.2 SuppressMessageAttribute can be used to suppress NDepend issues. Don't forget to set in your projects the compilation symbol CODE_ANALYSIS to use this attribute to suppress NDepend issues. | |
Execute queries and rules. | |
1 quality gate fails: - 'Critical Rules Violated' value 3 rules greater than fail threshold 0 rules | |
NDepend analysis done. Duration: 00:15 | |
Building the report (standard). |
Abstractness versus Instability Diagram
The Abstractness versus Instability Diagram helps to detect which assemblies are potentially painful to maintain (i.e concrete and stable) and which assemblies are potentially useless (i.e abstract and instable).
- Abstractness:
If an assembly contains many abstract types (i.e interfaces and abstract classes) and few concrete types, it is considered as abstract.
- Instability: An assembly is considered stable if its types are used by a lot of types from other assemblies. In this context stable means painful to modify.
Online documentation: