今天这一系列的博客想要和大家分享的是面向健壮性和正确性的构造里面的一些概念以及用到的一些技术,不多说了,直接上满满的干货,这些干货都是笔者学习这一单元的时候上课所记到的笔记,希望能给大家带来一些帮助。
7.1 健壮性和正确性
主题
- 健壮性编程
- 程序可以处理异常情况和预期之外的操作
- 策略:
- 给用户一个提示:问题出在哪了
- 优雅的退出
- 健壮性法则
- 用户不愿意破坏代码,代码是可能有错误的
- 给用户提供一个不需要看代码的提示
- 提示要准确,有助于找到错误
- 程序要保守,能够满足各种情况(对接收的信息得是自由的)。
- 避免危险的实现
- 信息隐藏
- 一些错误是不可避免的
- 正确性
- 正确性和健壮性有一定差异
- 百分百返回一个正确的结果(没结果比不精确的结果要好)
- 健壮性增加了对常见错误和不严重错误的容错,而正确声只要遇到不完美的输入就会抛出错误。
- 例子
- 增加错误的空格
- 健壮性:过滤掉这个空格
- 正确性:报错
- 帧的画面又错误
- 健壮性:跳过
- 正确性:报错
- 增加错误的空格
- 接着对比
- 对比
- 健壮性对用户和第三方开发者很友好,对程序员不是很友好,需要考虑到各种错误
- 正确性对程序员是好事,实现时候只要考虑正常情况就可以了(程序简单,易理解,维护起来更简单)
- 隔离带
- 程序内部块与块之间传递顺序要保证正确性,与外部交流的部分要保证正确性。
- 但是隔离带外部要保证健壮性
- 取决于软件特征
- 消费品类软件:健壮性要更好
- 安全类的:正确性更重要
- 可靠性 = 健壮性 + 正确性
- 对比
- 词语区分
- 错误(error):一个错误决策,设计错误
- defect、bug:error设计导致了代码bug
- 最终导致了错误
- 例子
- 注意
- 并不是所有bug都是错误导致的
- 可能需求本身错了(理解错了)
- 不是所有的bug都会导致错误
- 比如说负负得正
- 只有满足情况下才会导致错误
- 外部环境发生了变化可能会导致失败
- 一个单一的bug可能导致很多的错误
- 并不是所有bug都是错误导致的
- 增加程序的健壮性和正确性
- 开发过程中使用一些技术
- 发现错误的情况(分析内存文件,堆栈、日志、测试)
- 定位:定位bug然后debug
- 怎样进行量化健壮性和正确性
- MTBF
- 平均故障间隔时间:两次故障之间的平均工作时间。 针对可修复的
- MTTF
- 平均失效前时间:正常工作时间/故障次数。针对不可修复的
- KLOC(千行代码的bug数)
- 学什么
- 编码阶段实现健壮性和正确性:怎样编程
- 进行测试判定健壮性和正确性:如何判断
- Debugging:如何定位并解决这个问题