1.2 未来发展趋势
正如1.1中所分析的,仅做业务手工测试、不懂系统实现的测试工程师的职业发展会越来越受限。
随着近几年敏捷开发盛行和DevOps浪潮的出现,整个软件开发行业正在发生重大变化,这对测试行业而言,既是挑战更是机遇。
在这个软件行业快速发展变化的时期,对于测试从业者来说,哪些方面是值得大家重视和持续关注的?
下面笔者结合自己近几年所感受到的行业变化,总结几点测试行业的发展趋势(仅供参考)。
1.敏捷测试+数字化改造
传统的软件测试方法将开发和测试视作两个团队、两种不同的工作模式,团队之间沟通有限,团队壁垒也尤为明显。在这种开发模式下,软件缺陷通常在项目后期才逐步被发现。而随着互联网产品快速更新迭代,用户的需求也在持续变化,在高强度的外部竞争和软件交付迭代频繁的大环境下,传统的软件测试模式已经不能满足需求。
敏捷测试则强调从客户的角度进行测试,重点关注持续迭代地测试新开发的功能,而不再强调传统测试过程中严格的测试阶段,同时提倡尽早开始测试。它强调开发和测试团队在合作、透明、灵活的环境下协同工作,以测试前移、持续集成、自动化等方式为优化手段,可以很好地适应需求变更频繁的软件交付。
采用敏捷方法进行数字化改造是一种最新的研发效能提升趋势。敏捷方法有助于将数字化转型的举措与业务需求相结合。在敏捷方法中,各种新的功能将逐步在每个Sprint阶段被交付。通过持续地提升产品各类数据指标来达成数字化改造的目标。在这种敏捷转型数据化提升改造过程中,敏捷方法实施成功的关键在于研发团队的高度自组织能力和自我驱动意识,以及自我超越的要求。如何充分发挥测试在其中的最大价值又是一大挑战。
2.精准测试
在当前互联网产业链快速发展的时代,企业为了抢占先机,版本发布日趋频繁,快速发布高质量的软件是很多企业的目标。在不少企业里,一天发布一个版本甚至多个版本也变成了常态,对于急于发布的软件,全量运行所有的用例往往需要花费较长的时间,这已经不能跟上产品发布的节奏。那么,如何避免过度测试并在时间、质量、成本中找到最佳的平衡?
精准测试可让软件测试过程可量化衡量、可追溯,清楚地展示出测试用例运行的路径,并可以实现测试用例与代码的双向追踪。对于代码量较大的软件,通过精准测试可以获取到曾经执行过某段代码的测试用例,当这部分代码进行修改后,只需执行对应的用例即可,大大缩短了测试的时间,加快了产品上线速度。因此精准测试成了近期软件测试技术的新方向之一。精准测试的实施对测试人员的代码开发、测试设计、需求理解、架构理解、自动化测试能力均有较高的要求。
3.人工智能(AI)测试
近年来,人工智能被越来越多地应用到IT行业,如智能汽车、智能家居和机器人等。尤其是2016年AlphaGo在围棋领域掀起一股热潮之后,人工智能成为人们热议的焦点。人工智能是一个新的领域,人工智能的测试方案和测试工具本身就具有较大挑战性。
纵观人工智能在软件测试领域的应用,利用人工智能来优化其他软件的测试,目前也取得了一定的进展。比如人工神经网络是软件测试领域使用相对广泛的人工智能技术之一,在OCR、语音识别、医学诊断等方面已经取得了很大的成功。在软件测试中,它非常适合GUI测试、内存使用测试及分布式系统功能验证等。
利用人工智能还可以优化测试工具,将软件测试的上下文与测试用例结合起来,选择最优的测试用例集进行测试。
虽然在测试计划与测试需求分析上,人工智能技术不容易代替人,但人工智能可以辅助人们进行分析,包括从自然语言的需求文档中学习、从已有的代码中学习、从运行日志中学习、从过去所发现的缺陷中学习,从而制定出更全面、更有效的测试计划。
4.云测试
现在很多测试服务提供商已经将测试服务部署到云上,这种方式有很多的优势。首先,它可以按需提供服务,用户可以根据需求灵活地使用云端资源,避免了传统测试中的资源浪费。例如,手机应用提供商可以通过云平台进行应用程序与主流手机的兼容性测试,而不必购买各品牌的手机。其次,云平台可以提供较为全面的测试环境和测试工具,节省了部署环境和工具的时间,使测试工程师可以将更多的精力投入业务中。再次,当云平台和容器技术结合起来时,可以快速构建可扩展、可伸缩的测试环境,并行执行测试用例,从而减少测试执行时间。
然而,云平台在近年来不断出现大面积宕机的情况,这对云测试技术提出了新的挑战,需要测试人员深入理解云平台底层、中间层和上层技术,构建符合云平台质量要求的测试工程并提出相应的质量保障方案。
5.安全测试
随着产业物联网的普及,智能家居、汽车电子等设备的网络化水平大幅提升,但物联网的安全问题却不容乐观,很多中小企业往往会忽视安全防护。
需要强调“安全是每一个人的问题”,互联网安全漏洞频繁爆发,使得安全问题已经成为每个产品迫切需要关注和解决的问题。这就需要将安全测试贯穿于软件开发的整个生命周期,给软件测试人员带来了更多的机遇和挑战,要求其具备更多的安全相关知识(其中还包括更多的计算机基础知识),掌握已有的安全测试相关技术,从而在软件开发的各个阶段做好安全相关的分析和测试工作。尽管有些团队已经将安全跟整个开发实践结合起来,但培养每个人在每个阶段的安全意识还是相当重要的,新的安全测试技术、方法还有很多可以探索的。
6.自动化测试
传统的自动化测试需要测试工程师直接编写测试程序,而这样的程序的可维护性往往不强,当开发代码变更时常常需要重新适配自动化测试程序。测试驱动开发是软件工程中的一个重要节点,即开发在提交开发代码修改的同时提交测试代码,但这种方式仍然需要较多的人力投入到测试代码的编写中。一些程序可以通过录制或符号执行等方法自动生成自动化测试代码,免去了手工编写的不便。另外通过埋点、Mock等技术还可以辅助自动化测试。随着测试业务日趋多样化,需要不断开发新的自动化测试框架、测试平台来满足业务需求。当自动化测试与云平台相结合时,可以方便地进行任务的迁移、回滚、故障自动修复等。
将越来越多的工作实现自动化是一切研发提能增效的基础。不管是以前、现在,还是将来,围绕自动化测试的应用将会越来越多,也会越来越智能。自动化测试是每个研发从业人员应该持续学习和探索的一项技能。
7.移动互联网测试
随着智能移动设备的普及,测试范畴也从智能手机、智能平板扩展至运动手环、车载联网应用、共享单车、无人机等事物。移动平台也呈现多样化趋势,每个平台的版本升级速度非常快。移动应用种类繁多,有社交、游戏、教育、办公、旅行、工具等类别。为了满足用户需求,热门应用的迭代更新非常频繁。面对众多的移动设备硬件型号、多个终端平台版本、繁多的移动应用、各应用的不同版本号,测试人员不得不制定新的测试策略和方案来应对。即使应用没有新的特性引入,自动化测试也不得不根据新的平台进行适配工作。而多种组合的测试对测试人员、测试工程能力、自动化测试提出了更高的要求。
目前已经出现了针对移动测试的自动化设备和SaaS平台,测试设备可以模拟出用户真实的终端操作方式。在SaaS平台中,使用者可以将应用提交到平台中进行全量的自动化测试,来确保应用的多个版本可以适配到不同的平台和硬件中。此外,测试领域中的专项测试,如性能测试、功耗测试、安全测试、兼容性测试、跨地域跨时区测试、老化测试,也将产生很大的测试需求。
8.容器化、DevOps、微服务测试
容器为开发、测试、运维三个团队提供一致的环境,避免了因为环境不统一产生的缺陷误报。同时使开发人员可以很容易地通过容器镜像复现测试人员和客户报来的缺陷。利用容器还可以避免环境污染,批量快速地启动多个测试环境并行测试来提高测试效率。DevOps通过成熟的自动化解决方案,同时配合容器、微服务技术,打通了开发、测试、运维团队之间的壁垒。随着容器、微服务时代的到来,掌握配置基于CI/CD的DevOps研发一体化流程成了测试人员必备的一项核心技能。
9.大数据测试
当前全球信息数据量增长迅猛,据市场调研机构IDC预测,到2020年,全球数据总量将达到40ZB,每人拥有的相当于一千张DVD光盘以上的信息量。如此大量的数据为测试数据的备份和管理带来了挑战,测试人员需要确认数据的完整性,保证数据质量。
随着大数据应用的快速增长,我们需要更快速地完成数据处理。大数据挖掘的目的是找出数据与数据的关系,与传统软件相比,很多大数据场景中的输出是无法直接确定的,同时数据又具有多样性,需要测试人员具备发散思维;面对爆炸式的数据服务,测试时需要搭建可伸缩的测试平台模拟大量的测试客户端。很多大数据场景下程序输出的不确定性、大数据结构的多样化、定位数据因果关系困难等问题给测试工程师带来了新的挑战。
10.利用机器学习进行测试
机器学习给各种工作流程带来了革命性的变化。在测试过程中:
机器学习可以被用在测试用例的优化上,通过机器学习识别分辨出那些冗余的和单独的测试用例。
机器学习可以被用在预测分析上,基于历史数据预测出软件测试过程中的关键参数。
机器学习可以被用在日志分析上,识别出那些需要自动执行的测试用例。
机器学习可以被用在缺陷分析上,通过对回归测试用例的优先级排序,识别某个应用中的高风险领域。
除了上面提到的应用机器学习的测试场景,以后还会有越来越多利用机器学习辅助测试工作的地方。
11.物联网(IoT)测试
物联网是一个包含大量网络设备、传感器和计算基础设施的庞大系统。物联网的应用覆盖了军事、家庭、医疗、零售等多个领域。使用场景复杂,解决方案多元,使得对物联网设备及解决方案的测试面临很大的挑战。
仿真:基于效率和成本的考虑,测试人员无法针对所有的物联网设备、连接协议及服务节点进行全面覆盖。依靠物联网场景仿真能力,测试人员可以在少量可用的物理设备上创建各类虚拟设备并建立不同协议的虚拟连接,从而模拟出真实应用场景,达到全面测试覆盖的目的。不仅能够节约时间和成本,还具有更好的灵活性和扩展性。
安全:当前物联网发展的重点是技术的创新、推广和应用,安全问题没有受到足够的重视。相对于传统移动互联网,物联网的规模、应用和服务都更加庞大复杂,安全问题无疑具有极大的挑战性。
自动化:在物联网领域,目前自动化测试工具和系统的发展还处于比较初级的阶段。在测试执行、场景构建、性能度量及状态监控等各个方面都需要有强有力的工具、框架和规范,来支撑复杂的物联网自动化测试。
知识小结
当前很多公司已经将基本的功能测试任务交由开发团队负责,测试人员主要专注于自动化测试开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试。这部分测试任务能够很好地体现测试人员的价值。虽然行业对测试的要求越来越严格,也有一些类似“测试已死”的说法存在,但只要把握好软件测试发展的趋势并凭借自身的努力跟上时代的发展,我相信测试人员是能够在行业中受到认可的。