认知思考沉迷:如何调试黑箱?
我8个多月大的儿子,今天让我想到了一个黑箱问题,他究竟发生了什么事儿,待会儿揭晓。
0. 黑箱是什么?
黑箱,是一个形象的比喻。指一个事物,你从外面看不透里面有什么,正在发生什么,发生过什么,就像正看着一个黑箱一样。
黑箱并不是完全不可知,黑箱有两个孔:输入口和输出口。
你往输入口里,放入一些信息,那么输出口就可能出来一些别的东西,也有可能不出来。
你发现放入的信息不同,出来的东西可能不同,但偶尔也可能相同。
于是,在黑箱之外的你,一定对黑箱充满好奇。在好奇心驱使下,你想发现黑箱的内在规律,甚至破解黑箱的内部构成。
1. 中文屋子
中文屋子,是历史上一次经典实验,用来验证图灵测试的失效。
先看什么叫图灵测试?我们结合刚刚的黑箱定义来说明一下。
把一台机器放入一个黑箱,允许一个人在黑箱之外,往黑箱输入口里提问题,那么黑箱输出口里会回应问题。黑箱外的人可反复提出多个问题。
如果超过30%的黑箱外测试者,都不能分清黑箱里,到底是一个人还是一台机器回答的,那么原本黑箱里的机器,就算拥有人工智能,也就算说,通过图灵测试。
中文屋子,算是对黑箱的一次调试,并且反驳图灵测试的结论。
中文屋子是什么?
这个黑箱就叫中文屋子,里面有一个只会说英文的人,一本中英翻译书,一些草稿纸。无论黑箱(中文屋子)的输入口,放入中文纸条。
这个只会英文的人将中英文工具翻译成英文,然后用英文作答,最后用中英文工具翻译成中文,放入输出口。
就这样,黑箱外的人看到输入中文,输出中文,以为里面有一个懂中文的人或者机器。
实际没有,中文屋子骗了他们。
2. 黑盒测试
在计算机软件行业的作业流程中,有个职位叫测试工程师。
测试工程师的岗位要求,就是对研发出来的软件进行各种测试,以期待发现缺陷(Bug),然后交还给开发去修正。
测试的工作有很多方法论,其中一种便是「黑盒测试」。与黑箱概念一致:把软件看成是一个黑箱,当某个输入发生时,有符合期待的输出,否则就要算软件出现了bug。
之所以输出要「符合期待」,是因为程序按照产品设计的,黑箱只是封装了具体的实现内容,但输入、输出结果是固定的。
暂且,把这类黑箱称之为「固定黑箱」。
2. Hey Siri
苹果的Siri,智能语音助手。你说出的任何语言,都会通过Siri上传到某云服务器,云服务器分析后,综合给出相应的解答,输出返回到你的手机。
在这个过程中,Siri本身就是一个黑箱,因为我们不知道Siri是依据什么回应的。
不同的人,不同的手机,问出同样一个问题,回答还各不相同。就算是同一个人,同一部手机,不同的时间,问出同样的问题,依然回答不同。
暂且,把这类黑箱称之为「可变黑箱」。
3. 无反馈黑箱
好了,我家8个月大的小宝儿上场了,他演绎了黑箱的一种最高级模式,「无反馈黑箱」。
最近一段时间,小宝儿睡得很不好,我们换过奶瓶,喂过水,但晚上睡觉依然莫名哭闹。我们也不知道怎么办。
上周末,家里停水让我们把小宝儿转移到外婆家。周末两天,在外婆家的睡觉却非常安稳。
一分析,外婆家的床比较软,而且有床垫,睡起来比较舒服。赶上这两天气温骤降,温度低的时候,加盖的不如加垫的有用。
大人都知道的道理,可我们一直没为小宝儿想出办法,最大的原因是:
小宝儿无法跟我们交流,他只能用哭闹表示不开心,但不能告诉我们具体哪里不开心。
如果小宝儿是黑箱,暂且,把这类黑箱称之为「无反馈黑箱」。
4. 调试黑箱的技巧
固定黑箱,可变黑箱,无反馈黑箱,一个比一个难度级别大。然而,这些级别通常都是有一定的套路。
第. 正向功能调试。按照需求、习惯、自然反射行事,把所有应该有的功能都调试到,争取符合期望。
第二. 单一变量调试。遇到复杂的问题,先将问题分解,对应上我们的调试策略,重复试,直到发现真理。
第三. 逆向调试。即反向调试,与期待的方向相反,来看黑箱的反馈。记住,不要调试小宝儿,否则后果自负。
第四,边界值调试。如果黑箱只能满足从0到1的数值范围,那就应该试试大于1的数字,或者小于0的数字,然后看黑箱的反馈。
第五,组合调试。综合以上所有调试方法,反复、随机、组合的调试。
5. 终章
周末结束,从外婆家回自己家,换上软软的、厚实的床垫,且看今晚小宝儿的反应。哦,对了,这算单一变量测试。
: end )