第七章软件结构的健壮性——健壮性与正确性
1.健壮性
什么叫健壮性?指代码很多?多到程序员无法撼动?
嘛,开个玩笑啦……健壮性不是指数量,而是衡量代码质量特性的最关键的一种,用“一人之下万人之上”来形容很恰当(在他上面的是正确性,emm……这个不用解释了吧)。
健壮性具体指的是系统在不正常的输入或不正常的外部环境下仍能表现出正常的程度。
形象点来说就是这个软件要求用户输入个整数,结果用户这个小坏坏输入了一个小数,那么你这个程序会怎么处理呢?崩了可就不太好吧,你的程序怎么能允许别人来玩坏?!
面向健壮性的编程有以下几点要求或优点:
- 处理未期望的行为和错误终止
- 即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
- 错误信息有助于进行debug
健壮性原则:
- 总是假定用户为恶意用户,假定自己的代码会失败
- 把用户想象成一个silly b,可能输出任何东西
注意,因为用户很silly,最好要返回给用户错误提示信息,而且要详细准确无歧义!(其实这对debug非常有帮助,尤其是像我这样喜欢用syso找虫子的白痴CodeDog) - 对自己的代码要保守,对用户的行为要开放
面向健壮性编程的原则:
- 封闭实现细节,限定用户的恶意行为
- 考虑各种各样的极端情况,没有impossible
2.正确性
上面刚刚提到过它,这东西的重要性就不用多说了吧。我们的软件最重要的目的就是它,没有正确性,这软件也就没用了,连烧火都烧不了……
正确性:程序按照spec加以执行的能力,是最重要的质量指标!
说一下与健壮性的区别:
- 正确性:永不给用户错误的结果
- 健壮性:尽可能的保持软件运行而不是总是退出
本质上来讲正确性倾向于直接报错,健壮性倾向于容错,避免给用户太大的压力,帮助用户承担一些麻烦(注意二者并不冲突)
来个栗子吧:
那么我们如何取合适的健壮性或正确性呢?原则是对外接口,倾向于健壮,对内实现,倾向于正确。