作者 | 熊一衡 华东师范大学软件工程学院博士
苏亭 华东师范大学软件工程学院教授
版块 | 鉴源论坛 · 观模
图形用户界面(GUI) 是一种通过图形化方式呈现信息、数据、功能和操作的用户界面,旨在提供更加直观、友好、易用的体验,以满足用户的需求和期望。图形用户界面通常由窗口、菜单、按钮、文本框、图标、标签等组件构成,用户可以通过鼠标、键盘等输入设备进行交互和操作。GUI界面的设计和布局需要考虑用户的习惯、视觉效果、易用性等因素,以提供最佳的用户体验。
面向界面的图形化测试是一种常用的软件测试方法,旨在验证用户界面是否符合业务规范和用户需求,以及验证应用程序的功能是否正确响应用户操作,以保证应用程序的质量和稳定性。图形化测试通常在开发的中后期进行,可以确保应用程序的功能和用户界面的质量,提高用户体验,降低用户投诉和退款率。此技术可以有效地提高测试效率和测试质量,在各种应用程序的测试中得到广泛应用。
例如,如果一个用户访问京东商城的网站主页(https://www.jd.com/),他将看到导航栏、搜索栏、推荐栏和其他诸多组件。测试人员可以针对不同的关注点来对这个网页进行图形化测试。例如,点击“免费注册”按钮,网站是否能弹出相应的注册网页,包括导航、搜索、表单、购物车、支付等功能是否能正常响应用户操作。
通过图形化测试,可以发现应用中的问题和缺陷,提高应用的质量和用户体验,增强用户的满意度和忠诚度,从而提高应用的价值和竞争力。
2.1 基于人工的测试
基于人工的测试是一种传统的软件测试方式,测试人员通过手动操作应用程序的用户界面,模拟用户的行为和操作,来发现和报告应用的问题和缺陷。在实际应用中,应用系统级的功能性问题很大程度上是依靠人工测试找到 [1]。基于人工的图形化测试需要有经验的测试人员,能够全面地覆盖测试用例和测试场景。然而,测试的效率和准确性很大程度上受到测试人员的技能水平和经验的影响。基于人工的测试主要包括以下步骤:
(1)理解项目需求和制定测试计划:测试人员必须分析所有的需求文档,以便识别软件的预期行为和需要测试的确切内容。测试人员根据需求和规格说明书,制定测试计划和测试用例。
(2)测试环境和测试数据准备:测试人员准备测试环境和测试数据,包括安装和配置测试软件、准备测试数据、设置测试工具和设备等,以确保测试环境的一致性和稳定性。
(3)手动测试执行:测试人员按照测试计划和测试用例,手动操作应用程序的用户界面,模拟用户的行为和操作,包括点击、输入、选择、拖拽等,以验证应用程序的功能和性能,并记录测试结果和异常情况。
(4)缺陷报告和总结:当测试人员发现缺陷的时候,需要根据测试团队所制定的报告模版生成缺陷报告,包括缺陷的描述、缺陷分类、缺陷级别等等,并跟踪和确认缺陷的修复和验证。在测试完成之后,测试人员根据测试的结果生成测试报告并提交给项目团队。
基于人工的测试的优点包括:测试灵活性高,人工测试可以基于一个功能自己构建不同的测试用例,并且适应不同的程序表现;测试准确性高,自动化测试工具没有测试人员经验丰富,人工测试可以更加准确判断一个应用表现是否为一个程序错误;测试反馈及时,可以及时发现和报告软件缺陷和问题。
然而,基于人工的测试也存在一些缺点,如测试效率低,需要较长的测试时间和测试人员的工作量,当短时间内需要生成大量测试用例时,不适合用人工测试;测试成本高,相对于自动化测试,人工测试需要耗费大量人力和时间;测试可重复性差,测试结果可能受到测试人员的主观因素的影响;测试覆盖率有限,可能无法涵盖所有的测试用例和测试场景。
2.2 基于录制回放的测试
基于录制回放的测试通过记录用户在图形界面上的操作,生成测试脚本,然后回放测试脚本到目标应用上来模拟用户的操作并验证应用程序的功能。录制回放测试技术属于自动化测试的一种形式,不需要人工编写测试脚本,减少工作人员的工作量,适用于需要重复执行相同测试用例的场景,如回归测试、性能测试等。录制回放测试技术主要包括以下步骤:
(1)录制测试脚本:测试人员打开测试工具,启动录制功能,然后在应用程序的用户界面上进行操作和事件,如点击按钮、输入文本、选择菜单等,测试工具会自动捕捉和记录用户的操作和事件,并生成测试脚本。
(2)编辑测试脚本:测试人员可以对生成的测试脚本进行编辑和优化,如添加断言、调整等待时间、修改参数等,以确保测试脚本能够正确地模拟用户的操作和验证应用程序的功能和性能。
(3)回放测试脚本:测试人员启动回放功能,测试工具会自动执行测试脚本,模拟用户的操作并验证应用程序的功能和性能,同时记录测试结果和异常情况。
(4)生成测试报告:测试人员分析测试结果,包括测试通过率、测试覆盖率等,发现软件缺陷和问题,并向开发团队提供测试报告。
录制回放测试技术的优点包括:测试成本低,不需要会编写测试脚本的专业人员,测试效率高,可以根据测试人员的录制自动化生成测试脚本并自动执行测试;测试准确性高,可以模拟真实用户的操作并验证应用程序的功能和性能;测试可维护性高,可以快速修改和更新测试脚本和测试数据。
然而,录制回放测试技术也存在一些缺点,如测试脚本的可靠性和稳定性受到应用程序的变化和测试环境的影响,需要保证测试环境的一致性和稳定性;测试脚本的维护成本较高,应用程序代码和界面在不断变化,因此需要不断更新和优化测试脚本和测试数据来适应这些改变;测试覆盖度有限,依赖于测试人员的录制,测试人员一般偏向于录制一些核心功能和核心步骤。
Selenium IDE [2] 是Selenium Suite下的一款非常受欢迎的开源Web自动化测试工具,其核心功能是录制回放测试。它不需要用户有任何编程知识,只需记录用户与浏览器的交互从而可以快速地创建、执行和调试自动化测试脚本。Selenium IDE提供了一个简单的界面,可以通过简单的拖放操作和录制功能,快速创建自动化测试脚本,无需编写任何代码。它支持多种浏览器,包括Chrome、Firefo等。此外,Selenium IDE还可以导出测试脚本为多种编程语言的代码,如Java、C#和Python等。
2.3 基于模型的测试
基于模型的测试是一种自动化测试方法,它利用模型来描述被测试系统的行为和结构,从而生成测试用例,验证系统的正确性和可靠性。基于模型的测试可以提高测试效率和覆盖率,减少测试人员的工作量,适用于复杂和多变的应用程序,如嵌入式系统、软件系统、网络系统等。
基于模型的测试主要包括以下步骤:
(1)建模:测试人员使用建模工具,根据需求和规格说明书,构建被测试系统的模型,包括功能模型、状态模型、数据模型等,以描述被测试系统的行为和结构。
(2)模型分析:测试人员对模型进行分析和验证,包括模型检查、模型仿真、模型测试等,以发现和修复模型中的错误和问题。
(3)测试用例生成:测试人员利用模型生成测试用例,包括基于覆盖率的测试用例、随机测试用例、符号执行测试用例等,以覆盖模型中的所有路径和状态,并达到测试目标和测试要求。
(4)自动化测试执行:测试人员使用自动化测试工具,执行生成的测试用例,对被测试系统进行自动化测试,包括功能测试、性能测试、安全测试等,以检验被测试系统的正确性和可靠性。
(5)测试报告和总结:测试人员整理测试结果和问题报告,生成测试报告和总结,包括测试通过率、测试覆盖率、缺陷统计、测试建议等,以提供给项目团队和管理者参考和决策。
基于模型的测试的优点包括:测试效率高,可以自动生成测试用例和测试脚本,并自动执行测试;测试覆盖率高,可以覆盖模型中的所有路径和状态;测试可重复性好,可以多次执行相同的测试用例和测试脚本;测试结果准确性高,可以自动化地验证被测试系统的正确性和可靠性。
然而,基于模型的测试也存在一些缺点,如模型的建立和维护成本高,需要投入大量的人力和物力资源,并且需要建模人员非常了解待测试应用;门槛高,模型的构建需要有非常专业的建模人员,熟练使用各种专业技能 [3];模型的应用范围有限,可能无法覆盖所有的测试需求和测试场景。因此,在实际测试中,应根据测试需求和应用程序的特点,综合选择不同的测试方法和工具,以提高测试效率和质量。
Fastbot [4] 是一款由字节跳动Quality Lab研发的一款开源的基于模型的GUI测试工具,用于发现手机app中的稳定性问题。Fastbot将app的GUI信息抽象成模型中的state,将执行的动作抽象成模型中的action,然后基于构建的模型生成测试用例,并提供多种算法策略,目标是达到较高的 Activity 覆盖率及较强的问题发现能力。同时,Fastbot还支持跨平台测试,在海量设备上多机协同测试。Fastbot也利用了图像检测技术来支持较丰富的图像 UI 异常检测能力(黑白屏、图像重叠、控件遮挡等等)。
根据statista网站上的报道,48%的移动应用测试人员将图形化界面看作主要的测试关注点[5]。面向界面的图形化测试在应用的功能和质量起着至关重要的作用,在实际应用中也存在不少挑战:
(1)代码和设计变更:鉴于应用界面以及功能的频繁更新,测试人员需要不断调整测试脚本以适应新的测试场景。
(2)错误处理:当测试复杂应用程序时,可能会遇到各种程序问题,来干扰测试进行,如何处理这些问题是一个常见的难题。
(3)测试工具与被测软件的同步问题:测试工具与测试对象之间如果同步出了问题,很可能会导致测试失败,影响测试结果的准确性 [6]。
(4)依赖于测试工具:首先需要选用合适的测试工具,并对测试的应用进行相应的定制和配置。
(5)需要专业技能:需要具备一定的编程和测试技能,才能进行测试脚本编写和自动化测试工具的配置和使用。
(6)多样性:不同的软件界面设计不同,测试人员需要熟悉各种不同的界面风格和交互方式。
面向界面的图形化测试技术已经成为各种应用程序测试的重要手段之一。这种测试技术广泛应用于各种应用程序的测试中,特别是对于那些用户界面比较复杂、交互性比较强的应用程序,如游戏、手机app、网站等。此技术可以有效地提高测试效率和测试质量。尽管取得了巨大进展,但该测试技术仍然面临着许多挑战,学术界和工业界也在不断探索尝试各种新的技术和方法,以提高测试的效率和质量。
参考文献:
[1] Itkonen J, Mantyla M V, Lassenius C. How do testers do it? An exploratory study on manual testing practices[C]//2009 3rd International Symposium on Empirical Software Engineering and Measurement. IEEE, 2009: 494-497.
[2] Selenium IDE -https://www.selenium.dev/selenium-ide/.
[3] Dias Neto A C, Subramanyan R, Vieira M, et al. A survey on model-based testing approaches: a systematic review[C]//Proceedings of the 1st ACM international workshop on Empirical assessment of software engineering languages and technologies: held in conjunction with the 22nd IEEE/ACM International Conference on Automated Software Engineering (ASE) 2007. 2007: 31-36.
[4] Fastbot https://github.com/bytedance/Fastbot_Android.
[5] “Focus areas for testing mobile applications from 2013 to 2017” -https://www.statista.com/statistics/500605/worldwide-mobile-application-testing-focus-areas/.
[6] Alégroth E, Feldt R, Ryrholm L. Visual gui testing in practice: challenges, problemsand limitations[J]. Empirical Software Engineering, 2015, 20: 694-744.