itf11006.net industrial programming. guidelines – development guidelines – ux guidelines quality...
TRANSCRIPT
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)
• Use Pascal casing ALLWAYS• Except, use camel casing for:
– parameter names– variables and (none-public) fields
– Member Design Guidelines• Choosing Between Properties and Methods
(http://msdn.microsoft.com/en-us/library/ms229054.aspx)
– Never public fields (except for structs)
• 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 (http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx)
Documentation of code (cont.)• XML tags (http://msdn.microsoft.com/en-us/library/5ast78ax.aspx)
– summary– param– example– code– exception– returns
• GhostDoc (http://submain.com/products/ghostdoc.aspx)
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– Default– Min– Max
• Windows Position• 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– 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 MetricsMetric Green Yellow Red
Maintainability Index 100-60 60-40 <40
Cyclomatic complexity <10 10-20 >20
Class Coupling <10 10-20 >20
Lines of Code <10 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
Exception Handling
Catching Exceptions
Exceptions
• Design Guidelines for Exceptions (http://msdn.microsoft.com/en-us/library/ms229014.aspx)
• Do not throw System.Exception• Inherit from System.Exception• End with Exception
User Defined Exceptions
public class NewException : BaseException, ISerializable
{
public NewException()
{
// Add implementation.
}
public NewException(string message)
{
// Add implementation.
}
public NewException(string message, Exception inner)
{
// Add implementation.
}
// This constructor is needed for serialization.
protected NewException(SerializationInfo info, StreamingContext context)
{
// Add implementation.
}
}
Exceptions
• Exception handling• Throwing exceptions• Exception info– Message– InnerException
• Library code rethrows/do not catch• Clients shall handle exceptions
Resource handling
• Unmanaged resources– Implementing
• IDisposable
– Consuming• Using vs. try/finally
• Closing vs Disposing– Database, files, …