欢迎光临 - 各位同仁看完博客记得留言啊!同时请关注我的博客,http://blog.magustest.com

《软件测试》第七章

上一篇 / 下一篇  2007-08-19 22:59:11 / 个人分类:读书笔记

Z(}"Du)u^0这个星期事情比较多,所以现在才到第七章~挺慢的~第七章:Testing the Software with X-Ray Glasses。长期在放射性环境下工作有害身体,大家工作之余保重身体哦~~

5]+v9P0~/a2c:{P j0

8^ vvTVzB0p0Dynamic White-Box Testing(动态白盒测试)-动态~软件在运行;白盒,我们能看见里面怎么运行。所以就好像是带了X-光眼镜一样。它还有另外一个名字,就是结构测试(Structural Testing)。动态白盒测试通常包含了四个方面。
4A$tmL MEH;Y5k w;R{01.直接对底层的函数,过程,库~等进行测试。也就是对API的测试51Testing软件测试网9MX9tc2y7g9? L
2.站在一个比较高的层次来测试软件,而且是根据你对软件行为的认知的情况下进行,根据code具体的情况设计有针对性的case进行测试51Testing软件测试网&{7``Dx Nt;j-A
3.验证已经设计好的case是否真的符合了当初设计的初衷。还有就是强行改变一些通过正常途径很难达到的软件的状态。这个例如说,一般软件都有很多错误的提示信息,但是要把全部错误信息通过正常渠道(用这个软件)得到,是比较困难的。不过在白盒测试里面,我们可以直接在debug器里面改相应的flag变量来达到目的
3?Tm)DW+?%]04.根据各种code coverage的结果来对已有test case的增加和修改,以达到更好的测试效果。
}7D+Yb1ck'X0个人的一些体会,其实测试就是一个动态的过程,test case需要动态的维护、更新和增加,以达到好的效果。呵呵,动态可不单只是指软件运行~一语双关啊~或者说这个词被重载(Overload)了。呵呵~~

p IKyc051Testing软件测试网k_"o lC3D7N

