问题描述:
最近发布的新版本,线上搜集到的奔溃比较高,开发同事查到原因是空指针导致的;
猜测的场景:
重未下载过应用的新用户首次启动 APP 闪退,实际的测试包不能复现,可能是安装过 APP 的原因;
思考:
要复现或者回归此问题,都要未下载过 APP 的手机,可是测试机都安装过,只能开发那边把空指针的问题解决,不好回归;
疑问:
类似的空指针的闪退情况,QA 在日常的测试中要怎样覆盖呢?
卸载重装? 清除应用缓存数据? 云测平台?
买新手机,哈哈哈 反正要兼容,现在新机更新那么快,整一个
charles 修改响应结果,设置响应结果中想测试的字段设置为 null 即可;一般而言,客户端这边不会对所有用到的字段做判空处理,所以一旦为空出现 crash 的情况比较大,最好还是要规范服务端童鞋的编码规范,返回为空的时候返回默认值例如
List<String> stringList = null;
stringList = (CollectionUtils.isEmpty(stringList))? Lists.newArrayList():stringList;
根据应用特性来吧。
1.如果应用涉及设备号绑定相关,那要新设备,或者改设备号(接口参数)。
2.如果只是应用本地缓存的问题,卸载测试应用即可,有些会建存储文件夹的,要手动删。
3.更多这类问题都是不同厂商的系统 api 支持程度不同,上线前需要针对这类厂商做兼容测试,特别是涉及系统层调用功能(如:相机、电话)。
作为一个已转开发的测试,觉得这个问题如果一定要测试来重现,成本过高,建议让开发同学自己分析 crash log,或者针对对应模块做 code review,一般都能找到问题。
活用白盒扫描工具,现在的白盒工具一般可以帮你扫描到空指针问题。比如 sonar
方法一,空值针和野指针 在编译时的可以通过静态扫描。(作用不大)
方法二,运行时或者程序执行过程中比如修改或者解引用了,部分语言编译时和运行时的内存是否可变性质都不一样(所以第一种也没用),类似这种非编译时的用日志打印本地吧 出现一类问题的地方,统一批量修改一个地方。
编程习惯导致的 bug。
手机恢复出厂设置 or 开发定位 debug