1 / 23

Coding Defensively

Coding Defensively. Coding Defensively Chapter 4 - Coder to Developer by Mike Gunderloy Instructor : Dr.James Fawcett Presented by Priyaa Nachimuthu priyaa@syr.edu. Agenda. Assertions Exceptions Comments. Defensive Coding. Reusable code

afia
Download Presentation

Coding Defensively

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Coding Defensively Coding Defensively Chapter 4 - Coder to Developer by Mike Gunderloy Instructor : Dr.James Fawcett Presented by Priyaa Nachimuthu priyaa@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”,”Can’t 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” ); • Don’t verify compiler operation Int[] intSizes = new int[3]; 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); } Finally { wc.Dispose(); } }

  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. • Don’t 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 // Procedure:GetDownload // 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) { // Method body goes here … }

  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 -> Options -> Environment -> 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 { // This method should never be called // without a source Url Debug. Assert (((d.SourceURL != string. Empty) && (d.SourceUrl != null)),”Empty SourceUrl”,”Can’t download a file unless a Source Url is supplied”); } catch(Exception e) { // bubble to any exception up to caller with custom info throw new DownloadException(“Unable to download”,d,e); } }

  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.

More Related