一、软件测试的系统流程
软件工程模型基本就是业务建模-〉系统分析-〉概要设计-〉详细设计-〉编码-〉测试-〉部署。其中测试过程按4个步骤进行,即单元测试、集成测试、系统及发版测试和回归测试。
(1)单元测试,集中对每一个程序单元进行测试,检查各个程序模块是否正确地实现了预定的功能,属于白盒测试,测试范围为单元内部的源代码和程序结构(如数据结构,逻辑控制,异常处理等)。
(2)集成测试把已测试过的模块组装起来,检查模块间接口是否正确,检查各个模块之间的通信和相互调用是否符合需求。属于灰盒测试,测试范围为模块接口之间的数据传递,以及模块组合后的功能。
(3)系统测试把被测软件系统和计算机硬件、数据库、外设、前端和后端以及其它软件结合在一起,在实际运行环境下对软件系统进行一系列的组装测试和运行测试。目的在于检测软件对《需求规格说明书》的符合程度。属于黑盒测试,只关心输入和输出结果,测试范围为整个系统。
(4)回归测试:是软件上线后的维护阶段或者是研发修复Bug之后进行确认测试。目的在于验证缺陷已经得到修复,并检测是否引入新的缺陷。
二、测试用例及编写方法
测试用例是一份描述具体测试步骤的文档,包括测试的输入参数、条件及配置、预期的输出结果等,用以判断被测软件的工作是否正常。
2.1、测试用例设计的三大原则
(1)设计测试用例要力求最大的覆盖率,参考《需求规格说明书》对每个功能点进行操作上的细化,尽可能趋向最大需求覆盖率。
(2)用例要对测试功能点、测试条件、测试步骤、输入值和预期结果准确描述。
(3)在设计测试用例的时候,除了满足系统基本功能需求外,还应该考虑各种异常情况、边界情况和承受压力的能力等。
2.2、设计测试用例设计方法
设计测试用例时要根据具体的产品和需求所明书,比如NetSignC接口普遍得就是根据输入和输出参数的不同情况设计用例,但也有通用的情况。
(1)等价类划分。把程序的输入域划分成若干部分子集,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值,比如传输IP地址时,可以分为A类地址、B类地址和C类地址。既能减少用例总数,又能提高测试覆盖率。
(2)边界值分析法。通常边界值分析法是作为对等价类划分法的补充,其测试条件来自等价类的边界。因为很多错误是发生在输入或输出范围的边界上,而不是发生在输入/输出范围的中间区域。因此针对各种边界情况设计测试用例,可以查出更多的错误。
(3)错误推断法。基于测试人员的经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例。比如字符串和普通的字符数组结尾’\0’的区别,内存拷贝函数stycpy和memecpy必须要进行+1或-1的操作。
三、APP测试中经常出现的基础案例
3.1、APP的安装、卸载测试
(1)软件在不同操作系统及版本(Android的EMUI\Flyme\MIUI、iOS、WindowsPhone)下安装是否正常;
(2)软件安装后的是否能够正常运行,安装后的文件夹及文件是否写到了指定的目录里,安装后没有生成多余的目录结构和文件;
(3)软件安装过程是否可以取消;
(4)软件安装过程中意外情况的处理是否符合需求(如死机,重启,断电)
(5)安装空间不足时是否有相应提示;
(6)对于需要通过网络验证之类的安装,在断网情况下尝试一下
(7)重复安装应该有提示;
(8)升级安装时,版本更新链接有效,比如后台设置的版本白名单;
(a)使用各种方式卸载程序,如直接删除安装文件夹卸载是否有提示信息、长按图标卸载、手机设置里卸载、第三方应用卸载;
(b)测试卸载后文件是否全部删除所有的安装文件夹;
(c)卸载过程中出现的意外情况的测试(如死机、断电、重启);
(d)卸载是否支持取消功能,单击取消后软件卸载的情况。
3.2、APP的注册、登录和修改密码测试
3.3、核对rp原型图和效果图,进行UI测试
(1)观察APP的用户界面(如菜单、对话框、窗口和其它可规控件)是否符合UI稿。
(2)不同的连接页面之间导航链接是否有效,是否跳转是否正确。
(3)旋转手机,确保程序不退出,页面排版无异常。
(4)输入框说明文字的内容与产品需求一致。
(5)某页无数据时、断网时、有网但接口异常时的状态页是否和UI一致。
3.4、核对需求文档,进行功能测试
功能测试的用例要根据具体产品设计,这里只提供通用点。APP端测试最关心的是流程和数据,避免Crash和ANR问题。
(1)App安装完成后是否能正常启动,且打开速度控制在预期时间内。
(2)切换后台再切换前台的操作对当前状态如登陆、当前页、数据刷新的影响。
(3)强制杀掉APP进程再启动对当前状态如登陆、当前页、数据刷新的影响。
(4)登陆验证/免密登陆时的手势密码和指纹是否符合产品需求
(5)对于有数据交换的页面,每个页面都必需要进行前后台切换、锁屏解锁的测试,这种页面最容易出现崩溃。
(6)同一用户在多个终端先后登陆时,APP是否有符合产品需求的处理。
(7)App使用过程中有电话进来的中断测试,与文件下载、音乐播放、等应用的交叉情况测试。
(8)很多应用会支持缓存数据,测试在断网启动或从有网到无网时是否可以浏览缓存数据。
3.5、安全性测试
a.软件权限
扣费风险:包括短信、拨打电话、连接网络等。
限制/允许使用手机拍照或录音。
限制/允许使用手机读取用户数据,手机信息、联系人信息等。
限制/允许使用手机写入用户数据。
没有用户的允许,应用程序不能预先设定自动启动。
对App的输入有效性校验、认证、授权、数据加密等方面进行检测。
没有用户的允许,应用程序不能预先设定自动启动。
手机能控制该APP能否使用Wi-Fi和移动数据。
b.数据安全性
如果数据库中重要的数据正要被重写,应及时告知用户。
在数据删除之前,应用程序应当通知用户或者应用程序提供一个“取消”命令的操作。
对密码长度和复杂度的要求。
当将密码或其他的敏感数据输人到应用程序时,其不会被储存在设备中,同时密码也不会被解码。
当应用程序处理信用卡明细或其它的敏感数据时,不以明文形式将数据写到其他单独的文件或者临时文件中。
3.6、性能压力测试
(1)APP端性能测试:在各种边界压力情况下,如电池、存储、网速等,验证App是否能正确响应。
(2)Server端性能测试:通过测试接口的执行效率,如http接口。
3.7、兼容性测试
(1)与本机已经安装的App是否兼容。
(2)在各种系统、系统版本的不同手机上测试注册、登陆、修改密码等功能。
(3)UI层的兼容,界面的显示根据不同尺寸手机是否自适应。
(4)在各种系统、系统版本的不同手机上进行全方面的功能测。试,如使用每一个iOS版本的iPhone上测试“我的银行卡”模块的提现功能。
(5)基于开发环境和生产环境的不同,检验在各种网络连接下(WiFi、2G/3G/4G等),App的数据和运用是否正确。