|
2023年深秋,全国南京江宁体育中心的大学场馆里,空调开得极足。生软试大赛我坐在观众席上,全国看见前排一个戴黑框眼镜的大学男生,手背上的生软试大赛青筋因为握鼠标太紧而凸起。屏幕上,全国他负责的大学模块刚通过第17个测试用例,还剩3个。生软试大赛裁判的全国脚步声在过道里来回响,像某种倒计时的大学节拍器。 全国大学生软件测试大赛,生软试大赛说白了,全国就是大学让一群还没毕业的学生,在限定时间内找出软件里的生软试大赛漏洞。听起来简单?可当你面对的是一个由真实企业提供的、包含数万行代码的系统时,那种感觉更像是在深夜的迷宫里找一扇没有标记的门。有的队伍半小时就找到了入口,有的队伍直到结束前五分钟才猛然拍了一下桌子——找到了,但提交时间已经过了。 我认识一个去年参赛的选手,他叫陈默,西安某高校的。备赛那两个月,他每天在实验室待到凌晨两点,对着一个开源的电商平台反复折腾。他说最崩溃的不是找不到bug,而是你明明觉得某个功能有问题,却怎么也复现不了。有一次他盯着一个支付接口看了三天,最后发现是数据库里一条记录的时间戳格式不对。就这一个小问题,让他错过了当天的晚饭。 比赛现场,气氛比我想象中更紧绷。每个队伍面前三台显示器,一台写测试脚本,一台跑自动化工具,还有一台专门用来查文档。有个女生在调试一个并发问题,她不停地切换窗口,额头上渗出了细密的汗。裁判走过来提醒还剩15分钟时,她突然笑了,然后重重敲了一下回车键——日志里跳出几行绿色的“PASS”。她旁边的队友几乎是从椅子上弹起来的,差点碰翻旁边的水杯。 这场比赛的残酷之处在于,它考察的不是你会不会写代码,而是你会不会“怀疑”代码。写代码的人总有一种惯性,觉得自己写的逻辑是对的。但测试恰恰要求你从反面去想:如果用户输入了超出范围的数字怎么办?如果网络突然断了怎么办?如果两个请求同时到达怎么办?这种逆向思维,很多在校生根本没训练过。我见过一支队伍在答辩环节被评委问住,因为他们只验证了正常流程,却漏掉了异常处理路径。评委的话很直接:“你们找到了20个bug,但漏掉了那个会让系统崩溃的第21个。” 不过,也有让我眼前一亮的瞬间。去年有一支来自三本院校的队伍,他们用的工具并不高级,甚至有些脚本写得略显笨拙。但他们对一个权限漏洞的挖掘思路特别巧——通过修改HTTP请求中的cookie字段,绕过了前端验证。评委说,这个思路虽然不复杂,但能想到去尝试的人很少。那支队伍最后拿了二等奖,领奖时队长说话声音都在抖:“我们学校没有专门的测试课程,全靠自己看视频学的。” 比赛结束后,我走出场馆,看见陈默在门口抽烟。他今年没参赛,但来了现场。他说自己去年只拿了省赛三等奖,但正是那次经历让他决定转行做测试开发。“写代码是创造,测试是破坏。但破坏比创造更需要耐心。”他弹了弹烟灰,又补了一句,“而且,破坏成功的那一刻,真他妈爽。” 或许这就是这个比赛最吸引人的地方——它把“找茬”变成了一种竞技,让那些习惯在幕后挑错的人,也有机会站在聚光灯下。输赢固然重要,但更关键的是,你开始学会用另一种眼光看待软件:它不仅是功能的堆叠,更是一堆等待被质疑的逻辑。这种眼光,比任何奖项都更早地教会你,什么叫“质量”。 |