全国咨询/投诉热线:400-618-9090

首页技术文章

软件测试之APP产品常见BUG及预防

更新时间:2018年03月30日 17时06分56秒 来源:黑马程序员

一、界面适配

l 手机分辨率为1920x7080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形;

l 因用户设置的特殊字体导致列表的字母条不显示;

l 某些banner 图片在部分机型只能显示一半;

l 文字或者图片需要适配不同分辨率的机型时,建议使用dp方式进行开发,即使是使用dp,也需要考虑特殊分辨率的机型显示;

l 适应宽度/适应高度/高宽均适应的;

l 针对程序需求,设定合适的适配机制。

二、 系统适配

l 调用高版本API,导致某些机型进入主页显示空白页面。

l 调用高版本API,需要考虑兼容性,开发团队需要制定程序API调用规范。

三、 交互适配1

l 在输入框操作时,调出系统输入法软键盘后,没有有效启用键盘上的“下一项”、“确定”、“搜索”等按键。

l 系统软键盘,在关闭当前页面时没有及时收起软键盘。

l 需求设计过程中需要考虑输入法操作键的使用细节,确保所有软键盘的输入键可使用。

l 设计规范:程序/页面设计针对输入法操作键的使用制定规范。

四、交互适配2

l APP界面的“返回”操作与手机系统的“返回”按键操作效果不一致;或界面未提供“返回”,在无系统“返回”按键的手机上,无法返回。

l 设计规范:程序设计针对手机返回键制定使用规范。

l 在设计中要综合界面需求设定是否提供“返回”操作。

五、 界面风格

l 对话框标点、英文字符出现全角、半角的不统一。

l 对话框、提示浮动框提示语风格不同,显示位置均不同,产品友好度下降。

l 字体和字号要在app中是不同的风格。

预防方法:语言文字提示规范。

Ø 全角字符和半角字符都要使用一个空格分开。

Ø 英文和数字之间要有空格分开。

Ø 汉字和英文、数字要有空格分开。

Ø 带有汉字的话要使用全角字符。

Ø 语言中不要混用全角和半角标点。

Ø 字体和字号要保持统一的风格。

六、 性能优化1

l 进入一些列表,若数量较多则会出现卡死。

l 界面显示对象数量较多,某些会导致页面操作卡顿,用户体验很差。

l 处理大量数据时,用户等待时间过长,无进度条提示进度。

l 程序对耗时较多的操作逻辑、判断逻辑,不放入UI主线程。

l 对数据库记录较多的操作,可以改成数据库批量操作,或者调用批量接口。

l 程序在后台处理用户的输入,则提供进度条或对话框。

七、性能优化2

l 后台播放内存泄露;

l 程序后台运行的时候,手机一直处于占用CPU的运行状态。

l 页面中的动态效果(如:马灯滚动)次数无限制,导致界面不断刷新消耗资源。

l 使用静态分析工具或代码检查方式检查内容的分配和释放。

l WakeLock机制是防回收技术,当没有播放、下载等操作时,应该主动关闭后台的唤醒锁,减少耗电。当再次需要使用播放、下载功能时才去开启唤醒。

l 对刷新消耗资源类操作,要有次数限制。

八、多服务、多进程

l 某些功能操作后,app 无法连接网络。

l 进程被杀死后重启,通知栏中显示的信息不正确,没有显示正确的信息。

l app未启动,通过其他第三方app的调用入口调用app ,无法正常使用某些功能。

l 服务停止后,无法被启动。

l 程序被手动退出后,进程仍然在后台存在。

l 重新初始化时获取值时读取到空值,因此赋予一个默认值。

l 服务重启被回收重启时,初始化对象时要判断当前是否已存在,若存在则复用并更新内容。

l 任务独立,需要创建不同的服务,生命周期不会互相影响,服务独立可以避免某个服务结束会影响到其他功能的正常使用。

总体,对有启用多服务、多进程的程序,有需要做好服务、进程的一致性管理。

九、外部调用

l 某些机型启动app之后一直在调用某些外部服务(通过后台服务可以看到其他服务进程,退出app后,有些服务进程消失)。

l 某些功能模块被扫描成存在木马病毒。

l 安全管家告警程序获取绝密权限(通讯录权限)。

l 调用第三方功能作为统计或者监控作用时,需要考虑该sdk是否会一直唤醒app导致耗电或者程序无法真正关闭问题。

l 调用外部第三方SDK,要考虑被安全工具(上次有广告被扫描到病毒)扫描的设计需求。

l 及时关闭不需要的服务进程,在能满足需求的情况下,尽量减少使用敏感的系统权限。

十、网络机制1

a:网络重试操作机制不统一,导致页面超时体验风格不统一。

