NDepend v2018.2.0 Professional Developer Edition

NDepend is the only Visual Studio extension that is able to tell the developer that over the past hour, the code just written has introduced debt that would cost for example about 30 minutes should it have to be repaid later. Knowing this, the developer can fix the code before even committing it to the source control.

With NDepend code rules are C# LINQ queries that can be created and customized in a matter of seconds. These queries contain C# formulas to compute accurate technical debt estimations.

The default rule-set offers over a hundred code rules that detect a wide range of code smells including entangled code, dead-code, API breaking changes and bad OOP usage.

As a static analyzer, NDepend will likely find hundreds or even thousands of issues affecting a real-world code base. Stopping work to attempt to fix all issues for weeks would be quite unproductive.

This is why NDepend is the only tool that offers a baseline in Visual Studio. The tool estimates the Technical Debt progress since the baseline.
Recent code smells that should be fixed before committing any code to source control are highlighted in Visual Studio. They can then be fixed even before reaching the source server.

As a consequence the Code Quality remains under control with no major upfront investment.

A Quality Gate is a code quality criterion that must be enforced before releasing and eventually, before committing to source control.
A dozen of default Quality Gates are continuously checking measures such as overall Code Coverage by tests or extra Technical Debt since baseline.

With NDepend, a Quality Gate is a C# LINQ query easy to customize and create. This unique approach offers the required level of flexibility to enforce what really matters for your organization.

We don’t sell consultancy, we sell software. Our goal is to offer a seamless tool which is easy to get started with and easy to live with. With NDepend, you’ll obtain in-depth reporting within a few minutes after first installation and NDepend results will quickly become essential to take the right decisions.

NDepend integrates smoothly both within Visual Studio (2017, 2015, 2013, 2012, 2010) and Team Services (VSTS). Other DevOps and Continuous Integration tools are also supported (TFS 2013, TeamCity, SonarQube…). All .NET profiles are supported, including .NET Core 2.0.

Interactive and detailed report production is automated from the Continuous Integration process.

Because we know developer time is invaluable, NDepend is fast, very fast

The technical debt can be re-estimated after each compilation in Visual Studio within just a few seconds, even for hundreds of rules passed on a very large code base and, as we are aware of its importance, without any noticeable IDE slow down.

Fixing issues is much easier as the developer is immediately informed with no delay of new issues just created, while the context is still fresh in her mind and while the code is not checked-in yet to the source control server.

Because a picture is worth a thousand words, NDepend proposes several unique ways to visualize your code. This includes:

Trend Charts
Dependency Graph
Dependency Matrix
Code Metrics Colored Treemaping

Code maintainability improves. This positively impacts the productivity of development teams.
Over time, developers get educated about rules to follow and their skills improve.
Architects can anticipate the impact of code changes. The right decisions are taken early.
Since quality is checked automatically and continuously with a strong focus on recent changes, both in Visual Studio and in the DevOps, the team builds better code.
Executives gain control over costs and risks thanks to light being shed on development facts and trends that matter most.



New Features:

Issue suppression with SuppressMessage attribute
Support for .NET Core 2.2 Preview
Deferred Visual Studio 2017 Extension Loading


New README.txt file with the NDepend zipped files that explains the purpose of each file.
New default keyboard shortcut Alt+A for “Search Any Code Element by Name”, applicable both in Visual Studio and VisualNDepend.
In Visual Studio, when no NDepend project is opened, several empty NDepend panels might still be visible. Each of these empty panel now have a ‘Close all NDepend panels’ button.
The PowerTool ‘Technical Debt Evolution Since Baseline’ now displays the DebtRating evolution.
PowerTools solution is now based on Visual Studio 2013 (compatible with VS2015 and VS2017) and the directory .\NDepend.PowerTools.SourceCode\obj is not shipped anymore.
NDepend.Helpers.IReadOnlyList<> and NDepend.Helpers.IReadOnlyCollection<> can now type the result of a code query.
When opening the source file declaration of a field, an abstract method or a default constructor, a message explains that such declaration is not yet available, and the parent type declaration is opened.
When browsing to add an assembly to a project that currently doesn’t have any application assembly, the default browse directory is now the project file parent directory. It used to be a .NET Framework assemblies directory.
In VisualStudio, when selecting a project on the NDepend start page Most Recently Used list, the project is now shown as first one after selection.
Improved documentation for the rule ‘Avoid duplicating a type definition across assemblies’.
When editing a code query with less than 100 matches, the result tree was always seen as all expanded. Now the tree result remembers which node is collapsed or expanded during the query edition and the ‘expand-all behavior’ occurs only when all nodes are collapsed.

