移动应用软件测试技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 软件测试行业的机遇与挑战

1.软件安全性问题对测试提出了更高的要求

从孟加拉国银行8 100万美元被黑客成功盗取,到美国民主党的“邮件泄露事件”可以看出,网络安全事件已经被推到了风口浪尖。随着物联网的逐步普及,智能家居、汽车电子等设备的网络化水平大幅提升,物联网的安全却不容乐观,很多中小企业往往忽视安全防护。开源软件的源代码公开,黑客可以通过阅读源代码更容易地分析出软件的安全漏洞,使得网络安全迎来了新的挑战。当开源社区中发布出CVE漏洞时,需要厂商及时地加入补丁;否则将给黑客入侵敞开大门。新的编程语言的出现既提高了编码效率,也为软件产品增添了安全挑战,需要安全厂商尽快推出相应的安全工具和安全加固方案。以上种种,都对软件的安全性测试提出了新的要求,为软件测试行业的发展提供了机遇的同时也带来了挑战。

2.人工智能(AI)的发展对测试行业的影响

近年来,人工智能被越来越多地应用在各种行业,如智能汽车、智能家居和机器人等。尤其是2016年AlphaGo在围棋领域掀起一股热潮之后,人工智能更多地成为人们热议的焦点话题。人工智能是一个新的领域,其测试方案和测试工具还有待完善。对于人工智能在软件测试领域的应用,即利用人工智能来优化其他软件的测试目前已经取得了一定的进展,人工神经网络是软件测试领域使用相对广泛的人工智能技术之一。神经网络是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型,目前在光学字符识别、语音识别及医学诊断等方面已经取得了很大的成功。在软件测试中,它非常适合图形用户界面测试、内存使用测试及分布式系统功能验证等场景。

遗传算法是另一种软件测试中用到的人工智能技术,是模仿生物遗传和进化机制的一种最优化方法。它把类似于遗传基因的一些行为,如交叉重组、变异、选择和淘汰等引入到算法求解的改进过程中。该算法的特点之一是,它同时保留若干局部最优解,通过交叉重组或者解的变异来寻求更好的解。在软件单元测试中已知输入的参数的范围需要求解哪些参数的组合能够达到最大的代码覆盖率(也有些研究是能达到最大的路径/分支覆盖),因此遗传算法可以用于选择最优的单元测试用例,也就是单元测试的最优输入集;同时利用人工智能还可以优化测试工具,将软件测试的上下文与测试用例结合起来选择最优的测试用例集进行测试。

3.云测试——软件测试新模式

云计算是一种按需远程提供计算资源的技术,它可以减少用户基础设施投入并降低管理成本。为满足用户对云计算的性能、服务及安全方面的需求,测试人员需深入理解云平台底层、中间层和上层技术,构建符合云平台质量要求的测试工程能力和质量保障方案。

很多测试服务提供商已经将测试服务部署到云上,这种方式有很多优势。首先,它可以按需提供服务。用户可以根据需求灵活地占用云端资源,避免了传统测试中的资源浪费。例如,手机应用提供商可以把应用程序通过云平台进行主流手机的兼容性测试,而不必直接购买各品牌的手机。其次,云平台可以提供较为全面的测试环境和测试工具,免去了部署环境和工具的时间,使测试工程师可以将更多的精力投入到业务中。再次,当云平台和容器技术结合后可以快速构建可扩展、可伸缩的测试环境并行执行测试用例,从而减少测试执行的时间。

4.物联网的发展给测试行业带来的挑战

物联网是一个包含大量网络设备、传感器和计算基础设施的庞大系统,其应用覆盖了军事、家庭、医疗、零售等多个领域。物联网使用场景复杂、解决方案多元化,使得设备及解决方案的测试面临很大的挑战。

(1)仿真:基于效率和成本的考虑,测试人员无法针对所有的物联网设备、连接协议及服务节点进行全面覆盖。依靠物联网场景仿真能力,测试人员可以在少量可用的物理设备上创建各类虚拟设备并建立不同协议的虚拟连接,从而模拟出真实应用场景,达到全面测试覆盖的目的。这不仅能够节约时间和成本,还具有更好的灵活性和扩展性。

(2)安全:当前物联网发展的重点是技术的创新、推广和应用,安全问题没有受到足够的重视。相对传统的移动互联网,物联网的规模、应用和服务都更加庞大复杂,安全问题无疑具有极大的挑战性。

(3)自动化:在物联网领域,目前自动化测试工具和系统的发展还处于比较初级的阶段,在测试执行、场景构建、性能度量及状态监控等各个方面都需要有强有力的工具、框架和规范的出现来支撑复杂的物联网自动化测试。

5.敏捷测试——软件测试新方法

传统的软件测试方法将开发和测试视作两个团队的两种不同的工作模式,团队之间沟通比较有限,团队壁垒较为明显。在这种开发模式下,软件缺陷通常在项目开发的中后期才逐步被发现。近年来在客户需求频繁变化、高强度的外部竞争压力和软件交付迭代频繁的大环境下,传统的软件测试方式已经不能满足需求。

敏捷测试强调从客户的角度进行测试,重点关注持续迭代地测试新开发的功能,而不再强调传统测试过程中严格的测试阶段;同时提倡尽早开始测试。它强调开发和测试团队在合作、透明、灵活的环境中协同工作,以测试前移、持续集成、自动化等方式为优化手段,可以很好地适应快速、需求变化频繁的软件交付。

目前敏捷测试已经得到了行业内的认可,相信会有更多的公司进行敏捷转型,敏捷教练的薪水也会水涨船高。

6.自动化测试——解放软件测试工程师

传统的自动化测试需要测试工程师直接编写测试程序,而这样的程序往往可维护性不强,当开发代码变更时需要重新适配自动化测试程序。“测试驱动开发”是软件工程中的一个里程碑,即开发人员在提交开发代码修改时同时要提交测试代码,但这种方式仍然需要较多的人力投入到测试代码的编写中。而一些程序可以通过录制或符号执行等方法自动生成自动化代码,免去了手工编写的不便;另外通过埋点、mock(模拟)等技术还可以辅助自动化测试。随着测试业务日趋多样化,需要不断开发新的自动化测试框架、测试平台来满足业务需求。当自动化测试与云平台相结合时,可以方便地实现任务迁移、回滚、故障自动修复等功能。