我是新手!以后希望大家多多帮助! 谢谢!

发布新日志

  • 2007-03-07 | 虚拟内存的定义和设置【转】

    caicai1724 发布于 2007-04-27 22:22:34

    Windows操作系统用虚拟内存来动态管理运行时的交换文件。为了提供比实际物理内存还多的内存容量以供使用,Windows操作系统占用了硬盘上的一部分空间作为虚拟内存。当CPU有需求时,首先会读取内存中的资料。当所运行的程序容量超过内存容量时,Windows操作系统会将需要暂时储存的数据写入硬盘。所以,计算机的内存大小等于实际物理内存容量加上“分页文件”(就是交换文件)的大小。如果需要的话,“分页文件”会动用硬盘上所有可以使用的空间。

    如果你的系统虚拟内存太低,可以鼠标右击“我的电脑”选择“属性→高级→性能下设置→高级→打开虚拟内存设置”,可以重新设置最大值和最小值,按物理内存的1.5~2倍来添加数值,也可以更改虚拟内存的存放位置,可以设置放到其他容量较大的硬盘分区,让系统虚拟内存有充分的空间,让系统运行更快。

    虚拟内存太低有三种解决办法:

    1. 自定义的虚拟内容的容量(系统默认是自动)太小,可以重新划分大小。

    2. 系统所在的盘(一般是C盘)空余的容量太小而运行的程序却很大,并且虚拟内存通常被默认创建在系统盘目录下,我们通常可以删除一些不用的程序,并把文档图片以及下载的资料等有用文件移动到其他盘中,并清理“回收站”,使系统盘保持1GB以上的空间,或者将虚拟内存定义到其他空余空间多的盘符下。

    3. 系统盘空余的容量并不小,但因为经常安装、下载软件,并反复删除造成文件碎片太多,也是容易造成虚拟内存不足的原因之一,虚拟内存需要一片连续的空间,尽管磁盘空余容量大,但没有连续的空间,也无法建立虚拟内存区。可以用磁盘工具整理碎片。
  • 测试用例的一些观点

    菜菜蝴蝶 发布于 2007-04-09 09:12:48

    这里就测试用例在功能测试上的设计方向,大略的谈谈我自己的一些浅见。

    测试用例是测试执行的关键,它直接指导如何测试。测试用例的产生源于测试需求,所以在此之前需要把测试需求做好。根据测试需求的分类,在系统功能方面,我把它分成三个集合:界面功能,通用功能,业务功能。任何一个页面的元素都可以分解成这三个集合中的子集或元素。根据这三个集合的特点选择不同的测试用例设计方式。具体的设计可以参考不同的用例模板,对于界面功能,选择简单的模版,甚至列表都可以,因为它们的元素一般都比较独立。通用功能指在很多系统中都会出现的一些常规功能,比如:“上一页”,“返回”,“返回主界面”等,它们有页面的动态变化。在数据库里的反映,就是最多只涉及单个表格的改动,并不引起表与表之间的连锁反应。它所使用的用例模式可采用现在常用的描述法表示。不过对具体系统中的某些功能点还需要具体再考虑。

    测试用例设计的重点就是业务功能。对于一个熟练的测试人员来说,界面和通用功能的检查,用例已在他们的心中,并不需要文档指导。业务功能是一个系统的核心,它往往也代表了一个管理软件的价值。业务功能的测试用例模版,我现在比较支持场景法。对主业务流的设计采取全路径的检测,因为他们的节点不是特别多,其它的不再累述。除了对系统正确业务流执行的设计外,还有其它一些设计方法,根据测试人员的不同特点,他们的设计也会有所不同。业务功能的设计在我看来是最能反映出测试设计人员的专业水平。因为它不但需要好的测试技术还需要好的系统相关行业知识。

    这种用例分类的想法,是为公共用例库的建立策化。为了方便测试文档管理,培养新人,特别是将熟练的测试人员从重复繁重的文档工作中脱离出来,重点放在如何检查系统上。这种分离是有必要的。此外还有一个特别操作集,源于某些测试人员的非常规操作,范围超出三个集合,但错误对系统的影响很大。这个集合比较小,可以单独管理,用于对系统稳定性的考察。

    我有时候觉得系统就跟人一样,没有完美的人,也没有完美的系统,我们只是努力做得更好。

  • 2007-01-10 | 工作中测试用例总结

    caicai1724 发布于 2007-04-27 21:51:19

    测试用例设计总结:
    测试用例
    测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。需要把把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。
    二.测试用例的设置
    1.按功能测试是最简捷的,按用例规约遍历测试每一功能。
    2.路径分析是一个很好的方法,对于复杂操作的程序模块,其各功能的实施是相互影响、紧密相关、环环相扣的,可以演变出数量繁多的变化。没有严密的逻辑分析,产生遗漏是在所难免。其最大的优点是在于可以避免漏测试。
    三.设计测试用例方法
    测试用例可以分为基本事件、备选事件和异常事件。
    1.基本事件的测试用例应包含所有需要实现的需求功能,覆盖率达100%。从需求和设计中所有基本实现的功能覆盖。用于证明该需求已经满足,通常称作正面测试用例。
    2.设计备选事件和异常事件的用例,则要复杂和困难得多。往往在设计编码阶段形成的文档对备选事件和异常事件分析描述不够详尽。而测试本身则要求验证全部非基本事件,并同时尽量发现其中的软件缺陷。反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。
    四.测试常用的基本方法
    等价类划分法、边界值分析法、错误推测法、因果图法、逻辑覆盖法等设计测试用例。
    步骤1:首先使被测单元运行(模块设计导出的测试,对等区间划分),如果这个都有问题,可以直接把版本打回去
    步骤2:正面测试(Positive Testing) 正面测试的测试用例用于验证被测单元能够执行应该完成的工作。测试设计者应该查阅相关的设计说明;每个测试用例应该测试模块设计说明中一项或多项陈述。如果涉及多个设计说明,最好使测试用例的序列对应一个模块单元的主设计说明。(设计说明导出的测试,对等区间划分,状态转换测试)
    步骤3:负面测试(Negative Testing)负面测试用于验证软件不执行其不应该完成的工作。这一步骤主要依赖于错误猜测,需要依靠测试设计者的经验判断可能出现问题的位置。(错误猜测,边界值分析,内部边界值测试,状态转换测试)
    步骤4:设计需求中其它测试特性用例设计,如果需要,应该针对性能、余量、安全需要、保密需求等设计测试用例。
    步骤5:执行测试用例
    五.测试用例的实施
    1.在实施测试时测试用例作为测试的标准,但测试人员可以在实施过程中添加其他有效的测试用例。并对测试情况记录在测试用例管理软件(TD)中,以便自动生成测试结果文档。
    2.测试数据和测试用例是分离的,除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。
    3.测试用例在形成文档后也还需要不断完善。主要来自三方面的缘故:第一、在测试过程中发现设计测试用例时考虑不周,需要完善;第二、在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;第三、软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新。
    六.测试用例设计及执行经验总结
    1.通常应该避免依赖先前测试用例的输出。虽然会多花点时间,但是有价值的
    2.测试用例设计过程中,包括作为试验执行这些测试用例时,常常可以在软件构建前
    就发现BUG。还有可能在测试设计阶段比测试执行阶段发现更多的BUG。
    3.执行用例的时候,正面测试用例测试出BUG,负面测试用例也会有相同的问题,但测试点并不是这个,可以考虑下轮测试执行,做到有效测试用例全覆盖又最有效率
    4.定义测试用例的执行顺序
    在测试用例执行过程中,你会发现每个测试用例都对测试环境有特殊的要求,或者对测试环境有特殊的影响。因此,定义测试用例的执行顺序,对测试的执行效率影响非常大。比如某些异常测试用例会导致服务器频繁重新启动,服务器的每次重新启动都会消耗大量的时间,导致这部分测试用例执行也消耗很多的时间。那么在编排测试用例执行顺序的时候,应该考虑把这部分测试用例放在最后执行,如果在测试进度很紧张的情况下,如果优先执行这部分消耗时间的异常测试用例,
    七.黑盒测试方法
    1.对等区间划分
    对等区间划分是测试用例设计的非常形式化的方法。它将被测软件的输入输出划分成一
    些区间,被测软件对一个特定区间的任何值都是等价的。
    2.边界值分析
    边界值分析使用对等区间划分相同的分析。但是,边界值分析假定错误最有可能出现在
    区间之间的边界。边界值分析将一定程度的负面测试加入到测试设计中,期望错误会在区间
    边界发生,对边界值的两边都需设计测试用例。
    3.错误猜测
    错误猜测大多基于经验,需要从边界值分析等其他技术获得帮助。这种技术猜测特定软件类型可能发生的错误类型,并且设计测试用例查出这些错误。
    八.搭建测试环境以及用例执行过程中遇到的问题
    1.搭建测试环境
    测试用例执行过程中,搭建测试环境是第一步。一般来说,软件产品提交测试后,开发人员应该提交一份产品安装指导书,在指导书中详细指明软件产品运行的软硬件环境,如果开发人员拒绝提供相关的安装指导书,搭建测试中遇到问题的时候,测试人员可以要求开发人员协助,这时候,一定要把开发人员解决问题的方法记录下来,避免同样的问题再次请教开发人员,这样会招致开发人员的反感,也降低了开发人员对测试人员的认可程度。 可以形成自己的安装说明文档。
    2.可测试性
    如果软件产品提供了日志功能,比如有软件运行日志、用户操作日志,一定在每个测试用例执行后记录相关的日志文件,作为测试过程记录,一旦日后发现问题,开发人员可以通过这些测试记录方便的定位问题。而不用测试人员重新搭建测试环境,为开发人员重现问题。
    3。发现bug时
    及时确认发现的问题: 测试执行过程中,如果确认发现了软件的缺陷,那么可以毫不犹豫的提交问题报告单。如果发现了可疑问题,又无法定位是否为软件缺陷,那么一定要保留现场,然后知会相关开发人员到现场定位问题。如果开发人员在短时间内可以确认是否为软件缺陷,测试人员给予配合;如果开发人员定位问题需要花费很长的时间,测试人员千万不要因此耽误自己宝贵的测试执行时间,可以让开发人员记录重新问题的测试环境配置,然后,回到自己的开发环境上重现问题,继续定位问题。
    4。及时更新测试用例
    测试执行过程中,应该注意及时更新测试用例。往往在测试执行过程中,才发现遗漏了一些测试用例,这时候应该及时的补充;往往也会发现有些测试用例在具体的执行过程中根本无法操作,这时候应该删除这部分用例;也会发现若干个冗余的测试用例完全可以由某一个测试用例替代,那么删除冗余的测试用例。 总之,测试执行的过程中及时地更新测试用例是很好的习惯。不要打算在测试执行结束后,统一更新测试用例,如果这样,往往会遗漏很多本应该更新的测试用例。
    5.提交一份优秀的问题报告单
    软件测试提交的问题报告单和测试日报一样,都是软件测试人员的工作输出,是测试人员绩效的集中体现。因此,提交一份优秀的问题报告单是很重要的。软件测试报告单最关键的域就是 “ 问题描述 ” ,这是开发人员重现问题,定位问题的依据。问题描述应该包括以下几部分内容:软件配置、硬件配置、测试用例输入、操作步骤、输出、当时输出设备的相关输出信息和相关的日志等。

    九.实际工作测试用例设计
    1.KC客户端
    主模块分解:登陆,注册,通讯录,IM,邮件,个人设置等等
    单个大模块再次分解:登陆流程(客户端,CS,注册系统,短信,权限,voip),每个系统模块完成它自己的任务,但是测试刚入门,怎么实现以及怎么测,怎么查看数据在后来比较长的时间内才越来越清晰,测试用例也越来越有效。这是测试范围
    技术基础:windows软件基础(内存,cpu,数据保存等)
    2.注册系统
    主模块分解:有许多种注册方式,每种注册方式的流程都有不同的地方,依赖的其他的模块也不相同,命令字也不同,所以可以再分解,开发人员会输出设计流程图(从网站到注册系统,到第三方系统验证,短信系统,数据库,权限系统,返回结果)
    每个流程也会有很多步骤,每个步骤都会有各种不同的环境条件输入输出情况,每个步骤都有它的实现方式,日志记录,数据库修改,数据输出,在流程中有很多业余规则(每种注册方式分配号码规格会不同,多少天不能重复注册等等)和设计规则(同一IP注册有时间限制,手机验证码最多发多少次等等),这些都是功能点,每个功能点可以设计出几个测试用例(正面的,负面的,边界的),负面的用例基本上会用到错误码。2个功能点存在某种关联性,可以设计出组合操作的用例出来进行测试。
    因为时间关系,可以直接测试整体流程,无法测试到的情况,用CT(开发人员开发的一个测试接口工具)来测试单个的模块,或者客户端还没出来,可以先测试命令字
    测试计划->模块分解->根据需求和设计文档设计测试用例->执行测试(需要观测的东西很多,可以在用例中写出数据库脚本,观察点)->发现BUG,并确定是BUG->补充测试用例->第二次版本测试->发现BUG,并确定是BUG->回归测试->验证测试
    版本修改的测试:数据库表修改->考虑影响到的范围有多少,然后测试多少,数据库表结构修改脚本也要测试,一方面了解脚本是否有问题,一方面了解上线时会花费多少时间。
                    业务流程修改->连模块都修改了,测试用例可以再利用,修改相应的流程,观察的点
                    某些规则修改->将旧的相关用例挖掘出来,更新并执行测试,并考虑到相关的功能点
                    最后一步,还是验证测试,跑完基本测试用例
    版本功能的增加:增加新功能点的测试用例并执行,是否影响到其他功能?需要测试
    3.CS系统
    当时测的是更新版本,添加和修改了一些功能
    同上,修改了哪些新增了哪些,功能点设计出用例,执行并观测过程和数据
    4.网站系统
    有4个工程:mykc,client,reg,card
    有2个web服务器:apache,tomcat
    环境:1个客户端(IE6.0),1个网络(内网),1个测试服务器(22)
    每个工程完成它自己的需求功能
    网站可分为静态和动态页面,静态页面有apache服务,目录为keepc。动态页面有tomcat服务,目录为4个工程。动态页面中的图片为keepc目录里的,同样需要这个目录。

    5.广告系统,邮件奖励系统

  • [论坛] 软件回归测试及其实践

    songfun 发布于 2004-06-30 14:24:22

    来源:赛宝软件评测中心 作者:信息产业部电子第五研究所 李丹 刘杰

    摘要:本文描述了软件回归测试的概念和进行回归测试的基本步骤,介绍了可用于回归测试的测试用例库的维护方法,给出了几种可以可保证回归测试效率和有效性的回归测试策略,总结了回归测试时应该注意的一些实际问题。

    关键词:回归测试;测试用例;基线测试用例库

    Software Regression Testing and It’s Practice

    Abstract:The article present the conception of regression testing and the step of executing this testing. Introduce how to maintenance the test case library which used in regression testing ,and provide the method of ensure regression testing’s validity. Finally, it gives some problem must be careful in the period of regression testing.

    Keywords:regression testing;test case;baseline test case library

    作者简介:李丹(1978-),女,江苏如东人,信息产业部电子第五研究所助理工程师,从事软件可靠性研究及测试工作。

    一、 概述

    在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所含错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表现,而没有修复错误本身,从而造成修改失败;修改还有可能产生副作用从而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功能。为了验证修改的正确性及其影响就需要进行回归测试。

    回归测试在软件生命周期中扮演着重要的角色,因忽视回归测试而造成严重后果的例子不计其数,导致阿里亚娜5型火箭发射失败的软件缺陷就是由于复用的代码没有经过充分的回归测试造成的。

    回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

    二、 回归测试策略

    对于一个软件开发项目来说,项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。

    回归测试需要时间、经费和人力来计划、实施和管理。为了在给定的预算和进度下,尽可能有效率和有效力地进行回归测试,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。

    1、测试用例库的维护

    为了最大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或者新版本的软件会添加一些新的功能或者在软件功能上产生某些变化。随着软件的改变,软件的功能和应用接口以及软件的实现发生了演变,测试用例库中的一些测试用例可能会失去针对性和有效性,而另一些测试用例可能会变得过时,还有一些测试用例将完全不能运行。为了保证测试用例库中测试用例的有效性,必须对测试用例库进行维护。同时,被修改的或新增添的软件功能,仅仅靠重新运行以前的测试用例并不足以揭示其中的问题,有必要追加新的测试用例来测试这些新的功能或特征。因此,测试用例库的维护工作还应包括开发新测试用例,这些新的测试用例用来测试软件的新特征或者覆盖现有测试用例无法覆盖的软件功能或特征。

    测试用例的维护是一个不间断的过程,通常可以将软件开发的基线作为基准,维护的主要内容包括下述几个方面。

    (1)、删除过时的测试用例

    因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这些测试用例就会过时。例如,某个变量的界限发生了改变,原来针对边界值的测试就无法完成对新边界测试。所以,在软件的每次修改后都应进行相应的过时测试用例的删除。

    (2)、改进不受控制的测试用例

    随着软件项目的进展,测试用例库中的用例会不断增加,其中会出现一些对输入或运行状态十分敏感的测试用例。这些测试不容易重复且结果难以控制,会影响回归测试的效率,需要进行改进,使其达到可重复和可控制的要求。

    (3)、删除冗余的测试用例

    如果存在两个或者更多个测试用例针对一组相同的输入和输出进行测试,那么这些测试用例是冗余的。冗余测试用例的存在降低了回归测试的效率。所以需要定期的整理测试用例库,并将冗余的用例删除掉。

    (4)、增添新的测试用例

    如果某个程序段、构件或关键的接口在现有的测试中没有被测试,那么应该开发新测试用例重新对其进行测试。并将新开发的测试用例合并到基线测试包中。

    通过对测试用例库的维护不仅改善了测试用例的可用性,而且也提高了测试库的可信性,同时还可以将一个基线测试用例库的效率和效用保持在一个较高的级别上。

    2、回归测试包的选择

    在软件生命周期中,即使一个得到良好维护的测试用例库也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。一个完全的回归测试包括每个基线测试用例,时间和成本约束可能阻碍运行这样一个测试,有时测试组不得不选择一个缩减的回归测试包来完成回归测试。

    回归测试的价值在于它是一个能够检测到回归错误的受控实验。当测试组选择缩减的回归测试时,有可能删除了将揭示回归错误的测试用例,消除了发现回归错误的机会。然而,如果采用了代码相依性分析等安全的缩减技术,就可以决定哪些测试用例可以被删除而不会让回归测试的意图遭到破坏。

    选择回归测试策略应该兼顾效率和有效性两个方面。常用的选择回归测试的方式包括:

    (1)、再测试全部用例

    选择基线测试用例库中的全部测试用例组成回归测试包,这是一种比较安全的方法,再测试全部用例具有最低的遗漏回归错误的风险,但测试成本最高。全部再测试几乎可以应用到任何情况下,基本上不需要进行分析和重新开发,但是,随着开发工作的进展,测试用例不断增多,重复原先所有的测试将带来很大的工作量,往往超出了我们的预算和进度。

    (2)、基于风险选择测试

    可以基于一定的风险标准来从基线测试用例库中选择回归测试包。首先运行最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳定的测试用例,这些用例即便可能测试到缺陷,这些缺陷的严重性也仅有三级或四级。一般而言,测试从主要特征到次要特征。

    (3)、基于操作剖面选择测试

    如果基线测试用例库的测试用例是基于软件操作剖面开发的,测试用例的分布情况反映了系统的实际使用情况。回归测试所使用的测试用例个数可以由测试预算确定,回归测试可以优先选择那些针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障。这种方法可以在一个给定的预算下最有效的提高系统可靠性,但实施起来有一定的难度。

    (4)、再测试修改的部分

    当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下,回归测试尽可能覆盖受到影响的部分。

    再测试全部用例的策略是最安全的策略,但已经运行过许多次的回归测试不太可能揭示新的错误,而且很多时候,由于时间、人员、设备和经费的原因,不允许选择再测试全部用例的回归测试策略,此时,可以选择适当的策略进行缩减的回归测试。

    3、回归测试的基本过程

    有了测试用例库的维护方法和回归测试包的选择策略,回归测试可遵循下述基本过程进行:

    (1). 识别出软件中被修改的部分;

    (2). 从原基线测试用例库T中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T0。

    (3). 依据一定的策略从T0中选择测试用例测试被修改的软件。

    (4). 如果必要,生成新的测试用例集T1,用于测试T0无法充分测试的软件部分。

    (5). 用T1执行修改后的软件。

    第(2)和第(3)步测试验证修改是否破坏了现有的功能,第(4)和第(5)步测试验证 修改工作本身。

    三、 回归测试实践

    在实际工作中,回归测试需要反复进行,当测试者一次又一次地完成相同的测试时,这些回归测试将变得非常令人厌烦,而在大多数回归测试需要手工完成的时候尤其如此,因此,需要通过自动测试来实现重复的和一致的回归测试。通过测试自动化可以提高回归测试效率。为了支持多种回归测试策略,自动测试工具应该是通用的和灵活的,以便满足达到不同回归测试目标的要求。

    在测试软件时,应用多种测试技术是常见的。当测试一个修改了的软件时,测试者也可能希望采用多于一种回归测试策略来增加对修改软件的信心。不同的测试者可能会依据自己的经验和判断选择不同的回归测试技术和策略。

    回归测试并不减少对系统新功能和特征的测试需求,回归测试包应包括新功能和特征的测试。如果回归测试包不能达到所需的覆盖要求,必须补充新的测试用例使覆盖率达到规定的要求。

    回归测试是重复性较多的活动,容易使测试者感到疲劳和厌倦,降低测试效率,在实际工作中可以采用一些策略减轻这些问题。例如,安排新的测试者完成手工回归测试,分配更有经验的测试者开发新的测试用例,编写和调试自动测试脚本,做一些探索性的或ad hoc测试。还可以在不影响测试目标的情况下,鼓励测试者创造性地执行测试用例,变化的输入、按键和配置能够有助于激励测试者又能揭示新的错误。

    在组织回归测试时需要注意两点,首先是各测试阶段发生的修改一定要在本测试阶段内完成回归,以免将错误遗留到下一测试阶段。其次,回归测试期间应对该软件版本冻结,将回归测试发现的问题集中修改,集中回归。

    在实际工作中,可以将回归测试与兼容性测试结合起来进行。在新的配置条件下运行旧的测试可以发现兼容性问题,而同时也可以揭示编码在回归方面的错误。

    参考文献:

    [1] Glenford J.Myers,计算机软件测试技巧,清华大学出版社,1985。

    [2] Robert V. Binder,面向对象系统的测试,人民邮电出版社,2001。

    [3] Rex Black, 测试流程管理,北京大学出版社,2001。

    [ Last edited by songfun on 2004-6-30 at 14:25 ]
  • 软件测试用例的认识误区

    believe 发布于 2007-05-11 09:03:15

    软件测试用例的认识误区

    软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。

    在实际软件项目测试过程中,由于对软件测试用例的作用和设计方法的理解不同,测试人员(特别是刚从事软件测试的新人)对软件测试用例存在不少错误的认识,给实际软件测试带来了负面影响,本文对这些认识误区进行列举和剖析。

    误区之一:测试输入数据设计方法等同于测试用例设计方法

    现在一些测试书籍和文章中讲到软件测试用例的设计方法,经常有这样的表述:测试用例的设计方法包括:等价类、边界值、因果图、错误推测法、场景设计法等。这种表述是很片面的,这些方法只是软件功能测试用例设计中如何确定测试输入数据的方法,而不是测试用例设计的全部内容。

    这种认识的不良影响可能会使不少人认为测试用例设计就是如何确定测试的输入数据,从而掩盖了测试用例设计内容的丰富性和技术的复杂性。如果测试用例设计人员把这种认识拿来要求自己,则害了自己;拿来教人,则害了别人;拿来指导测试,则害了测试团队。听起来似乎是小题大做,但是绝不是危言耸听

    无疑,对于软件功能测试和性能测试,确定测试的输入数据很重要,它决定了测试的有效性和测试的效率。但是,测试用例中输入数据的确定方法只是测试用例设计方法的一个子集,除了确定测试输入数据之外,测试用例的设计还包括如何根据测试需求、设计规格说明等文档确定测试用例的设计策略、设计用例的表示方法和组织管理形式等问题。

    在设计测试用例时,需要综合考虑被测软件的功能、特性、组成元素、开发阶段(里程碑)、测试用例组织方法(是否采用测试用例的数据库管理)等内容。具体到设计每个测试用例而言,可以根据被测模块的最小目标,确定测试用例的测试目标;根据用户使用环境确定测试环境;根据被测软件的复杂程度和测试用例执行人员的技能确定测试用例的步骤;根据软件需求文档和设计规格说明确定期望的测试用例执行结果。

    误区之二:强调测试用例设计得越详细越好

    在确定测试用例设计目标时,一些项目管理人员强调测试用例越详细越好。具体表现在两个方面:尽可能设计足够多的设计用例,测试用例的数量阅读越好;测试用例尽可能包括测试执行的详细步骤,达到任何一个人都可以根据测试用例执行测试,追求测试用例越详细越好。

    这种做法和观点最大的危害就是耗费了很多的测试用例设计时间和资源,可能等到测试用例设计、评审完成后,留给实际执行测试的时间所剩无几了。因为当前软件公司的项目团队在规划测试阶段,分配给测试的时间和人力资源是有限的,而软件项目的成功要坚持质量、时间、成本的最佳平衡,没有足够多的测试执行时间,就无法发现更多的软件缺陷,测试质量更无从谈起了。

    编写测试用例的根本目的是有效地找出软件可能存在的缺陷,为了达到这个目的,需要分析被测试软件的特征,运用有效的测试用例设计方法,尽量使用较少的测试用例,同时满足合理的测试需求覆盖,从而达到少花时间多办事的效果。

    测试用例中的测试步骤需要详细到什么程度,主要取决于测试用例的最终用户(即执行这些测试用例的人员),以及测试用例执行人员的技能和产品熟悉程度。如果编写测试用例的人员也是测试用例执行人员,或者测试用例的执行人员深刻了解被测软件,测试用例就没有必要太详细。而如果是测试新人执行测试用例,或者软件测试外包给独立的第三方公司,那么测试用例的执行步骤最好足够详细。

    误区之三:追求测试用例设计一步到位

    现在软件公司都意识到了测试用例设计的重要性了,但是一些人认为设计测试用例是一次性投入,测试用例设计一次就万事大吉了,片面追求测试设计的一步到位

    这种认识造成的危害性使设计出的测试用例缺乏实用性,或者误导测试用例执行人员,误报很多不是软件缺陷的“Bug”,这样的测试用例在测试执行过程中形同虚设,难免沦为垃圾文档的地步。

    唯一不变的是变化。任何软件项目的开发过程都处于不断变化过程中,用户可能对软件的功能提出新需求,设计规格说明相应地更新,软件代码不断细化。设计软件测试用例与软件开发设计并行进行,必须根据软件设计的变化,对软件测试用例进行内容的调整,数量的增减,增加一些针对软件新增功能的测试用例,删除一些不再适用的测试用例,修改那些模块代码更新了的测试用例。

    软件测试用例设计只是测试用例管理的一个过程,除此之外,还要对其进行评审、更新、维护,以便提高测试用例的新鲜度,保证可用性。因此,软件测试用例也要坚持与时俱进的原则。

    误区之四:让测试新人设计测试用例

    在与测试同行交流的过程中,不少刚参加测试工作的测试新人经常询问的一个问题是:怎么才能设计好测试用例?。因为他(她)们以前从来没有设计过测试用例,面对大型的被测试软件感到老虎吃天,无从下口

    让测试新人设计测试用例是一种高风险的测试组织方式,它带来的不利后果是设计出的测试用例对软件功能和特性的测试覆盖性不高,编写效率低,审查和修改时间长,可重用性差。

    软件测试用例设计是软件测试的中高级技能,不是每个人(尤其是测试新人)都可以编写的,测试用例编写者不仅要掌握软件测试的技术和流程,而且要对被测软件的设计、功能规格说明、用户试用场景以及程序/模块的结构都有比较透彻的理解。

    因此,实际测试过程中,通常安排经验丰富的测试人员进行测试用例设计,测试新人可以从执行测试用例开始,随着项目进度的不断进展,测试人员的测试技术和对被测软件的不断熟悉,可以积累测试用例的设计经验,编写测试用例。

Open Toolbar