Less False Positives:

The rule ‘Avoid methods with too many parameters’ doesn’t match anymore these situations, consequences of lower-level problems like: a method that overrides a third-party method with many parameters, a constructor that calls a base constructor with many parameters, a P/invoke method tagged with DllImport
The rule ‘Avoid methods with too many overloads’ doesn’t match anymore overloads that results from lower-level overloads, like when overriding a third-party method with many overloads or a constructor that call a base constructor.
mshtml COM/Import namespace and all its types and their members are now considered as not-my-code. Issues won’t be reported on this code.
Microsoft.Office.* COM/Import namespace(s) and all their types and their members are now considered as not-my-code. Issues won’t be reported on this code. Especially issues related to the rule “Interface name should begin with a ‘I'” broken by many interfaces in these namespaces.
Types tagged with System.Runtime.InteropServices.GuidAttribute, that represents a COM type defined elsewhere are now considered as not-my-code. Issues won’t be reported on this code.
The notmycode query “Discard generated Types from JustMyCode” now matches types generated by the compiler that are nested whose name starts with “<>c”.
The rule ‘Avoid the Singleton pattern’ now matches only singleton types with mutable instance fields because singleton pitfalls result from anarchical access and modification of instance data.
The rule ‘Potentially Dead Methods’ now also ignores methods tagged with OnDeserializingAttribute and OnSerializedAttribute.
The rule ‘Avoid having different types with same name’ now doesn’t match anymore web types suffixed with “Service”, “Model”, “Controller”, “Page” or “Pages”.
The notmycode query ‘Discard generated Types from JustMyCode’ now also matches Entity Framework ModelSnapshot generated class. This way this generated class won’t violate quite a few rules anymore.
The VB.NET generated namespaces My and My.Resources where reported by the rules ‘Avoid namespaces dependency cycles’ and ‘Avoid namespaces mutually dependent’.

API Improvements:

New interface NDepend.Issue.ISuppressMessage
New flag enumeration NDepend.Issue.SuppessMessageScope
New class NDepend.Issue.RuleIdOrCategoryKind
New property getter IAnalysisResult.SuppressedMessages:IReadOnlyList<ISuppressMessage>
New property IRule.Id:string and IRule.ExplicitId:string
New extension method NDepend.Issue.ExtensionMethodsIssue.ComputeSuppressedMessagesOnBaseline(this ICompareContext, IDictionary<RuleIdOrCategory, IReadOnlyList<ISuppressMessage>>s)
New extension methods NDepend.Query.ExtensionMethodsQuery.GetIssues(this IRule, IQueryExecutionSuccessResult, IDictionary<RuleIdOrCategory, IReadOnlyList<ISuppressMessage>>)
New extension methods NDepend.Query.ExtensionMethodsQuery.TryGetQueryIdAndExplicitId(this string queryString, out string id, out string explicitId)
New property NDepend.Issue.IRuleIssues.SuppressedIssues
New property NDepend.Issue.IIssuesSet.AllSuppressedIssues
New method NDepend.Issue.IIssuesSet.SuppressedIssues(IRule)
New property NDepend.Issue.IIssue.IsSuppressed
New properties on NDepend.TechnicalDebt.Debt and AnnualInterest structures: IsOverflow/IsPositiveOverflow/IsNegativeOverflow

Bugs fixed:

