周三上午,徐露发来文件。
「28份,」她在消息里写,「培训用的,字段结构完全按真实文件,数据全是虚构的——日期有的用「XXXX年XX月」,金额用「●●●●元」,机构名称用「某某检验机构」,证书编号我们改成了格式随机生成的字符串。」
陆衍把这些扫了一遍,「好,我们今天跑,结果出来发你。」
卫越下午两点多发来第一轮扫描结果:47条,高置信度3条,中置信度13条,分类层级2条,格式一致性4条,未填写无法核验31条。
陆衍看完停了一会儿,「31条「未填写无法核验」,」他发给卫越,「比例很高。」
「是,」卫越说,「我大概看了一下,主要是日期字段——大部分文件的日期用的是「XXXX年」这种占位符,工具识别到了日期格式但读不出数字,就判「未填写」。另外机构名称用「某某机构」,证书编号是随机字符串,这两个字段在正常文件里是可以匹配的,但现在匹配不了任何已知机构或格式标准。」
「所以那31条,」陆衍说,「不是文件本身有问题,是培训文件刻意留了空。」
「对,」卫越说,「这批文件的设计逻辑是「让学员发现问题」,所以它把问题放进去了,放的方式是删除或替换真实字段——这和真实文件里的问题恰好是相反的,真实文件里的问题通常是「字段填了,但填错了」,培训文件里的问题是「字段根本没有填」。」
「那高置信度那3条,」陆衍说,「你看了吗?」
「看了,」卫越说,「有一条是两份文件引用了同一份授权母文件,但引用的字段名不同——一份写「批准文号」,另一份写「核准编号」,字面不同但实际上对应的是同一个字段。这个不是培训材料故意设计进去的,是编排文件时没有注意到的真实格式差异。」
「也就是说,」陆衍说,「工具在培训文件里也发现了真实的矛盾——不是设计进去让人找的,是自然产生的。」
「对,」卫越说,「所以培训文件里有两种矛盾:一种是刻意的,设计用来教学员识别;另一种是不小心的,在拼凑文件的过程里自然产生。工具不分这两种,都报出来了。」
陆衍把这个想了很长时间。
他打给了徐露,「文件跑完了,有个情况需要解释一下。」
「说,」徐露说。
「结果有47条,但31条是「未填写无法核验」——是因为培训文件里用了占位符,日期、机构名称、证书编号这些字段都是虚构的,工具看见这些字段空着或者填的是识别不了的字符,就会报这一类。」
「那剩下16条呢,」徐露说。
「3条高置信度,13条中置信度,」陆衍说,「我看了一遍,这16条里有11条是你们培训材料里刻意设计进去的问题——比如有一份证书的生效日期比签署日期早了三个月,这是培训文件设计用来教学员识别时间矛盾的;另一份证书引用了一个版本号在证书签发日期之后才存在的标准,也是培训设计的。」他停了一下,「这些问题工具都找到了,但它们是设计好的,不是真实文件里自然出现的问题。」
「所以,」徐露说,「用培训文件测,工具会发现培训文件设计的问题,但这不能告诉我工具在真实文件上会表现如何。」
「是,」陆衍说,「培训文件和真实文件的失效方式不一样——培训文件是「设计错误」,把问题放进去让人找;真实文件是「遗漏或者疏忽」,问题是在正确的操作里不小心出现的。这两种文件的结构逻辑是反的,用一种测工具,无法预测工具在另一种上的表现。」
「那我需要拿真实文件来,」徐露说。
「脱敏过的也可以,」陆衍说,「只要关键字段是真实的——日期、版本号、机构名称这些需要是真实数据,其他的可以替换。」
徐露想了一下,「我们所有一个合伙人,他手上有几个上市公司的历史合规文件,是处理完了的案子,可以问一下能不能脱敏给我们用——这类文件客户已经结案了,数据不敏感,通常可以用来内部研究。」
「可以问,」陆衍说,「如果有三到五份,结构上代表这类文件的主要类型,就够测了。」
「好,」徐露说,「这周内我来问,下周给你答复。」
她停了一下,「28份培训文件的结果还有用吗?」
「有参考价值,」陆衍说,「高置信度那3条是工具自己发现的——不是培训材料设计进去的,是文件格式之间真实存在的差异,你们可以核实一下这3条是不是真实问题,如果是,工具在有真实数据的情况下的表现可以从这里推一点点。」
「嗯,」徐露说,「我让助理看一下。」
电话结束,陆衍在本子上写了今天第一行:
模拟文件的失效方式是「刻意的」,真实文件的失效方式是「自然的」——用前者测工具,只能知道工具能不能发现设计好的问题,不能知道它能不能发现真实世界里自己出现的问题。
卫越下午又发来一条:「那3条高置信度,我查了一下,有2条确实是文件格式之间的真实矛盾——两份文件里引用了同一份授权文件但引用的字段名不一致,这个不是培训设计进去的,是培训文件在拼凑结构的时候没有注意到的细节。」
「工具找到了,」陆衍说。
「对,」卫越说,「所以训练集里的问题它会找到,现实里那种不小心的问题它也会找到——只要字段不一致就报,不管是设计的还是不小心的。」
「这倒是好的,」陆衍说,「不分这两种。」
「不分,」卫越说,「这是优点不是缺点。」
陆衍把今天第二行写进去,比第一行短一些:
工具不分「设计的问题」和「自然出现的问题」——它只看文件里有没有矛盾。这件事在真实文件上是优点。
他放下笔,想了一会儿。
测试工具这件事,自己之前想的是「拿文件来跑,看结果对不对」;但徐露今天这28份文件让他意识到,「结果对不对」这个问题,首先要看用什么文件测——测试用的文件,和工具要处理的文件,如果来自两种不同的设计逻辑,测出来的结果就没有迁移性。
这件事不是徐露的问题,是他之前没有想清楚「测试」是什么意思。
下周徐露发来真实脱敏文件,才是真正的测试开始。