健壮性
定义
系统在不正常输入和不正常外部环境下仍能够表现正常的程度
面向健壮性的编程
- 处理未期望的行为和终止
- 即使终止执行,也要准确/无歧义地向用户展示全面的错误信息
- 封闭实现细节(不给用户获得库、数据结构、指针的途径)
Robustness principle (Postel’s Law)
Be conservative in what you do, be liberal in what you accept from others
(做事情要保守,接受别人的东邪要大方)
正确性
定义
程序按照spec加以执行的能力,是最重要的质量指标
举例比较
错误类型 | 健壮性方法 | 正确性方法 |
---|---|---|
浏览器发出包含空格URL | 去掉空格 | 返回HTTP404错误 |
视频文件有环帧 | 自动跳过 | raise “Corrupt video file” error. |
配置文件使用了非法字符 | 内部检查常用前缀,忽略它们 | “bad configuration” error. |
奇怪格式额日期输入 | 尝试解析按照其他格式 | invallid date error |
正确性和健壮性的权衡
- 对外的接口倾向于健壮
- 对内的实现倾向于正确
编程的正确姿态
Step 0:使用断言、防御式编程、代码评审等
Step 1:观测失效症状(信息转储、堆栈信息跟踪、运行日志、测试)
Step 2:bug定位,debug
Step 3:fix
Error -> Fault -> Failure
explanation
error是程序员犯的错误,defect是程序的缺陷,fault是代码中的错误,failure是失效、运行时的外在表现error -> defect/fault/bug -> failure
tip
- 并不是所有的软件缺陷都是编码错误导致的(比如需求缺口)
- 并不是所有的软件缺陷都会导致运行失效
- 环境变化时defect可能变成运行失效
- 一个单一的缺陷可能导致广泛的失败症状
衡量正确性和健壮性
MTBF(平均失效时间)
为系统故障间隔的算术平均(平均)时间,是从外部观察角度进行的,是直接的
Residual defect rates (残余缺陷率)
每千行代码中遗留的bug的数量,是从内部观察角度进行的,是间接的
欢迎关注公众号BBIT
让我们共同学习共同进步!
更多推荐
HIT 软件构造 健壮性 正确性
发布评论