转载地址:http://mp.weixin.qq.com/s/43bDg6OCnoslLmM_LnGziQ
Bug预防体系
10
1.10.2 app常见产品问题及预防
网络机制(2)
a:未加载完图片时切换到相似tab,切回不再加载图片;
b:进入一个tab,该页面已经加载完成,选择点击某个详细信息页面返回时,页面会闪一下。
预防方法:
a:一个页面有多个tab页时,用户切换tab可不轻易取消线程,取而代之使用暂停线程,退出页面时才回收清除;
b:启动负载分摊机制的请求,可先保存请求地址,供返回时判断避免重复加载。
12
网络机制(3)
a:iOS弱网络下获取不到配置,导致启动卡死;
b:sim卡未激活,无移动网络,某些功能卡死;
c:断网下启动,登录状态丢失,某些功能信息未正确显示。
预防方法:
a:启动逻辑中的网络类请求不能阻塞UI主线程,即网络请求数据可不即时响应(可在下次启动时生效);
b:按钮的点击事件不跟接口关联,做成异步处理不管是否有返回,都可以正常进行点击操作;
c:离线操作类,不因与当前网络状态有影响。
13
下载空间有效性判断
a:空间不足时,无法保存信息时,没有提示和提前判断;
b:本地存储空间不足时,保存文件时没有相应提示;
c:空间不足时,文件下载不成功,导致重复不停下载,浪费用户流量。
预防方法:
a:对磁盘剩余空间的判断和自动清理逻辑可以做统一封装,提供各不同下载业务使用
b:可结合系统硬件配置的10%作为有效剩余空间阀值;
c:针对手机内外置SDCard,可以在空间不足情况下做分区切换机制。
14
下载文件完整性判断(1)
a:换肤图片未下载完,就触发换肤操作,导致换肤效果错误;
b:图片无法下载完全,导致图片展示不完整;
c:文件下载完成后,由于网络错误与源文件不符,导致下载后无法播放;
d:上传文件功能,目标物理文件不存在(界面缺显示存在),导致传送文件页面一直处于等待中。
预防方法:
a:通过判断下载前后文件的size或者文件内容签名,确保下载文件完整后再触发文件使用相关的逻辑;
b:文件传输时检查文件是否存在,若不存在则视为传输失败,不阻塞后续传输。
15
阻断连续操作
a:连续快速切换界面,或者频繁触发某些功能操作,导致程序卡死;
b:连续多次点击同一张图片,导致该图片下载错误。
预防方法:
a:使用间隔响应、延迟响应的方式,达到多次相同操作只的触发一次有效逻辑。
b:操作一次后,可将按钮等元素设定为禁用状态,防止用户多次点击和请求。
16
有效统计逻辑
a:操作页面某些元素,也会导致发送页面使用的统计信息。
预防方法:
a:为确保统计数据上传的有效性,只针对真正展示的界面做上报统计,对于展示不完整、非针对性展示不做统计上报。
17
程序健壮性判断(1)
a:分享到新浪微博(手机未装新浪微博客户端) ,app崩溃;
b:后台接口变更(返回值和类型发生变化),客户端不兼容新格式判断,抛出崩溃异常;
c:搜索默认操作崩溃;
d:使用外部第三方数据,出现空数据或者非标准格式,则app崩溃
e:输入框没有限制字符长度,保存时导致溢出崩溃。
预防方法:
a:客户端针对接口返回需做容错处理,如返回为空、返回数据类型不一致;
b:任何文本框类型的需要限制输入长度。
18
程序健壮性判断(2)
a:某些功能的初始化逻辑没有加入启动逻辑,导致功能使用失败;
b:退出重启app,无法自动登录。
预防方法:
a:制定启动加载逻辑规范;
b:对于重要的业务建议加入启动逻辑,并在业务实际使用时再根据状态多一层判断和加载;
c:产品人员需要考虑是否需要保存自动登录功能,并明确告之开发和测试人员。
19
安全机制
a:在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中;
b:即使要传递密码参数也不要使用pwd、 passpord这样的参数名称来进行传递,防止被截获;
c:要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。
预防方法:
a:建立标准的数据传输和命名规范,并制作一些网页开发模板或者规范供参考。
20
日志调试管理
a:上线以后,调试日志没有关闭,影响程序性能。
预防方法:
a:日志统一开关,编译正式包需要关闭;
b:再程序界面有入口可以检查是否关闭,方便及时校验;
c:方便定位问题,可以做日志动态开启的隐藏开关;
d:方便收集问题,可以对问题类型做上报处理(典型如崩溃日志上报)。(待续)