测试驱动的开发流程

 测试驱动的开发流程

2.6.1  经典瀑布模式

瀑布模式是业界最早使用的开发流程,在实践中使用很广泛,瀑布模式开发流程如图2-3所示:

在瀑布模式中,从项目计划到项目发布的各个开发阶段层次分明,先进行需求分析,再依次进行概要设计、详细设计、编码、单元测试、集成测试、系统测试,直到项目发布。其中的测试计划主要内容就是写对应的测试用例。

内存测试主要包括以下测试手段。

(1)静态检查。即通过使用静态检查工具(如PC-Lint)或代码评审检视(Code-review)等手段来发现问题。静态检查既能检查内存中的堆栈溢出,还能检查内存资源泄漏等问题。不过只能检查出一部分比较浅显的问题,对复杂的内存使用情况可能无能为力。

(2)动态检查。即通过使用内存动态检查工具BoundsChecker或Purify等软件在软件运行时进行检查。动态检查的效果受两个因素影响,一是测试用例对程序执行路径的覆盖情况,二是工具本身可能存在Bug导致漏报。内存泄漏或内存越界通常很难完全检查,因为程序执行路径太多,存在的内存越界、非法访问及内存泄漏,需要在程序执行路径覆盖得比较完全时,动态测试才能发挥能力。动态检查主要针对堆内存进行检测,而非针对程序中的栈,所以仅仅做动态检查是不够的。内存测试必须采取多种测试手段相结合,才能检查得比较完善。使用工具动态检查的另一个缺点是很难在用户做Beta测试时使用这种动态检查手段。

(3)手工测试。自行编写内存测试代码进行白盒测试和黑盒测试,设计专门的用例来检查可能存在的资源泄漏和内存越界等问题。这种方法的好处是内存测试代码能够编译在程序内,可以在用户Beta测试中使用。

(4)使用监测工具进行监测。如Windows系统使用任务管理器来监测程序的内存使用情况、句柄等资源使用情况等。看是否存在资源泄漏等情况。

(5)内存碎片模拟。通过模拟系统中内存碎片很多或者模拟内存快用完的极限情况来进行测试。

(6)通过路径分析方法来提高内存测试的质量,分析可能出现的操作路径,对这些操作路径反复测试,可以利用动态检查方法进行测试。

(7)编写极端情况下的测试用例来模拟内存资源的最大消耗情况,看程序消耗的内存等资源是否会超越系统所能承受的极限。

我们再来看一下栈溢出和堆溢出问题的测试方法。

栈溢出时最大的问题就是EBP和返回地址被破坏,黑客将经过精心设计的数据写入越界的缓冲区中,将返回地址指向特定的内存区域,当函数执行完退出时,就会去执行黑客想执行的代码了。在《编写安全的代码》一书中,有利用栈溢出挂接其他想执行的程序的详细例子。

对于栈溢出的检查,目前一般是通过编译器或PC-Lint之类的软件来进行的。另外,还可以设计单元测试用例对每个单元进行测试。

堆溢出问题则比较容易测试,可以使用BoundsChecker之类的工具,也可以使用DCRT库或自己写专门的内存检测代码进行检查。

上面讲到的各种内存测试手段中的任何一种都只能发现一个方面的问题,需要将这些手段全部结合起来进行测试才能有效地进行内存测试。

你可能感兴趣的:(windows,测试,单元测试,工具,任务,编译器)