blog/docs/auto/app/app-test.md

266 lines
20 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 手机App测试
date: 2020-06-26 15:24:59
tags: [App测试]
categories: [App测试]
author: 久伴_不离
---
## 简介 
    移动应用App已经渗透到每个人的生活、娱乐、学习、工作当中令人激动、兴奋且具有创造性的各种App犹如雨后春笋般交付到用户手中。各类智能终端也在快速发布而开发者对于全球移动设备的质量和性能却掌握甚少App与设备的兼容性问题常常导致用户投诉令开发者十分沮丧App测试与服务质量保证矛盾十分突出。
    移动开发的一个重要难题,就是应用在开发过程中,必须使用手机真实环境进行系统测试,才有可能进入商用。由于手机操作系统的不同,以及操作系统版本之间的差异,使得真机系统测试这个过程尤其复杂,涉及终端、人员、工具、时间、管理等方面的问题。
    首先必须购买足够多的手机包括不同操作系统不同版本不同分辨率甚至不同厂商目前市场上的手机平台有iOS、Android、Symbian、WP、Blackberry、Linux等集中度较高的是iOS、Android和WP系统平台之间存在较大差异语言和标准完全不同。以Android为例就需要面对Android 1.5、2.0、2.1、2.2、2.3、3.0、4.0七个以上的版本约十几种不同的分辨率HTC、摩托、三星、LG、索爱、联想、中兴、华为…等数十个厂商。一个商业化运作的开发团队一般至少需要几十部手机、终端才能完成必要的适配工作。如果缺失这个真机系统测试环节极大可能会给应用的推广和使用埋下了一个隐患一旦出问题将直接招致用户的投诉或抛弃。  
    其次在拿到不同手机进行测试的时候还将面临不同手机厂商的系统版本差异问题即便是标准统一的Android系统手机厂商的版本也并非完全相同MIUI、LePhone、MEIZU这些Android系统已经加入了很多个性化的东西导致Android应用必须进行单独适配。这过程中出现的很多问题往往没有资料可查使开发者雪上加霜。 
    终端问题之后,就是人员工资的高涨使得很多开发团队在紧张的预算下优先向产品、运营、技术倾斜,很多成规模的互联网企业通常只有几个人的小测试团队。
    另外App的真机系统测试在全球范围内还停留在刀耕火种的纯人工状态没有有效的工具可以利用测试人员发现的Bug很难复现开发人员因此也很难定位、快速修改Bug。
    接下来的问题是,为了满足用户旺盛的需求、适应激烈的市场竞争,所有的移动互联网企业都在拼命地赶工期,开发人员下班前完成的版本、至少希望第二天上班的时候能够被测试完成,这就要求测试人员连夜工作,于是我们可以看到很多欧美的软件公司会把测试工作交给中国的外包企业进行。
    最后终端、人员、流程等管理问题也非常突出终端、Bug、人员要在测试、开发、产品、客服、运营等不同的部门之前交错。
    如何进行卓有成效的App系统测试以及协调好与之相关的计划、管理、人员、资源、终端等各个环节一直是困扰各个App开发企业的问题。
### 什么是App测试 
    IEEE定义使用人工或自动化来测试某个程序来验证它是否满足规定的需求或者实际结果和预期结果之间的差别。 
    App是基于移动互联网软件、及软硬件环境的应用软件。App测试就是要找出App中的BUG通过各种手段和测试工具判断App系统是否能够满足预期标准。移动App由于增加了终端、外设和网络等多项元素因而测试内容和项目也相应增加了。 
