现在自动化的测试应用越来越广泛,很多团队都想通过自动化的测试去替代传统的人工测试,AI技术在目前非常火热,AI可以为我们的自动化测试带来哪些创新实践?下面的系列文章将会与大家一同分享基于AI的自动化测试相关内容。本文先为大家介绍一下新的时代背景下,软件测试面临的挑战。
首先我们来看一下软件的变化。从软件的形态来讲,我们可以发现,软件的形态越来越多。从介质上来讲,软件介质已经不再仅仅局限于传统的基于BS或者APP的PC、手机、平板等等这些常用的软件介质,现在已经有越来越多的智能设备,像在银行里有很多智能的自助终端的设备,还有各种可穿戴的设备,像智能手环、智能手表,智能眼镜,还有很多在工业界用到的很多传感器设备,他们都集成了很多软件。
在软件协议方面突破了互联网原有的传统协议,现在有越来越多的物联网、工业互联网、车联网等相应的软件通信的协议。这也为软件测试带来了很多新的挑战。
在软件展示方面,传统的可能是基于PC或者手机的UI界面,现在越来越多的软件是通过VR、AR、语音等方式去展示或者与人互动。
在软件速度方面,我们现在用到的开发的技术都在加快开发的速度,像微服务技术的使用,通过微服务,我们把整个开发的范围模块可以划分到非常小,开发起来的工作量相对传统的软件模块开发要少很多。
另一方面,低代码的开发平台的引入,像微软这样的软件领域巨头、国内BAT都在研究低代码的平台,也有很多创业公司对于低代码做了很多平台,在各个行业里,像工业互联网,也有很多低代码的平台。通过这些低代码平台,对于开发人员的要求就会低很多,编码的工作量就会少很多,相应的开发速度就会快很多。
再一方面是迭代的速度,开发速度的加快也使得迭代的频率越来越高,迭代的速度也越来越快。特别是像过去几年,像敏捷开发、DevOps这些开发理念的广泛应用,很多互联网公司都在使用DevOps这种模式去进行更敏捷的需求开发,它的迭代甚至可以达到每天发布好几个版本。像亚马逊,它一天的版本发布量非常大,一天就要发布非常多的版本。
再就是响应的速度,像APM这种软件的广泛应用,可以帮助我们监控到软件的客户端,无论是APP也好,浏览器也好,软件的服务器端、数据库等等相应的性能的指标都会被时刻监控到,可以帮助我们提升响应的速度。
另一方面,基于云原生的响应的技术,通过容器、微服务等一系列的分布式的架构,我们整体软件系统的响应速度越来越快。像双十一、618这种高并发量的场景,现在的系统响应也是可以达到非常快的响应速度。
第三方面是软件的架构,软件架构从现在的发展来看,整个规模量级较以前有了非常大的增长。首先微服务的量级是非常巨大的,不用说头部的这些互联网公司,在一些信息系统用得比较多的,像航空、银行...他们的微服务的量级也是非常大的,可以达到成千上万的量级。
微服务量级的增长,同时带来的是部署集群的量级的增加,容器的广泛使用,使整个集群的每个单元变得更小,单元的数量就会增多。
再就是整个架构复杂度的提升,现在越来越多新的技术正在不断落地,像过去几年一直提到的大数据、人工智能、区块链、云计算等等,越来越多的软件和这些新的技术进行了结合,这些技术所带来的架构的复杂度也会有一个显著的提升。
最后就是部署的复杂度,现在越来越多地用到云计算技术来做底层的架构,像容器、Serverless...这些云计算相关技术正在被越来越广泛地使用。整个部署起来对每个部署单元的稳定性的要求、敏捷性的要求就会越来越高,复杂度也变得越来越高。像Serverless技术,已经使整个软件的部署响应速度达到了秒级甚至毫秒级、运行的内容到了程序方法级,部署的整体复杂度就会比原来高很多。
软件组织方面,从软件组织的规模来讲,越来越多的软件的使用者选择用自研的方式去组织自己的研发队伍,对于一些大型的公司,除了自研团队之外,还有大量的研发工作需要外包出去,无论是自研也好,外包也好,整体组织的规模是不断扩大的,相应地就会带来一些管理上的问题、协同效率等方面的问题。
在组织的协同方面,我们的很多软件应用跨部门、跨组织的形式越来越多,一个软件系统通常不是只为一个部门服务,可能会跨多个方面。不同部门下面的不同组织也要去进行协同,去共同承担软件开发、软件测试、软件运维等一系列的工作。
再一方面就是人员,人员招聘的难度比原来提升了非常多,人才的培养也很难,人来了单位之后,技术能力的提升、整个培养过程是非常慢的,很多基础的知识都需要从头开始培养,对于公司来讲,人才培养的成本也越来越高。
软件质量要求的提高,比较典型的像用户体验,基本上每个软件的产品经理都会反复去提到用户体验。对于一些自研软件,可以通过引入探针的方式去进行用户相应操作的信息的获取,去关注用户对哪些内容、哪些功能最关注,特别是互联网的一些应用,需要时时刻刻关注用户对哪些内容、哪些功能是最为关注的。
对于一些外包的软件,通过探针方式去进行控制是比较难的。有时候外包开发的软件,无论是购买了一个软件产品还是去定制化地开发一个软件系统,这时候加入一些探针是有一定难度的,会受很多条件的制约。
另一方面是安全性,因为软件应用越来越广泛,同时软件存储的数据的价值越来越大,带来的相应的安全风险也越来越高。包括政治安全风险,比如说国与国之间,基于政治的考虑,进行信息的窃取、攻击,去获取一些国家或者军事上的机密,这种事情也是越来越多。
再就是商业安全的风险,随着数据被广泛应用,这其中很多数据是具有商业价值的,无论是竞争对手还是企业内部人员都有可能存在这种风险,比如说内部人员造成的信息的泄露,还有竞争对手对你的商业数据的窃取,都是随时存在的潜在风险。
还有灰色产业,随着信息化、数字化水平的不断提升,整个灰色产业也的得到了很大的发展,越来越多的黑客去进行数据和信息的窃取,或者利用安全攻击去进行要挟,灰色产业带来的风险也越来越高。
最后是性能和可靠性,因为软件系统的重要性程度越来越高,相应地要求弹性和可靠性也越来越高。我们现在有不间断的促销的活动,还有一些大的节日节点,无论你是电商行业,还是其他类别的行业,都有这种临时弹性的需求,对软件系统的弹性要求也是越来越高。现在微服务技术额盛行也是解决了对弹性的需求。基于云的基础架构也可以帮助我们去应对这种弹性的业务量的增长。
再就是业务的连续性,因为软件系统的重要性越来越高,对连续性的要求也越来越高,业务系统肯定是不能中断的,哪怕是中断几分钟,可能带来的业务损失可能是几百万上千万的经济损失,对于大型的金融等互联网业务系统来讲,业务的连续性要求是非常高的。