【View】为什么我认为中医是有效的:从黑盒测试Fuzzing谈何为科学的方法

508 阅读8分钟

0 - 中医的误解

好久不写文章了,一写就准备写一个长的。以下为个人看法,仅供参考,希望大家对中医有一个理性的认识。:

为什么我说中医是有效的,因为从某种程度上说中医也符合很多科学的道理。如果把人体比作一个程序或者一个函数,那么中药就是输入(input),治疗效果就是输出(output),我们一般通过观察输出和输出来判断中药是否有效,比如观察感冒的症状是否得到缓解,经过治疗后咳嗽是否痊愈(函数返回期望的结果)。总结出来后作为经验写进书里,后人就可以根据经验来治疗相应的疾病,所以很多人说中医是靠经验而不是靠科学,我认为只是说对了一半,因为中医依靠的是科学的经验。

什么是黑盒测试

黑盒测试在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。

黑盒测试着眼于程序外部结构,不考虑内部逻辑结构。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。

黑盒测试的优点有:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。

黑盒测试的缺点有:不可能覆盖所有的代码,覆盖率较低。

什么是白盒测试

白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。

优点:就是白盒测试写边界case会很清晰,因为实现都是已知的。可以统计覆盖率 缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。

什么是Fuzzing

其核心思想是将自动或半自动生成的随机无结构数据输入到一个程序中,并监视程序异常,如崩溃,断言"断言 (程式)")(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。其回报率通常比较高。模糊测试相当于对系统的行为做了一个随机采样。

模糊测试通常被用于黑盒测试。

类比

从这一点上来说,如果把中西医拿来类比,那么中医在软件测试中对应的是黑盒测试。

人体本质上就是软件么,人体的一些机理,身体的工作原理其实对于你来收就是黑盒,你也不知道人体是怎么运行的,但这个其实无所谓,因为中医认为,你不需要知道人体是如何实现的,比如说你不需要知道中药是如何在血液中起作用,和人体器官什么的怎么结合工作的,怎么缓解症状的,我们不需要知道这些,只需要知道这个药起作用就可以了。比方说给一些随机的成分(input)中成药来观察,A组合成分可以缓解症状,而B组合成分就没有效果,那我们就知道A组合是有效的,然后记载在书中。

实际上神农尝百草就是一个例子,神农的身体很好,就尝百草来记录一些草药的功效,我认为这时世界上最早的模糊测试的实践者,用生命来研究草药,值得尊敬。

而西医相当于是软件测试中的白盒测试,因此西医对边界case的测试一定是比中医要更加的清晰的,因为西医更加了解药物作用的机理和其副作用。这个是西医巨大的优点。西医因为白盒所以测试周期更长,研发成本更高,而中医则相反,随便修修补补老药方,研发投入可能都是零。各有好坏。

那能因此说软件工程中就不需要黑盒测试之需要白盒了么?黑盒测试的存在一定是有道理的,否则google等公司也不会去研究一些fuzzing的工具。

但是从长远来看,未来随着我们对人体的掌握程度逐渐加深,相当于对业务代码的了解更加深入以后,那未来中医治疗的效果肯定不如西医了,西医的可解释性会更加强。但是现如今我是不相信西医对人体的了解程度是足够的,所以中医依旧有一些价值,也许可以通过更加科学的方式来探索中医。

有些人(比如立党老师)可能会吐槽说一味药有好几十种成分,根本没有办法说清楚到底哪种成分对人体有效,我想说的是这是一定不能的,因为黑盒测试本身就是随机采样的,比如随机一大堆参数,携带参数测试出来绕过登录的一个漏洞,但是具体是哪个参数的效果,我觉得这不是中医关心的,it works就行了。

西医实际上有曾经有过放血疗法等“伪科学”的历史,中医也有一些注射黑历史。这些都是不科学的,但是绝不能以点概面说xxx是不科学的。有意思的是b站up主mandell博士明明是西方人,但是讲解的知识很多却是中医。我相信会有未来会有更多的人认识到中医的价值。

1 - 何为科学的方法

很多时候那些以科学的名义来随意攻击某个领域的人,恰恰成为了类似科学教一般的形而上学的信徒,只信奉内心的绝对科学和绝对正确,而殊不知随着时间的推移,科学自身也会渐渐完备,很多以前科学的东西不再正确,很多现在不科学的事物未来会变成科学,而一旦有了新的认识,科学教们又会把新的认识奉为绝对的真理崇拜起来。

马克思主义者都知道看待问题的方式应该是辩证的,而非绝对的,这些科学教徒们恰恰是最没有科学思维和思辨能力的,当然也无法拿出科学的方法。

我再举一个例子,很多时候一些程序的运行是非常重要的,比如内核程序的特权级别就非常高,而在用户态的程序特权级别就比较低。运行在用户态的程序是不容许访问到操作系统内核的数据结构和程序的。

所以在早期用户使用linux的方式是通过shell的,shell本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式。你可以认为是暴露给用户的一种接口,来使用一些功能,而不是随便使用。

如果类比到中医中,那么穴位可以类比为shell,而器官可以类比为内核。你的器官不适了,你当然不能随随便“调试”你的器官,但是人体暴露相关的接口api,也就是穴位来“调试”你的器官,按摩穴位之后可以缓解你的相关症状。

这虽然是一种猜想,但是如果我来设计人体,我会这么设计,这也算是一种科学的方式。