我看到了全世界最好看的眼睛。 揉眼睛的手还有双眼皮。

发布新日志

  • 软件配置管理工具列表大全

    2008-05-05 15:50:20

    Rational ClearCase
    自动追踪每一个文件和目录的变更情况,通过分支和归并功能支持并行开发。在软件开发环境中,ClearCase可以对每一种对象类型(包括源代码、二进制文件、目录内容、可执行文件、文档、测试包、编译器、库文件等)实现版本控制。因而,ClearCase提供的能力远远超出资源控制,并且可以帮助团队,在开发软件时为他们所处理的每一种信息类型建立一个安全可靠的版本历史记录。其中包括提供版本控制、工作区管理、Build管理及流程管理几个部分。
    网址:http://www-306.ibm.com/software/rational/

    Borland StarTeam
    是企业级解决方案,具备强大的综合项目管理能力,能够提供一个高度集成的环境,实现控制文件版本、管理需求和变更、追踪缺陷和线程化的讨论、对项目管理所需任务进行管理,从而提高了开发过程中对软件资产和软件问题的跟踪和管理能力。与其它同类产品相比,StarTeam还具备可定制工作流功能、良好的可扩展性、支持多种客户端接入方式等优势。
    网址:http://www.borland.com

    Visual SourceSafe
    Visual SourceSafe版本控制软件通过将项目管理的任务和源代码的控制结合起来,解决了这个问题。以注重在管理源文件的同时管理项目,Visual SourceSafe提供了对该问题的优秀的解决方案,是用标准的、面向文件的来源控制系统不易实现的。
    网址:http://www.microsoft.com

    Telelogic Synergy
    Telelogic SYNERGY是Telelogic工具家族中的变更和配置管理工具。Telelogic SYNERGY为您公司的软件开发资产提供生命周期控制,帮助您加速开发先进系统和软件,并且提高产品质量。它负责维护软件资产集成的中央数据库以及所有相关的项目、任务、过程及人员信息。软件变更和配置管理使改进开发过程、加速开发周期、最大化生产力(不受团队规模和人数的影响),并且通过自动化和重用来最小化费用成为可能。
    网址:http://www.telelogic.com

    CVS
    是Concurrent Versions System的简称。是一个基于Web的协同软件开发环境,为软件开发而设计的。其中包括:代码版本控制(CVS)、邮件列表、事件和漏洞跟踪、可定制的项目页面、基于网站的、安全的环境、公共或者个人项目、简化的项目和邮件列表管理。
    网址:https://www.cvshome.org

  • QTP总结

    2008-04-29 09:11:30

    摘抄自:http://www.51testing.com/?38579/action_viewspace_itemid_80837.html

    1、拆分语句split
    例:取得当前日期后拆分
    riqi=date()
        my=split(riqi,"-")
        riqi=my(1)&"月"&my(2)&"日"
        datatable("riqi",DtGlobalSheet)=riqi
        本地表:DataTable("a", dtLocalSheet)
    riqi= year(date)& "-" & Right("0"& month(date),2) & "-"&Right("0"&   Day(Date),2)

    2、取得表格中某行某列的值GetCellData
    例:飞机票取票价
    shuA=Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebTable("New York to Zurich").GetCellData(3,3)


    3、取距某年某月某日的天数datediff
    例:计算距2008-08-08奥运天数
    datediff("d",now,"2008-8-8")


    4、描述性编程text:=
    例:取得某页面上某文字的链接
    Browser("").Page("").Link("text:=娱乐").Click
         或
         neirong="娱乐"
         Browser("").Page("").Link("text:="&neirong).Click


    5、网页中HTML编辑器的录制
    功能:验证126邮箱的发信功能正确
    操作步骤:
          a.录制脚本,动作包括整个发信的过程。
          b.修改脚本,在输入信件主题代码后加wait 10语句
           c.回放脚本,观察在邮件正文中输入的内容,回放时QTP是否写入
          d.重新修改脚本,保证回放时QTP在邮件正文中写入内容

    英文解决方案:
        Browser("网易126免费邮--你的专业电子邮局").Page("网易电子邮箱 - xueqinzhaoqing@126.co").Frame("indexFrame").WebEdit("subject").Click
        wait 1
         Setting.WebPackage( "ReplayType")=2      '配置使用浏览器事件或鼠标运行鼠标操作的'方式.1 - 使用浏览器事件运行鼠标操作,2 - 使用鼠标运行鼠标操作。
         Set ōbj=createobject("wscrīpt.shell")
         obj.sendkeys "{TAB}"
         wait 2
         obj.sendkeys "abc1111"
         wait 1
         Setting.WebPackage( "ReplayType")=1
    中文解决方案

    strCopy = "软件测试." 
    Set ōbjIE = CreateObject("InternetExplorer.Application") 
    objIE.Navigate("about:blank") 
    objIE.document.parentwindow.clipboardData.SetData "text", strCopy 
    objIE.Quit

    wait 1
    Setting.WebPackage( "ReplayType")=2
    Set ōbj=createobject("wscrīpt.shell")
    obj.sendkeys "{TAB}"
    wait 2
    obj.sendkeys "^v"
    wait 1
    Setting.WebPackage( "ReplayType")=1

    6.使用Multi Test Manager添加文件时可以直接往里拖的哦。

    7.函数:新建记事本,改名为public.vbs例:
       function ZHIRSS
    ZHIRSS="RSS行业资讯分类维护"
    end function
      使用语句executefile "d:\zhaopin\case\denglu.vbs"或设置QTP test/settings/resources/+函数目录

    8.设置动作循环:右击/actiong call properties/run on all rows

    9.设置动作允许被调用:右击/action properties/general/reusable action打勾

    10.QTP与MTM连接:Tools/option/run/allow other mercury products to run...

    11.插入已存在的动作1)insert/call to copy of action...复制可修改
                       2)insert/call to existing of action...复制不可修改

    12.QTP报告自动跳出设置:Options>Run>View results when run session ends

    13.判断表格是否存在:
    If Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").Exist then
    reporter.ReportEvent 0,"pass","系统显示了所有的资讯列表!"
    else
      reporter.ReportEvent 1,"fail","系统没有显示资讯列表!"
    end if

    14.获取表格行数:Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").RowCount

    15.注释脚本存在位置:qtp/dat/ActionTemplate.mst

    16取本地文件名称Function ShowFileList(folderspec)
       Dim fso, f, f1, fc, s
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set f = fso.GetFolder(folderspec)
       Set fc = f.Files
       For Each f1 in fc
          s = s & f1.name
          s = s &   "  "
       Next
       ShowFileList = s
    End Function
    wenjian=ShowFileList("D:\下载\本地下载1\")

    17.取本地文件删除:del= DeleFile("D:\下载\本地下载1\")
    Function DeleFile(folderspec)
       Dim fso, f, f1, fc, s
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set f = fso.GetFolder(folderspec)
       Set fc = f.Files
       For Each f1 in fc
             f1.delete
       Next
    End Function

    18.sousuo2=Browser("Browser").Page("Page_4").Check (CheckPoint("2007-11-08 14:21"))
    If (sousuo2)eqv(true) Then
        reporter.ReportEvent 0,"",""
    else
       reporter.ReportEvent 1,"",""
    End If

    19.取参数化数据的行数,只在某几行进执行某些语句
    row=datatable.GetSheet(3).getcurrentrow
    If row = 3 Or row = 4 Then

    20.单选框置灰zhihui=Browser("下载中心--新增下载文件").Page("下载中心--新增下载文件_4").WebRadioGroup("downloadType").GetROProperty("disabled")
    If  zhihui=1 Then
    End If

    29.取树结构
    Set Desc=descrīption.create
    Desc("micclass").value="WebTable"
    Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
    yuqi=List(0).GetROProperty("innertext")
    msgbox yuqi
    yuqi=split(yuqi," ")
    msgbox yuqi(1)

    30.关闭所有IE
    SystemUtil.CloseProcessByName("iexplore.exe")

    31.创建action template.
        当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用action template
        来实现最简单快捷。
        方法:用记事本等文本编辑器,输入如下类似的内容:
              'Company: xxxx
              'Author: xxx
              'Product: xxx
              'Date: xx
             然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。

    32.启动IE的语句:SystemUtil.Run "iexplore.exe", "http://www.***.com"
       关闭IE或其他程序的语句:SystemUtil.CloseProcessByName "app.exe"
         or  SystemUtil.CloseProcessByWndTitle "Some Title"

    33.获取图片的名称
    ObjectName = Browser(…).Page(…).Image("Find").GetProperty("Name")

    34.检查某个对象是否存在,如果存在弹出对话框说明对象存在。
    If Browser("Browser").Page("Page").Applet("login.html").JavaEdit("username").Exist Then
    MsgBox("The object exists.")
    End if

    35.同步点
    Browser("数商3.0制作平台").Dialog("Microsoft Internet Explorer").WaitProperty "visible", True, 120000
    设置test/test settings/object synchronizationg timeout 一致

    36.视图框显示为乱码时:调整原页面编码,在QTP/tools/change active screen

    37.添加附件:
       Browser("**").Page("**").WebFile("filePath").Click
    Browser("**").Dialog("**").WinEdit("文件名(N):").Set "D:\**.jpg"
    Browser("下载中心--新增下载文件").Dialog("选择文件").WinButton("打开(O)").Click
    添加相应的对象


    38.在图片上右击添加:tools/web event recording configuration/custom settings
    webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
    webdlement/event/add/onclick,onmousedown,onmouseup/listen always

    39.数据执行保护
      方法一、右击我的电脑/高级/性能/设置/数据执行保护/为除下列选定程序之外的所有程序和服务启用DEP/添加被保护的程序。
      方法二、C:/BOOT.INT修改noexecute=alwaysoff

    40.在图片上右击添加:tools/web event recording configuration/custom settings
    webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
    webdlement/event/add/onclick,onmousedown,onmouseup/listen always

    41.去掉前后空格
    If trim(mingcheng)=trim(yuqi) Then

    42.分类树问题解决
    Set Desc=descrīption.create
    Desc("micclass").value="WebTable"
    Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
    yuqi=List(0).GetROProperty("innertext")
    msgbox yuqi
    yuqi=split(yuqi," ")
    msgbox yuqi(1)


    43.引用自定义环境变量
    Environment.LoadFromFile "D:\询价\case\环境\huiyuan.xml"

    44.环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))
    例如:在桌面建立一个Var.xml,如下
    -<Environment>    //以这个开始的内部都是定义环境变量,直到以</Environment>结束
    - <Variable>                           // 变量定义起始标识
                     <Name>aa</Name>               // 变量名称
                     <Value>11</Value>               // 变量值
            </Variable>                            // 变量定义结束标识
    - <Variable>
                     <Name>bb</Name>
                     <Value>22</Value>
            </Variable>
    - <Variable>
                     <Name>cc</Name>
                     <Value>33</Value>
                  </Variable>
      </Environment>
    然后导入本测试的环境变量文件中,在专家视图里编写下面的脚本代码:
    Dim aParam3
    aParam3=Environment.Value(“aa”)          // 调用环境变量
    msgbox aParam3
    运行测试,会输出”11”

    45.在HTML编辑器中写入数据
    用低水平录制写入编辑器过程,增加编辑部器前的对象,加入click事件,再用TAB
    例如:
    Browser("广告管理").Page("广告管理").WebEdit("descrīption").Click
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type mictab
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type "aaa"

    46.Browser("creationtime:=1").close
       两个页面title相同无法识别时使用描述必编辑
        Browser("creationtime:=1").page(title:=****).WebEdit("name:=***").Set "***"
        或Browser("creationtime:=1").page(index:=1).WebEdit("index:=0").Set "***"

    47.场景恢复:
       当某些提示框会在不定期时有提示时,如果自动点击确定或某些按钮
       1、tools/recovery scenaril manager,制作相应的提示框和要点击的按钮,并保存
       2、test/settings/recovery,添加刚保存的.qrs

    48.输入验证码,先提示一个输入框,在输入框内输入验证码,点击[确定],把输入的验证码框
       Dim a
      a = InputBox("输入名字")

    49.对象库中对象名称不分为_2,_3...设置:tool/options/web/page/fram options/
         crate a new page test object for为different test object descrīptons
         crest a new frame test object for为different test object descrīptions

    50.验证测试输入框输入的最大允许字数功能的正确

    QTP脚本代码中编写
    Set aa=Browser("Browser").Page("Page").Frame("main").WebEdit("PayTypeName")
    if konglen(aa,20) eqv true then
    reporter.ReportEvent 0,"添加支付方式,支付方式输入框允许输入的最大字符功能正确",""
    else
    reporter.ReportEvent 1,"添加支付方式,支付方式输入框允许输入的最大字符功能错误",""
    end if

    此函数的功能为:验证测试输入框输入的最大允许字数功能的正确,函数可写在public.vbs中
    Function konglen(duixiang,guifanshu)
    duixiang.Click
    wait 1
    Setting.WebPackage( "ReplayType")=2
    Set ōbj=createobject("wscrīpt.shell")
    i=0
    ōld="a"
    xin="b"
    while old<>xin
    ōld=duixiang.GetROProperty("value")
    i=i+1
    wait 0,20
    obj.sendkeys "1"
    wait 0,20
    xin=duixiang.GetROProperty("value")
    wend
    'msgbox i
    If i-1=guifanshu Then
    konglen=true
    else
    konglen=false
    End If
         Setting.WebPackage( "ReplayType")=1
    End Function

    51.超时设置:Setting("DefaultTimeout") =1000000

    52.共享对象库:Set App = CreateObject("QuickTest.Application")
    App.Test.Settings.Resources.ObjectRepositoryPath = "path"

    53.取颜色   browser("b").page("p").Object.currentStyle“:.color
    54.显示行号设置:Tools- --> Editor Options...-->General-->Show line number,


    55.不同数据库检查点手动SQL写法
    QTP插入数据库检查点,手动指定SQL语句的写法。
    一、SQL Server格式(本地无需安装SQL Server)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER=SQL Server;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名

    实例:
    DRIVER=SQL Server;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork

    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名

    实例:
    DSN=LocalServer;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork

    3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)
    source(SQL语句):
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM dcwork.dbo.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME


    二、DB2格式:(本地至少安装DB2 Run-Time Client Lite)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER={IBM DB2 ODBC DRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;

    实例:
    DRIVER={IBM DB2 ODBC DRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;

    实例:
    DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    3.SQL语句实例
    source:SQL语句
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DB2ADMIN.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME


    三、Oracle格式:(本地需要安装Oracle ODBC DRIVER)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER={Oracle in OraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;

    实例:
    DRIVER={Oracle in OraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;



    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    实例:
    DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    3.SQL语句实例
    source:SQL语句
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DCWORK.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME



    四, mysql
    Set Conn = CreateObject("ADODB.Connection" )
    str="DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.1.100;DATABASE=wp_blog;user id=zzz ; password=123456"
    Conn.open str
    Set Rs = CreateObject ("ADODB.Recordset" )
    sql = "select * from `wp_blog`.`blg_webcategory` limit 0, 5000;"
    Rs.open sql,conn,1,3
    If (not Rs.eof) then
    Rs.MoveFirst
    MsgBox Rs(0)
    MsgBox Rs(1)
    MsgBox Rs(2)
    MsgBox Rs(3)
    end if

    Rs.close
    Set Rs = Nothing
    Conn.close
    Set Conn = Nothing
    (转载于 http://bbs.51testing.com/thread-42921-1-1.html )

    五. access

    Set Conn = CreateObject("ADODB.Connection" )
    str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/db1.mdb"
    Conn.open str
    Set Rs = CreateObject ("ADODB.Recordset" )


    56.*.xml
    Environment.LoadFromFile "D:\新建文件夹\a.xml"
    Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set Environment("HuiYuanB")

    57、类似时间控件,不能手到输入的文本档
       1)手工添加对象,
       2).object.value="2008-4-12"

  • WEB测试大纲

    2008-04-16 17:01:02

    WEB测试大纲

    1. 功能测试

       根据需求说明书进行,不多说了。

    2. 性能测试

       使用LR的情况较多。

    3. 安全测试

       SQL注入、跨站点脚本攻击、Cookies测试等,还要注意客服端与服务器端内容传输是否安全,是否使用了加密形式进行传输。

    4. 界面测试

       界面是否美观,这个目前不知道怎么来衡量,只能凭个人审美观念来了。

       另:在网速不好的情况下,页面会显示什么,图片显示“x”,还是有固定图片替换,原本有图片的链接处,显示的文字是否正确,等等。。。。

    5. 兼容性测试

       不同的IE版本,不同的浏览器,甚至安装插件也会有影响。

    6. 易用性测试

       也是个目前标准较少的测试。

    7. 本地化测试

       这个一般大公司才用,简单的说,就是可以根据机器中的设置自动判断显示的语言。

  • 没有文档如何确定测试需求

    2008-04-14 14:39:42

    相信做测试的大部分朋友都有同感,在很多时候,我们都要面临没有文档或文档混乱,残缺的系统进行测试,而这时往往距离系统提交的时间只有几周了。那么,这时我们应该如何确定测试需求呢?先放下心中的愤懑,让我们讨论一下。

       对一个系统而言,就算是你对它一无所知,仍然可以对界面和普通功能点进行测试,比如添加,删除等。但这对一个系统而言是远远不够的,是否实现它预期的需求才是测试工作的重心。如果不是因为时间的限制和这个系统的提交不需要你负责,你要坚持你自己的意见,而不是听从所谓的功能基本都实现了。  

        首先,去发现需求。这时你要把自己想象成一个侦探。所测试的这个系统现在它要满足什么需求,并以此建立这个时间的测试需求版本。实际上,系统的开发也许已经经过了几个版本了,每个版本都有实现的需求,有些很重要,有些次之。现在,你是要尽可能的全部找出它们。

    第一步:收集数据。

        1、阅读文档。如果你手头还是有一些文档,不管它的版本是多么老或者残缺不全都比没有要好,它总会给你提供一些需求的线索。也可从用户手中得到的一些用户文档或发行的媒体文件。一般用户在系统设计之初都会给当时的调研人员留下一些纸制或电子类的文档以表述他们的系统需求期望。如果你的项目经理已经遗失了这些资料,用户那里一般也有备份。但你需要一种婉转的方式去询问,以免给用户造成系统是否不能正常完成的印象。这些可以帮你对这个系统总体来说应该要满足那些重要的功能提供资料。

        2、检查系统的体系结构。找一些对这个系统体系结构比较了解的人解释给你,并告诉你为什么系统是这样的体系结构。我们常常能从定义系统能力的最高层的限制中发现一些薄弱的连接。如果你本身就有一些系统体系结构方面的知识,这方面的工作应该不是很困难。

        3、执行程序。检查程序的执行,在每一个页面中检查功能是否能够全部实现,在此可以找出它是否存在一个上一个结点和下一个结点。做上记录。然后根据页面的标题和节点之间的逻辑推理,可以大致判断出有几个业务流,它们涉及哪些相关节点。哪些页面之间存在数据联系。

        4、询问开发者。这是一个比较头痛的问题,如果开发人员正忙于赶工期,他们对你的轻视可能导致你的询问很难有所成效。所以,你要尽量的提问得仔细,问题最好用是这样或不是这样回答,以免因为他们不想对你解释太多而敷衍你。所以,你要尽可能的做好前面的工作,而不是依赖于开发人员。首先,你需要在项目经理那里得到开发人员所做的模块清单。哪些模块被几个开发人员同时操作,找出现在的负责人。然后,整理出自己所知道的模块信息,与开发人员交流。如果你对这件事感到委屈,那么至少有两个方面你需要加强,一是学会善于沟通,与开发人员相处融洽。二是努力学习,获得足够的知识与开发人员平等交谈。

        5、询问项目经理

       项目经理是一个能给你提供自己最大帮助的人,因为这个测试可能往往就是他要求的。你在那里尽可能的去找出有关系统的信息和资料。如果他不配合你,那么这个系统可能存在着某些巨大的问题导致也许根本无法交付。所以你需要花更多的时间来做工作。

       当你找到这些需求资料时,你应该没有责备过任何一个人,因为在那个时候,他们做了他们的工作,你不能去要求人们以前应该做什么。现在你拥有的优势超过了项目中的其他人,你不需要被他们的假定迷惑。你可以更客观的去看待这个系统,并且比较它和设计的初衷有什么不同。

    第二部,将资料转化为系统需求。

        现在你有一些经过整理的材料,可以将它们转变为需求了。每个一个功能在不同的人那里可能有不同的说法。当你浓缩它们并定义它们这些说明的价值将变得非常清晰。我们想确定每一个说明的本质。这说明是否相关角色,特性或功能?

        首先确定你能够安排的工作时间,根据时间按主要和次要安排需求。然后可按以下步骤来整理:

        1、确定系统拥有多少角色(业务),他们负责什么样的工作,在系统中体现在那些模块中。然后画出这些角色的用例,或者他们涉及的业务。一般来说,系统很少有角色会全程做完一个业务流程。你可以先把每一个角色所做的每一个功能点列出来,然后再将它们放到一个完整的业务流中去。或者先画出整个的业务流,然后再分配给角色。最后你能得到一个完整的图,它包含整个系统所有业务流程,并且有哪些角色在某个节点上能够做哪些操作(拥有哪些权限)都非常的了然,这将是你测试的重点。

        2、确定系统管理员的工作内容,系统管理员一般对系统进行初始设置,角色定义,业务流定义等重要操作。

        3、确定系统的数据流动,包括系统的内部模块间数据流动(可结合系统角色图)和系统间的数据流动接口,在这些地方一般都比较容易出问题。

        4、确定公共部分需要测试的需求。系统中有一些部分为很多角色所共同拥有并且不涉及业务流程。将这部分内容整理,一般来说这些内容只会涉及界面和普通功能的测试,如定义系统界面风格。

        5、确定系统的使用情况。系统有多少用户,稳定运行要求至少多少时间,什么时候会出现系统使用高峰期,高峰期的特点。系统对未来几年内的用户和数据增长是否提供足够的可扩展空间。

        6、系统的安全确定。系统运行的环境要求什么样的安全级别,有什么具体要求。如:访客是否能访问到只有用户才能访问的功能;一个角色是否越权访问他不能访问的角色。系统是否存在没有指向的链接页面作为后门(这个比较难)。等等。

        7、使用该系统的用户可能的硬,软件环境,比如机器类型,操作系统,常用软件等。

        8、其他系统要求确定的需求。

        做完这些工作后,你可以开始设计你的测试用例了。也许仍然存在你不知道的情况,但你可以确定它没有表现在系统的可视范围内。

     

  • QTP描述性编程原理介绍

    2008-04-07 11:53:05

    QTP的工作原理有点类似人类社会的某些场景.比如一个朋友委托你带东西给A,如果你认识A,这表明A的容貌特征以及一些联系已经在你脑海有了印象,那么你只要找到了A的住所,那么这个任务就很容易完成了,如果你根本就不认识A,则这个任务就很难完成了.
        
    那在QTP中有没有一种方法,无须在对象库中记录任何关于某个对象的信息,就可以完成对该对象的操作呢,.那就是描述性编程,其工作原理就象上面这个例子.
        
    QTP,有一按钮对象,对它的操作如下:
          Dialog("Login").WinButton("OK").Click
        
    但是如果我们在对象库中删除这个对象后,执行这句话就会出错,提示找不到对象,在这个时候,我们就可以通过描述性编程给他指定对象及其他的一些属性,修改如下
          Dialog("Login").WinButton("text:=OK").Click
        
    上面脚本中,通过WinButton("text:=OK")明确告诉QTP去寻找文本属性为OK的按钮,于是QTP正确识别到该对象,顺利的执行了脚本
        
    这种不需要在对象库中存储对象的信息,就可以执行对象操作的方法,就是QTP中比较高级的用法:描述性编程(descrīptive progamming).描述性编程和传统的QTP脚本的区别是:他把需要识别的对象的属性从对象库中转移到了脚本里面,通过在脚本里面的特殊语法格式.来告诉QTP识别对象的方法.描述性编程更加灵活,因为他不需要经过录制这个步骤,可以直接通过编程的方式操作任何一个你想操作的对象,只要你在测试脚本代码里提供给QTP识别该对象的足够信息
        
    描述性编程的语法格式如下:
          micClasas("property1:=value1","property2:=value2")
          micClass
    标志某个对象的类别,括号里面通过jproperty:=value的形式告诉QTP识别该对象的必要属性.我们继续修改一下测试脚本:
          Dialog("Login").WinButton("text:=OK").Click
        
    修改后:
          Dialog("Login").WinButton("nativeclass:=Button","text:=OK").Click

          F5
    执行,结果运行顺利.这次修改,我们使用了一个通用的对象类WinObject,而把按钮当作一个基本属性nativeclass:=Button,同样可以完成对该按钮的操作
        
    由上面的叙述我们可以看出来,描述性编程没有严格的要求,只要遵循一个原则:在代码中告诉QTP足够他识别该对象的属性,QTP就可以不通过对象库,而是通过描述性编程的方式完成对指定对象的操作.所以描述性编程没有什么神秘的,他无非是把原来存储在对象库中的信息提到代码中来了而已.
    ------

    QTP
    工作原理:
        1.
    录制的时候,QTP将我们操作过的所有对象都记录下来,保存在对象库object repository,记录的形式是一个逻辑名加上若干识别属性
        2.
    运行脚本时,QTP分析该脚本要执行那个对象的操作,然后根据该语句中的逻辑名,在对象库中查找该对象的详细记录,然后在运行的真实披头散发软件中按图索骥,找到需要操作的对象,把语句规定的操作施加在该对象上.施加的主要动作就是把操作的相关消息时间放入到该对象窗口的消息循环队列中
          3.
    所以,一个完整的脚本测试应该包括两部分,一个是测试脚本的代码,一个是对象库

  • QTP8.2及Java-addin插件的安装与破解心得

    2008-04-02 14:56:55

    QTP8.2及Java-addin插件的安装与破解心得
    2008-02-25 17:43

    离开原来的公司后,来到一家做电信业务的公司.开始了新的工作,由于种种原因已经有很长的时间没有写我的Blog了.今天组长让我把QTP8.2及Java-addin插件装好,当时就有点晕了,插件重来都没有装过,哎,没办法也要搞定它,查一下资料,终于在花了一个上午的时间,终于搞了,现将这个安装过程记录下来,,以便增强记忆.

    安装过程:

    1.安装QTP8.2,当然注册码这些东东在网搜一下就能够找到.(xxxx-xxxxxxxxxx)

    2.安装Java-addin插件,插件有时候安装会出现错误(1607:InstallShield scrīpting Runtime),原因很多参考这里(http://support.microsoft.com/kb/888019/zh-cn),搞不懂具体遇到再说吧.这个插件的下载地址很多的,就先看看吧[net addin(http://esd.mercury.com/akdlm/trial/qtp/QTP82-net-addin.zip)] [java addin (http://esd.mercury.com/akdlm/trial/qtp/QTP82-java-addin.zip)]前面一个是dotnet的插件,不管它的.下下来装了再说...

    3.安装QTP82Java65UPGRADE (http://www.rapidtesting.cn/bbs/attachments/QTP82Java65UPGRADE.zip)这个东东装了之后呢,并不一定就可以用了,如果这个时候你运行QTP它显示这个插件只有14天的试用期限或是显示没有找到监听.这个是很正常的.如果这样就行了话,那么下面一步就没有什么意义了.

    4.使用QTPo.exe覆盖到安装文件中。file:\*****\QuickTest Professional\bin.但是这个文件说好找也好找,说难找也难找,我找了很久终于在51论坛里找的.下载地址 (http://bbs.51testing.com/attachment.php?aid=29598),这样就可以了,

    当然在安装的过程中提示需要重启的地方最好是重启比较好,否则有可能会出现意想不到的错误.

    好了,在此祝大家工作愉快,`````(:

    **摘自:**
    http://hi.baidu.com/loneywang/blog/item/ef5f2c447970c786b2b7dca8.html

  • 六种能帮你清扫油脂的食物

    2008-04-01 09:29:09


    茶中含有大量的食物纤维,而食物纤维不能被消化,停留在腹中的时间长了,就会有饱饱的感觉。更重要的是它还能燃烧脂肪,这一作用的关键在于维生素B1。茶中富含的维生素B1,是能将脂肪充分燃烧并转化为热能的必要物质。

    洋葱
    含前列腺素,有舒张血管、降低血压功能,还可预防动脉粥样硬化。大蒜所含大蒜精油具有降脂效能。大蒜所含硫化合物的混合物可减少血中胆固醇,阻止血栓形成,有助于增加高密度脂蛋白,保护心脏动脉。

    燕麦
    燕麦含极丰富的亚油酸和丰富的皂甙素,可降低血清总胆固醇、甘油三脂和β-脂蛋白,防止动脉粥样硬化。
    由于燕麦含有丰富的可溶性纤维和蛋白质,所以能给人饱腹感,这当然也就可以帮助你抑制食欲。


    鱼是一种高慢白低脂及食品,含有人体必需的多种不饱和脂肪酸,具有抑制血小板凝集和降低胆固醇的作用,并可健脑益智。
    吃鱼有益健康,既滋补又可美容健身。这只是传统说法,营养师告诉我们:常吃的鱼中有不少脂肪含量极高,堪称“减肥杀手”。

    菊花
    有降低血脂的效能和较平稳的降血压的作用。在绿茶平稳的降血压的作用。在绿茶中掺杂一点菊花对心血管有很好的保健作用。
    菊花不仅有观赏价值,而且药食兼优,有良好的保健价值.

    玉米
    含有丰富的钙、硒和卵磷脂、维生素E等,具有降低血清胆固醇的作用。印第安人向乎不患高血压、冠心病,主要得益于主食玉米。
    巧做玉米汤减肥:玉米“汤”具有利尿效果,特别是用于水肿性肥胖。何谓容易水肿?就是,你每天睡醒会觉得脚和脸,及身体都有肿胀的感觉,那就是你的代谢不够好,还有就是你平常上厕所的次数,比一般人还少,这样你就容易水肿

  • 催熟西红柿与正常西红柿的区别

    2008-04-01 09:08:57

    现在一年四季都有西红柿,我想知道什么样的西红柿就是被催熟的?

       催熟的西红柿在性质上和未熟的西红柿一样,它的最终营养成分尚未形成。而且,此时西红柿内有毒的番茄碱含量最高。番茄碱对中枢神经系统有干扰作用,对人体有害无益。

        催熟西红柿与正常西红柿的区别

        1、催熟西红柿多为反季节上市,其特点是无论大小全是红的,而自然成熟的西红柿在柿蒂周围仍有些绿色。

        2、催熟的西红柿手感很硬,自然成熟的西红柿手感则较软。催熟的西红柿外观呈多面体,成熟的西红柿圆滑。

        3、最直接的鉴别方法是把西红柿掰开看一看,自然成熟的西红柿籽粒是土黄色,肉质红色、起沙、多汁,而催熟的西红柿往往是皮红籽绿,或者尚未长籽,皮内发空,果肉无汁、无沙。

        4、成熟的西红柿口感好,有酸甜感,催熟的西红柿无酸甜感,反而发涩,这就证明有番茄碱存在。
  • 回归测试的策略

    2008-03-31 13:47:13

    我们在做回归测试的时候可以采用不同的策略.

    策略(1) 可以选择完全重复测试.把所有的测试用例,全部再完全的执行一边,以确认问题修改的正确性和修改后周边是否受到影响.缺点是由于要把用例全部执行,所以会增加项目成本,也会影响项目进度.所以很难来完全执行,所以引出了回归测试策略(2) 选择性重复测试.

    策略(2) 可以选择性重复测试.可以选择一部分进行执行,以确认问题修改的正确性和修改后周边是否受到影响.那么我们怎样去选择用例呢?这里有三个方法:1.覆盖修改法 针对发生错误的模块,选取这个模块的全部用例进行测试.这样只能验证本模块是否还存在缺陷,但不能保证周边与它有联系的模块不会因为这次改动而引发缺陷.所以引出第2个方法,即2.周边影响法.除了把出错模块的用例执行之外,把周边和它有联系的模块的用例也执行一边,保证回归测试的质量.当然我们还可以用量化的角度去分析模块的质量,比如:经过上面的一系列回归测试后,看看遗留的缺陷率是否已经在允许的范围之内了,那么我们以此为标准可以结束本次回归测试.也就是我要提到的第三个方法 3.指标达成法.

       回归测试的流程

    1.在测试策略制定阶段,制定回归测试策略

    2.确定回归测试版本

    3.回归测试版本发布,按照回归测试策略执行回归测试

    4.回归测试通过,关闭缺陷跟踪单

    5.回归测试不通过,缺陷单返回开发人员.等重新修改,再次做回归测试.

  • 压力测试和性能的测试的区别

    2008-03-31 09:40:54

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

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

        性能测试
    是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。
    概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;
    比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)


    具体区别与联系Start


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

        性能测试:在交替进行负荷和强迫测试时常用的术语。性能测试关注的是系统的整体。它和通常所说的强度、压力/负载测试测试有密切关系。所以压力和强度测试应该于性能测试一同进行。
        举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试。

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

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

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


    End



  • 压力测试和性能的测试的区别

    2008-03-31 09:40:52

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

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

        性能测试
    是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。
    概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;
    比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)


    具体区别与联系Start


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

        性能测试:在交替进行负荷和强迫测试时常用的术语。性能测试关注的是系统的整体。它和通常所说的强度、压力/负载测试测试有密切关系。所以压力和强度测试应该于性能测试一同进行。
        举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试。

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

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

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


    End



  • sql注入,中文处理方法

    2008-03-28 17:02:55

    在注入中碰到中文字符是常有的事,有些人一碰到中文字符就想打退堂鼓了。其实只要对中文的编码有所了解,“中文恐惧症”很快可以克服。

    先说一点常识:

    Access中,中文的ASCII码可能会出现负数,取出该负数后用abs()取绝对值,汉字字符不变。

    SQLServer中,中文的ASCII为正数,但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()返回unicode值,再用nchar函数取得对应的中文字符。

    了解了上面的两点后,是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意、猜解范围大一点外,方法是没什么两样的。
  • Access与SQLserver函数比较

    2008-03-28 17:01:02

    Access:asc(字符) SQLServer:unicode(字符)
    作用:返回某字符的ASCII码

    Access:chr(数字) SQLServer:nchar(数字)
    作用:与asc相反,根据ASCII码返回字符

    Access:mid(字符串,N,L) SQLServer:substring(字符串,N,L)
    作用:返回字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串

    Access:abc(数字) SQLServer:abc (数字)
    作用:返回数字的绝对值(在猜解汉字的时候会用到)

    Access:A between B And C SQLServer:A between B And C
    作用:判断A是否界于B与C之间
  • SQL和ORACLE函数比较

    2008-03-28 16:05:30

    SQLServer和Oracle是大家经常用到的数据库,在此感谢作者总结出这些常用函数以供大家参考。

    数学函数:

     1.绝对值
       S:SELECT abs(-1) value
       O:SELECT abs(-1) value from dual

    2.取整(大)
       S:SELECT ceiling(-1.001) value
       O:SELECT ceil(-1.001) value from dual

    3.取整(小)
       S:SELECT floor(-1.001) value
       O:SELECT floor(-1.001) value from dual

    4.取整(截取)
       S:SELECT cast(-1.002 as int) value
       O:SELECT trunc(-1.002) value from dual

    5.四舍五入
       S:SELECT round(1.23456,4) value 1.23460
       O:SELECT round(1.23456,4) value from dual 1.2346

    6.e为底的幂
       S:SELECT Exp(1) value 2.7182818284590451
       O:SELECT Exp(1) value from dual 2.71828182

    7.取e为底的对数
       S:SELECT log(2.7182818284590451) value 1
       O:SELECT ln(2.7182818284590451) value from dual; 1

    8.取10为底对数
       S:SELECT log10(10) value 1
       O:SELECT log(10,10) value from dual; 1

    9.取平方
       S:SELECT SQUARE(4) value 16
       O:SELECT power(4,2) value from dual 16

    10.取平方根
       S:SELECT SQRT(4) value 2
       O:SELECT SQRT(4) value from dual 2

    11.求任意数为底的幂
       S:SELECT power(3,4) value 81
       O:SELECT power(3,4) value from dual 81

    12.取随机数
       S:SELECT rand() value
       O:SELECT sys.dbms_random.value(0,1) value from dual;

    13.取符号
       S:SELECT sign(-8) value -1
       O:SELECT sign(-8) value from dual -1

    14.圆周率
       S:SELECT PI() value 3.1415926535897931
       O:不知道

    15.sin,cos,tan 参数都以弧度为单位
       例如:SELECT sin(PI()/2) value 得到1(SQLServer)

    16.Asin,Acos,Atan,Atan2 返回弧度

    17.弧度角度互换(SQLServer,Oracle不知道)
       DEGREES:弧度-〉角度
       RADIANS:角度-〉弧度

    数值间比较:

     18. 求集合最大值
       S:SELECT max(value) value from
       (SELECT 1 value
       union
       SELECT -2 value
       union
       SELECT 4 value
       union
       SELECT 3 value)a

      O:SELECT greatest(1,-2,4,3) value from dual

    19. 求集合最小值
       S:SELECT min(value) value from
       (SELECT 1 value
       union
       SELECT -2 value
       union
       SELECT 4 value
       union
       SELECT 3 value)a

      O:SELECT least(1,-2,4,3) value from dual

    20.如何处理null值(F2中的null以10代替)
       S:SELECT F1,IsNull(F2,10) value from Tbl
       O:SELECT F1,nvl(F2,10) value from Tbl

    21.求字符序号
       S:SELECT ascii('a') value
       O:SELECT ascii('a') value from dual

    22.从序号求字符
       S:SELECT char(97) value
       O:SELECT chr(97) value from dual

     

     

  • SQL注入通过函数来判断数据库类型

    2008-03-28 15:15:00

    SQL注入通过函数来判断数据库类型
    某日,发现一目标存在SQL注入,且过滤了select等相关敏感字段,用工具暂无法判断数据库类型。
    后发现调用某些SQL函数也可判断数据库类型,虽然SQL语句大部分是通用的。但一些内置的函数还是有一定的区别。

    len和length
    在mssql和mysql以及db2内,返回长度值是调用len()函数;在oracle和INFORMIX则是通过length()来返回长度值。
    换句话说。

    当你使用and len('a')=1的时候,返回正常页面时,可以推断当前的数据库类型可能是mssql,或mysql,或是db2。反之则可能会是oracle和informix。

    @@version和version()
    在mysql内,可以用@@version或是version()来返回当前的版本信息。但无法判断是mysql还是mssql时,可以用version()函数来构造判断。
    换句话说:

    version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。

    substring和substr
    在mssql中可以调用substring。oracle则只可调用substr

    SUBSTRING('abc',1,1)=a 返回成功,刚可能是mssql。使用substr('abc',1,1)=a 返回成功,则可能为oracle


    Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1221838

  • 识别测试需求

    2008-03-28 08:59:15

    主动获取需求
    与公司的 技术支持人员交流,技术支持人员是最贴近用户的人,因此,通过交流可以获取第一手的用户使用感受,在测试的过程中会更加贴近用户。

    当拿到相关的资料后,从哪些方面分析需求?如何与开发人员交流需求?其实,只要把握需求分析的几个关键的点就可以解决问题:输入、处理过程、输出、性能要求、运行环境,下面针对每一个项目逐一分析:

     软件输入: 与该需求相关的一切可能输入,可以从这几方面考虑,输入来源、输入参数的数量、输入参数的度量单位、输入参数的时间要求、输入参数的精度和输入参数的有效输入范围。在测试用例设计中,这部分内容作为测试用例输入的依据。

     处理过程: 描述对输入数据所执行的所有操作和如何获得输出的过程。测试人员了解处理过程即可,在测试过程中发现 BUG 时候,如果对处理过程了解的深入,对定位问题根源有很大的帮助。

     软件输出: 描述每个需求的输出结果,包括输出的位置(如计算机显示器、打印机,文件),输出参数的数量、输出参数的度量单位、输出参数的时序、输出参数精确度、输出参数的有效输出范围、错误消息。在测试用例设计中,这部分内容作为测试用例的预期输出。

     性能要求: 与该需求相关的性能要求,比如 “ 插入 ATM 取款卡后, 3 秒钟内弹出提示用户取款的图形界面 ” 。 3 秒钟这一限制,就是对需求的基本性能要求。

     运行环境: 软件的运行所需的环境,包括硬件平台的要求、操作系统的要求、数据库的要求,以及其它相关支撑软件的要求。  

  • 软件测试的几个误区

    2008-03-24 09:12:21

    误区之一:软件开发完成后进行软件测试
    软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试。因此,软件测试贯穿于软件项目的整个生命过程。在软件项目的每一个阶段都要进行不同目的和内容的测试活动,以保证各个阶段的正确性。软件测试的对象不仅仅是软件代码,还包括软件需求文档和设计文档。软件开发与软件测试应该是交互进行的,例如,单元编码需要单元测试,模块组合阶段需要集成测试。如果等到软件编码结束后才进行测试,那么,测试的时间将会很短,测试的覆盖面将很不全面,测试的效果也将大打折扣。更严重的是如果此时发现了软件需求阶段或概要设计阶段的错误,如果要修复该类错误,将会耗费大量的时间和人力。

    误区之二:软件发布后如果发现质量问题,那是软件测试人员的错
    这种认识很打击软件测试人员的积极性。软件中的错误可能来自软件项目中的各个过程,软件测试只能确认软件存在错误,不能保证软件没有错误,因为从根本上讲,软件测试不可能发现全部的错误。从软件开发的角度看,软件的高质量不是软件测试人员测出来的,是靠软件生命周期的各个过程中设计出来的。出现软件错误,不能简单地归结为某一个人的责任,有些错误的产生可能不是技术原因,可能来自于混乱的项目管理。应该分析软件项目的各个过程,从过程改进方面寻找产生错误的原因和改进的措施。

    误区之三:软件测试要求不高,随便找个人多都行
    很多人都认为软件测试就是安装和运行程序,点点鼠标,按按键盘的工作。这是由于不了解软件测试的具体技术和方法造成的。随之软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业。软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,需要掌握和学习很多测试知识。所以,具有编程经验的程序员不一定是一名优秀的测试工程师。软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和不断学习精神。

    误区之四:软件测试是测试人员的事情,与程序员无关  
    开发和测试是相辅相成的过程,需要软件测试人员、程序员和系统分析师等保持密切的联系,需要更多的交流和协调,以便提高测试效率。另外,对于单元测试主要应该由程序员完成,必要时测试人员可以帮助设计测试样例。对于测试中发现的软件错误,很多需要程序员通过修改编码才能修复。程序员可以通过有目的的分析软件错误的类型、数量,找出产生错误的位置和原因,以便在今后的编程中避免同样的错误,积累编程经验,提高编程能力。

    误区之五:项目进度吃紧时少做些测试,时间富裕时多做测试  
    这是不重视软件测试的表现,也是软件项目过程管理混乱的表现,必然会降低软件测试的质量。一个软件项目的顺利实现需要有合理的项目进度计划,其中包括合理的测试计划,对项目实施过程中的任何问题,都要有风险分析和相应的对策,不要因为开发进度的延期而简单的缩短测试时间、人力和资源。因为缩短测试时间带来的测试不完整,对项目质量的下降引起的潜在风险,往往造成更大的浪费。克服这种现象的最好办法是加强软件过程的计划和控制,包括软件测试计划、测试设计、测试执行、测试度量和测试控制。

    误区之六:软件测试是没有前途的工作,只有程序员才是软件高手  
    由于我国软件整体开发能力比较低,软件过程很不规范,很多软件项目的开发都还停留在“作坊式”和“垒鸡窝”阶段。项目的成功往往靠个别全能程序员决定,他们负责总体设计和程序详细设计,认为软件开发就是编写代码,给人的印象往往是程序员是真正的牛人,具有很高的地位和待遇。因此,在这种环境下,软件测试很不受重视,软件测试人员的地位和待遇自然就很低了,甚至软件测试变得可有可无。随着市场对软件质量的不断提高,软件测试将变得越来越重要,相应的软件测试人员的地位和待遇将会逐渐提高。在微软等软件过程比较规范的大公司,软件测试人员的数量和待遇与程序员没有多大差别,优秀测试人员的待遇甚至比程序员还要高。软件测试将会成为一个具有很大发展前景的行业,软件测试大有前途,市场需要更多具有丰富测试技术和管理经验的测试人员,他们同样是软件专家。

  • 深户的好处

    2008-03-11 09:30:53

    深户的好处:

    1、你所享受到的社会保险比非深户的多,比如讲住院方面。女性还可以享受生育保险。如果你单位福利够好,还可以帮你交住房公积金,凭住房公积金,你买房子滴时候可以申请相应额度的低息贷款。还有失业保险,失业以后,可以按照你交失业保险的时间长短来按月领取最低生活费。

    2、失业以后,可以凭单位离职证明,去劳动局办失业证。凭失业证享受免费的再就业培训,及领失业金(即最低生活费)。如果曾经在深圳国企工作过,还可以申请创业免息贷款。

    3、子女问题。子女读书会有相应的优惠待遇。

    所以,各位筒子如果有机会进深户,不要放过。

    当然,如果有机会进香港户口,就更加不要放过了,福利肯定比深圳还好。

  • 测试方案和测试计划的区别

    2008-03-10 14:23:26

    测试方案和测试计划的区别
    一、测试计划:
    对测试全过程的组织、资源、原则等进行规定和约束,并制订测试全过程各个阶段的任务以及时间进度安排,提出对各项任务的评估、风险分析和需求管理。
    二、测试方案:
    描述需要测试的特性、测试的方法、测试环境的规划、测试工具的设计和选择、测试用例的设计方法、测试代码的设计方案。
    三、测试计划是组织管理层面的文件,从组织管理的角度对一次测试活动进行规划。
    四、测试方案是技术层面的文档,从技术的角度度一次测试活动进行规划。
    五、测试计划要明确的内容:
    1、明确测试组织的组织形式
    ○1测试组织和其他部门关系,责任划分。
    ○2测试组织内的机构和责任安排。
    2、明确测试的测试对象(明确测试项,用于后面划分任务,估计工作量等)
    3、完成测试的需求跟踪
    4、明确测试中需要遵守的原则
    ○1测试通过/失败标准
    ○2测试挂起和回复的必要条件
    5、明确测试工作任务分配是测试计划的核心
    ○1、进行测试任务划分
    ○2、进行测试工作量估计
    ○3、人员资源和物资源分配
    ○4、明确任务的时间和进度安排
    ○5、风险的估计和规避措施
    ○6、明确测试结束后应交付的测试工作产品
    六、测试方案的具体内容:
    ○1、明确策略
    ○2、细化测试特性(形成测试子项)
    ○3、测试用例的规划
    ○4、测试环境的规划
    ○5、自动化测试框架的设计
    ○6、测试工具的设计和选择
    七、测试方案需要在测试计划的指导下进行,测试计划提出“做啥”,而测试方案明确“咋做”。
    八、详见测试计划模板和测试方案模板
  • 小贴士

    2008-03-09 14:27:06

    小贴士

    1.IP地址基础知识。
    2.IP地址是由什么机构分配的?
    3.什么是公有地址和私有地址?
    4.为什么会受到网络攻击?
    5.个人用户如何拦截网络攻击?
    6.计算机常用端口一览表。

    1.IP地址基础知识。
      在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。通过IP地址就可以访问到每一台主机。IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开。如某一台主机的IP地址为:211.152.65.112 ,Internet IP地址由NIC(Internet Network Information Center)统一负责全球地址的规划、管理;同时由Inter NIC、APNIC、RIPE三大网络信息中心具体负责美国及其它地区的IP地址分配。
      固定IP:固定IP地址是长期固定分配给一台计算机使用的IP地址,一般是特殊的服务器才拥有固定IP地址。
      动态IP:因为IP地址资源非常短缺,通过电话拨号上网或普通宽带上网用户一般不具备固定IP地址,而是由ISP动态分配暂时的一个IP地址。普通人一般不需要去了解动态IP地址,这些都是计算机系统自动完成的。
      公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
      私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
       以下列出留用的内部私有地址
       A类 10.0.0.0--10.255.255.255
       B类 172.16.0.0--172.31.255.255
       C类 192.168.0.0--192.168.255.255

     
    2.IP地址是由什么机构分配的?
      
    所有的IP地址都由国际组织NIC(Network Information Center)负责统一分配,目前全世界共有三个这样的网络信息中心。
       InterNIC:负责美国及其他地区;
       ENIC:负责欧洲地区;
       APNIC:负责亚太地区。
      我国申请IP地址要通过APNIC,APNIC的总部设在日本东京大学。申请时要考虑申请哪一类的IP地址,然后向国内的代理机构提出。

     
    3.什么是公有地址和私有地址?
      公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
      私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
       以下列出留用的内部私有地址
       A类 10.0.0.0--10.255.255.255
       B类 172.16.0.0--172.31.255.255
       C类 192.168.0.0--192.168.255.255
     
    4.为什么会受到网络攻击?
      据中国公安部消息,公安部2004年全国信息网络安全状况暨计算机病毒疫情调查活动圆满结束,调查表明,中国计算机用户计算机病毒的感染率为87.9%,比去年增加了2%。
      调查表明,中国计算机用户计算机病毒的感染率为87.9%,比去年增加了2%。但是,3次以上感染计算机病毒的用户数量有较大回落,占全部感染用户数量的57.1%,比去年减少了26%,表明受过病毒感染用户的防范能力有所提高。
      2003年5月至2004年5月,中国感染率最高的计算机病毒是网络蠕虫病毒和针对浏览器的病毒或者恶意代码,如“震荡波”、“网络天空”、“尼姆达”、“SQL蠕虫”等。计算机病毒造成的破坏和损失情况比往年有所下降,但针对网络的破坏呈明显上升趋势,特别是一些盗取计算机用户帐号、密码等敏感信息的计算机病毒隐蔽性强、危害性大。
      调查表明,被调查单位发生网络安全事件比例为58%。其中,发生1次的占总数的22%,2次的占13%,3次以上的占23%。发生网络安全事件中,计算机病毒、蠕虫和木马程序造成的安全事件占发生安全事件单位总数的79%,拒绝服务、端口扫描和篡改网页等网络攻击事件占43%,大规模垃圾邮件传播造成的安全事件占36%。54%的被调查单位网络安全事件造成的损失比较轻微,损失严重和非常严重的占发生安全事件单位总数的10%。
      造成网络安全事件的主要原因是安全管理制度不落实和安全防范意识薄弱,其中因未修补、防范软件漏洞等原因造成的安全事件占总数的66%。同时,调查表明信息网络使用单位对安全管理工作的重视程度、落实安全管理措施和采用安全专用技术产品等方面均有所提高和加强,但是用户安全观念薄弱、安全管理人员缺乏培训,以及缺乏有效的安全信息通报渠道、安全服务行业发展不能满足社会需要等问题仍然比较突出。
     
    5.个人用户如何拦截网络攻击?
    ·黑客攻击行为特征分析 反攻击技术综合性分析报告
     
    6.计算机常用端口一览表。

    1 传输控制协议端口服务多路开关选择器
    2 compressnet 管理实用程序
    3 压缩进程
    5 远程作业登录
    7 回显(Echo)
    9 丢弃
    11 在线用户
    13 时间
    15 netstat
    17 每日引用
    18 消息发送协议
    19 字符发生器
    20 文件传输协议(默认数据口)
    21 文件传输协议(控制)
    22 SSH远程登录协议
    23 telnet 终端仿真协议
    24 预留给个人用邮件系统
    25 smtp 简单邮件发送协议
    27 NSW 用户系统现场工程师
    29 MSG ICP
    31 MSG验证
    33 显示支持协议
    35 预留给个人打印机服务
    37 时间
    38 路由访问协议
    39 资源定位协议
    41 图形
    42 WINS 主机名服务
    43 "绰号" who is服务
    44 MPM(消息处理模块)标志协议
    45 消息处理模块
    46 消息处理模块(默认发送口)
    47 NI FTP
    48 数码音频后台服务
    49 TACACS登录主机协议
    50 远程邮件检查协议
    51 IMP(接口信息处理机)逻辑地址维护
    52 施乐网络服务系统时间协议
    53 域名服务器
    54 施乐网络服务系统票据交换
    55 ISI图形语言
    56 施乐网络服务系统验证
    57 预留个人用终端访问
    58 施乐网络服务系统邮件
    59 预留个人文件服务
    60 未定义
    61 NI邮件?
    62 异步通讯适配器服务
    63 WHOIS+
    64 通讯接口
    65 TACACS数据库服务
    66 Oracle SQL*NET
    67 引导程序协议服务端
    68 引导程序协议客户端
    69 小型文件传输协议
    70 信息检索协议
    71 远程作业服务
    72 远程作业服务
    73 远程作业服务
    74 远程作业服务
    75 预留给个人拨出服务
    76 分布式外部对象存储
    77 预留给个人远程作业输入服务
    78 修正TCP
    79 Finger(查询远程主机在线用户等信息)
    80 全球信息网超文本传输协议(www)
    81 HOST2名称服务
    82 传输实用程序
    83 模块化智能终端ML设备
    84 公用追踪设备
    85 模块化智能终端ML设备
    86 Micro Focus Cobol编程语言
    87 预留给个人终端连接
    88 Kerberros安全认证系统
    89 SU/MIT终端仿真网关
    90 DNSIX 安全属性标记图
    91 MIT Dover假脱机
    92 网络打印协议
    93 设备控制协议
    94 Tivoli对象调度
    95 SUPDUP
    96 DIXIE协议规范
    97 快速远程虚拟文件协议
    98 TAC(东京大学自动计算机)新闻协议
    101 usually from sri-nic
    102 iso-tsap
    103 ISO Mail
    104 x400-snd
    105 csnet-ns
    109 Post Office
    110 Pop3 服务器(邮箱发送服务器)
    111 portmap 或 sunrpc
    113 身份查询
    115 sftp
    117 path 或 uucp-path
    119 新闻服务器
    121 BO jammerkillah
    123 network time protocol (exp)
    135 DCE endpoint resolutionnetbios-ns
    137 NetBios-NS
    138 NetBios-DGN
    139 win98 共享资源端口(NetBios-SSN)
    143 IMAP电子邮件
    144 NeWS - news
    153 sgmp - sgmp
    158 PCMAIL
    161 snmp - snmp
    162 snmp-trap -snmp
    170 network Postscrīpt
    175 vmnet
    194 Irc
    315 load
    400 vmnet0
    443 安全服务
    456 Hackers Paradise
    500 sytek
    512 exec
    513 login
    514 shell - cmd
    515 printer - spooler
    517 talk
    518 ntalk
    520 efs
    526 tempo - newdate
    530 courier - rpc
    531 conference - chat
    532 netnews - readnews
    533 netwall
    540 uucp - uucpd
    543 klogin
    544 kshell
    550 new-rwho - new-who
    555 Stealth Spy(Phase)
    556 remotefs - rfs_server
    600 garcon
    666 Attack FTP
    750 kerberos - kdc
    751 kerberos_master
    754 krb_prop
    888 erlogin
    1001 Silencer 或 WebEx
    1010 Doly trojan v1.35
    1011 Doly Trojan
    1024 NetSpy.698 (YAI)
    1025 NetSpy.698
    1033 Netspy
    1042 Bla1.1
    1047 GateCrasher
    1080 Wingate
    1109 kpop
    1243 SubSeven
    1245 Vodoo
    1269 Mavericks Matrix
    1433 Microsoft SQL Server 数据库服务
    1492 FTP99CMP (BackOriffice.FTP)
    1509 Streaming Server
    1524 ingreslock
    1600 Shiv
    1807 SpySender
    1981 ShockRave
    1999 Backdoor
    2000 黑洞(木马) 默认端口
    2001 黑洞(木马) 默认端口
    2023 Pass Ripper
    2053 knetd
    2140 DeepThroat.10 或 Invasor
    2283 Rat
    2565 Striker
    2583 Wincrash2
    2801 Phineas
    3129 MastersParadise.92
    3150 Deep Throat 1.0
    3210 SchoolBus
    3389 Win2000 远程登陆端口
    4000 OICQ Client
    4567 FileNail
    4950 IcqTrojan
    5000 WindowsXP 默认启动的 UPNP 服务
    5190 ICQ Query
    5321 Firehotcker
    5400 BackConstruction1.2 或 BladeRunner
    5550 Xtcp
    5555 rmt - rmtd
    5556 mtb - mtbd
    5569 RoboHack
    5714 Wincrash3
    5742 Wincrash
    6400 The Thing
    6669 Vampire
    6670 Deep Throat
    6711 SubSeven
    6713 SubSeven
    6767 NT Remote Control
    6771 Deep Throat 3
    6776 SubSeven
    6883 DeltaSource
    6939 Indoctrination
    6969 Gatecrasher.a
    7306 网络精灵(木马)
    7307 ProcSpy
    7308 X Spy
    7626 冰河(木马) 默认端口
    7789 ICQKiller
    8000 OICQ Server
    9400 InCommand
    9401 InCommand
    9402 InCommand
    9535 man
    9536 w
    9537 mantst
    9872 Portal of Doom
    9875 Portal of Doom
    9989 InIkiller
    10000 bnews
    10001 queue
    10002 poker
    10167 Portal Of Doom
    10607 Coma
    11000 Senna Spy Trojans
    11223 ProgenicTrojan
    12076 Gjamer 或 MSH.104b
    12223 Hack?9 KeyLogger
    12345 netbus木马 默认端口
    12346 netbus木马 默认端口
    12631 WhackJob.NB1.7
    16969 Priotrity
    17300 Kuang2
    20000 Millenium II (GrilFriend)
    20001 Millenium II (GrilFriend)
    20034 NetBus Pro
    20331 Bla
    21554 GirlFriend 或 Schwindler 1.82
    22222 Prosiak
    23456 Evil FTP 或 UglyFtp 或 WhackJob
    27374 SubSeven
    29891 The Unexplained
    30029 AOLTrojan
    30100 NetSphere
    30303 Socket23
    30999 Kuang
    31337 BackOriffice
    31339 NetSpy
    31666 BO Whackmole
    31787 Hack a tack
    33333 Prosiak
    33911 Trojan Spirit 2001 a
    34324 TN 或 Tiny Telnet Server
    40412 TheSpy
    40421 MastersParadise.96
    40423 Master Paradise.97
    47878 BirdSpy2
    50766 Fore 或 Schwindler
    53001 Remote Shutdown
    54320 Back Orifice 2000
    54321 SchoolBus 1.6
    61466 Telecommando
    65000 Devil

     

824/5<12345>
Open Toolbar