我的QQ号: 36375 8373(昵称“雨巷”) ,欢迎测试同行能互相学习交流

发布新日志

  • 软件测试中的43个功能测试点

    2011-06-18 00:55:16

      

    1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。

    2. 相关性检查:功能相关性:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。
    数据相关性:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。

    3. 检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。

    4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。

    5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。

    6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。

    7.特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。常见的错误是出现在% ‘ " 这几个特殊字符

    8. 中文字符处理: 在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

    9. 检查信息的完整性: 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。

    10. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。

    11. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除, 看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。

    12. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

    13. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

    14. 重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能。

    15. 检查多次使用返回键的情况: 在有返回键的地方,返回到原来页面,重复多次,看会否出错。

    16. 搜索检查: 有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。

    17. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。

    18. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。

    19. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

    20. 快捷键检查:是否支持常用快捷键,如Ctrl+C、 Ctrl+V、 Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

    21. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。

    22.刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。

    23.回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

    24.直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。

    25.空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

    26.输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

    27.密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

    28.用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。

    29.系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    30.系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。

    31.确认提示检查:系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于Update或Delete操作,要求进行事前提示。

    32.数据注入检查:数据注入主要是对数据库的注入,通过输入一些特殊的字符,如“’”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘ ’ and name = ‘ ’,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于update和delete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc》,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中插入数据,比如用Jmeter,来完成数据注入检查。

    33.刷新检查:web系统中的WebForm. 控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。

    34.事务检查:对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。

    35.时间日期检查:时间、日期验证是每个系统都必须的,如2006-2-29、2006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如2006年2月28日、2006-2-28、 20060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制。

    36.多浏览器验证:越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:Maxthon、Firefox、Tencent Traveler等,考虑使用多种浏览器访问系统,验证效果。

    37.安装测试:对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。

    38.文档测试:主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。

    39.测试数据检查:事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。

    40.请让我的机器来运行:在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。

    41.Ajax 技术的应用:Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。

    42.Ajax技术的应用:Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。

    43.脚本错误:随着Ajax、IFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中

    ==============================================================

    1、页面链接是否正确;

    2、关联性,一个功能是否会对其他功能造成影响;

    3、按钮功能测试,删除不选、多选、翻页选择;

    4、字符串长度、类型、符号、特殊符号、中英文、空格、半角全角;

    5、信息输出完整性;

    6、信息提交重复处理;

    7、添加修改,修改重名;

    8、重复提交、重复删除、多用户并发操作;

    9、索引检查;

    10、输入信息、光标位置、快捷键使用;

    11、上传下载文件;

    12、必选项测试;

    13、回车、刷新、浏览键回退检查(主要是需要验证的地方);

    14、直接URL链接检查;

    15、密码检查、长度、半角全角;

    16、不同用户权限检查;

    17、系统数据计算检查;

    18、系统健壮性检查;

    19、确认提示检查;

    20、数据注入检查,一般程序是屏蔽掉特殊字符或者敏感字符;

    21、刷新检查,主要是实时刷新功能;

    22、事物检查,失败异常回滚;

    23、时间格式检查;

    24、浏览器兼容性检查;

    25、安装、文档测试;

    26、测试数据检查,即对自己测试提供数据进行检查;

  • 怀念的,51testing,续2

    2010-11-12 12:37:55

        入职东软整整六个月了,我也有四个月没有写日志了,这四个月发生了很多的变化,我更换了三个部门,中间独立做了一个月的项目,我从一个测试菜鸟蜕变成了一个成熟的菜鸟,证据就是...我涨薪水啦我涨薪水啦!!

        刚刚走出51的时候,我的薪水是最低的,经过我六个月艰苦奋斗,现在估计我的薪水已经是前三名了吧!严格的说,是三个月的艰苦奋斗,因为正常六个月转正,我的leader给我办理了三个月提前转正,还给我涨了将近50%(由于公司规定,不能透露具体数量)的薪水,史上最好的leader,我爱死她了!

        今天听同事讲,一位之前离职的同事在网上发公司不好之类的帖子,薪水低工作累之类的,我听说之后想了许多...之前我考虑是否入职东软的时候也在网上搜索过,类似的负面新闻还是很多的,我斟酌了很久,本着锻炼的想法走入了东软,半年之后回顾,我真是当初真是多虑了...

        先来说说我这位同事吧!没什么特别的表现,英文说的不是特别好,bug写的不是特别好,工作量不是特别高,错误不是特别少,这位同事会时不时的旷工,他原来是我们组的员工,因为他的几次无故旷工,害的我们要完成本来他要完成的工作,加了好几天的班,后来领导找他谈话就把他辞退了...

        这位同事原来试用期工资跟我的试用期工资是一样的,而他的新工作的工资比我转正之后的工资还少...

        我想网上说东软不好的有些就是这种情况的吧!有的犯了错误没涨薪水就被辞退了,有的表现平平没涨薪水就离职了,而涨了薪水的人都在忙着工作,当了leader带了项目忙的不可开交,像我这样大半夜的发帖子的太少了,我这么兢兢业业发帖子,只是想让广大菜鸟知道,尤其是51的学弟学妹们,没有不好的公司,只有不好好表现的员工,大胆去面试吧!努力的去工作吧!

        在此感谢,商老师,马林老师,大宝小田田,带我走进51的邹老师,谢谢你们,不仅教会我技术还教会我如何工作,我很想念你们!

      

  • LoadRunner思考时间与事务响应时间的区别与关系

    2010-04-17 21:51:48

    思考时间lr_think_time 就是一个事务要开始时思考的时间;比如,你要点击一个“登录按钮”,我们都要点击这个按钮要先思考下,就是人为脑袋思维的延迟,还有手指点击鼠标的这个动作的时间 一般是1-5秒,这就是思考时间,性能测试模拟思考时间就是模拟真实人为动作的方式来做压力测试

      一般在脚本中思考时间是这样写比较合理,在一个事务的结束点另一个事务的起始点,两者中间定义思考时间。

      lr_end_transaction("登录", LR_AUTO);

      lr_think_time(3);

      lr_start_transaction("计算连接");

      正常情况下思考时间越短,对服务器的压力会越大。

      事务的响应时间就是指从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,这个过程所耗费的时间。

      响应时间= 网络响应时间+ 应用程序响应时间

      一般在测试结果分析时,要分析事务的响应时间,要过滤掉思考时间。

  • 软件测试中容易遗漏的问题

    2010-01-09 19:46:19

     

    最近测试过程中,发现好多人对事务一致性的测试没有注意到,其实这种问题在一些大型的软件中都会被专门列出来测试,而且是比较严重的bug,昨天去和一位做了多年开发的人员测试人员讨论,他说这种是务一致性的问题是开发人员经常容易犯的错误,所以测试一定要引起注意,最近测的软件是数商型网站,问题尤为突出,例如:询问商品价格操作时,顾客选则了商品库中的商品,但在选择商品之后提价询价单之前,在后端直接将该商品删除,系统会如何处理等一些问题,以下是在网上找的一些数据一致性的例子,希望大家以后能注意(呵呵,当然有经验的测试人员不会忽略这么重要的测试点,这种问题在有前后端的系统尤为明显)

     

    常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。

    2.2.1.1 丢失修改

    下面我们先来看一个例子,说明并发操作带来的数据的不一致性问题。

    考虑飞机订票系统中的一个活动序列:

    1. 甲售票点(甲事务)读出某航班的机票余额A,设A=16.
    2. 乙售票点(乙事务)读出同一航班的机票余额A,也为16.
    3. 甲售票点卖出一张机票,修改余额A←A-1.所以A为15,把A写回数据库.
    4. 乙售票点也卖出一张机票,修改余额A←A-1.所以A为15,把A写回数据库.

    结果明明卖出两张机票,数据库中机票余额只减少1。

    归纳起来就是:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。前文(2.1.4数据删除与更新)中提到的问题及解决办法往往是针对此类并发问题的。但仍然有几类问题通过上面的方法解决不了,那就是:

    2.2.1.2 不可重复读

    不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体地讲,不可重复读包括三种情况:

    • 事务T1读取某一数据后,事务T2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。例如,T1读取B=100进行运算,T2读取同一数据B,对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B已为200,与第一次读取值不一致。
    • 事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神密地消失了。
    • 事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。(这也叫做幻影读)

    2.2.1.3 读"脏"数据

    读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。

    产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。

  • 转帖“徐林林”老师的-LoadRunner HTML录制模式与URL录制模式比较

    2008-11-14 12:35:39

    在跟使用Loadrunner工具使用者交流的过程中,经常有人提到这个问题,基于HTML(HyperText Markup Language 超文本置标语言)模式录制与基于URL(Uniform Resource Locator的缩写,统一资源定位符,也被称为网页地址,是因特网上标准的资源的地址。)录制模式到底有什么不同?为什么通常情况下我们都会去选择使用 URL模式去录制我们的业务脚本?所以在这里我把我知道的东西写出来跟同行分享和交流:

    HTML是一种高级别的录制模式,这种模式是基于“浏览器”或者说是“内容敏感”的。这种录制选项是让浏览器去决定在回放下载HTML资源,哪些页面资源(比如图片或者Flash内容)是需要被下载。

    URL是一种低级别的录制模式,这种录制选项不允许浏览器去确定哪些页面资源(比如图片或者Flash内容)是需要下载的。每项资源在录制回话的过程中都被录制到脚本中。这种级别录制模式同时也会录制其他任何隐藏的对象,比如session ID(也就是会话ID)信息,包括发给服务端和从服务端收到的session ID信息。

    脚本方面的不同,HTML级别录制模式将生成的是web_submit_form 语句来提交终端用户可以看见或者修改的信息。当基于HTML模式在提交窗体时遇到错误,你可以选择URL模式去录制任何从服务端发送过来的请求和资源。而URL基本录制模式将生成的是web_submit_data语句,这些语句记录的是所有通过浏览器实际发送给服务端的信息。值得注意的是URL录制模式会录制那些HTML模式没有能录制到隐藏信息。通常情况下,隐藏信息里面会包含session ID信息。

    写到这里,熟悉的人可能应该明白为什么在通常的情况下,我们选择URL模式去录制我们基于Web(HTTP/HTML) 协议的脚本,概括的说就是现在的应用(或者说将来的应用)为了安全性,都会包含像session ID、token等动态信息。简单的说就是每一访问,服务端都会给客户端发送一个描述会话的session信息,而session ID使用的是动态的生成技术。如果要是脚本能够正常回放,通常需要把这个动态的信息保存下来,这个需要使用到correlation 技术(也就是关联技术)。在以后我会在我的博客里面继续写我对关联的理解(包括自动关联、手工关联、规则等实用技术)。

  • zt----C/S结构与B/S结构的特点分析

    2008-10-14 08:42:58

    C/S结构与B/S结构的特点分析

    为了区别于传统的C/S模式,才特意将其称为B/S模式。认识到这些结构的特征,对于系统的选型而言是很关键的。

      1、系统的性能

      在系统的性能方面,B/S占有优势的是其异地浏览和信息采集的灵活性。任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端。

      不过,采用B/S结构,客户端只能完成浏览、查询、数据输入等简单功能,绝大部分工作由服务器承担,这使得服务器的负担很重。采用C/S结构时,客户端和服务器端都能够处理任务,这虽然对客户机的要求较高,但因此可以减轻服务器的压力。而且,由于客户端使用浏览器,使得网上发布的信息必须是以HTML格式为主,其它格式文件多半是以附件的形式存放。而HTML格式文件(也就是Web页面)不便于编辑修改,给文件管理带来了许多不便。

      2、系统的开发

      C/S结构是建立在中间件产品基础之上的,要求应用开发者自己去处理事务管理、消息队列、数据的复制和同步、通信安全等系统级的问题。这对应用开发者提出了较高的要求,而且迫使应用开发者投入很多精力来解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂。如果客户端是在不同的操作系统上,C/S结构的软件需要开发不同版本的客户端软件。但是,与B/S结构相比,C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发人员的掌握水平来看,C/S技术应是更成熟、更可靠的。

      3、系统的升级维护

      C/S系统的各部分模块中有一部分改变,就要关联到其它模块的变动,使系统升级成本比较大。B/S与C/S处理模式相比,则大大简化了客户端,只要客户端机器能上网就可以。对于B/S而言,开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。如果客户端的软件系统升级比较频繁,那么B/S架构的产品优势明显——所有的升级操作只需要针对服务器进行,这对那些点多面广的应用是很有价值的,例如一些招聘网站就需要采用B/S模式,客户端分散,且应用简单,只需要进行简单的浏览和少量信息的录入。

      4、C/S 模式的优点和缺点

      ★ C/S 模式的优点
      ● 由于客户端实现与服务器的直接相连,没有中间环节,因此响应速度快。
      ● 操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求。
      ● C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程。

      ★ C/S 模式的缺点
      ● 需要专门的客户端安装程序,分布功能弱,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置。
      ● 兼容性差,对于不同的开发工具,具有较大的局限性。若采用不同工具,需要重新改写程序。
      ● 开发成本较高,需要具有一定专业水准的技术人员才能完成。

      5、B/S模式的优点和缺点

      ★ B/S 模式的优点
      ● 具有分布性特点,可以随时随地进行查询、浏览等业务处理。
      ● 业务扩展简单方便,通过增加网页即可增加服务器功能。
      ● 维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
      ● 开发简单,共享性强。

      ★ B/S 模式的缺点
      ● 个性化特点明显降低,无法实现具有个性化的功能要求。
      ● 操作是以鼠标为最基本的操作方式,无法满足快速操作的要求。
      ● 页面动态刷新,响应速度明显降低。
      ● 无法实现分页显示,给数据库访问造成较大的压力。
      ● 功能弱化,难以实现传统模式下的特殊功能要求。
      近年来,随着软硬件技术发展和人们意识的提高,Web应用得到广泛的普及,一方面在互联网浪潮的推动下,基于互联网的信息共享和电子商务不断发展,像新浪、搜狐、8848等大型网站不断涌现出来,另一方面随着Java、CGI等网络技术的成熟,基于B/S结构的大型软件逐渐显示出巨大的优势。同时,也就产生了一个焦点问题,什么样的服务器能够满足不同用户的需求,怎么能够保证Web服务器能够长期稳定地运行,为了满足这样的需求Web测试也就同样变得十分重要。

      当前Web测试主要通过Web测试工具加上良好的测试案例完成的,我们认为主要有以下两种测试类型:基准测试、非基准测试

      基准测试:主要指测试工具已经提供了标准的测试案例库,包括静态测试案例(HTM、JPG)、动态测试案例(CGI)和SSL测试案例等。这类测试工具分为测试案例库、控制台程序、客户端程序三个部分。它的原理是,Web服务器开启特定的Web服务程序,并且运行上述测试案例,由控制台程序控制各个客户端按照一定的脚本访问顺序遍历Web服务器的各个测试案例,每个请求完成后,各个客户端向控制台报告访问的结构,当一个测试集完成后由控制台将所有的信息综合统计,测试过程中控制台还需要采用SNMP协议对服务器进行实时监控,综合两个方面的因素可以反映出Web服务器在不同压力情况下的综合性能。

      在测试过程中,主要影响测试结果的因素有网络环境、客户端性能。目前无论IA架构服务器还是SUN、HP、IBM的UNIX服务器性能都越来越优越,有可能出现在100MB网络下不能够提供足够的网络压力,有可能网络首先出现瓶颈,这样就需要扩展到1000MB网络环境或使用多个网段对服务器提供足够的压力,而稳定的客户端对于测试来说也是十分重要的,因为客户端如果出现性能下降,就会造成系统崩溃或者不能提供稳定的测试压力从而导致测试结果出现偏差;一台客户端到底能够稳定运行多少数量的连接是根据不同的硬件配置和操作系统决定的,因此对客户端的硬件资源进行监控是保证客户端可以稳定运行的必要手段。

      由于这类测试工具使用的是工具开发商提供的测试案例集,虽然也具有一定的权威性,但是目前再完美的测试案例集也不能涵盖所有的Web应用情况,所以也不能够完全体现出Web服务器完整的性能,因此该类测试工具更加适合IT媒体对Web类服务器软硬件的横向对比测试,在测试对象和环境大体统一的情况下,可以比较出各个测试对象的性能差异。而对于有实际应用背景的Web服务器进行测试,使用这样的测试工具就不适合了,我们在以后的测试漫谈中会继续介绍。

  • zt-31个用来测试你网站各项性能的免费在线工具

    2008-10-14 08:38:40

    你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站? 是否可以自信地说你的网站根本就没有打不开的时候? 是否……

      虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响 ( 其它一部分影响浏览量的原因及解决办法 )。这里列出了一份31个我最喜爱的免费在线测试工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

      网站代码验证没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

      1 . WDG HTML Validator

      一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。(强烈推荐)

      2 . W3C Markup Validation Service

      对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

      3 . W3C CSS Validation Service

      用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

      4 . RUWF XML Syntax Checker

      用于查找 XML 文件的错误。

      5 . W3C Feed Validation Service

      用于查找 Atom 和 RSS feed 中的错误语法。(这个我经常用到)

      6 . W3C Link Checker

      用于搜寻查明你网站内的所有链接里是否有断链。(强烈推荐)

      7 . Juicy Studio Link Analyser

      测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。网站的使用性我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

      8 . Watchfire WebXACT

      所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。(强烈推荐)

      9 . ATRC Web Accessibility Checker

      测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

      10 . WAVE 3.0 Web Accessibility Tool

      高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。(强烈推荐)

      11 . TAW Web Accessibility

      Test测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

      12 . HiSoftware CynthiaSays portal

      采用了非常严格的规则来测试网页( 根据 section 508 和 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

      13 . HERA Accessibility testing with Style

      使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

      14 . Juicy Studio CSS Analyser

      进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

      15 . Juiciy Studio Readability Test

      分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用)网站的速度打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、 flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

  • ZT-态度决定一切

    2008-09-19 22:37:46

    星期一

       我正在学习badboy软件,经理叫我过去,我上个星期写的bug描述的不是很清楚,并且有的bug不是bug,而是由于我对系统的有些地方没有了解清楚所造成的,经理对这些地方都给予讲解,在讲解的过程中还教我怎么判断bug的原因,找bug原因的思路:找bug的时候要很清楚该功能实现的具体步骤,最好能画一张该功能的实现图(数据流向),然后再一个步骤一个步骤的排除错误,最终找到产生bug的原因。

       对于我前段时间的不敢问问题,他说,对于刚入职的人上司一般不会那么在意他的能力,而更多的是注重这个人的态度(学习态度,工作态度,面对问题的态度),所以要敢于问,敢于表达。

       恩,感觉很不错!

  • 转帖“芹空万里 --软件测试一年之工作体会”

    2008-07-26 12:08:01

    软件测试一年之工作体会

    2008-07-20 17:59:00

    大学毕业的时候,还是一片迷茫。在铺天盖地的招聘启事和漫漫探寻中,逐步发现软件测试竟然是一条适合自己的道路。于是在一家外企开始了软件测试生涯。

    测试3个月:在熟悉了项目和test case之后,开始寻找方法高效率的跑case,比如某些case可以同时跑;某些可以在下班以后跑。

    测试6个月:适应1.5倍的工作强度。有人问,你们用的什么工具、什么机器进行测试?我说,是键盘+鼠标+人肉机,这就是自动化程度不高的情况下的黑盒测试。有了速度,还不能忘了质量。有耐心和细心的人能发现更多问题。

    测试9个月:开始思考如何提高bug的质量。发现bug不要马上报,应该多思考一下,比如检查logprocess、系统配置,也可以利用一些工具来分析,获取更多有用的信息,避免报无效bugBug质量提高了,测试人员在项目中的地位就提高了。当然,也节约了开发者的时间。这是一个良性循环。

    测试12个月:衡量bugseveritypriority。有些问题,看起来影响比较大,但也许用户很少有机会能碰到,这样的bug优先级就不高;有些问题,看起来很白痴,比如界面上的一个button的命名不恰当,可能用户天天都会用到,这样的bug影响就比较大。要衡量bugseveritypriority,必须先对项目有总体上的了解,对软件需求有一定的了解,然后站在客户的立场去思考,再结合软件开发和设计,综合衡量。

    测试一年来,从最开始的提高效率到现在的注重品质,这是改变,也是收获。

  • Oracle的问题

    2008-07-04 20:01:48

    为什么启动归档模式的时候,我已经启动了startup mount 命令,再接着输入alter database archivelog

    不行?

     

    系统却提示“需要实例恢复”?

     咋办呢

  • 重温“渴望”,不是为了怀古,而是为了惜今

    2008-06-02 12:56:13

     

    现在云南台正热播电视剧“渴望”,可以说是这些年一直惦记的电视剧,不期而至,感激能给我们拍了一部这么好的电视剧。
    不只是十几年之前,人们对于爱情,事业给予了无限的渴望,在更加开放的今天,反而人们对于物质,爱情,事业期望更高
     我渴望着再过几个月能找到一份不要太好 ,起码能满意的工作就是现在最大的渴望了
     我渴望着AC米兰,能过大开大合的,去征战赛场。

       渴望人间多一份纯真的渴望
     一直就这么小心翼翼的去渴望着......

  • 转载“徐林林”老师文章

    2008-05-24 10:35:53

    献给想改变自己命运的人--最最经典的励志名言

    2008-4-08

    转载“中国教父”--俞敏洪最最经典的励志名言

         人的生活方式有两种,
         第一种方式是像草一样活着,
         你尽管活着,每年还在成长,
         但是你毕竟是一棵草,
         你吸收雨露阳光,
         但是长不大。
         人们可以踩过你,
         但是人们不会因为你的痛苦,而他产生痛苦;
         人们不会因为你被踩了,而来怜悯你,
         因为人们本身就没有看到你。
         所以我们每一个人,
         都应该像树一样的成长,
         即使我们现在什么都不是,
         但是只要你有树的种子,
         即使你被踩到泥土中间,
         你依然能够吸收泥土的养分,
         自己成长起来。
         当你长成参天大树以后,
         遥远的地方,人们就能看到你;
         走近你,你能给人一片绿色。
         活着是美丽的风景,
         死了依然是栋梁之才,
         活着死了都有用。
         这就是我们每一个同学做人的标准和成长的标准。

  • 每天,坚持爱一个人

    2008-05-23 20:24:17

     

           每天坚持一点点,每天坚持去做一件事情,每天去做有意义的事情。

    我不认为每天学习就是成功的,什么事情都需要塌心的,需要做冷板凳,还需要用心啊,坚持下来了,就成功了,不管将来找个什么样的工作,只要付出了就不后悔了,不能一味的攀比,人毕竟有三六九等,一直这么认为。

         当你一直听一首歌,当你一直面对同样的人,难免会产生厌倦感,这在艺术角度上讲就是“审美疲劳”,难听点就是“喜新厌旧”,正常的反应。很少人做不到这一点,否则也不会有那么多人产生爱情的破裂,那么多的始乱终弃,不会有那么多人热衷于换手机。在我的心目中,这两种人是等同的,换手机和换情人是等同的,既然你选择了,你就一直应该爱着她,一直把她当成新的,可是很少人做到,从道义上来讲,是很要不得的。所以我一直坚持使用着这个手机,感谢它,陪伴着度过这么多岁月,不曾离弃。

    至少在我心目中,不离不弃就是坚持,就是对她的爱。愿这份爱贯穿这个春天,贯穿你我的春夏秋冬岁月之中。

    当我们每个人都能把这份挚爱,溶入到生活中,我们的生活该是多么美好,生活也会给你一个拥抱的,“我见青山多妩媚,青山待我应如是。”

    每天坚持做一件你认为正确的事情,坚持去爱一个人,相信会给回报的。

  • 华为的冬天,依旧在这个夏天蔓延

    2008-05-21 19:43:40

     很久以前,就看过任正非的“华为的冬天”,前些日子,专门找来读读,以启发自己,

    来到51TESTING,对于找工作没有太大的把握,时常拿那篇文章来启发自己,在这个找工作的

    夏天,是否能够提前准备好棉衣,来应付找不到工作,这股寒流。

     有的时候,想起找不到工作,心情低落到极点,极度彷徨,但愿,这些带有冬天的文字,继续给世人以警醒吧。

  • 测试用例

    2008-05-10 11:53:35

    测试用例

    测试用例Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求

    测试用例(Test Case)目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。

    不同别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不统一,变化更大、更快。笔者主要从事企业管理软件的测试。因此我们的做法是把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。

    随着中国软件业的日益壮大和逐步走向成熟,软件测试也在不断发展。从最初的由软件编程人员兼职测试到软件公司组建独立专职测试部门。测试工作也从简单测试演变为包括:编制测试计划、编写测试用例、准备测试数据、编写测试脚本、实施测试、测试评估等多项内容的正规测试。测试方式则由单纯手工测试发展为手工、自动兼之,并有向第三方专业测试公司发展的趋势。

    要使最终用户对软件感到满意,最有力的举措就是对最终用户的期望加以明确阐述,以便对这些期望进行核实并确认其有效性。测试用例反映了要核实的需求。然而,核实这些需求可能通过不同的方式并由不同的测试员来实施。例如,执行软件以便验证它的功能和性能,这项操作可能由某个测试员采用自动测试技术来实现;计算机系统的关机步骤可通过手工测试和观察来完成;不过,市场占有率和销售数据(以及产品需求),只能通过评测产品和竞争销售数据来完成。

    既然可能无法(或不必负责)核实所有的需求,那么是否能为测试挑选最适合或最关键的需求则关系到项目的成败。选中要核实的需求将是对成本、风险和对该需求进行核实的必要性这三者权衡考虑的结果。

    确定测试用例之所以很重要,原因有以下几方面。

    测试用例构成了设计和制定测试过程的基础。
    测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,您对产品质量和测试流程也就越有信心。
    判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。类似下面这样的说明:“95 % 的关键测试用例已得以执行和验证”,远比“我们已完成 95 % 的测试”更有意义。
    测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
    测试设计和开发的类型以及所需的资源主要都受控于测试用例。
    测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。最佳方案是为每个测试需求至少编制两个测试用例:

    ·一个测试用例用于证明该需求已经满足,通常称作正面测试用例;
    ·另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。


    一、测试用例是软件测试的核心

    软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入,在最短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要有一套优秀的测试方案和测试方法。

    影响软件测试的因素很多,例如软件本身的复杂程度、开发人员(包括分析、设计、编程和测试的人员)的素质、测试方法和技术的运用等等。因为有些因素是客观存在的,无法避免。有些因素则是波动的、不稳定的,例如开发队伍是流动的,有经验的走了,新人不断补充进来;一个具体的人工作也受情绪等影响,等等。如何保障软件测试质量的稳定?有了测试用例,无论是谁来测试,参照测试用例实施,都能保障测试的质量。可以把人为因素的影响减少到最小。即便最初的测试用例考虑不周全,随着测试的进行和软件版本更新,也将日趋完善。

    因此测试用例的设计和编制是软件测试活动中最重要的。测试用例是测试工作的指导,是软件测试的必须遵守的准则。更是软件测试质量稳定的根本保障。

    二、编制测试用例

    着重介绍一些编制测试用例的具体做法。

    1、测试用例文档

    编写测试用例文档应有文档模板,须符合内部的规范要求。测试用例文档将受制于测试用例管理软件的约束。
    软件产品或软件开发项目的测试用例一般以该产品的软件模块或子系统为单位,形成一个测试用例文档,但并不是绝对的。

    测试用例文档由简介和测试用例两部分组成。简介部分编制了测试目的、测试范围、定义术语、参考文档、概述等。测试用例部分逐一列示各测试用例。每个具体测试用例都将包括下列详细信息:用例编号、用例名称、测试等级、入口准则、验证步骤、期望结果(含判断标准)、出口准则、注释等。以上内容涵盖了测试用例的基本元素:测试索引,测试环境,测试输入,测试操作,预期结果,评价标准。

    2、测试用例的设置

    我们早期的测试用例是按功能设置用例。后来引进了路径分析法,按路径设置用例。目前演变为按功能、路径混合模式设置用例。

    功能测试是最简捷的,按用例规约遍历测试每一功能。

    对于复杂操作的程序模块,其各功能的实施是相互影响、紧密相关、环环相扣的,可以演变出数量繁多的变化。没有严密的逻辑分析,产生遗漏是在所难免。路径分析是一个很好的方法,其最大的优点是在于可以避免漏测试。

    但路径分析法也有局限性。在一个非常简单字典维护模块就存在十余条路径。一个复杂的模块会有几十到上百条路径是不足为奇的。笔者以为这是路径分析比较合适的使用规模。若一个子系统有十余个或更多的模块,这些模块相互有关联。再采用路径分析法,其路径数量成几何级增长,达5位数或更多,就无法使用了。那么子系统模块间的测试路径或测试用例还是要靠传统方法来解决。这是按功能、路径混合模式设置用例的由来。

    3、设计测试用例

    测试用例可以分为基本事件、备选事件和异常事件。设计基本事件的用例,应该参照用例规约(或设计规格说明书),根据关联的功能、操作按路径分析法设计测试用例。而对孤立的功能则直接按功能设计测试用例。基本事件的测试用例应包含所有需要实现的需求功能,覆盖率达100%。

    设计备选事件和异常事件的用例,则要复杂和困难得多。例如,字典的代码是唯一的,不允许重复。测试需要验证:字典新增程序中已存在有关字典代码的约束,若出现代码重复必须报错,并且报错文字正确。往往在设计编码阶段形成的文档对备选事件和异常事件分析描述不够详尽。而测试本身则要求验证全部非基本事件,并同时尽量发现其中的软件缺陷

    可以采用软件测试常用的基本方法:等价类划分法、边界值分析法、错误推测法、因果图法、逻辑覆盖法等设计测试用例。视软件的不同性质采用不同的方法。如何灵活运用各种基本方法来设计完整的测试用例,并最终实现暴露隐藏的缺陷,全凭测试设计人员的丰富经验和精心设计。

    三、测试用例在软件测试中的作用

    1、指导测试的实施

    测试用例主要适用于集成测试系统测试回归测试。在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。

    根据测试用例的测试等级,集成测试应测试那些用例,系统测试和回归测试又该测试那些用例,在设计测试用例时都已作明确规定,实施测试时测试人员不能随意作变动。

    2、规划测试数据的准备

    在我们的实践中测试数据是与测试用例分离的。按照测试用例配套准备一组或若干组测试原始数据,以及标准测试结果。尤其象测试报表之类数据集的正确性,按照测试用例规划准备测试数据是十分必须的。
    除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。

    3、编写测试脚本的"设计规格说明书"

    为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。

    4、评估测试结果的度量基准

    完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。

    5、分析缺陷的标准

    通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。

    四、相关问题

    1、测试用例的评审

    测试用例是软件测试的准则,但它并不是一经编制完成就成为准则。测试用例在设计编制过程中要组织同级互查。完成编制后应组织专家评审,需获得通过才可以使用。评审委员会可由项目负责人、测试、编程、分析设计等有关人员组成,也可邀请客户代表参加。

    2、测试用例的修改更新

    测试用例在形成文档后也还需要不断完善。主要来自三方面的缘故:第一、在测试过程中发现设计测试用例时考虑不周,需要完善;第二、在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;第三、软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新。

    一般小的修改完善可在原测试用例文档上修改,但文档要有更改记录。软件的版本升级更新,测试用例一般也应随之编制升级更新版本。

    3、测试用例的管理软件

    运用测试用例还需配备测试用例管理软件。它的主要功能有三个:第一、能将测试用例文档的关键内容,如编号、名称等等自动导入管理数据库,形成与测试用例文档完全对应的记录;第二、可供测试实施时及时输入测试情况;第三、最终实现自动生成测试结果文档,包含各测试度量值,测试覆盖表和测试通过或不通过的测试用例清单列表。

    有了管理软件,测试人员无论是编写每日的测试工作日志、还是出软件测试报告,都会变得轻而易举。

    五、测试用例的设计

    (一)白盒技术

    白盒测试结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。
    1、逻辑覆盖
    程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面根据图7-1所示的程序,分别讨论几种常用的覆盖技术。
    (1)语句覆盖。
    为了个提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。
    如图7-1是一个被测试程序流程图:


    (2)判定覆盖。
    判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。
    (3)条件覆盖。
    条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
    (4)判定/条件测试。
    该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
    (5)条件组合覆盖。
    条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。
    (6)路径覆盖。
    路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。
    在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。
    2.循环覆盖
    3.基本路径测试


    (二)黑盒技术

    1.等价类划分
    (1)划分等价类。
    ①如果某个输入条件规定了取值范围或值的个数。则可确定一个合理的等价类(输入值或数在此范围内)和两个不合理等价类(输入值或个数小于这个范围的最小值或大于这个范围的最大值)。
    ②如果规定了输入数据的一组值,而且程序对不同的输入值做不同的处理,则每个允许输入值是一个合理等价类,此处还有一个不合理等价类(任何一个不允许的输入值)。
    ③如果规定了输入数据必须遵循的规则,可确定一个合理等价类(符合规则)和若干个不合理等价类(从各种不同角度违反规则)。
    ④如果已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分为更小的等价类。
    (2)确定测试用例。
    ①为每一个等价类编号。
    ②设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重复这步,直到所有合理等价类被测试用例覆盖。
    ③设计一个测试用例,使其只覆盖一个不合理等价类。
    2.边界值分析
    使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。
    (1)如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的范围是[1,100],可取0,1,100,101等值作为测试数据。
    (2)如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件可包括1--255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。
    (3)对每个输出条件分别按照以上原则(1)或(2)确定输出值的边界情况。如,一个学生成绩管理系统规定,只能查询95--98级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。
    由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。
    (4)如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线形表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。
    3.错误推测
    在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。
    4.因果图
    等价类划分和边界值方法分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。
    5.综合策略
    每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。

    六、测试用例设计的误区
    (来源:关河测试网)

    ·能发现到目前为止没有发现的缺陷的用例是好的用例;

    首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“V&V”的活动,测试 需要保证以下两点:

    程序做了它应该做的事情
    程序没有做它不该做的事情
    因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。

    ·测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试;

    不知道国内有没有公司真正做到这点,或者说,不知道有国内没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度 也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实 现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到 一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。

    在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个Project,也需要在 给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目 标,一切围绕测试的目标进行。

    除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK。在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。

    ·测试用例设计是一劳永逸的事情;

    这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例 却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰 后,对测试人员不屑一顾。

    这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。

    ·测试用例不应该包含实际的数据;

    测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行 性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software Test》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。

    ·测试用例中不需要明显的验证手段;

    我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统, 输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例呢?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段呢? 显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。

    七、从用例中生成测试用例


    用于功能性测试的测试用例来源于测试目标的用例。应该为每个用例场景编制测试用例。用例场景要通过描述流经用例的路径来确定,这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。

    例如,下图中经过用例的每条不同路径都反映了基本流和备选流,都用箭头来表示。基本流用直黑线来表示,是经过用例的最简单的路径。每个备选流自基本流开始,之后,备选流会在某个特定条件下执行。备选流可能会重新加入基本流中(备选流 1 和 3),还可能起源于另一个备选流(备选流 2),或者终止用例而不再重新加入某个流(备选流 2 和 4)。


    用例的事件流示例

    遵循上图中每个经过用例的可能路径,可以确定不同的用例场景。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:

    场景 1 基本流
    场景 2 基本流 备选流 1
    场景 3 基本流 备选流 1 备选流 2
    场景 4 基本流 备选流 3
    场景 5 基本流 备选流 3 备选流 1
    场景 6 基本流 备选流 3 备选流 1 备选流 2
    场景 7 基本流 备选流 4
    场景 8 基本流 备选流 3 备选流 4

    注:为方便起见,场景 5、6 和 8 只描述了备选流 3 指示的循环执行一次的情况。

    生成每个场景的测试用例是通过确定某个特定条件来完成的,这个特定条件将导致特定用例场景的执行。

    例如,假定上图描述的用例对备选流 3 规定如下:

    “如果在上述步骤 2‘输入提款金额’中输入的美元量超出当前帐户余额,则出现此事件流。系统将显示一则警告消息,之后重新加入基本流,再次执行上述步骤 2‘输入提款金额’,此时银行客户可以输入新的提款金额。”

    据此,可以开始确定需要用来执行备选流 3 的测试用例:

    测试用例 ID 场景 条件 预期结果
    TC x 场景 4 步骤 2 - 提款金额 > 帐户余额 在步骤 2 处重新加入基本流
    TC y 场景 4 步骤 2 - 提款金额 < 帐户余额 不执行备选流 3,执行基本流
    TC z 场景 4 步骤 2 - 提款金额 = 帐户余额 不执行备选流 3,执行基本流

    注:由于没有提供其他信息,以上显示的测试用例都非常简单。测试用例很少如此简单。

    下面是一个由用例生成测试用例的更符合实际情况的示例。


    示例:

    一台 ATM 机器的主角和用例。

    下表包含了上图中提款用例的基本流和某些备用流:

    本用例的开端是 ATM 处于准备就绪状态。
    1. 准备提款 - 客户将银行卡插入 ATM 机的读卡机。
       
    2. 验证银行卡 - ATM 机从银行卡的磁条中读取帐户代码,并检查它是否属于可以接收的银行卡。
       
    3. 输入 PIN - ATM 要求客户输入 PIN 码(4 位)
       
    4. 验证帐户代码和 PIN - 验证帐户代码和 PIN 以确定该帐户是否有效以及所输入的 PIN 对该帐户来说是否正确。对于此事件流,帐户是有效的而且 PIN 对此帐户来说正确无误。
       
    5. ATM 选项 - ATM 显示在本机上可用的各种选项。在此事件流中,银行客户通常选择“提款”。
       
    6. 输入金额 - 要从 ATM 中提取的金额。对于此事件流,客户需选择预设的金额(10 美元、20 美元、50 美元或 100 美元)。
       
    7. 授权 - ATM 通过将卡 ID、PIN、金额以及帐户信息作为一笔交易发送给银行系统来启动验证过程。对于此事件流,银行系统处于联机状态,而且对授权请求给予答复,批准完成提款过程,并且据此更新帐户余额。
       
    8. 出钞 - 提供现金。
       
    9. 返回银行卡 - 银行卡被返还。
       
    10. 收据 - 打印收据并提供给客户。ATM 还相应地更新内部记录。

    用例结束时 ATM 又回到准备就绪状态。
     

    备选流 1 - 银行卡无效 在基本流步骤 2 中 - 验证银行卡,如果卡是无效的,则卡被退回,同时会通知相关消息。
    备选流 2 - ATM 内没有现金 在基本流步骤 5 中 - ATM 选项,如果 ATM 内没有现金,则“提款”选项将无法使用。
    备选流 3 - ATM 内现金不足 在基本流步骤 6 中- 输入金额,如果 ATM 机内金额少于请求提取的金额,则将显示一则适当的消息,并且在步骤 6 - 输入金额处重新加入基本流。
    备选流 4 - PIN 有误 在基本流步骤 4 中- 验证帐户和 PIN,客户有三次机会输入 PIN。

    如果 PIN 输入有误,ATM 将显示适当的消息;如果还存在输入机会,则此事件流在步骤 3 - 输入 PIN 处重新加入基本流。

    如果最后一次尝试输入的 PIN 码仍然错误,则该卡将被 ATM 机保留,同时 ATM 返回到准备就绪状态,本用例终止。
    备选流 5 - 帐户不存在 在基本流步骤 4 中 - 验证帐户和 PIN,如果银行系统返回的代码表明找不到该帐户或禁止从该帐户中提款,则 ATM 显示适当的消息并且在步骤 9 - 返回银行卡处重新加入基本流。
    备选流 6 - 帐面金额不足 在基本流步骤 7 - 授权中,银行系统返回代码表明帐户余额少于在基本流步骤 6 - 输入金额内输入的金额,则 ATM 显示适当的消息并且在步骤 6 - 输入金额处重新加入基本流。
    备选流 7 - 达到每日最大的提款金额 在基本流步骤 7 - 授权中,银行系统返回的代码表明包括本提款请求在内,客户已经或将超过在 24 小时内允许提取的最多金额,则 ATM 显示适当的消息并在步骤 6 - 输入金额上重新加入基本流。
    备选流 x - 记录错误 如果在基本流步骤 10 - 收据中,记录无法更新,则 ATM 进入“安全模式”,在此模式下所有功能都将暂停使用。同时向银行系统发送一条适当的警报信息表明 ATM 已经暂停工作。
    备选流 y - 退出 客户可随时决定终止交易(退出)。交易终止,银行卡随之退出。
    备选流 z - “翘起” ATM 包含大量的传感器,用以监控各种功能,如电源检测器、不同的门和出入口处的测压器以及动作检测器等。在任一时刻,如果某个传感器被激活,则警报信号将发送给警方而且 ATM 进入“安全模式”,在此模式下所有功能都暂停使用,直到采取适当的重启/重新初始化的措施


    在第一次迭代中,根据迭代计划,我们需要核实提款用例已经正确地实施。此时尚未实施整个用例,只实施了下面的事件流:

    • 基本流 - 提取预设金额(10 美元、20 美元、50 美元、100 美元)
    • 备选流 2 - ATM 内没有现金
    • 备选流 3 - ATM 内现金不足
    • 备选流 4 - PIN 有误
    • 备选流 5 - 帐户不存在/帐户类型有误
    • 备选流 6 - 帐面金额不足

    可以从这个用例生成下列场景

    场景 1 - 成功的提款 基本流
    场景 2 - ATM 内没有现金 基本流 备选流 2
    场景 3 - ATM 内现金不足 基本流 备选流 3
    场景 4 - PIN 有误(还有输入机会) 基本流 备选流 4
    场景 5 - PIN 有误(不再有输入机会) 基本流 备选流 4
    场景 6 - 帐户不存在/帐户类型有误 基本流 备选流 5
    场景 7 - 帐户余额不足 基本流 备选流 6

    注:为方便起见,备选流 3 和 6(场景 3 和 7)内的循环以及循环组合未纳入上表。

    对于这 7 个场景中的每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。下面显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。本示例中,对于每个测试用例,存在一个测试用例 ID、条件(或说明)、测试用例中涉及的所有数据元素(作为输入或已经存在于数据库中)以及预期结果。

    通过从确定执行用例场景所需的数据元素入手构建矩阵。然后,对于每个场景,至少要确定包含执行场景所需的适当条件的测试用例。例如,在下面的矩阵中,V(有效)用于表明这个条件必须是 VALID(有效的)才可执行基本流,而 I(无效)用于表明这种条件下将激活所需备选流。下表中使用的“n/a”(不适用)表明这个条件不适用于测试用例。

    TC(测试用例)ID 号 场景/条件 PIN

     

    帐号

     

    输入的金额

    (或选择的金额)

     

    帐面金额

     

    ATM 内的金额

     

    预期结果
    CW1. 场景 1 - 成功的提款 V V V V V 成功的提款。
    CW2. 场景 2 - ATM 内没有现金 V V V V I 提款选项不可用,用例结束
    CW3. 场景 3 - ATM 内现金不足 V V V V I 警告消息,返回基本流步骤 6 - 输入金额
    CW4. 场景 4 - PIN 有误(还有不止一次输入机会)

     

    V n/a V V 警告消息,返回基本流步骤 4,输入 PIN
    CW5. 场景 4 - PIN 有误(还有一次输入机会)

     

    V n/a V V 警告消息,返回基本流步骤 4,输入 PIN
    CW6. 场景 4 - PIN 有误(不再有输入机会)

     

    V n/a V V 警告消息,卡予保留,用例结束

    在上面的矩阵中,六个测试用例执行了四个场景。对于基本流,上述测试用例 CW1 称为正面测试用例。它一直沿着用例的基本流路径执行,未发生任何偏差。基本流的全面测试必须包括负面测试用例,以确保只有在符合条件的情况下才执行基本流。这些负面测试用例由 CW2 至 6 表示(阴影单元格表明这种条件下需要执行备选流)。虽然 CW2 至 6 对于基本流而言都是负面测试用例,但它们相对于备选流 2 至 4 而言是正面测试用例。而且对于这些备选流中的每一个而言,至少存在一个负面测试用例(CW1 - 基本流)。   

    每个场景只具有一个正面测试用例和负面测试用例是不充分的,场景 4 正是这样的一个示例。要全面地测试场景 4 - PIN 有误,至少需要三个正面测试用例(以激活场景 4):

    • 输入了错误的 PIN,但仍存在输入机会,此备选流重新加入基本流中的步骤 3 - 输入 PIN。
    • 输入了错误的 PIN,而且不再有输入机会,则此备选流将保留银行卡并终止用例。
    • 最后一次输入时输入了“正确”的 PIN。备选流在步骤 5 - 输入金额处重新加入基本流。

    注:在上面的矩阵中,无需为条件(数据)输入任何实际的值。以这种方式创建测试用例矩阵的一个优点在于容易看到测试的是什么条件。由于只需要查看 V 和 I(或此处采用的阴影单元格),这种方式还易于判断是否已经确定了充足的测试用例。从上表中可发现存在几个条件不具备阴影单元格,这表明测试用例还不完全,如场景 6 - 不存在的帐户/帐户类型有误和场景 7 - 帐户余额不足就缺少测试用例。

    一旦确定了所有的测试用例,则应对这些用例进行复审和验证以确保其准确且适度,并取消多余或等效的测试用例。

    测试用例一经认可,就可以确定实际数据值(在测试用例实施矩阵中)并且设定测试数据

    TC(测试用例)ID 号 场景/条件 PIN

     

    帐号

     

    输入的金额

    (或选择的金额)

     

    帐面金额

     

    ATM 内的金额

     

    预期结果
    CW1. 场景 1 - 成功的提款 4987 809 - 498 50.00 500.00 2,000 成功的提款。帐户余额被更新为 450.00
    CW2. 场景 2 - ATM 内没有现金 4987 809 - 498 100.00 500.00 0.00 提款选项不可用,用例结束
    CW3. 场景 3 - ATM 内现金不足 4987 809 - 498 100.00 500.00 70.00 警告消息,返回基本流步骤 6 - 输入金额
    CW4. 场景 4 - PIN 有误(还有不止一次输入机会) 4978 

     

    809 - 498 n/a 500.00 2,000 警告消息,返回基本流步骤 4,输入 PIN
    CW5. 场景 4 - PIN 有误(还有一次输入机会) 4978

     

    809 - 498 n/a 500.00 2,000 警告消息,返回基本流步骤 4,输入 PIN
    CW6. 场景 4 - PIN 有误(不再有输入机会) 4978 

     

    809 - 498 n/a 500.00 2,000 警告消息,卡予保留,用例结束

    以上测试用例只是在本次迭代中需要用来验证提款用例的一部分测试用例。需要的其他测试用例包括:

    • 场景 6 - 帐户不存在/帐户类型有误:未找到帐户或帐户不可用
    • 场景 6 - 帐户不存在/帐户类型有误:禁止从该帐户中提款
    • 场景 7 - 帐户余额不足:请求的金额超出帐面金额

    在将来的迭代中,当实施其他事件流时,在下列情况下将需要测试用例:

    • 无效卡(所持卡为挂失卡、被盗卡、非承兑银行发卡、磁条损坏等)
    • 无法读卡(读卡机堵塞、脱机或出现故障)
    • 帐户已消户、冻结或由于其他方面原因而无法使用
    • ATM 内的现金不足或不能提供所请求的金额(与 CW3 不同,在 CW3 中只是一种币值不足,而不是所有币值都不足)
    • 无法联系银行系统以获得认可
    • 银行网络离线或交易过程中断电

    在确定功能性测试用例时,确保满足下列条件:

    • 已经为每个用例场景确定了充足的正面和负面测试用例。 
    • 测试用例可以处理用例所实施的所有业务规则,确保对于业务规则,无论是在内部、外部还是在边界条件/值上都存在测试用例。
    • 测试用例可以处理所有事件或动作排序(如在设计模型序列图中确定的内容),还应能处理用户界面对象状态或条件。
    • 测试用例可以处理为用例所指定的任何特殊需求,如最佳/最差性能,有时这些特殊需求会与用例执行过程中的最小/最大负载或数据容量组合在一起。

    八、从补充规约中生成测试用例

    并不是所有的测试目标需求都将在用例中有所反映。非功能性需求(如性能、安全性和访问控制)以及配置要求等将会说明测试目标的其他行为或特征。补充规约是为其他行为生成测试用例的主要来源。

    关于如何生成这些其他测试用例的指南说明如下:

    • 性能测试生成测试用例
    • 为安全性/访问控制测试生成测试用例
    • 为配置测试生成测试用例
    • 为安装测试生成测试用例
    • 为其他非功能性测试生成测试用例

    为性能测试生成测试用例

    性能测试用例的主要输入是补充规约,补充规约中包含了非功能性需求(请参见工件:补充规约)。为性能测试生成测试用例时,请使用下列指南:

    • 对于补充规约内阐明性能标准的各条说明都应确保至少要确定一个测试用例。性能标准通常表示为时间/事务、事务量/用户或百分数的形式。
    • 对每个关键用例,都应确保至少要确定一个测试用例。关键用例是在上述说明中和/或在工作量分析文档中确定的、必须采用性能评测方法来评估的用例(请参见工件:工作量分析文档)。

    与功能性测试的测试用例类似,通常对于每个用例/需求都会存在不止一个测试用例。常见的情况是:存在一个低于性能阈值的测试用例、一个处于阈值上的测试用例,还有一个测试用例高于阈值。

    除了以上性能标准以外,确保已确定影响响应时间的特定条件,包括:

    • 数据库的大小 - 存在多少个记录?
    • 工作量 - 同时执行操作的最终用户的数量和类型,以及要同时执行的事务的数量和类型
    • 环境特征(硬件、网件以及软件配置)

    将用于性能测试的测试用例记录在类似于功能测试所使用的矩阵中。

    以下是各种性能测试的一些示例:

    对于负载测试:

    TC(测试用例)ID 号 工作量 条件

     

    预期结果
    PCW1.

    1

    (单个 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 20 秒之内完成
    PCW2.

    2

    (1,000 个同时运行的 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 30 秒之内完成
    PCW3.

    3

    (10.000 个同时运行的 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 50 秒之内完成

    对于强度测试:

    TC(测试用例)ID 号 工作量 条件

     

    预期结果
    SCW1.

    2

    (1,000 个同时运行的 ATM)

    数据库锁定 - 2 个 ATM 请求同一帐户

    ATM 请求排成队列
    SCW2.

    2

    (1,000 个同时运行的 ATM)

    无法实现银行系统的通信

    交易排成队列或超时
    SCW3.

    2

    (1,000 个同时运行的 ATM)

    在交易过程中,银行系统通信被终止

    显示警告消息

    为安全性/访问控制测试生成测试用例

    主角和用例一同说明系统外部用户与系统所执行的动作之间的交互,以便为特定主角生成测试结果。复杂系统包含许多主角,所以我们编制测试用例时必须确保只有指定执行用例的主角可以进行此操作,这一点非常关键。在基于主角类型的用例事件流存在差别时,尤其如此。

    例如,在 ATM 用例中,如果主角“银行客户”的卡和帐户有的属于拥有这个 ATM 机的银行,有的是竞争银行的银行卡(和帐户),或是企图使用该 ATM 不支持的银行卡,则将对该主角“银行客户”执行不同的用例事件流。

    对于功能性测试用例,请同样遵循上面列举的指南。

    关于安全性和访问控制测试用例的示例:

    TC(测试用例)ID 号 条件

    (V 表明卡有效)

    读卡机

    (V 表明读卡机工作正常)

    银行的网络 预期结果
    ACW1. 在银行网络之内 V V V 所有用例都可用
    ACW2. 银行网络之外 V V I 只有提款用例可用
    ACW3. 无法读卡 I V V 警告消息,卡被退出
    ACW4. 因被盗,卡已挂失 I V V 警告消息,卡予保留
    ACW5. 卡已过期 I V V 警告消息,卡予保留

    为配置测试生成测试用例

    在典型的分布式系统中,允许存在许多种受支持的硬件和软件组合。为了核实测试目标在不同的配置情况下(如不同的操作系统、浏览器或 CPU 的速度)能否正常工作或执行,应该对此进行测试。此外,测试还应涵盖构件的组合,以便检测在不同构件的交互中产生的缺陷。例如,确保由应用程序安装的 DDL 版本不会与另一个应用程序需要的相同 DDL 的版本发生冲突。

    采用下列指南来生成用于配置测试的测试用例:

    • 确保对每个关键配置,应至少存在一个测试用例可用于对其进行确定。这是通过确定测试目标的环境所要求的硬件和软件配置以及确定这些配置的优先级来完成的。应确保最先测试最常见的配置,包括:
      • 打印机支持
      • 网络连接 - 局域网和广域网
      • 服务器配置 - 服务器驱动程序、服务器硬件
      • 台式机和/或服务器上安装的其他软件
      • 所有已安装软件的软件版本
    • 确保对于每个可能有问题的配置至少存在一个测试用例。这些配置可能包括:
      • 具有最低性能的硬件。
      • 历史上存在兼容性问题的共驻内存的软件。
      • 通过最慢的 LAN/WAN 连接访问服务器的客户机。
      • 资源不足(缓慢的 CPU 速度、最小的内存或分辨率,磁盘空间不足等等)

    为安装测试生成测试用例

    安装测试需要核实测试目标可以在所有可能的安装情况下安装。安装情况可以指首次安装测试目标,或是在装有较早版本的机器上安装测试目标的某个较新的版本或工作版本。安装测试还应确保在遇到异常情况时(如磁盘空间不足),测试目标的执行情况仍可接受。

    测试用例应包含以下各种软件的安装情况:

    • 分发介质,例如磁盘、CD-ROM 或文件服务器。
    • 首次安装。
    • 完全安装。
    • 自定义安装。
    • 升级安装。

    客户机服务器软件的安装程序具备一组特定的测试用例。不同于基于主机的系统,服务器和客户机上的安装程序是有所不同的。因而,安装测试应执行构成测试目标的所有构件的安装,包括客户机、中间层以及服务器,这一点至关重要。

    为其他非功能性测试生成测试用例

    理论上,应找到所有必需的输入来生成测试用例模型、设计模型以及补充规约工件的测试用例。不过,如果此时您需要补充已有的输入,那也不足为奇。

    示例如下:

    • 操作测试(用以检验在某次故障发生后以及在下一次故障发生前“较长时间”内软件的运行情况)的测试用例。
    • 对性能瓶颈、系统容量或测试目标的强度承受能力进行调查的测试用例。

    大多数情况下,您可以通过先前所确定的测试用例生成的某些测试用例来构建其变体或聚合关系体,借此来查找测试用例。


     

    九、为单元测试生成测试用例

    单元测试要求既测试单元的内部结构同时还要测试其行为特征。测试内部结构要求了解实施单元的方式,基于这种了解的测试被称为白盒测试。对单元行为特征的测试侧重于从外部可观察的单元行为,而不需要了解或考虑其实施方式。基于这种方法的测试称为黑盒测试。基于这两种方法所生成的测试用例的说明如下。

    白盒测试

    理论上,应通过代码测试每一条可能的路径。在所有这些非常简单的单元内实现这样的目标是不切实际或几乎是不可能的。作为最基本的测试,应将每个决定到决定路径(DD 路径)测试至少一次,这样可确保将所有语句至少执行一次。决定通常是指 if 语句,而 DD 路径是两个决定之间的路径。

    要达到这种程度的测试覆盖,建议您在选择测试数据时应使每个决定都可以用每种可能的方法来评估。为达到上述目标,测试用例应确保:

    每个布尔表达式的求值结果为 true 和 false。例如,表达式 (a<3) OR (b>4) 的求值结果为 true/false 的四种组合
    每一个无限循环至少要执行零次、一次和一次以上。
    可使用代码覆盖工具来确定白盒测试未测试到的代码。在进行白盒测试的同时应进行可靠性测试。

    示例:

    假设您对类 Set of Integers 中的 member 函数执行结构测试。该测试在二进制搜索的帮助下,将检查该集合是否包含了某个指定的整数。

    成员 (member) 函数以及相应的流程图。虚线箭头指示出如何通过采用两个测试用例将所有语句至少执行一次。

    理论上,对于彻底测试的某个操作,测试用例应遍历代码内路径的所有组合情况。在 member 函数的 while-loop 中存在三个可选择的路径。测试用例可以多次遍历该循环,或是根本就不遍历。如果测试用例根本就没有遍历循环,则在代码中只能找到一条路径。如果遍历循环一次,您将发现有三条路径。如果遍历两次,则您将发现存在六条路径,如此类推。因而,路径的总数应该是:1+3+6+12+24+48+...,在实际情况中,这个路径组合总数根本无法无法处理。这就是为什么必须选择所有这些路径的子集的原因。本示例中,可以采用两个测试用例来执行所有的语句。其中一个测试用例中,您可以选择 Set of Integers = {1,5,7,8,11},而且测试数据 t = 3。在另一个测试用例中,您可以选择 Set of Integers = {1,5,7,8,11},且 t = 8。

    黑盒测试

    黑盒测试的目的是为了在不了解单元将如何实施指定行为的情况下,对指定行为进行验证。黑盒测试侧重并依赖于单元的输入和输出。

    等价类划分是一种用来减少所需测试数量的技术。对于每一个操作都应确定参数和对象状态的等价类。等价类是一组值的集合,对这组值来说,对象的行为应类似。例如,一个集合可有三个等价类:空、若干元素以及满。

    可使用代码覆盖工具来确定白盒测试未测试到的代码。在进行黑盒测试的同时应进行可靠性测试。

    接下来的两个小节说明了如何通过选择特定参数的测试数据来确定测试用例。

    基于输入参数的测试用例
    输入参数是由某个操作使用的参数。对于以下每个输入条件,都应通过使用每个操作的输入参数来编制测试用例: 

    每个等价类的正常值。
    每个等价类的边界值。
    等价类之外的值。
    非法值。
    请记住要将对象状态视作输入参数。例如:如果在对集合这个对象测试添加操作,您必须使用集合内所有等价类的值来测试添加操作。所有等价类的值指的是:充满元素的集合、有若干元素的集合、以及空集合。

    基于输出参数的测试用例
    输出参数是某个操作所改变的参数。某个参数既可以是输入参数也可以是输出参数。根据以下每个条件选择输入,以便获得输出。

    每个等价类的正常值。
    每个等价类的边界值。
    等价类之外的值。
    非法值。
    请记住将对象状态视为输出参数。例如,假设您对某个列表测试删除操作,您必须选择输入值以便执行操作之后,列表为充满状态、具有若干元素或为空(采用它的所有等价类的值进行测试)。

    如果对象受状态控制(根据对象的状态产生不同的反应),您应利用状态矩阵,如下图所示:

    用于测试的状态矩阵。您可以在此矩阵的基础上测试激励和状态的所有组合。

    十、为产品验收测试生成测试用例


    产品验收测试是部署软件前的最后测试操作。验收测试的目标在于核实软件是否已经准备就绪,而且可以由最终用户按软件设计来执行功能和任务。产品验收测试通常不仅涉及执行软件以确认其是否准备就绪,还涉及交付给客户的所有产品工件,如培训、文档和包装。

    为软件工件生成测试用例是按上文中说明的方式实现的。测试用例可与上面确定的测试用例(正式)或某个子集(非正式)相同或类似,这取决于产品验收测试的正式程度。不管测试用例的深度如何,应该在实施和执行产品测试之前对测试用例和产品验收计划达成共识。

    对非软件工件的评估将随着被评估工件的不同而相去甚远。请参见每个特定非软件工件的指南以及核对清单,查看这些工件的评估内容和评估方式。

    十一、为回归测试编制测试用例

    回归测试比较同一测试目标的两个工作版本或版本,并将差异确定为潜在缺陷。据此可假定:新版本应该象早先版本一样操作,并确保并未因为版本的变化而带来缺陷。

    理想状态下,您可能希望一次迭代内的所有测试用例都能在后续迭代内使用。应遵照下列指导原则来确定、设计并实施测试用例,这些测试用例可以最大限度地发挥回归测试和复用的价值,同时将维护的成本减至最低:

    确保测试用例只确定关键的数据元素(创建/支持被测试的条件所需的数据元素)
    确保每个测试用例都说明或代表一个唯一的输入集或事件序列,其结果是独特的测试目标行为
    消除多余或等效的测试用例
    将具有相同的测试目标初始状态和测试数据状态的测试用例组合到一起

     

  • 什么是α测试和β测试?

    2008-05-10 09:17:54

    大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试,目的是从实际终端用户的使用角度,对软件的功能和性能进行测试,以发现可能只有最终用户才能发现的错误。

    Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草稿)等应该在Alpha测试前准备好。

    Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人员来管理。

    由于Alpha和Beta测试的组织难度大,测试费用高,测试的随机性强、测试周期跨度较长,测试质量和测试效率难于保证,所以,很多专业软件可能不再进行Beta测试。随着测试技术的提高,以及专业测试服务机构的大量涌现,很多软件的Beta测试外包给这些专业测试机构进行测试。
     2008-05-10于北京。

    来自:http://www.51testing.com/?action_viewnews_itemid_81766.html
     

  • 什么是α测试和β测试?

    2008-05-10 09:17:26

    什么是α测试和β测试?

    解读一:
      α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。
     
    解读二:
      α   测试(alpha测试):在开发小组内部进行,测试的方法也较多,黑盒、白盒、  压力、应力等等;  
      β 测试(beta测试):有选择地请一些最终用户实际使用,将发现的问题反馈回来再进行修改。
     
    解读三:
      简单扼要的说:  
      alpha代表软件测试的第一个版本.(软件开发初期的版本,初具规模)  
      beta代表软件测试的第二个版本.(象网上所提供的一些软件测试版本)  
      final代表软件测试的第三个版本.(软件公司发布的版本)

     2008-05-10于北京。

    来自:http://www.51testing.com/?action_viewnews_itemid_81766.html
     

Open Toolbar