随机测试
来源:互联网 发布:群发短信软件哪个好 编辑:程序博客网 时间:2024/06/07 07:38
随机测试
TDD的好处就是我们可以用一些确定的需求自然而然的写出测试用例,进而完成源代码的创建和重构。这样做的好处不用多说,其中我的体会较深的就是,这个过程悄无声息帮你完成了测试的大覆盖率。有了高的覆盖,我们可以“自动化”定位错误并且迫使开发朝着预想的轨道走。但是这样常规的测试并不能检测出需求规范和实现的细微区别,随机的抽样就可以帮助我们做到这一点,因为其随机数的特点,为我们测试源码的非常规的问题提供了一条途径。
利用随机数
这背后道理很简单,就是用一些随机生成的数字来驱动你的测试过程。像下面的代码,就是随机生成的数字来确定数据的顺序和参数: Random random = new Random (); int count = random.nextInt (10000); for (int i = 0; i < count; i++) { boolean add = random.nextBoolean (); if (add) { list.add (random.nextInt(list.size ()), new Integer (random.nextInt (100))); } else { list.remove (random.nextInt (list.size ())); } }通过随机的产生测试数据,总有可能碰到源代码预想不到的情况。这样也就发现了代码的隐患。
无法复现?
如果一个测试能报出bug但是这个bug却不能复现,那确实是很遗憾觉得不明不白的。随机测试比较麻烦的就是随机产生的数值序列看似没有规律的,初次接触的人一来确实不达能摸到规律。终极武器还是得看源码!!! 其实Random生成的数值序列,都是由Seed确定的,而默认的seed是System.currentTimeMillis().解决方案也就明朗了,找到seed,因此 我们在项目这样组织随机测试的代码: private void doRandomOperations (long seed) throws Throwable { Random random = new Random (seed); try { // do the random operations } catch (AssertionFailedError err) { AssertionFailedError ne = new AssertionFailedError ("For seed: " + seed + " was: " + err.getMessage ()); throw ne.initCause (err); } } public void testSomeNewRandomScenarioToIncreaseCoverage () throws Throwable { doRandomOperations (System.currentTimeMillis ()); } 我们在报错信息中加入seed信息后,事情就变得明朗了。 这只是第一步,我们暂且叫做定位随机错误。接下来,我们回到传统的回归测试,加入: public void testThisUsedToFailOnAuthorBirthday () throws Throwable { doRandomOperations (105730909304L); } 当然我们可以更进一步把测试代码写得更人性一点:把seed 翻译成具体操作的序列。这里就留给读者了。
随机但不随意
上一节讲了随机测试进行的步奏,我们在具体的实践中如果真正做到了,这不光可以发现系统漏洞,并且可以有效的覆盖源码测试率。我们在实践中确实有这样的感觉。
0 0
- 随机测试
- 随机测试
- 随机测试
- 冒烟测试与随机测试
- 随机算法 素数测试
- monkey自动化随机测试
- ubuntu随机测试
- 随机测试加减法
- 素数测试随机算法
- 冒烟测试、回归测试、随机测试
- 伤害随机测试的整理
- 随机数字图形化测试
- HBase随机读写性能测试
- HBase随机读写性能测试
- 安卓monkey随机测试
- python生成随机测试文件
- 谈冒烟测试与随机测试
- 浅谈冒烟测试与随机测试
- 2014牡丹江——Hierarchical Notation
- 重写boundingBox之--忽略锚点,放缩等因素,得到精灵碰撞区域
- 十大在线编程学习网站 .
- 关于tab页嵌套datagrid高度、宽度适应 滚动条问题
- 备忘录
- 随机测试
- Android 获取版本号
- eclipse failed to create the java virtual machine 问题图文解析
- 水樹 奈々 Blog 20141011 みんな美しくてカッコイイです!!译文
- [转]mailto用法
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7
- 流转换成字符,流转换成字节流。stream2String,stream2Bytes
- Oracle corrupt block(坏块)详解
- dedecms自定义表单解析DEDE标签方法并共用默认头尾模板(原创)