Contents
  1. 1. 开发
  2. 2. 测试
  3. 3. 开发
  4. 4. 开发
  5. 5. 测试
  6. 6. 开发
  7. 7. 开发
  8. 8. 开发
  9. 9. 测试
  10. 10. 开发
  11. 11. 开发
  12. 12. 测试

Anthony Vallone在Google的测试博客上的这篇文章Minimizing Unreproducible Bugs中介绍了一些他的经验来减少不能重现的Bug,要点如下:


避免,并且测试race condition,死锁,timing issue,memory corruption,非初始化的内存访问,内存泄漏和资源问题。

开发
  • 简化同步逻辑。
  • 永远用相同的顺序来加锁。
  • 不要为了优化而创建很多细粒度的锁,除非你证明了他们是必须的。
  • 避免共享内存。
测试
  • 有规律的进行压力测试
  • 测试超时的情况
  • 测试debug和release版本
  • 在限制资源的情况测试
  • 长时间的测试
  • 用动态分析工具检查

开发
  • 在函数开头对输入进行检查,验证前提条件是否成立

开发
  • defensive programming
    测试
  • fuzz testing

不要对用户隐藏所有的错误

开发
  • 只有在确定错误不会影响系统状态或者用户时才对用户隐藏
  • 任何对用户有影响的错误都应该汇报给用户,并且提供下一步的指示

测试错误处理

开发
  • 永远测试错误处理代码
  • 检查所有错误类型对应的日志质量

检查重复的键值

开发
  • 努力保证所有键值的唯一性
  • 当不能保证时,在使用前先检查是否已经使用过这个键值
  • 小心可能的race condition

测试并发的数据访问

测试
  • 如果系统需要并发数据访问,就测试它

远离未定义的行为和不确定的数据访问

开发
  • 理解使用的API或者操作在什么情况下会引发未定义的行为
  • 不要依赖数据结构的顺序(除非你保证他们的顺序)

在发生错误时记录详细的日志

开发
  • 遵守好的日志规范
  • 如果日志在用户的机器上,提供一种简单的方式是你能够拿到日志
测试
  • 保存测试产生的日志
Contents
  1. 1. 开发
  2. 2. 测试
  3. 3. 开发
  4. 4. 开发
  5. 5. 测试
  6. 6. 开发
  7. 7. 开发
  8. 8. 开发
  9. 9. 测试
  10. 10. 开发
  11. 11. 开发
  12. 12. 测试