When infering the assemblies to analyze from a .NET Core VS solutions or a VS project, if an assembly name is different than its VS project file name, the assembly was not resolved.
When infering the assemblies to analyze from a .NET Core VS solutions or a VS project, if the output path is not the standard one, the assembly was not resolved.
With Visual Studio 2017 15.6, 15.7 and 15.8 when starting VS by double-clicking a solution file, if a NDepend project was attached to this solution it was not loaded at VS startup time.
In Visual Studio when loading an analysis result, now NDepend panels get a frozen appareance. This avoids some uncertain behavior and makes it clear the panel is not usable for a little while (typically 1 or 2 seconds).
Because of an anti-virus, BadFormatException is thrown when loading some NDepend assemblies. When starting VisualStudio with the NDepend extension in this situation, instead of crashing the extension, a MessageBox is now shown that explains the problem.
When starting NDepend UI or NDepend VS extension, an UriFormatException was thrown when NDepend was installed in the special Parralels directory “\\.psf\Home” because the class System.Uri is not compatible with this directory format.
When a third-party base class is named Attribute but is not an attribute class, its derived types had IType.IsAttributeClass set to true.
In query result, the text show/hide in the parent row of code elements targeted by the query wasn’t well drawn when scrolling vertically.
Sometime the analysis with report failed because of some problem to delete some children files or directories in the output directory.
The sequence of fields “culpritFields” for matches in the rule “Avoid transforming an immutable type into a mutable one” was matching immutable field instead of mutable ones. Now it matches mutable fields.
In the Visual Studio extension, controls related to project and analysis on the Start Page were not disabled at analysis time. Problems could happen when clicking these controls during an analysis.
In the UI, after an analysis a message box could claim that the baseline cannot be loaded because the baseline choosen was the analysis result, just overriden by the analysis.
When hovering a row in the query result, if it was a parent row with expand/collapse symbol, this symbol was blinking.
On fast mouse move in the query result, some parent row expand/collapse symbol could remain in hovered state while not hovered anymore.
When start run an analysis, then ask to delete a query or a group in Queries and Rules Explorer, and then let the delete confirmation dialog open until the new analysis result result loaded, when confirming the deletion an exception was raised.
When starting Visual Studio with the NDepend extension installed, and closing VS as soon as possible, a NullReferenceException or a InvalidCastException could be thrown.
In an application empty with no code found in any method, a misleading error message was shown when attempting to switch to CyclomaticComplexity metric in the metric view.
In Query Result, Expand/Collapse vertical scrolling animation could be quite slow, especially on high DPI.
From Project Properties > Code to Analyze > Browse Application Assemblies in Folder, when opening this dialog more than once, matched assemblies might not be populated automatically on dialog opening.
When computing a large matrix or a large graph and closing Visual Studio, a NullReferenceException could be thrown.
It was possible to get an ArgumentOutOfRangeException thrown when dealing with debt and annual-interest value higher than 29 247 years. The exception has been fixed but 29 247 years still represent an unsurpassable limit.
In Project Properties > Debt Settings with a screen DPI between 110% and 140% some controls were truncated.
In Dashboard with a screen DPI between 110% and 140% the button menu “Explore Debt” was truncated.
In Dashboard with a screen DPI between 110% and 140% the progress bar could be hovered by the XXX/YYY progression text.
The text on the Dashboard Guide Tooltip was Y truncated with a screen DPI of 125%.
In the Start Page with a screen DPI between 110% and 140%, the arrow pointing to the ‘Install VS Extension’ button was hovering it .
In the Start Page with a screen DPI between 110% and 140%, the arrow pointing to the ‘Analyze VS solutions and VS projects’ link was hovering it.
In VS2017 only, in the various DataGridViews (Rules and Queries, Analysis results logs, Queries errors) when clicking a cell the corresponding column header was shown as selected in blue.
In Visual Studio, when loading an analysis result, clicking the ‘add new tab’ button in the Search or QueryEdit panel lead to NullReferenceException.
Trying to get documentation from text in some special code queries could lead to an InvalidOperationException thrown.
Rarely a NullReferenceException could be thrown when changing a group activation in Queries and Rules Explorer.
Rarely a COMException could be thrown when opening or closing a NDepend windows in Visual Studio.
Rarely a NullReferenceException could be thrown when right clicking a code element in the code editor with VS2017.
Rarely when hovering a trend chart in the Dashboard, an ArithmeticException could be thrown.
Rarely when hovering a trend chart in the Dashboard, an ArgumentException could be thrown.
Rarely a NullReferenceException could be thrown when closing a NDepend Project Properties dialog (like Define Baseline) while an analysis is loading.
Rarely a NullReferenceException could be thrown when clicking the Dashboard button ‘Run Analysis and Build Report’ while an analysis is loading.
Rarely a NullReferenceException could be thrown when hovering the dependency matrix with the mouse.
Rarely a NullReferenceException could be thrown when right clicking a path in the Project Properties > Paths Referenced panel.
Rarely an IOException could be thrown when starting an NDepend executable.
Rarely a NullReferenceException could be thrown when exporting the result of a code query to a document.


NDepend, could, Visual, Studio, thrown, analysis, result, query, Rarely, extension, project, NullReferenceException, Issue, method, source, control, clicking, ‘Avoid, directory, types, NDepend, could, Visual, Studio, thrown, result, analysis, query, Rarely, extension, project, NullReferenceException, Issue, method, source, types, ‘Avoid, control, directory, clicking