Parallel Helper is a static code analyzer for C# projects that supports the development of parallel and asynchronous code. The analyzer is built with the help of the .NET Compiler Platform (Roslyn).
Visual Studio 2017 users may grab a compatible version from the GitHub releases page.
After the successful installation of Parallel Helper, it automatically scans the currently open files.
For issue reports for all available documents within Visual Studio, it is necessary to enable the full solution analysis:
There are currently three classes of issues:
Best Practices are opinionated practices to make the code more robust.
Smells, on the other hand, denote code constellations that break commonly accepted contracts that may lead to unexpected behavior when used by 3rd parties. Moreover, missuses of specific APIs or if some APIs are more suitable for the present case are also considered a code smell.
Last but not least, the class Bugs represents the most severe of the reported issues. Parallel Helper reports this class when there is a high chance of a concurrency related problem, such as race conditions.
Most of the reported issues have a default severity of warning or suggestion. Nevertheless, some issues are silent because either they are too strict or their underlying pattern is not considered production-ready yet.
The following issues are Hidden by default:
To enable reporting of one or more of the above issues, add an entry like the following one to the .editorconfig file (does not work for Visual Studio 2017).
The same method allows changing the severity of any of the reported issues. The possible severities are none, silent, suggestion, warning, and error. See the Microsoft documentation about severity levels for more details. You may also take a look at the example .editorconfig that sets all analyzers to warning and makes them the least conservative.
Alternatively, an entry to the CodeAnalysis.ruleset file has the same effect.
See the Microsoft documentation about Rule sets for more details.
The documentation directory contains a list of all issues that Parallel Helper currently reports. Each issue has a summary of the problem that may arise — additionally, a suggestion on how to resolve said issue.
To quickly test and evaluate the functionality of Parallel Helper, get the IntegrationTests sample project available in the test directory. This project consists of various concurrency related issues.
Why do I get more issues after fixing one?
Issues are not mutually exclusive. After fixing one issue, the code may have a structure that is better recognizable by another analyzer. It is a design choice of Parallel Helper to keep the analysis implementations as simple as possible. Therefore, the analyzers are not only exceptionally fast but also less prone to false positives.
Why do I have multiple issues at the same location?
Parallel Helper consists of various analyzers, each is made to recognize a specific code constellation. Therefore, if Parallel Helper reports multiple issues at the same location, this means there is a high chance for a fundamental issue.
Because of Parallel Helper's conservative design, there is a chance of false positives, although the goal is to keep the false positive number small. Therefore, there is also a chance of false negatives. There is no guarantee that there are no concurrency problems if Parallel Helper does not report any issues.
Parallel Helper focuses on issues on a higher semantic level; thus, it generally does not report issues such as data races, although they might be part of another problem. If a thorough data race analysis is desirable, consider the use of the Visual Studio extension Parallel Checker.
There is no academic publication yet. However, Parallel Helper is based on the findings and core idea of this thesis.