Codingstandards matiar


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Codingstandards matiar

  1. 1. Matiar RahmanProject ManagerBinary Quest Limited
  2. 2. AgendaWhat are Coding Standards?Benefits of AutomationStandards Automation ToolsUse of StyleCop and FxCop
  3. 3. What are Coding Standards?A set of rules or guidelines used when writing thesource 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 ormay simply be “suggestions”.
  4. 4. Standards: Like or Dislike?
  5. 5. But, Isn’t Programming Art?This always has been an interesting point ofcontention.On one extreme development can be thought of as awork of art and any source that reaches a logicallycorrect result is acceptable and everything else is just“style.”The other extreme believes that programming is purelya mechanical process and there is only a limitednumber of correct answers.Which is correct?
  6. 6. Reality Lies In BetweenIt may be more accurate to say developers are morelike artisans (crafters) than artists, though containingelements of both.An artist has a wide range of forms they can adhere toand much is dependent on the interpretation of theviewer.In contrast, artisans tend to construct or design for apurpose, and while there are some elements of style inconstruction, if it fails to achieve its purposeeffectively, it is a failure.
  7. 7. The “Art” of SortingTake sorting, for example.Both Bubble sort and Quick sort are valid sorts on a setof data.Bubble sort has a complexity of O(n2) and Quick sort isO(n log n).Assuming sorting 1 million elements and each checktakes 1 µs, roughly this would be: Bubble Sort: 11 days Quick Sort: 19 secondsBoth sort data, but one is clearly more useful.
  8. 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 inbuilding construction to ensure safety and quality.These guidelines form the basis for coding standardsand are best compiled from group consensus andindustry best practices.
  9. 9. Enforcing StandardsStandards should be enforced to promote safety,efficiency, and maintainability.Standards can be enforced through Code Reviews, butthese tend to be applied with varying levels ofadherence.It’s much better to attempt to automate as much ofyour standards as possible so that the code is judgedmore objectively.
  10. 10. Benefits of AutomationStandards are applied objectively since only analyzesthe source or assembly.Just plain faster than trying to catch standardsviolations manually.Code authors don’t feel personally attacked.Frees more reviewer time since won’t have to waste asmuch time in code reviews.Frees more time for developers since code spends lesstime and iterations in review.
  11. 11. Standards Automation ToolsThere are two primary tools from Microsoft:StyleCop – Analyzes source files to determine if sourcecode is correctly formatted.FxCop (Static Code Analysis)– Analyzes assemblies todetermine if code is constructed safely and optimally.These tools overlap in some of their base rules butboth have their strengths.Other third party and Microsoft tools exist, butbeyond this presentation’s scope.
  12. 12. FxCop, VS Code AnalysisStatic analysisAnalyzes compiled assembly (dll, exe)Finds violations of programming and design rules
  13. 13. GendarmeStatic analysisAnalyzes compiled assembly (dll, exe)Finds violations of programming and design rules
  14. 14. NDependAnalyses compiled assembly (dll, exe)Measure, visualize and query source code quality
  15. 15. PexDynamic analysisAnalyzes code branches at runtimeGenerates inputs to achieve max coverageGenerates test cases
  16. 16. Code ContractsStatic checkerAnalyzes compiled assembly (dll, exe)Reports formal contract violations
  17. 17. FsCheckRandomly generates test inputsGenerates test cases based on program specificationsPort of Haskells QuickCheck
  18. 18. SimianAnalyzes source codeDetects duplication
  19. 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 programstructure.Available at
  20. 20. Configuring StyleCopIf you have StyleCop installed, you can haveSettings.StyleCop files for each project if you want tovary styles per project.Will take the first Settings.StyleCop file it finds fromworking directory on up the path.Default will be the Settings.StyleCop file inc:program filesMicrosoft StyleCop…Various configurations can make harder to enforceuniform rules, though, so use with caution.
  21. 21. Configuring StyleCopYou can configure which base rules you want active byusing StyleCopSettingsEditor.exe.Let’s take a minute to look at the rules…
  22. 22. Configuring StyleCopYou can also get to StyleCop settings in Visual Studiodirectly by right-clicking a project.This creates local copy of rules, use cautiously.
  23. 23. Running StyleCopYou can run StyleCop from VS or MSBuild.Has no native command-line interface, but one existsat sourceforge called StyleCopCmd.
  24. 24. StyleCop ResultsShows in Error List window, can turn on “Warnings asErrors” in VS if you want to break builds on violations.
  25. 25. Suppressing a RuleMost rules are good all the time, sometimes not.
  26. 26. On Suppressing RulesIt’s better to keep a rule even if it only applies 95% ofthe time and force developers to suppress the rule forthe one-off exceptions.This puts a SuppressMessage attribute in codewhich must be justified and prevents viewing theexception to the rule as a precedent for ignoring therule.If code reviewer disagrees, can be debated.Turning off rules should be avoided unless the rule isinvalid most or all of the time.
  27. 27. Custom StyleCop RulesStyleCop rules are fairly easy to write.Create class library that references the StyleCopassemblies: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. 28. Custom StyleCop RulesIn the CS file, create an analyzer that inherits fromSourceAnalyzer and has class attribute also namedSourceAnalyzer for C# files.s
  29. 29. Custom StyleCop RulesIn the CS file, override AnalyzeDocument andperform your checks.
  30. 30. Custom StyleCop RulesWhen you see your violation, call the methodAddViolation and give it a rule name and args:
  31. 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 andis Embedded Resource.
  32. 32. Custom StyleCop RulesThen, build the custom assembly.Place custom assembly in:C:Program FilesMicrosoft StyleCop …You should now see custom rules in theStyleCopSettingsEditor.If you don’t see custom rules, check that the XML file:Is an embedded resourceHas same filename as the class name (minusextensions)Let’s look at the code more closely…
  33. 33. StyleCop for ReSharperJetBrains’s ReSharper is an Visual Studio IDE plug-inthat adds a lot of refactoring and aids.StyleCop for ReSharper is a ReSharper plug-in thatallows for dynamic checking of StyleCop rules as youtype.Will highlight rule violations with squiggle just likeother ReSharper hints.Let’s look at how this appears in the IDE.
  34. 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.
  35. 35. Running FxCop Stand-AloneStart  Programs Microsoft FxCopCreate new project, add targets, and Analyze!
  36. 36. Running FxCop From Visual StudioRight click on project or solution and choose RunCode Analysis:Let’s look at an example analysis.
  37. 37. Suppressing FxCop ErrorsJust like in StyleCop, you can suppress one-offexceptions to the rules.Can insert manually or automatically from the errorlist in Visual Studio.
  38. 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.
  39. 39. Custom FxCop RulesIn CS file create class that inherits fromBaseIntrospectionRule:
  40. 40. Custom FxCop RulesIn CS File, override Check to check rule.
  41. 41. Custom FxCop RuleXML file is Embedded and contains rule detail:Remember filename must be same as passed to baseconstructor of BaseIntrospectionRule.
  42. 42. Custom FxCop RulesTo use custom rule, use CTRL+R or Project  AddRules in FxCop.You can verify by clicking on rules tab:
  43. 43. SummaryAutomating code standards can be very useful forgetting rid of a lot of the “noise” in code reviews andallowing reviewers to concentrate on logic bugs.Automated code standards take the personal side outof enforcing style, safety, and performance.Custom rules can be used in FxCop and StyleCop toallow for your own rules.