今年5月到8月我在腾讯CSIG事业群担任测试开发实习生,所在的部门主要业务是腾讯会议的测试,发版工作。而我在这里的主要任务是开发和维护一个用于腾讯会议虚拟用户模拟和压测的工具。
关于测试开发,这是在学校几乎接触不到的岗位,在校学生也只能在搜索引擎上找到这个岗位的零星描述。主要原因在于软件测试人员,测试开发似乎是软件工程发展的必然产物。当在校的学生主导的编程项目从代码行数或者功能模块数目的这种非常客观表面的指标来看,项目的体量小,项目也几乎不需要迭代,编程项目应用场景单一等原因。他们感知不到软件开发为什么需要当做一个“软件工程”来看待,也不知道软件的质量对于大公司的产品来说有多么的重要。
在会议这边我不承担业务测试,三个月的实习时间,我花了2个半月的时间都在开发和维护这个腾讯会议虚拟用户模拟和压测工具。工具基本框架是会议后台的同事开发的,工具的原理是通过在Linux端调用会议后台开放的RestAPI来实现入会/退会/开麦/开摄像头等操作,这样可以通过进程来模拟真实用户在会议房间里的操作。这个工具在压测场景中用的最多,当时会议在测试可以容纳300人的房间和2000人的大房间,同时在数百人开了视频上下行的场景下测试其它功能,这些都需要用到这个工具,同样在测试人员一般的功能测试中也需要用到这个工具。
在我接手这个工具的时候,这个工具确实粗糙得很,只有基本的功能,无文档,无注释,我对会议后台的业务逻辑也不熟悉。非常迷茫,愣是硬着头皮啃这一大堆C++代码,试图理清工具的架构,还有会议后台的一些基本业务逻辑。一个星期投入下去,感觉云里雾里,两个星期投入下去,觉得有点东西,中间找开发工具的原开发人员讲解了代码一次,碰到不理解的地方就攒起来问题,定期去找开发咨询。很多时间我基本上和腾讯会议的后台开发沟通,学习和了解一些腾讯会议后台模块功能(参加过一次腾讯会议后台架构的宣讲会),这样我才能理解工具的架构和工作原理。
我的mentor对我最基本的要求:①就是理清工具的架构,②是希望我能够增加这个工具一些没有的功能,比如说因为这个工具还是2020年年初写的,众所周知腾讯会议在2020年上半年的发展非常迅速,号称100天迭代了20个版本,所以相应的压测工具也必须得跟上迭代,实现虚拟用户可以控制是否带着视频流,音频流的进入会议和退出会议。在我研究工具的时候我还发现一些工具存在的毛病,比如说工具在正式环境,测试环境,预发布环境都会有使用,但是工具中不同环境的配置信息都以硬编码的形式写死在了工具了,当工具的其它部分需要更改完,那么一次需要编译三个环境的工具代码,然后将工具的三个环境版本重新部署在服务器上。如果能把硬编码的代码部分去掉,把环境的编码部分做成配置文件,这样可以降低工具和环境的耦合度,那么对后续的工具开发和维护都很好。大约在七月底的时候我就把音频这个功能加入到了工具里,视频部分的代码原来的工具里面其实已经有了,然后我把这部分的代码让它执行起来。总的来说,在开发方面,我完成了既定任务的开发,还在开发的过程中,把一些不合适的地方给改掉。在工具的维护方面,在这几个月中,我把我踩过的坑,一些代码的关键逻辑全部写在工具的文档中,同时我还在组会上分享了以工具的模块逻辑和设计做了一次技术分享。
在工具的开发维护过程中,我深深的为信息的不对称叫苦不迭。那这种信息不对称是什么呢,前面提到了工具是由测试组来维护,那么这个工具和腾讯会议的后台有很多联系,测试组的工程师就会不了解腾讯会议的后台。常说的熟悉业务熟悉业务,为了完成这个项目我是真的熟悉了很多会议后台业务。然后就是会议的后台经常发生变化,比如说一些环境的关键秘钥,一些关键字符串发生了变动就会使得工具这边功能就会不正常,这个时候我就常常需要去排查原因,然后把问题一步一步的定位,再找后台同事找找会议后台对应的模块是不是发生了变动,这一来一回就会花费很多时间定位问题,给别的同事描述清楚问题也需要付出沟通成本的,所以会议后台发生的变化,在工具这边无法感知到,是工具维护者的一个麻烦,不过好在随着我对工具的越来越了解,我定位问题也会越来越轻松。后来实习答辩的时候,总监还问我有没有自动定位问题的方法,我说我只能靠我自己去定位问题,因为我无法去打破后台和测试这边的信息代沟,只能对工具的了解程度和业务熟悉的程度越来越高,问题才会越来越快被定位清楚。测试工具这边也有发现后台程序缺陷的例子,有一次我们按照预期更改了虚拟用户加入会议的app版本号,这个版本号决定了会议的房间人数能超过300个,但是我们发现在会议的后台虚拟用户的版本号发生的变动,然后会议的房间人数一直无法超过300个,排查到后台的发现后台的逻辑会把这个版本号替换成另外一个版本号,然后后台这边及时的修改了这个逻辑。这样发现后台程序的缺陷还有几个例子,能够在压力测试之前就能够发现后台程序的缺陷还是挺酷的。
现在回想起来,我在这段实习经历中不仅仅是有技术上的提升,我认为我从一个学生的角色成功转换成一个员工的角色,我也在这段经历中一度感到绝望,感觉无法完成这个项目,从一开始害怕和别的组的同事沟通问题,到后来和后台开发组的同事结下了良好的关系,和后台的同事一起联手解决bug,即便是跨组也能很自如的沟通问题,能够主动协调同事来解决项目遇到的问题。我学到了很多很多,有两点最值得提:①不要害怕困难的项目,积极迎接挑战,协调资源一起来解决。② 高效沟通,沟通能力对于程序员来说非常非常重要,甚至和编程能力一样重要。
这三个月的努力最终也在实习答辩中收获了leader和部门总监的一致欣赏,但是我觉得我在这三个月中做得还不够好。