发布新日志

  • web测试20界

    2007-11-08 14:49:14

    1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。

            2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。

            3. 检查按钮的功能是否正确:如update、cancel、delete、save等功能是否正确。

            4. 字符串长度检查:输入超出需求所说明的字符串长度的内容,看系统是否检查字符串长度,会不会出错。

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

            6. 标点符号检查:输入内容包括各种标点符号,特别是空格、各种引号、回车键。看系统处理是否正确。

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

            8. 检查带出信息的完整性:在查看信息和update信息时,查看所填写的信息是不是全部带出,带出信息和添加的是否一致。

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

            10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。

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

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

            13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。

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

            15. search检查:在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确。如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确。

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

            17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。

            18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加* 

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

            20. 回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错。

  • 测试流程--测试计划

    2007-10-17 17:10:50

    很长一段时间,测试组所提交的测试计划到后来都成了一纸空文。
     
    原因有很多,列举几个:
      1
    :测试计划太过于形式(存在很多不需要的内容)
      2
    :测试时间点安排不合理(跟测试组内部人员没有做好沟通)
      3
    :计划送测时间点与项目实际送测点不相符 导致送测时间一再拖延(没有得到项目组支持和认同)
      4
    :测试需求点覆盖率不高,导致后期测试用例有很多遗漏
     

      
    前提

      
    在编写测试计划之前必需了解的有:
      
         1
    :项目计划表
         2
    :项目送测时间点
         3
    :测试需求功能点
         4
    :测试环境
      
      
    编写
      
    在测试计划中主要写的是:
      
       
    测试需求功能点
       
    测试用例--安排测试用例编写人员、测试用例编写时间、测试用例评审时间
       
    送测时间点--安排测试人员、负责模块、测试时间、BUG评审时间、提交测试报告时间
       
      
    评审
       
       
    评审点:
        1
    :测试需求功能点探讨
        2
    :测试人员安排和时间安排的讨论
       
      
    提交
       
    提交给项目负责人,然后跟项目负责人一起过一下测试计划,
       
      
    针对所需要的帮助和配合点,得到项目负责人的支持与认同。

  • 如何测试web网站

    2007-08-29 16:49:09

        web网站本质上带有web服务器和客户端浏览器的C/S结构的应用程序。主要考虑web页面、TCP/IP通讯、Internet链接、防火墙和运行在web页面上的一些程序(例如,applet、javascrīpt、应用程序插件),以及运行在服务器端的应用程序(例如,CGI脚本、数据库接口、日志程序、动态页面产生器,asp等)。另外,因为服务器和浏览器类型很多,不同版本差别很小,但是表现出现的结果却不同,连接速度以及日益迅速的技术和多种标准、协议。使得web测试成为一项正在不断研究的课题。其它要考虑的如下:

    1、服务器上期望的负载是多少(例如,每单位时间内的点击量),在这些负载下应该具有什么样的性能(例如,服务器反应时间,数据库查询时间)。性能测试需要什么样的测试工具呢(例如,web负载测试工具,其它已经被采用的测试工具,web 自动下载工具,等等)?

    2、系统用户是谁?他们使用什么样的浏览器?使用什么类型的连接速度?他们是在公司内部(这样可能有比较快的连接速度和相似的浏览器)或者外部(这可能有使用多种浏览器和连接速度)?

    3、在客户端希望有什么样的性能(例如,页面显示速度?动画、applets的速度等?如何引导和运行)?

    4、允许网站维护或升级吗?投入多少?

    5、需要考虑安全方面(防火墙,加密、密码等)是否需要,如何做?怎么能被测试?需要连接的Internet网站可靠性有多高?对备份系统或冗余链接请求如何处理和测试?web网站管理、升级时需要考虑哪些步骤?需求、跟踪、控制页面内容、图形、链接等有什么需求?

    6、需要考虑哪种HTML规范?多么严格?允许终端用户浏览器有哪些变化?

    7、页面显示和/或图片占据整个页面或页面一部分有标准或需求吗?

    8、内部和外部的链接能够被验证和升级吗?多久一次?

    9、产品系统上能被测试吗?或者需要一个单独的测试系统?浏览器的缓存、浏览器操作设置改变、拨号上网连接以及Internet中产生的“交通堵塞”问题在测试中是否解决,这些考虑了吗?

    10、服务器日志和报告内容能定制吗?它们是否被认为是系统测试的主要部分并需要测试吗?

    11、CGI程序、applets、javascrīpts、ActiveX 组件等能被维护、跟踪、控制和测试吗?
  • 关于web测试

    2007-08-29 16:40:36

    关于web测试
    1
    页面部分

    1 页面清单是否完整(是否已经将所需要的页面全部都列出来了)
    2 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是是否显示)
    3 页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)
    4 页面特殊效果(如特殊字体效果、动画效果)是否显示
    5 页面特殊效果显示是否正确

    2
    页面元素部分
    1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)
    2)素是否显示(元素是否存在)
    3)页面元素是否显示正确(主要针对文字、图形、签章)
    4)页面元素的外形、摆放位置(如按钮、列表框、核选框、输入框、超连接等)
    5 页面元素基本功能是否实现(如文字特效、动画特效、按钮、超连接)
    6 页面元素的容错性列表(如输入框、时间列表或日历)
    7 页面元素的容错性是否存在
    8 页面元素的容错性是否正确

    3
    功能部分
    1 数据初始化是否执行
    2 数据初始化是否正确
    3 数据处理功能是否执行
    4 数据处理功能是否正确
    5 数据保存是否执行
    6 数据保存是否正确
    7 是否对其他功能有影响
    8 如果影响其他功能,系统能否作出正确的反应
    9 其他错误
    10 对模块的具体功能进行测试时可以列出功能模块的所有功能,进行排列组合,测试所有情况
    如:某一功能模块具有最基本的增删改查功能,则需要进行以下测试
    单项功能测试(增加、修改、查询、删除)
    增加——>增加——>增加 (连续增加测试)
    增加——>删除
    增加——>删除——>增加 (新增加的内容与删除内容一致)
    增加——>修改——>删除
    修改——>修改——>修改 (连续修改测试)
    修改——>增加 (新增加的内容与修改前内容一致)
    修改——>删除
    修改——>删除——>增加 (新增加的内容与删除内容一致)
    删除——>删除——>删除 (连续删除测试)
    11)查询功能分为两种情况,验证操作结果。
    一、打开页面时自动显示结果,则不特别强调;
    二、需要手工操作进行查询,则每次在其他功能完成后进行。
    4
    提示信息
    1 成功、失败提示
    2 操作结果提示

    3 确认提示
    4 危险操作、重要操作提示

    5 返回页面 提示后显示的页面
    5
    容错性
    注意以下几种情况
    1 为空、非空
    2 唯一性
    3 )字长、格式
    4 数字、邮政编码、金额、电话、电子邮件、ID号、密码
    5 日期、时间
    6 特殊字符 (对数据库)英文单、双引号,&符号
    6
    权限部分
    功能权限: 指定用户可以使用那些功能,不能使用那些功能
    数据权限: 指定用户可以处理那些数据,不可以处理那些数据。可
    以合并到功能测试

    操作权限: 在逻辑关系上,操作前后顺序、数据处理情况。可以合
    并到功能测试

    权限变化: 可以合并到功能测试

    1 功能权限是否存在
    2 )功能权限是否正确
    3 数据权限是否存在
    4 数据权限是否正确
    5)操作权限是否存在
    6 操作权限是否正确
    7 引起权限变化的功能列表
    8 功能权限变化还是数据权限变化,或两者兼有
    9 权限变化是否正确

    7
    键盘操作
    1 Tab键的使用
    2 上下方向键的使用
    3 Enter键的使用
    4 系统设定快捷键的使用(如果设置有快捷键)

    8
    测试中还应注意的其他事项
    6 完整性:是否是一个整体,没有功能缺损
    7 易用性:使用是否方便
    8 一致性:类似的问题用类似的方法处理
    9 提示信息:提示信息是否完整、正确、详细
    10 帮助信息:是否提供帮助信息,帮助信息的表现形式(页面文字、提示信息、帮助文件),帮助信息是否正确、详细
    11 兼容性:包括操作系统兼容和应用软件兼容,可能还包括硬件兼容
    12 可扩展性:是否由升级的余地,是否保留了接口
    13 稳定性:运行所需的软硬件配置,占用资源情况,出现问题时的容错性,对数据的保护
    14 运行速度:运行的快慢,带宽占用情况

    有几点:
    1.
    功能点测试:是否满足需求所要求的功能
    2.
    字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.
    3.
    字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错
    .
    4.
    标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确
    .
    5.
    中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错
    .
    6.
    信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理
    .
    7.
    界面测试:界面的正确性、一致性、友好性、易用性。


    用户界面测试是从最终的使用者用户的角度来看软件,软件难以理解,不易使用就是软件缺陷。可以从以下几个方面重点来检查用户界面:

    1.
    易用性检查:确保软件易于理解,方便使用。
    2.
    一致性检查:
    a.
    注意系统页面的风格是否一致,如字的大小、颜色、字体要相同。
    b.
    提示信息的表达方式是否一致。
    c.
    按钮排列顺序是否一致。
    d.back, cancel
    等按钮跳转页面处理是否一致。
    e.
    各字段的名称,位置、长度、类型是否和设计文档要求一致,如Employee NoLoginName不一致。
    3.
    正确性检查:检查页面上的form, button, table, header, footer,提示信息,还有其他文字拼写,句子的语法等是否正确。
    4.
    友好性检查:
    a.
    提示信息是否友好.
    b.
    系统应该在用户执行错误的操作之前提出警告,提示信息
    .
    c.
    页面分辨率检查,在各种分辨率浏览系统检查系统界面友好性。

    5.
    合理性检查:做delete, update, add, cancel, back等操作后,查看信息回到的页面是否合理。

    6.
    检查本地化是否通过:英文版不应该有中文信息,英文翻译准确,专业。
    7.
    页面最大化检查:测试最大化/最小化/还原时页面是否做了对应的处理。

  • 手机软件测试的经验总结

    2007-08-23 17:36:20

            1.在提交高通前务必要检查文档与实际程序的功能表现是否相同,比如说,游戏增加了密技功能,在文档中就要有相应的说明。
            2.在模拟器上图像处理速度较快,所以不会出现游戏中移动的图像变模糊的现象,但是由于手机的分辨率相对低,所以一般在模拟器显示正常的速度,到了手机就应该让开发人员适当调慢,否则将会出现移动物体变模糊不能清晰辨认的情况。
            3.有些游戏使用了很多的图片资源,当在两个界面之间(例如在主菜单界面和帮助界面之间,主界面菜单是由许多图片组成的,帮助界面是一个html文件的浏览显示),连续按若干次使其在两个界面之间连续切换,会出现图像重叠现象,其原因是手机的CPU处理速度跟不上刷新速度,而且主界面的图片资源一直没有释放,导致图像的残留。一般可模拟Grinder把这些类似的问题测出来。
            4.是否正确处理来电。如果没有适当正确的来电处理,有些来电会使游戏画面变乱,有些直接退出,甚至死机。Brew程序员往往会在来电处理后的恢复中忘了对游戏音乐的处理,比如说原先选择了关闭音乐的,来电处理后音乐又自动开始播放了。有时候需要模拟两个或以上的连续的来电以发掘程序深层的逻辑错误,这些错误大多是来电处理后的恢复过程的错误。另外短信,电量不足等一些事件警告的出现也有可能导致程序出错,也要作出相应的处理。
            5.注意确保游戏说明和帮助的完整清晰,检查系统提示信息,确保在游戏中出现的文字的正确拼写,没有错别字。要尽量用敬称“您”而不用“你”。
            6.标题,菜单等的文字显示要尽量用小字体,尽量缩短文字,能用简短文字说明清楚的就不要用长句,例如“按2,4键可以左右移动图片”就可改成“按2,4键左右移动图片”,或者甚至改成“按2,4键移动图片”。因为不同的手机显示屏幕宽度不一样,在一款手机上显示正确不代表在其他款式都能正确显示,然而用小字体,短句子就能适应大多数手机的屏幕宽度。
            7.线程的处理,有些游戏设有多个线程,如果没有处理好线程的调用释放问题的话,就很可能出现线程争用的问题。例如一个宠物游戏,宠物死亡后,会调用一个新的线程循环播放哀吊音乐,有些程序员由于粗心大意忘记了释放这个线程,当重新开始游戏时,就会出现这个线程播放的音乐与游戏过程的背景音乐交替播放的情况。
            8.文件处理。当涉及文件读写操作的时候,要特别注意测试文件操作带来的内存问题。比如说,有些游戏需要用文件记录游戏最高分或分值等,要注意测试第一次运行程序时的退出操作(此时没有最高分记录或其他分值记录),程序是否申请了文件指针或文件资源而没有释放。如果是的话,则会导致退出时的内存错误。另外对于Brew,应用程序的文件包中不得包含零字节的文件,每个文件至少有一个字节,同时还要求不能包含无用的文件或文件夹,目的是节省手机上有限的存储资源。
            9.颜色的搭配,有些背景色跟文字或图片的颜色搭配在模拟器可以较清晰的显示出来,但是到了手机由于其分辨率问题就不那么明显了。颜色搭配要以清晰美观为基础,还要适当考虑游戏的种类,用户心理等问题。

            10.用模拟器模拟网络不通的情况。目的是测试软件的网络连接,网络资源请求,缓冲区存储等模块的性能,看看内存是否有正确释放等。可以通过断开网络连接的方法模拟手机网络不通的情况,具体就是把本地连接的状态设成禁用或者直接拔掉网络连接线。
            11.数据请求或传输等需时较多的过程要确保有提示界面,最好有动画显示数据在传输过程中,请用户耐心等待。另外要注意在这个过程中对重复按键予以忽略,因为等待时间过长或响应迟钝时,用户趋向于重复按手机按钮。
            12.不要忽略了对后台数据正确性的测试。输入特殊字符或异常字符,看后台有没有相应的容错处理(当然这些也可由手机端处理)。多个客户端同时发出请求,测试后台的多线程处理能力,看能同时处理多少用户的同时请求,平均响应时间是多少,是否在可接受范围内。
            13.来电,短信,电量不足等一些事件警告的出现也有可能导致程序出错,也要作出相应的处理。有些网络程序由于设置了数据通讯时不处理来电,这时候就要在低电量情况下测试,用电量不足的警告事件来触发程序的suspend和resume处理事件,看是否做了恰当的处理。
    以上经验同样适合开发人员参考,以便尽量避免类似问题的出现。

  • 如何报好Bug

    2007-08-23 17:33:47

      自己总结的关于报BUG方面的注意点:


    1.缺陷摘要(Summary)

      简单明了,便于理解

      长度一般不超过30个单词

      尽可能讲明:什么情况,导致了什么问题

      以便于他人定位Bug,杜绝不重复报相同的Bug


    2.缺陷描述(Descrīption)

      重现步骤(Action)

      详细描述重现该问题的关键步骤

      省略无关的操作,力求做到:所有重现步骤是充分的和必要的

      容易理解的常规步骤,可以一句话带过,比如“以管理员身份登录,进入后台用户管理页面”

      和环境有关的问题,给出特定的条件,比如某某操作系统,某某浏览器

      实际结果(Actual Result)

      描述实际出现的错误结果

      可借助截屏来表达

      不是总能重现的Bug,给出发生频率或规律

      期待结果(Expected Result)

      可选,Spec上没有做详细要求,用于测试人员表达自己的看法


    3.截屏/附件(Attachment)

      针对文字难以表达的或UI方面的问题

      图片格式使用JPG格式;BMP图片太大,不建议使用

      在图片上用醒目的颜色,标出问题所在区域

      也可考虑配上简短的文字


    4.其它

      对于多人同时测试同一模块的情况,报Bug前先检查是否已有类似的Bug (TD提供了Find Similar Defects的功能)

      Bug严重程度(Severity)必须准确

      Bug优先级(Priority) 必须准确(具体请参考公司标准文档)

      填写Module字段,便于Dev Manager 分配给相应的开发人员

      项目中共性的问题,纳入Common Module

      多个相同的问题,如是一个Dev负责完成的,撰写一个缺陷报告就可以,但须指出 问题发生的多个位置

      对于Reject的有争议的Bug,尽可能和Dev当面沟通


    Windows截图快捷键:

       

    截图类型

    截图快捷键

    说明

    全屏幕

    PrintScreen

      

    当前活动窗口

    ALT + PrintScreen

    按住 Alt 键,然后按下 PrintScreen

    局部窗口

    系统不支持

    可借助截屏软件,如HyperSnap

  • 测试人员应该如何报bug?

    2007-08-23 17:32:30

           首先,确保你所发现的问题是确实是一个bug,不要出现因为测试人员操作错误或配置错误所引起的“bug”,这样会降低你在开发人员心中的可信度。在测试的时候,如果发现测试的实际结果与预期测试结果不符时,不要着急马上报bug,先想想为什么会出现错误。作为专业的测试人员,应该能够对出现的问题进行跟踪,确认了在配置、操作没有错误的前提下,通过追踪分析确认所测试的业务流程确实是存在bug,并能大概对bug的产生原因进行定位。测试人员,需要做到专业,尽量少给开发找麻烦,不要制造实际上并不存在的bug。


            确认了所发现的问题是一个bug之后,按照测试步骤再执行一次,确保bug是可重现的而不是随机的。如果bug不能重现,应该尽量找到bug重现的规律,在一些比较难重现的问题可以找开发配合一起查找原因,如果还是无法重现则需要在bug report中对出现的问题描述清楚并说明出现的随机性。


            接下来就是填写bug report了,在填写bug report的时候,最重要的是bug的标题和bug描述。在bug报告中,首先用一句话对bug进行简要精确的描述作为bug的标题,让开发或项目经理一看就知道存在什么问题,比如“XX模块在压力测试2小时后出现内存泄露”。而在bug的描述中,需要使用简明准确的语言描写出现bug的测试步骤、实际的测试结果、预期的测试结果和结论;也就是说描述导致出现bug的操作步骤是怎样,由测试步骤所做的操作引起的测试结果是什么,而预期的结果应该是怎样,并由实际结果与预期结果相对比说明问题所在。比如:“在管理网页新增用户,当新增的用户登录名名称很长(例如登录名长度为输入框允许的最大长度),按‘新增’按纽新增后系统提示已经有该用户存在,而事实上该用户并不存在,建议对超长的用户名进行处理。”


            在测试人员发现了一个已隔离的,可重现的问题后,应该对问题进行归纳。同一个问题是否出现在其他的模块或其他的流程?同一个故障是否会引起更加严重的问题?如果存在,也需要提出来让开发一并处理。


            在开发对bug进行修改之后,测试需要报着怀疑的态度认真地对问题进行验证,需要严格按照测试步骤来进行测试,检查开发是否已经正确修改了所出现的问题,以及开发对bug进行了修复之后是否会引进新的问题。不要相信开发说“已经修改好了,肯定没问题了”就不对问题进行细致的检查了,如果开发修改得不彻底,问题仍然会存在的,或者可能会由于开发在修改bug的时候忽略了另一些细节导致了新bug的出现。尽量不要在关闭bug之后,才发现这个问题还没有修改彻底;也不要出现bug关闭之后,出现了新的bug。


            测试对bug进行验证确认已经修改ok之后,关闭bug。在关闭的时候,应该对Bug最终修改结果进行简要描述,如果bug的修改引起配置或数据库或业务流程的变更,也需要在bug关闭描述中进行说明。

  • 从用户关心的角度对软件BUG进行分类

    2007-08-23 17:29:36

      软件BUG的分类方式很多,如通过对系统的影响程度可分为严重级别,致命错误,严重错误、一般错误、建议项等;通过重现频率可分为可重现错误、偶然错误等,通过错误内容可以分功能错误、用户界面错误、边界值相关错误、初始化错误、计算错误、内存相关错误、硬件相关错误、文档错误等。这些分类对于跟踪BUG的修改很有帮助。但是这类划分标准都是从测试人员、开发人员的角度进行分类,并没有很好的反映出最终用户对产品的不同关注程度。由于最终用户关心的角度并不是开发的过程,而是业务功能的准确性、性能以及操作方便性,因此看问题的角度会有不同。这里本人尝试通过用户的视角进行BUG分类,在有最终用户参与的测试过程中,可以酌情参考使用。
        第一类:理解性错误。包含在分析和概要设计过程中工作不到位造成的失误。例如使用了不合理的代码体系;系统内部编码规则不统一;业务术语错误;主要前后逻辑错误等。这类问题说白了就是没有很好的理解基础需求,给用户以外行的印象,对整个系统就有理由持怀疑态度。这类错误是最严重的。一般要一到几个月才能解决。
        第二类:功能性错误。如保存数据不成功;系统抛出未经封装的底层错误;应用程序意外中断;正确性无法验证等,这类错误造成对最终用户对系统的失望,遇到这类问题,其它功能就测不下去。这是比较严重的错误,影响系统其它功能的测试,一般需要一到几周才能解决。
        第三类:功能衔接错误。如保存的数据无法查询;各个查询之间的查询口径无法统一,查询结果有偏差;上环节的数据传递到下环节不能使用,通过后台处理,勉强能够进行下环节的测试。这类问题让用户感觉还不能进行试运行,还得经过系统测试、修改后才能系统上线。
        第四类:内部逻辑错误;如缺乏必要的输入输出校验;提示信息缺少或者不够友好、不易操作等;这类问题除了明确具体的要求外,需要开发人员细心完善解决。
        第五类:扩展性问题或建议,如没有提供打印输出功能,显示操作员登陆信息、自动计算合计数等,这类问题是对基础功能的补充,用户提了但不影响最终的上线使用。
        对于行业应用软件的测试,在早期应以发现前三类错误为目标,测试人员应当具备一定的业务知识,才能发现问题的主要矛盾,而不能只停留在满足测试出的BUG数量上。
  • 软件测试全景图

    2007-08-22 16:38:50

    【全景图一】
        思路更清楚。一方面,从
    质量管理的思想出发,定义测试的目标和测试的范围,然后通过相应的测试方法实现测试目标。这些方法自然被应用于测试用例的设计,而设计出来的测试用例被执行,而执行的手段有手工测试和自动化测试。设计测试用例的目的,就是为了更快、更全面地发现缺陷。另一方面,测试的管理思想也应源于客户的需求、源于组织的质量方针。测试管理要覆盖整个测试生命周期中的各个阶段,每个阶段都会涉及缺陷的报告、跟踪和分析。

    【全景图二】
        这是最初的草稿,基本思路和上面接近,可能更灵活些,而且试图更想说明测试用例、测试脚本和缺陷等之间的关系。理想的情况就是要建立需求、测试用例和缺陷之间的映射关系。也试图通过一些虚线来描述测试管理、测试阶段和测试目标等之间的关心,包括其中回归测试的概念。

            基于过程的软件测试全景图,是对基于内容的 软件测试内容全貌——全景图(1) 的补充,从而对软件测试有一个较完整的描述。借助这张全景图,更好理解从需求、设计验证开始直至产品发布的整个测试过程,以及慢慢体会如何做好测试工作的每一个环节,不漏过任何一个环节,包括测试项目背景的掌控、沟通等等。


  • 五种测试工具

    2007-08-20 16:07:53

    目前主流的测试工具主要有以下5类:

      1.负载压力测试工具

      这类测试工具的主要目的是度量应用系统的可扩展性和性能,是一种预测系统行为和性能的自动化测试工具。在实施并发负载过程中,通过实时性能监测来确认和查找问题,并针对所发现问题对系统性能进行优化,确保应用的成功部署。负载压力测试工具能够对整个企业架构
    进行测试,通过这些测试,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布
    周期。

      2.功能测试工具

      通过自动录制、检测和回放用户的应用操作,将被测系统的输出记录同预先给定的标准结果比较,功能测试工具能够有效地帮助测试人员对复杂的企业级应用的不同发布版本的功能进行测试,提高测试人员的工作效率和质量。其主要目的是检测应用程序是否能够达到预期的功
    能并正常运行。

      3.白盒测试工具

      白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级。根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。静态测试工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接和生成可执行文件。静态测试工具一般是对代
    码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。动态测试工具一般采用“插桩”的方式,在代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。它与静态测试工具最大的不同是,动态测试工具要
    求被测系统实际运行。

      4.测试管理工具

      一般而言,测试管理工具对测试需求、测试计划、测试用例、测试实施进行管理,并且测试管理工具还包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的IT人员通过一个中央数据仓库,在不同地方就能交互信息。

      5.测试辅助工具

      这些工具本身并不执行测试,例如它们可以生成测试数据,为测试提供数据准备。

  • 什么是测试需求?

    2007-08-16 14:52:46

    Brian Marick
    测试需求的概念比较简单。例如,比方说一个计算平方根的程序,如果输入一个大于或等于零的数,程序可以给出一个结果;如果输入一个小于零的数,程序将指出输入错误。读过《软件测试的艺术》一书的工程师都会立即联想到边界值。对数值零进行测试;对零非常接近的负数进行测试,这就是两个具体的测试需求。

    在一个更加复杂的程序中,你可以将打算测试的项目做成一个列表。但是,这些测试需求都不会确定具体的测试数据。例如,一个银行交易程序,一个测试需求是试图支付客户的金额为负数,另一个测试需求是交易中的客户并不存在,等等。你有一系列这样的测试需求,它们并没有指出具体的数值或数据,如客户的姓名。

    测试的下一步是选择满足这些测试需求的输入值/测试数据。一个简单的测试用例可能会同时满足好几个测试需求。一个用例能同时满足好几个测试需求,当然是最理想的情况,但是这样做的代价较高。另外一种方法是为每一个测试需求设计一个单独的测试用例,就可以不必考虑那些复杂的测试用例,但是这些相对简单的测试用例发现缺陷的能力就会有所下降。

    这里有一个测试需求的实例:对一个哈希表的插入操作进行测试,有以下这些测试需求:
    1)插入一个新的条目
    2)插入失败-条目已经存在
    3)插入失败-表已满
    4)哈希表在插入前为空
    这些就是测试需求,而非测试用例,因为它们没有对被插入元素进行描述。另外你也不能马上就着手书写用例,就好象软件需求完成后不能立即进行编码一样。还需要对测试需求进行评审,确保正确和没有需求遗漏。


    这应该只是对测试需求的一个方面的理解
    测试需求应该包含两个方面的内容:

    1、确定测什么,就是上面这位仁兄所说。

    2、测试对产品的需求,解决需要产品为测试提供什么特性,可以更好的去测试的问题,就是我们常说的可测试性需求。
  • 测试工具备查

    2007-08-16 14:48:55


    1
    、 从测试功能上分


    ~7{8w;_ f,Op5x{1283721单元测试 51Testing软件测试网3T Q } Q?
    x$b-V

    针对不同语言,如JUNIT
    O2{1^c_1h!e128372
    2
    功能测试
    K5I c REQ128372E—
    Test
    :功能强大,由于不是采用POST URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持),基本上可以应付大部分的WEB SITE51Testing软件测试网3^-f9PR[w#v/U
    MI
    公司的WINRUNNER 51Testing软件测试网4Kb0j1IX ~Y)V
    COMPUWARE
    QARUN
    Aj Bk
    j­k128372
    RATIONAL
    SQA ROBOT
    Sr2RRAz%d!N128372
    3
    压力测试
    .f^ V
    G/nuX n128372
    MI
    公司的WINLOAD
    6Dl
    s$jv128372
    COMPUWARE
    QALOAD 51Testing软件测试网$_5`M%?*P`;F#E
    RATIONAL
    SQA LOAD 51Testing软件测试网)v­za[1]PJ%V?#S
    4) 负载测试 51Testing软件测试网
    {1P,]}4H4t'e8y

    LOADRUNNER
    3~p:p3`)mlI128372RATIONAL VISUAL QUANTIFY 51Testing
    软件测试网Zj*jt E3P V
    5WEB测试工具 51Testing软件测试网8| `­u;H;]-K‑eBZU]
    MI
    公司的ASTRA系列 51Testing软件测试网"WX*D2H:X t ~#^(f
    RSW
    公司的E—TEST SUITE
    ­F8v&[uC*se8cfZ128372
    6 WEB系统测试工具 51Testing软件测试网"f5oF
    w] m"FQ j%y}8G

    WORKBENCH 51Testing
    软件测试网wE8k`&S
    WEB APPLICATION STRESS TOOL
    WAS51Testing软件测试网 `n._ j­r
    Y }Tm­?

    7) 数据库测试工具 51Testing软件测试网VA^B
    pt0~q[1]f

    TESTBYTES 51Testing
    软件测试网J[7^;y'x
    8) 回归测试工具
    5X
    U8Q[$y U"y128372
    RATIONAL TEAM TEST 51Testing
    软件测试网,P:E.c| J‑v
    Y]i

    WINRUNNER 51Testing
    软件测试网tx1`8rg­eu_1T
    9) 嵌入式测试工具 51Testing软件测试网Ie7L9[0A
    ATTOLTESTWARE
    。是ATTOLTESTWARE公司的自动生成测试代码的软件测试工具,特别适用于嵌入式实时应用软件单元和通信系统测试。 51Testing软件测试网:y)cYA-M8k$I\
    CODETEST
    AppliedMicrosystemsCorp.公司的产品,是广泛应用的嵌入式软件在线测试工具。 51Testing软件测试网5m:N&ib8o:Q2E;h
    GammaRay
    GammaRay系列产品主要包括软件逻辑分析仪GammaProfiler、可靠性评测工具GammaRET等。 51Testing软件测试网N&^7?o`(K
    LogiScope
    TeleLogic公司的工具套件,用于代码分析、软件测试、覆盖测试。 51Testing软件测试网Y*yR-Om
    }/k[1]B-L4gR

    LynxInsure++
    LynxREAL-TIMESYSTEMS公司的产品,基于LynxOS的应用代码检测与分析测试工具。
    /RX lgzQ,E128372MessageMaster
    ElviorLtd.公司的产品,测试嵌入式软件系统工具,向环境提供基于消息的接口。 51Testing软件测试网[1]AW,L7M2MQ

    VectorCast
    VectorSoftware.Inc公司的产品。由6个集成的部件组成,自动生成测试代码,为主机和嵌入式环境构造可执行的测试架构。
    ?!~4q,c-b q
    DZ128372
    10) 系统性能测试工具 51Testing软件测试网&pw[1]e/tu:s

    Rational Performance
    !C_tE g#Bo
    G%L y­B128372
    11) 页面链接测试
    m­zs7W8Dj @(h128372Link Sleuth
    IgDqb(u3L v­X128372
    12) 测试流程管理工具

    y
    L'xN;V!A
    KmV~128372
    Test Plan Control 51Testing
    软件测试网/Sw] gp'_­\
    13) 测试管理工具
    8fF2S!jy128372TestDirector 51Testing
    软件测试网-p9N ~8H/u`

    Rational
    公司的Test Manager 51Testing软件测试网GG/P$rO4z^&h2\
    Compuware
    公司的QADirector 51Testing软件测试网hgxFG~S
    TestExpert
    :是Silicon Valley Networks公司产品的测试管理工具,能管理整个测试过程,从测试计划、测试例程、测试执行到测试报告。
    9E#f+q
    sd#_1hqC W8f128372
    14) 缺陷跟踪工具

    }7zG[1]Ey.L"n128372TrackRecord

    .[jL[1]xL128372
    15) 其他测试工具包
    9p vhIs‑FK6ka128372TestVectorGenerationSystem
    T—VECTechnologies公司的产品。提供自动模型分析、测试生成、测试覆盖分析和测试执行的完整工具包,具有方便的用户接口和完备的文档支持。

    n:WZn5X e]#X6`?`128372TestQuestPro
    TestQuest公司的非插入码式的自动操纵测试工具,提供一种高效的自动检测目标系统,获取其输出性能的测试方法。 51Testing软件测试网@&W Xv(_w

    TestWorks
    SoftwareResearch.Inc公司的一整套软件测试工具,既可单独使用,也可捆绑销售使用。
    )@Q R:p1l/y1283722
    、 从测试的方法上分:

    :\ O,g‑~6`NCX9I1Nj128372
    1) 白盒测试工具 51Testing软件测试网k0t8s[1]d1^'X&d

    白盒测试工主要有:NumegaPuRe、软件纠错工具(Rational Purify)。 51Testing软件测试网/Yr^q!\_*n
    内存资源泄漏检查: 51Testing软件测试网5r_wYU5?Y3M
    Numega
    中的BounceChecher 51Testing软件测试网LK
    {4n[1]O%P­C&W
    w:U#m

    Rational
    Purify
    5_ I7a
    j,m DL2C128372
    代码覆盖率检查:

    1AWX8_'g.HkF?128372Numega
    TrueCoverage
    E
    IN­y3j$R#W128372
    Rational
    PureCoverage 51Testing软件测试网V8s o[
    A

    TeleLogic
    公司的LogiScope
    -{"g~
    ZQr;GN128372
    Macabe
    公司的
    Macabe
    \z t}-c.U128372
    代码性能检查:

    /n bt cAZ[1]M_128372Numega
    TrueTime 51Testing软件测试网#jn N v[1]~q

    Rational
    Quantify51Testing软件测试网­m‑o.\2p(wF m:L4y
    代码静态度量分析度量检查工具:LogiScopeMacabe51Testing软件测试网BRG3TW*q.W1V
    黑盒测试工具主要有:QACenterSQATeamTestRational Visual Visual Test51Testing软件测试网rF*n
    X
    S3A

    QACenter
    QACenter帮助所有测试人员创建一个快速、可重用的测试过程。这些测试工具自动帮助管理测试过程、快速分析和调试程序,包括针对回归、强度、单元、并发、集成、移植,容量和负载建立测试用例,自动执行测试和产生文档结果。QACenter主要包括以下几个模块:
    to&| hN!_(]9e128372QARun
    :应用的功能测试工具。 51Testing软件测试网 u
    l(n­D2^7k

    QALoad
    :强负载下应用的性能测试工具。 51Testing软件测试网4hR;zQH
    QADirector
    :测试的组织设计和创建以及管理工具。 51Testing软件测试网J ^
    Z{x$^

    TrackRecord
    :集成的缺陷跟踪管理工具。
    :M.w;A1p4mK E[1]?128372EcoTools
    :高层次的性能监测工具。


    [1]\
    ^t{ j8Yi128372
    3、部分具体测试工具的介绍
    7A&f#jAY3t a128372
    1)、性能优化工具EcoScope 51Testing
    软件测试网Y0|E


    r_7l8a O
    EcoScope
    是一套定位于应用(即服务提供者本身)及其所依赖的所有网络计算资源的解决方案。EcoScope可以提供应用视图,并标出应用是如何与基础架构相关联的。这种视图是其他网络管理工具所不能提供的。EcoScope能解决在大型企业复杂环境下分析与测量应用性能的难题。通过提供应用的性能级别及其支撑架构的信息,EcoScope能帮助IT部门就如何提高应用性能提出多方面的决策方案。
    J2r dS­k.r,AK128372EcoScope
    的应用主要表现在以下几个方面:

    -iCtu2Q128372
    确保成功部署新应用

    3BUNpX sTA
    c128372
    维护性能的服务水平

    ;k[1]t?5L}'_[1]C._@128372
    加速问题检测与纠正的高级功能 51Testing
    软件测试网;x%W!I*Q ^)|;[
    K G;U

    定制视图有助于高效地分析数据
    '^m[1]e Ulb128372
    2)、数据库测试数据自动生成工具——TestBytes 51Testing软件测试网Y@%u(M%[;G

    在数据库开发的过程中,为了测试应用程序对数据库的访问,应当在数据库中生成测试用例数据,我们可能会发现当数据库中只有少量数据时,程序可能没有问题,但是当真正投入到运用中产生了大量数据时就出现问题了,这往往是因为程序的编写没有达到,所以一定及早地通过在数据库中生成大量数据来帮助开发人员完善这部分功能和性能。 51Testing软件测试网4HS` G9P s2k[1]l
    TestBytes
    是一个用于自动生成测试数据的强大易用的工具,通过简单的点击式操作,就可以确定需要生成的数据类型(包括特殊字符的定制),并通过与数据库的连接来自动生成数百万行正确的测试数据,可以极大地提高数据库开发人员、QA测试人员、数据仓库开发人员、应用开发人员的工作效率。
    Oa2U‑DMfRG K$K128372
    3)、PC—LINT 51Testing软件测试网`Azr9tq#C#H"K

    PC—LINT
    主要进行更严格的语法检查功能,还完成相当程度的语义检查功能。可以这样认为:PC—LINT是一个更加智能、更加严格的编译器。PC—LINT在实现语法和某些语义规则检查时,是通过参数配置完成的,它的选项就有数百个之多,因此,在使用PC—LINT过程中,了解选项的含义也很重要。
    9@
    g0SO3b~ |O};i128372
    4)、TCL
    &y~'Uk)\N&W7gx128372TCL
    Tool Command Language的缩写,它是一种很流行的脚本解释器,尤其在测试领域,它的最大特点是可移植性好,接口简单,方便,可以很容易地嵌入到软件中,作为自己的解释器使用。

    :s7}l!Q@h[1]ya128372TCL
    提供两种接口:编程接口和用户接口。编程接口是通过LIBDLL形式提供的,提供了一些函数(命令)供调用,包括:分配一个解释器指针(对象);初始化解释器(指针);注册扩展函数等。用户接口很简单,即编写的脚本,脚本里面包含对扩展命令的调用。

    caf!xgb128372
    5VB测试工具:
    VB Watch
    _,r-S;r1}'g)y$e[1]}128372
    6Java 程序的测试工具

    3U#n$n _"O KX1283721
    Bean—Test
    )T%e;{/M0]M
    @128372
    2
    EJBQuickTest 51Testing软件测试网(^ C;O*wGz\
    u

    3
    JStyle
    L*CA,Fn‑W­~4o%r1283724
    JTest 51Testing软件测试网d"c4O[1]C']+}Rt5s

    5
    HttpUnit
    nd3k
    w6y$_CN)p2w128372
    6
    JUnit 51Testing软件测试网g W{w"vDX S Z1L(M

    7)、覆盖测试
    |+B8NW [\%n128372C—Cover 51Testing
    软件测试网
    `4Pc!x0U$}4@
    {

    C—Cover
    是一个测试工具软件,用来找出没有被测到的代码,并报告测试的覆盖率。C—Cover 51Testing软件测试网g G-auoM9R/N
    只支持C/C++的代码覆盖率分析,其它语言不支持。但不受OS的限制。 51Testing软件测试网 m)^d5p/^!W$X#\-CS h
    =============================================== 51Testing
    软件测试网-j-c*B0z*Q[1]]
    单元测试方面:(对开发人员比较有用) J-Unit工具。 51Testing软件测试网1Z(zsy2h w
     
    功能测试方面:E-test是个不错的选择,功能很强大,由于不是采用Post URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持)。基本上可以应付大部分的Web Site51Testing软件测试网!ecu[1]h‑Z-NJ!JF
     
    如果只是利用脚本回放代替手工劳动,或者做对页面响应数的性能测试,Microsoft Web Application Stress Tool是个不错的选择。 51Testing软件测试网'[‑W/I7G4nq!]6T[1]m
     
    另外,在性能测试方面,PureLoad也是一个不错的工具,完全用Java写成,可以测试各种C/S程序, 如SMTP Server等。 这两个工具都是使用Post URL的方法测试Web Application的。对大量使用Javascrīpt的页面不太适合。当然,如果程序在Unixlinux下面运行的话,可以直接编写Shell脚本程序,更加方便。
    Cy,W5l7Df3Nz
    gaH128372
     
    另外,还有很多专门的工具,比如说Linkbot是专门作页面链接测试的。 51Testing软件测试网\j)HT&V2s#z

     
    另外,测试流程管理工具也有不少,个人用过也一直在用的是Test Plan Control,短小精悍,不错。   至于WinRunnerLoadRunner之类,因为没有License,所以都没怎么用过,惭愧。不过我看过一篇英国人评价英国测试市场上最流行的五个软件的文章。WinRunner得分最高。 51Testing软件测试网q
    ][1]u%pK

     
    测试工具从测试的方法上可以分为两种:白盒测试和黑盒测试   白盒测试工具主要有:
    p-O W+Jaj4PL5U f128372 
    内存资源泄漏检查:Numega中的bouncechecker,RationalPurify51Testing软件测试网‑?p0jW.}`2I

     
    代码覆盖率检查:Numega中的truecoverage,RationalPurecoverageTelelogic公司的logiscope, Macabe公司的Macabe   代码性能检查:Numega中的truetime,RationalQuantify

    r c*Q5}@5Tg5D128372
     
    代码静态度量分析质量检查工具:logiscopeMacabe

    ‑C rQSRtZ128372 
    黑盒测试工具主要有:   客户端功能测试:MI公司的winrunner,compuwareqarun,RationalSQA robot等等 51Testing软件测试网:zJ6`7Ir b
    s

     
    服务器端压力性能测试: MI公司的winload,compuwareqaload,RationalSQA load等等
    8K$T L(@[1]nY­P/LBG
    {*\128372
      Web
    测试工具:MI公司的Astra系列,rsw公司的e-test suite等等 51Testing软件测试网S!O)E!h8M

     
    测试管理工具:rationaltest manager,compuwareqadirector等等,此外还有缺陷跟踪工具 trackrecord等。
    .u8j/q6T3R?1^8y128372 
    数据库测试工具:TestBytes 51Testing
    软件测试网$P X"Io!D‑ta*X
    ?u

     
    黑盒测试工具:QACenterSQATeamTestRational Viaual Test51Testing软件测试网f&Gi8]!E)BC7P7i-y h
     
    回归测试工具:Rational TeamTestWinRunnerMI公司) 51Testing软件测试网 mg&A:`O*J
      WEB
    系统测试工具:TESTWorkberchWeb Appication Stress ToolWAS51Testing软件测试网9|Gow~
    L

     
    白盒测试工具:Numega PuRe、软件纠错工具(Rational Purity)。
    G
    vGm S8z
    jq128372
     
    嵌入式测试工具:Logiscope(静态测试工具)、CodeTest
    .^#n*z2?Q j.i9F128372 
    系统负荷测试工具:
    RationalPerformance
    ([-L
    _:F#{8N,\ | S128372
     
    涵盖测试工具范围评估工具

    m'R~;b6P(l#C128372 
    软件性能测试工具:LoadRunnerMI产品)、
    Rational Visual Qantify
    %VR,H)P`0X128372 
    测试管理工具:TestDirectorMI产品支持整个生命周期中测试流程管理)

     

  • BUG管理流程

    2007-07-20 09:16:48

    软件测试的主要目的在于发现软件存在的错误(Bug),对于如何处理测试中发现的错误,将直接影响到测试的效果。只有正确、迅速、准确地处理这些错误,才能消除软件错误,保证要发布的软件符合需求设计的目标。在实际软件测试过程中,对于每个Bug都要经过测试、确认、修复、验证等的管理过程,这是软件测试的重要环节。

    作为一个缺陷跟踪管理系统,需要正确设计每个错误的包含信息的字段内容和记录错误的处理信息的全部内容。字段内容可能包括测试软件名称,测试版本号,测试人名称,测试事件,测试软件和硬件配置环境,发现软件错误的类型,错误的严重等级,详细步骤,必要的附图,测试注释。处理信息包括处理者姓名,处理时间,处理步骤,错误记录的当前状态 正确的数据库权限管理是错误跟踪管理系统的重要考虑要素,一般要保证对于添加的错误不能从数据库中删除
      
     
    软件错误的状态
    新信息(New):测试中新报告的软件缺陷;
    打开 (Open):被确认并分配给相关开发人员处理;
    修正(Fixed):开发人员已完成修正,等待测试人员验证;
    拒绝(Declined):拒绝修改缺陷;
    延期(Deferred): 不在当前版本修复的错误,下一版修复
    关闭(Closed):错误已被修复;

    Bug管理的一般流程
     
    测试人员提交新的Bug入库,错误状态为New
    高级测试人员验证错误,如果确认是错误,分配给相应的开发人员,设置状态为Open。如果不是错误,则拒绝,设置为Declined状态。
    开发人员查询状态为OpenBug,如果不是错误,则置状态为Declined;如果是Bug则修复并置状态为Fixed。不能解决的Bug,要留下文字说明及保持BugOpen状态。
    对于不能解决和延期解决的Bug,不能由开发人员自己决定,一般要通过某种会议(评审会)通过才能认可。
    测试人员查询状态为FixedBug,然后验证Bug是否已解决,如解决置Bug的状态为Closed,如没有解决置状态为Reopen
       
    软件错误流程管理要点
    为了保证错误的正确性,需要有丰富测试经验的测试人员验证发现的错误是否是真正的错误,书写的测试步骤是否准确,可以重复。
    每次对错误的处理都要保留处理信息,包括处理姓名,时间,处理方法,处理意见,Bug状态。
    绝或延期错误不能由程序员单方面决定,应该由项目经理,测试经理和设计经理共同决定。
    错误修复后必须由报告错误的测试人员验证后,确认已经修复,才能关闭错误。

  • 功能测试用例和界面测试用例的设计方法

    2007-07-18 16:37:23

    1.1 文本框、按钮等控件测试

     

    1.1.1 文本框的测试

     

    如何对文本框进行测试

     

     a,输入正常的字母或数字。

     b,输入已存在的文件的名称;

     c,输入超长字符。例如在“名称”框中输入超过允许边界个数的字符,假设最多255个字符,尝试输入 256个字符,检查程序能否正确处理;

     d,输入默认值,空白,空格;

     e,若只允许输入字母,尝试输入数字;反之;尝试输入字母;

     f,利用复制,粘贴等操作强制输入程序不允许的输入数据;

     g,输入特殊字符集,例如,NUL\n等;

     h,输入超过文本框长度的字符或文本,检查所输入的内容是否正常显示;

     i,输入不符合格式的数据,检查程序是否正常校验,如,程序要求输入年月日格式为yy/mm/dd,实际输入yyyy/mm/dd,程序应该给出错误提示

     

    在测试过程中所用到的测试方法:

     

     1,输入非法数据;

     2,输入默认值;

     3,输入特殊字符集;

     4,输入使缓冲区溢出的数据;

     5,输入相同的文件名;

     

    1.1.2 命令按钮控件的测试

     

    测试方法:

     

     a,点击按钮正确响应操作。如,单击确定,正确执行操作;单击取消,退出窗口;

     b,对非法的输入或操作给出足够的提示说明,如,输入月工作天数为32时,单击”确定“后系统应提示:天数不能大于31

     c,对可能造成数据无法恢复的操作必须给出确认信息,给用户放弃选择的机会;

     

    1.1.3 单选按钮控件的测试

     

    测试方法:

     

     a,一组单选按钮不能同时选中,只能选中一个。

     b,逐一执行每个单选按钮的功能。分别选择了“男”“女”后,保存到数据库的数据应该相应的分别为“男”“女”;

     c,一组执行同一功能的单选按钮在初始状态时必须有一个被默认选中,不能同时为空;

    1.1.4 updown控件文本框的测试

     

    测试方法:

     

     a,直接输入数字或用上下箭头控制,如,在“数目”中直接输入10,或者单击向上的箭头,使数目变为10

     b,利用上下箭头控制数字的自动循环,如,当最多数字为253时,单击向上箭头,数目自动变为1;反之亦适用;

     c,直接输入超边界值,系统应该提示重新输入;

     d,输入默认值,空白。如,“插入”数目为默认值,点击“确定”;或,删除默认值,使内容为空,单击“确定”进行测试;

     e,输入字符。此时系统应提示输入有误。

     

    1.1.5 组合列表框的测试

     

    测试方法:

     

     a,条目内容正确,其详细条目内容可以根据需求说明确定;

     b,逐一执行列表框中每个条目的功能;

     c,检查能否向组合列表框输入数据;

     

    1.1.6 复选框的测试

     

    测试方法:

     

     a,多个复选框可以被同时选中;

     b,多个复选框可以被部分选中;

     c,多个复选框可以都不被选中;

     d,逐一执行每个复选框的功能;

     

    1.1.7 列表框控件的测试

     

    测试方法:

     

     a,条目内容正确;同组合列表框类似,根据需求说明书确定列表的各项内容正确,没有丢失或错误;

     b,列表框的内容较多时要使用滚动条;

     c,列表框允许多选时,要分别检查shift选中条目,按ctrl选中条目和直接用鼠标选中多项条目的情况;

     

    1.1.8 滚动条控件的测试

     

    要注意一下几点:

     

     a,滚动条的长度根据显示信息的长度或宽度及时变换,这样有利于用户了解显示信息的位置和百分比,如,word中浏览100页文档,浏览到50页时,滚动条位置应处于中间;

     b,拖动滚动条,检查屏幕刷新情况,并查看是否有乱码;

     c,单击滚动条;

     d,用滚轮控制滚动条;

     e,滚动条的上下按钮。

     

    1.1.9 各种控件在窗体中混和使用时的测试

     

     a,控件间的相互作用;

     b,tab键的顺序,一般是从上到下,从左到右;

     c,热键的使用,逐一测试;

     d,enter键和esc键的使用;

    在测试中,应遵循由简入繁的原则,先进行单个控件功能的测试,确保实现无误后,再进行多个控件的的功能组合的测试。

     

    ps:密码输入框测试时要特别注意进行字母大写输入的测试。

     

    查找替换操作

     案例演示:打开word中的"替换"对话框

     测试本功能有通过测试和失败测试两种情况

     通过测试:

     

     1,输入内容直接查找,或查找全部

     2,在组合框中寻找已经查找过的内容,再次查找并确认文档的内容正确,,已经查找过"测试用例",再次进入不用重新输入查找内容,直接在文档中搜寻就可以.

     

    失败测试:

     1,输入过长或过短的查询字符串.,假设查询的字符串长度为1255,那么输入0,1,2,256,255254进行测试;

     2,输入特殊字符集,,word.^g代表图片,^代表分栏符,可以输入这类特殊字符测试;

     

    替换测试大体相同.

     关于编辑操作窗口的功能测试的用例:

     1,关闭查找替换窗口.不执行任何操作,直接退出;

     2,附件和选项测试.假如,设定"精确搜寻","向后"搜索等附件选项等等来测试;

     3,控件间的相互作用.,搜寻内容为空时,按钮"搜寻全部","搜寻","全部替换","替换"都为灰色.

     4,热键, Tab.回车键的使用.

     

    插入操作

     1,插入文件

     测试的情况

     a,插入文件;

     b,插入图像;

     c,在文档中插入文档本身;

     d,移除插入的源文件;

     e,更换插入的源文件的内容;

     

    2,链接文件

     测试方法:

     a,插入链接文件;

     b,在文档中链接文档本身;

     c,移除插入的源文件;

     d,更换插入的源文件的内容.

     

    3,插入对象

     要测试的内容

     a,插入程序允许的对象,,word中插入excel工作表;

     b,修改所插入对象的内容.插入的对象仍能正确显示;

     c,卸载生成插入对象的程序,,word中插入excel工作表后卸载excel,工作表仍正常使用.

     

    编辑操作

     编辑操作包括剪切,复制,粘贴操作.

     

    测试剪切操作的方法

     a,对文本,文本框,图文框进行剪切;

     b,剪切图像

     c,文本图像混合剪切

     复制操作方法与剪切类似.

     

    测试时,主要是对粘贴操作的测试,方法是:

     a,粘贴剪切的文本,文本框及图文框;

     b,粘贴所剪切的图像;

     c,剪切后,在不同的程序中粘贴

     d,多次粘贴同一内容,,剪切后,在程序中连续粘贴3;

     e,利用粘贴操作强制输入程序所不允许输入的数据.

     

    界面测试用例的设计方法

     1,窗体

     测试窗体的方法:

     a,窗体大小,大小要合适,控件布局合理;

  • 使用 TestLink 进行测试管理

    2007-07-17 17:27:50

    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。

    TestLink 是sourceforge的开放源代码项目之一。作为基于web的测试管理系统,TestLink的主要功能包括:

    • 测试需求管理
    • 测试用例管理
    • 测试用例对测试需求的覆盖管理
    • 测试计划的制定
    • 测试用例的执行
    • 大量测试数据的度量和统计功能。

    TestLink的最新版本是1.6.2。在本文接下来的部分里,作者将详细地介绍使用TestLink1.6.0来进行测试管理的完整过程。

    一、安装启动

    1、 在安装TestLink1.6.0前,需要完成以下安装运行所需要的环境:Webserver、php4和MySQL。笔者推荐的安装环境如下:

    • Apache HTTP Server 2.0.59
    • Php 4.4.1
    • Mysql 4.1.21

    2、 将 TestLink 安装包保存到服务器,解压缩到 Apache2 的 htdocs 目录下,并重命名为 testlink。

    3、 自动安装 TestLink

    • 在浏览器输入访问地址http://yoursite/testlink/install/index.php,如:http://localhost:80/testlink/install/index.php
    • 选择new install,在进入的页面中,输入登录MySQL的用户名和密码,如root。提示安装成功,详细的安装说明请参照http://blog.csdn.net/judyxm/archive/2006/01/12/577148.aspx

    4、 登录testlink首页面。系统为testlink创建一个默认管理员账号,用户名和密码为:admin/admin。你可以使用这个账号访问TestLink 。登录http://127.0.0.1:80/testlink/index.php,如果你看到的页面如下,就说明你已经安装成功了。


    二、初始配置(设置用户、产品)

    1、 用户设置

    在TestLink系统中,每个用户都可以维护自己的私有信息。admin可以创建用户,但不能看到其它用户的密码。在用户信息中,需要设置Email地址,如果用户忘记了密码,系统可以通过mail获得。

    TestLink系统提供了六种角色,分别是admin、leader、senior tester 、tester、guest、testdesigner。相对应的功能权限如下:(详见图)

    • Guest:只有读的权限,适合于查看测试用例和测试需求,以及项目分析的用户。
    • Testdesigner:可以开展测试用例和测试需求的所有工作。
    • Tester:只能执行测试用例。
    • Senior tester:可以查看和维护测试用例,并且可以执行测试用例,但是不能管理测试计划、分配测试任务。
    • Leader:可以开展测试规格和测试需求的所有工作,还可以管理测试计划、分配测试任务。
    • Admin:维护产品,用户。

    同时,支持不同地域用户对不同语言的需求,可以根据用户的喜好对用户提供不同的语言支持。



    2、 产品设置

    TestLink可以对多个产品进行管理,Admin进行产品设置后,测试人员就可以进行测试需求、测试用例、测试计划等相关管理工作了。TestLink支持对每个产品设置不同的背景颜色,方便管理。


    三、测试需求管理

    测试需求是我们开展测试的依据。首先,我们对产品的测试需求进行分解和整理。一个产品可以包含多个测试需求规格,一个测试需求规格可以包含多个测试需求;

    • 创建测试需求规格
      对测试需求规格的描述比较简单,内容包含名称、范围。
    • 创建测试需求
      测试需求内容包含:需求ID、名称、范围、需求的状态,以及覆盖需求的案例。 TestLink提供了两种状态来管理需求:正确的(Valid)、不可测试的(not testable)。

    • 从文件导入测试需求
      Testlink提供了从文件导入测试需求的功能,支持的的文件类型有csv和csv(door)两种。

    四、测试用例管理

    TestLink支持的测试用例的管理包含三层:分别为Component、Category、Test case。我们把Component对应到项目的功能模块,而把Category跟每个模块的function对应,Test case就是写在这些Category里的。我们可以使用测试用例搜索功能从不同的项目、成百上千的测试用例中查到我们需要的测试用例,甚至于可以直接将别的项目里写的测试用例复制过来,这样就解决了测试用例的管理和复用问题。

    但是,还有一个问题没有解决,那就是与测试需求的对应问题。在测试管理中,测试用例对测试需求的覆盖率是我们非常关心的,从需求规格说明书中提取出测试需求之后, Testlink提供管理测试需求与测试用例的对应关系的功能。

    • 创建Component
      Component的内容包括:名称、介绍、范围、相关的内容、约束。
    • 创建Category
      Category的内容包括:名称、测试范围和目标、配置信息、测试数据、测试工具
    • 创建 Test case
      测试用例的要素包括:测试用例名称、简要说明、步骤、期望结果、关键字。



      创建好的测试用例树如下:



       
    • 建立测试用例和测试需求的覆盖关系。
      选中左侧用例树中的测试用例,再选择右侧对应的测试需求,进行Assign即可。

    五、测试计划制定

    在TestLink系统中,一个完整的测试计划包括:

    • 测试阶段的名称(如集成测试阶段、系统测试阶段)
    • 里程碑(明确每个测试阶段的开始和截止时间,以及完成A、B、C三种优先级的比例)
    • Build版本(定义本测试计划中需要测试的build版本,一般以产品名+时间来命名。)
    • 安排测试人员 (从用户列表中选择本测试计划的参与人员。)

    • 测试用例集
       
      • 制定优先级规则。优先级分为A、B、C三级,系统会根据用户定义的重要级别和风险级别的组合来确定优先级的归属。重要级别分为三级:Low、Medium、High。风险级别包括三级:1、2、3。
      • 从测试用例中选择本测试计划的测试用例集
      • 设置每个测试用例Category的重要级别和风险级别
      • 设置每个测试用例Category的责任归属。从本测试计划的测试人员列表中选择每个Category的Owner,由他来负责和完成测试用例的执行。

    六、测试执行

    执行测试用例,按照对每个build版本的执行情况,记录测试结果。测试结果有四种情况可以选择:

    Not Run:还没有执行过

    Pass:执行通过

    Failed:执行失败

    Blocked:由于其它用例失败,导致此用例无法执行,被阻塞。

    七、测试结果分析

    TestLink根据测试过程中记录的数据,提供了较为丰富的度量统计功能,可以直观的得到测试管理过程中需要进行分析和总结的数据:

    • 测试用例对测试需求的覆盖情况:哪些需求已经通过测试,哪些需求未通过测试,哪些需求处于阻塞状态,哪些需求还未开始测试。

    • 针对每个版本的测试用例执行情况:
      1)各种优先级的测试用例执行的比率
      2)各个模块的测试用例执行的比率
      3)各个测试人员测试用例的执行比率

    • 每个版本的执行情况

    • 所有测试用例在不同build版本的执行情况,显示?的地方表示还未执行。

    • 阻塞的测试用例列表

    • 失败的测试用例列表

    • 每个测试用例的bug数
      如果和bug跟踪系统连接的话,在下表中可以统计出每个测试用例的bug的数目

    八、与bug跟踪系统集成

    TestLink提供了与多种bug跟踪系统关联的接口配置,目前支持的bug系统有Jira、bugzilla、mantis。配置方法的相关文档参照帮助。

    九、其它易用性功能

    TestLink还提供了很多易用性的功能,比如:

    • 从测试需求直接生成测试用例
    • 文档的导入、导出功能
    • 测试报告可以导出为excel
    • 支持设定keyword

    总结

    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,我们可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。

    本文中,作者根据自己的使用经验,详细演示了如何使用TestLink来进行测试管理的全部过程,简单的介绍了TestLink的使用方法。希望能够帮助大家学会使用TestLink的基本功能,同时,大家可以参考这个过程和TestLink的帮助文档来实现对测试过程的管理。

  • 成功的 Web 应用系统性能测试

    2007-07-16 11:05:52

     

    图一:在线用户数和响应时间时间的趋势图

                                           
            针对基于吞吐量的性能测试需求,可通过下图的曲线来描述性能测试结果。以网上购物系统为例,下图描述下定单的并发用户、下定单响应时间以及吞吐量(服务器每秒处理定单笔数)之间的关系,从而快速判断系统是否能满足性能测试需求。从下图中可看出,并发用户增加,请求的响应时间也增加。服务器的吞吐量是先随并发用户数增加而增加,当吞吐量到达一定峰值后,再增加并发用户数,吞吐量会减少。原因在于当并发用户数少时,向Web服务器提交的请求量不大,服务器处理能力还有富余,所以吞吐量逐步增大;但当并发用户数超过某一值时,由于向服务器提交的请求太多,造成服务器阻塞,反而导致吞吐量减少。

    图二:响应时间、吞吐量和并发用户数的趋势图

                             
    3 如何获取合理的性能测试需求
            前一章介绍了Web应用系统的性能测试过程,确定性能测试需求是整个性能测试的起点和成功的重要因素。性能测试需求定义得过高,虽然确保系统上线后能满足性能需求,但可能会造成硬件资源的浪费;性能测试需求定义得过低,系统上线后可能会出现性能问题。如何通过分析系统上线后可能的用户访问行为,来获得合理的性能测试需求指标呢?
            假设现有一个基于Web的办公自动化系统(简称OA系统),该系统提供公文收发和查询功能。在部署该系统前,将对该系统进行性能测试。下面将详细介绍如何分析该OA系统的使用情况,定义合理的性能测试需求。
    3.1 如何获得OA系统的在线用户数量
            在线用户数量是指在特定时间区间内,有多少用户访问Web应用系统(对应到Web服务器的Session数),根据系统可能访问用户数以及每个用户访问系统的时间长短来确定。
            对于将要部署的OA系统,通过分析获得该系统有8000个注册用户,基本上所有的用户每天(8小时工作时间)都会访问OA系统,平均在线时间(从登录OA系统到退出OA系统之间的时间间隔,也可以是多次在线时间的合计)为12分钟,那么该OA系统的平均在线数(也就是Web应用Session变量数)为200个(8000 * 0.2 / 8),假设峰值在线用户数是平均在线用户数的3倍(该倍数可根据实际情况调整),则性能测试需求的在线用户数为600。
    3.2 如何确定OA系统的性能测试用例
            由于时间和资源限制,不可能对Web应用系统的所有功能进行性能测试,而是从业务的角度(如某一功能操作的用户多)和技术的角度(如某一功能虽然访问用户不多,但内部处理逻辑复杂或处理数据量大)来选择Web应用系统的特定功能作为性能测试用例。
            以OA系统为例,由于所有用户都经常公文查询功能,因此确定的性能测试用例为公文查询。
    3.3 如何确定OA系统的响应时间
            响应时间的快慢直接影响了系统使用用户的满意度,采用平均响应时间来描述系统系统性能测试需求是不科学的,因为无法直接和客户的满意度挂钩。而且,在做性能测试,如果某一请求的响应时间过长或过短,将导致平均响应时间和实际情况偏离。
            以OA系统为例,定义的响应时间需求为:90%(该百分比和要求的系统用户满意度相关)的查询请求响应时间不超过8秒(该时间可根据实际情况确定)。
    3.4 如何确定OA系统的交易吞吐量
            单位时间内Web应用系统需处理多少笔特定的交易可通过统计获得。以OA系统为例,假设每个用户每天(一天按8小时计算)平均会查询公文4次,那OA应用的Web服务器平均每分钟要能处理8000 * 4 / ( 60 * 8 ) = 66.67笔查询公文交易,考虑到峰值因素,要求每分钟能处理66.7 * 3=200笔查询公文交易。
    3.5 OA系统性能测试需求描述
            通过前面的分析,能明确定义合理的性能测试需求。OA系统性能测试需求定义如下:
    基于在线用户数的性能测试需求:600个在线用户按正常操作速度访问OA系统的查询公文功能,所有查询请求的成功率是100%,而且90%的查询请求响应时间不大于8秒。
    基于吞吐量的性能测试需求:OA系统在每分钟内需处理200笔查询公文操作,交易成功率为100%,而且90%的请求响应时间不大于8秒。
    4 总结
            Web应用性能测试项目成功的关键不在于性能测试工具,而在于有效的性能测试分析方法和实践。只有切实掌握性能测试需求分析方法,性能测试实践经验,才能保证一个Web应用性能测试的成功。

  • Java2平台

    2007-07-13 14:06:11

    J2ME(Java 2 micro Edition)是一种高度优化的Java运行环境,针对市面上的大量消费电子设备,例如Papers、cellularphones(蜂窝电话), screen-phones(可视电话?)、digital set-top boxes(数字机顶盒)、car navigation systems(汽车导航系统)等等。 J2ME技术在1999年的JavaOne Developer Conference大会上推出。J2ME技术将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序

          J2ME就是Java 2 micro Edition的缩写,是sun的java 2 的三大成员之一(J2SE,J2EE,J2ME)。专门用于开发消费性电子产品。例如手机,PDA等。

    一、J2ME平台体系结构

          J2ME并不是一种产品,而是一种技术,J2ME包括两种类型组件,即配置(configuration)和简表(profile)。

          配置(configuration)是一系列低层次的API应用编程接口)和一种为该族设备优化的虚拟机。今天在用的一般配置有两种,连接的设备配置(CDC)和限制连接的设备配置(CLDC)。

          CDC提供了一种虚拟机,以及支持像灵敏发报机、寻呼机、个人数字助理(PDA)和电视机顶盒这样的设备上的Java应用的基类库。这些设备的典型特征是具有一个32位的处理器和用来支持虚拟机和类库的超过2MB存储容量。CVM虚拟机正好满足了它们对于Java 2虚拟机特征集的功能需求。这是在小型平台上全特征的虚拟机。

          CLDC提供一个适合于小型的、资源受限的、连接的设备上使用的标准Java平台。这些设备的典型特征是具有一个16位或者32位的处理器和用来支持虚拟机和类库的160KB到512KB的总内存,它们通常以电池作为电源,并联入某类网络中,联网一般使用带宽时常小于9600bps的无线的、断断续续的连接方式。CLDC的核心是K虚拟机KVM)。“K”标记反映了它们的大小是以kilobytes(千字节)衡量的这一事实。CLDC的特征也是包含一系列类库。

      CDC的硬件参数:

      ·2M以上内存。
      ·具有网络连接能力,通常为无线网络。
      ·需要实现
    java虚拟机规范的全部功能。
      ·32位或者64位的处理器。

      CLDC的硬件参数:

      ·512 KB 以下内存
      ·有限能源供应(通常使用电池)
      ·有限或非持续网络连接
      ·简单的用户界面
      ·16位或者32位的处理器

      从上述的标准中我们不难看出CLDC主要针对那些资源非常受限的设备比如手机、PDA、双工寻呼机等。而CDC主要面对那些家电产品,比如机顶盒、汽车导航系统等。简表是以配置为基础的,例如Mobile Information Devices Profile(MIDP)就是CLDC上层的重要简表。与配置的纵向特性不同的是,简表是横向的。下图是J2ME体系结构的框图:


        J2ME体系结构框图

          简表(profile)是一种说明,它详细描述了架构在配置之上并使用配置的一系列API。简表的一个例子是创建在CDC之上的基础描述(Foundation Profile),它为以像住宅网关、灵敏电话和双向寻呼机这样的设备为目标的应用提供完整的J2ME运行时环境。另一种简表是移动信息设备描述(MIDP),它构建在CLDC之上,为那些运行在像移动电话和登录级PDA这样的设备上的应用提供完整的J2ME运行时环境。MIDP致力于解决像用户界面、持久存储、联网和应用程序生命周期这样的问题。

    二、J2ME 目标设备

          使用 CLDC 开发的 J2ME 应用程序的目标设备通常具有以下特征:

          · 可供 Java 平台使用的 160 到 512 千字节的总内存
          · 功率有限,常常是电池供电
          · 网络连通性,常常是无线的、不一致的连接并且带宽有限
          · 用户接口混乱,程度参差不齐;有时根本就没有接口

          一些 CLDC 支持的设备,包括无线电话、寻呼机、主流个人数字助手 (/pda/ PDA),以及小型零售支付终端。

          依照 Sun Microsystems,CDC 的目标设备通常具有以下特征:

          · 使用 32 位处理器
          · 2 兆字节或更多可供 Java 平台使用的总内存
          · 设备要求的 Java 2 “蓝皮书”虚拟机的全部功能
          · 网络连通性,常常是无线的、不一致的连接并且带宽有限
          · 用户接口混乱,程度参差不齐;有时根本就没有接口

          一些 CDC 支持的设备,包括常驻网关、智能电话和通讯器、PDA、管理器、家用电器、销售网点终端以及汽车导航系统。

    三、J2ME、J2SE与J2EE之间的比较

          下面的图表描述了支持 J2ME 应用程序的设备,同时说明了 J2ME 适合 Java 平台之处: 
     
    四、J2ME开发工具

    1)、J2MEWTK,这个工具在前文已经提到过,它是最基本的J2ME程序开发工具,免费,体积小,速度较快,完全遵守J2ME的各种规范。具有简单的IDE界面,易于上手,开发十分方便快捷,可以和 Forte 3.0捆绑。J2MEWTK适用于初学者和已经达到很高水平的开发者。窃以为J2MEWTK+JDK+Editplus/UltraEdit是绝配。

    2)、VisualAge Micro Edition 1.4。这是IBM的产品,号称是J2ME开发领域的TOP 1,但是我用了半天,也没有看出好在那里。马上就删除了。窗口太复杂,不明所以,开发起来很难适应,速度和J2MEWTK一样,比较庞大,装了这个东西,你的C盘就要小心了,多了很多乱七八糟的文件,还注册了许多COM组件,典型的非绿色软件

    3)、CodeWarrior for Java 6.0。这是Motolola的产品,功能十分强大,集成度很好,开发,调试,发布J2ME程序都很方便(还可以做一般的Java Program)。它的IDE和Visual Studio十分相似,很容易上手。CodeWarrior比较适合中等水平的开发者的使用。不过CodeWarrior不是免费软件,你只能够免费使用30天。

    4)、Borland Jbuilder 5.0的Nokia Bobile版

  • J2EE

    2007-07-05 22:43:46

    J2EE(Java 2 Enterprise Edition)是建立在Java 2平台上的企业级应用的解决方案。J2EE技术的基础便是Java 2平台,不但有J2SE平台的所有功能,同时还提供了对EJBServlet,JSP,XML等技术的全面支持,其最终目标是成为一个支持企业级应用开发的体系结构,简化企业解决方案的开发,部署和管理等复杂问题。事实上,J2EE已经成为企业级开发的工业标准和首选平台。

      J2EE并非一个产品,而是一系列的标准。市场上可以看到很多实现了J2EE的产品,如BEA WebLogic,IBM WebSphere以及开源JBoss等等。

          J2EE,是sun公司提出的一个标准,符合这个标准的产品叫"实现";其中你下载的sun公司的j2ee开发包中就有一个这样的"实现",而jboss,weblogic,websphere都是j2ee标准的一个"实现"。由于jboss,weblogic,websphere自身带有j2ee的api,所以可以不使用sun的j2ee实现。

    一. J2EE的概念

          目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。

          J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

          J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。

    二. J2EE的优势

         J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:
          保留现存的IT资产: 由于企业必须适应新的商业需求,利用已有的企业
    信息系统方面的投资,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2EE架构可以充分利用用户原有的投资,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape Application Server。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。

          高效的开发: J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:

          状态管理服务 -- 让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
          持续性服务 -- 让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
          分布式共享数据
    对象CACHE服务 -- 让开发人员编制高性能的系统,极大提高整体部署的伸缩性。
          支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许客户订购与J2EE兼容的第三方的现成的
    组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
          可伸缩性: 企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。
          稳定的可用性: 一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。若是意外停机,那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的可用性。一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如Sun Solaris、IBM
    OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。

    三. J2EE 的四层模型

          J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议――通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是 J2EE 典型的四层结构:

          运行在客户端机器上的客户层组件
          运行在J2EE服务器上的Web层组件
          运行在J2EE服务器上的业务逻辑层组件
          运行在
    EIS服务器上的企业信息系统(Enterprise information system)层软件

          J2EE应用程序组件
          J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的
    文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:
          应用客户端程序和applets是客户层组件.
          Java Servlet和JavaServer Pages(JSP)是web层组件.
          Enterprise JavaBeans(EJB)是业务层组件.

          客户层组件
          J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.
          web 层组件J2EE web层组件可以是JSP 页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。

          正如下图所示的客户层那样,web层可能包含某些 JavaBean 对象来处理用户输入,并把
    输入发送给运行在业务层上的enterprise bean 来进行处理。

          业务层组件
          业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprise bean 进行处理. 下图表明了一个enterprise bean 是如何从客户端程序接收数据,进行处理(如果必要的话), 并发送到EIS 层储存的,这个过程也可以逆向进行。

          有三种企业级的bean: 会话(session) beans, 实体(entity) beans, 和 消息驱动(message-driven) beans. 会话bean 表示与客户端程序的临时交互. 当客户端程序执行完后, 会话bean 和相关数据就会消失. 相反, 实体bean 表示数据库的表中一行永久的记录. 当客户端程序中止或服务器关闭时, 就会有潜在的服务保证实体bean 的数据得以保存.消息驱动 bean 结合了会话bean 和 JMS的消息监听器的特性, 允许一个业务层组件异步接收JMS 消息.

          企业信息系统层
          企业信息系统层处理企业信息系统
    软件包括企业基础建设系统例如企业资源计划 (ERP), 大型机事务处理, 数据库系统,和其它的遗留信息系统. 例如,J2EE 应用组件可能为了数据库连接需要访问企业信息系统

          我们就J2EE的各种组件、服务和API,进行更加详细的阐述,看看在开发不同类型的企业级应用时,根据各自需求和目标的不同,应当如何灵活使用并组合不同的组件和服务。

    · Servlet

          Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。

    · JSP

          JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。

    · EJB

          EJB定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。在装配组件时,所有的Enterprise Beans都需要配置到EJB服务器(一般的Weblogic、WebSphere等J2EE应用服务器都是EJB服务器)中。EJB服务器作为容器和低层平台的桥梁管理着EJB容器,并向该容器提供访问系统服务的能力。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务,控制了EJB的生命周期。EJB容器为它的开发人员代管了诸如安全性、远程连接、生命周期管理及事务管理等技术环节,简化了商业逻辑的开发。EJB中定义了三种Enterprise Beans:

    ◆ Session Beans

    ◆ Entity Beans

    ◆ Message-driven Beans

    · JDBC

          JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当与Microsoft平台中的ODBC(Open Database Connectivity)。

    · JMS

          JMS(Java Message ServiceJava消息服务)是一组Java应用接口,它提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通信,这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的SonicMQ。通过使用JMS API,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS,能够最大限度地提升消息应用的可移植性。 JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。

    · JNDI

          由于J2EE应用程序组件一般分布在不同的机器上,所以需要一种机制以便于组件客户使用者查找和引用组件及资源。在J2EE体系中,使用JNDI(Java Naming and Directory Interface)定位各种对象,这些对象包括EJB、数据库驱动、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作,如通过对象属性来查找和定位该对象。由于JNDI是独立于目录协议的,应用还可以使用JNDI访问各种特定的目录服务,如LDAP、NDS和DNS等。

    · JTA

          JTA(Java Transaction API)提供了J2EE中处理事务的标准接口,它支持事务的开始、回滚和提交。同时在一般的J2EE平台上,总提供一个JTS(Java Transaction Service)作为标准的事务处理服务,开发人员可以使用JTA来使用JTS。

    · JCA

          JCA(J2EE Connector Architecture)是J2EE体系架构的一部分,为开发人员提供了一套连接各种企业信息系统(EIS,包括ERP、SCM、CRM等)的体系架构,对于EIS开发商而言,它们只需要开发一套基于JCA的EIS连接适配器,开发人员就能够在任何的J2EE应用服务器中连接并使用它。基于JCA的连接适配器的实现,需要涉及J2EE中的事务管理、安全管理及连接管理等服务组件。

    · JMX

          JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解决分布式系统管理的问题。JMX是一种应用编程接口、可扩展对象和方法的集合体,可以跨越各种异构操作系统平台、系统体系结构和网络传输协议,开发无缝集成的面向系统、网络和服务的管理应用。JMX是一个完整的网络管理应用程序开发环境,它同时提供了厂商需要收集的完整的特性清单、可生成资源清单表格、图形化的用户接口;访问SNMP的网络API;主机间远程过程调用;数据库访问方法等。

    · JAAS

          JAAS(Java Authentication and Authorization Service)实现了一个Java版本的标准Pluggable Authentication Module(PAM)的框架。JAAS可用来进行用户身份的鉴定,从而能够可靠并安全地确定谁在执行Java代码。同时JAAS还能通过对用户进行授权,实现基于用户的访问控制。

    · JACC

          JACC(Java Authorization Service Provider Contract for Containers)在J2EE应用服务器和特定的授权认证服务器之间定义了一个连接的协约,以便将各种授权认证服务器插入到J2EE产品中去。

    · JAX-RPC

          通过使用JAX-RPC(Java API for XML-based RPC),已有的Java类或Java应用都能够被重新包装,并以Web Services的形式发布。JAX-RPC提供了将RPC参数(in/out)编码和解码的API,使开发人员可以方便地使用SOAP消息来完成RPC调用。同样,对于那些使用EJB(Enterprise JavaBeans)的商业应用而言,同样可以使用JAX-RPC来包装成Web服务,而这个Web Servoce的WSDL界面是与原先的EJB的方法是对应一致的。JAX-RPC为用户包装了Web服务的部署和实现,对Web服务的开发人员而言,SOAP/WSDL变得透明,这有利于加速Web服务的开发周期。

    · JAXR

          JAXR(Java API for XML Registries)提供了与多种类型注册服务进行交互的API。JAXR运行客户端访问与JAXR规范相兼容的Web Servcices,这里的Web Services即为注册服务。一般来说,注册服务总是以Web Services的形式运行的。JAXR支持三种注册服务类型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。

    · SAAJ

          SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一个增强,为进行低层次的SOAP消息操纵提供了支持。

    四. J2EE 的结构

          这种基于组件,具有平台无关性的J2EE 结构使得J2EE 程序的编写十分简单,因为业务逻辑被封装成可复用的组件,并且J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 因为你不用自己开发这种服务, 所以你可以集中精力解决手头的业务问题.

          容器和服务

          容器设置定制了J2EE服务器所提供得内在支持,包括安全,事务管理,JNDI(Java Naming and Directory Interface)寻址,远程连接等服务,以下列出最重要的几种服务:

          J2EE安全(Security)模型可以让你配置 web 组件或enterprise bean ,这样只有被授权的用户才能访问系统资源. 每一客户属于一个特别的角色,而每个角色只允许激活特定的方法。你应在enterprise bean的布置描述中声明角色和可被激活的方法。由于这种声明性的方法,你不必编写加强安全性的规则。

          J2EE 事务管理(Transaction Management)模型让你指定组成一个事务中所有方法间的关系,这样一个事务中的所有方法被当成一个单一的单元. 当客户端激活一个enterprise bean中的方法,容器介入一管理事务。因有容器管理事务,在enterprise bean中不必对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述文件中声明enterprise bean的事务属性,而不用编写并调试复杂的代码。容器将读此文件并为你处理此enterprise bean的事务。

          JNDI 寻址(JNDI Lookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这样应用程序组件可以访问名字和目录服务.

          J2EE远程连接(Remote Client Connectivity)模型管理客户端和enterprise bean间的低层交互. 当一个enterprise bean创建后, 一个客户端可以调用它的方法就象它和客户端位于同一虚拟机上一样.

          生存周期管理(Life Cycle Management)模型管理enterprise bean的创建和移除,一个enterprise bean在其生存周期中将会历经几种状态。容器创建enterprise bean,并在可用实例池与活动状态中移动他,而最终将其从容器中移除。即使可以调用enterprisebean的create及remove方法,容器也将会在后台执行这些任务。

    五、企业级应用示例

          下面我们通过假设一个企业应用的J2EE实现,来了解各种组件和服务的应用。假设应用对象是计算机产品的生产商/零售商的销售系统,这个销售系统能够通过自己的网站发布产品信息,同时也能将产品目录传送给计算机产品交易市场。销售系统能够在线接受订单(来自自己的Web网站或者来自计算机产品交易市场),并随后转入内部企业管理系统进行相关的后续处理。

          参见图1,这个企业应用可以这种方式架构。该企业应用的核心是产品目录管理和产品定购管理这两个业务逻辑,使用EJB加以实现,并部署在EJB容器中。由于产品目录和定购信息都需要持久化,因此使用JDBC连接数据库,并使用JTA来完成数据库存取事务。


    图1 J2EE应用示例

          然后使用JSP/Servlet来实现应用的Web表现:在线产品目录浏览和在线定购。为了将产品目录发送给特定的交易市场,使用JMS实现异步的基于消息的产品目录传输。为了使得更多的其它外部交易市场能够集成产品目录和定购业务,需要使用Web Services技术包装商业逻辑的实现。由于产品定购管理需要由公司内部雇员进行处理,因此需要集成公司内部的用户系统和访问控制服务以方便雇员的使用,使用JACC集成内部的访问控制服务,使用JNDI集成内部的用户目录,并使用JAAS进行访问控制。由于产品订购事务会触发后续的企业ERP系统的相关操作(包括仓储、财务、生产等),需要使用JCA连接企业ERP。

          最后为了将这个应用纳入到企业整体的系统管理体系中去,使用Application Client架构了一个管理客户端(与其它企业应用管理应用部署在一台机器上),并通过JMX管理这个企业应用。

  • 基本排序的几种算法总结

    2007-07-04 13:57:14

    #include <stdio.h>
    #include <time.h>
    #include<stdlib.h>
    #include<dos.h>
    #define n 10000
    typedef int keytype;
    typedef struct{
        keytype key;
      }rectype;//待排序的文件的记录类型
    typedef rectype seqlist[n+1];
    seqlist r;
    int m;
    main()//主程序
      {
      int i,j;

      //选择一种数据输入形式
      printf("1---random data\n");
      printf("2---inscre data\n");
      printf("3---descre data\n");
      printf("4---input data\n");
      scanf("%d",&j);
      if (j==1) randoming();//产生一组随机数据

      if (j==2)//产生一组递增序列
       for (m=1;m<=n;m++)
        r[m].key=m;

      if (j==3)//产生一组递减序列
       for(m=1;m<=n;m++)
        r[m].key=n-m+1;

      if (j==4){//由用户自己输入数据序列,设这组数据中不含0,以0作为结束
        printf("please input the sort data:(end of 0)\n");
        r[0].key=1;
        m=0;
        while((m<=n)&&(r[m].key)){
          m++;
          scanf("%d",&(r[m].key));
         }//end of while
        m--;
       }//end of if

      printf("1-----insertsort\n");
      printf("2-----bubblesort\n");
      printf("3-----selectsort\n");
      printf("4-----quicksort\n");
      printf("5-----heapsort\n");
      scanf("%d",&j);

      //输出排序前的序列
      printf("the source data:\n");
      for(i=1;i<=m;i++)
       printf("%d ",r[i].key);
      printf("\n");

      //选择一种方法进行排序
      if (j==1) insertsort(m);//直接插入排序
      if (j==2) bubblesort(m);//冒泡排序
      if (j==3) selectsort(m);//直接选择排序
      if (j==4) quicksort(1,m);//快速排序
      //if (j==5) heapsort(m);//堆排序

      //以下输出排序结果
      printf("the answer data:\n");
      for(i=1;i<=m;i++)
        printf("%d ",r[i].key);
     }//end of main


     insertsort(int m)
      {//直接插入排序
       int i,j;
       for(i=2;i<=m;i++)
        if (r[i].key<r[i-1].key){
          r[0].key=r[i].key;j=i-1;
          do{
             r[j+1].key=r[j].key;
             j--;
           }while (r[0].key<r[j].key);
          r[j+1].key=r[0].key;
         }//end of if
      }//end of insertsort

     bubblesort(int m){
       //冒泡排序
       int i,j;
       int exchange;
       for(i=1;i<m;i++){
         exchange=0;//设置未交换过标记
         for(j=m-1;j>=1;j--)
          if(r[j+1].key<r[j].key){//若逆序
            r[0].key=r[j+1].key;//以r[0]为辅助空间交换
            r[j+1].key=r[j].key;
            r[j].key=r[0].key;
            exchange=1;//设置做过交换标志
           }//end of if
         if (!exchange) return;
        }//end of for
      }//end of bubblesort

     selectsort(int m)
       {//直接选择排序
        int i,j,k;
        for(i=1;i<m;i++){
          k=i;
          for(j=i+1;j<=m;j++)//在无序区r[j..m]中查找最小关键字位置k
           if(r[j].key<r[k].key)
             k=j;
          if (k!=i){//若k<>i,则交换,扩大有序区
            r[0].key=r[i].key;
            r[i].key=r[k].key;
            r[k].key=r[0].key;
           }//end of if
         }//end of for
       }//end of selectsort

     quicksort(int low,int high)
      {//对r[low..high]进行快速排序
       int pivotpos;
       if(low<high){
        pivotpos=partition(low,high);//对r[low..high]进行一次快速排序,
                //以pivotpos为划分点,分成两个无序区r[low..pivotpos-1]和r[pivotpos+1..high]
            quicksort(low,pivotpos-1);//对r[low..pivotpos-1]进行快速排序
         quicksort(pivotpos+1,high);//对r[pivotpos+1..high]进行快速排序
        }//end of if
        }//end of quicksort
  • QTP的学习(转)

    2007-07-04 13:54:34

            我们使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。

            建议大家参照 Tutorial_oldsidney_cn.pdf 文件来认认真真、从头到尾地执行一遍,包括录制脚本、分析脚本、增加check point、Split Action等。我想这会减少你在学习QTP过程中的不少困惑和疑虑。


            这篇文档对如何使用QTP写的非常详细,是QTP初学者的经典教材。我就是看了这篇文档后才对QTP的整个测试流程有了一个初步的认识。在此,表示感谢。

            注意:
          1. 确保你的IE运行正常,依次点击菜单 查看 --> 工具栏,一定要上网助手等插件卸载掉,特别3721这个垃圾网站和其它拦截广告的插件(它也把测试过程中弹出的窗口当成广告,一样会拦截的!)
          2. 如果是按照Tutorial_oldsidney_cn.pdf 文件 中的订购飞机票的例子来练习 QTP的使用,那么只需选择Web 插件就可以了。如果是测试其它的应用程序或系统,就要根据需要来选择相应的插件了。
    在这个阶段你就要自己针对某个系统去录制脚本、维护脚本了。在录制后的回放过程中,你可能会遇到各种问题,这个时候就需要发挥你的主观能动性来解决遇到的问题。

            我想你可以按照下面的方法去解决:

           1. 查看QTP的有关文档,包括Help 、QTP User’s Guide等文档。这些都是比较系统全面的学习材料。你该好好利用呀。
           2. 在本论坛上查看以前别人是如何解决此类问题的(如果有的话)或者是发新贴寻求帮助,也可以搜索Google 等网站寻找问题的解决方法;
           3. 与自己部门的同事交流,例如与测试人员交流他们是如何解决的,与开发人员交流某个QTP无法识别的控件具体是是用什么来识别的等。毕竟他们对你测试的环境和测试的软件比论坛上的人熟悉呀。
           4. 自己通过学习VB scrīpt 等方式来提高自己的管理QTP scrīpt的能力。

            或许你会发现许多问题都是由提出问题的人来解决的,因为他们希望问题得到解决的迫切心比谁都强烈。
            如果你对VB scrīpt 、QTP和需要测试的程序或系统非常熟悉,你可能就想直接写QTP scrīpt来表现一下了。如果你能达到这个水平,那么恭喜你---你就是真正的高手了。这个时候你已经可以从宏观上把握QTP了,也能灵活自如地使用QTP了。

  • 数据驱动在QTP的运用(转)

    2007-07-04 13:52:36

    所谓数据驱动就是用一个数据文件把测试脚本驱动起来,来达到更接近用户化更智能的测试.其目的是把测试人员从维护复杂的脚本程序中解放出来,只需维护好数据文件即可,减少了很多修改脚本的麻烦.下面讲一下通过四种途径来达到数据驱动.

    1.datatable

            QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或测试用例填入这个数据表中.

    如:设计用例

       username  passwd

    case1  mercury mercury

    case2 xxxxxxx xxxxxx

    录制脚本

    For i=1 to Datatable.GetRowCount
    Dialog("Login").WinEdit("Agent Name:").Set
    DataTable("username", dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").Set
    DataTable("passwd", dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    datatable.GlobalSheet.SetNextRow
    Next

            本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的自动化测试不能够称为自动化测试.
            当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.

    2.文本文件

            我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.

    例:文本文件内的内容

      mercury,mercuy

    读文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile,username,passwd
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\testing.txt",1,false)
    tmp=split(myfile.readline,",")
    username=tmp(0)
    passwd=tmp(1)
    myfile.close
    End Function

    写文本文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile

  • SQL-查询语句

    2007-07-13 14:00:51

    1、如何查询第xxx行数据?
    1)假设id是主键: 
    select * 
    from (select top xxx * from yourtable) aa 
    where
    not exists(select 1
                from (select top xxx-1 * from yourtable) bb
                where aa.id=bb.id) 

    “select 1 from table where id=condition”:
    判断是否有符合条件的数据。“Select 1”要比“Select *”速度快。结果集倒是没有什么实际的意义。

    2)如果使用游标也是可以的:
    fetch absolute [number] from [cursor_name] 
    行数为绝对行数

  • 测试过程中的注意点

    2007-07-09 15:38:37

     
     
     

    测试过程中需要注意几点:
         1、测试用例包含测试文档和测试数据两部分,在实际操作之前,请先准备好测试数据,即要在界面上录入的数据,原则上是所有在界面上输入的数据都要写进测试数据(excel表)中,并注意归纳整理,每组测试数据都应有相应的测试目的。
         2、测试数据的准备需要考虑到一定的覆盖率,但100%的覆盖是肯定做不到的。请根据测试用例文档的内容尽量达到最有效的覆盖。
         3、测试用例并不是一成不变的,应在测试过程中随时更新、补充,不断完善。如果在测试过程中发现原测试用例有不完整甚至是错误的情况,请及时补充或修改。这一点很重要,切记。因为在此时多一分心,将来的测试工作必会少几分力。
         4、在测试过程中发现的BUG请填写到缺陷管理工具中,特别注意要将BUG情形,重现步骤等描述清楚,不要因偷懒或错别字等原因使得开发人员无法正确理解和无法重现该BUG,甚至造成歧义,以免对开发者和测试者增加许多不必要的工作量。
         5、做好BUG的跟踪工作。测试工作并不止于发现BUG,而应对每个BUG跟踪到底。BUG自提出之后,就要一直跟踪,敦促相关人员解决。时间太长仍未解决的,要查明原因,并汇报至项目经理处。在缺陷系统中,则体现为所有的BUG最后都要处于“closed”状态。
         6、做好版本控制。程序源代码的版本控制工作由开发组负责,但测试组也需要管理好测试系统的版本,保持与最新程序同步,以免对不正确的版本进行测试,做无用功。
         7、做好回归测试。开发人员修改BUG后,测试组要尽快将程序更新至测试环境,并做回归测试。此时除了验证所发现的问题是否被修正外,还要特别注意的是,此项改动是否会对系统的其它部分造成影响,从而产生新的BUG。因为有时候程序员对程序的一个不正确的,哪怕是小小的改动,都可能会对系统带来更多的BUG,而这些BUG往往又是很隐蔽的,所以要特别小心。这一点非常难做到,需要靠测试人员的经验和细心。这里有一个比较好的方法,就是要求开发人员在解决问题的同时,要详细的说明该问题产生的原因,及他对哪些源程序文件做了什么改动,填写到TTP中,越详细越好。根据我们部门以往的测试经验,我觉得这一点做得还很不够,很多程序员并不愿意做过多类似的归纳整理工作。其实这是对大家都有好处的事情,一定要请大家共同配合。
         8、在测试过程中,如果重复的操作过多,在条件允许的情况下,可考虑使用功能测试工具winrunner,quicktestpro等来简化操作。

  • 测试的主要评测方法

    2007-07-09 14:31:18

      测试的主要评测方法包括覆盖和质量。

      测试覆盖是对测试完全程度的评测,它建立在测试覆盖基础上,测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。

      质量是对测试对象(系统或测试的应用程序)的可靠性、稳定性以及性能的评测。质量建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上。

    覆盖评测

      覆盖指标提供了"测试的完全程度如何?"这一问题的答案。最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测,如用例的核实(基于需求的)或所有代码行的执行(基于代码的)。

      系统的测试活动建立在至少一个测试覆盖策略基础上。覆盖策略陈述测试的一般目的,指导测试用例的设计。覆盖策略的陈述可以简单到只说明核实所有性能。

      如果需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度的可计量评测。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了 75% 的性能测试需求。

      如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略类型对于安全至上的系统来说非常重要。

      两种评测都可以手工得到(公式如下所示)或通过测试自动化工具计算得到。

    基于需求的测试覆盖

      基于需求的测试覆盖在测试生命周期中要评测多次,并在测试生命周期的里程碑处提供测试覆盖的标识(如已计划的、已实施的、已执行的和成功的测试覆盖)。


      在执行测试活动中,使用两个测试覆盖评测,一个确定通过执行测试获得的测试覆盖,另一个确定成功的测试覆盖(即执行时未出现失败的测试,如没有出现缺陷或意外结果的测试)。

      这些覆盖评测通过以下公式计算:

      这一关于测试覆盖的陈述是有意义的,可以将其与已定义的成功标准进行对比。如果不符合该标准,则此陈述将成为预测剩余测试工作量的基础。

    基于代码的测试覆盖

      基于代码的测试覆盖评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素。数据流覆盖的目的是通过软件操作测试数据状态是否有效,例如,数据元素在使用之前是否已作定义。

      基于代码的测试覆盖通过以下公式计算:

    质量评测

      测试覆盖的评估提供对测试完全程度的评测,在测试过程中已发现缺陷的评估提供了最佳的软件质量指标。因为质量是软件与需求相符程度的指标,所以在这种环境中,缺陷被标识为一种更改请求,该更改请求中的测试对象与需求不符。

      缺陷评估可能建立在各种方法上,这些方法种类繁多,从简单的缺陷计数到严格的统计建模不一而足。

      严格的评估假定测试过程中缺陷达到的比率或发现的比率。常用模型假定该比率符合泊松分布。则有关缺陷率的实际数据可以适用于这一模型。生成的评估将评估当前软件的可靠性,并且预测继续测试并排除缺陷时可靠性如何增长。该评估被描述为软件可靠性增长建模,这是一个活跃的研究领域。由于该类型的评估缺乏工具支持,所以应该慎重平衡成本与其增加价值。

      缺陷分析就是分析缺陷在与缺陷关联关系的一个或多个参数值上的分布。缺陷分析提供了一个软件可靠性指标。

      对于缺陷分析,常用的主要缺陷参数有四个:

      · 状态:缺陷的当前状态(打开的、正在修复或关闭的等)。
      · 优先级:必须处理和解决缺陷的相对重要性。
      · 严重性:缺陷的相关影响。对最终用户、组织或第三方的影响等等。
      · 起源:导致缺陷的起源故障及其位置,或排除该缺陷需要修复的构件。

      可以将缺陷计数作为时间的函数来报告,即创建缺陷趋势图或报告;也可以将缺陷计数作为一个或多个缺陷参数的函数来报告,如作为缺陷密度报告中采用的严重性或状态参数的函数。这些分析类型分别为揭示软件可靠性的缺陷趋势或缺陷分布提供了判断依据。

      例如,预期缺陷发现率将随着测试进度和修复进度而最终减少。可以设定一个阈值,在缺陷发现率低于该阈值时才能部署软件。也可根据执行模型中的起源报告缺陷计数,以允许检测"较差的模块"、"热点"或需要再三修复的软件部分,从而指示一些更基本的设计缺陷。

      这种分析中包含的缺陷必须是已确认的缺陷。不是所有已报告的缺陷都报告实际的缺陷,这是因为某些缺陷可能是扩展请求,超出了项目的规模,或描述的是已报告的缺陷。然而,需要查看并分析一下,为什么许多报告的缺陷不是重复的缺陷就是未经确认的缺陷,这样做是有价值的。

    缺陷报告

      Rational Unified Process 以三类形式的报告提供缺陷评估:

      · 缺陷分布(密度)报告允许将缺陷计数作为一个或多个缺陷参数的函数来显示。

      · 缺陷龄期报告是一种特殊类型的缺陷分布报告。 缺陷龄期报告显示缺陷处于特定状态下的时间长短,如"提出的"。在龄期类别中,缺陷还可以按其他属性分类,如"拥有者"。

      · 缺陷趋势报告按状态(新的、已打开的或关闭的)将缺陷计数作为时间的函数显示。趋势报告可以是累计的,也可以是非累计的。

      · 测试结果和进度报告显示对测试的应用程序进行若干次迭代和测试生命周期后的测试过程执行结果。
    许多此类报告对于评估软件质量具有很高的价值。一般测试标准中包括有关特定类别(如严重性级别)中打开的缺陷数的陈述。通过缺陷分布评估可以轻松地核对该标准。对测试需求进行过滤或分类,该评估可以侧重于不同的需求集。

      要有效生成此类报告,一般需要工具支持。

  • 241/212>

    数据统计

    • 访问量: 12461
    • 日志数: 26
    • 图片数: 1
    • 建立时间: 2007-07-04
    • 更新时间: 2007-11-08

    RSS订阅

    Open Toolbar