动态白盒测试和调试(Debugging)的区别
z_D^(M(Q%^0可以抓住一个要点,他们的目的分别是什么。白盒测试是一种测试手段,测试的目的是为了找到bug,所以白盒测试的目的是找bug。而Debug的目的是什么?是修复bug。之所会让人分不清,是因为他们有一些重叠。就是在分离并确定(Isolating)发生bug的原因。

z`xh%N%c-y0af0

#a}ey W(Q wHl0单元测试(Unit Testing)和集成测试(Integration Testing)
$ko z2B$QU~0单元测试通常是由程序员来执行的,集成测试也是。不过有些公司是Tester来完成集成测试的,我比较怀疑这个是否应该由Tester来完成~对于集成测试通常有3种。
|0X~ Nx!R h6d01.大爆炸形式。就是一次把所有东西搞到一次然后测,虽然都觉得这个模式比较扯淡,但是实际上很多公司都是这样的方式来工作,呵呵~
@2E\d \ v2{i-Dz9tls02.Bottom-up(自底向上)。就是现在有了底层的模块,然后需要一步一步做集成测试,通常会让测试的人员编写驱动模块(Test Drives)。驱动模块能模拟上层模块对下层模块的调用,从而实现了测试的目的。51Testing软件测试网x"qPcZ4\R,^
3.Top-Down(自上向下)。就是有了上层的模块然后需要编写桩模块(Stub)来模拟对底层的调用。51Testing软件测试网O-cjR d(R
其实后面的两种方法就跟单元测试里面用的一种技术(mock)是很相似的。都是模拟一个东西出来,不需要实现内部的功能,只需要把接口定义好,然后设计一些输入输出就好了。

&Rd5Lb(x#O$\XN0

6b3XL&O8E;q q:amRgBy0一个软件,其实是由数据+程序实现。所以也就有以下两种覆盖。

*HF,T+s Dg0

N @| c#{3\P,o#A0数据覆盖(Data Coverage)51Testing软件测试网Gcz9D%w/oES
1.数据流(Data Flow)- 对于黑盒测试,我们只知道输入数据和输出数据,我们对这一对数据的中间处理是一无所知的,但是在运用白盒测试的技术以后,我们可以对中间的变量转换还有变化会有一个清晰的了解。正是基于对这些的了解,所以我们可以修改或者增加一些Test Case来对那些风险比较高的地方进行充分的测试,不要忽略了白盒测试的优势--对内部的了解。51Testing软件测试网&v'YYs:W&AtW8M
2.次边界值(Sub-Boundaries)
mI0y(p ea03.公式(Formulars)和等式(Equations)-
这里面可以考虑到如果一些公式里面用到除法,那么就应该考虑一下这个如果除数是0的时候程序有没有正确处理。
7eH&{D v g04.强制错误(Error Forcing)-这个就是刚开始说的需要强制的把一些flag改未错误的标记然后看看结果是否正确。不过这里需要知道做的要合适才行。就例如说前面一个例子,一个除数是N,而且N不是直接用户输入而且结果一些计算得出最后给赋值的,我们可以考虑N=0的时候有没有错。但是如果我们通过这个“强制错误”的方法,把N赋值为0,然后报错,这样子是不合理的。因为在生成N的时候有可能已经是经过检验的不可能出现N=0的情况,如果我们硬要把N赋值为0那么其实这不是一个有效的测试用例。

]K R"K6iy,~z+WQ0

gHL#B!RQg$B0}n0代码覆盖(Code Coverage)51Testing软件测试网iz~#P-m
通常做代码覆盖都需要用工具作为辅助~通过软件的帮助我们可以得到以下的信息:
T8?tv2[x01.软件的哪些部分我们没有覆盖到,我们需要补充更多的case来覆盖他51Testing软件测试网#~%Q#wR*D1e\ D
2.那些测试用例是冗余的,我们可以把那些冗余的case用等价类来减少case的数量51Testing软件测试网P-@;O^:c$OT7H#x k/h
3.对于覆盖率不高的模块可以增加case来覆盖
51Testing软件测试网P,{.OX| YR

51Testing软件测试网z&m3}8GX pW'Pn

语句覆盖(Statement Coverage)行覆盖(Line Coverage)51Testing软件测试网;S5X8cW)}&h+JD
这个是代码覆盖里面最简单的覆盖,而且要做到100%的语句覆盖是比较容易的,不过意义不大,以为即使做到100%覆盖,还是没法很好的检查软件,因为大部分的错误都是逻辑错误。

3lo0C0D#a1vB051Testing软件测试网 m4O]!kje | t0r QW

分支覆盖(Branch Coverage)判定覆盖(Decision Coverage)
E&o ]Aa5T j-] R0
似的程序中的每个判断至少取真分支和假分支一次。做到100%的判定覆盖是有可能的。不过对于符合条件(就是出现IFAANDBANDC)分支覆盖会在其中一个组合中被测试到。这是分支覆盖的一些弱点。
L(dC8s M-G/e0
a"[3c8?#A!fB^0
条件覆盖(Condition Coverage)
M? mm3W0
条件覆盖要求是每个判断中的每个条件的可能只至少满足一次。例如(IFAANDB)那么需要有1) A=TRUE,B=FALSE,2)A=FALSE,B=TRUE。这样就完成了,这2个测试用例达到了条件覆盖的要求但是可以看看,没有达到分支覆盖。
51Testing软件测试网/ja9S-KT M7qP8B(c%K

51Testing软件测试网;\|~L1h @w7b

这章完了~呵呵,书上介绍的很简单。其实我在看其他的一些书的时候对于这个代码覆盖就介绍了好多方法,看来还是要好好补补啊,不过没有机会让我做白盒,我补这个也是瞎补啊~~

(T7W&|E\ d5BI0

TAG: 软件测试 读书笔记 白盒测试 读书 笔记

sunny的测试生活 引用 删除 测霸   /   2007-09-18 11:16:01
一直在做黑盒么
 

评分:0

我来说两句

maguschen

maguschen

男,测试工程师,白盒和自动化都做,兼职性能

日历

« 2024-01-04  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 28129
  • 日志数: 20
  • 图片数: 3
  • 建立时间: 2006-12-07
  • 更新时间: 2009-09-16

RSS订阅

Open Toolbar