在App开发过程中容易出现缺乏有效沟通功能复杂、编程错误、需求不断变更、时间压力、缺乏文档的代码、App开发工具、SDK和人员的疏忽等原因引发的错误通过测试能够发现、找出其中的错误解决错误从而提高App的质量
#### 测试方法 
#### 白盒测试 
依据被测App分析程序内部构造并根据内部构造设计用例来对内部控制流程进行测试。
#### 黑盒测试 
黑盒测试Black-Box Testing是基于系统需求规格在不知道系统或组件的内部结构的情况下进行的测试把测试对象看作一个黑盒只考虑整体特性不考虑内部具体实现。  通常又将黑盒测试叫做基于规格的测试Specification-Based Testing、输入输出测试Input/Output Testing、功能测试Functional Testing 
#### 人工测试
测试活动由人来完成,狭义上指测试执行由人工完成。
#### 自动化测试 
通过计算机模拟人的测试行为,替代人的测试活动,狭义上指测试执行由计算机来完成。
### UT、IT、ST测试 
#### Unit Testing单元测试 
定义对App的基本组成单元来进行正确性检验。集中对用源代码实现的每一个程序单元 进行测试,检查各个程序模块是否正确地实现了规定的功能。  目的检测App模块对App产品设计说明书的符合程度。  类型:白盒测试,测试范围为单元内部的数据结构,逻辑控制,异常处理。 评估标准:逻辑覆盖率。 
#### Integrate Testing集成测试 
定义测试模块或子系统组装后功能以及模块间接口是否正确把已测试过的模块组装起来主要对与设计相关的App体系结构的构造进行测试。  目的在于检测App模块对App产品概要设计说明书的符合程度。  类型:灰盒测试,测试范围为模块之间接口与接口数据传递的关系,以及模块组合后的功能。  评估标准:接口覆盖率。
#### System Testing系统测试 
定义App系统测试App System Testing是将已经确认的App程序、移动终端、外设、网络等其他元素结合在一起进行信息系统的各种组装测试和确认测试系统测试是针对整个产品系统进行的测试目的是验证系统是否满足了需求规格的定义找出与需求规格不符或与之矛盾的地方从而提出更加完善的方案。App系统测试发现问题之后要经过调试找出错误原因和位置然后进行改正。 
App系统测试是基于系统整体需求说明书的黑盒类测试应覆盖系统所有联合的部件。对象不仅仅包括需测试的App软件还要包含App软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等基于本地及不同地区、网络等真实终端测试、检查已实现的App是否满足了需求规格说明中确定了的各种需求以及App配置是否完全、正确。 
目的验证最终App系统是否满足用户规定的需求。 
类型:黑盒测试,测试范围为整个系统。
评估标准:测试用例对需求规格的覆盖率。
![](https://limeng-blog.oss-cn-hangzhou.aliyuncs.com/auto/app-base.jpg)
## 移动App的系统测试    
目前主流的iOS、Android和WP等OS系统以及各平台都相应地提供了不同程度的单元、集成测试工具可以在模拟器、沙箱环境下进行白盒、灰盒测试、调试。 
但App存在着大量的软硬件交互而这些都需要通过真实的终端通过黑盒测试方法进行系统测试需要将经过集成测试的软件作为移动终端的一个部分与系统中其他部分结合起来在实际运行环境下对移动终端系统进行一系列严格有效地测试以发现软件潜在的问题保证系统的正常运行验证最终软件系统是否满足用户规定的需求。 
然而由于OS版本、硬件异常迅猛的发展速度平台始终没有有效地提供符合App黑盒系统测试的工具与方法大量的移动App测试还停留在纯人工状态效率十分低下。终端、版本的碎片化更加剧了这一问题的严重性。 
自己开发、或借助第三方工具、平台进行自动化的移动互联网App系统黑盒测试是提升效率和测试质量的有效方法。 
移动互联网是极快速发展的新兴产业没有成功经验可循只有市场和用户才是检验你产品是否好坏的终极标准。借助传统软件测试方法和规律可以有效地提升App的程序质量和用户体验。 
### 冒烟测试Smoke Testing
冒烟测试Smoke Testing的对象是每一个新编译的需要正式测试的App版本目的是确认软件基本功能正常可进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。
App程序在编写开发过程中内部需要多个版本(Builds)但是只有有限的几个版本需要执行正式测试根据项目开发计划这些需要执行的中间测试版本。在刚刚编译出来后开发人员需要进行基本性能确认测试验证App是否能正确安装、卸载以及操作过程和操作前后对系统资源的使用情况针对终端硬件及ROM版本的各维度与App安装、卸载不适配情况、隐患原因分析报告最终确认是否可以正确安装/卸载主要功能是否实现是否存在严重死机、意外崩溃等Bug。
如果通过了该测试,则可以根据正式测试文档进行正式测试。否则,就需要重新编译版本,再次执行版本可接收确认测试,直到成功。
如果发现问题就要有效地发现导致问题出现的原因例如在Android App测试中某些终端、有时会出现应用程序错误需要强行关闭的提示但又找不到重现这个问题的步骤这个是App的问题还是系统的问题呢应该怎么判断呢这通常需要有Log日志才可以判断Andriod App出现Crash的情况一般有两方面的原因如果Log日志中出现System_server则为系统问题如果Log中出现Shutdown VM代表应用程序的问题还有一种情况是出现Died这个是进程死掉导致包含系统主动杀死的情况。
当一个单元、或程序整体开发编译完成开发人员、或测试人员可以在PC上选取被测的App通过iTestin连接的原型测试终端自动进行快速的冒烟测试以验证App安装、启动、基本操作运行、卸载等是否正常测试报告包括各测试项是否成功、特征截图、Log日志、CPU/内存等参数等。
### 功能测试Functional Testing
功能测试是移动App测试最关键的环节根据产品的需求规格说明书和测试需求列表验证产品的功能实现是否符合产品需求规格
功能测试的目标主要包括:
- 是否有遗漏需求;
- 是否正确的实现所有功能;
- 隐示需求在系统是否实现;
- 输入、输出是否正确。
移动App的功能测试应侧重于所有可直接追踪到用例、或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确以及业务规则的实施是否恰当。
功能测试基于黑盒技术,通过图形用户界面 (GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。
### 用户界面测试GUI Testing
用户界面 (GUI) 测试用于核实用户与App之间的交互包括用户友好性人性化测试。  一个好的App要有一个极佳的分辨率而在其他分辨率下也都能可以运行。GUI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。另外GUI 测试还可确保 GUI 中的对象按照预期的方式运行,并符合公司或行业的标准。
GUI测试主要测试在不同分辨率下测试用户界面(如菜单、对话框、窗口和其它可视控件)布局、风格是否满足客户要求,文字是否正确,页面是否美观,文字,图片组合是否完美,操作是否友好等。
GUI测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准包括用户友好性、人性化、易操作性测试。
### 用户体验可用性测试UE Testing
用户体验可用性测试主要是检测用户在理解和使用系统方面到底有多好,是否存在障碍或难以理解的部分。
用户体验可用性的测试方法,一般是通过用户访谈,或邀请内测、小范围公测等方式进行,通过不同实验组的运营结果来判断是否存在可用性缺陷。但由于缺乏有效的测试工具,必须要大量的测试样本才能获得比较真实的测试数据,投入资源较多,测试周期较长。
### 安全性、访问控制测试Security Testing
安全性和访问控制测试侧重于安全性的两个关键方面:
1)应用程序级别的安全性,包括对数据或业务功能的访问。
应用程序级别的安全性可确保:在预期的安全性情况下,主角只能访问特定的功能或用例,或者只能访问有限的数据。例如,可能会允许所有人输入数据,创建新账户,但只有管理员才能删除这些数据或账户。如果具有数据级别的安全性,测试就可确保“用户类型一” 能够看到所有客户消息(包括财务数据),而“用户二”只能看见同一客户的统计数据。
2)系统级别的安全性,包括对系统的登录或远程访问。  系统级别的安全性可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问。
### 性能测试Performance Testing
性能测试用来测试App在真实环境中的运行性能以及与硬件、网络资源的匹配度最终度量系统相对于预定义目标的差距通过极限测试方法发现系统在极限或恶劣的环境中自我保护能力主要验证系统的可靠性。  性能测试测试主要通过以下几项测试完成。
#### 负载测试Load Testing
负载测试是在一定的软硬件及网络环境下,通过模拟不同的用户,执行一种或多种业务,观察系统在不同负载下的性能表现。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。  负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。 此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。
#### 强度测试Stress Testing
强度测试是一种性能测试,实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。
#### 稳定性测试Stability Testing
稳定性测试评价系统在一定负荷情况下,长时间的运行情况。在一定的软硬件及网络环境中,通过模拟大量的用户执行多种业务处理大量数据,使系统在极限环境下长时间运行,目的在于寻找系统的失效点。
#### 基准测试 
基准测试的目的主要是进行与已知系统的比较包括App之前的版本、参照版本、竞品等。 
#### 竞争测试 
竞争测试是判断App竞争使用各种资源数据纪录内存等的情况。 
### 故障转移和恢复测试Recovery Testing 
通过人工干预手段使系统发生软、硬件异常通过验证系统异常前后的功能和运行状态达到检验系统容错排错和恢复的能力。可确保测试对象能成功完成故障转移并能从导致意外数据损失或数据完整性破坏的各种硬件、App或网络故障中恢复。  
故障转移测试可确保:对于必须持续运行的系统,一旦发生故障,备用系统就将不失时机地“顶替”发生故障的系统,以避免丢失任何数据或事务。  恢复测试是一种对抗性的测试过程。在这种测试中,将把应用程序或系统置于极端的条件下(或者是模拟的极端条件下),以产生故障(例如设备输入/输出 (I/O) 故障或无效的数据库指针和关健字)。然后调用恢复进程并监测和检查应用程序和系统,核实应用程序或系统和数据已得到了正确的恢复。 
### 兼容适配性测试配置测试Configuration Testing 
兼容适配性测试配置测试是核实测试对象在不同的App、硬件配置中的运行情况测试系统在各种软硬件配置不同的参数配置下系统具有的功能和性能。 
在大多数环境中不同终端、屏幕、OS版本、网络连接的规格都会有所不同而这些因素都可能运行许多不同的配置环境组合从而占用不同的资源如CPU、内存、浏览器版本、OS版本等 
目标:
- 验证全部配置的可操作性、有效性,特别需要对最大配置,最小配置和特殊配置进行测试。 
- 操作系统版本的兼容性测试App在不同操作系统版本下是否能够正确显示与运行  
- 硬件兼容性测试与硬件密切相关的App产品与其他硬件产品的兼容性是否可以正 确使用; 
- 浏览器兼容性测试App在不同产商的浏览器下是否能够正确显示与运行。 
### 分辨率测试
测试在不同分辨率下,界面是否匹配。
### 网络测试
在网络环境下和其他设备对接,进行系统功能,性能与指标方面的测试,保证设备对接正常。
### 本地化测试
是指为各个地方开发产品的测试如英文版、中文版等等包括程序是否能够正常运行界面是否符合当地习俗快捷键是否正常起作用等等特别测试在A语言环境下运行B语言App比如在英文环境下运行中文版App是否正常。
### 文字测试
测试文字是否拼写正确,是否易懂,不存在二义性,没有语法错误;文字与内容是否由出入等等,包括图片文字。
### 发布测试
主要在App发布前对说明书、广告稿等进行测试。
### 说明书测试 
主要为语言检查、功能检查、图片检查。 
语言检查:检查说明书语言是否正确,用词是否易于理解; 
功能检查:功能是否描述完全,或者描述了并没有的功能等; 
图片检查:检查图片是否正确。
#### 宣传材料测试 
主要测试产品中的附带的宣传材料中的语言,描述功能、图片等。
#### 帮助文件测试 
帮助文件是否正确,易懂,是否人性化 
### 回归测试 
回归测试是以上所有测试完成后的一个最为重要的环节是App发布、维护阶段对缺陷进行修复后的测试。 
目的是验证缺陷已经得到修复,检测是否引入新的缺陷; 流程: 
1在测试策略制定阶段制定回归测试策略 
2确定需要回归测试的版本 
3测试版本发布后按照回归测试策略来执行回归测试 
4回归测试通过关闭缺陷跟踪单 
5回归测试不通过缺陷跟踪单返回给开发人员开发人员重新修改BUG。再次提交给测试人员回归测试 
测试策略: 
1完全重复测试重新执行前期设计的用例来确认问题修改的真确性和修改的扩散局部影响性 
2选择性重复测试 
a) 覆盖修改法:针对被修改的部分,选取或重新构造测试用例验证没有错误再次发 生的选择方法; 
b) 周边影响法:该方法包括覆盖修改法,还要分析修改后对扩散的影响; 
c) 指标达成法:先确定一个达成的指标,基于这种要求选择一个最小的测试用例集 合。 
----
作者久伴_不离
链接https://www.jianshu.com/p/a33dea9aa27e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。