避免程序Bugs

避免Bugs

  1. 使用静态和动态检测以及不可改变性
  2. 开启断言减少程序bug
  3. 迭代式开发,(单元测试和回归测试)
  4. 模块化和封装化

什么时候开启断言

  • 方法的参数
/**
 * @param x  requires x >= 0
 * @return approximation to square root of x
 */
public double sqrt(double x) { 
    assert (x >= 0)):"x is" + x;
  }
  • 方法的返回值
public double sqrt(double x) {
    assert x >= 0;
    double r;
    ... // compute result r
    assert Math.abs(r*r - x) < .0001;
    return r;
}
  • 覆盖所有的可能

如果if和switch没有覆盖所有的可能,可以使用断言来阻塞不合法的可能

switch (vowel) {
  case 'a':
  case 'e':
  case 'i':
  case 'o':
  case 'u': return "A";
  default: assert false;
}

关闭断言的情况

  1. 不要使用断言来测试外部的变量(如外部文件是否存在、网络是否可用、用户的输入是否正确)
  2. 测试时需要开启断言,给用户的时候关闭。

模块化和封装化

  • 变量的范围应该最小化
  • 声明循环的变量应该在循环内声明
  • 在变量要使用的地方声明
  • 避免全局变量
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,025评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,937评论 6 342
  • 1.前言## 去年年底的时候iOS逆向工程开始大火,可那个时候鄙人正在研究facebook出品的React-Nat...
    倚楼听风雨wing阅读 795评论 1 3
  • 2017-07-06 卢明洋 LUDASEE 王力宏 - 心中的日月 把黑与白舞成一幅泼墨 哀与愁在幽篁里寻找解脱...
    LUDASEE1123阅读 404评论 0 0