“早在很久以前,几千行代码就能写出一个软件来,比如WPS,CCED这些软件。但随着网络时代的到来,分布式系统的发展,软件系统越来越重视交互和协 作,多个模块服务的交叉调用,网间的交互安全等等,这大大提高了软件系统的复杂度和规模。Oracle曾经开发过一个邮件客户端Outlook的插件,这 个插件是安装在outlook上,提供一些常用功能,比如收发mail,calendar创建等等。但oracle的测试部门仅仅为这个插件就设计了 6000多个test case!这个数目是如此巨大,使得测试执行和产品周期产生了深刻的矛盾。这个矛盾体现在:当每个新版本发布时,如果做一遍完整测试,一个人手工测试执行 一遍6000多个test case就要半个月,而产品版本的发布周期也就一周左右,也就是说测试的速度远远跟不上产品的发布速度。在这种情形下,如果没有自动化测试帮忙,手工测试 只能望洋兴叹了!”
其实文中,每次新版本的发布,可以理解为一次回归需求,而在大部分时间里,回归总是重复而又繁琐的,我们将花费大量的工时用于做一些令人厌倦的回归测试。
而本文所提出的系统,是为了解决平时大量的回归任务,解放测试工作量。系统将学习线上的用户行为,然后在一个特定的环境里,模拟执行用户的操作,最后生成分析报告。
系统模型如下:
在线上环境中,大量的用户会发生大量的操作。
学习系统会去采集这些操作,并对这些操作进行分析,最终产生自动生成脚本所需的数据源。
解析系统获得数据源后,生成脚本。
回归系统在特有的环境中,执行这些脚本。
这是一个持续集成的过程,模仿线上用户行为,然后在回归环境中执行这些行为。该策略主要用于日常的回归,和对线上环境的模拟监控。
优点和好处:
1. 能处理功能改造、功能优化、相邻功能变动所引发的回归需求。
2. 用例生成和执行脱离手工,释放工作量。
3. 真实模拟线上用户行为,保证主要功能点的覆盖。
4. 持续集成,及时反馈问题,减少测试工作量。
问题的提出:
1. 对于新增功能点,线上无法采集到用户操作,不能进行测试,只能对现有的功能进行回归。
2. 线上用户操作数的数据量非常大,生成脚本时过程中对相同操作的筛选成为问题。
3. 怎样进行用户操作的采集,成为一个很棘手的问题。
4. 如何自动生成脚本,同样是一个棘手的问题。
解决方案:
目前还未想出完美的解决方案,初步想法是采用人工智能技术,让机器自主去线上环境学习,通过学习积累出知识库,然后通过知识库生成脚本。
本系统自动生成脚本、自动更新脚本,重点在于释放了测试人员在编写脚本和维护脚本中的工作量。并在真实模拟线上操作这点上,保证测试覆盖率。
目前我们还处于yy阶段,还不知道如何去实现,但只要认准方向,就不怕路远。相信通过大家的努力,一定能解决各种技术难题。