与您一起分享在测试过程中的快乐与辛酸...

发布新日志

  • QTP安装许可证失败

    2010-06-21 10:09:04

     

    安装许可证密钥失败。
    Error[19]:Failed to add license code "UNKNOWN" to the license server on host "no-net".

    这个问题是在远程安装QTP时出现,并且利用“哔”的方法填写license,这个license是单机版的,所以解放方法也很简单,到需要安装QTP的机器上去进行本机安装,不要使用远程桌面。

    同理,远程无法打开QTP.exe,所以说,无法进行远程桌面的环境下打开QTP。

  • QTP无法录制下拉菜单的解决方法

    2010-04-27 12:13:26

    QTP默认录制方式是无法录制下拉菜单的,必须修改设置后再录制

    修改设置如下:

    在tools -> web event recording configuration 点击custom settings... 展开Web objects,

    选种webelement,点击event -> add -> onmouseover 。并确定在record栏内,状态是enabled。

    然后再重新录制你的脚本。

    执行录制后的脚本,发现无法回放成功,
    这是因为脚本只录制了鼠标的onmouseover事件,却没有录制click事件,所以脚本录制完后要手动添加click事件。
  • QC与QTP的连接设置

    2010-04-27 12:05:41

    首先,安装插件,打开QC首页,点击第三项Add-Ins Page -More Mercury Quality Center Add-ins 进入此界面后点击QuickTest Professional Add-in在此界面点击下载安装成功后,在开始-程序中有个新安装的程序Quick Test Professinal add in for Quality Center

    登录QC进入 Test plan ,Create New Test ,Test Type中会有QUICKTEST TEST,并且可以建立QTP的测试用例

    进入QTP主界面Tools-Options,在Run中把Allow选上以及Submit a defect to Qualiyt Center for each failed step选中后确定保存设置。

    在QTP主界面中点击Quality Center Connection Server中输入QC主页面地址点击connect按钮,QTP连接到服务器上。连接成功后会在QTP右下角出现一个标志(QC图标)

    把QC连接成功后,就是QTP右下角出现QC图标后,再进行Submit a defect to Qualiyt Center for each failed step勾选

  • QC邮件转发工具安装配置手册

    2010-04-19 13:40:41

    QC邮件转发工具安装配置手册

                                                      By Tesherlock(2010.4.19)

    由于公司没有独立的邮件服务器,导致QC无法通过内部邮件服务器来收发邮件,于是想到用Mail Direct来配置成我们的QC邮件服务器。当然你也可以用别的邮件转发工具。

    一、Mail Direct Pro介绍

    Mail Direct 可以将您的邮件直接发送到收件人的信箱中,而无需SMTP服务器。Mail Direct为您提供快速、安全、便捷的电子邮件发送服务。提供Mail Direct可以与几乎所有的邮件客户端软件配合使用,如Outlook Express, The Bat, Eudora, Foxmail等等。它内置一个SMTP服务器,可以被邮件客户端软件用于发送邮件。当Mail Direct接收到从邮件客户端软件发送来的邮件后,就直接发送到收件人的信箱中,而无须经过您的ISP的邮件服务器。您所需要做的,就是改变邮件客户端软件的邮件发送服务器的地址,从您的ISP提供的邮件服务器修改为“localhost”,即本机。然后Mail Direct将会成为您个人的SMTP服务器。提供同时,Mail Direct使用了多线程技术,可以高速地发送邮件,并且在发送邮件之前可以检查收件人邮件地址是否有效,使得邮件发送安全、高效、可靠。

    二、安装配置步骤

           下载并在QC服务器上安装Mail Direct Pro,如果系统IIS有自带的simple mail transport protocol服务,则一定要停用,否则就会冲突。我这里的QC服务器和邮件服务器都装在192.168.1.250这台Windows 2003服务器上。

    1Mail Direct Pro配置

    不对配置向导进行设置,直接关闭,点击桌面右下角的图标打开,在主界面中打开工具选项,按如下图设置:

    (以163邮箱的邮件服务为例,也可以采用其他的邮箱设置!)

    这里DNS设置就是QC服务器(邮件服务器)的IP地址,即192.168.1.250

    这里需要注意的是,要把仅接受本机用户前面的勾去掉。且主机名那里要填上:localhost

     

    三、后台管理配置说明

          进入到QC“Site Administration”中,“Site Users”页中,将当前管理员用户的邮件地址改为163的有效邮件地址(若使用其他邮件服务器的话,此对应邮件地址必须一致!);“Site Configuration”中设置如下,然后点击“Settings”“Set Mail Protocol”测试邮件是否能正确的发送。

       

       

    四、自定义配置说明

    1.  接下来是在自定义(Customize)中的配置, 选择一个需要自动发送邮件的项目,输入管理员密码,进入自定义配置页;

    2.  选择User Properties,填入admin的全名和email,或者只添email,这里的可以填写成用户名部分为admin,服务器部分必须与之前添加用户时所给用户填写的email的服务器部分一致;

    3.  选择Project Users,将属于该项目的用户添加进来,一并检查每个用户的邮箱是否正确;

    4.  选择Automail,选择邮件自动发送的触发字段,意思就是当某个字段发生变化,就自动发送邮件.比如当缺陷的状态改变时,邮件就开始自动发送.那就把状态这个字段从左边的字段中选到右边来;

    5.  选择Automail-Condition,设置接收邮件的过滤条件,它和上一步有联系,每个条件之间是与的关系,比如前面设置了状态改变时,就自动发送邮件,但是lilei这个人只想接收状态为fix的缺陷,就可以在缺陷字段那儿只填写fix,这样一来其他状态的缺陷就不会发送到lilei的邮箱中;

    6.  选择Alert Rules,把所有框框都打上勾.到此自定义中的配置就完成了,这儿的重点是Automail部分的配置.

    QC邮件转发工具Mail Direct Pro安装配置手册.rar(196 KB)

     

  • QC字体设置

    2010-04-19 12:55:31

     

    1.打开运行,输入命令regedit,打开注册表.
    2.找到键值:[HKEY_CURRENT_USERSoftwareMercury InteractiveTestDirectorGeneral]
    3.新增TDFontSize,REG_DWORD类型,value=12(代表12号字体)
    4.重新打开浏览器.

    注意:开始>控制面板>区域和语言选项,字体改成是英语(美国)

    在QC操作过程中,正常点击按钮如果出现服务器未响应的情况,请把字体在改回成中文(中国)---当然这样的话,字体又变小了。不知道这是不是QC的一个BUG!

  • 使用Log Explorer查看和恢复数据

    2010-04-19 12:28:35

       由于一次意外操作,把QC数据库中的BUG表数据给删掉了。崩溃~
    上网找了下恢复方法,找到一款Log Explorer。下载安装使用后,发现这款软件的确不错,收藏ing
        本次的使用的Log Explorer 4.2; 数据库:SQL2005;
       
    目的:恢复QC数据库中被删除的BUG表中的数据。

    一、下载安装

    Log Explorer 4.2下载地址:http://www.bhcode.net/download/690.html
    需要用FlashGet下载工具!也可以直接复制下面的地址到快车上!
    Flashget://W0ZMQVNIR0VUXWh0dHA6Ly93d3cuYmhjb2RlLm5ldC9maWxlLmFzcD9nZXRpZD02OTBbRkxBU0hHRVRd&17092&1271556201

    二、操作步骤

       下载完在数据库服务器中安装客户端和服务端,然后打开Log Explorer,4.2的界面以蓝色为主调,运行软件可见:

    (1).点击<Attach Log File>开始进行数据恢复。
        

    (2).确定要恢复数据的服务器,并输入登陆的用户名和密码,如果是本机可使用”windows身份验证,点击<Connent>测试连接。

      (3).选择要恢复数据所在有数据库,点击<Attach>进入数据操作界面。
          

    (4).进入数据操作界面后,在左边的菜单选择<View Log>,可显示操作的日志,例如是对哪一个表进行过新增、删除、修改等操作,操作的记录是什么内容都能显示出来。如果日志长时间没有清空过,那么这些日志就会很多,可以用“过滤功能”来设置条件进行日志筛选。
         


    可以根据时间,表,用户等的条件来进行筛选。

     (5).查询出来的日志内容,可以导出XML文件。导入的XML文件如果想转入数据库,则需自己写代码分析XML文件。

     注意:删除数据时需小心 ,不是所有的数据都能恢复;恢复的数据操作属于正常的操作。  

    使用Log Explorer查看和恢复数据
    使用方法:

    打开Log Explorer -> Attach Log File -> 选择SQL Server服务器和登陆方式 -> Connect ->
    在Database Name中选择数据库 -> Attach-> 左面对话框中Browse-> View Log-> 就可以看到log记录了 

    想恢复的话: 右键Log记录 Undo Transation-> 选择保存文件名和路径-> 然后打开该文件到查询分析器里执行
    T-sql代码就可以了 

    例如 如果Log是delete table where ...的话,生成的文件代码就是insert table ....
         然后将此insert table的代码放到查询分析器里执行.就可以恢复数据.


    ----------------------------------------------------------------------
    --如何恢复被delete/update的数据
    ---------------------------------------------------------------------- 
    1 连接到被删除数据库的Db
    打开log explorer  选择  "file"->"attach log file"->选择服务器和登陆方式->"connect"->选择"数据库"->"attach"
    2   查看日志
     在左面操作项目的对话框中选择"browse"项目->"view log"->就可以看到当前的Log记录了
    3   恢复数据
         右键某一条log记录,选择"undo transation"->"选择保存文件名和路径"->然后打开该文件到查询分析器里执行
    T-sql代码就可以了
    例如: 如果log是delete table where ...的话,生成的文件代码就是insert table ....


    ----------------------------------------------------------------------
    --Log Explorer恢复被drop table和truncate table后的数据
    ----------------------------------------------------------------------
    1  连接到被删除数据库的Db
         操作同上
    2   恢复方法
        1)  选择"salvaage dropped/truncate"菜单,在右边的对话框中选择表名,和droped/trucated的日期,
        File Name中选择生成insert语句脚步的存放位置,condition选择是droped还是truncated,
        最后点击"create" 就会生成insert语句,把生成的语句到查询分析器里面执行一下就可以了
        2) 选择"ViewDDL Commands"菜单->选"truncate table" 操作项->点击"Salvage"->生成语句->查询分析器里执行


    ----------------------------------------------------------------------
    --log explorer使用的几个问题
    ----------------------------------------------------------------------
    1) 对数据库做完全/差异/日志备份
    备份时如果选用了删除事务日志中不活动的条目
    再用Log explorer打试图看日志时,提示No log recorders found that match the filter,would you like to view unfiltered data 选择yes 就看不到刚才的记录了

    如果不选用了删除事务日志中不活动的条目
    再用Log explorer打试图看日志时,就能看到原来的日志并做恢复
    2)  修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复
    3)  然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上,
    否则会出现数据库正在使用无法恢复)
    恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data,选择yes 就看不到刚才在2中修改的日志记录,所以无法做恢复.
    4)  不要用SQL的备份功能备份,搞不好你的日志就破坏了.

    正确的备份方法是:
    停止SQL服务,复制数据文件及日志文件进行文件备份.

    然后启动SQL服务,用log explorer恢复数据
      

     

  • 测试需求和测试用例通过Excel导入QC10.0使用说明

    2010-04-18 17:22:05

     

    1、 安装QC10.0 Excel插件“QCMSExcelAddin.exe”点我下载
    2、 EXCEL配置
        a) EXCEL2007:
              1、点击图标标题 ,选择“EXCEL选项”按钮;
              2、如图选择“信任中心”—“信任中心设置”,在信任中心中选择“宏设置”,勾选“启用所有宏”。

             


        b) EXCEL其他版本:
            
    1、打开
    EXCEL;
            2
    、选择:工具〉宏〉安全性;3、在安全级页选择“中”;4、在可靠来源页,选中“信任所有安装的加载项和模板”。

    操作步骤

    1、  excel打开“常用用例.xls”文档。

    2、  EXCEL中选择需要输入的行。

    3、  Excel 2003以下选择菜单“工具〉Export to Quality Center”,Excel 2007选择“加载项〉Export to Quality Cente”。

     

    4、  弹出界面,输入QC服务器路径后点击“NEXT”。

    5、  在弹出界面的制定位置输入用户名和密码后点击“NEXT”。

    6、  在弹出界面的指定位置选择要登录的域和项目名称后点击“NEXT”。

    7、  在弹出的界面选择要输入的内容是需求、案例还是BUG后选择“NEXT”。

    8、  第一次导入时,select a map 列表中没有可供选择的项,可在type a new map name输入框中输入名称,以后再导入时就可在”select a map”之前定义的map,会保留所选项所定义的字段名与excel列的对应关系,然后选择”NEXT”

    9、  弹出如图界面,反映了QC项目和EXCEL列的对应关系,实际导入的时候可以根据情况进行增删修改后点击”NEXT”进行导入操作。

    注意:红色标记的字段在导入的时候必须有相应合法的值填入。

  • Excel导入QC没反应的解决方法

    2010-04-14 15:56:18

       

    excel导入需求、用例或bug到QC中,到第五步的时候,choose a map option,无论create a temporary map,还是Type a new map name,点下一步,没有反应的解决方法:

    在 C:\Program Files\Microsoft Office\OFFICE12\XLStart\TDAddin 文件夹下新建一个Tasks文件夹即可!

      

     


     

  • QC卸载方法

    2010-04-09 13:32:36

     

    1、打开“控制面板”进入“添加/删除程序”,把mercury quanlity center项删除;

    2、手动删除你安装QC的目录;

    3、删除所有与QC相关的文件及注册表;在“开始”菜单的“运行”中输入regedit进入到注册表编辑器,用Ctrl+F查找mercury quality center,查找下一个,直到把所有的quanlity center删完。

    4、如果C:\Program Files\Common Files目录下有Mercury Interactivet文件未被删除,也手动把它删除!

     

    要想重新安装QC,就不能在电脑上留下任何QC的痕迹,不然是无法重新成功安装的。

  • [转]翻页功能的测试用例

    2010-04-03 15:30:29

    本文出自shuixin128的51Testing软件测试博客,转载请保留出处及链接:http://www.51testing.com/?39517

    这几天看到一些WEB通用功能的测试用例设计,我也想小试一把,看到网上也有对翻页功能的用例,感觉不是很全,我总结了一下,下面是我对翻页功能的测试用例设计,有不对的欢迎朋友们指正,不全的大家帮补哦!

    翻页功能我们常碰到的一般有以下几个功能:
    1、首页、上一页、下一页、尾页。
    2、总页数,当前页数
    3、指定跳转页
    4、指定每页显示条数
    当然,有一些是少于多少页,全部以数字的形式显示,多于多少页后,才出现下一页的控件。本文暂且用以上四点来做为通用的用例来设计吧。

    对于1翻页链接或按钮的测试,主要要检查的测试点有:
    1、有无数据时控件的显示情况
    2、在首页时,首页和上一页是否能点击
    3、在尾页时,下一页和尾页是否能点击
    4、在非首页和非尾页时,四个按钮功能是否正确
    5、翻页后,列表中的记录是否仍按照指定的排序列进行了排序
    对于2总页数,当前页数,主要要检查的测试点有:
    1、总页数是否等于总的记录数/指定每页条数
    2、当前页数是否正确
    对于3指定跳转页,主要要检查的测试点有:
    1、是否能正常跳转到指定的页数
    2、输入的跳转页数非法时的处理
    对于4指定每页显示条数,主要要检查的测试点有:
    1、是否有默认的指定每页显示条数
    2、指定每页的条数后,列表显示的记录数,页数是否正确
    3、输入的每页条数非法时的处理

    分析完上面的测试点,应该可以进行用例的设计了。
    step 1: 列表无记录 
    expect: 1、四个翻页控件变灰不可点击
            2、列表有相应的无数据信息提示
            3、不可指定页数
            4、不可指定跳转页
            5、总页数显示为0
            6、当前页数显示为0

    step 2: 列表的记录数<=指定的每页显示条数
    expect: 1、四个翻页控件变灰不可点击
            2、总页数显示为1
            3、当前页数显示为1

    step 3: 列表的记录数>指定的每页显示条数
    expect: 1、默认在首页,当前页数为1              
            2、列表的数据按照指定的排序列正确排序
            3、记录数与数据库相符
            4、总页数=记录数/指定的每页显示条数

    step 4: 列表的记录数>指定的每页显示条数,在首页
    expect: 1、首页变灰不可点击
            2、上一页变灰不可点击
            3、下一页可点击,从(每页指定条数+1)条记录开始显示,当前页数+1
            4、尾页可点击,显示最后页的记录

    step 5: 列表的记录数>指定的每页显示条数,在中间的某页
    expect: 1、首页可点击,显示1到每页指定条数的记录
            2、上一页可点击,显示上一页的记录
            3、下一页可点击,从后一页的记录
            4、尾页可点击,显示最后页的记录
            5、列表的数据按照指定的排序列正确排序
            6、当前页数为所在页

    step 6:列表的记录数>指定的每页显示条数,在尾页
    expect: 1、首页可点击,显示1到每页指定条数的记录
            2、上一页可点击,显示上一页的记录
            3、下一页变灰不可点击
            4、尾页变灰不可点击
            5、列表的数据按照指定的排序列正确排序
            6、当前页数为最后一页的页数

    step 7:输入每页显示条数为正整数
    expect: 1、每页显示条数更新成指定的条数
            2、超过指定的条数的记录分页显示
            3、总页数更新成列表的记录数/每页显示条数

    step 8:输入每页显示条数为0
    expect: 1、提示“每页显示条数必须为大于1的整数”
            2、提示后每页显示条数恢复为上次生效的条数

    step 9:输入每页显示条数为负数
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 10:输入每页显示条数长度超过数据库指定的长度<<<maxlen>>>
    expect: 1、提示每页显示条数不能超过<<<maxlen>>>位
            2、提示后每页显示条数恢复为上次生效的条数

    step 11:输入每页显示条数为字符串,如中文翻页数
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 12:输入每页显示条数为特殊字符,如%
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 13:输入每页显示条数为html字符串,如<br>
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 14:输入跳转的页数为存在的页数
    expect: 1、正确跳转到指定的页数

    step 15:输入跳转的页数不存在或非法值
    expect: 1、跳转的页数值置为1,显示第一页的数据

    以上的用例是将总页数,当前页数都揉进了翻页控件的测试用例中了。

  • [转]UML基础: 统一建模语言简介

    2010-03-31 20:45:44

    级别: 初级

    Donald Bell, IBM 全球服务, IBM

    2004 年 2 月 01 日

    回顾20世纪晚期--准确地说是1997年,OMG组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML提出了一套IT专业人员期待多年的统一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划--就像建筑工人多年来所使用的建筑设计图一样。

    到了21世纪--准确地说是2003年,UML已经获得了业界的认同。在我所见过的专业人员的简历中,75%都声称具备UML的知识。然而,在同绝大多数求职人员面谈之后,可以明显地看出他们并不真正了解UML。通常地,他们将UML用作一个术语,或对UML一知半解。大家对UML缺乏理解的这种状况,促进我撰写这篇关于UML 1.4的快速入门文章。当阅读完本文时,您还不具备足够的知识可以在简历上声称自己掌握了UML,但是您已具有了进一步钻研该语言的良好起点。

    一些背景知识


    正如前面曾提到过的,UML的本意是要成为一种标准的统一语言,使得IT专业人员能够进行计算机应用程序的建模。UML的主要创始人是Jim Rumbaugh、Ivar Jacobson和Grady Booch,他们最初都有自己的建模方法(OMT、OOSE和Booch),彼此之间存在着竞争。最终,他们联合起来创造了一种开放的标准。(听起来是不是很熟悉?这个现象类似J2EE、SOAP和Linux的诞生。)UML成为"标准"建模语言的原因之一在于,它与程序设计语言无关。(IBM Rational的UML建模工具被广泛应用于J2EE和.NET开发。)而且,UML符号集只是一种语言而不是一种方法学。这点很重要,因为语言与方法学不同,它可以在不做任何更改的情况下很容易地适应任何公司的业务运作方式。

    既然UML不是一种方法学,它就不需要任何正式的工作产品(即IBM Rational Unified Process?术语中所定义的"工件")。而且它还提供了多种类型的模型描述图(diagram),当在某种给定的方法学中使用这些图时,它使得开发中的应用程序的更易理解。UML的内涵远不只是这些模型描述图,但是对于入门来说,这些图对这门语言及其用法背后的基本原理提供了很好的介绍。通过把标准的UML图放进您的工作产品中,精通UML的人员就更加容易加入您的项目并迅速进入角色。最常用的UML图包括:用例图、类图、序列图、状态图、活动图、组件图和部署图。

    深入讨论每类图的细节问题已超出了这篇入门文章的范围。因此,下面仅给出了每类图的简要说明,更详细的信息将在以后的文章中探讨。

    用例图


    用例图描述了系统提供的一个功能单元。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"(actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系。用例图一般表示出用例的组织关系--要么是整个系统的全部用例,要么是完成具有功能(例如,所有安全管理相关的用例)的一组用例。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。要在用例图上绘制一个角色(表示一个系统用户),可绘制一个人形符号。角色和用例之间的关系使用简单的线段来描述,如图1所示。


    示例用例图

    图1:示例用例图

    图字(从上到下):CD销售系统;查看乐队CD的销售统计;乐队经理;查看Billboard 200排行榜报告;唱片经理;查看特定CD的销售统计;检索最新的Billboard 200排行榜报告;排行榜报告服务

    用例图通常用于表达系统或者系统范畴的高级功能。如图1所示,可以很容易看出该系统所提供的功能。这个系统允许乐队经理查看乐队CD的销售统计报告以及Billboard 200排行榜报告。它也允许唱片经理查看特定CD的销售统计报告和这些CD在Billboard 200排行榜的报告。这个图还告诉我们,系统将通过一个名为"排行榜报告服务"的外部系统提供Billboard排行榜报告。

    此外,在用例图中,没有列出的用例表明了该系统不能完成的功能。例如,它不能提供给乐队经理收听Billboard 200上不同专辑中的歌曲的途径 -- 也就是说,系统没有引用一个叫做"收听Billboard 200上的歌曲"的用例。这种缺少不是一件小事。在用例图中提供清楚的、简要的用例描述,项目赞助商就很容易看出系统是否提供了必须的功能。

    类图


    类图表示不同的实体(人、事物和数据)如何彼此相关;换句话说,它显示了系统的静态结构。类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事物种类--摇滚乐队、CD、广播剧;或者贷款、住房抵押、汽车信贷以及利率。类图还可用于表示实现类,实现类就是程序员处理的实体。实现类图或许会与逻辑类图显示一些相同的类。然而,实现类图不会使用相同的属性来描述,因为它很可能具有对诸如Vector和HashMap这种事物的引用。

    类在类图上使用包含三个部分的矩形来描述,如图2所示。最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的操作(或者说"方法")。


    类图中的示例类对象

    图2:类图中的示例类对象

    根据我的经验,几乎每个开发人员都知道这个类图是什么,但是我发现大多数程序员都不能正确地描述类的关系。对于像图3这样的类图,您应该使用带有顶点指向父类的箭头的线段来绘制继承关系1,并且箭头应该是一个完全的三角形。如果两个类都彼此知道对方,则应该使用实线来表示关联关系;如果只有其中一个类知道该关联关系,则使用开箭头表示。


    一个完整的类图

    图3:一个完整的类图,包括了图2所示的类对象

    在图3中,我们同时看到了继承关系和两个关联关系。CDSalesReport类继承自Report类。一个CDSalesReport类与一个CD类关联,但是CD类并不知道关于CDSalesReport类的任何信息。CD类和Band类都彼此知道对方,两个类彼此都可以与一个或者多个对方类相关联。

    一个类图可以整合其他许多概念,这将在本系列文章的后续文章中介绍。

    序列图


    序列图显示具体用例(或者是用例的一部分)的详细流程。它几乎是自描述的,并且显示了流程中中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。

    序列图有两个维度:垂直维度以发生的时间顺序显示消息/调用的序列;水平维度显示消息被发送到的对象实例。

    序列图的绘制非常简单。横跨图的顶部,每个框(参见图4)表示每个类的实例(对象)。在框中,类实例名称和类名称之间用空格/冒号/空格来分隔,例如,myReportGenerator : ReportGenerator。如果某个类实例向另一个类实例发送一条消息,则绘制一条具有指向接收类实例的开箭头的连线,并把消息/方法的名称放在连线上面。对于某些特别重要的消息,您可以绘制一条具有指向发起类实例的开箭头的虚线,将返回值标注在虚线上。就我而言,我总喜欢绘制出包括返回值的虚线,这些额外的信息可以使得序列图更易于阅读。

    阅读序列图也非常简单。从左上角启动序列的"驱动"类实例开始,然后顺着每条消息往下阅读。记住:虽然图4所示的例子序列图显示了每条被发送消息的返回消息,但这只是可选的。


    一个示例序列图

    图4:一个示例序列图

    通过阅读图4中的示例序列图,您可以明白如何创建一个CD销售报告(CD Sales Report)。其中的aServlet对象表示驱动类实例。aServlet向名为gen的ReportGenerator类实例发送一条消息。该消息被标为generateCDSalesReport,表示ReportGenerator对象实现了这个消息处理程序。进一步理解可发现,generateCDSalesReport消息标签在括号中包括了一个cdId,表明aServlet随该消息传递一个名为cdId的参数。当gen实例接收到一条generateCDSalesReport消息时,它会接着调用CDSalesReport类,并返回一个aCDReport的实例。然后gen实例对返回的aCDReport实例进行调用,在每次消息调用时向它传递参数。在该序列的结尾,gen实例向它的调用者aServlet返回一个aCDReport。

    请注意:图4中的序列图相对于典型的序列图来说太详细了。然而,我认为它才是足够易于理解的,并且它显示了如何表示嵌套的调用。对于初级开发人员来说,有时把一个序列分解到这种详细程度是很有必要的,这有助于他们理解相关的内容。

    状态图


    状态图表示某个类所处的不同状态和该类的状态转换信息。有人可能会争论说每个类都有状态,但不是每个类都应该有一个状态图。只对"感兴趣的"状态的类(也就是说,在系统活动期间具有三个或更多潜在状态的类)才进行状态图描述。

    如图5所示,状态图的符号集包括5个基本元素:初始起点,它使用实心圆来绘制;状态之间的转换,它使用具有开箭头的线段来绘制;状态,它使用圆角矩形来绘制;判断点,它使用空心圆来绘制;以及一个或者多个终止点,它们使用内部包含实心圆的圆来绘制。要绘制状态图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。


    显示类通过某个功能系统的各种状态的状态图

    图5:显示类通过某个功能系统的各种状态的状态图

    图5中的状态图显示了它们可以表达的一些潜在信息。例如,从中可以看出贷款处理系统最初处于Loan Application状态。当批准前(pre-approval)过程完成时,根据该过程的结果,或者转到Loan Pre-approved状态,或者转到Loan Rejected状态。这个判断(它是在转换过程期间做出的)使用一个判断点来表示--即转换线条间的空心圆。通过该状态图可知,如果没有经过Loan Closing状态,贷款不可能从Loan Pre-Approved状态进入Loan in Maintenance状态。而且,所有贷款都将结束于Loan Rejected或者Loan in Maintenance状态。

    活动图


    活动图表示在处理某个活动时,两个或者更多类对象之间的过程控制流。活动图可用于在业务单元的级别上对更高级别的业务过程进行建模,或者对低级别的内部类操作进行建模。根据我的经验,活动图最适合用于对较高级别的过程建模,比如公司当前在如何运作业务,或者业务如何运作等。这是因为与序列图相比,活动图在表示上"不够技术性的",但有业务头脑的人们往往能够更快速地理解它们。

    活动图的符号集与状态图中使用的符号集类似。像状态图一样,活动图也从一个连接到初始活动的实心圆开始。活动是通过一个圆角矩形(活动的名称包含在其内)来表示的。活动可以通过转换线段连接到其他活动,或者连接到判断点,这些判断点连接到由判断点的条件所保护的不同活动。结束过程的活动连接到一个终止点(就像在状态图中一样)。作为一种选择,活动可以分组为泳道(swimlane),泳道用于表示实际执行活动的对象,如图6所示。


    活动图

    图6:活动图,具有两个泳道,表示两个对象的活动控制:乐队经理,以及报告工具

    图字(沿箭头方向):乐队经理;报告工具;选择"查看乐队的销售报告";检索该乐队经理所管理的乐队;显示报告条件选择屏幕;选择要查看其销售报告的乐队;从销售数据库检索销售数据;显示销售报告。

    该活动图中有两个泳道,因为有两个对象控制着各自的活动:乐队经理和报告工具。整个过程首先从乐队经理选择查看他的乐队销售报告开始。然后报告工具检索并显示他管理的所有乐队,并要求他从中选择一个乐队。在乐队经理选择一个乐队之后,报告工具就检索销售信息并显示销售报告。该活动图表明,显示报告是整个过程中的最后一步。

    组件图


    组件图提供系统的物理视图。它的用途是显示系统中的软件对其他软件组件(例如,库函数)的依赖关系。组件图可以在一个非常高的层次上显示,从而仅显示粗粒度的组件,也可以在组件包层次2上显示。

    组件图的建模最适合通过例子来描述。图7显示了4个组件:Reporting Tool、Billboard Service、Servlet 2.2 API和JDBC API。从Reporting Tool组件指向Billboard Service、Servlet 2.2 API和JDBC API组件的带箭头的线段,表示Reporting Tool依赖于那三个组件。


    组件图显示了系统中各种软件组件的依赖关系

    图7:组件图显示了系统中各种软件组件的依赖关系

    部署图


    部署图表示该软件系统如何部署到硬件环境中。它的用途是显示该系统不同的组件将在何处物理地运行,以及它们将如何彼此通信。因为部署图是对物理运行情况进行建模,系统的生产人员就可以很好地利用这种图。

    部署图中的符号包括组件图中所使用的符号元素,另外还增加了几个符号,包括节点的概念。一个节点可以代表一台物理机器,或代表一个虚拟机器节点(例如,一个大型机节点)。要对节点进行建模,只需绘制一个三维立方体,节点的名称位于立方体的顶部。所使用的命名约定与序列图中相同:[实例名称] : [实例类型](例如,"w3reporting.myco.com : Application Server")。


    部署图

    图8:部署图。由于Reporting Tool组件绘制在IBM WebSphere内部,后者又绘制在节点w3.reporting.myco.com内部,因而我们知道,用户将通过运行在本地机器上的浏览器来访问Reporting Tool,浏览器通过公司intranet上的HTTP协议与Reporting Tool建立连接。

    图8中的部署图表明,用户使用运行在本地机器上的浏览器访问Reporting Tool,并通过公司intranet上的HTTP协议连接到Reporting Tool组件。这个工具实际运行在名为w3reporting.myco.com的Application Server上。这个图还表明Reporting Tool组件绘制在IBM WebSphere内部,后者又绘制在w3.reporting.myco.com节点内部。Reporting Tool使用Java语言通过IBM DB2数据库的JDBC接口连接到它的报告数据库上,然后该接口又使用本地DB2通信方式,与运行在名为db1.myco.com的服务器上实际的DB2数据库通信。除了与报告数据库通信外,Report Tool组件还通过HTTPS上的SOAP与Billboard Service进行通信。

    结束语


    尽管本文仅提供了对统一建模语言UML的简要介绍,但还是鼓励大家把从这里学到的基本信息应用到自己的项目中,同时更深入地钻研UML。已经有多种软件工具可以帮助您把UML图集成到软件开发过程中,不过即使没有自动化的工具,您也可以使用白板上的标记或者纸和笔来手工绘制UML图,仍然会获益匪浅。

    备注

    1. 欲了解关于继承和其他面向对象原理的更多信息,请参阅:
      http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html
    2. "组件包层次"这个短语以一种与程序设计语言无关的方式,指代诸如.Net的命名空间(例如System.Web.UI)或者Java的包(例如java.util)这样的类容器层次。

    参考资料

    欲了解有关本文所讨论的产品或者服务的更多信息,请点击 这里并遵照所提供的指示操作。谢谢!



     

    关于作者

    Donald Bell 是IBM 全球服务的一个 IT 专家,在那儿他和 IBM 的客户一起致力于设计和开发基于软件解决方案的 J2EE。

     

    来源于IBM:http://www.ibm.com/developerworks/cn/rational/r-uml/

  • 【QTP项目实战】在WebTable对象中使用ChildItem方法

    2010-03-18 12:57:07

    ChildItem方法
    语法:
    object.ChildItem (Row, Column, MicClass, Index)

    作用:用于获取单元格中的测试对象

    项目实战举例:
    1、修改订单号为“DD0000315”的单据,点击操作列中对应的“修改”图标进入修改页面。

    orderNo="DD0000315"
    num=Browser("xx").Page("xx").Frame("xx").WebTable("xx").RowCount
    For i=0 to num
       If Browser("xx").Page("xx").Frame("xx").WebTable("xx").GetCellData(i,2)=orderNo Then
       Browser("xx").Page("xx").Frame("xx").WebTable("xx").ChildItem(i,9,"WebElement",0).Click
    'Index:0=修改,1=提交,2=入库通知,3=审核,5=打印
       End If
    Next

    2、选择订单号为“DD0000317”前面的复选框,点击操作栏中的的“提交”图标进入提交页面。

    orderNo="DD0000317"
    totalRowNumber=Browser("xx").Page("xx").Frame("xx").WebTable("xx").RowCount
    For i=0 to totalRowNumber
     If Browser("xx").Page("xx").Frame("xx").WebTable("xx").GetCellData(i,2)=orderNo Then
        Browser("xx").Page("xx").Frame("xx").WebTable("xx").childitem(i,1,"WebCheckBox",0).Set "ON"
     End if
    Next
    Browser("xx").Page("xx").WebButton("提交").Click

    >>项目实战操作图:

  • QTP连接oracle操作方法

    2010-03-16 11:30:31

        要从QTP接Oracle数据库,前提是已安装好Oracle客户端。然后在 Oracle Net Configuration Assistant 中完成以下配置:
    1. 监听程序配置,默认即可。
    2. 命名方法配置:本地。
    3. 本地Net服务名配置-添加-选择<Oracle8i或更高版本数据库或服务>-DBName(可以写成你要链接的数据库名,也可以自己定义,但是要记住,因为这个名字会在QTP数据库链接设置<TNS Service Name>中用到)-选择协议<TCP>(根据实际情况)-设置主机名:192.168.1.190(数据库所在电脑的IP或是机器名),并根据实际情况设置段口号,默认为1521-进行测试,提示成功就说明在Oracle客户端建立数据库链接成功了。恭喜你。

    4.获取oracle的连接串的方法,在本地新建一个.txt文件,修改扩展名名*.udl,双击*.udl文件,打开数据库链接属性,定位到“提供程序”选显卡,选中 oracle的连接  oracle provider for OLE DB,点击下一步,输入数据源,数据库用户名以及密码,点击测试连接,然后用UE或记事本打开*.udl文件,oracle的连接串已经生成了,例如
    Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=192.168.1.190
    以上就是udl文件生成的oracle连接串

    5.在QTP中来连接数据库

    Dim Cnn  '定义一个数据库连接串
    Set Cnn = CreateObject("ADODB.Connection")
    Cnn.Open ="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=ORADB_192.168.1.190"

    If Cnn.State = 0 Then      '判断数据库连接是否成功
         Reporter.ReportEvent micFail, "testing", "连接数据库失败"
    else
         Reporter.ReportEvent micPass, "testing",   "连接数据库成功"
    End If

    if Cnn.State<> 0  then
        Set Rs=CreateObject("ADODB.Recordset")    '生成记录集对象
        sql ="select * from cust"  '从数据库中查询cust的所有记录
        Rs.Open sql ,Cnn,1,3  '执行sql语句,记录可以自由移动,单数记录处于只读模式
        uid=Rs("custid") '取得字段为custid的记录,游标定义在第一行,所以取得的是该字段所在行的第一行数据
        msgbox uid
    End If

    RS.close       '关闭记录集
    Set RS=nothing  '释放对象
    Cnn.Close   '关闭数据连接
    Set Cnn=nothing '释放对象

    6.RecordSet对象(代表来自基本表或命令执行结果的记录的全集。)
    为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据:

      rs = Server.CreateObject("ADODB.RecordSet")

      rs.Open(sqlStr,conn,1,A)

       RS.OPEN SQL,CONN,A,B

    A:

    ADOPENFORWARDONLY(=0)
    只读,且当前数据记录只能向下移动

    ADOPENKEYSET(=1)
    只读,当前数据记录可自由移动

    ADOPENDYNAMIC(=2)
    可读写,当前数据记录可自由移动

    ADOPENSTATIC(=3)
    可读写,当前数据记录可自由移动,可看到新增记录

    B:

    ADLOCKREADONLY(=1)
    缺省锁定类型,记录集是只读的,不能修改记录

    ADLOCKPESSIMISTIC(=2)
    悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

    ADLOCKOPTIMISTIC(=3)
    乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

    ADLOCKBATCHOPTIMISTIC(=4)
    批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

    当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
    对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
    数据在这段时间被更新。这减少了资源的使用。

      在RecordSet组件中,常用的属性和方法有:

      rs.Fields.Count:RecordSet对象字段数。

      rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1

      rs(i):第i个字段的数据,i为0至rs.Fields.Count-1

      rs("字段名"):指定字段的数据。

      rs.RecordCount:数据记录总数。

      rs.EOF:是否最后一条记录。

      rs.MoveFirst:指向第一条记录。

      rs.MoveLast:指向最后一条记录。

      rs.MovePrev:指向上一条记录。

      rs.MoveNext:指向下一条记录。

      rs.GetRows:将数据放入数组中。

      rs.Properties.Count:ADO的ResultSet或Connection的属性个数。

      rs.Properties(item).Name:ADO的ResultSet或Connection的名称。

      rs.Properties:ADO的ResultSet或Connection的值。

      rs.close():关闭连接。

  • 解决ExecuteFile调用外部的VBS文件时提示”无效字符”的问题

    2010-02-03 16:52:06

    出现这个问题的原因:
    在QTP新建的Function Library文件是以Unicode编码被保存下来的,而正常执行的文件一定要是ANSI编码,所以导致出现”无效字符”的提示

    解决办法:
    1. 用记事本打开该vbs文件,然后点击”另存为”,编码选择”ANSI”,覆盖掉原来的文件即可
    2. 对于要用ExecuteFile引用的vbs文件,最好用记事本或其它编辑工具保存为ANSI编码的,QTP只能保存成Unicode的所以不要用QTP(这也算是QTP的一个bug)

  • [转]软件测试流程

    2009-12-18 16:02:42

    测试流程
     软件需求分析-----设计测试计划(获得测试需求------确定测试策略)-----设计测试用例-----搭建测试环境-----执行测试用例-----bug统计分析-----出具测试分析报告。
        
    需求分析
    需求分析(Requirment Analyzing)应该说是软件测试的一个重要环节,测试开发人员对这一环节的理解程度如何将直接影响到接下来有关测试工作的开展。
    可能有些人认为测试需求分析无关紧要,这种想法是很不对的。需求分析不但重要,而且至关重要!
     
    一般而言,需求分析包括软件功能需求分析、测试环境需求分析、测试资源需求分析等。
     
    其中最基本的是软件功能需求分析,测一款软件首先要知道软件能实现哪些功能以及是怎样实现的。比如一款Smartphone包括VoIP、Wi-Fi以及Bluetooth等功能。那我们就应该知道软件是怎样来实现这些功能的,为了实现这些功能需要哪些测试设备以及如何搭建相应测试环境等,否则测试就无从谈起!
     
    既然谈了需求分析,那么我们根据什么来分析呢?总不能凭空设想吧。
     
    总得说来,做测试需求分析的依据有软件需求文档、软件规格书以及开发人员的设计文档等,相信管理一些规范的公司在软件开发过程中都有这些文档。
     
    测试计划   
    测试计划(Test Plan)一般由测试负责人来编写。
       测试计划的依据主要是项目开发计划和测试需求分析结果而制定。测试计划一般包括以下一些方面:
     
    1. 测试背景
    a.        软件项目介绍;
    b.        项目涉及人员(如软硬件项目负责人等)介绍以及相应联系方式等。
    2. 测试依据
    a.        软件需求文档;
    b.        软件规格书;
    c.        软件设计文档;
    d.        其他,如参考产品等。
    3. 测试资源
    a.        测试设备需求;
    b.        测试人员需求;
    c.        测试环境需求;
    d.        其他。
    4. 测试策略
    a.        采取测试方法;
    b.        搭建哪些测试环境;
    c.        采取哪些测试工具以测试管理工具;
    d.        对测试人员进行培训等。
    5. 测试日程
    a.        测试需求分析;
    b.        测试用例编写;
    c.        测试实施,根据项目计划,测试分成哪些测试阶段(如单元测试、集成测试、系统测试阶段,α、β测试阶段等),每个阶段的工作重点以及投入资源等。
    6. 其他。
     
    测试计划还要包括测试计划编写的日期、作者等信息,计划越详细越好了。
    计划赶不上变化,一份计划做的再好,当实际实施的时候就会发现往往很难按照原有计划开展。如在软件开发过程中资源匮乏、人员流动等都会对测试造成一定的影响。所以,这些就要求测试负责人能够从宏观上来调控了。在变化面前能够做到应对自如、处乱不惊那是最好不过了。
     
    测试设计
    测试设计主要包括测试用例编写和测试场景设计两方面。
     
    一份好的测试用例对测试有很好的指导作用,能够发现很多软件问题。关于测试用例编写,请参见前面写的《也谈测试用例》一文,里面有详细阐述。
    测试场景设计主要也就是测试环境问题了。
    测试环境搭建
     
    不同软件产品对测试环境有着不同的要求。如C/S及B/S架构相关的软件产品,那么对不同操作系统,如Windows系列、unix、linux甚至苹果OS等,这些测试环境都是必须的。而对于一些嵌入式软件,如手机软件,如果我们想测试一下有关功能模块的耗电情况,手机待机时间等,那么我们可能就需要搭建相应的电流测试环境了。当然测试中对于如手机网络等环境都有所要求。
     
    测试环境很重要,符合要求的测试环境能够帮助我们准确的测出软件问题,并且做出正确的判断。
     
    为了测试一款软件,我们可能根据不同的需求点要使用很多不同的测试环境。有些测试环境我们是可以搭建的,有些环境我们无法搭建或者搭建成本很高。不管如何,我们的目标是测试软件问题,保证软件质量。测试环境问题,还是根据具体产品以及开发者的实际情况而采取最经济的方式吧。
     
    测试执行     
    测试执行过程又可以分为以下阶段:
    单元测试→集成测试→系统测试→出厂测试,其中每个阶段还有回归测试等。
    从测试的角度而言,测试执行包括一个量和度的问题。也就是测试范围和测试程度的问题。 比如一个版本需要测试哪些方面?每个方面要测试到什么程度?
     
    从管理的角度而言,在有限的时间内,在人员有限甚至短缺的情况下,要考虑如何分工,如何合理地利用资源来开展测试。当然还要考虑以下问题:
    1. 当测试人员测试的执行不到位、敷衍了事时该如何解决?
    2. 测试效率问题,怎样提高测试效率?
    3. 根据版本的不同特点是只做验证测试还是采取冒烟测试亦或是系统全面测试?
    4. 当测试过程中遇到一些偶然性随机问题该怎样处理?
    5. 当版本中出现很多新问题时该怎样对待?测试停止标准?
    6. ……
    总之,测试执行过程中会遇到很多复杂的问题,还是那句话,具体问题具体解决!本文不做过多阐述。
     
    测试记录
    缺陷记录总的说来包括两方面:由谁提交和缺陷描述。
     
    一般而言,缺陷都是谁测试谁提交,当然有些公司可能为了保证所提交缺陷的质量,还会在提交前进行缺陷评估,以确保所提交的缺陷的准确性。
    [FS:PAGE]
     
    在缺陷的描述上,至少要包括以下一些方面内容:

    序号
     
        
    标题
        
    前置条件
        
    操作步骤
        
    预期结果
        
    实际结果
        
    注释
        
    严重程度
        
    概率
        
    版本
        
    测试者
        
    测试日期

     以上是描述一个bug时通常所要描述的内容,当然在实际提交bug时可以根据实际情况进行补充,如附上图片、log文件等。
    另外,一个版本软件测试完毕,还要根据测试情况出份测试报告,这也是所要经过的一个环节。
     
    缺陷管理
    缺陷管理方面,很多公司都采取缺陷管理工具来进行管理,常见缺陷管理工具有Test Director、Bugfree等。
     
     
    软件评估
         这里评估指软件经过一轮又一轮测试后,确认软件无重大问题或者问题很少的情况下,对准备发给客户的软件进行评估,以确定是否能够发行给客户或投放市场。
    软件评估小组一般由项目负责人、营销人员、部门经理等组成,也可能是由客户指定的第三方人员组成。
     
    测试总结
       每个版本有每个版本的测试总结,每个阶段有每个阶段的测试总结,当项目完成RTM后,一般要对整个项目做个回顾总结,看有哪些做的不足的地方,有哪些经验可以对今后的测试工作做借鉴使用,等等。测试总结无严格格式、字数限制。应该说,测试总结还是很总要的。
     
    测试维护
         由于测试的不完全性,当软件正式release后,客户在使用过程中,难免遇到一些问题,有的甚至是严重性的问题,这就需要修改有关问题,修改后需要再次对软件进行测试、评估、发行。
    做事情,都有一个循序渐进的过程,从计划到策略到实现。软件流程就是按照这种思维来定义我们的开发过程,它根据不同的产品特点和以往的成功经验,定义了从需求到最终产品交付的一整套流程。流程告诉我们该怎么一步一步去实现产品,可能会有那些风险,如何去避免风险等等。由于流程来源于成功的经验,因此,按照流程进行开发可以使得我们少走弯路,并有效的提高产品质量,提高用户的满意度。
      目前流行的流程方法有很多种,如瀑布模型、螺旋模型、RUP模型、IPD流程等,不同的过程模型适合于不同类型的项目。
      2.测试工作流程图

        2.1测试工作总体流程图
      说明:集成测试和系统测试的反馈意见可能导致设计文档(需求或数据库)的修改。
      2.2需求阶段流程图

      2.3单元/集成测试阶段流程图

       2.4系统测试阶段流程图

       2.5压力测试流程图
      说明:压力测试为模拟用户正常使用时,系统正常工作的最小时间。

      2.6性能测试流程图
      说明:测试系统的崩溃极限(最多使用人数和数据库的极限容量)。
  • CMM基础

    2009-12-16 09:36:33

    基本概念
    CMM:Capability Maturity Model 成熟度模型
    SW-CMM:software CMM
    PCB:过程能力基线,过程控制量化标准,比如缺陷密度。
    PD:process database 过程数据库 就像软件过程的仓库一样,容放软件过程的所有产物。
    软件成熟度模型(CMM,Capability Maturity Model)由美国卡内基-梅隆大学软件工程研究所SEI提出, 经过几年的使用和修改,现已成为具有广泛影响的模型。
     CMM将软件过程的成熟度分为5个等级,以下是5个等级的软件机构的特征:

    (1)初始级(initial) 工作无序,项目进行过程中常放弃当初的计划。管理无章,缺乏健全的管理制度。开发项目成效不稳定,优秀管理人员的管理方法可能取得有效,但他一离去,工作秩序面目全非,产品的性能和质量依赖于个人能力和行为。无序无规划,依靠个人英雄,开发过程是黑箱(只要是软件公司,均有初始级--无需认证)
      
    (2)可重复级(Repeatable) 管理制度化,建立了基本的管理制度和规程,管理工作有章可循。 初步实现标准化,开发工作较好地实施标准。 变更依法进行,做到基线化。稳定可跟踪,新项目的计划和管理基于过去的实践经验,具有重复以前成功项目的环境和条件。出现里程碑

    (3)已定义级(Defined) 开发过程,包括技术工作和管理工作,均已实现标准化、文档化。 建立了完善的培训制度和专家评审制度 全部技术活动和管理活动均可控制 对项目进行中的过程、岗位和职责均有共同的理解 。文档化标准化(组织级)
      
    (4)已管理级(Managed) 产品和过程已建立了定量的质量目标。过程中活动的生产率和质量是可量度的。已建立过程数据库。已实现项目产品和过程的控制。可预测过程和产品质量趋势,如预测偏差,实现及时纠正。可量化-PCB(项目级)

    (5)优化级(Optimizing) 可集中精力改进过程,采用新技术、新方法。拥有防止出现缺陷、识别薄弱环节以及加以改进的手段。可取得过程有效性的统计数据,并可据进行分析,从而得出最佳方法。

    PSP(只有达到CMM5才有可能)的开销是昂贵的,只施用于可靠的人。CMM认证无证书,只有一张签字证明和公司认证的ID号。印度多4-5级,香港、美国多2-3级。

  • 破解QTP9.2java插件

    2009-03-05 12:34:30

    QTP9.2下载地址:
    http://esd.mercury.com/akdlm/trial/qtp/qtp92.zip
    QTP9.1 java插件下载地址:
    http://esd.mercury.com/akdlm/trial/qtp/qtp-java-addin.zip

    1.安装QTP9.2,维护号:0123-2820602186
    2.把mgn-mqt82.exe复制到QTP安装目录/BIN下,破解QTP9.2
    3.安装QTP9.1java插件
    4.将破解文件QTPro.EXE复制到QTP安装目录/BIN下,覆盖就可以了!

    附:mgn-mqt82.exe和破解文件QTPro.EXE
    mgn-mqt82.rar(235 KB)
    QTPro.rar(607 KB)

  • LoadRunner脚本回放问题解决

    2009-02-20 15:42:08

    在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。

      需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。

      1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。

      错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。

      错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。

      解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。

      错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do

      错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。

      如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。

      解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。

      如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。

      最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。

      2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。

      错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。

      错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。

      解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。

      3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。

      错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。

      错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。

      解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。

      错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。

      错误分析:服务器碰到了意外情况,使其无法继续回应请求。

      解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。

      4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。

      错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]

      Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"

      这时在tree view中看不到此组件的相关URL。

      错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。

      解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。

      5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。

      错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。

      错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。

      解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。

      6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。

      错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。

      错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。

      解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。

  • 微软的软件测试策略

    2009-02-04 15:11:06

    看了51testin论坛上 软件质量管理 精华板块中《微软的软件测试方法》一文,深有感触!原文链接地址:http://bbs.51testing.com/thread-39630-1-1.html

    以下是自己整理的测试策略,微软作为全球软件行业的大哥,在管理上自有一套,很多都值得我们学习!

    策略1:
    总体上说分为三个步骤进行三大步骤:审核需求和设计—>设计测试—>实施运行测试
    1.验证需求和设计:(1)由项目经理根据用户要求(信息来源于市场部门、用户支持部门等等)而编写的需求文
    本;(2)由项目经理根据需求文本而编写的功能设计文本;(3)由开发人员根据功能文本而编写的实施设计文本。测试人员要参与所有这些文本的审核。作为测试人员,审核重点是检查文本对用户需求定义的完整性、严密性和功能设计的可测性。同时这种审核对于测试人员也是一种热身活动,使他们尽早地进入技术和业务状态。
    2.测试人员要根据已审核通过的需求和设计编制测试计划,设计测试用例。。“测试计划” 主要阐述测试的范
    畴、领域、方法、工具、资源和计划时间表等等。“测试用例设计”要列出测试用例、每个用例的设置、执行步骤和预期结果。测试的这两个文档也要被项目经理和开发人员审核。这样经过各种相互的审核,大家对项目形成了基本的共识。
    3.实施运行测试是整个开发过程中最长最复杂的一个阶段。从测试的过程来看,总是先运行或执行简单用例,然
    后再复杂用例;先验证单一的基本功能,再综合的端到端的功能;先发现解决表面的,影响面大的Bug,再深层的,不容易重现的Bug。因此随着项目开发和测试的进程,产品的功能不断完善,质量不断提高。这一阶段测试人员还有一项繁琐但却很重要的工作,就是对已有的测试用例的维护。比如通常以下两种情况下要新增一些测试用例,一是对于当初测试设计不周全的领域,二是对于外部的Bug(比如从Beta客户报告来的),没有被现有测试用例所覆盖。当产品的功能设计出现更改时(在微软这是常事),所涉及的测试用例当然也要相应地修改。

    策略2:
    微软的测试是阶段性的,常常根据需要而带有随机性和突击性。对于这类测试,在微软有一个专门的名称
    :“BugBash(Bug大扫除)”。BugBash通常发生在项目开发各阶段(微软叫里程碑)的末期,比如Beta版发布前,划出一个专门的时间段(通常1-3天),在这期间所有参与项目的人员,集中全部精力,运用各方面的知识,尽全部智慧来搜寻项目的Bug。这是一个非常有意思的活动,但要组织好这样的活动并非易事。一般有以下要点:(1)尽管这是一个测试活动,但参与者并不仅限于测试人员。项目经理,开发人员甚至于高层管理人员都应参加,如同全民动员。目的是要集思广益;(2)要鼓励各部门,领域交叉搜索,因为新的思路和视角通常有助于发现更多的Bug;(3)为调动积极性,增强趣味性,可以适当引入竞争机制,比如当活动结束时,评出发现Bug最多,发现最严重Bug的个人,给以物质和精神奖励。(4)可以分专题展开,比如安全性、用户界面可用性、国际化和本地化等等。
        微软的第二类测试除了Bug Bash外,经常还有一些专业性的测试,最典型的是针对安全性攻击测试。一般会
    邀请公司内部,或业界的专家来搜寻产品的安全漏洞。

  • [转]使用LoadRunner测试TUXEDO (学习LR的好教程)

    2008-09-02 17:11:46

        LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。它通过模拟数据以千万计用户来实施并发负载来对整个企业架构进行测试,来帮助您更快的查找和发现问题。 
    关于LoadRunner 更全面的描述及使用,请参考《LoadRunner 使用手册》或Mercury Interactive 公司提供的联机帮忙文档。本文旨在帮助工程师们掌握使用LoadRunner ? 来测试BEA中间件产品的方法。 

        一、如何使用LoadRunner来测试BEA TUXEDO 

        1. LoadRunner的虚拟用户 

        LoadRunner使用虚拟用户(Virtual users)来模拟实际用户对业务系统施加压力。虚拟用户在一个中央控制器(controller station)的监视下工作。如下图所示。 



        在做一个测试方案时,要做的第一件事就是创建虚拟用户执行脚本。LoadRunner提供了Virtual User Generator来录制或编辑虚拟用户脚本。 

        2. 使用Vugen创建虚拟用户执行脚本 

        A.从菜单中选择运行Virtual User Generator: 



        B.创建一个单协议脚本,选择协议类型为"Tuxedo 7" 



        C.选择工具条中的"  "来录制一个脚本,在弹出的窗口中输入Tuxedo客户机程序的可执行文件名(SimpApp.exe),并选择"Record into Action"为Action。如下图所示: 



        点击"OK"开始录制脚本,这时Vugen就会启动Simpapp.exe,如下图所示,输入WSNADDR,输入字符串(Tuxedo is powerful!)之后,点击TOUPPER,TUXEDO服务器完成请求后把输出字符串(TUXEDO IS POWERFUL!)写到"Output string"中,点击停止录制按钮。



        D.编辑Vuser脚本。我们在C中做的所有操作都被录了下来,记录到一个脚本文件中,其内容如下,我们把它存为simpapp。 



        脚本内容如下: 

    /* This file is generated by LoadRunner. You may edit it carefully! */ 
    #include "lrt.h" 
    #include "replay.vdf" 
    Actions() 

    lrt_tuxputenv("WSNADDR=//172.22.32.25:7110"); 

    lr_think_time(3); 
    tpresult_int = lrt_tpinitialize(LRT_END_OF_PARMS); 
    lrt_abort_on_error(); 
    data_0 = lrt_tpalloc("STRING", "", 1); 

    /* Request STRING buffer 1 */ 
    lrt_strcpy(data_0, sbuf_1); 
    data_1 = lrt_tpalloc("STRING", "", 1); 
    tpresult_int = lrt_tpcall("TOUPPER", 
    data_0, 
    0, 
    &data_1, 
    &olen, 
    0); 
    /* Reply STRING buffer 1 */ 
    lrt_abort_on_error(); 

    lrt_tpfree(data_0); 
    lrt_tpfree(data_1); 
    lrt_tpterm(); 

    return 0; 


     

        代码中加粗的函数是LoadRunner对TUXEDO函的二次包装。 
        E.点击工具栏中的"  "按钮来执行我们刚才录制的脚本,确保执行无误。 


        3. 使用控制器(Controller)来调度虚拟用户 


        A.从菜单中选择运行Controller: 





        B.创建一个新的Scenario,选择刚才录制的脚本(simpapp): 





        点击"OK",弹出Scenario调度界面,如下图所示。在"Quantity"中输入100,表示使用100个虚拟用户。(虚拟用户与购买的LICENSE有关联)  





        C.点击"Edit Schedule"来编辑压力调度。 






        D.选择"Runtime settings"来作运行时设置 





        在Pacing的设置中,"Number of Iterations"用于设置Vusers的Actions被执行的次数;"Start new iteration"用于设置调度器在什么时机迭代执行Vusers的Actions。 




        "Think Time"用于设置Vusers的反应和思考时间,以尽量做到和正常人一样来施压。"Ignore think time"表示忽略思考时间,这是理想状态,一般不使用。"As recorded"表示按照录制时的实际操作时间。"Multiply recorded think time by"表示Vusers的思考时间是实际录制时间的若干倍。 




        在"Miscellaneous"中设置一些杂项,如使用进程还是使用线程等。对于TUXEDO,好象只能选进程模式。 

        E.选择"Start scenario"来开始本次压力测试调度。 





        执行结果分析如下: 




        施压时间为5分41秒,Vusers数量为100,一共完成的Actions交易数量为5625笔,平均响应时间为5.561秒,TPS为17.8 

        二、如何使用LoadRunner来测试BEA Weblogic Server 

        在本例中,我们将创建一个WebApp(toupper.war),用于调用TUXEDO的TOUPPER服务。为了达到这个目的,需要在Weblogic Server上创建一个WTC服务器,导入TOUPPER服务,同时在Weblogic Server部分一个EJB(toupper.jar),用于封装TOUPPER服务。在TUXEDO一端,需要配置TDOMAIN网关。 

        部署toupper.war和toupper.jar,测试toupper.war,得如下界面: 




        点击"TOUPPER",得如下界面: 




        这表明WTC、Webapp和EJB都工作正常。 

        1. 录制Weblogic Server测试脚本 

        A.在Virtual User Generator中选择创建一个新脚本,选择Single Protocol scrīpt,选择Web(HTTP/HTML),点击OK。 





        点击"  "开始录脚本,在URL中输入http://jq:7001/toupper/jsp1.jsp,点击OK。 


        执行一次TOUPPER操作,停止录制。得如下脚本: 





        执行一次TOUPPER操作,停止录制。得如下脚本: 





        点击" ",作一次运行测试,确保脚本执行无误。 

        2. 使用控制器(Controller)来调度虚拟用户 

        使用与TUXEDO一样的调度策略,创建100个虚拟用户,以线程的方式来给 





        http://jq:7001/toupper/jsp1.jsp链接加压,一共处理了5429笔交易,TPS为17.8。平均每秒点击次数为29.34次,测试报表如下: 

     
492/3<123>
Open Toolbar