宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒

发布新日志

  • 缺少对象 WScript 问题解决方法

    2013-03-26 09:06:42

    方法一:
    先把脚本保存起来(保证你的脚本能正确运行),例如命名为test.vbs
    然后在QTP写以下脚本就可以正确运行了!
    Dim oShell
    Set Shell =CreateObject ("WSCript.shell")
    oShell.run "cmd /K wscript. e:\test.vbs"
    Set Shell = Nothing
     
     方法二:
    首先要明白 WScript.CreateObject 和 CreateObject 的区别。

    前者的描述方式是基于windows来识别和调用的,所以假如你在一个vbs文件里这么描述,然后双击执行这个文件是没有问题,因为windows存在Wscript这个对象,它遇到这个对象的时候会调用 C:\windows\system32\wscript.exe 这个 应用程序去执行它。

    而后者则是不直接调用WScript这个对象来进行后期绑定WSH对象的。比如你在ASP中、QTP中,都必须用这个方式。因为ASP也好,QTP也好,里面都不存在WScript这个对象,所以你用WScript.CreateObject肯定会失败。

    明白了这个原因,你就很清楚为什么要这么写,该怎么修改了。
       将: WScript.CreateObject 改为 CreateObject 问题就解决了!
  • 虚拟机系统的优化

    2010-07-27 15:55:30

    虚拟机系统的优化:
         在虚拟机中安装好系统后,有些朋友想让系统跑快些,认为内存大就跑的快,自己真机1G内存,就给虚拟机分512认为一定能快,实则错了。熟不知VM里的系统内存是从真机里抽取出来的,这样真机都跑不快,你用虚拟机能跑快么?
         虚拟硬件优化方案:内存设置:168
                           音频(删除)
                           USB识别设备(删除)
                           CPU、网卡(默认)
                           硬盘(按自己需要设置,建议4G)
                           光驱(镜像)
         如此一来,一台1G大小内存的真机,跑4个虚机,速度也很快。
       

         VM中网卡类型的使用及区别:
                                  VM中的网卡类型分这三类:
                                  1、桥接:与真机物理网卡相连接时使用
                                  2、NAT:
                                  3、自定义VMNET:与VM虚拟出来的逻辑网卡进行通讯。(在装好VM后大家会发现网上邻居中多出两块VMNET命名的网卡,他们可时非常有用的哦,很多朋友就删除掉了~


         快照功能:
                 大家在座实验的时候,比如升级DC的实验,有的时候没做好 还相退回原来的非DC状态,但是不知道如何实现,还好你用的时 VM 要时真机 那就无力回天了。
                 咱们在VM菜单栏的虚拟机(VMWARE)选项卡中选择快照,你会发现利用快照可以让你的一个系统做N多个实验,呵呵我最多用以个03R2系统做了132个实验方案,强大的快照管理功能可以让我们看到我们的实验进度树。实验思路一目了然。
         克隆功能:
                 做网络实验时最繁琐的就时实验环境的搭建,比如我们做多域环境下DFS复制实验,或者CA HTTPS ISA等综合性质的网络实验需要不只一个03系统的实验,很多朋友用了3个多小时准备自己的实验环境。大部分时间都浪费在搭建系统上了。
                 VM有新招,那就是克隆,如果有人说GHOST装个系统5分钟搞定。那么我在这里要说,VM装系统3秒钟搞定!(当然克隆完成后,最好把系统用SYSPREP封装一下,生成新的SID,加入域的实验特别注意这一点。

         关于ACE功能,很多朋友问我如何使用,这里简单提一下,后面我写个关于ACE的专题。ACE是VM6.0版本后提出的一个关于有可移动的虚拟机技术。
         ACE的E文解释:Take Control of Virtual Desktops across the Enterprise
         Deploy and manage secure, portable client PC environments across the enterprise and beyond using VMware ACE 2. With ACE, your organization can combine the power and versatility of virtual machines with the security and control of centrally managed PCs, making it easier to:
    • Manage virtual desktops from a single point of control
    • Increase security and flexibility for mobile and remote workers
    • Safely extend corporate resources to 3rd party unmanaged PCs
    • Deliver fully configured virtual desktops for demos and training
    我就不再为大家翻译出来,可以这么说利用ACE功能我们可以把我们没做完的实验随身携带,希望在公交车上都可以做实验的朋友该笑了。
  • 英文版软件测试

    2010-07-27 10:20:49

     

    软件本地化测试(转)

    软件本地化测试的测试对象是本地化的软件,需要在本地化的操作系统上进行。虽然本地化的软件是基于源程序软件创建的,但二者的测试内容和重点具有很大的不同。

    一般地,二者的不同在于:第一,测试顺序不同。首先要现对源程序软件进行测试,然后再创建本地化软件,测试本地化软件。第二,测试内容和重点不同。源程序软件主要测试功能和性能,结合软件界面的测试。本地化软件的测试,更注重因本地化引起的错误,例如,翻译是否正确,本地化的界面是否美观,本地化后的功能是否与源语言软件保持一致。第三,测试环境不同。源程序软件测试通常在源语言的操作系统上进行。本地化软件在本地化的操作系统上进行。

    本地化测试过程中,需要同时运行源程序软件和本地化软件,依照源程序软件结果作为本地化软件的主要参考。

    软件本地化的错误类型

    软件本地化的错误主要分为两大类:第一、由于源程序软件编码错误引起的;第二,由于软件本地化引起的。其中由于软件本地化产生的错误类型包括语句没有翻译、翻译错误、控件布局错误。对于东亚语系软件,可能存在双字节字符显示错误等。

    综合分析本地化软件的错误类别,可以归结为四种类型:翻译错误,功能错误,界面错误,双字节错误。

    每种类型的错误的数量不同,这与源程序软件和本地化软件的质量有密切关系。如果源程序软件没有经过完整的测试,包括功能测试和本地化性能测试,那么本地化软件中就将存在很多功能错误、界面错误、双字节错误。如果本地化软件没有经过良好的本地化处理,将会产生很多翻译错误和界面错误。

    揭密软件本地化错误

    下面对本地化软件的错误的四种典型类型进行分类讨论,探讨错误的表现特征,产生的原因,测试要求,发现错误的方法。

    翻译错误:

    (1) 产生原因:
    1) 翻译人员不熟悉翻译要求。
    2) 翻译人员工作疏漏。
    3) 用户界面的翻译与标准词汇表不一致。

    (2) 表现特征:
    1) 应该翻译而没有翻译的英文字符。
    2) 不应该翻译而翻译的中文字词。
    3) 错误翻译的字词。
    4) 只在本地化版本中存在该类型错误。
    5) 较多隐含在对话框各控件以及帮助文档中。

    (3) 测试要求:
    1) 明确需要翻译和不需要翻译的内容。
    2) 明确正确的翻译方式。
    3) 根据术语表,确认术语翻译的正确性与一致性。

    (4) 测试方法:
    1) 主要同时打开中英文版本,执行相同的操作。
    2) 结合标准界面词汇翻译表,参照对比。

    (5) 说明:
    1) 对于对话框,如果含有下拉列表框,要打开列表框查看全部项。
    2) 特别要注意选项中开关类翻译错误。
    功能错误:
    (1) 产生原因:
    1) 软件编码错误。
    2) 错误本地化,如将程序中的变量进行了翻译等。
    (2) 表现特征:
    1) 不能实现设计要求的功能。
    2) 产生与设计要求不符合的结果。
    3) 英文和中文都存在同样的错误。
    4) 可能隐含在软件的任何位置或任何操作步骤中。
    (3) 测试要求:
    1) 保证输入数据正确,或者打开了正确的测试用例。
    2) 明确正确的输出结果和中间数据数值及格式。
    (4) 测试方法:
    1) 对于菜单项或工具栏按钮,通过全面测试各个选项,认真观察每一步是否正确执行,输出结果(包括格式和数值)是否正确。
    2) 对于一个命令中的多个并列选项,采用路径跟踪法,按分支顺序测试嵌套的全部子项。
    3) 对于对话框,可以逐个执行各按钮,各个列表选项等观察执行结果。
    (5) 说明:
    1) 特别注意不同选项、不同按钮相互操作的影响。
    2) 注意检查快捷键是否遗漏,是否多余,是否不同,是否起作用。
    布局错误:
    (1) 产生原因:
    1) 软件本地化后,由于源语言和本地化语言的表达方式不同,本地化后的字符数与源语言不同,每个字符所占空间尺寸不同,使得在英文版本正确显示的控件字符,可能在本地化版本显示不正确。
    2) 本地化人员调整程序资源不当引起,例如,对话框及其控件高度或宽度的不正确调整。
    (2) 表现特征:
    1) 控件相互重叠或排列不均匀。
    2) 控件中字符显示不完整。
    3) 主要出现在本地化版本的对话框中。
    (3) 测试要求:
    1) 对话框中控件布局均匀,字符显示完整正确。
    2) 对话框中控件数量相等,没有多余或丢失的控件
    (4) 测试方法:
    1) 执行将要打开对话框的菜单或工具栏按钮,观察打开对话框中的控件布局。
    2) 对比检查源语言软件和本地化软件对应的对话框中控件的数量
    (5) 说明:
    1) 可能在执行不同的操作后,如选择了不同单选或复选按钮后,编辑框显示重叠等。
    2) 执行后带省略号的菜单或命令按钮,将会显示对话框。
    双字节错误:
    (1) 产生原因:
    1) 源程序在设计时没有考虑双字节语言的支持。
    2) 软件本地化后,单字节字符向双字节字符转化过程中,由于单字节和双字节之间的差别,可能使得某些本地化后的双字节字符的显示乱码。
    3) 软件本地化后,对程序中控制符号如换行键“\n”的处理错误而引起乱码。
    (2) 表现特征:
    1) 控件或对话框中显示不可辩识的字符。
    2) 控件或对话框中显示无意义的明显错误的字符。
    3) 不支持双字节字符的输入,包括双字节的文件名和路径名。
    4) 仅出现在本地化后的版本中。
    (3) 测试要求:
    1) 本地化后的软件字符显示正确完整,无乱码或明显错别字。
    (4) 测试方法:
    1) 执行菜单或按钮,检查对话框中的字符。
    2) 打开帮助文档,检查所有需要翻译的字符。
    (5) 说明:
    1) 注意检查对话框下拉列表中需要拖动滚动条才能显示的内容。

    总结

    以上仅列出了本地化软件测试经常遇到的四种错误类型,在实际测试中可能某些错误的现象(如列表框中有多余项或缺少项),既可以认为是布局错误,也可以属于功能错误,应该认真思考该错误表现的实质,将其划分为正确的错误类型。

    实际测试是一个动态的过程,不能孤立静态地对待发现的错误,因为一个错误可能包含着其他的不同类型的错误。比如在对话框中,选择某个按钮,产生一个错误提示对话框,这可能是一个按钮功能错误,如果对话框中存在需要翻译而没有翻译的英文,则又是一个翻译错误,如果对话框中存在无法辨识的字符,则又是一个双字节错误,如果对话框中按钮排列重叠,则还是一个布局错误。

    总之,本地化软件的错误的产生是多方面的,不能仅仅归结为软件本地化过程带来的错误,实际上,良好的国际化设计的源程序是减少软件本地化错误的根本保证。当然,提高软件本地化过程能力,提高翻译和检查,优化本地化软件编译流程,能够减少很多因本地化产生的错误。

    测试工具

    测试前的准备:1、搭建英文环境(操作系统、数据库)最好提前一天安装。虚拟机

    中文查找器

    云月中文查找器是一个用于查找文件中存在的中文字符,以及UNICODE编码的中文字符的工具。
    使用场景:在发布纯英文的文档时,希望找出里面的所有中文,特别是中文标点符号如,。;-等
    人工一个个文件查找,效率低容易遗漏。
    本工具在文件中查找中文字符,并且将结果输出到一个指定的文本文件如 c:\FindChineseCharResult.txt
    同时将结果输出到 excel 文件中。



     

  • linux 指令

    2009-04-29 19:57:22

     

    指令名称 : chown
    使用权限 : root
    使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
    说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

    应用实例
    chown seggps:seggps DataWriter

     

    su
      作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。
        
      u [选项]... [-] [USER [ARG]...] 
      -f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
      -l , --login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。
       -m, -p ,--preserve-environment:执行su时不改变环境变数。
      -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
      USER:欲变更的使用者账号,ARG传入新的Shell参数。
      
      应用实例
      
      变更账号为超级用户,并在执行df命令后还原使用者。  su -c df root  su-seggps

    xhost 是用来控制X server访问权限的。

      通常当你从hostA登陆到hostB上运行hostB上的应用程序时,

      做为应用程序来说,hostA是client,但是作为图形来说,

      是在hostA上显示的,需要使用hostA的Xserver,所以hostA是

      server.因此在登陆到hostB前,需要在hostA上运行xhost +

      来使其它用户能够访问hostA的Xserver.

      xhost + 是使所有用户都能访问Xserver.

      xhost + ip使ip上的用户能够访问Xserver.

      xhost + nis:user@domain使domain上的nis用户user能够访问

      xhost + inet:user@domain使domain上的inet用户能够访问。

     

    gedit

     

    文本编辑器,就像是win的记事本。 不过是在视窗模式下面的。 在Linux下面最流行的文本编辑器是vi建议你使用vi。 不要用gedit。

    另外你用gedit修改文件的时候给看下权限不是所有文件都有权利修改的除非你是root
    实例: gedit .bash_profile

  • Linux操作

    2009-04-29 19:28:02

    一、基础知识

    1、  Linux是区分大小写的系统,需要养成区分大小写的习惯。

    2、  Linux系统对内存的利用,总是尽可能利用的。Linux系统会把空闲内存,即除自身和应用系统需要的内存之外的内存,总是作为文件的Cache利用。如果应用程序是第一次打开文件访问其内容,速度可能比较慢,但如果是第二次打开同一个文件访问其内容。其速度就会快起来。在Linux系统中,内存的利用率可以达到90%以上,这也是与Window不一样的地方。

    3、  Linux中没有C盘、D盘、E盘这种概念,但也有分区和文件系统的概念。Linux中的分区类似Window中的未格式化的逻辑盘,但表示方法不一样,它是通过/dev/hd[a][n]IDE硬盘)或/dev/sd[a][n]SATASAS硬盘)来表示的。类似在Window中对未格式化的逻辑盘进行格式化,在Linux中也可以对分区进行格式化,可选的文件系统格式有ext2ext3gfs等。一旦Linux中的分区进行了格式化,就可以把Linux中的各个文件系统,如//boot/root/usr/home/tmp/opt等挂接在不同的分区。

    4、  对于Linux中的文件,后缀名并不重要,甚至不需要后缀名。一个文件是否可以执行,由文件内容来决定和文件权限共同来决定,如一个ELF可执行文件,如果不给它加上”x”可执行执行权限,它也是不可以运行的。

    5、  Linux中具有严格的权限控制,普通文件和目录的权限由ugo三个部分的权限来表示,u表示文件拥有者,g表示拥有者所在组,o表示其它人。权限可分为1(可执行)、2(可写)、4(可读),这三个权限可以累加,如要表示可写可读,则用6表示,扩充一点,如果要设置某个文件的属性为文件拥有者对该文件可读可写可执行、所在组可读可执行、其它人可执行,则只要给该文件赋予751即可。如果想更加详细的控制文件权限,可以参考ACL

    6、  Linux有不同的运行等级,运行等级0为关机;1为单用户模式,此时只有root用户可以进行操作;2为多用户,但是没有 NFS(Net File System)3为完全多用户模式;4现阶段没有用到;5X11(图形模式);6为重新启动。各个运行等级可以通过“init 需要切换到的等级”进行改变,如发出“init 6,则就可以重新启动系统。当发出“init 需要切换到的等级”的时候,如发出“init 6,则一般情况下/etc/rc6.d/S打头和K打头的脚本将被执行,其中S打头的脚本以start参数执行,K打头的脚本以stop参数执行。

    7、  Linux或其它类Unix环境中,被误删除的文件和目录比较难恢复,在删除的时候需要小心谨慎。

    二、基本操作命令

    1、  生成一个空文件 touch

    用法 touch 文件名

    例子 touch xyz

    则将生成xyz这个文件,不过如果执行操作的用户没有对相应目录的写入权限,执行将会失败。其它的文件拷贝、删除都一样。

     

    2、  文件拷贝 cp

    用法 cp 文件名 新文件名

    cp 文件名 /新目录/新文件名

    例子

    cp xyz abc              xyz拷贝一份,并以abc命名

    cp xyz /tmp/abcxyz   拷贝一份到/tmp下,并以abc重新命名

    cp -R /home/oracle/* /tmp /home/oracle/目录下的所有文件,包括子目录,都拷贝到/tmp

     

    3、  删除文件 rm

    用法 rm 文件名

    参数 –R 递归目录

         -f 强制删除,不提示

    例子

    rm xyz    则把xyz这个文件删除,在某些系统中,可能会提示一个是否删除

    rm –f xyz  删除xyz这个文件,且不会进行任何提示

    rm –fR 目录名 则会把该目录下的所有文件,包括子目录都删除。

     

    4、  显示文件内容 cat

    用法 cat 文件名

    例子 cat xyz 则显示xyz这个文件的内容

    注意,如果xyz这个文件的内容大于一屏,则使用该命令会飞快的滚到文件内容的最后一屏。

     

    5、  分页显示文件内容 more

    用法 more文件名

    例子 more xyz 则分页显示xyz这个文件的内容第一页,此时,按回车,文件内容将向下增加一行,按空格键,文件内容将向下增加一屏幕,按q键,退出显示。

     

    6、  分页显示文件内容 less

    用法 less 文件名

    此命令用法和more基本相同,不过less 可以把显示过的内容按b键向后滚屏,而more只能向前滚动分页。

     

    7、  显示文件头部内容 head

    用法 head –n 行数 文件名

    例子 head –n 15 xyz 则显示xyz前面15行的内容,如果忽略-n参数,如head xyz,则默认显示xyz的前10行内容。

     

    8、  显示文件尾部内容 tail

    tail –n 行数 文件名

    例子 tail –n 15 xyz 则显示xyz后面15行的内容,如果忽略-n参数,如tail xyz,则默认显示xyz的后10行内容。

     

    9、  搜索文件内容

    搜索文件内容,需要用到more指令、grep、管道(|),如搜索xyz这个文件中含有abc的行

    例子 more xyz | grep abc

     

    10、              新建目录 mkdir

    用法 mkdir 目录名

    mkdir /tmp/oracle 则将会在/tmp下建立一个oracle目录

    如果需要建立多级目录,需要加参数p,如mkdir -p /tmp/x/y/z,则将在/tmp下的建立x子目录,在x子目录下建立y子目录,在y子目录下建立z子目录。

     

    11、              删除目录 rmdir

    用法 rmdir 目录名

    rmdir xyz 则将会把xyz目录删除,如果xyz目录不为空,删除将失败。删除多级目录,需要加参数p

    rmdir –p x 则会把x目录及x下面的其它空目录一并删除。

     

    12、              改变当前路径 cd

    用法 cd 新路径

    例子 cd /tmp 则会把当前路径改变到/tmp下面。

    Window一样,“..”在Linux中也表示为上级目录,所以如果想更改路径为上级目录,可以输入下面的命令

    cd ..  注意,cd ..之间是有一个空格的,这和Window不一样。

     

    13、              显示当前路径 pwd

    用法 pwd

     

    14、              列出文件和目录 ls

    用法 ls

    参数 –l 以宽格式显示详细内容

         -t 以文件的修改时间排序

         -S以文件的大小排序

         -R 递归目录显示

    15、              查找文件或目录 find

    用法 find 路径 –name 文件名

    例子 find . –name xyz在当前路径及子目录下xyz这个文件

         find / –name xyz 在根目录及子目录下xyz这个文件

         find / -name ‘*xyz*’ 在根目录及子目录下查找文件名中含有xyz字符的文件

         find /usr -mtime +2 找出在/usr目录下,修改时间在2<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; m

     

    指令名称 : chown
    使用权限 : root
    使用方式 : chmod [-cfhvR] [--help] [--version] use

  • 面向对象软件的测试策略

    2008-02-26 12:11:48

    面向对象分析:将问题空间中的实例抽象为对象,用对象的结构反映问题空间的复杂实例和复杂关系,用属性和服务表示实例的特性和行为。面向对象分析(OOA)的测试重点:其完整性和冗余性。

    OOA测试:对认定的对象的测试。对认定结构的测试。对认定主题的测试。对定义的属性和实例关联的测试。对定义的服务和消息关联的测试。

     

  • 逻辑驱动测试与数据驱动测试

    2008-02-26 11:45:53

       白盒测试(White-box Testing,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。白盒测试又称为结构测试和逻辑驱动测试。

          白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

          六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。

      白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。

      "白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。

    黑盒测试(Black-box Testing,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。

          采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。

          黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。

          黑盒测试试图发现以下类型的错误:

          1)功能错误或遗漏;
          2)界面错误;
          3)数据结构或外部数据库访问错误;
          4)性能错误;
          5)初始化和终止错误。

    一、黑盒测试的测试用例设计方法

    ·等价类划分方法
    ·边界值分析方法
    ·错误推测方法
    ·因果图方法
    ·判定表驱动分析方法
    ·正交实验设计方法
    ·功能图分析方法

    等价类划分:

          是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.

          1) 划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

          有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能.

          无效等价类:与有效等价类的定义恰巧相反.

          设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.

    2)划分等价类的方法:下面给出六条确定等价类的原则.

          ①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.

          ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.

          ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.

          ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.

          ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).

          ⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.

    3)设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:

          输入条件 有效等价类 无效等价类

          ... ... ...

          ... ... ...

          然后从划分出的等价类中按以下三个原则设计测试用例:

          ①为每一个等价类规定一个唯一的编号.

          ②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.

          ③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.

    边界值分析法

          边界值分析方法是对等价类划分方法的补充.

    (1)边界值分析方法的考虑:

          长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.

          使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

    (2)基于边界值分析方法选择测试用例的原则:

          1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.

          2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.

          3)根据规格说明的每个输出条件,使用前面的原则1).

          4)根据规格说明的每个输出条件,应用前面的原则2).

          5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.

          6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.

          7)分析规格说明,找出其它可能的边界条件.

    错误推测法

          错误推测法: 基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.

          错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.

    因果图方法

          前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型).

          因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

          利用因果图生成测试用例的基本步骤:

          (1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符.

          (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.

          (3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.

          (4) 把因果图转换为判定表.

          (5) 把判定表的每一列拿出来作为依据,设计测试用例.

          从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.

          前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.

          判定表通常由四个部分组成.

          条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.

          动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.

          条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.

          动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.

          规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.

          判定表的建立步骤:(根据软件规格说明)

          ①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则.

          ②列出所有的条件桩和动作桩.

          ③填入条件项.

          ④填入动作项.等到初始判定表.

          ⑤简化.合并相似规则(相同动作).

          B. Beizer 指出了适合使用判定表设计测试用例的条件:

          ①规格说明以判定表形式给出,或很容易转换成判定表.

          ②条件的排列顺序不会也不影响执行哪些操作.

          ③规则的排列顺序不会也不影响执行哪些操作.

          ④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.

          ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.

    黑盒测试的优点

          1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了
          2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因

    黑盒测试的缺点

          1. 结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴
          2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作
          3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。

  • 病毒的命名规则

    2007-12-25 10:02:26

    转自夜火&轨迹's Blog

    很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor.RmtBomb.12 、Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名,这时有些人就懵了,那么长一串的名字,我怎么知道是什么病毒啊?

      其实只要我们掌握一些病毒的命名规则,我们就能通过杀毒软件的报告中出现的病毒名来判断该病毒的一些公有的特性了。

      世界上那么多的病毒,反病毒公司为了方便管理,他们会按照病毒的特性,将病毒进行分类命名。虽然每个反病毒公司的命名规则都不太一样,但大体都是采用一个统一的命名方法来命名的。一般格式为:<病毒前缀>.<病毒名>.<病毒后缀>

      病毒前缀是指一个病毒的种类,他是用来区别病毒的种族分类的。不同的种类的病毒,其前缀也是不同的。比如我们常见的木马病毒的前缀 Trojan ,蠕虫病毒的前缀是 Worm 等等还有其他的。

      病毒名是指一个病毒的家族特征,是用来区别和标识病毒家族的,如以前著名的CIH病毒的家族名都是统一的“ CIH ”,还有近期闹得正欢的振荡波蠕虫病毒的家族名是“ Sasser ”。

      病毒后缀是指一个病毒的变种特征,是用来区别具体某个家族病毒的某个变种的。一般都采用英文中的26个字母来表示,如 Worm.Sasser.b 就是指 振荡波蠕虫病毒的变种B,因此一般称为 “振荡波B变种”或者“振荡波变种B”。如果该病毒变种非常多(也表明该病毒生命力顽强 ^_^),可以采用数字与字母混合表示变种标识。

      综上所述,一个病毒的前缀对我们快速的判断该病毒属于哪种类型的病毒是有非常大的帮助的。通过判断病毒的类型,就可以对这个病毒有个大概的评估(当然这需要积累一些常见病毒类型的相关知识,这不在本文讨论范围)。而通过病毒名我们可以利用查找资料等方式进一步了解该病毒的详细特征。病毒后缀能让我们知道现在在你机子里呆着的病毒是哪个变种。

      下面附带一些常见的病毒前缀的解释(针对我们用得最多的Windows操作系统):

      1、系统病毒

      系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的一般公有的特性是可以感染windows操作系统的 *.exe 和 *.dll 文件,并通过这些文件进行传播。如CIH病毒。

      2、蠕虫病毒

      蠕虫病毒的前缀是:Worm。这种病毒的公有特性是通过网络或者系统漏洞进行传播,很大部分的蠕虫病毒都有向外发送带毒邮件,阻塞网络的特性。比如冲击波(阻塞网络),小邮差(发带毒邮件) 等。

      3、木马病毒、黑客病毒

      木马病毒其前缀是:Trojan,黑客病毒前缀名一般为 Hack 。木马病毒的公有特性是通过网络或者系统漏洞进入用户的系统并隐藏,然后向外界泄露用户的信息,而黑客病毒则有一个可视的界面,能对用户的电脑进行远程控制。木马、黑客病毒往往是成对出现的,即木马病毒负责侵入用户的电脑,而黑客病毒则会通过该木马病毒来进行控制。现在这两种类型都越来越趋向于整合了。一般的木马如QQ消息尾巴木马 Trojan.QQ3344 ,还有大家可能遇见比较多的针对网络游戏的木马病毒如 Trojan.LMir.PSW.60 。这里补充一点,病毒名中有PSW或者什么PWD之类的一般都表示这个病毒有盗取密码的功能(这些字母一般都为“密码”的英文“password”的缩写)一些黑客程序如:网络枭雄(Hack.Nether.Client)等。

      4、脚本病毒

      脚本病毒的前缀是:scrīpt。脚本病毒的公有特性是使用脚本语言编写,通过网页进行的传播的病毒,如红色代码(scrīpt.Redlof)——可不是我们的老大代码兄哦 ^_^。脚本病毒还会有如下前缀:VBS、JS(表明是何种脚本编写的),如欢乐时光(VBS.Happytime)、十四日(Js.Fortnight.c.s)等。

      5、宏病毒

      其实宏病毒是也是脚本病毒的一种,由于它的特殊性,因此在这里单独算成一类。宏病毒的前缀是:Macro,第二前缀是:Word、Word97、Excel、Excel97(也许还有别的)其中之一。凡是只感染WORD97及以前版本WORD文档的病毒采用Word97做为第二前缀,格式是:Macro.Word97;凡是只感染WORD97以后版本WORD文档的病毒采用Word做为第二前缀,格式是:Macro.Word;凡是只感染EXCEL97及以前版本EXCEL文档的病毒采用Excel97做为第二前缀,格式是:Macro.Excel97;凡是只感染EXCEL97以后版本EXCEL文档的病毒采用Excel做为第二前缀,格式是:Macro.Excel,依此类推。该类病毒的公有特性是能感染OFFICE系列文档,然后通过OFFICE通用模板进行传播,如:著名的美丽莎(Macro.Melissa)。

      6、后门病毒

      后门病毒的前缀是:Backdoor。该类病毒的公有特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。如54很多朋友遇到过的IRC后门Backdoor.IRCBot 。

      7、病毒种植程序病毒

      这类病毒的公有特性是运行时会从体内释放出一个或几个新的病毒到系统目录下,由释放出来的新病毒产生破坏。如:冰河播种者(Dropper.BingHe2.2C)、MSN射手(Dropper.Worm.Smibag)等。

      8.破坏性程序病毒

      破坏性程序病毒的前缀是:Harm。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒便会直接对用户计算机产生破坏。如:格式化C盘(Harm.formatC.f)、杀手命令(Harm.Command.Killer)等。

      9.玩笑病毒

      玩笑病毒的前缀是:Joke。也称恶作剧病毒。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒会做出各种破坏操作来吓唬用户,其实病毒并没有对用户电脑进行任何破坏。如:女鬼(Joke.Girlghost)病毒。

      10.捆绑机病毒

      捆绑机病毒的前缀是:Binder。这类病毒的公有特性是病毒作者会使用特定的捆绑程序将病毒与一些应用程序如QQ、IE捆绑起来,表面上看是一个正常的文件,当用户运行这些捆绑病毒时,会表面上运行这些应用程序,然后隐藏运行捆绑在一起的病毒,从而给用户造成危害。如:捆绑QQ(Binder.QQPass.QQBin)、系统杀手(Binder.killsys)等。
      以上为比较常见的病毒前缀,有时候我们还会看到一些其他的,但比较少见,这里简单提一下:
      DoS:会针对某台主机或者服务器进行DoS攻击;
      Exploit:会自动通过溢出对方或者自己的系统漏洞来传播自身,或者他本身就是一个用于Hacking的溢出工具;
      HackTool:黑客工具,也许本身并不破坏你的机子,但是会被别人加以利用来用你做替身去破坏别人。
      你可以在查出某个病毒以后通过以上所说的方法来初步判断所中病毒的基本情况,达到知己知彼的效果。在杀毒无法自动查杀,打算采用手工方式的时候这些信息会给你很大的帮助。

            夜火:补充一个,DownLoader或DL前缀的病毒,是“下载者”,它本身没有什么破坏性,就是运行这种病毒之后,它会自行从网上下载1-N个其他不同类型的多种病毒或木马,并自动运行,危害甚至大过破坏性病毒,和上文中说的 7  有些类似。

  • 正则表达式

    2007-12-20 20:04:18

    正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里转摘出了一些常用的正则表达式语句,大家用到的时候就不用自己写了

    ^\d+$  //匹配非负整数(正整数 + 0)
    ^[0-9]*[1-9][0-9]*$  //匹配正整数
    ^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)
    ^-[0-9]*[1-9][0-9]*$  //匹配负整数
    ^-?\d+$    //匹配整数
    ^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)
    ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数
    ^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)
    ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数
    ^(-?\d+)(\.\d+)?$  //匹配浮点数
    ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
    ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
    ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
    ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
    ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
    ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址
    ^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    匹配空行的正则表达式:\n[\s| ]*\r
    匹配HTML标记的正则表达式:/<(.*)>.*<\/>|<(.*) \/>/
    匹配首尾空格的正则表达式:(^\s*)|(\s*$)
    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
    匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
    下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
    * 匹配前面的子表达式零次或多次。
    + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
    ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
    {n} n 是一个非负整数,匹配确定的n 次。
    {n,} n 是一个非负整数,至少匹配n 次。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
    ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
    . 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。
    (pattern) 匹配pattern 并获取这一匹配。
    (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
    (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
    (?!pattern) 负向预查,与(?=pattern)作用相反
    x|y 匹配 x 或 y。
    [xyz] 字符集合。
    [^xyz] 负值字符集合。
    [a-z] 字符范围,匹配指定范围内的任意字符。
    [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
    \b 匹配一个单词边界,也就是指单词和空格间的位置。
    \B 匹配非单词边界。
    \cx 匹配由x指明的控制字符。
    \d 匹配一个数字字符。等价于 [0-9]。
    \D 匹配一个非数字字符。等价于 [^0-9]。
    \f 匹配一个换页符。等价于 \x0c 和 \cL。
    \n 匹配一个换行符。等价于 \x0a 和 \cJ。
    \r 匹配一个回车符。等价于 \x0d 和 \cM。
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
    \t 匹配一个制表符。等价于 \x09 和 \cI。
    \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
    \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
    \W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。
    \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
    \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
    \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
    \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
    \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八
  • VB6.0调用正则表达式

    2007-12-20 15:51:55

      引用了Microsoft VBscrīpt Regular Expressions 5.5 后就可以声明正则相关对象了。主要有三个对象:RegExp、MatchCollection、Match。
      
      1. RegExp 这是VB使用正则表达式匹配模式的主要对象了。其提供的属性用于设置那些用来比较的传递给 RegExp 实例的字符串的模式。 其提供的方法以确定字符串是否与正则表达式的特定模式相匹配。

      属性:
      Pattern:一个字符串,用来定义正则表达式。
      IgnoreCase:一个布尔值属性,指示是否必须对一个字符串中的所有可能的匹配进行正则表达式测试。这是MS的解释,有点费解,实际使用中的实例是,如果True,则忽略英文字母大小的匹配,False对大小写进行匹配。
      Global:设置一个布尔值或返回一个布尔值,该布尔值指示一个模式是必须匹配整个搜索字符串中的所有搜索项还是只匹配第一个搜索项。
      MultiLine:这个MS没有介绍。查了一下资料,设置一个布尔值或返回一个布尔值,是否在串的多行中搜索。如果允许匹配多行文本,则multiline为true,如果搜索必须在换行时停止,则为false 。

      方法:
      Execute:返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象。
      Replace:MS没有介绍,这是返回一个将匹配字符替换为指定字符的字符串。
      Test:返回一个布尔值,该值指示正则表达式是否与字符串成功匹配。

      2. MatchCollection 是集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的 Match 对象。

      属性
      Count:匹配对象的总数。
      Item:匹配对象的索引。

      3. Match 是成功匹配的对象。

      属性:
      FirstIndex:匹配对象所匹配字符串的起始位置。
      Length:匹配对象所匹配字符串的字符长度。
      SubMatches:匹配对象所匹配结果的子项。
      Value:匹配对象所匹配的值。

    RegExp的Test方法:

    Private Sub Command1_Click()
    Dim s As String
        Dim p As String
        s = Text1.Text
            '测试字符串中是否包含数字:
        p = "^13[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"

        MsgBox bTest(s, p)

    End Sub
    Function bTest(ByVal s As String, ByVal p As String) As Boolean
        Dim re As RegExp
        Set re = New RegExp
        re.IgnoreCase = False  '设置是否匹配大小写
        re.Pattern = p
        bTest = re.Test(s)
    End Function
    RegExp的Replace方法:

    Function StrReplace(s As String, p As String, r As StringAs String
        
        
    Dim re As RegExp
        
    Set re = New RegExp
        re.IgnoreCase 
    = True
        re.Global 
    = True
        re.Pattern 
    = p
        StrReplace 
    = re.Replace(s, r)
        
    End Function

    Private Sub Command2_Click()

        
    Dim s As String     '字符串
        Dim p As String     '正则表达式
        Dim r As String     '要替换的字符串

      
    '以下代码是替换邮箱地址
         
        s 
    = "我的E-mail: Test@163.com 。欢迎致电!"
        p 
    = "w+@w+.w+"
        r 
    = "E_Mail@sohu.net"
        s 
    = StrReplace(s, p, r)
        Debug.Print s
        
    '结果:我的E-mail: E_Mail@sohu.net 。欢迎致电!

    End Sub

      3. Match的SubMatches属性:

    Private Sub Command3_Click()

        
    Dim re As RegExp
        
    Dim mh As Match
        
    Dim mhs As MatchCollection
        
    Dim inpStr As String
        
        inpStr 
    = "我的E-mail: lucky@163.com 。欢迎致电!"
        
    Set re = New RegExp
        re.Pattern 
    = "(w+)@(w+).(w+)"         '同样是匹配地址,注意和上例的不同
        Set mhs = re.Execute(inpStr)
        
    Set mh = mhs(0)                                      '只有一个匹配
        
        Debug.Print 
    "电子邮件地址是: " & mh.Value                '这里是匹配的内容
        Debug.Print "用户名是:             " & mh.SubMatches(0)  '第一个括号中的内容
        Debug.Print "邮箱是:                 " & mh.SubMatches(1)  '第二个括号中的内容
        Debug.Print "域名是:           " & mh.SubMatches(2)  '第三个括号中的内容
        
    End Sub 
  • 常见的测试障碍及其解决办法

    2007-12-12 16:19:37

    软件测试是软件生命周期的一部分。没有经过适当测试的应用软件会失去客户的信赖――不管是你的老客户或者新客户。因此,在软件发布之前,实施有效的软件测试,以排除常见的、可能导致浩劫性错误的问题,变得尤为重要。这篇文章总结了大部分测试工程所面临的常见问题,以及克服这些问题的一些方法。

    1.      不充分的测试计划及测试评估

    有效的测试计划是整个测试工程中最为关键和富有挑战性的一步。测试计划及评估指出了测试任务实施的顺序以及方式,同样也指出了执行测试所需的资源。只有进行了合理和可靠的测试评估,才可能作出合适的测试计划。

    • 工作量:在特定的时间内缺乏实施测试活动的资源,或者由于分配了过多资源而不能有效使用资源,都将会导致计划的推迟。
    • 进度计划:进度评估将在在工作量评估以后,开发人员一般会低估测试所需要的工作量和资源,由此引发的结果就是:到最后期限不能将软件提交到到软件的最终用户,或者只能发布经过部分测试的软件产品。
    • 成本:如果预算不正确,软件成本将变得更加昂贵;它还可能使得某些测试活动被取消,导致项目的更多质量上的不可靠。

    如何解决

    测试在总的工作量中的百分比,应该参照在以前的类似测试中的标准比例,并且考虑到一般管理费用,并由此估计个体活动的小时数量,然后再推断结果。一些由于缺乏知识丰富的人力导致的不合适的测试,比如使用测试人员时缺乏或没有经验,同样也会导致低劣的测试质量。别忘记考虑以下几点:

    ·         用以提高人力资源对于本领域或技术的知识水平所需的培训时间

    ·         用以解决提前预见的风险所需的缓冲时间

    2.      不明确的需求

    没有足够的文档,在软件版本发布出去之前,测试人员通常要花费更长的时间以及留下更多的错误。需求的不明确使测试设计阶段变得冗长乏味。在这个阶段发现和修改需求的不足所付出的代价将大大低于在接受阶段将会导致代价。如果测试人员匆匆的阅读需求的话,可能会有许多暗示的或者潜在的需求被忽略掉。因此,在测试的开始阶段彻底的了解需求尤为重要。

    如何解决

    在书写测试用例之前,测试人员可以复查需求,准备一个对需求的疑问单,敦促其将需求明确化,以保证发布出高质量的产品 。另外,还可以准备一份关于需求的缺陷单。

    3.      测试覆盖的不足

    一个好的测试包将达到较高的覆盖率。没有足够的测试用例,就不能完全的测试整个功能。测试覆盖只是测试质量的一个度量。如果没有达到高的测试覆盖率,那么测试过程必须要加强。另一个因素就是,没有完全考虑到可能范围的测试数据。

    如何解决

    与需求相关的测试用例号可以在excel表格中靠着需求的地方标注出来,这样,可以保证为每个需求设计了测试用例。低测试覆盖率表明了测试过程的问题,这些问题可能需要改进测试生成技术或者培训测试人员。市面上有不少度量测试覆盖率的工具出售。

    要测试应用系统中的所有条件不太可能,但设计合法及非法的数据以达到完全覆盖正常的处理操作是可以准备的。在准备测试数据的时候,可以应用边界值分析,等价类划分这些技术。

    4.      测试环境失控

    测试环境越接近最终产品环境,测试的可靠性就越高。缺乏这样的环境将导致最终产品中不可预料的结果

    如何解决

    测试应该在一个可控制的环境下进行,由此测试可以独立与开发或者产品环境。测试环境应该规测试小组所有,没有他们的允许,环境不能有任何改动。

    为保证及时搭建环境以及很好的管理环境,可以采用一些衡量标准。测试环境应该充分的代表将要执行的测试,它应该接近或者和产品环境相同。测试经理或者某个协调者管理与开发组的信息流通非常必要,并且负责环境搭建,版本控制,认可等等。如果建立了一个独立的测试小组,那么同样建立一个配置小组就会更加理想。

    5.      结果测试

    对测试人力和资源需求的低估,将导致在项目开发周期的结束阶段时才开始辛苦的测试,这个时候要修补测试人员发现的错误变得很困难,而且由于时间的约束,在测试文档中将不会太注重细节。

    如何解决

    需求定义好以后就可以尽快的开始测试计划。可以让测试过程和软件开发过程同步进行。

    6.      测试文档的不充分

    不充分/不合适的测试文档(包括测试计划,测试规格说明书,缺陷报告,等等)导致在分析应该测试什么/再测试什么以及该测试的相关领域中浪费很多时间,这些都会反过来影响产品的发布或质量。

    如何解决

    在文档上也应该花费足够的工作量,因为测试文档在整个测试阶段是一个非常重要的任务

    开始SDLC起,就应该留心准备所有与测试相关的文档,并且对文档持续更新。

  • 通信接口测试小结

    2007-12-11 18:20:32

      做了五、六个接口程序的测试,由于接口测试的特性:可能没有什么界面,没有太多功能。也可能是开发人员水平不错,没有发现很多的bug。在用户那里使用也都正常。可是真要说测试方法来自己也说不清楚

    特此回顾一下测试接口程序的心得。接口有不同的层次,小的有函数间的接口,大的有系统间的接口。同时接口也有不同的类型:函数接口、消息接口、文件接口、数据库接口、共享内存接口、类接口等.我做的一直是系统间的接口测试。这类测试的主要依据文档是通信协议。客户通常是要求把一个系统里的通信报文格式转换成另一个系统里的报文格式。那功能测试的内容,把每一条报文都覆盖测试一次确保转换成功。关注:参数的类形、数量、顺序匹配。接口的日志文件,异常处理。

    在BBS里别人是这样总结:

    接口测试需要关注的几点:
    1、调用所测试模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配;
    2、所测试模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配;
    3、是否修改了只做输入用的形式参数;
    4、输出给标准函数的参数在个数、属性、顺序上是否正确;
    5、全局变量的定义在每个模块中是否一致;
    6、约束条件是否通过形式参数来传送。
     
    接口有不同的层次,小的有函数间的接口,大的有系统间的接口。同时接口也有不同的类型:函数接口、消息接口、文件接口、数据库接口、共享内存接口、类接口等,你所说的参数的传递只是其中一小部分。
    采用面向对象的方法,并不能避免参数传递,类型匹配,个数匹配这方面的错误.
     

    1.在把各个模块连接起来的时候,穿越模块接口的数据会不会丢失;
    2.各个子功能组合起来,能否达到预期要求的父功能;
    3.一个模块的功能是否对另一个模块的功能产生不利影响;
    4.全局数据结构是否有问题;
    5.单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
    写用例把这个这几个原则,当然还要具体问题具体分析,需要多考虑一些
     
    主要从事嵌入式软件的系统测试,在进行接口测试类型时,我们这边主要按照以下要求来做

    接口测试时对软件需求规格说明中的接口需求逐项进行的测试。接口测试一般需要进行:
    a)        测试所有外部接口,检查接口信息的格式及内容;
    b)        对每一个外部输入/输出接口必须作正常和异常情况的测试;
    c)        测试硬件提供的接口是否便于使用;
    d)        测试系统的特性(如数据特性、错误特性、速度特性)对软件功能、性能特性的影响;
    e)        对所有的内部接口的功能、性能进行测试
Open Toolbar