发布新日志

  • 测试基础五

    2007-09-29 13:19:16

    前言
            
    在公司已经干了6年的测试了,干测试经理也5年了。眼看就要离开奋战了6年的岗位,还真有点儿舍不得。但没办法,该离开的时候就要离开,光伤感是没有用的。正好趁此机会把自己6年来一直想写但没写的东西写出来。这篇文件纯粹是对自己工作的回顾。由于时间仓促基本上是想到什么些什么,有点儿乱,也请大家多多担待了。只要还有些人能从中找到些儿同感,或从中得到一些帮助,一些经验,我就知足了。

    什么是测试
            
    首先我要谈谈什么是测试。相信好多测试人员跟我一样,来公司之前也没有从事过任何测试工作。对于测试都是从零开始的。也有好多人跟我一样,从各种书上或是培训中得到过有关测试的各种定义。但不知道大家有没有净下心思考一下。什么是测试。在公司公司测试工作的定义是什么,测试的工作范围是什么。
            
    测试的定义根据测试技术的发展,历经了3个主要的阶段。第一个阶段,认为测试就是找产品中的bug。第二个阶段,除了找bug以外,又增加测试是对软件质量的度量这一概念。第三个阶段,明确了测试是指为了度量和提高被测试软件的质量,对测试件进行工程设计,使用和维护的并发生命周期。注意其中提高的测试件,其主要是与软件这个词进行对应。明确测试也是一种开发过程。他的工作成果就是测试件,好像平时我们所谓的测试案例、测试脚本等等都可以称为测试件。然后使用测试件去度量和提高被测试软件的质量。
            
    目前,在中国大部分软件企业,尤其是中小型的软件企业还停留在第一阶段。我个人觉得公司稍微好一点儿,处于一、二阶段之间。因为我们平时做的最多的一件事,还是找bug。至于测试案例和测试脚本等等,只占用工作量的很小一部分。而且我看不到大家在平时的测试工作中是完全依据测试案例进行测试的。目前测试案例等工作更多的成为了一种形式上的产物。从有些部分所有产品的测试案例在一个下午就能评审完就能看得出来。
            
    说到这里顺便在谈一句测试计划。目前的测试计划是作为产品计划的一部分。先明确大概发版时间,然后是各个阶段的里程碑,其中提交集成的里程碑是死的。开发需要的时间就是那么多,剩下倒推的时间就是测试的时间。这样定出的计划是否能够起到计划的作用就不好说了。现在的计划更多的是罗列联调测试的各种内容,至于时间,不说也罢。所以从中也可以开出公司的测试也就停留在一、二阶段之间。
            
    明确了公司测试的定义(个人理解),也就不难理解公司给测试人员的定位了。在测试人员中经常流传的一种说法就是国外测试人员的地位多么多么的高,开发就是coding。咱们公司开发比测试多拿多少多少,测试人员地位是开发序列中最低的。大家也要看看人家公司测试人员的素质,测试在开发过程中的重要性。再看看自己所从事的工作,就是找软件的bug。当然我也个人认为有经验极其丰富的测试人员对产品的贡献比开发和需求大。明确了这些,心里也就能少点儿不平衡感。

    测试方法的思考
            
    说完个人对测试含义的理解,再说说个人对测试方案的一些思考。
            
    个人认为在公司6年,测试方法没有什么提高。主要还是以黑盒测试为主。中间也曾经引入过各种各种工具,但测试人员真正用起来的也就是robot。而且robot主要是进行回归测试,再加上一些人并没有真正认识到其价值,应用范围也极其有限。对整体测试效率的提升影响不大。所以目前的测试方案还主要是以需求为依据的黑盒测试。至于什么极限值了,成对测试法等等,都是建立在黑盒测试的基础上,而且从我一来公司就有相应的测试项目,只不过没有明确概念而已。
            
    另一个说个人觉得6年来公司测试方法没有什么提高的原因是,6年前测试是以人为主,靠得是测试人员的经验,对产品的熟悉程度,对业务的理解程度。6年后测试还是以人为主,人就是测试的主体,产品质量的保证。还没有过渡到测试案例就是测试的主体,测试案例的完整性是产品质量的保证。只要测试还是以人为本,我觉得测试的效率就不会有太大提高,产品质量的信心来源也是对相关测试人员的信任。
            
    我个人觉得以黑盒测试为主要的测试方法没错,而且也比较符合目前公司的测试现状。但一定要注意各种经验的总结、积累,更重要的是共享。虽然目前测试案例在测试工作过程中的地位不重要,但其毕竟是编写者的经验积累。汇总起来也是一笔可观的财富。可现在如果有人问我850的测试方案在那里,其中还有多大比例能够用在现在的产品中,在现在的测试工作中有多少以前的案例能够复用。其他产品中的测试案例中有多少是关于接口功能,有多少我可以借鉴。我不知道,这也是自己工作不到位的地方。所以我要说的作为黑盒测试为主要的测试方法,一定要注意测试经验的总结和共享。
            
    而且我认为一个人如果黑盒测试能做到位,做到最后培养的是一种测试的感觉。测到最后,产品你一看就能知道那里可能有问题,那里应该没什么问题。这样有重点地投入测试力量可以收到事半功倍的效果。可这是需要大量测试经验的积累的,不是我告诉你,你就知道的能力。在此前提上加强测试人员之间的横向沟通,形成经验贡献。可以较快的培养测试人员的测试感觉。
            
    最为测试经验积累的另一个重要方法就是加强对测试案例的要求和管理。每版测试案例不仅要包括新增功能,还需要包括上一版本中继承的案例,修改或删除上版案例中变更的内容。从而形成一份完整的关于产品所有功能点、接口、升级、年结等等各方面的测试案例。真正做到测试案例是测试的主体,从而提高测试效率,提高产品质量。

    测试工具的概念和作用
            
    测试工具,什么叫测试工具。我认为任何能提高你测试效率的工具都可以称之为测试工具。不仅仅指robot或是loadrunner这类专门的测试工具,也不仅仅指使用各种编程工具编写的测试工具。像总账工具、eai等,即使只是帮我们导入一些常用档案,也可以节约我们的测试时间也可以称之为测试工具。
            
    我个人现在公司测试在测试工具开发上还很不足。在公司里一提起测试工具,大家第一个想到的可能就是robot。即使是robot应用的也不够深入。大家经常认为robot主要录制gui的脚本,跟产品界面联系紧密。每次回放成功率不高,各个版本间脚本复用率也较低。而且每次总是以各种理由将脚本录制放到最后,经常就不了了之了。最后阶段的测试任务实在太紧。我想说的是robot的应用虽然有各种各样的局限性,但其毕竟提高了测试效率。比如说安装盘验证,使用robot验证,每天都可以节约一半以上的验证时间,这就是效率。认识了它的好处,才能想尽办法解决或避免在robot使用中的各种问题。以前同事有一套robot脚本规范就很好,使用后不仅提高了回放成功率,而且回放中断后,继续回放也变得很容易。所以说使用robot后,想100%回放成功不可能,想不再进行脚本的调试也不可能。认识这两个问题后,就需要加强robot使用经验的总结和共享,有针对性地加强robot使用问题的研究,每版测试开始时针对上版robot脚本的复用问题进行研究。这样才能用好它,真得使之成为一个工具,而不是一项任务。
            
    一种工具也不是万能,有许多针对产品特性的测试工具。只能自己开发,大家应该积极提需求。凡是认为有可能提高测试效率的工具需求都可以提。能从网上找到现成的工具解决需求更好。不能,如果是普遍性的需求,可以专门进行开发。因为咱们产品的特性,每版间测试工具的复用度很大。从长远看就是节约开发成本,缩短开发周期。
            
    在现阶段加大测试工具的适用范围和力度,用好各种测试工具,可能是提高整体测试效率最快最好的方法。但一定要加大推广的力度。否则有了好的工具,没人用或用不起来也是没用。

    如何看待各种规则和执行
    可能大家觉得平时开发过程中有好多规则、制度。这些除了一些自己公司内根据各种情况制定的外,大部分都是跟cmm体系相关的一些规则。可以说是已经被许多软件公司验证过,可以提高开发和测试效率的规则。但好多人觉得起没有什么用,就是在浪费时间。总是以一种完成任务或是应付差事的心情去做。我觉得大家之所以觉得其没用,恰恰就是由于你去做这件事的动机不对。总以应付差事的心情去做,你就不可能真正理解这么做的目的,这样做能给你带来什么好处,你从中会得到什么收益。所以我个人认为,既然有规则,不管是公司自创的或是借鉴其他标准,都是为了解决开发过程中的问题,为了提高开发的效率,保证产品质量。也许这些规则中有这样那样的不合理,但只有你认真地去做了,才能发现其中的不妥之处,才能改进,才能更有助于你的工作。
    执行也是我觉得在工作中需要进一步加强的环节。许多规则就是因为执行力度不足,才容易让一些人找到空子,应付了事。但怎样加强执行力度,还是一个需要大家一起进行探讨的问题。
  • 测试基础四

    2007-09-29 10:02:20

    嵌入式软件的测试方法       手机软件测试       手机现在在社会上应用很广,同时针对手机上的功能增加也非常快,例如,蓝牙,例如,短信,例如,信息下载,手机游戏等,这说明在未来发展中,手机将人们带在一个孤独的社会中去。
           简单回想,我们的上辈人开始用手机,那是后简单的目的:就是通讯,而且还必须在既定范围内,价格高昂等,这些只有很富有的人才能染指的东西现在在社会中的每个角落都可能。放羊的。。。。
           那么手机软件怎么测试呢?测试什么呢?怎么组织呢?
           那么我做简单的分析:首先确定手机软件是嵌入式软件,那么我们抛开IC测试,抛开盲区,耐久性,耐碰撞性测试不提,就软件本身测试需要考虑的内容。
           我们说了这么多,我们整理出来手机软件测试的核心是数据的时效性,怎么理解呢?不能说我发了个短信,对方一天都无法收到?或者我打电话,对方没有任何反映,这就说明有问题。
           在例如,通过手机的红外线,能把地址薄中的资料传送的电脑中,如果在传送的过程中出错,或者对操作系统有要求,或者在传输的过程造成数据丢失,导出来的数据是无法识别的格式等,都会造成该功能无效。
           再如,手机信息的存储问题,因为手机本身有自己的系统,有自己处理信息的方式和格式,那就牵掣到的问题和外界信息交互的问题,外界需要了解其格式,阅读其格式,就需要和外界有比较信任的通讯。      
           其次,是测试本身的功能,例如,能够正常拨打电话,能够正常编辑信息,能够正常保存朋友电话,能够有历史记录,能够正常闹钟和各种设置,能够正常有提示信息等。
           我再举个例子,手机中游戏软件的测试,我们先了解手机中游戏开发语言Java,其次,由于手机中的内存大小优先,所以游戏的大小以及运行的各种指标都很小,所以用KJava。还有一个特点,手机中的游戏是回合制,所以类似的同步要求不是很高,所以测试重点就有所改变。
           那么像手机游戏的测试点在那里呢?了解这个方面的测试,需要了解几个问题,运营商对产品的要求:
    运营商对开发商提出的要求,一般情况有这么几种。第一,应用程序的大小;第二,应用程序的命名规则;第三,应用程序版本控制规则;第四,明确提出所支持的机器的类型;第五,采用的编码格式UTF _8的编码还是其他的编码;第六,外部中断的处理逻辑;第七,比对压缩后的文件和先前文件的比较。
           上面我提出了手机软件测试的七个重点,下面我逐步添加详细介绍各个部分的细节。
    第一,应用程序的大小。由于应用程序在被下载时百宝箱会根据需要插入5K的程序代码,因此要求SP提交的应用程序其大小不能超过手机最大下载尺寸减5K,下表列出了目前市场上部分JAVA手机对JAR文件下载的字节数限制情况(未列入机型请SP咨询手机厂家)
    手机型号
    最大可下载JAR文件大小
    百宝箱限制JAR文件大小
    备注
    Nokia 60系列
    无限制
    无限制
    目前由于WAP网关不能下载超过100K的JAR文件,因此对于WAP方式下载应用的手机(T720除外),百包箱限制JAR文件大小不能超过95K。
    Nokia 40系列
    64K
    59K
    Motorola T720
    无限制
    无限制
    Motorola 388
    无限制
    无限制
    Motorola 388C
    无限制
    无限制
    Siemens 3118/2128/S57/M55
    无限制
    无限制
    NEC N800
    60K
    55K
    其次,由于应用程序在被下载时百宝箱会根据需要插入程序代码,这段代码在手机上执行时要占用10K左右的堆内存,因此要求SP提交的应用程序在运行时要预留至少10K的堆内存。
    第二,应用程序的命名规则。应用程序的命名规则的字符长度不能超过12个字符长度,而且命名有一定的规则,需要SP和提供商商定,但是必须依照行业标准。另外,在提交的时候,需要了解一些要求,由于各个SP开发商开发环境,编译环境等问题,所以运营商都提出严格的打包要求。
    SP递交应用程序打包要求:
    1.    JDK使用1.3.1版本(国际版);
    2.    打包工具使用SUN公司提供的J2ME Wireless Toolkit (midp1.0版本,1.0.3或1.0.4);
    由于SUN公司的WTK只支持标准的midp1.0,不支持各手机扩展的API,需要SP对所使用的WTK进行扩充才可以支持手机扩展的API,方法是:将扩展API加到D:\WTK104\lib\midpapi.zip(假设WTK安装在D:\WTK104目录下)中即可。
    3.    不做扰码或使用RetroGuard进行扰码,不得使用别的扰码工具。
    说明:1. SP在开发时仍然可以使用原来的工具进行开发,但递交应用时请使用SUN公司的WTK进行打包;
    2. 如果SP不按照要求进行打包,出现百宝箱不能识别API的情况时将按照测试未通过的情况处理。
    第三,版本控制要求是,版本控制的格式x.x.x,应该严格遵守这个规则。
           MP3软件测试通用软件的测试方法       办公类产品测试办公类产品的延续性相对较长,所以部分模块有利于自动化测试。我在这里介绍办公类产品的测试重点在那里?
           办公类产品的特点是人们在办公中经常要用到,频率很高,所以简单,易用,方便操作容易理解成为办公类产品的首要要求。
           其次办公类产品考虑的机器的硬件配置,例如显卡,打印机等外设
           第三,办公类产品还需要测试兼容性,因为自身延续性长的特点。
           第四,办公类产品需要保证数据安全
           第五,办公类产品本身的功能逻辑
    那么怎么才能做好办公类软件的测试呢?
           首先办公软件的核心是办公,日常生活中要用到,那么按照各种排版格式自己去排版就好了,在这个过程中详细得出一些结论:第一可操作性;第二,各个模块的使用逻辑,例如:在文件中插入对象,对象能否体现出来,设置对象的绕排方式,能否设置成功,能否体现,设置对象是否打印;第三,存盘,数据安全考虑,看存盘后对象是否保存,各种字体设置是否保存,绕排方式是否保存等。第四,兼容性,因为用户使用的办公类软件很多,需要文件共享兼容。其次是本身高低版本的兼容性,需要着重考虑。第五,文件大小和不同文件格式的存盘信息。第六,各种性能指标,包括启动速度,占用磁盘大小,在使用的过程中CPU的占有情况;第七,快捷键的设定和检查,不要和系统的快捷键冲突,并且支持系统的各种设置支持系统剪贴板功能;第八,支持网络传输,能够自由的通讯和共享,能够支持协同工作,能够充分体现修改数据的同步信息。
           杀毒类产品测试       杀毒类软件是一种工具类软件,随着网络的普及,杀毒软件也越发显得重要,那么杀毒软件的测试重点是:
           能够发现病毒
           操作系统检查
           能够正确的报告并且查杀病毒
           占有的CPU占有情况
           查杀病毒的内存使用情况  
           数据安全
           软件冲突
           病毒库升级
           自动更新      
    那么在杀毒软件的时候,还有一个重要的东西,就是用户的数据安全,当杀毒软件能够清除含毒文件中的毒的时候,一定要包含用户文件的可靠性。
    ERP软件的测试方法验证测试测试管理工作       我没有读过管理方面,只是看了一些书而已,在几个团队中应用,效果还可以,所以拿出来和大家交流。
           其实无论是开发管理和测试管理,其核心应该是“理”,如果理都不通,那么管只能是强制性质,那么在软件行业,创造性的企业中,可能不能维持的很久,所以需要先“理”清楚了,然后我们来管,到那个时候也就不用管了,因为理顺了,所以大家都知道该怎么样做,什么时候做了。
           那么谈到“理”,我们需要理什么呢?理事情,把要做的事情理清楚;理目标,把要达到的目的说清楚;理思路,把做事情的思路和方法理清楚;理资源,把合理的资源调配到合适的位置上,让兴趣和能力结合。我觉得从大的方面就需要先将这些事情理清楚了,才可能使得一个团队具有非常的战斗力。
           其次,还需要和善的沟通,做到无所不晓,因为在一个团队中,气氛非常重要,也许一个人的今天心情不好,造成跟他配合的几个人都无法工作顺心,也许是感应。所以需要和大家开诚布公,把能讲的问题,能讲的事情讲清楚,让大家觉得你可以依靠,可以把心思告诉你,你尽力为大家解决后患问题,让他们能够开心踏实的做事情。
           另外,需要换位思考,充分让大家提出意见,因为如果一个团队要发展,是需要大家一起努力的,这是大家都熟知的道理,但是做起来很难。避免一言堂,让大家充分参与到设计中,在其中找到自我的感觉,找到这里没有他是不可以的,这样每一个人才能关心项目的每一个角落,而不是为了工作而工作了。
           其二,需要在“理”的基础上帮助大家总结,大家在什么地方容易犯错误,犯什么类型的错误,犯错误的原因是由于我们的思想老化了,需要改进做事情的方式,还是由于工作能力或者经验的问题。那么就需要对各种错误进行统计,以找到问题的根本原因。就问题而讨论问题,问题的实质出在那里,然后帮大家改进,自己同时也会进步。 给大家讲我现实中的例子吧,我曾经带的一个测试组,大家做事情都很卖力,而且成绩也非常显著,但是在做的过程中总是会有问题发生,问题到底出在那里呢?后来找到了原因,就是由于工作环节中出现问题了,所以他总是在那里犯错误,因为他是把工作当成工作来做了,所以他就改这个地方,我后来找到他,也找到了问题的原因,一起把问题解决了。后来我就告诉他们,如果谁在同一个地方犯同样的错误,我们的结论是他不懂,教他,共同学习,直到他告诉我可以了;如果第二次犯错误,那么我们给的结果是,他忘记了,好再学,直到他告诉我,他可以了;第三次犯同样的错误,我们给的结论是故意犯错误的,那么就要全组请喝可乐一灌。
           这个例子在现实生活中很多,主要是引导,因为如果把工作当成工作来作,可能不会用“心”,因为如果是用“心”工作他会找窍门,会找方法,否则他会厌烦;如果把工作当成自己未来的事业来做,那么就会用心工作,这样就需要我们正确的引导。
    开发方面
           开发分析       因为我们是第一次做MP3的产品,所以从技术上还处于摸索阶段,第二我们对产品的质量意识还存在一点问题,第三,四方沟通或者说回馈不够.
    问题分析目前存在的问题进度问题       四方配合问题,因为在任何一家公司做嵌入式软件的企业,存在硬件、软件开发,市场开发,测试准备四个方面的组织需要开展工作,所以那个组织的进度耽误都会严重影响产品的发布周期,在现在竞争日益剧烈的市场中,必须把握市场机会,所以需要对进度进行把握。
           建议采用作战图的形式,对各个阶段点进行有利的把握,以给各个方面赢取更多的时间,明确职责范围,则权利的有利结合,激发各个方面的积极性。采用利益共同体的原则,将各个方面合理的结合,让开发关心测试工作,让测试关心开发工作,这样形成一个有利的整体,让市场及时反馈信息,使得项目顺利进展。
    沟通问题       SPEC设计完成后,各个方面在限定的时间内做出反馈,以及时跟进,以便对产品有个明确的定位,各个方面对方案认可后,切实执行,如果出现技术问题,及时通知有关人士,以便进度和方案进行合理的修改和微调。在产品开发阶段,需要及时的总结可能遇到的问题和对问题的解决方案,通知相关人士,使得项目组的人有一种归宿感觉。
           开发需要给每个Bug做出合理的解释,或者对我们的测试人员进行相关培训,以便测试人员能够深切的理解产品,能够对产品进行合理严格的测试。
           这里提出一个建议,在测试人员提出Bug以后,知道表现,一定要弄清楚问题发生在那里,是什么导致这个Bug发生,才能有效的分析结构,有效的进行案例的补偿和测试.
    跟踪问题       跟踪问题牵扯到Bug的跟踪和进度跟踪,Bug的跟踪需要一套流程,及时的出来Bug,使得发现Bug和解决问题形成一个完整的流程。
           进度跟踪的方法,建议采用阶段点产品,定义明确的时间点,明确各个时间点上完成的功能点,保证产品可以编译,可以抽查,可以运行以完成的相关功能。这样使得大家在各个时期能够看到大家都在进步,产品在进步,有利于整个团队的士气。
    版本控制问题       定制严格的产品发布流程,降低由于时间问题,压缩测试时间,给产品发布带来的风险。建议采用的方法,由项目组定制编译计划,然后有相关人士进行讨论,各个方面达成共识之后,坚决执行。
           版本控制和进度控制密切相关。
           进行严格的代码管理,以保证公司机密资料,在代码Check in 和Check Out的时候建议由专人进行审核后方能入库,以免误操作或者敌意的操作造成代码冲刷。控制版本有几个好处和优点。
           关于Bug的回馈优点
    第一、  开发方面回馈速度快
    第二、  解决速度快
    关于测试情况的总结
    第一、  涵盖情况
    第二、  Bug的质量问题
    开发体系问题
    第一、  设计的分析做吗?技术难度?设计的合理行,进度的可行性?
    第二、  单元测试做了吗?
    第三、  CVS的Check In控制了吗?
    第四、  进度风险预估了吗?
    第五、  进度控制如何进行的?

    产品方面
           产品分析:整个产品在开发前期,市场已经找到了市场切入点,但是在现在产品要发布了,我们不能或者说很难用一系列的数据做说明,告诉高层这个产品可以发布了或者说不能发布,因为分析的数据太少了。因为数据是说明问题的基础,但是现在定了产品发布的标准,只是一个现存数据,没有预估分析可能性,对产品投入市场可能存在风险。
           建议:
    第一、  案例执行率
    第二、  案例发现bug率
    第三、  重复bug率
    第四、  KLOC
    第五、  产品日测试汇总图(察看历史曲线)


    对产品研发整体改进思路

    第一步、增强开发质量意识       做法:这个是个长远任务,但是我们可以做具体的事情,例如:检查开发单元测试情况或者单元测试代码等活动
           对设计的模块案例检查回馈情况,把质量和开发邦定,不要让测试单独承担这个压力。
    活动方式:宣讲,制度,执行,邦定
    第二步、增强测试本身素质       做法:因为测试不成型,这是现状,所以我们通过提供一些数据来提高案例设计的能力或者说告诉测试人员我们的缺陷在那里。这个是长远的事情,因为需要人力去做这个事情。提供如下数据:重复报告率,案例和Bug的比率等。加强程序概念的培训或者框架的了解,尽力从程序的概念上理解产品,尽量避免例冗余。
    活动方式:培训,数据,比较
    第三步、对产品开发过程中版本编译的控制       做法:CVS库权限控制,所有的Check in和Check out需要控制,检查代码后方可入库。另外需要制订完整的开发计划和编译计划,使得项目跟踪超向正规。
    活动方式:专人控制,以面冲掉原来的代码
    第四步、进度控制做法:在产品开发周期中定制完整的编译计划,对阶段性产品进行测试或者抽查。以保后期测试时间的争取和质量的保证。
    活动方式:认可,执行,调整
    第五步、控制进度问题       做法:明确开发模式,列举详细的开发进度,详细提出开发的功能情况,树立作战详细进度表或者叫作战牌,以鼓舞士气,让每个参与者了解进度
    活动方式:承诺,监督,跟踪
    16   做法:统一平台,统一流程,统一做事方式,实现任务单跟踪
    活动方式:准则,平台,优化。
  • 测试基础三

    2007-09-29 09:24:47

    提高案例设计水平            明确了解现在目前流行切实用的几种案例设计的方法,因为在不同的产品不同的要求有不同的设计手段,我们需要不断的学习和总结,在为了测试领域中,许多新鲜的词语都会出现。
           这种方法类似与工业领域的随即抽取统计分析法,但是工业性质牵扯到损坏或者人为原因,统计出来存在这偏差,但是应用与软件方面,虽然存在着偏差,但是不可能象硬件那么偏差很高。
           等效法       明确测试的目标,一般适合用到的范围是,制定被测试的对象是在满足某个条件的区间内的所有的所有数据。
    案例设计方法:从其中区间数据段中选择任意一个或者两个数据,只要这个数据满足了,那么其他的数据就是满足的。
    我现在举一些例子,来说明等效法在测试过程中如何应用的。
    范例1:在登陆某系统需要验证用户名,要求是长度是最小是6位,最长是14位,名字中可以包含数字,但是不能以数字开头,可以包含各种符号,不能包含中文。
    1、随意字母组合成一个12位的姓名,测试是否可以通过验证。
    2.、随意生成一个长度12位的姓名,测试是否可以通过验证
    3、测试以任意一个数字打头12位的姓名,测试是否可以通过验证
    4、测试姓名长度位12位且包含中文情况,测试是否可以通过验证
    5、测试长度不满足条件情况下,是否通过验证
    6、如果长度不满足,是以数字开头的,提示信息验证
    7、如果长度不满足,姓名中包含中文的,提示信息验证
                         ………….
    (注:)这个可能比较简单,但是说明一个问题:为什么随意生成一个12位姓名的,其实你选择8位姓名长度或者10位姓名长度是一样的,所以这种情况下考虑采用等效方法比较合适。
    范例2:有这么一个需求,要求选择1~12之间进行调整,手机的背光就会随着数值的变化而变化。总体的是数值越大越暗。
    以上需求是大家经常可以看到的。
    测试案例设计:清晰记忆1的情况,然后随意调整一个数值,因为要求是变化了,至于变化成什么样子,变暗到什么程度才正确,没有明确的指标数值,所以只需要记住临街点1的情况,然后随意调整一个数据,然后和当前调整后的数据进行比较。
    (注:)没有明确的说明,只是含糊的结果,但是总体的结果是在变化,那么这个时候比较适合使用等效法。
    因果分析法       需要有一定的程序基础,了解程序的架构,就是当问题发生以后,能够有效的补充相关的案例或者筛选相关的案例。因果分析的核心是从自己的理解去分析问题所在的真正原因。
           范例1:删除磁盘上某个文件失败,分析原因:如果是管理员权限,那么可以随意删除,无论这个文件的属性是只读的还是存档的,那么如果不能删除磁盘文件,除非是坏道上的文件。分析完成以后,使得测试案例设计有针对性,而不是盲目的将所有的文件格式都去尝试一次。
    范例2假设我们用Excel作一个计算,结果和我们用计算器计算的结果不同。
           分析:Excel的计算函数单独运算没有错误,然后插入一行,结果错误了,说明插入行导致计算错误,那么插入一行怎么会引起函数计算错误呢?原因是由于插入行后,导致传给计算函数的区域没有更新,所以造成计算结果错误,那么这个Bug就很明确了。
           范例3:假设我们平常在做讲座的时候发现在某台机器上就会死机。这是一种现象。
           分析:为什么在这台机器上死,在其他机器上不死。原因有两个,第一个先找系统原因,是否是我们的产品在当前这个系统下有Bug,经过验证没有,那问题出在那里?
           其实演示产品需要的是硬件的支持,那就是显卡,如果显卡内存不够大,可能导致某些演示文件死。
    (注)因果分析需要有广泛的知识面,使得我们在分析的时候能够拓宽面积,模糊的定位问题。
    范例4:用户给我发送一个文件,打印的时候发现是乱码。后来逼迫无奈,就让用户将这个文件传真给我。这是现象。
    分析:为什么打印出现乱码?问题基本定位,系统字库不够,系统下打印驱动问题,打印虚拟内存问题,操作系统问题,软件本身问题?最后问题经过验证,最终归结为在此操作系统下,打印驱动程序有问题,使得文件不能正常打印。
    (注:问题需要先框定范围,不要乱了套路。)
           逻辑分析法       在逻辑分析方面,也需要有一定的程序理解能力。从程序逻辑和日常常识去判断问题。逻辑分析法其实就一堆假设的罗列,推论出系列结果的假设,然后将假设反推翻,问题就可以暴露出来。无论那种方法都是通过表现去分析问题的实质的。
    范例1:我们在做MP3播放器快进和快退测试中,要考虑的同步问题,就是我们液晶显示屏上出现的歌词进度,时间进度和我们耳朵听到的进度不同。我们分析一下,为什么出现不同步现象,为什么其他的能同步,就某一个或者某几个不能同步。
           首先我们了解同步的算法:快进和快退是按照当前歌曲的数据流来计算应该到那里,它是以当前歌曲的数据流为系数,然后进行的一些调整,那么出现不同步的原因是由于系数不同造成的,所以考虑到同步问题,我们需要找不同格式不同数据流的歌曲,这样问题容易暴露,容易清楚的定位问题的真正原因。
    范例2
           我们来分析网络游戏中的交易系统,就是在游戏两个人进行物品和金钱的交易。
           怎么设计这里的案例呢?我们先梳理一下交易的逻辑关系图。
    我们一起来分析下面的逻辑关系图,在玩家进行交易之前,数据库中记录了两个玩家各自的数据,然后玩家A向玩家B发送请求,当玩家B不同意的情况下,检查各自的物品个数就可以了,这种测试相对比较简单。下面我们分析当玩家B同意的情况下的测试重点在那里?
    第一.当B同意和A进行交易的情况下,A从自己的物品箱中拿出物品,拖放到B的物品箱中,那么A和B在还没有确定的情况下,需要确信两点(A,和B相同,只不过一个提供金钱,一个提供物品)
    1、        A当前的物品是可以更换的
    2、        A拖放到交易物品栏中的物品是不能被其他人产看的
    3、        在A放弃交易的情况下,此物品还应该回到物品栏
    第二.     点击确定后测试设计的重点
    1、        点击确定后,双方的交易请求就会到服务器处理的队列中,等待服务器重新计算
    2、        当A或者B断线情况下,怎么处理?
    3、        当服务器宕机怎么处理?
    4、        当请求队列中等待的时间超过了心跳的时间,怎么处理?
    第三.       正常交易后的测试设计重点
    1、        物品数据(金钱数据的检查)
    2、        物品属性检查
    3、        物品是否能够正常交易和使用
    第四.       交易过程可能出现的情况
    1、        不是一对一的交易
    2、        在没有确认的情况下把一个物品托动到箱子后,等对方付钱后,故意断线或者更换物品
    3、        锁定物品后,不和B交易,同时也不关闭交易对话框,角色的交易标志是否被清除
    A玩家

    B玩家

    请求交易

    DB数据库记录玩家的数据


           边界数值分析法       在测试案例执行的过程中,所有调节的数据都需要考虑到边界数值的测试方法,这里我就不在赘述。但是需要注意,边界数值的测试不是枚举,只是抽样的方法。
    逃避测试的误区       市场需求引导产品质量测试是为了验证需求,保证产品质量,无论如何你都不可能做成100%的测试,不可能做成No Errors。所以我们针对不同的产品,不同的市场定位,确定不同的测试方针。
           因为企业面对的是客户,面对是企业长远利益,那么我们不可能仓促的推出产品为了迎合市场,而是需要研究,调查市场的真正需求,把用户所关心的功能提供给用户,使得其更加完善,更加稳定。
           我们从企业来分析,首先任何一家企业要生存,必须需要市场空间的支撑,目的是为了盈利,我觉得没有必要说的那么冠冕堂皇,这是事实,但是在把握产品质量和市场需求的时候,我相信很多企业会选择市场需求的,因为这是机会,是把握企业生存的机会,特别是对于发展性企业来说。(企业原因)
           我们从开发来分析,因为在开发的过程中,由于软件行业的高流动行和知识更新快的特点,风险加大,使得开发周期很难把握,这样使得产品测试时间很难控制。因为开发的进度包括市场提出需求的技术风险都很难把握。(开发的原因)
           我们从测试来分析,测试在很多企业中是没有的,那么开发人员自己来做,如果有测试人员,那测试也是随意性非常强,造成产品上市后预留很多无法预估的风险,为企业的形象蒙上了面纱(测试模式)
    合理利用2/8原则测试是列举,不是枚举,所以设计案例的时候全面是不可能的,那么需要灵活的运用2/8原则,使得测试重点清楚,容易控制。
           基于产品在开发过程中的种种风险,我们在有限的人力和资源的情况下,合理的利用2/8原则,如何把握2/8原则?首先需要了解产品的特点,让所有参与测试的人员能够了解产品的特点,这样使得工作具有针对性,至于产品的噱头,我们可以进行充足的测试,因为只是我们的产品立足市场的点。
           在时间有限的情况下,把常用的功能测试保证了,不要摊全,摊宽,这样到最后都无法总计产品的质量概念了。
           以上这么说,是一种概况,在实际的工作中大家需要总结,把进度,时间,质量等进行权衡,以保证产品的顺利发布。
    回归测试的概念测试次数不是轮回,测试的不同次数不是轮回,而是为了验证问题,那么什么时候适合安排一轮测试,需要定义标准,否则耗时耗力。
    回归测试是不可缺少的环节,在一个产品测试完成后,直接到用户手头的时候,需要千万小心,需要进行一次彻底的回归测试,这个时候包括所有的功能以及所有已经修正的问题。避免版本出现问题。
           其实在不同的资料中对回归测试有不同的解释,我就不在这里赘述。我想表明我的观点是,依照不同的开发模式,回归测试所在的时间段也不相同;当前的开发模式有瀑布型和迭代型,例如,在瀑布型的开发模式中,所有的测试活动(手工测试,系统测试,部分集成测试)都在最后进行的,而切所理解的回顾测试是为了保证在新的版本中测试修改后的问题,其实这个测试只是保证了其中一部分工作
    测试的概念测试不是为了验证问题,而是为了发现以前设计中没有发现的问题。
    自动测试只是测试的一种手段,目的是为了提高工作效率
    测试工具只是利用,不能依靠,因为工具本身没有智能的判断是否会有问题发生,自动测试不是利于测试工具,而是需要编写或者利于测试平台,编写适合自己的测试工作进展。   
    如何调整团队的作战能力建议性质:因为曾经带过四个团队,而且这个经验最少在我身上是成功的。
    形式分析测试团队,测试团队在现在国内来说在慢慢的得到重视,之所以原来不重视是因为整个行业处于摸索期,不知道采用什么方法,什么技术,作什么事情等的情况下,使得测试员好像是一些没有能力人的集合(宣讲,不听的宣讲)。
    目标计划引导测试技术和未来发展规划,因为任何人的发展需要目标,那么一个人的发展目标假如它和这个行业相关,那么它会付出一切,努力的工作,所以需要大家认可一个目标,并且让大家认为是可行的,然后我们分步骤一步步的去实现它。让他或者大家能够看到自己所喜欢或者从事行业的发展方向。
    过过老师瘾因为在做任何事情的时候,每个人都有自己的想法或者步骤,讲出来就好,这就需要开始的时候我们以任务的形式下达,我相信,到后来大家愿意自己站出来讲了,我告诉你原因。因为人本身有羞怯感,怕几个方面,怕讲错,怕人多,怕提问。
    那么如果把这几个问题都解决了,是否羞怯感就没有了呢?
    如何解决个人怕的问题:引导,因为一个人如果不能把自己的想法和思路讲出来,那么不可能把事情做的很好,其二,就是如果你把你的想法说出来,别人可能会指出你思路中走弯路的地方,对个人来说可以跳高工作效率,使得思路更加完善。
    其三,如果大家都把自己的思路说出来了,你不就节省的很多学习时间吗,另外你想过没有,当别人形成这个想法的时候,需要一定的积累,那是他的心血,这不就轻轻松松让你学到了吗?如果固步自封,那么你的思路有可能是错的,有可能是对的,但是你的知识面就只能局限在你所考虑的范围内,对个人发展不利。
    定学习目标在软件行业里面,要有发展,就需要不停的学习,不停的进步,不停的总结,才可能有长远发展,所以需要定义在这个行业阶段行的学习目标,让人感觉这个行业现有的水平只是维持,要发展,需要学习。
           在工作中学习的方法,除了自学以外,就是“偷”了,所谓偷,就是要学会问问题,把你想知道的东西刨根问底,当别人回答你问题的时候,他一定是用他知道的东西的精华来总结,那么这样你在很短的时间内,把他总结的精华全给你了。
           在学习的过程中,需要学会总结,把能总结的都整理出来,第一是经验的积累,第二呢能够做到分门别类,逐类旁通,使得相同或者类似的错误不要重范。
    兴趣和爱好       一个人工作有两种情况,第一中是真正的工作,完成就算完成了,自己也在不断的学习,不断的总结,但是缺乏激情。第二中是把工作当成自己的事业,渴望自己在这个方面成为权威或者说业界能够说话的人,也是在不断学习,不断的总结,培养职业性,培养和引导大家的兴趣和爱好,因为只有你了解了兴趣和爱好,才能更融洽的调和整个工作组的气氛,这对测试行业的领导者来说是个挑战。
    歪曲理论推理              “测试人员是由于技术不过硬,才去做测试的。”针对这个观点,我说说自己的看法。好,我给测试说几句,测试水平不过硬成立,假设成立,那么这是相对的,相对开发来说的,而且这种论调都是从开发那里扩散或传播出来的,测试在后期发现问题后,开发也许心理很痛苦,但是他不愿意暴露在脸上,使得有些问题越发变的严重,不得不修改。那么在产品后期暴露那么多问题,说明了什么呢?这么低水平的测试都能考虑到你程序设计的种种漏洞,那么说明了程序水平开发有待提高。
    在IT现在的行业中,开发的流程,模式,以及各种约定成俗
    的东西越来越多,而且相对稳定,而测试是一个全新的行业,它需要大家摸索支持,需要大家共同建立起来。
            其实,在原来的开发模式中,商家为了适应市场,为了保证利润的最大化,为了使得产品能够顺利的适应市场,那么采用各种方法,使得产品质量的定位淡薄,而现在随着人们的要求越来越高,商家的意识越来越强,各个公司或者组织渴望成立测试部门,保证产品的质量,使得测试这个行业在最近几年才发展起来。
    正确理解自动测试       首先,自动化测试是测试行业是技术,但是不是说用了自动化测试了就能发现更多的问题,它只是提高了工作效率而已.
           自动化的概念是人们在工业生产的过程中,为了提高工作效率,不断的对操作方法或者技术或者工具进行改进,减少人们普遍的手工劳动,节省时间和成本。
           而软件行业的自动化测试同样也有节约成本,提高效率的需求。所以所有的改进需要考虑到成本的问题。
           自动化测试的大前提:
    第五.       产品本身特征具有长期可维护性
    第六.       产品本身非紧迫的大项目
    第七.       产品结构相对复杂
    第八.       资源投入相对充裕
           那么作为成本,需要从几个方面去考虑,第一实现成本,第二,人力成本,第三,新技术的风险,第四,节省的成本,第五,被自动化的功能是否需要大量的手工劳动。
           所以我们理解自动化一定从成本的概念上考虑, 最少从自动化测试概念的起步应该从这个方面考虑。那么自动化测试的重点就在于他节省人力,节省时间,得到的数据更精确些,而且操作的可重复性和Bug的可重现性更强一些。
           下面我就对自动化测试做一个详细的解释,跟大家分享。
    1. 简介
    本文关注于一个实施自动化测试框架的组织的主要方面和影响。本文的意图是提供一些能够成功的实施自动化测试的指导方针。
    2. 测试自动化的神话
    有很多关于自动化测试的神话。其中的一些是真实的,而其他的一些是不正确的设想,这些不正确的设想会严重的威胁到实施自动化测试的成功。
    2.1. 我们在时间上是紧迫的 - 项目已经落后了 - 让我们使用自动化测试吧!这种情况将不能成为现实。实际上,正确的思想应该是 - 我们时间急迫 - 我们决不应该使用自动化测试。
    如果项目已经陷入到了麻烦之中,不建议实施自动化的功能测试。项目很可能因为需要大量的测试框架的准备和实施会被托跨。我饿建议将重点放在以下的事情上:
    优化测试的过程。调查并建议在目前工作基础上的测试方法和过程。建议借鉴 RUP的相关思想和过程。引进或者使单元/组件测试正式化。这是我们能够快速获得受益的很好的方法。如果正式的组件测试被使用,我建议可以使用 Rational PurifyPlus 进行单元或者组件测试。根据我的经验尽早的使用 Rational PurifyPlus 是非常值得的。在一个引入和 Rational PurifyPlus 的项目中,通常会在组件的级别得到 百分之三十的性能提升。仅仅在项目团队能够对 下列问题的回答是"Yes"时:项目能够被适当的推延。存在能够通过实施自动化测试被达到的精确的目标。项目具备建立适当的测试框架的必要条件。
    那么,你可以在一个时间紧迫的项目中适当的实施测试自动化。但是根据经验这种情况是很难发生的。总而言之,我只能说"对不起,银弹根本不存在"。
    2.2. 测试自动化就是捕获和回放
    在过去的日子中,自动化的测试工具只是被看作是一种捕获和回放的工具。当前这个神话仍然在很多测试人员的思想中。而事实上自动化测试已经远不止捕获和回放这么简单了。按照成熟度自动化的测试可以被划分为 5 个级别。
    2.2.1. 级别 1:捕获和回放
    这是使用自动化测试的最低的级别,同时这并不是自动化测试最有用的使用方式。优点:自动化的测试脚本能够被自动的生成,而不需要有任何的编程知识。缺点:你会拥有大量的测试脚本,同时当需求胡子和应用发生变化时相应的测试脚本也必须被重新录制。用法:当测试的系统不会发生变化时 - 小规模的自动化。
    2.2.2. 级别 2:捕获、编辑和回放
    在这个级别中,你使用自动化的测试工具来捕获你想要测试的功能。将测试脚本中的任何写死的测试数据,比如名字、帐号等等,从测试脚本的代码中完全删除,并将他们转换成为变量。优点:测试脚本开始变得更加的完善和灵活,并且可以大大的减少脚本的数量和维护的
    工作。缺点:需要一定的编知识。频繁的变化可能会引起"意大利面条式的代码",并且变更和维护几乎是不可能的。用法:当进行回归测试时,被测试的应用有很小的变化,比如仅仅是针对计算的代码变
    化,但是没有关于 GUI 界面的变化。你能够使用这种技术通过快速的编制一些测试脚本以检验你的想法来探索你的预定的测试设计。当我在没有任何象需求或者设计模型这样的文档的情况下第一次操作一个产品时和我需要获得一系列内部构建版本的稳定性的第一印象时,我使用过这种技术。通常如果适当的软件配置管理(SCM)与良好的内建设计相结合时,使用级别 2 的技术已经足够了。
    2.2.3. 级别 3:编程和回放
    这个级别是面对多个构建版本的有效使用测试自动化的第一个级别。你需要在实际的投资开始显现之前确保团队和客户对项目的安全感。如果没有对测试自动化工具的适当的培训测试人员将不具备到达这个级别的能力。在自动化测试工具中的所有测试功能都必须被很好的理解,并且要掌握测试脚本语言的知识。好处:你确定了测试脚本的设计。适当的设计是必要的。编码的习惯必须是适当的。使用与开发中相同的编码习惯是非常好的。这将开始搭建起测试和开发之间的桥梁。在项目的早期就可以开始自动化的测试。你能够在项目的早期就开始进行测试脚本的设计。与开发人员交并调查他们认为可能会存在问题的区域。确保了开发人员关注在获得能够被测试的方案上。缺点: 要求测试人员具有很好的软件技能,包括设计、开发等。用法:大规模的测试套件被开发、执行和维护的专业自动化测试。级别 3 使你能够使用自动化测试并构建不同的回归测试(重用已有的自动化测试
    用例)。根据我的经验在看到更多切实的回报之前,为了达到这个级别,有大量的工作和影响项目的活动必须被做。因此快速的建立和证明自动化测试的价值是至关重要的。找到乏味的测试(例如,边缘测试和特定的功能测试用例是首先进行自动化测试的良好候选者)。首先创建少量的能够测试一些基本功能(比如,登陆和创建用户等)的测自动化测试用例。
    2.2.4. 级别 4:数据驱动的测试
    对于自动化测试来说这是一个专业的测试级别。你现在要利用测试工具提供的所有的测试功能。你拥有一个强大的测试框架,这个测试框架是基于能够使你根据被测试系统的变化快速创建一个测试脚本的测试功能库的。维护的成本相对是比较低的。你在你的测试中会使用到大量真实的数据。优点:你能够维护和使用良好的并且有效的模拟真实生活中数据的测试数据。缺点:软件开发的技能是基础,并且需要访问相关的测试数据。用法:大规模的测试套件被开发、执行和维护的专业自动化测试。级别 4 要求一些非常良好的测试数据。一个测试人员必须要花费一些时间来识别在哪里收集数据和收集哪些数据。使用现实生活中的数据是最基本的以从测试中得到完全的回报。使用适当的数据将为你提供通常仅仅在项目的后期才会发现的或者是有客户发现的错误的能力。现在你能够通过使用现实的数据开运行大量的测试。
    2.2.5. 级别 5:使用动作词的测试自动化
    这是自动化测试的最高级别。主要的思想是将测试用例从测试工具中分离出来。这个级别要求有一个具有高技能测试人员测小的团队,这些测试人员能够将测试工具的非常深层次的知识与他们具备的较深的编程能力结合起来。这个团队负责在测试工具中生成并维护测试的功能性,能够使测试工具从外部的来源,比如 excel 表或者数据库中执行测试用例。这种测试概念最初是由 CMG 开发的。与 CMG 方案相比,其他的可能的开放源码的方案有被 Carl Nagle 和SAS Institute 开发的DDE。使用 DDE 的概念,关注点是当在Excel表中创建测试用例的时候,放置使用包括被使用的特定动作词语的一些类型的模板。执行的过程是从 Excel 表中读取测试用例,并将测试用例转换成为测试工具能够理解的形式,然后使用不同的测试功能来执行测试。这个概念变得越来越流,因为测试与用例一起使用是非常有用的。优点:测试用例的设计被从测试工具中分离了出来 - 关注在设计良好的测试用例上。允许快速的测试用例的执行和基于用例的更好的估计。缺点:需要一个具有工具技能和开发技能的测试团队,以提供并维护测试工程(框架)。用法:专业的测试自动化将技能的使用最优化的结合起来如果工具不具备使用内建的对象映射的可能性,那么这个方案对于消除与 GUI 相关的大部分维护成本是优秀的。在一些组织中已经创建了这种方案,并且他们其中的一些已经实现了高度的自动化(60%),并且他们都得到了巨大的回报。如果测试框架是适当的,我们能够使用 excel 来生成实际的测试用例。这个级别对于那些按照正规基础使用用例的组织或者项目来说是非常优秀的。有多少测试用的估计是被需要的,并且当用例适当时需要做的工作也是非常简单的。你可以集中时间来生成第一个包含被需要的"对象映射"的测试用例(主流程)。依靠被测试应用的复杂程度,通常这会花费大约半天到一天的时间。后续的被需要的每一个测试用例大概会花费 15 到 20 分钟的时间,因为通常多数的测试用例可以复制已有的测试用例,并对其进行必要的修改,通常这种修改是有限的。动作词语框架能够通过使用用例使紧密的并行测试用例的开发变得可能。
    2.3. 我们不需要培训!
    我们所有的人都在某一些方面具有一定的经验,我们没有时间能够花费在使用新工具的培训上。当一个对自动化工具还不是很熟悉的组织或者项目团队开始实施自动化测试时,培训和指导是至关重要的。如果我们允许组织或者项目团队在没有关于应该如何做的任何知识的情况下实施自动化的测试,那将肯定会以失败告终。用于实施自动化测试方案的预算会被超出,测试会被延误并且更坏的情况是自动化测试将被放弃。组织和项目团队需要尽量避免一些认识上的缺陷,尤其是自动化测试的维护成本和当测试人员尝试和确认工具如何工作时产生的挫败感。你需要确保你的测试过程是适当的 - 如果测试过程是不合理的,引入自动化测试只会给软件组织或者项目团队带来更大的混乱。因此,我建议希望实施自动化测试方案的组织或者项目团队应该在实施之前建立"训练营",并将重点放在培训测试团队能够很好的利用一个原型的项目上。为第一个原型项目制定一个实施计划,下面包括原型项目的最小化的描述:当先状态我们希望实现什么 - 建立成功的因素期待的回报(第一次自动化测试工作被期望验证什么)找到一个"简单的"测试的痛处并尽力的通过自动化测试解决它,这可以被作为在同一时间上使测试运行在多个平台上的样例说明被需要的资源和时间......
    一开始你就要大声的说出成功的信心 - 让人们了解你所展示的进展。这将吸引更多的关注和资源。
    2.4. 我们必须 100% 的自动化
    从管理的角度来说,100% 的自动化目标只是一个从理论上可能达到的,但是实际上达到 100% 的自动化的代价是十分昂贵的。一个 40-60% 的利用自动化的程度已经是非常好的了。达到这个级别以上将增加测试相关的维护成本。由于对每一个构建版本的需求变化的复杂度,你将花费更多的时间在变更测试用例上以使他们能够正确的运行。在这种情况下,通过告知管理层100% 的自动化目标是相当昂贵的来确立一个合理的期望值才是明智之举。对于决定自动化一个测试用例的一般规则是这个测试用例必须被运行 4 次以上。这个数字是基于用户对测试工具有良好的技能并且有一个良好的测试框架的。如果情况不是这样的化,整个数字能够是 10-20次或者更高。一个例子,在一个项目中测试人员花费和两周的时间将手工测试的 23天的任务转换成了自动化测试的用例。在完成使,项目能够在 4 个小时在多个平台上运行相同数量的测试用例。
    2.5. 测试框架
    测试框架对于产生成功的测试自动化的适当基础是重要的。很多考虑必须被解决以使测试自动化更加有效地被使用。重点必须在:维护成本维护成本是成功的使用自动化测试的最重要的问题之一。维护成本直接联系到前面已经提到过的自动化测试的成熟度。组织或者项目必须至少要在成熟度的 3 级使用高度的测试库才能使维护和更新测试功能变得容易。
    测试数据
    什么样类型的数据将被使用?要为每一个测试用例生成测试数据还是使用在被测试应用中已有的数据。在很多的情况下一个测试数据被创建了,删除他们是不可能的。
    可测试性
    自动化测试方案能够有效的测试吗?例如,被适当命名的对象(不仅仅是索引Id)。一个简单的例子是所有的对话框都有相同的 #id 和相同的标题,所不同的仅仅是显示的文字信息。当测试应该覆盖多种语言的方案时,对话框的测试就是一个挑战。
    测试人员的技能
    被包括在自动化测试的创建中的人员应该具有什么样的技能呢?如果他们具有良好的开发背景,那么成熟度 3 级是足够了。如果他们有很少的或者根本没有开发的经验,我们被迫使找到或者培训一个自动化测试专家的小组,并直接到达成熟度 5级,在成熟度 5 级测试的创建与实际的测试执行被分离开。
    一个好的构建过程
    自动化测试的引入在"构建团队"上加入了一些约束。为了实现自动化测试的高利用率(回归测试),要求具有一个高的构建频率。每周仅仅运行自动化的测试不是好的自动化测试的使用率。将回归测试增加到每天一次将帮助快速的发现新的问题并使开发人员更加容易的发现问题的根源,因为对测试的反馈时间是比较短的(开发人员能够记住他们昨天做了什么)。所有权不同的测试库的所有权的定义是重要的。一个好的方案会将测试库的组织划分为三个级别:
    级别 1 - 全局的
    这个一个通常的级别。被存储在这个级别的测试功能能够被所有的项目访问。通用的和通常的功能象登陆、创建一个用户都是这个级别很好的候选者。
    级别 2 - 项目
    在这个级别的测试功能是与特定的测试项目相关的,但是通常在项目中有用的比一定在项目外是有用的。通常级别 2 是级别 1 的功能的提供者。
    级别 3 - 脚本
    功能被直接关联到特定的测试脚本。 I在这个级别中,通常一个测试功能的第一个版本是被开发的。在新的测试脚本的创建期间已有测试功能的重用性被发现,并被移到了级别 2 中。在这个级别上尽量最小化功能的数量,因为它将增加维护工作量。还有很多有关测试框架的问题,但是这里所提及的是一些基本的要被解决的问题。
    3. 在哪里使用自动化测试
    有很多的情况下使用自动化的测试可以降低测试成本。我将尽量的突出在自动化测试中的不同的测试技术技术 描述 备注单元测试/组件测试 这个测试工作通常是开发人员的职责,很多不同的方法能够被使用,比如"测试先行",它是一个测试框架,开发人员在编写代码前编写不同的单元测试。当测试通过时,代码也被完成了。 通过使用正式的单元测试,不仅能够帮助开发人员产出更加稳定的代码而且能够是软件的整体质量更加的好。冒烟测试 冒烟测试是一般验证别测试系统的功能性测试用例的集合。冒烟测试背后的思想是确保基础是可以工作的,以便"大的"测试工作能够开始。 在构建过程能够确保构建已经为测试准备好时,冒烟测试通常是自动化的运行。功能/集成测试 这里测试的工作关注在验证在不同的组件之间的集成上。 这些类型的测试通常是被测试系统的更加复杂测试的基础,大量的边缘测试被合并以制造出不同的错误处理测试。系统测试 - 用例测试 这种测试是通过执行用户场景模拟真实用户使用系统以证明系统具有被期望的功能的测试。 这里不需要进行自动化的测试。安装测试、安全性测试通常是有手工完成的,因为系统的环境是恒定不变的。回归测试 回归测试实际上是重复已经存在的测试。通常如果是手工完成的化,这种测试只在项目的结尾执行执行一到两次。 这里完全有潜力应用自动化的测试。你能够在每次构建完成后执行自动化的回归测试,以验证被测试系统的改变是否影响了系统的其他功能。性能测试 性能测试包括以下不同测试形式:
    - 负载测试
    - 压力测试
    - 并发测试
    -.....
    如果没有自动化的测试工具,你将不能执行通过模拟用户的负载实现的高密集度的性能测试。
    4. 什么时候使用自动化测试
    我对什么时候应该使用自动化测试和什么时候应该使用手工测试进行了一个概要的总结:使用自动化测试 使用手工测试项目没有严格的时间压力具有良好定义的测试策略和测试计划你直到要测试什么
    你知道什么时候测试对于自动化测试你拥有一个能够被识别的测试框架和候选者能够确保多个测试运行的构建策略多平台环境需要被测试你拥有运行测试的硬件你拥有关注在自动化过程上的资源
    被测试系统是可自动化测试的 没有适当的测试过程没有一个测试什么,什么时候测试的清晰的蓝图在一个项目中,你是一个新人,并且还不是完全的理解方案的功能性和或者设计你或者整个项目在时间的压力下在团队中没有资源或者具有自动化测试技能的人没有硬件如果你正在从事自动化测试,那么一定要记住要关注将自动化测试与手工测试结合起来使用。首先,对于自动化测试率的目标是 10/90 (10% 的自动化测试和 90%的手工测试)。当这些目标都实现了,可以将自动化测试的使用率提高。记住创建自动化测试的测试用例要比创建手工测试的测试用例花费更多的时间。不要将你所有的测试时间都用在自动化的测试用例上。同时也要记住在测试期间对每一个被发现的错误都要花费一定的时间去处理。
    5. 自动化测试的好处如果你正在你的组织中引入自动化测试,记住有很多不同的方面被包含了进了。今天在测试工作如何被进行上有很多不同的视图。为了能够成功的实施自动化测试你应该提出这些问题:
    测试覆盖什么?- 我们没有覆盖什么?
    由于遗漏的测试我们没有发现的"bug"会带来什么样的成本?由于不好的测试,破坏已有功能性的成本是多少?如果"琐碎的"测试被每天的运行,对于你的项目意味着什么?如果我们能够每天向开发人员提供他们最近代码变更相关的反馈,对项目有怎样的影响?这些问题都能够被自动化测试满足。你必须从自动化测试成熟度的级别 1 或者 级别 2 开始,并开始测量结果。根据我的经验快速的向开发人员反馈并每天运行测试对于向自动化测试成熟度的级别 4或者 级别 5 是非常有好处的。
    自动化测试有以下的贡献:
    降低风险 - 你知道你测试了什么和没测试什么测试能在项目的早期开始并随着时间一直扩展快速的反馈 - 自动化测试用例能够随时的运行在多个平台上的测试能够同时进行
    更好的估计 - 你能够对测试进度和被使用的时间有更好的了解优秀人员的集中 - 你能够得到一个专家的团队,并将他们的知识传播给其他的项目喜悦 -你和你的团队正获得着成功
    测试工具介绍下面我介绍市面上相对比较广泛的测试软件,Rational中的Robot和MI公司的WinRunner的具体的用法。
           Robot,俗称机器人。它有几个特点,第一,Robot它的语法相对简单,是一种类似于VB的语法,所以上手快;第二,Robot的脚本组织结构类似于C的结构,相对容易理解;第三,Robot运行环境和可参数化,所以容易维护;第四,要求的机器配置相对较低;第五,Rantional系统集成的很多产品很优秀,而且适合面很广;第六,相对价格比较低廉。
           WinRunner的功能相对Robot相对来说有一下几个特点。
    第一,      WinRunner的语法结构是类似于C的语法,理解相对容易;
    第二,      WinRunner的脚本组织形式是以目录的形式组织的,所以相对来说比较好管理;
    第三,      WinRunner支持当前市面上的很多系统;
    第四,      可以随时Update检查点的内容,使得脚本的维护量减少
    第五,      机器配置相对要求高些;
    第六,      集成了很多优秀的组件。
    下面我就尝试写一个Robot的脚本。
    题目:请检查各种我们规定的字符是否过滤掉了,如果那些词语没有过滤掉请记录下来。我们先看测试这个功能的逻辑关系图应该如下:
    我们创建的测试案例:准备很多需要过滤的词语

    程序处理模块

    输出处理结果T_FilterWord

    打开过滤词文件
    T_OpenTestFile



    测试脚本:
    Function T_OpenTestFile(Filename as string)as integer
    {

    。。。。。。。。。。。。。

    }
    Funciton T_FilterWord(getword as string)as integer
    {

    。。。。。。。。。。。。

    }
    以上是两个SBL文件,相当于C中的函数实体
    那么我们要建立一个SBH,相当于C中的头文件,红色的部分类似于一个类库,我们把相关的或者具有相似属性的操作或者函数定义在同一个类库中。
    Declare Function T_OpenTestFile Basiclib T_FileOpertion(filename as string) as integer
    Declare Function T_FilterWord Basiclib T_FileOpertion(getword as string) as integer
    我们现在建立一个脚本文件REC
    #include T_FileOpertion.sbh
    Main()
    {

    。。。。。。。

    }
    在此脚本中就可以调用上面那两个函数了。在以后的测试中,我们只需要维护过滤词文件库就可以了。这样提高了工作效率,保证了测试的正常进行。
          下面我就举个例子,来尝试用WinRunner的使用方法,其实例子相对很简单,主要是想告诉大家这种语言脚本的组织方法是怎么样的?
        压力测试工具的功能挖掘使用。
    一、为什么采用插件脚本开发

    性能测试过程中,最耗费经历的就是编写性能测试脚本的过程,在大部分的测试工具中都是采用录制的方式,通过录制产生脚本,然后根据需要进行修改,以及参数化。有些时候为了能够完成某一个功能的脚本,需要将录制下来的脚本进行大手术,例如将一些逻辑以脚本的形式写在LR里面,给编写脚本的人带来了很大的麻烦。目前部门的大部分业务在性能测试过程中都是采用录取请求信息包的模式来模拟请求。
    其实LoadRunner是提供了COM组件的调用的(图一),你甚至可以在引用了LoadRunner的组件,继承相应的接口后,重写LoadRunner的很多方法,比如我们熟悉的lr_start_transaction、lr_rendezvous等方法。


    (图一 LoadRunner提供的COM组件)

    这样有什么好处呢?
    能够更有效的、更灵活的构建可被LoadRunner调用的脚本或者压力测试程序
    我们可以定义自己的调用类及方法、比如自己封装好的socket类、而对于不同的业务只需要传送不同的调用参数而已,避免了每次的测试过程都要去录取烦琐的脚本再在脚本中更改,而且执行效率要高于录制的脚本(直接录制的脚本是解释执行)
    生成的脚本可以突破LoadRunner本身的很多限制
    我们知道的LoadRunner在应用的时候是有很多限制的,比如:C/S 协议的license的个数限制、负载生成机器单台最大只能运行1000个虚拟用户,而采用插件脚本开发的形式可以突破这些限制
    可以抛开第三方的工具、自己实现压力测试工具
    插件开发脚本实际上是生成了Virtual User Generator的功能,但只要增加并发调用的程序,就可以实现了Controller的功能,如果是采用.net(C#)开发语言就可以构建线程安全的并发生成工具
    二、插件在IED环境中的使用
    利用Loadrunner Add_In的方式进行脚本的开发,如果想采用这种方式是需要有几个前提条件的:
    􀁺要有被测试程序的源代码
    􀁺被测试程序的架构要清晰,对于一些分层不够好的产品,不太适宜用这种方法。
    􀁺编写脚本的人员要了解Loadrunner的使用
    使用:…\Additional Components\IDE Add-ins\MS Visual Studio .NET ,安装文件:
    LRDotNetIDEAddInSetup.exe

    在开发环境中会产生新的菜单项 如图二


    (图二 IDE中的Vuser)
    菜单中会多出一项【Vuser】的菜单。这个菜单就是我们主要使用的内容。另外,在对象库中也会增加loadrunner相应的对象。这些对象的使用和软件中其他对象的使用没有什么分别。这些对应都是可以被loadrunner所识别的,同时也是可以并发安全的

    这样就可以新建LoadRunner工程了


    增加必要的内容:
    框架生成后,我们就需要根据测试的内容增加相关的代码了,下面介绍的函数都是以c#为例进行介绍的,其他的语言与此差不太多。
    我们假设一个场景:要测试100个用户同时登录系统的情况。后面都将围绕着这个主题进行。
    首先,无论使用什么内容都要先进行对象的创建:
    LoadRunner.LrApi lr;
    lr = new LoadRunner.LrApi();
    1、 事务
    事务是测试最核心的单元,所以事务的创建非常重要,下面是一个事务的定义过程。
    LoadRunner.LrApi lr;
    lr = new LoadRunner.LrApi();
    lr.start_transaction("syslogin"); //事务开始,事务名称为syslogin
    //×××××此处添加事务syslogin的程序,例如:××
    Client_syslogin(“servername”,”Username”,”userpassword”,”2005-1-12”);
    lr.end_transaction("syslogin", lr.PASS);// 事务结束
    事务的开始和结束与VU Generator工具的脚本基本上是一样的。
    具体的使用不做详细阐述了,网上也有相关的教程
    三、举个实际测试的例子

    InSoket类是封装好的SOCKET请求类 包括异步连接、异步发送请求以及异步接收数据等


    Vuser类 是具体的请求调用 包括一些请求方法及重载、事件委托
    以上只是对方法可行性做了研究 具体业务的封装要复杂些。
    示例代码如下:


               还有一个实际例子,就是针对一个业务我们进行的测试,分享给大家。
    某金融服务器性能测试方案
    测试说明
    模块说明tcpsvrd
    客户端统一通讯接入前置机,根据server type和server id来识别接入的客户端,如果type是Client则id为uin,如果是内部server则同一个type和id只能建立一条TCP连接,若有多余连接则会拒绝其接入。
    financesvrd
    目前暂时只测试3条消息,Deposit(存款)、Consume(消费)、Query(查询)。Deposit和Consume会直写DB,Query则先会查询Cache,再查DB。
    Test Server
           可以是LoadRunner的Controller,也可以是自行开发的TestServer,主要负责控制各个TestClient启停。

    Test Client
           可以是LoadRunner的VUser,也可以是自行开发的TestClient,主要负责开多线程快速发送消息。
    工具说明
    LoadRunner
    两种方案:
           用Web协议加载DLL
           License有10000个,并发时每50个VUser启动1个进程50个线程建立一条TCP连接共同向一个端口发包,运行时必定会采用同步机制来竞争资源(这种方式和单线程+延时+循环发包的压力效果是否类似?是否做到了真正的并发?)因此最多只能建立10000/50=200条TCP连接。如果要测试向tcpsvrd建立大量连接显然是不行的,只能测试向tcpsvrd发送大量请求。
    用Windows Socket加载DLL
           受100个License限制,并发时每个VUser均会启动1个线程建立一条TCP连接发包。在License数量无法增加的情况下,很难做压力测试。
           从目前的调试结果来看,用LoadRunner加载DLL的方法来测试C/S架构不太乐观,存在着一定风险。
    ethereal/sniffer
           测试准备阶段用于调试脚本、测试程序
           测试执行阶段通过在服务器端抓包,来分析整个加压过程。(如果测试时间长时,抓包文件会很大,增加数据分析的难度)。
           另外,也可以用于协议测试。(不知道开发做了没有,做到什么程度?我们是否可以介入?)

    统计工具和脚本
    服务器统计工具sonicmao已经提供financetool –s0/s1 (复位/统计),能够统计客户端发送消息数目,Cache命中率,数据库的处理时间等性能指标。
           服务器性能指标分析工具,沿用joeqiu提供的rstatd
    目前缺少数据库的记录插入/复位工具(由开发完成?还是自己解决),后台日志的查看只能通过人工分析日志文件,是否提供相应日志分析工具?(此需求重要级别:低)
    测试程序
    首先要开发一个TClient作消息发送器(难度不大,容易实现),要想加入控制功能还需要开发一个TServer的控制器,用于控制各个TClient的启/停,接收各TClient的上报消息。(关键是如何设计,做到最大限度的复用,此需求重要级别:中)。
           最好是服务器为TServer定义service type和service id,直接允许其接入,由我们来定义测试消息,通过发送查询消息直接搜集服务器的当前信息(取代后台统计工具financetool),这样就可实时监控服务器当前的业务处理性能。(此需求重要级别:低)
    测试内容
    tcpsvrd
    单台服务器最大承受接入连接数
    目的:测试不同硬件配置下tcpsvrd的接入能力,得出结论XX配置下可以承受XX个接入
    方法:用测试程序模拟n个Client接入tcpsvrd,按正常使用频率(需要和开发协商做一个大致的估算,如果不能确认,则只统计结果)在10-30分钟内定时向financesvrd发送固定消息(消息类型个人觉得应该是查询消息)。
    数据记录表格(参考)
    No.
    测试时长
    消息类型
    接入客户端数目
    消息发送频率(次/秒)
    发送消息总数
    转发消息总数
    处理消息总数
    业务处理成功率(%)
    CPU占用率Max/Min/Avg(每n分钟查看一次)
    Load BalanceMax(每n分钟查看一次)
    Mem Use
    (每n分钟查看一次)
    其它异常记录
    1












    2












    机器配置:…
    测试通过条件:CPU占用率Max<70%,LoadBalanceMax<2,MemUser<1G (需讨论或查找相关资料)

    单台服务器最大承受消息数(峰值压力)
    目的:测试tcpsvrd在业务高峰期转发消息的能力,得出结论tcpsvrd当消息速度达到XX个请求/秒(或流量达到XXkbps)时,需要进行在网络设备上进行流量控制。
           方法:用多台机器向tcpsvrd连续发包,持续时间5-20分钟(服务端的峰值压力如何计算?如果用tcpdump抓包可能会影响服务器的业务处理能力)
    数据记录表格(参考)
    No.
    测试时长
    消息类型
    发送消息总数
    转发消息总数
    处理消息总数
    业务处理成功率(%)
    CPU占用率Max/Min/Avg(每n分钟查看一次)
    峰值压力(TPS或kbps)
    Load Balance Max(每n分钟查看一次)
    Mem Use
    (每n分钟查看一次)
    其它异常记录
    1











    2











    机器配置:…
    测试通过条件:与2.1.1类似

    单台服务器长时间承受消息数
    目的:测试tcpsvr长时间运行所能承受的消息数,得出结论给出tcpsvrd的推荐处理速度,tcpsvrd当消息速度达到XX个请求/秒(或流量达到XXkbps)时,需要在软件上进行流量控制。
    方法:用多台机器向tcpsvrd连续发包,发包速度可以参考2.1.2给出,持续时间2小时以上
    数据记录表格:与2.1.2类似
    测试通过条件:与2.1.2类似
    financesvrd
    服务器的业务处理能力
    在对tcpsvrd进行测试的同时,可以顺便得到。时间允许的话需要对deposit、consume、query全部进行测试。否则只测试query消息。
    DB
    目的1:测试Cache命中率对其进行调优,得出结论命中率为100%时应该配置多大的Cache,命中率为90%时应该配置多大……
    目的2:测试直写数据库时是否会有I/O瓶颈,CPU占用过高?
    方法:数据库事先要插入一定数量的记录(具体数量是多少?10w,100w),先配置较小的Cache用多台机器连续发查询包来得到命中率和发包速度的关系,再逐渐调大Cache找到两者的映射关系。
           在发写DB请求时,最好能建立请求速度和CPU占用率/内存使用/负载的经验匹配值。
    以下内容在相关技术问题未解决之前先暂时不考虑
    测试工具在实际工作中的应用       现在在测试行业说的最多的有两个问题,第一个问题是测试的待遇和地位,第二个问题是自动化问题。我这里不谈测试的地位,只谈自动化测试。
    如何做好自动化测试?这里给出几个分析方法,第一,被测试产品是否有延续性?第二,被测试产品的维护频繁度?第三,被测试产品自动化的难度如何?
           其次,如何选择自动化工具,选择容易上手的,测试脚本和测试数据容易维护的,价格低廉的。
           正确的理解测试工具需要我们去引导,我们应该清楚的知道那些应该自动化,那么能自动化,那些自动化程度会更高等。      
    工作中的自动化测试的几中方法       数据驱动法       数据驱动是测试中最常用的一种方法,它是在不修改测试程序的情况下或者稍微修改测试程序的情况下,不段的增加测试案例来进行自动测试的一种方法。
    举一个具体的例子:例如我们检查登陆验证(用户名称),
           如果我们采用自动化测试,我们只需要在测试配置文件中增加或者删除修改配置文件就可以达到测试的效果了。
    测试程序

    测试配置文件

    被测试程序

    输出反馈结果,实际处理结果

    预期处理结果


    只要将两个文件进行比较,就可以得到被测试程序的处理能力和结果了。
           桩驱动桩驱动也是一种常见的测试方法。这种测试方法是把某个模块假设是正确的,然后把这个模块作为主核心,然后测试他传出的参数和数据给其他模块来处理,查看处理的结果。
    我那EXCEL中数据举一个现实的例子,大家都知道,当你输入等号的时候,Excel认为你需要计算,那么处理流程就应该是接受键盘消息,然后处理。如果我们把输入做为一个桩,那么来查看计算结果的话,就可以知道那些信息处理了,那些信息没有处理。
           桩驱动的核心其实很简单,就是首先对桩模块做一个假设和详细测试,认为桩模块是足够健壮的;第二,桩模块是驱动机,能够和很多模块发生调用关系,是核心部件.
           关键字驱动         关键字驱动和桩驱动有些相似的地方,关键字驱动的核心是
    网络方面的测试方法       数据库测试要点网络游戏测试要点       下面我和大家探讨网络游戏的测试方法。网络游戏是一个信息相对集中的一个网络产品,它牵扯到客户端和服务端以及客户端之间的通讯。下面我们就结合具体的例子来分析
           我举一个Mmog的例子(注:mmog是大型网络游戏的缩写),大型网络游戏主要是即时战略性质的,所以通讯上采用TCP协议来发送数据包。TCP协议发送数据包的优点是尽量能够减少数据包的丢失,他是对数据包的一个精包装,一般的发送数据包采用实时处理的形式,即采用堵塞式的处理模式,而不是等到一定空间的数据包满了以后才一起发送(非堵塞式的处理模式)。
    上面我们只是简单的讲了mmog游戏数据包发送的形式。下面我们分析网络游戏服务端测试的重点。
           网络游戏服务端的主要作用:下发玩家信息,仲裁胜负信息,仲裁装备信息,服务器之间中转信息,状态存盘,玩家信息存盘等。我们来一个个的分析,服务端要处理这么多的事情,在处理什么事情的时候压力最大呢?那肯定是下发玩家信息最大,为什么这么说呢?因为在下发玩家信息的时候,服务端会把每个人的信息和地图上的所有的信息,而且这个信息是当地图上的玩家和元素的增多而增多,当地图上的人越多的情况下,服务器的处理信息的量就很大。那么分析这么多,我们主要测试什么?测试同步消息的传递。就是在很多玩家的情况下,信息能否顺利的通知给各个玩家。
    如果做这样的事情呢?根据经验(可以另外想办法),建议编写一个机器人,我们能够操作机器人,这个机器人需要处理什么事情呢?希望机器人能够在以玩家为中心的地方随意走动,能够跟随玩家跨地图,能够按照设定施放技能,能够聊天。通过机器人的每一个动作我们来观察服务的各个性能表现。关心那些性能表现?大家可以参考LoadRunner提供的业界比较官方的指标进行核对。
           网络游戏服务端的测试相对比较复杂,对测试人员的要求比较高,测试人员必须了解用什么协议通讯的,怎么通讯的,服务器都处理了那些事情才能具体的分析测试重点和测试方法怎么做。
           对于客户端的测试应该相对简单些,我这里说的客户端的测试不包含数据平衡部分。客户端主要是验证功能逻辑。例如我举个例子,任务系统,现在每个游戏都有任务系统。如果测试任务系统,我们应该怎么测试?首先完成任务的条件是什么?完成任务需要什么道具?玩家能得到什么道具?道具是否可以交易,拾捡?道具是否可以买卖?玩家跟NPC交付任务断线处理?NPC在不同的状态下所说话的内容?是公共任务还是门派任务?在得到道具过程中储物箱满了会怎么处理?在负重超出了本身能力的情况下怎么处理?等等,把细节的问题考虑清楚了,这样设计案例执行就是了,没有自动化的必要(但是可以在组件测试中进行自动化,系统测试没有必要自动化)。
           客户端还有一个测试点就是地图,因为地图是游戏的门面,所以地图的检查点:绚丽度,整个地图的亮度,不同分辨率下的地图显示,地图的拼接,地图上NPC或者怪物的分布等等。网络游戏的测试是积极具有挑战性,包括能力,耐力,创造力的人奋斗。
    GameServer

    DB帐号数据库

    角色数据库

    GameServer

    GameServer

    网关2

    Client客户端2


    我们把平常大型网络游戏容易出错的地方整理几个跟大家分享。
    举例1
           大家都知道在游戏中,每个玩家都有自己的背包和储物箱,如果知道网络游戏的人应该都了解,这个是玩家存放自己装备或者基础材料的。这个储物箱在游戏中应用非常广泛,所以玩家也在寻求办法,钻设计的漏洞,以便刷物品,使得自己的虚拟物品和价值持续走高。
           关于背包,我们有一款游戏中是这么设计的,收集材料同类的可以叠加,武器类的不可以叠加。
           我们来看这个问题,如果可以叠加,意味着只要有同类的物品,就当你存放的时候叠加到一起。但是
           还有一种是休息类游戏,例如盛大网络的泡泡,客户端之间主要是通过UDP进行通讯。关于UDP通讯的检查和测试我在这里先不做详细描述,以后进行补充。
           网络游戏的核心是什么?网络游戏的核心是构造一个虚拟的社会,让这个社会上的各种职业的人能够生存并附带一定的社会矛盾。那么在这么庞大的项目中,我们测试需要关注的点是什么呢?
    C/S结构测试要点       网络游戏现在是C/S架构的一种,但是我们平常所说的C/S是一种类似于银行系统,购物系统等,这种系统要求:服务器处理能力强,反馈及时,但是有一个特点,这种服务器压力是出现在业务繁忙的时候,所以在测试这种软件的时候,需要完全弄清楚业务逻辑,业务点在那里?信息同步在那些方面需要关注?服务端数据处理流程是什么?如果把以上问题搞清楚了,测试的重点也就出来了,这里我不再举具体的例子,因为C/S架构的软件是相通的。
           下面我就举个例子,给大家看看,关于C/S架构的mmog类型的游戏测试,服务器的压力那里,测试的重点在那里?
           请大家看下面的图形,这个图是目前市面上90%以上mmog类型游戏采用的结构.
    GameSvr3(游戏服务器)

    账号数据库

    角色数据库

    GameSvr1(游戏服务器)

    GameSvr2(游戏服务器)

    客户端

    客户端

    客户端

    客户端


    我把上述的图形描述一次:
           当客户端要求登陆服务器的时候,通过账号数据库验证,然后取出该账号对应的角色,然后告诉客户端你是我们的用户,然后由网关(我在图上没有体现)把该玩家连接到响应的GameSvr上.
           我们来分析这个图:客户端向服务器发送登陆请求,如果采用非阻塞式,使得各个客户端的请求形成非队列式,那么服务器压力不会很大,如果采用阻塞式,那么客户端感觉服务器处理速度就会很慢,玩家不答应,所以大多采用非阻塞式,处理速度快.而且玩家和账号数据库不是长期保持连接,只是保持一个心跳而已.这样就得出一个结论,用户在登陆的时候,对服务器不会造成多少压力.
           那么什么时候会造成压力呢?
           玩家走路,大家都知道,网络最主要的特点是同步信息,也就是说,当一个玩家走动以后,服务器首先要计算一次,当前玩家指的坐标是否正确,其次,服务器要下发消息,告诉周围的玩家,他现在在那里,怎么样的姿态存在.因为服务器会给一定范围内的玩家通知这些信息,造成服务器压力增多,因为服务器(GaemSvr)和玩家保持的是一个TCP的长连接,如果当前服务器或者一屏(或者说一定范围内的玩家相对比较多)的情况下,服务器要处理当前服务器上类似于上面描述的若干个这样的情况,造成服务器压力巨大.
           除了走路,还有什么会造成服务器压力大呢?
    聊天,为什么说聊天会造成服务器压力比较大呢?因为当A对B说话,服务器需要寻找,当前B在那里,然后通知A,B在,你可以说话给他,这个时候A才可能和B说话.如果人相对比较多的话,可能造成服务器压力大.
           跨服务器行走,也会造成服务器压力巨大?
           因为当你从一个服务器跨到另外一个服务器的时候,服务器需要把第一个服务器上玩家的数据拷贝的另外一个服务器,然后初始化一个实体,然后再告诉DB,把这个人的数据存盘一次,然后再尝试跨服务器,如果跨不成功,如果成功,则把该数据初始化给本玩家,如果不可以,则另外处理,这样造成服务器的压力大.
           总上所述,不是所有的C/S结构的产品,我们以上来就模拟人多的情况怎么样,而是要分析,那块的压力真正的大,压力大的情况下会影响到游戏逻辑和数据在那里?需要冷静的分析这些情况,才可能有效的执行测试.
    综上所述,我们知道网络的测试重点是相同通讯,数据同步和存储,那么在进行测试的时候,需要熟悉的了解各个部分相互通讯的模式是TCP还是UDP模式,那么各个模式有各个模式的特点.
           TCP是通讯协议是把数据包进行精包装,然后在网络链路中进行发送,它需要进行三次握手才可以确定数据包的发送与否,丢包的几率很小,但是自身有补偿机制,使得包数据传输的过程中可靠性大大加强但是缺点是速度相对很慢.
           UDP通讯是另外一种数据包传送模式,这种方式的特点是传送速度快,但是容易造成数据包丢弃.
           所以除了了解各个部分的通讯协议之外还需要了解,当丢包了以后,对数据包进行补偿的两种方法,第一种方法是把从丢失的第一个包到当前包作为一个整体的包,进行包的重播,这样的方法会使得从客户端看到通常我们在游戏中所出现的”卡”现象,还有另外一种补偿机制,就是把前面的数据包丢弃,然后播放最后一个数据包信息,这样就会在其他的客户端看到一些莫名其妙的现象.
    网络游戏还有一个测试点,任务系统的测试,在网络游戏中,任务系统是贯穿整个世界的,他反映了玩家在各个时期所能面临的挑战。任务系统的测试要点
    Ø       任务逻辑
    Ø       任务性价比
    Ø       任务系统奖励的条件
    Ø       任务系统放弃的条件
    Ø       任务系统接收物品的条件
    Ø       跨等级交接任务
    Ø       满足接或者交的任务的条件中其中的一个
    Ø       任务描述,任务记事本的描述和状态,任务道具的各种操作
    为什么把任务系统单独提出来说,是因为在游戏中任务和交易是游戏中最容易出错的地方,而且最容易导致整个游戏中所谓刷钱的地方,如果游戏中通货膨胀,就可能造成整个游戏数据无法跟踪或者跟踪没有意义。
    箱子也是重点测试之一,所谓箱子,主要是指玩家的储物想,交易时候玩家的背包,为什么把这两个单独提出来,这两个在几中情况下最容易出错。
    Ø       给箱子存东西,然后断线(考虑存储速度)
    Ø       给箱子存东西后,然后不关闭箱子,背着箱子跑(触发存储状态的条件)
    Ø       交易的时候,来回切换server,在两个server之间进行(寻找数据同步的错误)
    Ø       在存储物品以后,马上断线,然后在server和client保持ping的过程中,重新连上(考虑TCP/IP的特点)
    Ø       在存储物品的时候,不关闭储物箱,可以背着箱子乱跑(箱子其实计算到了玩家的负重了)
    以上是存储和交易时候必须测试的点,这是每一款网络游戏都容易犯错误的地方。
    在做压力测试的时候大家都知道很多概念,但是在实际的工作中怎么分解,了解得人还不是很多。我下面给大家做一个简单的介绍,因为我们在做压力测试的时候,如果在公司内部构建和我们产品运营时候相同的网络环境,相同的硬件支持的话,开销非常大,有些开销是无谓的,所以就出现了现在有的作压力测试的时候,得出结论是现在环境是否可以承受或者说能够承受到什么程度,关于压力测试的分解工作几乎没有,为什么做这些压力,这些数据对你以后有什么分析价值等我们做过透彻分析。
             很多人在使用诸如"容量评估","容量计划","趋势分析"和"预测" 等术语时,并没有真正理解这些词汇的含义。当有人提起"容量计划"时,通常是指他们的应用不能满足解决方案,而将被迫购买更多的硬件。
           我们需要针对具体业务做一个实际的例子,可能大家能够看的更加明白。
    业务描述:   
    硬件基本情况(服务器和未来上线的不同)
    我们就分析一个业务,它是一个标准的C/S结构,我们从他的业务逻辑上分析它的压力点在哪里?然后结合实际情况,我们总结分析设计这些压力测试的点的方案。

    那么根据业务本身,看来登陆的压力肯定是最大的,因为当登陆上去以后,玩家根据业务和本身需求,可以把各个服务器的压力减少进行调整,那么如何做和登陆服务器的压力测试呢,我们在开始工作之前需要获得几个数据:
    第一,      按照原来服务器的设计,最多能容纳多少用户并发请求
    第二,      对服务器性能占有率多少是能够接受的
    第三,      对信息的处理方式是采用什么方式的(阻塞还是非阻塞)
    第四,      单台服务器的处理能力和效率
    接下来我们要做的事情就是:
    第一,      准备测试数据
    第二,      设计测试方案
    第三,      总结测试数据进行分析
    如何准备测试数据才能使得本次测试的有效性呢,主要分析我们的业务类型,以上图这个例子,我们只要发送一个合理的登陆请求,只要是一个合法的帐号就可以了,我们按照协议类型,开始制造测试数据,制造完成后我们来分析我们如何加压,假如我们的按照目前的规模服务器的处理能力是20000,按照5台来计算,那么单台服务器的处理能力是4000,那我们就开始利用单线程多进程的方法或者利用多台单客户端的形式伪造数据,然后让这些请求数据按照阻塞模式同时发送,可以制造同等压力,在这个过程中我们需要做的事情
    第一,      我们需要观察服务器的I/O,内存,CPU
    第二,      我们需要观察服务器对信息的处理能力(需要通过客户端对发出信息后得到服务端信息的反馈进行累积统计),长时间观察这个数据的变化,例如1个小时
    第三,      慢慢减少压力,看看效率情况
    如果在我们加压过程中服务器的cpu和内存持续增高,说明有漏内存,如果我们请求响应速度持续变慢,说明server队信息的处理能力可能有问题,如果在减少压力的过程中仍然表现不出来server的处理效率提高,说明server没有释放资源。
    其实服务器的压力测试,在我看来,无非要做两个事情,你需要清楚的了解此类业务的服务请求,其次,你需要清楚地了解各个数据分析的过程。

    WEB测试要点       Web测试的要点其实很多,但是Web测试的着力点其实不多,因为基于Web现在有两个重点,一种是基于平面的静态的,只是更新新闻,那么这个的测试点相对简单,主要是各个链接正确性,服务器浏览量等,还有另外一种就是基于Web的P To P的通讯,需要注册,牵扯到用户信息,那么这些测试重点在于P To P通讯的顺畅性,数据的可靠性。
           我还是举例子说明问题。1999年网络在中国起步并风靡,它丰富了人们的生活,提供了更多的咨询信息。各种基于互联网的业务也相继展开。那么这些业务上线面临着什么?
    就web测试点来说,有一些特别需要注意的,url地址,看似一个连接地址,非常重要,重要在那里,因为URL是包含了用户请求的信息的跳转,所以URL包含了部分用户的信息。
    测试的时候需要注意几个问题
    ²       URL所有包含用户信息的牵扯到用户隐私的需要加密
    ²       URL中包含用户信息切牵扯到双方数据交互的需要完全信赖的确认信息
    ²       URL需要过滤一些通用的字符,例如”.”,”.\”等,以免对服务端目录造成伤害
    ²       在页面中需要检查的内容:页面中所有的编辑框中需要跟内容匹配,有人恶意在里面输入SQL的语句,使得其他的信息就暴露在外面
    ²       删除server系统下的bak文件,原因是商家一般会做一些市场活动,那么会暂时的生成一些页面,到活动结束后,把正式文件删除掉了,但是备份文件没有删除,所以就会造成用户还可以访问被废除的活动页面。
    ²       有关验证的内容,建议服务断和客户断双重检查,以免有些伪装数据欺骗客户端代码,造成server不经过验证的情况下提供数据
    ²       需要对Cookie中的数据加以包含,一般的用户对这个数据不注意,也无法意识到他的重要性,所以经常被别人利用,所以商家需要保护消费者的数据安全。
    ²       在接收传递过来的服务端程序对数据类型需要进行判断,包括长度和类型,以免出现“string overflow”。
           我下面就说几条:
    第一,      性能,性能测试什么呢?
    性能主要是指网络吞吐量,响应时间(单用户单独和单服务器能承载用户上满情况下单用户相应),IO量的大小,数据库查询速度。
    包括一下几个方面:
    第一,      单个用户发送单步请求到处理完成所花费的时间;
    第二,      单个用户发送请求整个流程所需要的时间
    第三,      在服务器负荷达到单个服务器处理能力情况下单步请求响应时间
    第四,      在服务器负荷达到最高的情况下,整个流程处理请求处理的响应时间
    第五,      在请求达到负荷的情况下IO量的大小,知道输入输出量的大小,以及写磁盘的频率

    修改产品构思


    创建/修改场景

    修正性能指标


    验证和确认模型

    评估性能风险

    确定关键案例

    选择关键性能场景

    建立性能目标

    构造性能模型

    增加软件资源需求

    增加硬件资源需求

    性能评估模型


    第二,      安全性
    安全性主要包括当前用户的安全性,总体用户的安全性,提交过程数据的安全性,用户数据的死锁现象等。
    现在我们分析基于Web形式,用户发送请求,在发送过程中有可能出现什么问题呢?用户的数据在以网络包传输的过程中和在队列中等待处理出现问题?基于web的特性,我们平常所能触到的就几种做法(普通,非高手),第一,分析和修改URL地址,导致真正的请求被修改;第二,拦截数据包,修改数据包信息,导致真正的请求被修改;第三,攻击服务器,使得等待队列中的请求信息被修改。
    用户请求

    形成服务器处理队列

    服务器处理业务




    第三,      操作合理性
    ²       操作过程是否合理,包括操作流程,操作的易用性等多多考虑。
    ²       人性化,包括页面的层次重要信息页面的引导,页面的跳转
    ²       内容链接,内容的更新频率包括排版
  • 测试基础二

    2007-09-29 09:10:27

    测试的分类       单元测试       单元测试是在测试过程中的最小粒度,它在执行的过程中紧密的依照程序框架对产品的函数和模块进行测试,包含入库和出口的参数,输入和输出信息,错误处理信息,部分边界数值测试。
           这个部分的测试工作在国内现在是开发人员进行的。我相信未来的发展应该是测试工程师来做这个事情。那么需要测试人员需要深刻的理解程序,理解需求,理解设计,这样才能发现问题。
           还有一种在国内先在操作的方法,就是当一个模块给某个开发工程师以后,需要他给大家讲解他要完成这个模块或者函数的整体流程和思路,进行统一评审,使得问题能够暴露的更充分些,这样做的目的有以下个,第一,使得大家对设计者的思路明晰的理解,以便以后调用或者配合的时候能够真切的提出需求或者相对完美配合。第二,在评审的过程中,如果发现问题,那么大家可能没有犯过,这样就会更加提高警惕,如果犯过,就会回想当时自己怎么解决的或者规避的,使得大家能够在错误的过程中快速提高。第三,可以对平常犯错误进行一个积累,我觉得这是生动的教科书,可以使得新的人员在新上手的时候遇到这样的问题以后,我们就可以给他一个解决问题的方法或者方向。
           回顾,我们上面给大家介绍了两种方法,第一种就是通过在开发的过程种进行测试,由开发(测试)工程师写测试代码,对所编写的函数或者模块进行测试,第二种就是通过代码互评发现问题,将问题进行积累,形成知识积累库,以便使得新人在同样的方面不至于再犯错误。
           单元测试非常重要,因为他影响的范围和宽度比较大,也许由于一个函数或者参数问题,造成后面暴露出很多表象问题出现。而且如果单元测试做不好,使得集成测试或者后面系统测试的压力很大,而且项目的费用和进度可能就会飚升。
           对单元测试,现在用CPPUnit的比较多,市场上也有其他对应的产品,他们在不同的软件单位不同的阶段。正确的理解单元测试的重要性是意识,需要在过程改进种不停的总结,慢慢的积累,将质量意识渗透到整个开放过程中的各个环节。
           保证单元测试顺利进行,需要渗透软件工程的很多思想,把CMM和跟踪机制建立起来,问题的分类、跟踪,如果把软件环节整个活动都渗透了,那么产品质量的意识自然就增强了。
           COM思想现在大的项目现在体现的淋漓尽致,因为如果不采用COM机制,维护和升级以及修改测试的成本很大,所以现在大型项目基本上都采用COM的组织形式。
           说了这么多,单元测试做什么呢?单元测试主要是做一下几个事情:
    第一,      模块或者函数的设计稿
    第二,      代码规范,其中包含代码书写规范,对齐方式
    第三,      代码的注释。非常重要
    第四,      参数类型,数据长度,指针,数组长度大小
    第五,      输入输出参数和结果
    第六,      创建对象后是否删除了,如果在这里没有删除,请注明在那里删除
    第七,      是否应用了没有初试化的变量,如果是,请指明该变量在那里初始化
    第八,      变量是否声明,声明是否按照要求进行
    第九,      调用此函数需要的满足条件需要注明
    第十,      在此函数或者模块中用到了系统或者其他第三方插件函数,需要满足的系统条件
    上面我只是列举了一些在测试过程中发现或者隐藏的问题,我想可能还有很多情况引发问题,请大家补充,以便在工作中有操作性。
           集成测试       集成测试是在保证单元测试进行后进行的一个动作,能否集成的标志不是所有的代码编译通过了就算是可以集成了,而是所有的能够在这个虚拟环境下能够正常运转。
           在集成测试种一般采用的方法是数据驱动或者桩驱动,因为集成测试不能看到产品的表象,因为他是一些数据流的中间段,我们渴望能够对中间数据进行分析,就可以知道或者就渴望知道流程或者算法中有什么不妥当的地方。
           集成测试比较适合做成自动化测试,当然首先我们分析了适合做自动化的条件是满足的,我这里就不讲详细的方法,到后面的自动化测试介绍中,我会提到这个方面的问题。下面和大家一起揭开测试自动化的神秘面纱以及给大家讲一些构建冒烟的概念。
           冒烟测试的出处是,由于生活习惯等原因,人们会定期的做某个事情,就像人们会约定成俗的认为12:00是吃饭下班的时间。那个时候大家都会做饭,哈哈,自然会从烟囱冒烟。在软件行业里面的约定是当产品到达某个阶段之后,为了验证产品的各个部分的衔接程度,为了验证项目的进展程度,为了验证产品的(已完成)功能的全面稳定程度,由测试主导的一种测试方法,主要的操作就是,在产品开发计划定制完成以后,依照开发计划指定完整的编译计划,按照开发计划和编译计划,各个单位按照要求完成自己的作业,然后在编译点上验证完成程度。
           集成测试也是不可缺少的一个部分,很多单位为了赶进度,会将这个部分省略掉,就甩手给测试小组,如果没有对应的测试小组,就会是程序员进行简单的使用后就交付市场,危险,这是个定时炸弹。因为他时刻有可能产生市场对企业影响的额度,以及企业本身的声誉问题。
           集成测试是在单元测试完成后进行的测试环节中的一个测试,主要是测试各个模块和函数之间的相互衔接情况,互动情况,输入输出情况。所以集成测试也很重要。
           那么集成测试一般采用什么方法呢?集成测试一般采用桩驱动的方法,因为在单元测试我们检查的相对比较详细,那么在集成测试的重点其实要保证逻辑上了。我简单的介绍桩驱动的实现方法。

    桩模块(函数)
    在单元测试已经作过详细的测试

    关联模块或者函数1

    关联模块或者函数2

    关联模块或者函数3

    关联模块或者函数4

    关联模块或者函数6

    关联模块或者函数5


    请大家看上面的图,这个一定是一个有意义的组合。是函数间形成一个简单的逻辑关系。
      从上面的图上我们可以看到,如果中间的模块或者函数是经过我们进行过详细的测试,基本上可以保证没有什么错误,那么如果这个逻辑出去,导致出错,一定是输入的过程或者接收了输出参数处理出错了。使得我们问题很好的定位。
           我们可以定义很多个桩,使得测试效率提高。
    我们把上面的内容进行简单的总结:集成测试就是测试各个组件之间的配合情况。所以集成测试是为系统测试提供了一些基本保证,但是不要完全依赖。
    采用的方法给大家介绍了,这样可以采用测试或者程序编码的形式实现测试。
           系统测试       系统测试是测试过程中的一个转折点,因为在现在国内的企业中,不同的产品面对不同的用户群体,所以有的企业经过第三方产品的验收测试,有的企业则没有通过验收,而是一些工具类或者通用类的产品,那么他的验收测试是经过广大的用户群来做的,也就是说凡是通用类产品的系统测试必须严谨测试以后,才可以投放到市场。但是对于对企业或者其他专业性单位定制的产品我们必须进行验收测试。
            系统测试工作是一个重复老动很多的工作,需要在工作种把握几个重点,系统测试是保证系统能够正常运转,包括了功能,易用性,健壮性,压力,边界数值设定等各个方面的内容。要想在这个阶段的工作种找到乐趣,就要不停的摸索,找出能够将机器代替人的所有的东西,找工作的快感。
           系统测试需要有广泛的知识面,对测试工程师的要求需要了解和掌握很多方面的知识,需要了解问题可能出现的原因,已经出现这个问题可能是由于什么原因造成的,以便我们能够及时的补充测试案例,保证或者降低产推出的风险。
           目前软件测试行业发展还不成熟,大多数系统测试都在测试组做,而且测试组几乎到系统测试测试阶段才会接触到产品。我们也把系统测试简单的说明一下。
           目前系统测试基本上采用黑盒测试方法,而且基本上局限在手公测试上面。
    被测试的软件


    从上面简单的图形可以看出来,我们不知道被测试软件是怎么实现的,做了什么事情,我们只知道我们要它做什么,我们想得到什么,至于程序内部怎么实现,我们并不关心,我们只是关心结果。这是一种纯粹黑盒的测试。
            这个阶段是测试发现问题的主要阶段,最少从目前市场上的产品情况来看是这样的。在这个阶段60%的问题会暴露出来,如果不进行单元测试和集成测试,这个阶段的测试量和测试点很重要。
           黑盒测试的核心是需要找到测试的重点在那里?测试的切入点在那里。系统测试重复的工作量比较大,而且如果是一个大型的项目,涉及的内容相对比较多,而且如果组织不好,或者没有找到重点,需要一遍遍的重复。所以需要自动化测试的需要合理的设计,使得我们的重复工作尽量减少,以提高工作效率。
                  其实系统测试在软件开发环节中不可缺少的一部份,这里的重点工作是如何提升自己的设计能力,在系统测试的或者说集成测试的时候,所有的对测试工作来说,都是一个挑战。那么如何提升我们自己的设计能力呢?推荐已往工作中的经验,积累的方法有几种,第一,把bug描述清楚,这个bug描述可能在大家看来就是步骤清晰,其实在我认为,描绘一个场景其实并不是那么简单,其中包含了营造环境,包含了bug出现的方法,彻底减少程序开发人员的猜测,这样就能够有足够的时间积累我们的技术;第二,描述bug后,能够根据现在bug的情况,做一个简单的分析,其中包含了现象,从结构上分析可能是什么原因,然后跟开发沟通,错不怕,怕的是不想;第三,设计合适的案例,现在有很多人一提起案例,就是遍历,把所有的功能或者数据遍历,在测试的角度和进度的角度几乎不可能的,那么如何才能设计发现问题的案例,使得案例有效呢?那就需要吃透整个设计的逻辑,然后设计出经典案例,否则劳神费功夫;第四,询问,我一直以为是最好的学习方法,当发现一个bug的时候,如果你能分析,并且能够让开发人员纠正或者从结构上帮助你把分析问题的着力点找到,那设计能力和效率也同样会提高。

           验收测试       验收测试类似于客户验证产品的质量,在软件行业发展的过程中,各种承包项目类似于国外的外包项目将会不断的出现,那么外包项目的质量问题需要大家共同讨论。
           外包项目的操作流程是当承包方提出具体的需求,然后有承包商来按照需求来开发项目,包括单元测试,系统测试,集成测试等各个方面的测试,经过被承包商测试后的产品提交给外包商的时候,需要进行验收测试,验收测试可以是外包商本身提供一套测试方案,然后对照具体的需求,进行产品验证测试。也可以是双方找一个共同的第三方,进行产品的验证测试。
           验收测试的测试重点主要是产品是否按照需求开发的,而不从针对功能进行的测试。所以验收测试基本上不需要多少专业水平,也可以是承包商找到使用该产品的用户,来体验该产品是否能够满足使用要求。这样以来使得双方可以有一个共同的平台,避免商业矛盾的产生。
           验收测试的测试手段目前来说还是靠用户体验。对照合同的需求进行测试,是第三方按照双方达成的共识来跟踪和测试软件是否能达成的需求。
    测试方法       黑盒测试       顾名思义,黑盒就是外面不知道盒子里面在作什么,怎么作,只知道我的输入他需要有反应,无论是正确的还是错误的,都需要有回馈信息。黑盒测试需要懂产品的使用方法,操作方法,把尽可能多的情况暴露出来,通过这种方法进行测试。
           黑盒测试的随机性比较大,在大部分案例执行完成以后,大概能够测试40%的功能,据美国一个官方的数据说,20%的问题是在开发过程中发现的,80%的问题是在系统测试和集成测试过程中发现的,其中80%的比例我们还是需要在细分,20%的是使用的问题,20%是程序的问题,5%逻辑问题,剩下的都是莫名其妙的问题,这样的数据对测试的一个引导是:要想发现更多的问题,需要更多的思考,更多的组合。这样无畏的增加了很多工作量,人们在疲惫的执行着测试案例,渴望从中发现新的问题。
           这样的案例设计思想使得我们在开发一个大型的产品或者延续性产品的时候,整个测试案例的延续性很差,重用性也很差。所以我们在这里需要纠正一个概念,黑盒测试不简单的使用,案例设计也不是无谓的组合。
           那么如何设计好的测试案例呢?如何在开发过程中很好的结合2/8原则呢?当前包括以后,不可能出现一个积极完美的产品,一个错误也没有,但是我们作为软件工程师,肯定渴望自己参与开发的产品稳定,易用,人们寄予无限的称赞,这是一种奢望,那么我们把这种奢望修改一下,就是渴望我们参与的产品,能够满足当前大多数人的需求,稳定是否更合理呢?      
           白盒测试       白盒测试是一种高技能的测试,它是一种基于源代码下的测试,这种测试要求对程序的要求很高,需要了解程序的构架,具体需求,以及一些编写程序的技巧,能够检查一些程序规范,指针,变量,数组越界等问题,使得问题在前期就暴露出来。
           一般程序所容易犯的错误,没有定义变量,无效引用,野指针,超过数组下标,内存分配后没有删除等,无法调入循环体,函数本身没有析构,导致循环实效或者死循环.参数类型不匹配,调用系统的函数没有考虑到系统的兼容性等.
           白盒测试一般是以单元或者模块为基础的。目前的做法是把他归结为开发的范畴,用转人或者兼职的人去看代码或者利用部分工具,例如Rational系列,Boundchecker等工具,他们可以帮助人为的发现变量没有初始化,指针错误等。大大的减少了人力。
           我下面讲讲BoundChecker最实用的东西。
    例如:我们发现一个现象:有个软件再Win98下运行不起来,或者总是出现莫名其妙的错误,再Win2000下或者更高系统下运行正常。
    上面是一个现象,是我们再日常测试中经常遇到的现象,我们分析可能导致出错的原因:操作系统本身出错的原因,导致软件无法再此系统下运行,另外一个原因:软件中用到了某些函数不支持此操作系统。还有一个原因,软件运行的硬件环境再此系统下不能满足
           灰盒测试       灰盒测试是介于黑盒测试和白盒测试之间的一种测试.这个阶段的测试重点是各个组件之间的逻辑,这个时期的测试重点是各个DLL文件的参数和逻辑是否正确,测试的重点是DLL本身.然后采用桩驱动,把各个DLL或者函数按照一定的逻辑串起来,达到在产品还没有界面的情况下能看到一种既定情况下的结果输出.
           灰盒测试的要求相对白盒测试来说要求相对较低,对测试案例的要求也相对较低,只要求能够检测DLL处理输入和输出的能力,异常情况下的处理而已.
           灰盒测试是处于部分代码的逻辑测试,需要验证程序接收和处理参数的能力,接收到参数后的判断条件的能力。灰盒测试的重点在于程序的处理能力和健壮性。包括逻辑处理和错误处理。
           灰盒测试重点在核心模块,他投入相对黑盒测试的时间少,而且从维护量上和产出比上比黑盒测试得出的数据更加有效,相对于白盒测试,他需要付出的要少,而且白盒测试需要一些功力比较深的人才能从根本上发现和解决问题,他的结果可能会影响到算法,发现问题快,而且从根本上发现,所以更彻底,灰盒测试有自己的优势,投入少,见效快。
           下面谈谈如何操作。
           需要先建立一个测试工程,在这个工程中,需要包含测试的工程文件,需要建立对应该工程的测试的cpp或者vb的文件,完成以后,先Load对应的测试文件,然后按照对应的调用方法和参数,输入相关的测试点,把输出的处理结果进行分析,作为处理后下一个接受方要处理的初始参数。
           下面我给大家提供一个我们所做的一个组件的测试案例设计表格,大家可以看这个表格理解,做组建测试都应该设计那些内容,测试的重点在哪里,对我们未来从事测试工作的人是一个参考。
    IBatchDownloadExecutor

    1) SetDownloadConfig(IDownloadConfig * pDownloadConfig)

    输入/动作

    期望的输出/相应

    实际情况

    (进程外)

    实际情况


    典型值…
    CMyDownLoadConfig  myconfig
    SetDownloadConfig( & myconfig);
    程序无反映
    程序无反映
    程序无反映
    异常值…
    SetDownloadConfig( NULL);
    程序无反映
    程序无反映
    程序无反映

    2 SetVersionControler(IVersionControler * pVersionContro

    输入/动作

    期望的输出/相应

    实际情况

    (进程外)

    实际情况

    (进程外)

    典型值…
    IVersionControler* PVersionCrl;
    GetTenioComponent(&PVersionCrl);
    pDownload->SetVersionControler(PVersionCrl;);
    程序无反映,正常
    程序无反映,正常
    程序无反映,正常
    异常值…
    SetVersionControler ( NULL);
    程序无反映,正常
    程序无反映,正常
    程序无反映,正常

    3) SetTaskID(int nTaskID) GetTaskID()同时测试

    输入/动作

    期望的输出/相应

    实际情况

    (进程外)

    实际情况


    典型值…
    SetTaskID(5)
    int a=pDownload->GetTaskID()
    返回5
    返回5
    返回5
    边界值
    SetTaskID(0)
    int a=pDownload->GetTaskID()
    返回0
    返回0
    返回0
    异常值…
    SetTaskID(-10)
    int a=pDownload->GetTaskID()
    返回-10
    返回-10
    返回-10

    4) SetResourceList(PREQUESTFILELIST pRequestFileList)

    输入/动作

    期望的输出/相应

    实际情况

    (进程外)

    实际情况

    典型值…
    prequest->nFileCount=2;
    strcpy(prequest->szServerFileNameList[0],"http://210.22.12.74/dlltest/ag.txt");
    strcpy(prequest->szLocalFileNameList[0],"E:\\ag.txt");
    strcpy(prequest->szServerFileNameList[1],"http://210.22.12.74/dlltest/aga.txt");
    strcpy(prequest->szLocalFileNameList[1],"E:\\aga.txt");
    程序正常,无反映
    程序正常,无反映
    程序正常,无反映
    异常值…
    NULL
    程序正常,无反映
    程序正常,无反映
    程序正常,无反映

    5) Execute()

    输入/动作

    期望的输出/相应

    实际情况

    (进程外)

    实际情况

    典型值…
    用例1:在调用SetDownloadConfig ,SetResourceList ,SetVersionControler和SetTaskID进行正确设置之后,调用Execute();
    提示下载成功
    提示下载成功
    提示下载成功
    异常值…
    1
    分别用SetDownloadConfig ,SetResourceList ,SetVersionControler和SetTaskID进行错误的设置之后,调用Execute();
    提示下载失败
    提示下载失败
    提示下载失败
    2
    对上上述用例,重复多次(即连续多次点击按纽)
    提示下载失败
    提示下载失败
    大多数情况下提示失败, 有些情况下程序出错,

    总结: 类 IBatchDownloadExecutor中, 除了再连续多次调用Execute()函数时候,程序会出错,其他接口测试都跟预期的结果相符合

           其实在现在的测试工作中,测试人员在想着各种方法,把测试思路从原来面对产品提前到面对一个公用的组件,这个使得后续的工作的风险会减少到最少。那么什么样的产品适宜做组件测试呢,我表述自己的观点。
           他们都有一下几个特点。
    第一,  这个项目很复杂,但是单个组件功能相对独立,而且跟具体的业务不相关
    第二,  这个项目周期长(1到2年)
    第三,  独立组件的重用率非常高
  • 测试基础一

    2007-09-29 08:56:30

                  我们再来看看测试案例的设计,测试案例的设计在国内现在是一些刚刚入行的不会写程序或者程序功底比较差的人在写案例,那么这些人设计出来的案例只是包含了整个测试过程中功能测试的一部分案例而已,因为他们不懂得或者不理解程序,不是从原理上去分析产品,不是从逻辑上去分析产品,而是从用户使用的角度去分析产品,这样设计出来的案例的可行性和可信度多大呢?大家可想而知了。所以我们在整个引导大家的过程中,从技术和方法,结合具体实例和针对不同类型的产品的测试方法进行跟踪和描述。     
    首先,什么叫测试?测试干什么?
    测试,是在开发过程中的一种活动,它是分白盒测试和黑盒测试。在不同的阶段不同的人所承担着测试这个角色,我们把整个活动统称为测试。
    测试的工作内容主要包含了设计测试计划,设计测试案例,执行测试,进行测试总结。
    执行测试是在产品开发的整个过程中进行的,包括了单元测试,系统测试,集成测试,系统测试和验收测试,那么不同的阶段测试的重点不同。
    单元测试的重点是函数级,包括需求,包括算法,包括接口预留等内容。
    集成测试是指把小模块结合起来,测试的重点是输入输出数据,参数的处理,错误预处理,接口规范,参数约束等测试内容。
    系统测试的重点是功能性质,它的测试重点是按照需求来对照测试, 主要是功能实现的情况,包括功能使用逻辑和操作逻辑,操作系统,兼容性(软件和硬件)等内容。
    验收测试,主要是合同性质而言的,在国外现在软件外包情况比较多,那么双方按照合同规定履行自己的职责,把功能按照合同约定的形式条条比对。这是主要方面,那么在企业内部,验收测试是除了功能验收以外,还包括易用性,软件的亲和度等方面的内容。
    测试市场情况给大家做一个简单介绍,使得大家无论是从发展还是从市场方面,充分感受到测试行业的潜力。

    在设计和编码软件外包领域,一些中国软件外包企业已经与印度同行展开了短兵相接的较量,但是经常感到对手的功力深厚,而自己略显步履蹒跚。与此同时,另一些中国软件外包企业暗渡陈仓,另辟蹊径,从为客户提供多语言、多形式的软件外包测试服务做起,近两年在日本、美国和欧洲等全球主要外包市场不断攻城掠寨,探索出了一条软件外包服务的新路。正所谓“外包测试,风景这边独好”。

  • 网络个人隐私和安全

    2007-09-27 17:29:13

    网络个人隐私和安全

     

    保护上网隐私
    清空Internet临时文件夹
    别人查看“Internet临时文件夹下的图片、Flash等文件便能大体知道你曾到过的网站。要清除它们,可依次单击IE菜单栏中的工具”→“Internet选项,打开“Internet选项对话框,在常规标签中点击删除文件按钮,在弹出的删除文件窗口中勾选删除所有脱机内容,最后点击确定

    不要小甜饼Cookie

    Cookie也可能是泄密的一个罪魁祸首,在“Internet选项对话框的常规标签中单击删除Cookies”按钮,待弹出窗口后单击确定按钮,可删除它们。

    小提示:一种保险的办法是在上网后,进入Internet临时文件夹(该文件夹可在Internet选项对话框的常规选项下点设置来查看具体位置)删除其下所有内容,这样,临时文件及Cookie等都会被清除。

    消除访问网页的历史记录

    IE会将最近三周的访问历史记下,要踏网无痕可得清除它们,只要删除C:\Documents and Settings\用户名\Local Settings\History”文件夹中的所有内容即可。也可在Internet选项对话框的常规标签下点清除历史纪录按钮。

    要让IE不记录访问历史,请在Internet选项对话框的常规选项下,将网页保存在历史纪录中的天数从默认的20改成0即可。

    清除IE记住的表单内容

    当访问网站时,一些网页会提示输入,例如,搜索时会要求输入搜索内容、登录邮箱则要填用户名、密码——这些东西会被IE自动记录。要删除它们,可在“Internet选项对话框的内容标签下点自动完成按钮,在弹出的自动完成设置对话框中表单表单上的用户名和密码提示我保存密码前的钩去掉,再单击清除表单清除密码按钮,当询问时点确定

    删除地址栏列表中的网址

    IE地址栏中输入要访问站点的部分字母时会自动打开列表,其中有最近曾访问的相匹配的站点,这也得清除。

    “Internet选项对话框的内容标签下单击自动完成按钮,打开自动完成对话框,去掉“Web地址前的钩。

    若安装了中文网址软件,采用上法不能将地址栏列表中的网络实名清除,此时要在“Internet选项对话框的高级选项卡下,选中网络实名中的清除地址栏下拉列表中显示的网络实名项,单击确定

    小提示:当完成上述操作后,千万别忘清空回收站。若此处没有收拾干净,就将前功尽弃了。


  • 软件测试计划模板

    2007-09-26 11:23:49

    第1章 引言
    1.1目的
    简述本计划的目的,旨在说明各种测试阶段任务、人员分配和时间安排、工作规范等。
    测试计划在策略和方法的高度说明如何计划、组织和管理测试项目。测试计划包含足够的信息使测试人员明白项目需要做什么是如何运作的。另外,清晰的文档结构能使任何一个读者在浏览计划的前面几页后,就能对项目有一个大概的认识。测试计划只是测试的一个框架,很多细节需要跟开发人员或其他人员沟通,因此计划不包括测试用例的细节和系统功能的详细信息。在计划目的中需要指明读者对象。
    1.2名词解释
    列出本计划中使用的专用术语及其定义
    列出本计划中使用的全部缩略语全称及其定义
    缩写词或术语
    英文解释
    中文解释
     
     
     
     
     
     
    1.3参考资料
    列出本计划各处参考的经过核准的全部文档和主要文献。
    1.4测试摘要
    这一节主要说明测试计划中重要的和可能有争议的问题。本节的主要目的是将这些信息传递给那些可能不会通读整个测试计划文档的人员(比如经理或开发项目的负责人)。
    1.4.1 重点事项
    列出测试的重点事项。可以将问题按重要程度和优先级罗列出来,然后在后面的章节中再对这些问题进行详细说明,这样就能让对这些问题有重要影响的人员知道问题的所在
    1.4.2 争议事项
    简要说明争议事项。
    1.4.3 风险评估
    通过对技术文档的阅读,对被测系统可能存在的问题:系统设计,数据库设计,响应时间,计费策略,因测试环境不足可能存在的测试缺陷事先评估出来,以指导测试方案,进行有重点的测试.
    1.4.4 时间进度
    简要说明测试开始时间与发布时间。
    1.4.5 测试目标
    简要说明测试发布的质量目标:
    测试计划中所有测试方法和模块已经执行通过
    所有的测试案例已经执行过
    所有的重要等级为1/2Bug已经解决并由测试验证
     
    第2章 项目背景
    2.1测试范围
    说明本计划涵盖的测试范围,比如功能测试、集成测试、系统测试、验收测试等。通常说明什么是要测试的,什么是不要测试的是非常重要的。明确规定这些问题后,测试人员对该做什么有一个清晰的认识。
    1)简要地列出测试对象中将接受测试或将不接受测试的那些性能和功能。
    2)如果在编写此文档的过程中作出的某些假设可能会影响测试设计、开发或实施,则列出所有这些假设。
    3)列出可能会影响测试设计、开发或实施的所有风险或意外事件。
    4)列出可能会影响测试设计、开发或实施的所有约束。
     
    提示和技巧:
    需要测试和特别注意测试那些部分?
    测试是否专么针对与某些问题的解决?
    哪些部分不需要测试,为什么?
    哪些部分需要推迟测试,为什么?
    是否要验证每个模块的稳定性?
    测试的优先级和先后顺序
     
    2.2测试目标
    系统目标对测试人员了解自己需要做什么是非常重要的。测试项目负责人应积极与系统设计人员或开发人员沟通,以取得相关资料。测试人员必须知道系统是做什么并且帮助项目实现这种目标。在计划中包括系统视图和目标后,要确保所有的测试人员都知道项目和系统的目标。
    通常情况下项目计划都是模糊的。模糊的目标必须通过成员的努力转换成可衡量和实现的东西。没有固定的视图和目标,你将无法完成部分任务。而且,你会发现很难将对产品的认识向别人转述。
    2.3联系方式
    列出项目参与人员的职务、姓名、E-mail 和电话。
    职务
    姓名
    E-Mail
    电话
    开发工程师
     
     
     
    CVS Builder
     
     
     
    开发经理
     
     
     
    测试负责人
     
     
     
    测试人员
     
     
     
    2.4风险及约束
    列出测试过程中可能存在的一些风险和制约因素,并给出规避方案。如:
    Ä由于客观存在的设备、网络等资源原因,使得测试不全面。明确说明哪些资源欠缺,产生什么约束
    Ä由于研发模式为现场定制,且上线时间压力大,使得测试不充分。明确说明在此中约束下,测试如何应对
    Ä只针对专门的客户群需求的测试。明确说明此约束下的客户群和业务范围。
    2.5测试文档
    列出测试过程中可能用到的参考文档、相关的设计文档以及保存位置,测试完成后应产生的文档。
    2.5.1测试参考文档
    文档说明
    作者
    文档位置(CVS
    需求文档
     
     
    总体设计
     
     
    白皮书
     
     
    使用手册
     
     
    管理手册
     
     
    测试文档
     
     
    API文档
     
     
     
     
     
    2.5.2测试提交文档
    文档说明
    作者
    文档位置(CVS
    《总体测试计划》
     
     
    《总体测试方案》(可根据项目情况进行裁剪)
     
     
    测试用例
     
     
    《性能测试方案(报告)》
     
     
    《测试报告》
     
     
    Readme
     
     
    《产品操作手册(后台)
     
     
    《产品操作手册(前台)
     
     
    《产品安装维护手册》
     
     
    《产品错误代码说明文档》
     
     
     
    第3章质量目标
    描述本阶段测试目标和要求。质量目标应该包括产品的质量目标和测试小组的质量目标。
    质量不仅是衡量系统的功能或性能是否正常。对系统来说,在开发过程中尽早建立全面的质量标准与系统的及时发布是一样重要的。质量目标是一个强有力的工具,应该在系统开发过程中尽早建立。一个定义准确的质量目标在以后的产品开发过程中帮助决策。例如,系统是否能够正式发行?在代码完成后,应该修复那些缺陷?在系统完成后那种类型的测试是最合适的?
    3.1产品质量目标
    可以是产品的质量达到什么样的目标,产品的流程联通性达到什么样的要求。
    测试质量目标
    确认者(如需说明)
    测试已实现的产品是否达到设计的要求,包括:各个功能点是否以实现,业务流程是否正确
     
    产品规定的操作和运行稳定
     
    3.2测试质量目标
    评价测试质量的目标可以有:
    测试质量目标
    确认者(如需说明)
    所有的测试案例已经执行过
     
    所有的自动测试脚本已经执行通过
     
    所有的重要等级为1/2Bug已经解决并由测试验证
     
    每一部分的测试已经被Test Lead确认完成
     
    重要的功能不允许有等级为1/2/3Bug
     
    一般的功能或与最终使用者不直接联系的功能不允许有等级为1/2bug,bug等级为3的问题不得超过1/功能
     
    轻量的功能允许有少量2/3等级的错误
     
    发现错误等级为1/2/3Bug的速率正在下降并接近0
     
    在最后的三天内没有发现错误等级为1/2/3类的Bug
     
    第4章 资源需求
    4.1培训资料
    培训需求
    培训内容
    培训人员
    开始时间
    完成时间
    业务流程
     
     
     
     
    安装配置
     
     
     
     
    工具使用
     
     
     
     
    4.2测试环境
    4.2.1硬件测试环境
    描述建立测试环境所需要的设备、用途及软件部署计划。
    机型(配置)”:此处说明所需设备的机型要求以及内存、CPU、硬盘大小的最低要求。
    用途及特殊说明”:此设备的用途,如数据库服务器,web服务器,后台开发等;如有特殊约束,如开放外部端口,封闭某端口,进行性能测试等,也写在此列;
    软件及版本”:详细说明每台设备上部署的自开发和第三方软件的名称和版本号,以便系统管理员按照此计划分配测试资源;
    预计空间”:说明第三方软件和应用程序的预计空间;
    环境约束说明”:建立此环境时的特殊约束。如需要开发外部访问端口,需要进行性能测试等。

    平台1SUN
    机型(配置)
    查看(1050) 评论(0) 收藏 分享 管理

  • 测试用例模板

    2007-09-26 11:22:33

     
    测试用例ID
    测试用例的ID(由案例管理系统自动生成,方便跟踪管理)
    测试用例名称
    产品名称
    产品版本
    功能模块名
    测试平台
    用例入库者
    用例更新者
    用例入库时间
    用例更新时间
    测试功能点
    测试的功能检查点
    测试目的
    该测试案例的测试目的
    测试级别
    测试级别:主路径测试、烟雾测试、基本功能测试、详细功能测试
    测试类型
    测试类型:功能测试、边界测试、异常测试、性能测试、压力测试、兼容测试、安全测试、恢复测试、安装测试、界面测试、启动/停止测试、文档测试、配置测试、可靠性测试、易用性测试、多语言测试
    预置条件
    对测试的特殊条件或配置进行说明
    测试步骤
    详细描述测试过程,案例的操作步骤建议少于15
    预期结果
    预期的测试结果
     
  • Bug报告编写模板

    2007-09-26 11:21:28

    Bug报告编写模板
    BUGID
    Bug的唯一标志,由bug管理系统自动生成
    Bug标题
    简明扼要地对Bug进行概要描述
    产品名称
    软件产品的名称
    功能模块名
     
    产品子系统
     
    产品版本
     
    测试平台
     
    开发人员
     
    测试人员
     
    抄送人员
     
    创建时间
     
    解决时间
     
    关闭时间
     
    测试阶段
    模块测试、内部集成测试、外部集成测试、系统测试、验收测试
    问题级别
    紧急、严重、一般、轻微
    优先级别
    高、较高、一般、低
    问题来源
    测试、工程故障、升级、其他
    问题类型
    功能问题、版本问题、遗留问题、新需求、低级错误、改进建议、移植修改、割接问题、配置错误、编译问题、性能问题、设计问题、兼容问题、新功能增强、偶发性出错
    Bug描述
    这是Bug最重要的一部分,对Bug描述清晰准确,不仅有助于开发人员迅速定位解决问题,还对以后的维护工作有很大的帮助。一些比较简单的Bug,可以使用一两句话把问题准确描述,而对于一些比较严重或负责的Bug或者是新的需求,则应该详细说明。
    附件
    对于一些特殊的问题或者不能用语言很好地描述的问题,可以增加界面图形说明或参考资料或详细日志等附件
    Bug解决描述(bug解决之后由开发人员填写)
    开发人员修改问题之后,将Bug回复给对应的测试负责人。对于简单的问题,在回复的时候只是简单地用“已解决”或“fixed”这样的语句;而对于复杂或重要的问题,在回复的时候应该详细说明测试的解决方法。
    Bug关闭描述(bug关闭之后由测试人员填写)
    开发回复Bug之后,测试负责人验证该Bug,如果问题得到解决则关闭(否则回复给开发负责人,让其继续追踪)。关闭一个Bug时,对于简单的问题,可以“问题解决”或“OK”这样的语句回复;而对于一些比较复杂的问题或需求,应该对Bug描述的内容进行一个总结。
  • 测试计划编写策略

    2007-09-26 10:47:23

    测试计划描述了如何进行测试,有效的测试计划会驱动测试工作的完成,使测试执行、测试分析以及测试报告的工作开展更加顺利。
    一、测试计划的重要性和目的
    1、  测试计划的重要性
    测试计划是在软件测试中最重要的步骤之一,它在软件开发的前期对软件测试做出清晰,完整的计划,不光对整个测试起到关键性的作用,而且对开发人员的开发工作,整个项目的规划,项目经理的审查都有辅助性作用。
    2、  测试计划的目的
    测试计划描述所要完成的测试,包括测试背景、测试目的、风险分析、所需资源、任务安排和进度等:
    (1)将需求和总体设计分解成可测试,应该测试,推迟测试和无法测试的范围
    (2)对每个范围制订测试的策略和方法
    (3)制订release和停止测试的标准
    (4)准备测试所需要的环境
    (5)确定测试风险
    (6)确定软件测试目标
    (7)确定测试所需要的资源其其他相关信息
    (8)制订测试进度和任务安排
    二、测试计划编写基本策略
    1、测试计划编写依据:项目计划、项目计划的评估状态以及业务的理解
    2、测试计划编写时间:尽早开始。原则上应该在需求定义完成之后开始编写测试计划,对于开发过程不是十分清晰和稳定的项目,测试计划也可以在总体设计完成后开始编写。
    3、测试计划的编写与实施人员:测试计划应该由测试小组组长或最有经验的测试人员来进行编写,测试计划由测试人员来实施,测试人员可以对测试计划进行相关人员确认后进行调整。
    4、测试计划的变更:测试计划是一个发展变化的文档,会随着项目的进展、人员或环境的变动而变化,确保测试计划是最新的而且依据测试计划执行测试工作。
    5、测试计划的优先级别:没有谁可以保证通过测试后的产品没有缺陷,也没有公司会允许无休止的测试。好的测试是一个有代表性、简单和有效的测试,在测试计划中,必须制定测试的优先级和重点。
    6、测试计划的评审:测试计划需要由高级测试人员或测试组长制订,在经验不足或条件限制的软件测试计划的制订时,需要多名测试人员共同制订和修正.
    (1)软件项目经理负责评审测试计划的方向正确性和软件开发按照总体设计方案实施(如有改动,需通知测试人员修改计划),并保证软件具有可测试性
    (2)QA人员评审测试过程的正确性和能够按照计划要求的正确实施
    (3)高级经理评审测试计划的导言和范围的正确性
    7、测试计划的管理
    测试计划将按照项目编码或软件名称和版本进行管理,所有文档放置于CVS。
    8、测试计划制定过程:
    (1)       评估项目计划和状态
    (2)       组建测试小组
    (3)       了解项目风险
    (4)       制定测试计划
    (5)       审查测试计划
    9、测试计划的原则
    (1)       尽早开始
    (2)       灵活变更
    (3)       合理评审
    (4)       简洁易读
    三、测试计划的主要内容
    测试计划的内容会因不同的项目以及项目的大小而有所不同,一般而言在测试计划中应该清晰描述以下内容:
    1、  测试目标:对测试目标进行简要的描述。
    2、  测试概要:摘要说明所需测试的软件、名词解释、以及提及所参考的相关文档。
    3、  测试范围:测试计划所包含的测试软件需测试的范围和优先级,哪些需要重点测试、哪些无需测试或无法测试或推迟测试。
    4、  重点事项:列出需要测试的软件的所有的主要功能和测试重点,这部分应该能和测试案例设计相对应和互相检查。
    5、  质量目标:制定测试软件的产品质量目标和软件测试目标。
    6、  资源需求:进行测试所需要的软硬件、测试工具、必要的技术资源、培训、文档等。
    7、  人员组织:需要多少人进行测试,各自的角色和责任,他们是否需要进行相关的学习和培训,什么时候他们需要开始,并将持续多长时间。
    8、  测试策略:制定测试整体策略、所使用的测试技术和方法。
    9、  发布提交:在按照测试计划进行测试发布后需要交付的软件产品、测试案例、测试数据及相关文档。
    10、              测试进度和任务人员安排:将测试的计划合理的分配到不同的测试人员,并注意先后顺序.如果开发的Release不确定,可以给出测试的时间段.对于长期大型的测试计划,可以使用里程碑来表示进度的变化。
    11、              测试开始/完成/延迟/继续的标准:制定测试开始和完成的标准;某些时候,测试计划会因某种原因(过多阻塞性的Bug)而导致延迟,问题解决后测试继续。
    12、              风险分析:需要考虑测试计划中可能的风险和解决方法。
    四、软件测试计划模板
           请参考http://blog.csdn.net/smilings/archive/2006/07/03/869447.aspx,在该模板中详细讲述了如何编写测试计划。 
  • 压力测试和性能测试的区别

    2007-09-26 10:36:31

    性能测试就是用来测试软件在系统中的运行性能的。 性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用白盒测试来进行评估,然而,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。



      性能测试经常和压力测试一起进行,而且常常需要硬件和软件测试设备,这就是说,常常有必要的在一种苛刻的环境中衡量资源的使用(比如,处理器周期)。外部的测试设备可以监测测试执行,当出现情况(如中断)时记录下来。通过对系统的检测,测试者可以发现导致效率降低和系统故障的原因。



      压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。



      性能测试:在交替进行负荷和强迫测试时常用的术语。 性能测试关注的是系统的整体。它和通常所说的强度、压力/负载测试测试有密切关系。所以压力和强度测试应该于性能测试一同进行。



      举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试。



      性能测试(Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原 则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑 到软件的性能问题。



      压力测试 (Stress) 多用户情况可以考虑使用压力测试工具,建议将压力和 性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况, 如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以)。



      压力测试和性能的测试的区别是在于他们不同的测试目的



      压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的叶面3秒钟内响应。



      所以一句话概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载。



      性能测试是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。



      概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;



      比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)。



      总之,就像一个方程式:综合性能=压力数*性能指数, 综合性能是固定的, 压力测试是为了得到性能指数最小时候(可以接受的最小指数)最大的压力数;性能测试是为了得到压力数确定下的性能指数。
  • 如何提高软件测试的水平

    2007-09-26 10:33:34

    “什么叫成熟产品?只要有一个成功案例的产品就是成熟产品!”某国内大型软件公司CEO的这个经典观点广为流传,但其中的逻辑错误将风险带给了客户也带给了软件企业本身。国内一些软件企业居然一夜间成了万能公司,ERP ? CRM ?OA?WorkFlow?我们都行!然而这些企业对软件测试的重要性大多认识不足,重开发轻测试的现象过于严重,很多公司没有专门的测试部门,测试工程师太少,开发人员兼作测试工作的现象十分普遍,在这种状况下推出的缺少严格测试等环节的软件产品只能给客户带来悲剧。

      近年来,我国的软件企业已越来越意识到软件测试的重要性,逐渐加大软件测试在整个软件开发的系统工程中的比重。据调查统计,在成本上一般来说是“需求分析”和“规划确定”各占3%,“设计”占5%,“编程”占7%,“测试”占15%,“投产和维护”占67%.近些年来,测试成本的比例更有上升趋势 .

      不成熟软件带来的风险

      不成熟的软件产品是把测试成本交给了用户:企业往往是出于项目周期安排不当,或者根本没有安排专门测试,匆匆完成编码设计就将产品交付使用了。这样的后果自然是用户觉得产品漏洞百出,项目执行过程也遥遥无期,最后,项目双方都筋疲力尽,用户觉得受骗,而软件商则毁了声誉,追加了大量项目实施费用,可谓是“赔了夫人又折兵”。

      企业逻辑的软件实现高于计算机技术:很多软件企业在没有做透前期调研的前提下就匆匆开始建设自己想象中的“大厦”,结果可想而知。当用户建立起真正的企业应用。才发现软件违背了企业逻辑,不得不进行修改。这样闭门造车无疑会给“大厦”带来致命伤害。

      注重软件产品的质量和成熟度才会良性循环:有人把不成熟的软件产品比作是焦油坑中垂死挣扎的猛兽,布鲁克斯《人月神话》展示的可怕一幕在软件研发过程中屡见不鲜。很多软件企业常常将软件质量视为一种奢侈,如果有必要的话,为了更多功能、更快速开发或者更低成本,测试就可以被牺牲掉。然而,在实践中,如果软件开发组织对质量有一个坚定承诺,实际上可以加快开发,减少成本,并更容易地增加新的特性。在“已完成”的产品缺陷修复上花费的代价要比从一开始就修复高出很多倍。相反,一个从开始就加强产品质量的组织,是有远见和创新精神的,市场中的高质量软件将更具竞争力。

      找出测试管理中的误区

      笔者曾经从事专业的软件项目管理与实施,项目管理感受很深刻。有一些切身体会与读者分享。

      吸取“前辈”经验。IBM在软件自动化测试技术核心的三个最佳成功经验是:尽早测试、连续测试、自动化测试,并在此基础上提供了完整的软件测试流程和一整套的软件自动化测试工具,组建一个测试团队,基于一套完整的软件测试流程,使用一套完整的自动化软件测试工具,完成全方位的软件质量验证。

      别去“挖东墙补西墙”。由于项目研发期的“缺斤短两”,使项目实施和投入运行的初期 漏洞百出,时间一长用户会发疯,项目实施者也会发疯,国内前几年的众多的ERP项目失败的原因多出于此。项目实施的遥遥无期,将严重挫伤用户的耐性和信心。

      代码与文档哪个值钱?多数项目管理者忽视了文档的重要性。对于大型软件的研发项目,还需要专业的测试过程管理软件来支撑大规模的信息交流和自动测试、代码的更新和版本的提交。这些文档和信息的价值从某种意义上甚至超出了程序代码本身。

      全程还是后期?软件的设计阶段往往没有软件测试人员的参与,事实上设计上的缺陷往往是耗用成本最高,也是最难在开发后期修复的缺陷。而一个软件的质量与它有多大的设计缺陷有着密不可分的联系。而有经验的测试人员的质量意识,安全意识,对用户需求的了解及分析能力,对于打造高品质的软件设计都有着不可忽视的作用。

      专职还是兼职?在传统的开发方式中,由于缺乏必要的配置管理和变更控制,测试工作根本无法提出具体的测试要求,加之开发人员的遮丑,测试工作往往是走走过场,测试结果既无法考核又无法量化,当然就无法对以后的开发工作起指导作用。事实上,每个软件项目都需要专业的测试人员进行相对独立的测试工作,从而保证软件项目的质量。

      居安思危,控制风险。需求变更给测试带来的问题可能是灾难性的,客户需求不是变动的唯一来源。有时团队自身也能引起范围变动。团队的成员可能听说或“假设”解决方案因客户的实际要求而发生了变动。加强沟通和协作,随时了解变更的状态。

      谁为产品质量买单?质量和质量控制应该是软件项目的的一项重要内容。但是,无论在消费类软件还是大型软件的测试领域,国内软件产品的质量掌控体系和标准都很模糊。质量控制越来越依托于公司在产品交付用户之前的测试工作的成败。

      没有厚度就没有重心。软件测试过程的历史数据缺失是大多数软件项目失败的关键所在,这样的结论也许使很多人感到吃惊,但事实就是如此。因为这些历史数据是反映软件项目实施轨迹的第一手资料,是项目延续和反馈的基石。

      省钱还是费钱?事实上,作为软件开发企业来说,投入人力,资金搞软件测试的最终目的还是离不开经济效益。而对与测试项目的管理也不能离开这个大前提。软件测试的经济效益主要来自以下两个方面。一是满足用户需求,提高产品的竞争力,最终提高产品的销售量。二是尽早发现缺陷,降低售后服务成本。而软件测试的最终目的就是使它带来的经济效益最大化。有一些专业的测试工具的购买、测试人员的配备和培训还需要一定的经济投入,项目决策者们可以选择适合自己的配置,但决不能没有这些方面的投入。

      沟通还是对立?沟通是开发和测试人员必备的素质。但传统的思想认为,测试人员是找麻烦,是开发的“克星”。其实,项目管理者应该清楚,为软件的质量和品质努力的工作目标是一致的。沟通和建立沟通渠道是项目管理者的重要工作。

      如何提高软件测试水平

      要提高我国的软件测试行业的发展水平,首当其冲要解决软件测试队伍的问题。某著名国际软件企业的软件测试人员与软件开发人员的比率达到了3:5左右,并且在实践过程已经证明了这种人员结构的合理性。但国内公司显然一时很难达到,但更重要的是重视程度,在这个基础上壮大软件测试队伍,提高测试人员的素质。

      其次是要学习借鉴国外完善的测试机制,包括丰富的软件测试经验,强大的测试工具,优秀的测试管理水平。真正解决测试手段落后、测试方法单一和测试工具欠缺的问题,在企业内部形成一个严密有效的纠错系统,使国内的测试工作流程、 技术水平接近国外先进水平,这样才能提高国内软件开发与测试的整体管理水平,增加软件产品的竞争力。

      此外,要重视第三方的测试力量。第三方的专业测试企业是靠技术与服务来赢得客户信任的,也因此更加注重测试方法与质量。对于软件企业来说,从无到有地去建立测试部门,并完善测试体系,需要较大投入,将研发出来的软件产品交给实力强劲的第三方专业测试公司,在提高软件产品的质量问题同时,还节约了产品测试成本。
  • 如何避免遗漏bug

    2007-09-26 10:25:24

    bug遗漏,我想这个是很多公司很多人头痛的一个问题。众所周知,bug是不可能被完全消灭的,当然也就意味着在发布前不能被全部找出来。于是乎当项目发布后,或多或少都会出现bug遗漏的现象,即使发布初期没有发现,随着时间的流逝,一些隐藏的bug也会慢慢浮现出来。那么对于遗漏的bug,我们该怎么去做?

            古时云:亡羊补牢,为时未晚也。对于遗漏的bug,我们应该去透彻的分析它产生的原因,然后吸取教训,防止再次出现。这样遗漏bug的数量就会越来越少,趋于0。那么怎样的分析才是透彻的呢?我发表一下自己的观点。

            根据我的经验,总结下来有以下几点,首先从根源上说,需求的问题。需求是一切的根本,我们所做的一切都是在需求的基础上进行的,那么需求会不会有问题?当然有啦,否则要需求评审干嘛,每次需求评审,或多或少都能发现一些需求的问题,在还没有开始编码之前就把需求的bug找出来,这个是最理想的状态。显然这个不现实,但是能多发现一个不合理的地方,那就能减少很多风险。因此需求关要把好。当然要求测试人员在需求评审时就要找出需求的bug,这个是要求比较高的,需要对业务的熟悉以及对相似产品的认识。需求关把好了,那么就算踏出了成功的第一步。

            其次,要尽早与开发人员进行测试设计评审,统一对需求的认识(开发测试人员都可能存在对需求的认识不正确)。越早进行,越能够避免出现因为对需求的认识不同而导致出现的问题(最可怕的是因此产生的隐性bug),这样也能减少后期很多不必要的资源浪费。

            接下来,就是用例设计了,这方面体现了一个测试人员的真实地能力。考虑的面要广,包括:使用不同的测试方案,不同的测试数据的类型(要齐全),正常流与异常流等来覆盖所有的需求。

            然后就开始执行测试,要全面地执行测试用例,并且在测试过程中不断的添加遗漏的用例。在时间允许下,尽可能的执行。

            回归阶段,除了要回归前面发现的bug,还要重视回归那些bug相关的模块,这个教训是很多的,所以千万不能忽视。一个小小的小小的参数变动可能引起一个比较远的功能点的大bug,继而引发遗漏。所以这个是需要开发人员与测试人员去识别的。开发人员熟知代码,知道改动的地方会被哪些模块调用或者会引起哪些变化,因此开发人员需要通知测试人员测试关注点以及加强自测。在开发人员与测试人员无间隔的合作下,这种bug的遗漏会减少很多。

            发布前期,应该在保证所有的bug都fixed的前提下,把所有用例都回归一下,以免遗漏。

            最后终于发布了,发布好就可去FB了,^o^。不要在开心的情况下放松神经,所谓行百里,半九十,不能倒在最后的冲刺关头。细心细心再细心。只要一步步走下来,那么就可以把遗漏的bug数量减到最低。

            当然最好做自动化脚本,方便以后的回归。这就是我想说的,大家有意见可以跟着,共同进步。

  • 编码人员和测试人员经常争论

    2007-09-26 10:17:12

    相信很多团队都有这个问题:编码人员和测试人员经常争论。测试人员说编码人员做的东西太烂,问题太多,缺乏规范,开发文档也没有;编码人员说测试人员责任心有问题,测完了还是令自己不放心;还有很多人认为“如果发布出去的软件有问题,就是测试人员的责任”,理由是“测试人员应该在发布之前把所有问题都找出来” 1】。

    为什么会这样?我们来简单剖析。

    首先,我们先要叙述一条“公理”:任何人都不能保证其工作成果总是100%完美的。即任何人都不能做到“0缺陷”

    因此,任何一个开发团队做完了都必须经过测试,尽可能的发现潜在问题并修复后才能发布出去。所以,测试人员必须竭尽所能发现缺陷。注意了,基于上述“公理”,任何测试人员都不能保证把软件中的潜在问题100%的找出来[参见体检报告中的“未见异常”和软件测试]这样说来,上述【1】的说法是有失公允的。

    那为什么会争吵呢?第一,出了问题的时候编码人员和测试人员是直接责任人,并且要负责解决问题,因此很容易引起情绪上的冲动;而且多数人遇到责任归咎的时候会本能的为自己开脱。第二、大家都忽略了“任何人都不能0缺陷”的公理。

    但是,这并不表示有了这个“公理”,所有人就可以心安理得的面对所有缺陷了。任何产品的主要竞争力最终来自质量。因此对质量的无限追求,是任何团队的要求。也就是说,虽然我们不能要求每个团队的工作成果100%完美、0缺陷,但是我们总期望我们的成果能够尽量趋于完美,比如99.9997%,所谓的“六西格玛”。

    怎么样做到尽量趋近于完美?这可能受到多种因素的影响,比如团队的工作能力、工作态度以及项目客观因素;还有管理、过程、工具,等等;可能会有很多!但是,我们可以简单归结为所有参与者工作成果的近乎100%的完美!所以,不要争论,从自己这里开始找原因,去改进!

  • 功能测试计划内容

    2007-09-25 11:50:13

    软件测试计划是开展软件测试得第一步,各个公司可能都会根据自己得情况定义一份测试计划得规格或模版;但是测试计划得内容确大同小异,下边是我认为需要在测试计划书中体现得内容

    第一:项目背景

    简单得介绍项目的名称,项目开发的背景和开发的情况,以及只要完成的功能;术语的定义,参考的文档等内容

    第二:资源分配

    1)测试环境的搭建所需要的软件和硬件说明,包括操作系统,补丁版本,数据库版本,被测软件版本,还有诸如打印机、扫描仪等外件信息

    2)人员安排:包括任务、时间、人员及此任务输出的产品。任务包括测试的产品、对软件测试产品的了解、书写测试文档,执行测试等。

    第三:测试依据文档和输出的文档说明:测试依据就是该项目的需求文档、设计文档等信息,输出文档包括测试需求,测试计划,测试用例,结果统计,缺陷分析

    第四:测试内容

    1)测试的功能点

    2)测试方法、策略:包括采用何种方法测试,采用手工或自动化测试工具

    3)测试类型:包括功能测试、安全测试、压力测试等等

    4)约束条件(或测试边界):例如测试的软件需要有一定的网络环境,但是本次测试只测试软件,默认网络环境为正常。

    第五:回归测试的策略和具体安排以及缺陷的分析和总结

    第六:风险估算

    在测试过程中,可能会遇到开发人员由于出差、请假等原因;人员或者软硬件资源限制;项目优先级发生变化等原因,在这些情况下项目如何处理,而如果项目由于某种原因被暂停,则重启该项目测试的条件是什么,这个也需要说明清楚

    ps:有些时候还需要定义测试启动的条件:比如,运行环境说明书的提交,配置库的配置,平台的搭建等内容

  • 需求不明确如何建立测试用例

    2007-09-25 11:48:15

    基于目前国内很多企业的测试行业还刚刚起步,很多测试内容和流程管理还不规范,各种软件的开发模式也良莠不齐,我想谈谈在这种情况下是如何建立测试用例库的,也希望我能抛砖引玉,能够一起讨论。

     

          建立功能测试用例主要面临的问题建立测试用例的依据是什么?我认为在这种情况下可以参照的文档是1)需求说明书  2)用户手册说明书  3)经验和业务知识

    下面谈谈测试用例库的建立

     

    一、      测试用例的管理工具

     

          由于测试管理软件比较昂贵,很多公司都缺乏有效的测试用例管理工具,进而影响测试用例库的建立。我认为在建立测试用例库初期,EXCELWORD都是很不错的工具,我个人很推崇EXCEL,因为在给测试用例分类的时候,EXCEL的分页显示对这种情况会起到很好的效果,以前西门子手机部门也采用EXCEL呢,只不过用VBA定义了很多宏来实现对软件缺陷的分析与报告

     

    二、      测试用例的积累

     

          要建立一套有效的测试用例,首先测试用例需要由经验丰富的测试工程师来完成;

    其次,可以选择公司中某个功能变化不多的软件模块来编写测试用例,以这样的方式逐步添加测试用例;

     

    第三建议在编写测试用例的时候,按照业务类型和功能性界面来对测试用例和功能性界面测试用例进行分类。业务类型测试用例主要倾向于整个公司业务的逻辑,数据流,场景等类型的测试用例,功能界面型测试用例倾向于功能的实现方式诸如单选按钮多项按钮,复合框,列表框等这样做的好处在于当需求发生变化或者功能实现的方式发生变化后,需要修改的测试用例比较少

     

    第四在测试过程中,需要为遗漏的功能添加测试用例;

     

    第五在测试执行中如果采取随机测试的方式发现的bug,需要把其转化为测试用例

     

          这样坚持一段时间,这该相关模块的测试用例就建立起来了,在以后的测试过程中,就会发现这些测试用例的强大作用了。

  • 软件测试基本功之----概念篇

    2007-09-25 11:40:43

    要想学好软件测试,首先就必须掌握一些软件测试的基本概念,就像我以前那样在还不懂性能测试到底是什么概念的时候,就去学那些性能测试工具,到最后测试出来的都不知道是不是性能问题,不知道性能测试需要关注网络环境,硬件配置,软件性能需求,数据库等,最后只知道测试的软件很耗资源,很卡,然后拿到个报告就不知道了,不会分析。说白了就是做了很多无用功,很多东西还是要从底层掌握,了解,慢慢就知道是怎么会事了,做什么基础好了,做起来就事半功倍。J,扯多了,下面就介绍一些我知道的,我了解的测试概念,也许几年后来看由是不一样的想法o(_)o…

     

    软件测试概念

           标准定义:使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果的差别。

    我的理解:就是保证你的软件按照用户的需求做了该做的,其它的一概不要存在。

    软件测试的目的

           用户角度:

    希望通过软件测试来发现软件中隐藏的错误和缺陷,尽量的符合用户的需求,而来考虑是否接受该产品

    开发者角度:

    希望测试表明软件产品不存在错误和缺陷的过程,验证软件以正确实现了用户的需求,确立对软件质量的信心。

    测试者角度:

    以最少的时间和人力,执行测试来尽可能暴露出软件的各种错误和缺陷,收集测试结果数据为可靠行分析提供依据,验证软件所有的功能符合用户的需求并确保顺利发布产品。

    Myers软件测试目的

    (1) 测试是程序的执行过程,目的在于发现错误;

    (2) 一个好的测试用例在于能发现至今未发现的错误;

    (3) 一个成功的测试是发现了至今未发现的错误的测试。

    软件测试原则:

    1,  所有的软件测试都应追溯到用户需求

    2,  应当把“尽早地和不断地进行软件测试”作为测试者的座右铭

    3,  完全测试是不可能的,测试需要终止

    4,  测试无法显示软件潜在的所有缺陷;

    5,  充分注意测试中的群集现象

    6,  程序员应避免检查自己的程序

    7,  严格按照测试用例执行测试,尽量避免测试的随意性

    8,  保存好所有的测试文档,包括测试计划,测试用例,测试结果,测试报告,出错统计,最终分析报告等,为维护和后续版本测试提供方便

    9,  写测试用例和执行测试用例的人尽量分开

    10,         测试尽可能按照制定的流程走

     

    软件测试的不同分类:

    1, 按是否关心软件内部结构和具体实现的角度划分

    A:黑盒测试:black-box testing

                   说白了就是根据需求和功能来测试,并不需要知道软件内部的代码和设计是这样实现的。

    B:白盒测试:white-box testing

                   这个就需要根据软件内部代码的具体实现情况,比如内部逻辑实现,语句,分支,路径和条件的覆盖率。其实就是去研究源代码和程序结构。

    C:灰盒测试:monkey testing

                   灰盒测试,确实是介于二者之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。 51Testing软件测试网D hWJG
    灰盒测试结合了白盒测试盒黑盒测试的要素.它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。
    51Testing软件测试网(B!x3i8eT;V3d(]
    灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识盒与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。

    X {"jM*J]&RG121932
    灰盒测试涉及输入和输出,但使用关于代码和程序操作等通常在测试人员视野之外的信息设计测试。

    2, 按照是否执行程序的角度划分

    A:静态测试:static testing

            不利用计算机运行待测程序,而只是静态地检查程序代码,界面或文档中可能存在的错误的过程

    B:动态测试: dynamic testing

            实际运行被测试程序,输入相应的测试数据,检查输出结果和预期结果是否相符合的过程

    3, 按照软件开发的过程按阶段划分

    A单元测试unit testing

            对软件中的最小可测试单元进行检查和验证。这个单元可以是一个函数,一个类,一个窗口,一个功能等,就是你认为最小的被测试的模块。

    单元测试主要根据单元测试计划(根据详细设计),单元测试用例来执行,主要是白盒测试方法,一般先进行静态代码检查测试,再进行动态测试。

    单元测试的任务一般包括:

    1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试

    B:集成测试:integration testing

            集成测试是单元测试后的下一个阶段,是将单元测试成功的各个模块,类或函数组成系统或子系统,重点测试各个单元模块的接口,组合后的功能是否正确。

    一般集成测试和单元测试是同步进行的,集成测试的依据为单元测试的模块和概要设计。

            提交集成测试计划、集成测试规格说明和集成测试分析报告。

            集成测试的策略主要有自顶向下和自底向上两种

    C:确认测试:confirmation testing

            验证软件的功能和性能及其它特性是否与用户的要求一致

    D系统测试system testing

            系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的先知者问题。因此,系统测试应该按照测试计划进行,其输入、输出和其他动态运行行为应该与软件规约进行对比。软件系统测试方法很多,主要有功能测试、性能测试、随机测试等等

    E:验收测试:acceptance testing

            验收测试旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。所不同的是,验收测试常常有软件系统的购买者代表在现场,甚至是在软件安装使用的现场。这是软件在投入使用之前的最后测试

    F回归测试:regression testing

            回归测试一般在软件维护阶段,测试先前测试过并修改过的程序,确保更改没有给软件其它未改变的部分带来新的缺陷,软件修改或使用环境变更后都要执行回归测试。

    4, 其它类型测试

    1, 功能测试:functioncal testing

    一种黑盒测试,通过对组件/系统功能规格说明的分析而进行的测试

    2, Alpha测试:

    在开发进行结束的时候进行测试,针对测试的结果可能还会进行一些小的设计更改,这类测试一般由用户和开发者或测试人员共同参与。

    3, BETA测试:

    当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。

    4, 压力测试:stress testing

                         指持续不断地给被测试系统增加压力,直到被测试系统压垮为止,用来测试系统最大承受能力

    5, 性能测试:performance testing

    被测试软件在正常的软硬件环境下运行,收集到的一些性能。

    6, 负载测试:load testing

    指被测试系统在其能忍受的压力的极限范围下连续运行,来测试软件的承受度

    7, 容量测试:volume testing

    容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。

    8, 兼容性测试:

    测试系统在不同的平台/硬件/操作系统/网络上的表现情况

    9, 易用性测试:

    测试程序是否符合用户使用习惯,人机相互操作是否够人性化。

    10,              可靠性测试:reliability testing

    指连续运行被测软件,检查软件运行时的稳定性。

    11,              安装和反安装测试:

    在正常情况/异常情况下测试完全,部分或升级的安装/反安装过程

    12,              安全测试:safety testing

    测试系统对内部和外部非法入侵,故意损坏的表现情况。(可能需要了解更多的安全知识)

    13,              恢复测试:

    测试当出现崩溃,硬件错误或其它灾难性问题时,系统的表现情况

    14,              文档测试:

    测试开发提交/测试产生的文档是否全部齐全,全部符合要求

    15,              界面测试:

    测试软件界面是否人性化,是否符合大部分人的使用习惯而进行的测试

    软件测试结束标准:

    1,是否达到原先定义的覆盖标准。51Testing软件测试网B8Q"w9[BSU nP%]
            
    比如原先定义测试95%的功能条目,测试100%的需求条目,只对接口类做集成测试等等。达到标准了就停。
    ]7v{,yHG1219322
    ,所发现的缺陷 bug或者功能不足等等)低于预先定义的上限。51Testing软件测试网0VE Z,Xl)fm
            
    比如定义每周发现的缺陷少于5个,即可停止。
    e{b+`H I"?1219323
    ,找到缺陷耗费的代价超过这个缺陷可能导致的损失
    '{ xR-Se121932 
    这个的依据是:权限开始好找,越到后面越难找。具体操作的时候可以根据公司实际情况来定义什么样的情况算是花费的代价大
    'm"kCB&VA iV1219324
    ,团队集体同意(开发,管理,测试,市场,销售人员)
    51Testing软件测试网uUm/Z1Mca
         
    由于利益和市场的原因,必须推出产品了。哪怕有bug也得上了。

                  (其它情况看各个公司的不同)

  • 智能手机小应用常见故障总结

    2007-09-25 11:14:49

     最近一直在做智能手机小应用的跟踪验证测试,故障单是由测试高手提供的,是一个非常完善的测试队,连我们的开发团队都感叹他们的敏锐,能发现潜在的Bug。

       在验证之余,我认真研究了他们出的故障单,做了一些总结。

       1、手机软件系统测试的角度分为:功能模块测试,交叉事件测试,压力测试,容量性能测试,性能测试和用户手册测试等。

       2、功能模块测试:首先应分析功能模块的功能项,测试每个功能项是否能够实现对应的功能。一般根据测试案例(Test Case)或软件本身的流程就可以完成基本功能测试。(相对简单,故障也较容易解决)

       3、交叉事件测试:又叫事件或冲突测试,是指一个功能正在执行过程中,同时另外一个事件或操作对该过程进行干扰的测试。例如通话过程中接收到短信或来响闹。应该以执行干扰的冲突事件不会导致手机死机或花屏等严重的问题。
       交叉事件测试非常重要,能发现很多应用中潜在的性能问题。另外有中英文模式的切换的手机要注意中英文模式切换后的功能实现存在的问题,通常会被测试人没忽略。

       4、压力测试:又叫边界值容错测试或极限负载测试,即测试过程中,已经达到某一软件功能的最大容量,边界值或最大的承载极限,仍然对其进行相关操作。例如连续进行短信的接收和发送,超过收件箱和PIM卡所能存储的最大的条数,仍然进行短消息的接收或发送,以检测软件在超常态条件下的表现,来评估用户能否接受。
       压力测试用手工测试非常繁锁,可以考虑自动化测试,目前没有比较大量使用的工具,一般都是由开发人员配合开发出的工具,或者高级的测试人员编写出的脚本。

       5、容量测试:又叫满记忆体测试,包括手机的用户可用内存和SIM/PIM卡的所有空间被完全使用的测试。此时再对可编辑的模块进行和存储空间有关的任何操作测试,如果软件的极限容量状态下处理不好,有可能导致死机或严重的花屏等问题的出现。
       与压力测试有些类似,也可考虑自动化测试。

       6、兼容性测试:也就是不同品牌手机,不同网络,不同品牌和不同容量大小的SIM/PIM卡之间的互相兼容的测试,以短消息为例:中国电信的小灵通接收到从中国移动或中国联通GSM发来的短消息,接收,显示和回复功能是否正常等

       另外从我测试的这几个小模块中,按与时间相关和文字两方面容易出现故障的地方总结如下:

       1、与时间相关:首先是时间的输入域,是否有输入限制,如:文字、标点符号、小时大于24或12、分钟大于60、秒大于60、月大于12、日大于31(按月情况而定)等
       特别注意日期变更分界点如23:59或12:59的变化。以及12/24小时切换模式的测试。

       2、文字输入相关:当界面过多时,注意功能按钮的点击事件能否正常完成相应功能的实现。超过文字字数限制时的系统提示等。

  • LoadRunner录制脚本协议选择问题

    2007-09-21 13:04:45

    为什么我用LR录完之后VuGen里产生不了脚本?这就是协议选择的问题了,LR支持的协议和应用非常广泛,很少有人能用完这么多协议,我们就常见的大多数人用的加以讨论:

    对于常见的,B/S系统,选择Web(Http/Html),

    测一个C/S系统,根据C/S结构所用到的后台数据库来选择不同的协议,如果后台数据库是sybase,则采用sybaseCTlib协议,如果是SQL server,则使用MS SQL server的协议,至于oracle 数据库系统,当然就使用Oracle 2-tier协议。

    对于没有数据库的C/S(ftp,smtp)这些可以选择Windwos Sockets协议。

    至于其他的ERP,EJB(需要ejbdetector.jar),选择相应的协议即可.

  • 一个有趣的BUG!

    2007-09-11 14:35:25

    所测试的系统一部分功能上线使用有 3 天了,今天得到用户的一个反馈,说是增加数据保存不成功。让我很是奇怪,这个现象只出现在个别用户,而不是所有用户。为了便于查找原因,让用户把增加的数据发送过来看看,前期猜测可能是录入的数据问题。之后对用户发送过来的增加数据文件进行了测试和分析,发现了这么个有趣的问题。

       
        用户发过来的是一个用户已经填写好的
    EXCEL 文件表格数据,用户要把这数据录入到系统里。问题出现在录入的这一操作过程,手工填写增加数据,保存没有问题,但是使用快捷键在 EXCEL 里复制,在系统里直接粘贴,保存后,数据不能成功保存,同时没有提示信息提示用户。仔细重复尝试,最后得知,有一个字段在粘贴后,带有的空格字段超长导致保存失败,在手工输入的时候有限制和判断,在快捷键粘贴的时候,没有进行判断。这个看试简单的小 BUG ,不细心的操作和分析,是很难去再现和找到问题出现的原因。嘿嘿,这就是手工测试有趣的地方,同一个功能,在不同情况下的操作会碰到意想不到的问题,在再现和分析问题根源的过程中,又会让你想到还有哪些地方存在漏洞。另一方面也让我注意到了,下次用户在反馈问题时,让他们把操作步骤和操作数据进行详细的描述,更便于再现问题和查找问题发生的原因。可是让我矛盾的是,用户不是计算机专业操作人员,他们通常碰到问题了只能粗略的告诉你功能不好用了,具体怎样操作不好用,他们是不关心的。他们关心系统怎么用,出现问题了,什么时候能正常使用。要想再现、分析用户发现的问题,就靠测试发挥自己的想象力和分析能力了。

  • 471/3123>

    数据统计

    • 访问量: 26123
    • 日志数: 47
    • 建立时间: 2007-06-05
    • 更新时间: 2007-09-29

    RSS订阅