b:某些应用页面,访问响应慢。

a:对底层网络重试机制做统一封装后,供上层调用。

b:固定好每次重试间隔(建议10s重试)和重试总次数(建议3次)。

c:为使页面提示可以区分网络层与业务解析层不同错误,需对不同错误类型做分类的异常处理,并提示用户原因或让用户重试。

d:对多个网络请求的界面,网络接口并行请求有利于提高响应速度。

十一、 网络机制2

a:未加载完图片时切换到相似tab,切回不再加载图片。

b:进入一个tab,该页面已经加载完成,选择点击某个详细信息页面返回时,页面会闪一下。

a:一个页面有多个tab页时,用户切换tab可不轻易取消线程,取而代之使用暂停线程,退出页面时才回收清除。

b:启动负载分摊机制的请求,可先保存请求地址,供返回时判断避免重复加载。

十二、网络机制3

a:iOS弱网络下获取不到配置,导致启动卡死。

b:sim卡未激活,无移动网络,某些功能卡死。

c:断网下启动,登录状态丢失,某些功能信息未正确显示。

a:启动逻辑中的网络类请求不能阻塞UI主线程,即网络请求数据可不即时响应(可在下次启动时生效)。

b:按钮的点击事件不跟接口关联,做成异步处理不管是否有返回,都可以正常进行点击操作。

c:离线操作类,不因与当前网络状态有影响。

十三、下载空间有效性判断

a:空间不足时,无法保存信息时,没有提示和提前判断。

b:本地存储空间不足时,保存文件时没有相应提示。

c:空间不足时,文件下载不成功,导致重复不停下载,浪费用户流量。

a:对磁盘剩余空间的判断和自动清理逻辑可以做统一封装,提供各不同下载业务使。

b:可结合系统硬件配置的10%作为有效剩余空间阀值。

c:针对手机内外置SDCard,可以在空间不足情况下做分区切换机制。

十四、下载文件完整性判断

a:换肤图片未下载完,就触发换肤操作,导致换肤效果错误。

b:图片无法下载完全,导致图片展示不完整。

c:文件下载完成后,由于网络错误与源文件不符,导致下载后无法播放。

d:上传文件功能,目标物理文件不存在(界面缺显示存在),导致传送文件页面一直处于等待中。

a:通过判断下载前后文件的size或者文件内容签名,确保下载文件完整后再触发文件使用相关的逻辑。

b:文件传输时检查文件是否存在,若不存在则视为传输失败,不阻塞后续传输。

十五、阻断连续操作

a:连续快速切换界面,或者频繁触发某些功能操作,导致程序卡死。

b:连续多次点击同一张图片,导致该图片下载错误。

a: 使用间隔响应、延迟响应的方式,达到多次相同操作只的触发一次有效逻辑。

b:操作一次后,可将按钮等元素设定为禁用状态,防止用户多次点击和请求。

十六、有效统计逻辑

a:操作页面某些元素,也会导致发送页面使用的统计信息。

a:为确保统计数据上传的有效性,只针对真正展示的界面做上报统计,对于展示不完整、非针对性展示不做统计上报。

十七、程序健壮性判断1

a:分享到新浪微博(手机未装新浪微博客户端),app崩溃。

b:后台接口变更(返回值和类型发生变化),客户端不兼容新格式判断,抛出崩溃异常。

c:搜索默认操作崩溃;

d:使用外部第三方数据,出现空数据或者非标准格式,则app崩溃。

e:输入框没有限制字符长度,保存时导致溢出崩溃。

a:客户端针对接口返回需做容错处理,如返回为空、返回数据类型不一致。

b:任何文本框类型的需要限制输入长度。

十八、 程序健壮性判断2

a:某些功能的初始化逻辑没有加入启动逻辑,导致功能使用失败。

b:退出重启app,无法自动登录。

a:制定启动加载逻辑规范。

b:对于重要的业务建议加入启动逻辑,并在业务实际使用时再根据状态多一层判断和加载。

c:产品人员需要考虑是否需要保存自动登录功能,并明确告之开发和测试人员。

十九、 安全机制

a:在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中。

b:即使要传递密码参数也不要使用pwd、passpord这样的参数名称来进行传递,防止被截获。

c:要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。

a:建立标准的数据传输和命名规范,并制作一些网页开发模板或者规范供参考。

二十、 日志调试管理

l 上线以后,调试日志没有关闭,影响程序性能。

a:日志统一开关,编译正式包需要关闭。

b:程序界面有入口可以检查是否关闭,方便及时校验。

c:方便定位问题,可以做日志动态开启的隐藏开关。

d:方便收集问题,可以对问题类型做上报处理(典型如崩溃日志上报)

