zoukankan      html  css  js  c++  java
  • 防御式编程

    防御式编程

    防御式编程

    为什么要防御式编程

    • 编写大多数情况下都能用(可用)的代码很容易。但是提供意外输入会崩溃
    • 正确的代码绝不会崩溃。但所有可能输入集合很大,难以测试;并非所有正确的代码都是优秀的代码,可能逻辑难以理解,并几乎无法维护
    • 优秀的代码是健壮的、高效的、当然也是正确的。即便面对不常见输入,产品级代码也不会崩溃和产生错误结果

    什么是防御式编程

    通过预见到(或至少预先推测到)问题所在,断定代码中每个阶段可能出现的错误,并做出相应的防范措施,来防止类似意外的发生

    断言

    断言是什么

    • 开发期间使用的、让程序在运行时进行自检的代码
      • 作为对开发人员的警告
      • 通常是一个子程序或宏
      • 断言为真,表示程序运行正常;为假,表示代码中出现了意料之外的错误
    • 构成(两个参数)
      • 布尔表达式:描述假设为真的情况
      • 显示的信息:断言为假时(不是必须的!)

    什么时候使用断言

    • 断言主要用于开发和维护阶段
      • 帮助查清相互矛盾的假定
      • 预料之外的情况
      • 传给子程序的错误数据等
    • 生成产品代码时并不编译进去
      • 不希望用户看到产品代码中的断言信息
      • 同时避免降低系统性能

    错误处理技术

    为什么

    • 错误可能而且必将发生
      • 错误是预先就知道的,区别于程序中的bug –如想打开的数据库文件已被删除,磁盘空间已满…
    • 用户错误
      • 提供错误输入,或试图进行荒谬操作
    • 程序员错误
      • 是一种bug,由程序员引入的代码缺陷
    • 意外情况
      • 网络连接失败,打印机墨水用光等

    有哪些错误处理技术

    • 错误处理技术用来处理那些预料中可能要发生的错误情况
      • 返回中立值(如数值返回0)
      • 换用下一个正确的数据
      • 返回与前次相同的数据
      • 换用最接近的合法值 (如经度设置为(-180,180) 之间)
      • 把警告信息记录到日志文件中
      • 用语言内建的异常机制抛出一个异常

    断言 vs 错误处理

    • 断言处理代码中不应发生的错误
    • 错误处理处理那些预料中可能发生的错误

    异常

    异常是什么

    • 把代码中的错误或异常事件传递给调用方代码的一种特殊手段
      • 当遇到意料之外的情况,但不知道该如何处理时,可以抛出一个异常
      • 同继承一样,谨慎使用可降低复杂度
    • 基本结构
      • 子程序使用throw抛出一个异常对象
      • 被调用链上层其他子程序的try-catch语句捕获

    隔离程序/隔栏

    是什么

    • 隔栏Barricade
      • 以防御式编程为目的而进行隔离的一种方法
      • 把某些接口选定为“安全”区域的边界,对穿越安全区域边界的数据进行合法性校验
      • 隔栏可以将检验工作集中在特定的模块中,从而降低其它部分采用防御式编程的成本

    隔栏 vs 断言 vs 错误处理

    • 隔栏的使用使断言和错误处理有了清晰的区分
    • 隔栏部分包含了“脏数据”
      • 隔栏外部的程序应使用错误处理技术,在那里对数 据做的任何假定都是不安全的
    • 通过隔离部分之后的是“干净数据”
      • 隔栏内部的程序就应使用断言技术,因为传进来的数据应该己在通过隔栏时被清理过了
      • 隔栏内子程序出现错误数据,就是程序里的问题

    辅助调试的代码

  • 相关阅读:
    16进制数至字符串转换
    综合评价模型C++实现
    综合评价模型
    Eigen使用矩阵作为函数参数
    Eigen子矩阵操作
    Eigen矩阵基本运算
    c++矩阵运算库Eigen简介
    三次样条插值算法C++实现
    一个 图片 滚动 飞入的css特效
    在TTF字体中提取想要的文字
  • 原文地址:https://www.cnblogs.com/cpaulyz/p/14950915.html
Copyright © 2011-2022 走看看