Coding Defensively - PowerPoint PPT Presentation

1 / 23
About This Presentation
Title:

Coding Defensively

Description:

While passing error information from lower level code to higher level code use ... Well written comments make code easier to read. ... – PowerPoint PPT presentation

Number of Views:174
Avg rating:3.0/5.0
Slides: 24
Provided by: pri48
Category:

less

Transcript and Presenter's Notes

Title: Coding Defensively


1
Coding Defensively
  • Coding Defensively
  • Chapter 4 - Coder to Developer by Mike
    Gunderloy
  • Instructor Dr.James
    Fawcett
  • Presented by
  • Priyaa Nachimuthu
  • priyaa_at_syr.edu

2
Agenda
  • Assertions
  • Exceptions
  • Comments

3
Defensive Coding
  • Reusable code
  • Easy maintenance
  • Paves way to locate problems easily
  • Allows modifications

4
Assertions
  • Problem indicators
  • Design time debugging
  • Assert a boolean condition
  • Microsoft .Net runtime

5
Using Assertions
  • Add a reference to System. Diagnostics
  • namespace
  • Use Debug. Assert method or
  • Trace. Assert method
  • // This method should never be called
  • // without a source Url
  • Debug. Assert (((d.SourceURL ! string.
    Empty) (d.SourceUrl ! null)),Empty
    SourceUrl,Cant download a file unless a Source
    Url is supplied)

6
Assertion Failed Alert
7
Mechanics of .Net Assertions
8
Debug Configuration
9
Release Configuration
10
Listener classes
  • TraceListener abstract class in System.
    Diagnostics namespace
  • DefaultTraceListener An object of this class is
    automatically added to Listeners collection of
    Trace and Debug classes. Writes output to output
    window or message boxes.
  • TextWriterTraceListener writes messages to any
    class that derives from the Stream class.
  • EventlogTraceListener writes messages to
    Windows event log.
  • Inherit from TraceListener - custom behavior

11
Guidelines for good assertions
  • Hide assertions from end users
  • Use Debug. Assert
  • Assertions shouldn't have side effects
  • // Make sure path is ok
  • Debug. Assert ((newpath
    Path.Combine(foldername,filename))!
  • string.Empty,Bad path to download )
  • Dont verify compiler operation
  • Int intSizes new int3
  • Debug.Assert(intSizes.GetUpperBound(0)
    2,Failed to initialize
  • array )

12
Guidelines for good assertions
  • Reasonable input data
  • Checks in the method that uses the value
  • Check assumptions after complex code
  • execution

13
Exceptions
  • Exceptions are for exceptional situations
  • Run-time checking
  • public void GetDownload (
    Download d )
  • string filename
    string.Empty
  • string foldername
    string.Empty
  • WebClient wc new
    WebClient()
  • try
  • // code to do
    download
  • catch ( Exception e )
  • // bubble to any
    exception up to caller with custom info
  • throw new
    DownloadException(Unable to download,d,e)

14
Exception Mechanics
  • try Exception handling block
  • catch start of the actual exception
  • handling
  • finally start of the code that will always
  • run. Used for cleanup
  • throw generates an exception

15
Custom Exceptions
  • There is no existing exception class that
  • correctly represents the exceptional
  • condition.
  • To pass additional information to the
  • parent code.

16
Guidelines for good exceptions
  • Exceptions are for exceptional situations
  • Use exception constructors with string value for
    additional information
  • While passing error information from lower level
    code to higher level code use one of the
    constructors that accepts an Exception object.
  • Dont create custom exceptions when the built
    ones will suffice.

17
Comments or Self-Documenting Code
  • Code should be its own documentation, comments
    are superfluous.
  • Well written comments make code easier to read.
  • Writing good comments is no excuse to writing bad
    code.

18
Noise Comments
  • Comments that make code longer with no
  • value addition
  • // DefaultDownloadFolder property
  • public string DefaultDownloadFolder
  • // public getter
  • get
  • return _D
  • // public setter
  • set
  • _D value

19
Noise Comments
  • Formal procedure header
  • // ProcedureGetDownload
  • // Module DownloadEngine.cs
  • // Author Mike
  • // Creation Date 21 October 2003
  • //
  • // Inputs
  • // d - A Download variable with download file
    information
  • // Outputs
  • // None
  • //
  • // Revision History
  • // 05 Nov 2003 Initial Creation
  • // 07 Nov 2003 Download code implemented
  • //
  • Public void GetDownload(Download d)

20
Placeholder comments
  • // HACK Brute- force search, can replace this if
    this becomes a perf issue
  • // TODO Add code to make sure user has access to
    folder
  • // POSTPONE This is where we want to create
    custom properties
  • Tools -gt Options -gt Environment -gt Task List

21
Visual Studio.NET Task List
22
Summary and Intent Comments
  • Intent comment
  • // GetDownload uses the information in a download
    object
  • // to get the specified file from the internet to
    a local hard
  • // drive. Any download errors are wrapped in a
    custom
  • // exception and returned to the caller.
  • Public void GetDownload(Download d)
  • // Method body goes here
  • Summary comment
  • public void GetDownload(Download d)
  • try

23
Defensive Coding Checklist
  • Use assertions to catch design time errors
  • Use exceptions to handle runtime errors
  • Use exceptions only for exceptional situations
  • Avoid peppering your code with noise comments
  • Use comments as placeholders for future work
  • Use comments to summarize and document the intent
    of the code
  • When you change code, make sure to keep the
    comments up-to-date.
Write a Comment
User Comments (0)
About PowerShow.com