|
歪说软件工程16 - 现场直剥
话说老Y住处楼下就是一个自由市场,好几次听到一个卖柚子的在吆喝:“梁平柚子,一元一个,现场直剥……”。“现场直剥”的意思是买了之后现场直接给你剥开。
语言可以这样用吗,妙哉!随意摘录一句古文:“夫玄黄色杂,方圆体分,日月叠璧,以垂丽天之象;山川焕绮,以铺理地之形……”(刘勰,《文心雕龙》)。真不知道这些辞藻是怎么被堆砌起来的,奇哉!
发明汉字的仓颉看到这些,估计也会问道:“汉字可以这么用吗?”。软件产品用户多了,有时收到用户的反馈,说怎么怎么操作后出了什么问题,程序员心里想:“这个软件居然可以这么用?”
如果用户说了怎么操作,那要解决问题比较好办,如果用户没说,只说出的问题,就麻烦了。软件中有很多隐藏的假设,比如假设用户会这样操作、假设用户这个地方会输什么内容,一旦这些隐藏的假设被“不守规矩”的用户触碰到,就可能导致问题。
但软件总不可能把什么都考虑到,就如仓颉不能限制卖柚子的也玩汉字谐音,程序员在软件没加约束时也不能限制用户不能那么操作,所以为了避免出问题,解决方法之一就加尽可能多需要的功能约束,之二就是遵循“契约编程”的道理,在每个方法、每个函数做约束,以便出问题时能知道问题所在。
简单的方法是可以这样:由于每个方法、每个函数对传入的参数都会有一些假定,可以把已知的假定直接写成代码约束,比如用Assert来要求某某参数不能为空,同时给出违反约束时的提示。 |
|