Industrial Programming ITF11006 .NET Industrial Programming
Industrial Programming Guidelines Development Guidelines UX Guidelines Quality Measures Code Metrics Code Analyses Robustness Error handling (exceptions) Resource handling
Guidelines Design Guidelines for Developing Class Libraries (http://msdn.microsoft.com/en-us/library/ms229042.aspx) Guidelines for Names Capitalization Conventions (http://msdn.microsoft.com/en-us/library/ms229043(v=vs.100).aspx) Member Design Guidelines Choosing Between Properties and Methods (http://msdn.microsoft.com/en-us/library/ms229054.aspx) Documentation of code
Documentation of code Documentable Entities Class / Struct Method … Cannot document Namespace through XML tag Shows up in Object Browser Intellisense Library Documentation
Documentation of code (cont.) XML tags (http://msdn.microsoft.com/en-us/library/5ast78ax.aspx) summary param example code exception returns GhostDoc
Guidelines Design Guidelines for Developing Class Libraries (http://msdn.microsoft.com/en-us/library/ms229042.aspx) Guidelines for Names Capitalization Conventions (http://msdn.microsoft.com/en-us/library/ms229043(v=vs.100).aspx) Member Design Guidelines Choosing Between Properties and Methods (http://msdn.microsoft.com/en-us/library/ms229054.aspx) Documentation of code UX Guidelines
UX Guidelines Windows Size Resizing must work! Clean layout Shortcuts Default Min Max Resizing must work! Clean layout Shortcuts Tab-order
Industrial Programming Guidelines Development Guidelines UX Guidelines Quality Measures Code Metrics Code Analyses Robustness Error handling (exceptions) Resource handling
Code Metrics Cyclomatic complexity Class Coupling Lines of Code Structural complexity of code Calculates number of different code paths High values requires more unit tests to cover all paths Class Coupling Measures the Efferent Coupling, the number of classes this method depends on High coupling means brittle, likely to change, probably unfocused and lack of responsibility Lines of Code Based on IL, so approximate, but better than source Excludes white space, comments, braces, types etc.
Code Metrics (cont.) Maintainability Index: A weighted number based on Halstead volume, cyclomatic complexity and lines of code Maintainability Index = MAX(0,(171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code))*100 / 171) A green rating is between 20 and 100 and indicates that the code has good maintainability. A yellow rating is between 10 and 19 and indicates that the code is moderately maintainable. A red rating is a rating between 0 and 9 and indicates low maintainability.
Code Metrics Use MS official sample Green Yellow Red Maintainability Index 100-60 60-40 <40 Cyclomatic complexity <10 10-20 >20 Class Coupling Lines of Code 10-30 >30 Use MS official sample “Image slideshow in full screen mode” (http://code.msdn.microsoft.com/CSImageFullScreenSlideShow-79e29568)
Code Metrics – VS 2010
Code Metrics – Excel
Code Analyses Rule Set Rule Action Automatic / Manual execution Use from Start
Code Analyses - Settings
Code Analyses – Results/Fix
Code Analyses – Requirements Microsoft Minimum Recommended Rules +Microsoft.Naming (All) HiOf.Net.ruleset
Industrial Programming Guidelines Development Guidelines UX Guidelines Quality Measures Code Metrics Code Analyses Robustness Defensive Programming Error handling (exceptions) Resource handling
Defensive Programming Handle anticipated deviations Missing Directory / File Lack of database connectivity Lost database connection Verify input data Do not let the user enter erroneous data Guard against SQL injection Use SQL procedures / bind variables
Error handling
Exceptions Do not throw System.Exception Inherit from System.Exception End with Exception
Exceptions Exception handling Throwing exceptions Exception info Message InnerException Library code rethrows/do not catch Clients shall handle exceptions
Resource handling