iOS开发中如何合理地制造BUG?
作者:网络转载 发布时间:[ 2016/4/1 11:10:20 ] 推荐标签:iOS 测试
访问了一个已经被释放的对象,比如:NSObject * aObj = [[NSObject alloc] init]; [aObj release]; NSLog(@”%@”, aObj);
访问数组类对象越界或插入了空对象
访问了不存在的方法
字节对齐,(类型转换错误)
堆栈溢出
多线程并发操作
Repeating NSTimer
合理性假设第三条:尽可能的查找有可能性的具体原因。
因果性分析
首先必须先说明的是,我们要找的是“因果性”而不是“相关性“。这是两个极度被混淆的概念。而且,很多时候我们错误的把相关性当成了因果性。比如,在解决一个多线程问题的时候,发现了一个数据混乱的问题,但是百思不得其解。终于,有你意外的给某个对象加了个锁,数据正常了。然后你说这个问题是这个对象没有枷锁导致的。
但是,根据上述你的分析,只能够得出该对象枷锁与否与数据异常有关系,而不能得出是数据异常的原因。因为你没能证明对象加锁是数据异常的充分必要条件,而只是使用了一个单因变量实验,变量是枷锁状态,取值x=[0,1],x为整形。然后实验结果是枷锁与否与数据异常呈现正相关性。
相关性:在概率论和统计学中,相关(Correlation,或称相关系数或关联系数),显示两个随机变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。在这个广义的定义下,有许多根据数据特点而定义的用来衡量数据相关的系数。
因果性:因果是一个事件(即“因”)和第二个事件(即“果”)之间的关系,其中后一事件被认为是前一事件的结果。 错误的把相关性等价于因果性。不止是程序员,几乎所有人常见的逻辑错误。为了加深认识,可以看一下这篇小科普:相关性 ≠ 因果性。
因果性分析的首要问题是,别被自己的逻辑错误欺骗,正确的分辨出相关性和因果性之间的区别。不要把相关性等价于因果性。
之后便是因果性分析的内容了,之前一直反复说,因果性分析的目的是确定特定原因是BUG发生的充分必要条件。那么确定这个事情,需要两步:
充分性证明
必要性证明
关于充分性证明,这个基本上是正常的逻辑推理。基本思路是,能够还原出BUG出现的路径,从原因到BUG发生处的代码,走了怎样的函数调用和控制逻辑。确定了这个基本上能够证明充分性。一般情况下根据Crash的堆栈信息能够,非常直接的证明充分性。
关于必要性证明,这个比较困难了。充分性和必要性的定义如下:当命题“若A则B”为真时,A称为B的充分条件,B称为A的必要条件。那么必要性是,BUG能够作为导致BUG的原因的原因。这个说法比较拗口。换种说法,是你得确认这个BUG能够解释原因,这个BUG是而且只是这个原因造成的。
只有证明了充分必要性,才能算是真正找到了BUG的原因。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南