2. Agenda
What are Coding Standards?
Benefits of Automation
Standards Automation Tools
Use of StyleCop and FxCop
3. What are Coding Standards?
A set of rules or guidelines used when writing the
source code of a computer program.
Generally dictates:
Safety mandates to avoid introducing errors.
Style mandates to increase maintainability.
Security mandates to avoid vulnerabilities.
Efficiency mandates to help increase performance.
Standards may be enforced through code reviews or
may simply be “suggestions”.
5. But, Isn’t Programming Art?
This always has been an interesting point of
contention.
On one extreme development can be thought of as a
work of art and any source that reaches a logically
correct result is acceptable and everything else is just
“style.”
The other extreme believes that programming is purely
a mechanical process and there is only a limited
number of correct answers.
Which is correct?
6. Reality Lies In Between
It may be more accurate to say developers are more
like artisans (crafters) than artists, though containing
elements of both.
An artist has a wide range of forms they can adhere to
and much is dependent on the interpretation of the
viewer.
In contrast, artisans tend to construct or design for a
purpose, and while there are some elements of style in
construction, if it fails to achieve its purpose
effectively, it is a failure.
7. The “Art” of Sorting
Take sorting, for example.
Both Bubble sort and Quick sort are valid sorts on a set
of data.
Bubble sort has a complexity of O(n2
) and Quick sort is
O(n log n).
Assuming sorting 1 million elements and each check
takes 1 µs, roughly this would be:
Bubble Sort: 11 days
Quick Sort: 19 seconds
Both sort data, but one is clearly more useful.
8. Standardizing an “Art”
While there are many ways to solve a given problem,
there should be guidelines for effective construction.
These guidelines are similar to building codes used in
building construction to ensure safety and quality.
These guidelines form the basis for coding standards
and are best compiled from group consensus and
industry best practices.
9. Enforcing Standards
Standards should be enforced to promote safety,
efficiency, and maintainability.
Standards can be enforced through Code Reviews, but
these tend to be applied with varying levels of
adherence.
It’s much better to attempt to automate as much of
your standards as possible so that the code is judged
more objectively.
10. Benefits of Automation
Standards are applied objectively since only analyzes
the source or assembly.
Just plain faster than trying to catch standards
violations manually.
Code authors don’t feel personally attacked.
Frees more reviewer time since won’t have to waste as
much time in code reviews.
Frees more time for developers since code spends less
time and iterations in review.
11. Standards Automation Tools
There are two primary tools from Microsoft:
StyleCop – Analyzes source files to determine if source
code is correctly formatted.
FxCop (Static Code Analysis)– Analyzes assemblies to
determine if code is constructed safely and optimally.
These tools overlap in some of their base rules but
both have their strengths.
Other third party and Microsoft tools exist, but
beyond this presentation’s scope.
12. FxCop, VS Code Analysis
Static analysis
Analyzes compiled assembly (dll, exe)
Finds violations of programming and design rules
http://msdn.microsoft.com/en-us/library/3z0aeatx.aspx
15. Pex
Dynamic analysis
Analyzes code branches at runtime
Generates inputs to achieve max coverage
Generates test cases
http://research.microsoft.com/en-us/projects/pex/
17. FsCheck
Randomly generates test inputs
Generates test cases based on program specifications
Port of Haskell's QuickCheck
http://fscheck.codeplex.com/
19. StyleCop
Analyzes source files and not compiled code.
Great for checking elements such as:
Spacing
Comments
File composition
Naming
Cannot easily check type hierarchies or program
structure.
Available at http://stylecop.codeplex.com/
20. Configuring StyleCop
If you have StyleCop installed, you can have
Settings.StyleCop files for each project if you want to
vary styles per project.
Will take the first Settings.StyleCop file it finds from
working directory on up the path.
Default will be the Settings.StyleCop file in
c:program filesMicrosoft StyleCop…
Various configurations can make harder to enforce
uniform rules, though, so use with caution.
21. Configuring StyleCop
You can configure which base rules you want active by
using StyleCopSettingsEditor.exe.
Let’s take a minute to look at the rules…
22. Configuring StyleCop
You can also get to StyleCop settings in Visual Studio
directly by right-clicking a project.
This creates local copy of rules, use cautiously.
23. Running StyleCop
You can run StyleCop from VS or MSBuild.
Has no native command-line interface, but one exists
at sourceforge called StyleCopCmd.
24. StyleCop Results
Shows in Error List window, can turn on “Warnings as
Errors” in VS if you want to break builds on violations.
26. On Suppressing Rules
It’s better to keep a rule even if it only applies 95% of
the time and force developers to suppress the rule for
the one-off exceptions.
This puts a SuppressMessage attribute in code
which must be justified and prevents viewing the
exception to the rule as a precedent for ignoring the
rule.
If code reviewer disagrees, can be debated.
Turning off rules should be avoided unless the rule is
invalid most or all of the time.
27. Custom StyleCop Rules
StyleCop rules are fairly easy to write.
Create class library that references the StyleCop
assemblies:
Located in c:program filesMicrosoft StyleCop…
Microsoft.StyleCop.dll
Microsoft.StyleCop.Csharp.dll
Add a CS (C# source file) for new analyzer.
Add an XML file for rule configuration.
28. Custom StyleCop Rules
In the CS file, create an analyzer that inherits from
SourceAnalyzer and has class attribute also named
SourceAnalyzer for C# files.s
30. Custom StyleCop Rules
When you see your violation, call the method
AddViolation and give it a rule name and args:
31. Custom Style Cop Rules
Then, in the XML file, define the rule and message.
Make sure XML file has same name as class name and
is Embedded Resource.
32. Custom StyleCop Rules
Then, build the custom assembly.
Place custom assembly in:
C:Program FilesMicrosoft StyleCop …
You should now see custom rules in the
StyleCopSettingsEditor.
If you don’t see custom rules, check that the XML file:
Is an embedded resource
Has same filename as the class name (minus
extensions)
Let’s look at the code more closely…
33. StyleCop for ReSharper
JetBrains’s ReSharper is an Visual Studio IDE plug-in
that adds a lot of refactoring and aids.
StyleCop for ReSharper is a ReSharper plug-in that
allows for dynamic checking of StyleCop rules as you
type.
Will highlight rule violations with squiggle just like
other ReSharper hints.
http://stylecopforresharper.codeplex.com/
Let’s look at how this appears in the IDE.
34. FxCop (aka VS Code Analysis)
Great for checking elements such as:
Non-spacing style issues (naming, etc).
Code safety and performance issues
Type hierarchy issues
Analysis of database objects
Cannot check source style such as spacing.
Already baked into Visual Studio 2008/10.
Can also be used as a stand-alone.
36. Running FxCop From Visual Studio
Right click on project or solution and choose Run
Code Analysis:
Let’s look at an example analysis.
37. Suppressing FxCop Errors
Just like in StyleCop, you can suppress one-off
exceptions to the rules.
Can insert manually or automatically from the error
list in Visual Studio.
38. Custom FxCop Rules
Create a Class Library in Visual Studio.
Add references to FxCop assemblies:
From C:Program FilesMicrosoft FxCop…
FxCopCommon.dll
FxCopSdk.dll
Microsoft.Cci.dll
Microsoft.VisualStudio.CodeAnalysis
Add a CS file for the new rule.
Add an XML file for the rule definition.
41. Custom FxCop Rule
XML file is Embedded and contains rule detail:
Remember filename must be same as passed to base
constructor of BaseIntrospectionRule.
42. Custom FxCop Rules
To use custom rule, use CTRL+R or Project Add
Rules in FxCop.
You can verify by clicking on rules tab:
43. Summary
Automating code standards can be very useful for
getting rid of a lot of the “noise” in code reviews and
allowing reviewers to concentrate on logic bugs.
Automated code standards take the personal side out
of enforcing style, safety, and performance.
Custom rules can be used in FxCop and StyleCop to
allow for your own rules.