人生 Regression Test

最近虽然主要在做 GDB 的移植,但也一直负责维护公司的 regression test(回归测试)框架和脚本。经常说的几句话就是:“今天 regression 过没过啊?”“我已经添加了新 testcase 的 script,你 update 一下 run 一遍看看有没有错。”而且修改程序必先 regression 再 commit 已经成了惯例。

由此想到一个有趣的话题,如果把人的一生看作是软件开发的过程的话,为了避免出现重大失误,应该怎样进行 regression test 呢?显然,这里 DejaGnu 无能为力了,expect 也不见得有多大用处。

首先,得要明确进行测试的目的,在 Grenford J. Myers 的 《The Art of Software Testing》 提出:测试是为了发现软件错误,是为了证明软件有错而不是无误。推而广之,可以说对人的测试是为了发现人的错误,为了证明人有错而不是无误。而人生的回归测试就是为了尽早地发现人的错误而不让它导致整个人生的失败。

其次,作为一种测试,有两个问题必须解决:

第一,测试的对象是什么?以曾经的所作所为为对象那不叫测试,因为那是既成事实的东西,发现了错误也无法修改。可人类又有句老话:过而能改,善莫大焉。可见,这里的错误包含的意思说,它也是可以改正的。由于讨论的是回归测试,可以这样来考虑,测试的对象是人的意识(不都标榜它是人和动物的区别嘛,具有一定代表性,而且,重要的一点是,它是值得、需要测试并且可以修改的),而曾经的作为可以看作是 log,所以部分测试结果可以通过对 log 进行分析得出,当然,会有一部分即时进行的测试用例,但这种用例都应该比较小,而且主观性比较大。

第二,测试的标准是什么?谁来做测试?拿什么标准来判断意识的对错,来判断测试用例是 pass, fail 或者 unresolved, unsupported? 如果把测试的对象看作是人的意识的话,会分好多领域。就拿道德观来说,美国人会认为入侵伊拉克是发扬人道主义精神,救伊拉克人民于水火之中(就像日本人认为侵略中国是为了使东方诸国免于受西方列强的奴役);显然部分伊拉克人会认为这是赤裸裸的侵略和对他们国家主权的亵渎。一个物质主义者会认为物质(可能具体的来说,财富)才是最重要的,他衡量自己是否成功是否幸福是否快乐的标准和物质的多少有关;而一个理想主义者更关心的可能是内心世界的和谐与宁静,以及对真善美的追求,并以此为评价标准。所以这种标准显然不适合自身以外的其它人来制定,因为很难有两个人的标准完全相同。就像软件公司都是自定义测试用例的成败一样,但不可忽视的一点是作为一个人也有目标客户,就是他想去取悦的人(没人会在乎和自己无关的人,就像没有公司会在意永远不会买自己产品的客户一样)。所以判断的标准应该是自身标准和客户标准的折衷,当然,如何折衷就得看各人的本领了。

这里得出的结论就是:人生回归测试应该由自己在外界的影响下定义测试对象、标准并且由自己执行。

再次,就应该是方法论了,如何进行测试?怎样选取测试用例?对意识进行测试,无非是拿标准和自身思想进行对照,用标准对自己所作所为进行分析。但是,这个标准是空泛的,不具体的,把标准具体化之后,就得到了测试用例。

最后,会有一个标准化的问题,怎样将测试框架、测试指标、测试用例标准化?标准化的好处显而易见,提高效率,降低成本,便于交流,提高公认度。其实古人已经做了很多工作,比如君子和小人就有两套相对标准的框架。

发现中国的古人真的好厉害,我在这里写那么多,人家用一句话就概括了:“一日三省吾身”,连测试的频率都包含了。

/* 今天把 BFD library 移植问题解决了,下面只剩下 stack frame unwind 相关的几个函数,时间较多,心情较好,闲扯几句,以为笑谈。 */

《人生 Regression Test》上有1条评论

  1. 其实不论那种对象还是标准,只要最终能达到想要的结果就是了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注