测试开发--程序设计之断言和容错篇

总结测试开发中常见的程序设计问题,这篇的主要内容是关于断言的使用。如果有任何有疑问,欢迎指出和讨论,感谢。

一、断言和容错设计的使用

1、可以用static_assert执行编译时的断言检查

    如:static_assert(sizeof(char *) == 8, "不是64位模式")


2、避免用断言去检查程序错误:

    1)外部不可靠的数据应该做严格检查才能放到系统内部,这个时候它是守卫,提前检验和过滤不合理的数据和参数,应该使用错误检查处理代码(如KGLOG_COM_PROCESS_ERROR等)

    而不是用断言来做检查

    *外部不可靠的数据:是指如不合理的用户输入、或其他模块传入到该模块的消息或数据,

    有点像是对项目组外的员工,要动用项目组的资源,是需要经过审核的

    2)系统内部的交互数据(如程序内部的调用),可以用断言来检查意想不到的错误,或者程序内部的假设。(即检查它的潜规则、逻辑边界、隐形假定、输出或内部状态是否如预期)

    *因为系统内的调用者一般情况下是有义务负责传递给自己内部的数据是合理正常的数据

    就像项目内的员工,对于使用项目组的资源的门槛就会低很多

    *可理解为assert和出错处理是对所写程序建立不同的信用级别,也方便在Release版可以性能更好的运行程序

    3)推荐针对public的函数或接口的入口处对参数做严格的错误检查;对于Private的函数或者只有这个模块能看到的,可以用assert


3、容错性程序设计常常要解决的是:现实中,防止用户数据丢失或程序崩溃而采取的措施。只是除此之外,也许可以适度考虑:

    *我们是否希望在进行容错性程序设计时,错误要不要被隐瞒?

    *实现程序时,如果有错误(特别是意料之外的错误)发生时,

    1)我们有线索吗?能得到什么?怎样更好的定位和处理它?

    2)需要报警方案吗?

    3)有预案吗?

    4)可能的影响大吗?


4、避免断言中使用改变环境的语句:

    如不正确的代码:

    int Test(int i)

    {

        assert(i++);  //debug版和release版的i值就会不一样

        return i;

    }

    int main()

    {

        int i = 1;

        int nValue = Test(i);

        printf("%d\n",  nValue);

        return 0;

    }

    合理的形式:

    int Test(inti)

    {

        assert(i);

        return++i;

    }

    注:与改变环境的语句类似的行为是宏定义。

            *请尽量不要在assert中调用宏,以防止宏的副作用



以谦卑的心感受,以感恩的心生活

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 12,271评论 0 10
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,132评论 1 114
  • 播放系统声音SystemSoundID mysound;NSString *sndpath = [[NSBundl...
    winnisz阅读 2,761评论 0 0