[软件测试][移动端测试概念及流程][学习笔记]
1.移动端平台和应用软件介绍
移动软件与传统桌面软件不同,它运行在手机、平板、智能手表、电视、汽车终端、家电等设备上。目前市场上主流的两大移动端平台是Android和iOS。
1.1.Android
Android是一个基于Linux内核和其他开源软件的修改版移动操作系统,是免费的开源软件,其源代码称为Android Open Source Project(AOSP),并主要以Apache许可发行。主要为智能手机、平板电脑等触屏移动设备设计。Android由称为"开放手机联盟"的开发者联盟开发,有谷歌公司商业赞助。Android系统在2007年正式推出,谷歌公司在2008年9月推出了首款商用Android手机。自2011年以来,Android一直是全球最畅销的移动操作系统,拥有最大的用户群。
1.2.iOS
iOS是由苹果公司专门为其硬件创建和开发的移动操作系统,也是苹果公司后续推出的其他三个操作系统(iPadOS、tvOS、watchOS)的基础。iOS的主要版本每年发布一次,自2007年第一代iPhone推出以来,iOS是许多苹果移动设备的操作系统。
1.3.移动应用软件的主要特点
移动应用软件一般通过图形用户界面操作和传感反馈作为主要的软件交互方式。以Android应用软件为例,其主要特点包括:
1.3.1.多样交互方式
用户主要通过直接点击完成任务,其他操作包括滑动、轻击、捏合和反向捏合、虚拟键盘等方式与移动软件进行交互;也可以通过蓝牙或USB支持的游戏控制器、全尺寸物理键盘实现交互;可以通过语音实现交互;甚至可以通过内部硬件(如加速度计、陀螺仪和距离传感器等)实现交互。总体来说,由于移动应用软件运行在移动设备上,交互方式和环境多样复杂。
1.3.2.多样的移动设备
过去十多年内,Android系统版本不断演化,已经拥有超过十多种不同的系统版本。在同一时期里,市场上往往同时存在运行着不同系统版本的移动设备。与此同时,由于第三方厂商也会根据自身硬件定制和修改Android系统,设备多样性问题更加突出。Android移动应用软件也因此不得不兼容不同系统版本和硬件(比如不同的屏幕大小、分辨率等),否则会出现在某些移动设备上无法运行或出错的问题,该问题被称为设备碎片化。
1.3.3.快速的软件版本迭代
移动应用软件面临巨大的市场竞争压力:用户往往对软件功能和内容非常挑剔,质量不好的软件很容易被用户替换掉。为了提高市场竞争力,适应用户和市场需求,移动应用软件的新版本迭代速度明显快于桌面软件。
1.4.移动应用的主要测试方法和现状
在移动应用软件行业,人工测试仍然是开发人员和测试人员使用最普遍的测试方法。人工测试比较灵活,能够快速验证软件功能正确性,但往往人力成本较大,测试效率较低。因此,脚本编程测试是业界广泛使用的替代方案。
脚本编程测试的主要方法有两类:1,利用测试脚本编程框架和接口编写测试脚本,然后交由测试框架实施自动测试执行和功能检查。2,利用录制回放工具自动化记录和执行测试脚本。
1.4.1.脚本编程测试
这种工具提供两类编程接口:一种用于获取与用户界面相关信息的接口(例如获得屏幕上某些控件的层次结构),另一种是模拟用户与设备交互操作的接口。通过利用两种接口,开发和测试可以手工编写用户界面级别的测试脚本。主要是通过适当的脚本执行位置插入一些测试预言,从而检查软件的功能是否正确。可以重复利用,提高效率。
1.4.2.录制回放工具
这类工具主要用于替代手工编写测试脚本,但依赖于自动化框架。降低了编写测试脚本的学习门槛,使得开发和测试能够轻松编写高质量的测试脚本。不少此类工具能够支持复杂的用户事件和精确控制事件执行的延时。为测试复杂应用场景提供了便利。
1.5.局限性
1.5.1.脚本测试局限性
最突出的问题就是软件的用户界面经常变化,因此测试人员更倾向于手工测试。其次,通过录制生成的测试脚本受限于录制时移动设备的屏幕大小和分辨率,在没有任何修改适配的情况下,生成的脚本很难直接运行在不同屏幕大小的其他设备上,这点恰好是自动化测试框架可以轻松解决的。脚本编程测试依赖于开发或测试在适当位置插入测试预言用于检查软件功能正确性,仍然需要人工参与。
1.5.2.网络基础设施和架构多样性
现代的移动应用大部分都需要联网,而网络在软件使用过程中可能会发生变化,比如在4G、3G网络模式下自动切换。用户在不同的位置,网络设施的稳定性也不同,比如网络延时、网络掉包、网络服务中断等也会对移动应用造成影响。
1.5.3.移动设备多样性的挑战
由于Android系统每年都更新,第三方移动厂商也会根据硬件和软件需求对Android系统进行定制,因此在同一时期市场上存在许多不同系统版本、不同型号和屏幕大小以及不同厂商定制的移动设备。这对移动软件的质量保证也带来了很大的挑战。
2.移动应用软件测试
移动应用软件是一类以事件驱动为主要特点的软件,在实践中,测试人员需要从多方面对移动应用进行测试,从不同角度对软件质量进行评估,包括功能测试、性能效率测试、易用性测试、信息安全测试、可移植性测试和网络测试等。前五个以质量特性角度考虑,最后一个网络测试从软件的特点考虑。
2.1.功能测试
2.1.1.测试目标
功能测试一般通过对被测软件的特定功能执行对应的测试用例,得到实际测试输出后与预期输出进行对比验证,检查软件功能是否正确且符合预期。预期输出一般来源于功能需求说明。功能测试属于黑盒测试,测试过程中不关注代码实现细节。也就是功能测试不关注某个模块或者类的函数是否实现正确,而是关注整个软件系统中的某一部分功能是否正确。比如,对于一个记事本的应用程序,一个功能测试用例可以是验证该软件是否能正确创建、编辑、删除一个或某几个文件。
2.1.2.主流的测试方法
目前业界普遍采用两类测试方法:
1,手工测试,即手工模拟用户可能使用的场景,结合开发或测试自己的知识和经验,观察验证软件是否存在缺陷。由于移动应用主要以用户界面事件为主要输入,因此手工测试为普遍使用方式,优势是直观灵活,劣势是规模较小,容易遗漏。
2,自动化脚本测试,即对待测应用事先编写测试脚本,包括测试用例和预言(即刻画测试预期输出的软件功能检查语句),然后借助测试集成框架实现脚本自动化。这类方法也是普遍使用的一种,可以减少重复手工测试的成本,提高效率。
2.1.3.代表性测试框架和工具
目前有很多不错的脚本测试框架和工具,以及测试脚本录制回放工具支持自动化脚本测试。主流的有Robotium、Appium、Calabash等,都支持Android和iOS;针对Android,谷歌公司官方开发了Espresso、UiAutomator等脚本测试框架。这些工具一般采用广泛使用的语言(Java、Python等),并提供了相应的API供测试编写脚本,这些API可以直接模拟用户操作与应用软件进行交互,也提供了测试预言检查的API,供测试人员编写测试结果检查语句。也有录制回放工具例如Appetizer、Espresso、RERAN等。
2.2.性能测试
2.2.1.测试目标
性能测试是非功能性测试,主要关注应用能否提供流畅的用户体验。性能测试事实上涵盖了多方面的性能考量,包括:
1,设备性能,主要关注软件启动时需要的时间,以及运行时对设备资源的耗用情况,比如使用过程中的电池续航时间、内存消耗、CPU占用和发热量等等。
2,服务器/API性能。如果待测应用需要和后台服务器交互,那么服务器/API响应时间对应用软件的性能影响就很大。测试需要关注与服务器之间传递数据的效率、从软件传递的API请求数量,服务器发生故障时应用的响应策略的性能。
3,网络性能,对于需要联网的设备要关注网络阻塞、丢包、网络速度、端到端延迟时间等因素对性能的影响。
2.2.2.主流的测试方法
性能测试影响的因素较多,一般性能测试需要人工参与观察和统计,基本步骤为:
1,测试人员需要事先对待测应用的功能有充分的理解;由于性能测试执行时需要对某些类或函数进行监控,因此测试人员还需要对软件代码的相关接口有了解。
2,选择移动应用需要兼容的不同设备和系统版本。
3,构建测试脚本(脚本需要覆盖主要功能和使用场景)。
4,选择合适的性能监测工具进行测试,如监测内存占用、用户界面帧刷新率、网络响应时间等。一旦发现明显的性能问题,逐步定位问题根源。
2.2.3.代表性测试框架和工具
在性能测试过程中,由于需要通过遍历应用软件的主要功能来监测各项性能指标,因此功能测试的相关工具都可以被使用。监测具体性能指标过程中,常用的工具有Android Profiler,该工具可提供实时数据,帮助了解应用的CPU、内存、网络和电池资源使用情况,帮助定位用户界面过度绘制、CPU使用热点等问题。
2.3.易用性测试
2.3.1.测试目标
易用性测试(Usability Testing)主要用于检测软件系统的易用性和用户友好性。主要的测试方法是通过让一小部分用户"使用"软件以发现潜在的易用性缺陷。该测试主要评估待测软件的可用性、用户操作的易用性(比如界面的复杂程度、操作引导是否直观),以及是否满足用户任务,也称用户体验测试。易用性测试的目标是,在开发周期的早期识别出系统中的易用性错误,避免产品出现错误。主要关注以下几方面:
1,软件有效性:是否能快速上手使用?内容、颜色、图标是否让人看上去舒适?
2,软件使用效率:用户是否能快速达到想要的功能?是否能够快速搜索出需要的内容?
3,软件内容的准确性:软件提供的信息是否为最新的(是否存在失效的链接、过时的通讯地址、联系方式等)。
4,界面的友好性:功能是否直观?是否提供了简单快捷的教程?也需要额外关注可访问性测试(Accessibility Testing),确保软件可供听力、色盲、老年等其他特殊群体使用。无障碍功能测试属于易用性测试的一部分。
2.3.2.主流的测试方法
易用性测试与实际用户体验相关,开发和测试不能以模拟用户的方式参与测试评估,而是以观察员的身份通过观察实际用户使用情况检查潜在的易用性缺陷。主要有两类测试方法:
1,实验室环境的易用性测试。该测试方法一般在观察员在场的单独实验室中进行,首先观察员为受测人员分配任务,观察测试行为并报告测试结果。观察员与受测用户相同物理位置
2,远程易用性测试。观察员与受测用户不同物理位置。受测人员可以远程访问被测软件并分配任务。受测人员的声音、屏幕活动、面部表情均由自动化软件记录。是否观察员分析数据并报告结果。也有一些可以形成自动化测试的方法,将部分测试(如界面色差对比度、字体大小等)编写成测试工具。
2.3.3.代表性的测试工具和服务
易用性测试一般在企业中通过招募部分软件用户实地完成(即实验室环境的易用性测试),也可通过一些第三方服务完成(远程易用性测试)。在自动化易用性测试方面,一些工具通过生成"触摸热图"来支持易用性测试。"触摸热图"用于汇总与应用交互的各种手势(点击、滑动、缩放等)的所有数据,然后将数据以热图形式呈现。这样观察员就能看到进行交互的具体地方和使用频率。
2.4.信息安全测试
2.4.1.测试目标
移动应用的安全性测试重点关注身份验证、授权、隐私数据安全性、下载包防篡改以及安全漏洞和会话管理等。从测试周期上看,安全性测试会在移动应用的整个生存周期的不同阶段(设计、开发、部署、升级、维护)使用不同的技术来暴露相关安全威胁。
2.4.2.主流的测试方法
根据开发的不同阶段,主要包含以下的一些安全性检查和测试方法:
1,设计审查。在实际实现代码前,通过对照应用场景相关的风险模型,检查设计层面的安全性。比如开发金融类软件时,可检查选择的加密算法是否合适、防篡改设计是否完备。这类检查方法可在开发的初始阶段避免引入软件安全隐患。
2,白盒代码安全性审查。由安全工程师通过查看审阅移动应用的代码,发现潜在的安全威胁和漏洞。这类方法能发现特定应用相关的安全漏洞。
3,黑盒安全审计。一般通过(动态或静态)的方法发现软件漏洞,不需要查看软件的实际代码。比较常见的方式是静态安全漏洞扫描技术,通过特定的安全漏洞特征扫描软件二进制代码,最终生成一份安全漏洞报告供开发人员确认。
2.5.可移植性测试
2.5.1.测试目标
可移植性测试的主要目标是确保移动应用软件在不同的主流移动设备上能够正确安装、启动和卸载,以及能够正确、平稳地运行。
2.5.2.主流的测试方法
可移植性测试地主流测试方法有两类:
1,人工测试和众包测试。测试人员在不同型号的设备对软件的主流程和主功能进行遍历,观察主要的应用功能和界面是否正常。如果发现软件错误,就需要通过不同设备上对比确认是否该错误与特定参数(型号、系统、屏幕分辨率)等相关,并准确定位出错误产生的原因,最后把错误报告提交开发。这种测试方法具有很高的灵活性,但局限在测试时间成本和设备成本较高。除了传统的人工测试外还有众包测试,众包测试也将测试任务分发到个体,由个体完成或者个体之间协作完成,提高测试效率和效果。
2,第三方自动化云测试服务。这种测试方法测试人员只需要把应用提交到云测试平台,选择特定的移动设备,就可以实现兼容性测试。整个过程不需要人工干预,云平台会在后台自动把应用软件部署到各类移动设备上运行。
2.5.3.代表性的测试工具
华为的MobileAppTest。
2.6.网络测试
2.6.1.测试目标
网络测试主要目的是模拟不同的网络环境和质量,检测应用软件的健壮性、易用性和稳定性。根据不同的测试目标,可以细分为:
1,弱网测试。
2,无网测试。
3,异常机制测试。
主要的测试指标包括:弱网环境下的软件功能、响应时间、异常反馈等;无网环境下的页面呈现、数据完成性和会话的一致性等;异常机制下异常信息的处理、容错和重连机制的稳定性等。在原理上,网络测试主要通过特定设备和工具模拟各种网络环境,如低速网络信号、网络时断时续,网络切换以及无网络等,对移动应用进行异常测试。
2.6.2.主流的测试方法
网络测试实施依赖于特定测试环境和设备的搭建。从构建环境角度,目前主流的测试方法有两种:
1,通过将设备连接到电脑上。通过电脑上安装特定的网络抓包工具,然后将设备的网络代理设置为电脑,通过在电脑上控制网络延时模拟不同的网络环境,比如可以模拟2G、Edge、3G、4G、5G等不同网络类型。
2,在专有服务器上构建网络WiFi,设备连接该WiFi进行测试,方便模拟网络延迟、掉包等情况。
2.6.3.代表性的测试工具
针对移动应用测试,主要测试工具都是用于辅助模拟不同的网络环境。比如,在电脑上实施网络测试时,可使用的工具有Fiddler、Charles等,思路是通过网络抓包模拟控制网络环境。
- 点赞
- 收藏
- 关注作者
评论(0)