一、界面适配

l 手机分辨率为1920x7080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形;

l 因用户设置的特殊字体导致列表的字母条不显示;

l 某些banner 图片在部分机型只能显示一半;

l 文字或者图片需要适配不同分辨率的机型时,建议使用dp方式进行开发,即使是使用dp,也需要考虑特殊分辨率的机型显示;

l 适应宽度/适应高度/高宽均适应的;

l 针对程序需求,设定合适的适配机制。

二、 系统适配

l 调用高版本API,导致某些机型进入主页显示空白页面。

l 调用高版本API,需要考虑兼容性,开发团队需要制定程序API调用规范。

三、 交互适配1

l 在输入框操作时,调出系统输入法软键盘后,没有有效启用键盘上的“下一项”、“确定”、“搜索”等按键。

l 系统软键盘,在关闭当前页面时没有及时收起软键盘。

l 需求设计过程中需要考虑输入法操作键的使用细节,确保所有软键盘的输入键可使用。

l 设计规范:程序/页面设计针对输入法操作键的使用制定规范。

四、交互适配2

l APP界面的“返回”操作与手机系统的“返回”按键操作效果不一致;或界面未提供“返回”,在无系统“返回”按键的手机上,无法返回。

l 设计规范:程序设计针对手机返回键制定使用规范。

l 在设计中要综合界面需求设定是否提供“返回”操作。

五、 界面风格

l 对话框标点、英文字符出现全角、半角的不统一。

l 对话框、提示浮动框提示语风格不同,显示位置均不同,产品友好度下降。

l 字体和字号要在app中是不同的风格。

预防方法:语言文字提示规范。

Ø 全角字符和半角字符都要使用一个空格分开。

Ø 英文和数字之间要有空格分开。

Ø 汉字和英文、数字要有空格分开。

Ø 带有汉字的话要使用全角字符。

Ø 语言中不要混用全角和半角标点。

Ø 字体和字号要保持统一的风格。

六、 性能优化1

l 进入一些列表,若数量较多则会出现卡死。

l 界面显示对象数量较多,某些会导致页面操作卡顿,用户体验很差。

l 处理大量数据时,用户等待时间过长,无进度条提示进度。

l 程序对耗时较多的操作逻辑、判断逻辑,不放入UI主线程。

l 对数据库记录较多的操作,可以改成数据库批量操作,或者调用批量接口。

l 程序在后台处理用户的输入,则提供进度条或对话框。

七、性能优化2

l 后台播放内存泄露;

l 程序后台运行的时候,手机一直处于占用CPU的运行状态。

l 页面中的动态效果(如:马灯滚动)次数无限制,导致界面不断刷新消耗资源。

l 使用静态分析工具或代码检查方式检查内容的分配和释放。

l WakeLock机制是防回收技术,当没有播放、下载等操作时,应该主动关闭后台的唤醒锁,减少耗电。当再次需要使用播放、下载功能时才去开启唤醒。

l 对刷新消耗资源类操作,要有次数限制。

八、多服务、多进程

l 某些功能操作后,app 无法连接网络。

l 进程被杀死后重启,通知栏中显示的信息不正确,没有显示正确的信息。

l app未启动,通过其他第三方app的调用入口调用app ,无法正常使用某些功能。

l 服务停止后,无法被启动。

l 程序被手动退出后,进程仍然在后台存在。

l 重新初始化时获取值时读取到空值,因此赋予一个默认值。

l 服务重启被回收重启时,初始化对象时要判断当前是否已存在,若存在则复用并更新内容。

l 任务独立,需要创建不同的服务,生命周期不会互相影响,服务独立可以避免某个服务结束会影响到其他功能的正常使用。

总体,对有启用多服务、多进程的程序,有需要做好服务、进程的一致性管理。

九、外部调用

l 某些机型启动app之后一直在调用某些外部服务(通过后台服务可以看到其他服务进程,退出app后,有些服务进程消失)。

l 某些功能模块被扫描成存在木马病毒。

l 安全管家告警程序获取绝密权限(通讯录权限)。

l 调用第三方功能作为统计或者监控作用时,需要考虑该sdk是否会一直唤醒app导致耗电或者程序无法真正关闭问题。

l 调用外部第三方SDK,要考虑被安全工具(上次有广告被扫描到病毒)扫描的设计需求。

l 及时关闭不需要的服务进程,在能满足需求的情况下,尽量减少使用敏感的系统权限。

十、网络机制1

a:网络重试操作机制不统一,导致页面超时体验风格不统一。

b:某些应用页面,访问响应慢。

a:对底层网络重试机制做统一封装后,供上层调用。

b:固定好每次重试间隔(建议10s重试)和重试总次数(建议3次)。

c:为使页面提示可以区分网络层与业务解析层不同错误,需对不同错误类型做分类的异常处理,并提示用户原因或让用户重试。

d:对多个网络请求的界面,网络接口并行请求有利于提高响应速度。

十一、 网络机制2

a:未加载完图片时切换到相似tab,切回不再加载图片。

b:进入一个tab,该页面已经加载完成,选择点击某个详细信息页面返回时,页面会闪一下。

a:一个页面有多个tab页时,用户切换tab可不轻易取消线程,取而代之使用暂停线程,退出页面时才回收清除。

b:启动负载分摊机制的请求,可先保存请求地址,供返回时判断避免重复加载。

十二、网络机制3

a:iOS弱网络下获取不到配置,导致启动卡死。

b:sim卡未激活,无移动网络,某些功能卡死。

c:断网下启动,登录状态丢失,某些功能信息未正确显示。

a:启动逻辑中的网络类请求不能阻塞UI主线程,即网络请求数据可不即时响应(可在下次启动时生效)。

b:按钮的点击事件不跟接口关联,做成异步处理不管是否有返回,都可以正常进行点击操作。

c:离线操作类,不因与当前网络状态有影响。

十三、下载空间有效性判断

a:空间不足时,无法保存信息时,没有提示和提前判断。

b:本地存储空间不足时,保存文件时没有相应提示。

c:空间不足时,文件下载不成功,导致重复不停下载,浪费用户流量。

a:对磁盘剩余空间的判断和自动清理逻辑可以做统一封装,提供各不同下载业务使。

b:可结合系统硬件配置的10%作为有效剩余空间阀值。

c:针对手机内外置SDCard,可以在空间不足情况下做分区切换机制。

十四、下载文件完整性判断

a:换肤图片未下载完,就触发换肤操作,导致换肤效果错误。

b:图片无法下载完全,导致图片展示不完整。

c:文件下载完成后,由于网络错误与源文件不符,导致下载后无法播放。

d:上传文件功能,目标物理文件不存在(界面缺显示存在),导致传送文件页面一直处于等待中。

a:通过判断下载前后文件的size或者文件内容签名,确保下载文件完整后再触发文件使用相关的逻辑。

b:文件传输时检查文件是否存在,若不存在则视为传输失败,不阻塞后续传输。

十五、阻断连续操作

a:连续快速切换界面,或者频繁触发某些功能操作,导致程序卡死。

b:连续多次点击同一张图片,导致该图片下载错误。

a: 使用间隔响应、延迟响应的方式,达到多次相同操作只的触发一次有效逻辑。

b:操作一次后,可将按钮等元素设定为禁用状态,防止用户多次点击和请求。

十六、有效统计逻辑

a:操作页面某些元素,也会导致发送页面使用的统计信息。

a:为确保统计数据上传的有效性,只针对真正展示的界面做上报统计,对于展示不完整、非针对性展示不做统计上报。

十七、程序健壮性判断1

a:分享到新浪微博(手机未装新浪微博客户端),app崩溃。

b:后台接口变更(返回值和类型发生变化),客户端不兼容新格式判断,抛出崩溃异常。

c:搜索默认操作崩溃;

d:使用外部第三方数据,出现空数据或者非标准格式,则app崩溃。

e:输入框没有限制字符长度,保存时导致溢出崩溃。

a:客户端针对接口返回需做容错处理,如返回为空、返回数据类型不一致。

b:任何文本框类型的需要限制输入长度。

十八、 程序健壮性判断2

a:某些功能的初始化逻辑没有加入启动逻辑,导致功能使用失败。

b:退出重启app,无法自动登录。

a:制定启动加载逻辑规范。

b:对于重要的业务建议加入启动逻辑,并在业务实际使用时再根据状态多一层判断和加载。

c:产品人员需要考虑是否需要保存自动登录功能,并明确告之开发和测试人员。

十九、 安全机制

a:在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中。

b:即使要传递密码参数也不要使用pwd、passpord这样的参数名称来进行传递,防止被截获。

c:要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。

a:建立标准的数据传输和命名规范,并制作一些网页开发模板或者规范供参考。

二十、 日志调试管理

l 上线以后,调试日志没有关闭,影响程序性能。

a:日志统一开关,编译正式包需要关闭。

b:程序界面有入口可以检查是否关闭,方便及时校验。

c:方便定位问题,可以做日志动态开启的隐藏开关。

d:方便收集问题,可以对问题类型做上报处理(典型如崩溃日志上报)。

本文版权归传智播客软件测试学院所有,欢迎转载,转载请注明作者出处。谢谢!
 
作者:传智播客软件测试培训学院
 
首发:http://test.itcast.cn/