搜集资料,交流经验……

发布新日志

  • freebsd4.2进单用户模式

    2008-04-18 23:36:43

    装FreeBSD4.2系统的硬盘,换了一台机器后,启动,直接进入单用户模式,没有提示用户名和密码,在原来的机器上却可以正常启动并可进入多用户,什么原因?

    Link URL: http://mytesting.bokee.com/viewdiary.15540028.html
  • bugzilla安装问题

    2008-04-18 23:36:43

    安装软件后,添加产品的模块时,返回错误,刷新网页,显示该模块已存在,如何修改?

    Link URL: http://mytesting.bokee.com/viewdiary.15540069.html
  • linux无法正常启动的问题

    2008-04-18 23:36:43

    Radhat Linux7.3使用正常,将硬盘挂到另一台机器后,系统启动后,用root用户登录,输入正确密码,返回密码错误,进单用户模式,将密码删掉,重新登录root,仍然返回不能正常登录,什么原因?



    Link URL: http://mytesting.bokee.com/viewdiary.15549868.html
  • Bugzilla的安装

    2008-04-18 23:36:43

    最近终于装好的Bugzilla2.20.4,将安装的步骤总结一下:

    1、  安装所需软件:

    Bugzilla2.20.4

    Bugzilla所需perl模块:BugzillaModules-2.20.zip

    Bugzilla汉化包:bugzilla-2.20-cn-1.0汉化包.zip

    Apache2gggAPMserver.zip

    ActivePerl5.8.8 Build 820

    MySQL5.0.22MySQL5.0.27版本安装出现冲突)

    发信模块:Sendmail

    2、  安装ActivePerl

    3、  安装Apache:解压gggAPMserver.zipgggAPMserver文件夹;进入amp文件夹,修改install.bat文件,屏蔽掉mySQL5的安装(后面将单独安装MySQL5.0.22);运行install.bat文件,安装Apache

    4、  安装MySQL5.0.22:安装时,选择utf-8编码,其他可默认安装;

    创建数据库:(Bugzilla默认数据库为bugs,密码为空)

    mysql>create database bugs;

    mysql> grant select,insert,update,delete,index,alter,create,lock tables,drop,references on bugs.* to bugs@localhost identified by '';

    mysql>flush privileges;

    mysql>exit退出数据库

    5、安装Perl模块:解压BugzillaModules-2.20.zipBugzillaModules-2.20目录,进入目录,编辑setup.bat,屏蔽掉File-Spec.ppd的安装(BugzillaModules-2.20提供此模块为0.82版本,bugzilla需要0.84版本以上,而前面ActivePerl安装时所安装的此模块版本较高,此处不需要再安装)

    6、从命令行进入bugzilla安装目录,执行perl checksetup.pl,检查各模块是否已安装,检查通过后生成localconfig文件,打开此文件,检查数据库bugs的信息是否正确;在命令行中再次运行perl checksetup.pl,创建所需要的数据,并要求输入管理员e-Mail及管理员密码等信息;

    7、配置Apache服务器:进入apache/conf,配置文件:

    将网站根目录设成bugzilla所在目录,目录权限设为:

     Options ExecCGI FollowSymLinks

        AllowOverride Limit

    http.conf中加入3行(如果已存在,则修改即可):

    AddHandler cgi-script .cgi

    AddHandler cgi-script .pl

    AddDefaultCharset utf-8

    找到DirectoryIndex index.html…… 这一行,在后面加上index.cgi

    重启Apache服务;

    8、此时,打开http//127.0.0.1,网页无法正常显示;

       使用UE的批量替换功能,替换*.cgi文件中的!/usr/bin/perl –wTperl所在目录,例如:!D:\perl\bin\perl –w

    9、此时打开http//127.0.0.1,,网页可正常显示,配置sendmail:将sendmail放在bugzilla所在目录的usr/lib/目录(同unix文件目录);打开sendmail.ini文件,设置smtp服务器地址,如smtp服务器在局域网中,可直接设为服务器IP地址,如smtp_server=192.168.0.3,设置邮件服务器默认域名,如:default_domain=mail.datech.com.cn

    做完这些设置后,就可以登录bugzilla页面,使用邮箱地址****@datech.com.cn申请帐号,申请成功后,号密码会由sendmail发送到****@datech.com.cn

    10、此时英文版的Bugzilla可正常进行工作,进行汉化工作:解压汉化包bugzilla-2.20-cn-1.0汉化包.zip,解压其中的cn_UTF8.zipcustom.zip,将cn_UTF8放在bugzilla目录中的template目录下,并将文件夹名字改为cn;将custom文件夹放在skins目录;bugzilla安装目录内CGI.pm文件里第55行改为$self->charset('UTF-8');

    进入bugzilla页面,登录管理员帐号,进行系统设置,将语言修改为cn;刷新页面,此时已显示为中文版;如出现乱码,浏览器应选择utf-8编码显示;

     

        安装完成后,仍存在一些问题,如添加产品模块时出现异常,有人建议在windows2003server系统下安装,有待一试……

     

     

     



    Link URL: http://mytesting.bokee.com/viewdiary.15559460.html
  • 软件测试中有关界面测试经验总结

    2008-04-18 23:36:43

    1.应验证界面显示内容的完整性:

      a) 报表显示时应考虑数据显示宽度的自适应或自动换行。

      b) 所有有数据展现的界面(如统计、查询、编辑录入、打印预览、打印等),必须使测试数据的记录数超过一屏/一页,以验证满屏/页时其窗体是否有横向、纵向滚动条或换页打印,界面显示是否正常;

      2.应验证界面显示内容的一致性:

      a) 如有多个系统展现同一数据源时,应保证其一致性;

      3.应验证界面显示内容的准确性:

      a) 对于报表中的所有字段值都应该有明确的定义,对于无意义的字段值,不应该显示空,应显示“--”或“/”,表示该字段值无意义。

      4.应验证界面显示内容的友好性:

      a) 对统计的数据应按用户习惯进行分类、排序。

      b) 某些重要信息在输入、修改、删除时应有“确认”提示信息;

      c) 界面内容更新后系统应提供刷新功能。

      d) 用户在退出系统后重新登陆时应考虑是否需要自动返回到上次退出系统时的界面;

      5.应验证界面提示信息的指导性:

      a) 在多个业务功能组成的一个业务流程中,如果各个功能之间的执行顺序有一定的制约条件,应通过界面提示用户。

      b) 用户提示信息应具有一定的指导性,在应用程序正在进行关键业务的处理时,应考虑在前台界面提示用户应用程序正在进行的处理,以及相应的处理过程,在处理结束后再提示用户处理完毕。

      c) 在某些数据输入界面,如果要求输入的数据符合某项规则,应在输入界面提供相应的规则描述;当输入数据不符合规则时应提示用户是否继续。

      d) 在对任何配置信息修改后,都应该在用户退出该界面时提示用户保存(如果用户没有主动保存的情况下);

      6.应验证界面显示内容的合理性:

      a) 在对某些查询功能进行测试时,应考虑查询条件的设置的合理性以及查询结果的互补性。如某些后台处理时间不应该作为查询条件。

      b) 界面测试时,应考虑某一界面上按钮先后使用的顺序问题,以免用户对此产生迷惑。例如只能在查询成功后显示执行按钮。

      c) 界面测试时,应验证窗口与窗口之间、字段与字段之间的浏览顺序是否正确;

      7.界面测试时,应考虑用户使用的方便性:

      a) 在某些对数据进行处理的操作界面,应考虑用户可能对数据进行处理的频繁程度和工作量,考虑是否可以进行批量操作。

    8.界面测试时,应考虑界面显示及处理的正确性:

      a) 界面测试时应验证所有窗体中的对象状态是否正常,是否符合相关的业务规则需要。

      b) 应验证各种对象访问方法(Tab 健、鼠标移动和快捷键)是否可正常使用,并且在一个激活界面中快捷键无重复;

      c) 界面测试不光要考虑合理的键盘输入,还应考虑是否可以通过鼠标拷贝粘贴输入。

      d) 对于统计查询功能的查询结果应验证其是否只能通过界面上的查询或刷新按键人工触发,应避免其他形式的触发。

      e) 对界面上的任何对象进行拖拉,然后进行查询、打印,应保证查询打印结果不变;

      9.界面测试时,应考虑数据显示的规范性:

      a) 确保数据精度显示的统一:如单价0元,应显示为0.00元;

      b) 确保时间及日期显示格式的统一;

      c) 确保相同含义属性/字段名的统一;

      d) 对所有可能产生的提示信息界面内容和位置进行验证,确保所有的提示信息界面应居中。



    Link URL: http://mytesting.bokee.com/viewdiary.15625673.html
  • 多线程编程

    2008-04-18 23:36:43

         thread.c(thread.obj) : error LNK2001: unresolved external symbol __endthreadex
         thread.c(thread.obj) : error LNK2001: unresolved external symbol __beginthreadex
         这两个函数需要多线程版本的连接库,必须使用/MT或/MD选项,因为它们设立了全局变量如error和     doserrno.在Project->Setting->General->Microsoft foundation classes中选UseMFC in a static      DLL(LIBC.LIB)设/MT或Use MFC in a share DLL(MSVCRT.LIB)设/MD

    Link URL: http://mytesting.bokee.com/viewdiary.15777814.html
  • adsl共享

    2008-04-18 23:36:43

    终于实现两台机器共享adsl了,原来如此简单:只要一台机器的拨号连接设为共享,另一台机器网关为前面机器的IP地址,填入服务商的DNS地址,建立一个家庭小型网络,一切就ok了,爽……

    Link URL: http://mytesting.bokee.com/viewdiary.15794531.html
  • unix系统shell编写(一)

    2008-04-18 23:36:43

    Unix下shell程序编写 一
                       

                      *Shell是什么?

                        任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。

                      Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。

                        为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX

                      Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。

                        1.UNIX内核和Shell的交互方法

                        启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序
                      init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程序调用getty程序在终端上显示login等登陆信息。(username和passwd),在输入密码后,

                      getty调用login进程,该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程

                      把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序,通常setup程序
                      为一个Shell程序,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。

                        得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和

                      该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等)

                         

                        注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或
                      config.sys文件)

                        当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是

                      内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。

                        用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell程序--->UNIX内核--->计算机硬件。当用户输入一个命令,如$ls,

                      Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消

                      该子进程并把控制交给其父进程,即Shell程序。例如执行:

                          $ps

                          该命令将会列出用户正在执行的进程,即Shell程序(下来详细说说,别急现在)和ps程序。若执行:

                          $sleep 10 &
                          $ps

                        其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。

                        每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关,这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛)

                      现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX

                      资源,如cron可以自动执行Shell程序而无需用户的参与,(这个功能好象在/var/spool/crotab目录里)。

                      Crontab 程序对于系统管理员来说是非常有用的。Cron
                      服务用于计划程序在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的
                      crontab 文件放在 /var/spool/crontab/root 中,其格式如下:

                        (1)  (2)  (3)  (4)  (5)  (6)
                         0   0   *   *   3   /usr/bin/updatedb
                            1. 分钟 (0-60)
                            2. 小时 (0-23)
                            3. 日 (1-31)
                            4. 月 (1-12)
                            5. 星期 (1-7)
                            6. 所要运行的程序
                        2.Shell的功能和特点
                        1>命令行解释
                        2>使用保留字
                        3>使用Shell元字符(通配符)
                        4>可处理程序命令
                        5>使用输入输出重定向和管道
                        6>维护一些变量
                        7>运行环境控制
                        8>支持Shell编程

                        对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。


                        "使用保留字":Shell有一些具有特殊意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。

                      保留字随Shell环境的不同而不同。

                        "通配符":* 匹配任何位置
                             ? 匹配单个字符
                             [] 匹配的字符范围或列表 例如:
                             
                                $ls [a-c]*
                               
                                将列出以a-c范围内字符开头的所有文件
                                $ls [a,m,t]*
                               将列出以e,m或t开头的所有文件

                        "程序命令"
                      :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中设置),该变量包含了命令可执行文件可能存在的目录列表。

                      shell从这些目录中寻找命令所对应的可执行文件,然后将该文件送给内核执行。

                        "输入输出重定向及管道" :重定向的功能同DOS的重定向功能:

                           ">" 重定向输出
                           "<" 重定向输入

                        而管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法:
                      command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command
                      2的输入传给command 2,例如:

                          $ls -s|sort -nr|pg

                        该命令列出当前目录中的所有文件,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的

                      内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。

                        "维护变量"
                      :Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值,如:

                               $lookup=/usr/mydir

                      该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,例如:

                               
                               $echo $lookup
                               结果显示:/usr/mydir

                               为了使变量能被子进程使用,可用exprot命令,例如:

                               $lookup=/usr/mydir
                               $export lookup

                        "运行环境控制"
                      :当用户登陆启动shell后,shell要为用户创建一个工作的环境,如下:

                        1>当login程序激活用户shell后,将为用户建立环境变量。从/etc/profile和.profile文件中读出,在这些文件中一般都用$TERM

                      变量设置终端类型,用$PATH变量设置Shell寻找可执行文件的路径。

                        2>从/etc/passwd文件或命令行启动shell时,用户可以给shell程序指定一些参数,例如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。


                        "shell编程" :本文主要介绍的内容。

                        shell本身也是一种语言(*可以先理解为unix命令的组合,加上类C的条件,循环等程序控制语句,类似dos批处理,但要强大的多),用户可以

                      通过shell编程(脚本,文本文件),完成特定的工作。

                      SHELL变量

                        下面我们详细的介绍Bourne Shell的编程:

                        自从贝尔实验室设计了Bourne
                      Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中,Bourne Shell
                      一直保持一致。
                        1>Bsh的启动:用户在登陆后,系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中

                      的信息项为:

                          ice_walk:!:411:103:Imsnow
                      ,ice_walk:/home/ice_walk:/bin/bsh

                        则表明,用户名是ice_walk等信息,在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲

                      的shell程序--脚本)过程中可以使用以下一些参数,我们一一说明:

                        -a 将所有变量输出
                        -c "string"从string中读取命令
                        -e 使用非交互式模式
                        -f 禁止shell文件名产生
                        -h 定义
                        -i 交互式模式
                        -k 为命令的执行设置选项
                        -n 读取命令但不执行
                        -r 受限模式
                        -s 命令从标准输入读取
                        -t 执行一命令,然后退出shell
                        -u 在替换时,使用未设置的变量将会出错
                        -v 显示shell的输入行
                        -x 跟踪模式,显示执行的命令

                      许多模式可以组合起来用,您可以试试了,但-ei好象不行,你说why呢?

                        使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、

                      u、v和x选项。若显示Shell中已经设置的选项,执行:

                          $echo $-

                        Bsh中每个用户的home目录下都有一个.profile文件,可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin),

                      可以把下面代码加入.profile中

                          PATH=$PATH:/ice_walk/bin;exprot PATH

                         .profile中shell的环境变量意思如下:

                          CDPATH 执行cd命令时使用的搜索路径
                          HOME 用户的home目录
                          IFS 内部的域分割符,一般为空格符、制表符、或换行符
                          MAIL 指定特定文件(信箱)的路径,有UNIX邮件系统使用
                          PATH 寻找命令的搜索路径(同dos的config.sys的 path)
                          PS1 主命令提示符,默认是"$"
                          PS2 从命令提示符,默认是">"
                          TERM 使用终端类型

                        2>Bsh里特殊字符及其含义

                        在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们

                      可以让用户在Shell中使用最少的代码完成复杂的任务。

                           *> Shell变量名使用的特殊字符
                              $# 传送给命令Shell的参数序号
                              $- 在Shell启动或使用set命令时提供选项
                              $? 上一条命令执行后返回的值
                              $$ 当前shell的进程号
                              $! 上一个子进程的进程号
                              $@ 所有的参数,每个都用双括号括起
                              $* 所有参数,用双括号括起
                              $n 位置参数值,n表示位置
                               当前shell名
                           *>产生文件名的特殊字符
                              包括"*","?","[]",上面讲过,不再多说。
                           *>数据或程序控制使用的特殊字符
                              >(file) 输出重定向到文件中(没有文件则创建,有则覆盖)
                              >>(file)
                      输出重定向到文件中(没有则创建,有则追加到文件尾部)
                              <(file) 输入重定向到文件
                              ; 命令分割符
                              | 管道符
                              & 后台运行(例如:sleep 10 &)
                              ` ` 命令替换,重定向一条命令的输出作为另一命令的参数
                           *>对于引用或逃逸的特殊字符

                      Bsh用单引号' '和双引号"
                      "将特殊字符或由空白分隔的字引用起来组成一个简单的数据串.使用单引号和双引号的区别是双引号中的内容可进行参数和变量替换.逃逸字符也一样.


                              $echo "$HOME $PATH"
                               结果显示$/u/ice_walk/bin:/etc:/usr/bin
                              而$echo '$HOME $PATH' 结果显示$HOME $PATH

                        shell的逃逸符是一个"\",表示其后的字符不具有特殊的含义或不是shell的函数

                              $echo $HOME $PATH
                              结果显$$HOME /bin:/etc:/usr/bin:

                      3>Bsh的变量

                        前面我们在多个地方引用了变量,当Shell遇到一个"$"符时(没有被引用或逃逸),它将认为其后为一变量。不论该变量是环境变量还是用户自定义的变量,在命令行中变量名要被变量值替换。例如命令:ls

                      $HOME将列出变量HOME对应目录下的文件。
                      用户可以在命令行中的任何地方进行变量替换。包括命令名本身,例如:

                          $dir=ls
                          $$dir f*

                        将列出以f开头的文件。

                        现在详细的介绍下Bsh的变量。Bsh中有四类变量:用户定义的变量、位置变量(shell参数)、预定义变量及环境变量。

                        用户定义的变量:

                        用户定义的变量由字母和下划线组成,并且变量名的第一个字符不能为数字(0~9)。与其他UNIX名字一样,变量名是大小写敏感的。用户可以在命令行上用"="给变量赋值,例如:


                          $NAME=ice_walk

                        给变量NAME赋值为ice_walk,在应用变量NAME的时候,在NAME前加"$"即可,前面已说,不再废话(别说我废话多,关键是没当过老师)。可以用变量和其他字符组成新的字,例如:


                          $SUN=sun
                          $echo $day

                        在应用shell变量时候,可以在变量名字两边$后面加上{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。

                       
                        结果显示:sunday(注意不能echo
                      $SUNday,因为SUNday变量没定义,读者试下执行结果)
                      用户也可以在命令行上同时对多个变量赋值,赋值语句之间用空格分开:

                          $X=x Y=y

                          注意变量赋值是从右到左进行的

                          $X=$Y Y=y
                          X的值是y
                          $X=z Y=$Z

                          Y的值是空(变量未赋值时,shell不报错,而是赋值为空)

                        用户可以使用"unset <变量>"命令清除给变量赋的值

                      用户使用变量时要在其前面加一"$"符,使变量名被变量值所替换。Bsh可以进行变量的条件替换,即只有某种条件发生时才进行替换。替换条件放在一对大括号{}中,如:


                          ${variable: -value}
                      variable是一变量值,value是变量替换使用的默认值

                          $echo Hello $UNAME
                          结果显示:Hello
                          $echo Hello ${UNAME: -there}
                          结果显示:Hello there
                          $echo $UNAME
                          结果显示: (空)
                          $UNAME=John
                          $echo Hello ${UNAME: -there}
                          结果显示:Hello John

                        可以看出,变量替换时将使用命令行中定义的默认值,但变量的值并没有因此而改变。另外一种替换的方法是不但使用默认值进行替换,而且将默认值赋给该变量。其形式如下:


                          $

                        该形式在变量替换后同时把值value符给变量variable。

                          $echo Hello $UNAME
                          结果显示:Hello
                          $echo Hello $
                          结果显示:Hello there
                          $echo $UNAME
                          结果显示:there
                          $UNAME=John
                          $echo Hello $
                          结果显示:Hello John

                        变量替换的值也可以是` `括起来的命令:

                          $USERDIR={$Mydir: -`pwd`}

                        第三种变量的替换方法是只有当变量已赋值时才用指定值替换形式:

                          ${variable: +value}

                          只有变量variable已赋值时,其值才用value替换,否则不进行任何替换,例如:

                          $ERROPT=A
                          $echo ${ERROPT: +"Error tracking is acitive"}
                          结果显示:Error tracking is acitive
                          $ERROPT=
                          $echo ${ERROPT: +"Error tracking is acitive"}
                          结果显示: (空)

                        我们还可以使用错误检查的条件进行变量替换:

                          $

                      当变量variable已设置时,正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程序中,那么该程序将终止)。 例如:


                          $UNAME=
                          $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}
                          结果显示:UNAME HAS NOT BEEN SET

                          $UNAME=Stephanie
                          $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

                          结果显示:Stephanie
                          当没有指定message时,shell将显示一条默认的消息,例如:

                          $UNAME=
                          $echo $
                          结果显示:sh:UNAME:parameter null or not set

                      4>位置变量或Shell参数

                        在shell解释用户的命令时,将把命令行的第一个字作为命令,而其他的字作为参数。当命令对应的可执行文件为Shell程序时,这些参数将作为位置变量传送给该程序。第一个参数记为,第二个为....第九个为。其中1到9是真正的参数名,"$"符只是用来标识变量的替换。


                        位置变量指命令对应的可执行文件名。在后面将详细介绍位置变量。

                        1.只读变量

                        用户将变量赋值后,为了防止以后对该变量的修改,可以用以下命令将该变量设置为只读变量:

                          readonly variable

                        2.export命令

                        shell执行一个程序时,首先为该程序建立一个新的执行环境,称为子shell。在Bourne
                      Shell中变量都是局部的,即他们只在创建他们的Shell中有意义。用户可以用export命令让变量被其他子Shell识别。但某用户的变量是没法让其他用户使用的。


                        当用户启动一个新shell时,该shell将使用默认的提示符。因为赋给变量PS1的值只在当前shell中有效。为了让子Shell使用当前Shell中定义的提示符号,可以使用export命令:


                          $PS1="Enter command:"
                          Enter command:export PS1
                          Enter command:sh
                          Enter command:

                          此时变量PS1变成了全局变量。它可以被其子Shell使用。当变量被设置成全局的以后,将一直保持有效直到用户退出该变量所在的Shell。用户可以在文件.profile中给一个变量永久赋值。详见"规范Shell"。


                      基本语句

                        从本节起,我们将详细介绍Shell程序设计的基本知识,通过编写Shell脚本,用户可以根据自己的需要有条件的或者重复的执行命令。通过Shell程序,可以把单个的UNIX命令组合成一个完全实用的工具,完成用户的任务。


                        1>什么是Shell程序

                        当用户在UNIX Shell中输入了一条复杂的命令,如:

                          $ls -R /|greo myname |pg

                        我们可以称用户在对Shell编程,当把这条语句写在一个文件里,并且符给该文件可执行权限,那么该文件就是我们传统上说的Shell程序。


                        2>简单的Shell程序

                        假设用户每天使用下述命令备份自己的数据文件:

                          $cd /usr/icewalk;ls * |cpio -o > /dev/fd0

                        我们可以把它写在一个文件,如:ba.sh中:

                          $cat >ba.sh
                          cd /usr/icewalk
                          ls * |cpio -o > /dev/fd0
                          ^D  (ctrl_d)

                        程序ba.sh就是Shell脚本,用户可以用vi或其他编辑工具编写更复杂的脚本。

                        此时用户备份文件只需要执行Shell程序ba.sh,执行时需在当前Shell中创建一个子Shell:

                          $sh ba.sh

                        程序sh与用户登陆时执行的Bourne
                      Shell相同,但当Sh命令带参数ba.sh后,它将不再是一个交互式的Shell,而是直接从文件ba.sh中读取命令。

                        执行ba.sh中命令的另一方法是给文件ba.sh执行权限:

                          $chmod +x ba.sh

                        此时,用户可以输入文件名ba.sh做为一个命令来备份自己的数据,需要注意的是,用这种方法执行命令的时候,文件ba.sh必须存在于环境变量$PATH所指定的路径上。



    Link URL: http://mytesting.bokee.com/viewdiary.15819711.html
  • unix下shell编程(二)

    2008-04-18 23:36:43

    3>在Shell中使用数据变量

                        用户可以在Shell中使用数据变量,例如ba.sh程序:

                          cd/usr/icewalk
                          ls|cpio -o > /dev/fd0

                        该程序中要备份的目录为一常量,即该程序只能用来备份一个目录。若在该程序中使用变量,则会使其更通用:

                          workdir=
                          cd $workdir
                          ls * |cpio -o > /dev/fd0

                        通过这一改变,用户可以使用程序备份变量$workdir指定的目录。例如我们要备份/home/www的内容,只要运行ba.sh

                      /home/www即可实现。(若不明白
                      ,下面将详细介绍shell参数的传递,代表本sh程序-ba.sh的第一个参数)

                        4>在Shell程序中加上注释

                        为了增加程序的可读性,我们提倡加入注释。在Shell程序中注释将以"#"号开始。当Shell解释到"#"时,会认为从"#"号起一直到该行行尾为注释。


                        5>对Shell变量进行算术运算

                        高级语言中变量是具有类型的,即变量将被限制为某一数据类型,如整数或字符类型。Shell变量通常按字符进行存储,为了对Shell变量进行算术运算,必须使用expr命令。


                        expr命令将把一个算术表达式作为参数,通常形式如下:

                          expr [数字] [操作符] [数字]

                        由于Shell是按字符形式存储变量的,所以用户必须保证参加算术运算的操作数必须为数值。下面是有效的算术操作符:

                          +   两个整数相加
                          -   第一个数减去第二个数
                          *   两整数相乘
                          /   第一个整数除以第二个整数
                          %   两整数相除,取余数
                        例如:
                          $expr 2 + 1
                           结果显示:3
                          $expr 5 - 3
                           结果显示:2

                      若expr的一个参数是变量,那么在表达式计算之前用变量值替换变量名。
                          $int=3
                          $expr $int + 4
                          结果显示:7
                        用户不能单纯使用"*"做乘法,若输入:
                          $expr 4*5
                        系统将会报错,因为Shell看到"*"将会首先进行文件名替换。正确形式为:
                          $expr 4 \* 5
                           结果显示:20
                        多个算术表达式可以组合在一起,例如:
                          $expr 5 + 7 / 3
                          结果显示:7
                        运算次序是先乘除后加减,若要改变运算次序,必须使用"`"号,如:
                          $int=`expr 5 + 7`
                          $expr $int/3
                           结果显示:4
                          或者:
                          $expr `expr 5+7`/3
                          结果显示:4

                        6>向Shell程序传递参数

                        一个程序可以使用两种方法获得输入数据。一是执行时使用参数。另一种方法是交互式地获得数据。vi编辑程序可以通过交互式的方法获得数据,而ls和expr则从参数中取得数据。以上两种方法Shell程序都可以使用。在"交互式读入数据"一节中将介绍Shell程序通过交互式的方法获得参数。


                        通过命令行给Shell程序传递参数可以扩大程序的用途。以前面提到的ba.sh程序为例:
                        $cat >re.sh
                        cd $workdir
                        cpio -i < /dev/fd0
                        ^d

                        程序re.sh恢复了ba.sh程序备份的所有文件。若只从软盘上恢复一个指定的文件,可以用该文件名作为参数,传递给Shell程序re.sh:


                        程序改写如下:
                        $cat >re2.sh
                        cd $workdir
                        cpio -i < /dev/fd0
                        ^d

                        用户可以指定要恢复的文件,例如fname

                        $re2.sh fname

                      此时文件fname作为第一个位置参数传递给re2.sh,re2.sh的缺点是要恢复两个或多个文件要重复运行,我们可以用$*变量传递不确定的参数给程序:


                        $cat >re3.sh
                        cd $workdir
                        cpio -i $* < /dev/fd0
                        ^d

                        我们就可以恢复多个文件,例如fname1,fname2,fname3
                        $re3.sh fname1 fname2 fname3
                        (以上程序re.sh,re2.sh,re3.sh,假设用户已经chmod了可执行权利)

                        因为没有赋值的变量可以作为NULL看待,所以若是程序re3.sh在执行时候没赋予参数,那么一个空值将被插入到cpio命令中。该命令将恢复所有保存的文件。


                      条件判断语句

                        条件判断语句是程序设计语言中十分重要的语句,该语句的含义是当某一条件满足时,执行指定的一组命令。

                      1>if - then语句

                        格式: if command1
                           then
                             command2
                             command3
                           fi      ---(if 语句结束)
                             command4

                        每个程序或命令执行结束后都有一个返回的状态,用户可以用Shell变量$?获得这一状态。if语句检查前面命令执行的返回状态,若该命令成功执行,那么在then和fi之间的命令都将被执行。在上面的命令序列中,command1和command4总要执行。若command1成功执行,command2和command3也将执行。


                        请看下面程序:
                          #unload -program to backup and remove files
                          cd
                          ls -a | cpio -o > /dev/mnt0
                          rm *

                        该程序在备份资料后,删除档案,但当cpio命令不能成功执行时,rm命令还是把资料删除了,我们可不希望这样,为了避免此情况,可以用if

                      - then语句:
                          #--卸载和判断删除程序

                          cd
                          if ls -a | cpio > /dev/mnt0
                          then
                            rm *
                          fi
                        上面程序在cpio执行成功后才删除档案

                      同时,若执行没有成功,我们希望得到提示,sh中的echo命令可以向用户显示消息,并显示后换行,上面程序可以写成:
                           #--卸载和判断删除程序
                          cd
                          if ls -a | cpio > /dev/mnt0
                          then
                            echo "正删除文件资料... ..."
                            rm *
                          fi

                        echo命令可以使用一些特殊的逃逸字符进行格式化输出,下面是这些字符及其含义:

                          \b  Backspace
                          \c  显示后不换行
                          \f  在终端上屏幕的开始处显示
                          \n  换行
                          \r  回车
                          \t  制表符
                          \v  垂直制表符
                          \   反斜框
                          nnn 用1,2或3位8进制整数表示一个ASCII码字符

                      2>if - then - else语句

                        不用多说它的作用,别的高级语言中都有,格式为:
                        if command1
                        then
                          command2
                          command3
                        else
                          command4
                          command5
                        fi

                        在此结构中,command1中是先执行,当command1成功执行时,将执行command2和command3,否则执行command4和command5


                        注意看下面程序:
                          #备份程序
                          cd
                          if ls -a |cpio -o > /dev/mnt0
                          then
                            echo "删除源资料... ..."
                            rm *
                          else
                            echo "磁带备份失败!"
                          fi

                      3>test命令进行条件测试

                        if语句可以通过测试命令执行的返回状态来控制命令的执行,若要测试其他条件,在bsh中可以使用test命令。该命令检测某一条件,当条件为真时返回0,否则返回非0值。test命令可以使Shell程序中的if语句象其他程序语言中的条件判断语句一样,具有很强的功能。


                        test命令的使用方法为:
                          test condition
                        可测试的条件分为4类:
                        1)测试两个字符串之间的关系。
                        2)测试两个整数之间关系。
                        3)测试文件是否存在或是否具有某种状态或属性。
                        4)测试多个条件的与(and)或(or)组合。

                      1、条件语句>>test语句

                      1>测试字符串间的关系

                        bsh把所有的命令行和变量都看作字符串。一些命令如expr和test可以把字符当作数字进行操作。

                        同样任何数字也可以作为字符串进行操作。

                        用户可以比较两个字符串相等或不等,也可以测试一个串是否赋了值。有关串的操作符如下:
                          str1 = str2      当两个串有相同内容、长度时为真
                          str1 != str2      当串str1和str2不等时为真
                          -n str1        当串的长度大于0时为真(串非空)
                          -z str1        当串的长度为0时为真(空串)
                          str1         当串str1为非空时为真

                        不但Shell程序可以使用test进行条件判断,test命令也可以独立执行,如:

                          $str1=abcd
                          $test $str1 = abcd
                          $echo $?
                          结果显示:0

                      与上例中第一行赋值语句中的等号不同,test命令中的等号两边必须要有空格。本例test命令共有3个参数。注意两个串相等必须是长度和内容都相等。


                          $str1="abcd "
                          $test "$str1" = abcd
                          $echo $?
                          结果显示:1

                        上面str1包含5个字符,其中最后一个为空格符。而test命令中的另一个串只有4个字符,所以两串不等,test返回1。

                        不带任何操作符和使用-n操作符测试一个串结果是一样的,例如:

                          $str1=abce
                          $test $str1
                          $echo $?
                          结果显示:0    
                          $test -n $str1
                          $echo $?
                          结果显示:0

                        但是,上面两条命令也有一点差别,反映出了使用test命令潜在的问题,请看下例:

                          $str1="   "
                          $test $str1
                          $echo $?
                          结果显示:1
                          $test -n "$str1"
                          $echo $?
                          结果显示:0
                          $test -n $str1
                          结果显示:test:argument expected

                        上例中,第一次测试为假因为Shell在执行命令行之前首先要进行变量替换,即把$str1换成空格,然后shell又将命令行上的空格删除,故test命令测试到的为空串。而在第二次测试中,变量替换后空格位于括号内,故不会被删除,test测试到的是一个包含空格的串,在第三次测试中,shell把空格删除,只把-n传个test命令,所以显示参数错。


                      2>测试两个整数之间关系

                        test命令与expr命令一样,也可以把字符转变成整数,然后对其操作。test命令对两个数进行比较,使用的操作符如下:

                          int1 -eq int2    两数相等为真
                          int1 -ne int2    两数不等为真
                          int1 -gt int2    int1大于int2为真
                          int1 -ge int2    int1大于等于int2为真
                          int1 -lt int2    int1小于int2为真
                          int1 -le int2    int1小于等于int2为真

                        下面的例子反映了字符串比较与数字比较的不同:

                          $str1=1234
                          $str2=01234
                          $test $str1 = $str2
                          $echo $?
                          结果显示:1
                          $test $str1 -eq $str2
                          $echo $?
                          结果显示:0

                      3>有关文件的测试

                        使用test进行的第三类测试是测试文件的状态,用户可以测试文件是否存在,是否可写以及其他文件属性。下面是文件测试时使用的选项。注意只有文件存在时,才有可能为真。


                        -r file     用户可读为真
                        -w file     用户可写为真
                        -x file     用户可执行为真
                        -f file     文件为正规文件为真
                        -d file     文件为目录为真
                        -c file     文件为字符特殊文件为真
                        -b file     文件为块特殊文件为真
                        -s file     文件大小非0时为真
                        -t file     当文件描述符(默认为1)指定的设备为终端时为真
                      4>复杂的条件测试(and 、or 、not)
                        -a         与
                        -o        或
                        !        非
                        就是组合条件了,任何高级语言中都有的(NOT 、AND 、OR),例如:
                          $test -r em.null -a -s em.null
                          $echo $?
                          结果显示:1
                          说明了em.null并不是可读并且非空的文件

                      5>另一种执行test的方法

                        bsh中还有另一种执行test命令的方法,就是把测试条件放到一对[
                      ]中,例如:
                          $int1=4
                          $[ $int1 -gt 2 ]
                          $echo $?
                          结果显示:0

                      要注意在[ 的后面和 ]符号的前面要有一个空格。
                        下面我们用test命令写个简单但比较完善的程序:

                          #-- 备份程序
                        
                          #-- 检查参数
                          if [ $# -ne 1 ]
                          then

                            echo "请在程序名后面指出要备份文件所在目录!"
                            exit 1
                          fi
                          #-- 检查目录名是否有效
                          if [ !-d "" ]
                          then
                            echo " 不是一个目录!"
                            exit 2
                          fi
                          cd
                          ls -a | cpio -o >/dev/mnt0
                          if [ $? -eq 0 ]
                          then
                            rm *
                          else
                            echo "cpio执行不成功!备份失败..."
                            exit 3
                          fi

                      6>空命令

                        在Bsh中用 : 代表空命令,就是充个数,什么都不做

                      7>嵌套if语句和elif结构

                        检查条件1
                        A:当条件1为真,则执行一部分操作
                        B:若条件1为假,检查条件2
                          1)若条件2为真,执行另外一部分操作
                          2)若条件2为假,检查条件3
                          3)若条件3为真,执行其他一部分操作
                        语法如下:
                          if command
                          then
                            command
                          else
                            if command
                            then
                              command
                            else
                              if command
                              then
                                command
                              fi
                            fi
                          fi

                      8>elif语句

                        嵌套if语句有时会给用户带来混乱,特别是什么时候fi语句很难判断。因此Bourne
                      Shell又提供了elif语句。elif是else-if的缩写,它表示是if语句的继续。格式为:

                          if command
                          then
                            command
                          elif command
                          then
                            command
                          elif command
                          then
                            command
                          fi

                        上面介绍的嵌套if语句和elif语句完成相同的功能,用户可以根据自己的喜好选择一种使用。

                      9>case语句

                        前面说的elif语句替代if-then-else语句,但有时在编程时还会遇到对同一变量进行多次的测试,该情况可以用多个elif语句实现,但还有一种更简单的方法就是用case语句。


                        case语句不但取代了多个elif和then语句,还可以用变量值对多个模式进行匹配,当某个模式与变量值匹配后,其后的一系列命令将被执行,下面是case语句使用的语句。


                        case value in
                         pattem 1)
                          command
                          command;;
                         pattem 2)
                          command
                          command;;
                         ....
                         pattem)
                          command;
                        esac

                        case语句只执行其中的一组命令,当变量值与多个模式相匹配时,只有第一个匹配的模式对应的命令被执行。";;"表示该模式对应的命令部分程序。


                        通过学习下面的read语句,我们们再举例子说明case语句的用法。

                      10>read语句

                        Shell程序不但可以通过命令行参数得到输入数据,还可以使用read命令提示用户输入数据,其语法格式为:

                        read var1 var2... ...varn

                      当Bsh遇到一个read语句时,在标准输入文件中读取数据直到一个换行符。此时Shell在解释输入行时,不进行文件名或变量的替换,只是简单地删除多余的空格。然后Shell将输入行的第一个字的内容给变量1,第二个给变量2,直到所有变量都赋上值或是输入行为空。若输入行中字的个数超过变量个数,Shell将把输入行中剩余的所有字的内容都赋给最后一个变量。当变量个数多于输入行字的个数时候,多于的变量将赋一个空值。输入行的每一个字是由空格分隔的一个字母和数字组成的字符串。


                        $read var1 var2 var3
                          输入:Hello my friend
                        
                        $echo $var1 $var2 $var3
                          结果显示:Hello my friend
                        $echo $var2
                          结果显示:my

                      下面用个read和case的例子结束本部分的学习:

                        #--交互式备份,恢复程序
                        echo "输入要备份文件所在目录:\c"
                        read WORKDIR
                        if [ !-d $WORKDIR ]
                        then
                          echo "Sorry,$WORKDIR is not a directory"
                          exit 1
                        fi
                        cd $WORKDIR
                        echo "输入选择:"
                        echo _
                        echo "1.恢复到 $WORKDIR"
                        echo "2.备份 $WORKDIR"
                        echo "0.退出"
                        echo
                        echo "\c"
                        read CHOICE
                        case "$CHOICE" in
                         1)echo "恢复中... ..."
                          cpio -i < /dev/mnt0;;
                         2)echo "备份中... ..."
                          ls | cpio -o > /dev/mnt0;;
                         0)exit 1
                         *)exit 1
                        esac
                        if [ $? -ne 0 ]
                        then
                         echo "程序运行中出现错误!"
                        else
                         echo "操作成功!"
                        fi  
                       
                        在上面代码中,"*"定义了其他模式下不匹配时的默认操作。

                      循环语句

                        前面介绍的程序和所学的语句都是从头到尾成一条主线下来,或是成分支结构,在日常管理UNIX的过程中,经常要重复的做一些操作,处理批量的问题,这就涉及到了循环结构,同高级语言相似,UNIX的Shell也提供了强大的循环处理语句。


                        Bsh语言中有三种循环语句-while循环、until循环、for循环,下面通过具体的例子分别介绍这三种结构。

                      While循环

                        在while循环语句中,当某一条件为真时,执行指定的命令。语句的结构如下:

                      while command
                      do
                        command
                        command
                        … …
                      done

                      示例代码如下:

                      #测试while循环小程序

                      x_t=1
                        while [ $x_t -lt 5 ]
                        do
                           mm=` expr $x_t \* $int `  #注意"\"的作用
                           echo "$mm"
                           x_t=` expr $x_t + 1 `   #注意expr的用法
                        done
                        echo "THE WHILE IS END!\n"

                      程序的执行结果如下:
                      1
                      4
                      9
                      16
                      THE WHILE IS END

                        在上述程序中,当变量x_t的值小于5的时候,执行while循环中的语句。在第五次循环时,
                      [ $x_t-lt5]命令返回非零值,于是程序执行done后面的代码。
                      现在利用while循环,可以改进我们早些时候用的备份数据的例子,当用户指定的目录备份完毕后,使用while循环使程序执行一次可以备份多个用户指定的目录。代码如下:


                      echo "欢迎使用备份小程序"

                        ANS=Y
                        while [ $ANS = Y -o $ANS = y ]
                        do
                          echo _
                          #读目录名
                          echo "输入要备份的目录名:\c"
                          read DIR
                          if [ ! -d $DIR ]
                          then
                              echo "$DIR不是一个目录!"
                              exit 1
                          fi
                          cd $DIR
                          echo "请选择:"
                          echo _
                          echo "1 恢复数据到 $DIR"
                          echo "2 备份$DIR的数据"
                          echo
                          echo "请选择:\c"
                          read CHOICE
                          case "$CHOICE" in
                             1) echo "恢复中… …"
                              cpio -i        2) echo "备份中… …"
                              cpio -o >/dev/rmt0;;
                             *) echo "选择无效"
                          esac
                          if [ $? -ne 0 ]
                          then
                             echo "cpio执行过程中出现问题"
                             exit 2
                          fi
                          echo "继续别的目录吗?(Y/y)\c"
                          read ANS
                        done

                        在程序开始,我们给变量ANS符值为Y,根据whlie的判断条件,程序进入while循环,执行do-done中的语句,每次循环都要求用户输入ANS的值用来判断是否进行下次重复执行do-done中的语句。如果用户输入的条件不满足while语句条件,循环结束,程序执行done后面的语句。

     

     

     



    Link URL: http://mytesting.bokee.com/viewdiary.15819720.html
  • unix下shell编程(三)

    2008-04-18 23:36:43

    Until语句

                        While语句中,只要某条件为真,则重复执行循环代码,until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止。


                      Until语句的结构如下:
                      until command
                        do
                          command
                          command
                          … …
                        done

                        可以用until语句替换上面备份程序的while语句,完成同样的功能:

                      until [ $ANS != Y -a $ANS != y ]

                      for 循环
                        在介绍for循环之前,我们要学个非常有用的unix命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在后为,在后面为等。在

                      shift命令执行前变量的值在shift命令执行后就不可用了。

                      示例如下:

                      #测试shift命令(x_shift.sh)
                      until [ $# -eq 0 ]
                      do
                      echo "第一个参数为: 参数个数为: $#"
                      shift
                      done
                      执行以上程序x_shift.sh:
                      $./x_shift.sh 1 2 3 4

                      结果显示如下:

                      第一个参数为: 1 参数个数为: 3
                      第一个参数为: 2 参数个数为: 2
                      第一个参数为: 3 参数个数为: 1
                      第一个参数为: 4 参数个数为: 0

                      从上可知shift命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用until和shift命令计算所有命令行参数的和。


                      #shift上档命令的应用(x_shift2.sh)
                      if [ $# -eq 0 ]
                      then
                      echo "Usage:x_shift2.sh 参数"
                      exit 1
                      fi
                      sum=0
                      until [ $# -eq 0 ]
                      do
                      sum=`expr $sum + `
                      shift
                      done
                      echo "sum is: $sum"

                      执行上述程序:

                      $x_shift2.sh 10 20 15

                      其显示结果为:

                      45

                        shift命令还有另外一个重要用途,Bsh定义了9个位置变量,从到,这并不意味着用户在命令行只能使用9个参数,借助shift命令可以访问多于9个的参数。


                        Shift命令一次移动参数的个数由其所带的参数指定。例如当shell程序处理完前九个命令行参数后,可以使用shift
                      9命令把移到。

                        在熟悉了shift命令后,我们一起看看,Bsh程序中非常有用的for循环语句,这种循环同上面说的while和until循环不同,for语句中的循环是否执行并不由某个条件的真和假来决定,决定for循环是否继续的条件是参数表中是否还有未处理的参数。


                      For语句的结构如下:

                      for variable in arg1 arg2 … argn
                      do
                      command
                      command
                      … …
                      done

                      下面是for循环的简单例子:

                      for LETTER in a b c d
                      do
                      echo $LETTER
                      done

                      程序执行结果如下:

                      a
                      b
                      c
                      d

                      在上面计算参数和的例子中,我们可以用for循环,实现如下:

                      #测试 for 程序(x_for.sh)

                      if [ $# -eq 0 ]
                      then
                         echo "Usage:x_for.sh 参数… …"
                         exit 1
                      fi
                      sum=0
                      for I in $*
                      do
                         sum=`expr $sum + $I`
                      done
                      echo "sum is: $sum"

                      中断循环指令

                        在程序循环语句中,我们有时候希望遇到某中情况时候结束本次循环执行下次循环或结束这个循环,这就涉及到两条语句:continue和break。continue命令可使程序忽略其后循环体中的其他指令,直接进行下次循环,而break命令则立刻结束循环,执行循环体后面的的语句。


                      #测试continue
                      I=1
                      while [ $I -lt 10 ]
                      do
                        if [ $I -eq 3 ]
                        then
                          continue
                        fi
                        if [ $I -eq 7 ]
                        then
                          break
                        fi
                        echo "$I\c"
                      done

                      执行上面程序,结果如下:

                      12456789

                      与或结构

                      使用与/或结构有条件的执行命令

                        Shell程序中可以使用多种不同的方法完成相同的功能,例如until和while语句就可以完成相同的功能,同样,除了if-then-else结构可以使命令有条件的执行外,$$和||操作符也能完成上述功能。在C语言中这两个操作符分别表示逻辑与和逻辑或操作。在Bourne

                      Shell中,用&&连接两条命令的含义只有前面一条命令成功执行了,后面的命令才会执行。

                        &&操作的形式为:

                          command && command

                        例如语句:

                          rm $TEMPDIR/* && echo "Files successfully removed"

                        只有rm命令成功执行以后,才会执行echo命令。若用if-then语句实现上述功能,形式为:

                          if rm $TEMPDIR/*
                          then
                            echo "Files successfully removed"
                          fi
                        相反,用||连接两条命令的含义为只有第一条命令执行失败才执行第二条命令,例如:

                          rm $TEMPDIR/* || echo "File were not removed"

                        上面语句的等价形式为:

                          if rm $TEMPDIR/*
                          then
                            :
                          else
                            echo "Files were not removed"
                          fi
                        这两种操作符可以联合使用,如在下面的命令行中,只有command1和command2执行成功后,command3才会执行:


                          command1 && command2 && command3

                        下面的命令行表示只有command1成功执行,command2不成功执行时,才会执行command3。

                        &&和||操作符可以简化命令条件执行的格式,但一般只用于一条命令的条件执行。如果许多命令都使用这两个操作符,那么整个程序的可读性将变的很差,所以在多条命令的条件执行时,最好采用可读性好的if语句。


                      函数

                        现在我们介绍Shell程序中的函数部分,基本上任何高级语言都支持函数这个东西,能让我们胜好多事情的东西,至少省的频繁的敲击相同的东西,好了come

                      on

                      Shell程序中的函数

                        函数又叫做子程序,可以在程序中的任何地方被调用,其格式如下:

                        函数名字()
                        {
                          command
                          ... ...
                          command;
                        }

                        Shell程序的任何地方都可以用命令
                      "函数名字" 调用,使用函数的好处有两点,一点是使用函数可以把一个复杂的程序化为多个模块,易于管理,符合结构化程序的设计思想,另一个好处是代码的重用。


                        Shell函数和Shel程序比较相似,它们的区别在于Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此,在当前Shell中可以看到Shell函数对变量的修改。在任何Shell中都可以定义函数,包括交互式Shell。


                        例如:

                          $dir() {ls -l;}

                          结果是我们在$后面打dir,其显示结果同ls
                      -l的作用是相同的。该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令:
                          $unset dir
                          下面的例子说明了函数还可以接受位置参数:

                          $dir(){_
                          >echo "permission    ln owner   group    file sz last
                      access
                          >ls -l $*;
                          >}

                          运行 dir a* 看产生什么结果

                          参数a*传递到dir函数中并且代替了$*

                          通常Shell程序将在子Shell中执行,该程序对变量的改变只在子Shell中有效而在当前Shell中无效。"."命令可以使Shell程序在当前Shell中执行。用户可以在当前Shell中定义函数和对变量赋值。通常用下面命令来重新初使化.profile对Shell环境的设置。

                          $ . .profile
                        由于看到这部分相对简单,我们还是顺便说说trap好了

                      使用trap命令进行例外处理

                        用户编写程序在程序运行时可能会发生一些例外情况,比如执行该程序的用户按中断键或使用kill命令,或者控制终端突然与系统断开等。unix系统中的上述情况会使系统向进程发一个信号,通常情况下该信号使进程终止运行。有时侯用户希望进程在接到终止信号时进行一些特殊的操作。若进程在运行时产生一些临时文件,又因接受到的信号而终止。那么该进程产生的临时文件将保留下来。在bsh中,用户可以使用trap命令修改进程接收到终止信号时进行的默认操作。

                        trap命令格式如下:

                           trap command_string signals


                      多数系统中共有15种发给进程的信号,默认情况下大多数信号都会使程序终止。用户最好查阅自己系统的文挡,看看本系统内使用的信号种类。除了信号为9(真正的kill信号)不能使用trap命令外,其他信号所带来的操作都可以用trap命令进行指定。下面是trap命令中经常使用的几种信号:


                          信号   功能
                          
                           1     挂起
                           2    操作中断
                           15    软终止(kill信号)

                        若命令串中包含不只一条命令,必须使用引号将整个命令括起来,具体是单引号还是双引号,由用户是否需要变量替换决定。"
                      "替换,' '不替换。

                        使用下面trap命令可以使程序在接收到挂起、中断或kill信号时,首先把临时文件删除,然后退出:

                          trap "rm $TEMPDIR/* $$;exit" 1 2 15

                        在上面例子中,当Shell读取trap命令时,首先对$TEMPDIR和$$进行变量替换,替换之后的命令串将被保存在trap表中,若上例中trap命令使用单引号时,trap命令执行时候,不进行变量替换,而把命令串 rm

                      $TEMPDIR/*
                      $$;exit 放到trap表中,当检测到信号时,程序解释执行trap表中的命令串,此时进行变量替换。前面变量$TEMPDIR和$$的值为执行trap指令时候的值,后一种情况中变量的值为程序接收到信号时候的值,所以

                      "、'一定要区分仔细。

                        下面命令的含义为用户按二次中断键后,程序才终止:

                          trap 'trap 2' 2

                        一般trap命令中的命令串中几乎都包含exit语句,上面rm的例子若无exit语句,接收到信号rm命令执行完后程序将挂起。但有时用户也需要程序在接到信号后挂起,例如当终端和系统断开后,用户发出挂起信号,并执行空命令,如下:


                          trap : 1

                        若用户想取消前trap指令设置的命令串,可以再执行trap命令,在命令中不指定命令串表示接收到信号后进行默认的操作,命令如下:

                          trap 1

                      规范Shell

                      获取UNIX类型的选项:

                        unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:

                        command -options parameters

                        如果在执行Shell程序也采用上述格式,Bourne
                      Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为:

                        getopts option_string variable

                        其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。


                        下面代码说明了date命令中怎么使用getopts命令处理各种选项,该程序除了完成unix的标准命令date的功能外,还增加了许多新的选项。

                        #新date程序
                        if [ $# -lt 1 ]
                        then
                          date
                        else
                          while getopts mdyDHMSTJjwahr OPTION
                          do
                            case $OPTION
                            in
                              m)date '+%m';;
                              d)date '+%d';;
                              y)date '+%y';;
                              D)date '+%D';;
                              H0date '+%H';;
                              M)date '+%M';;
                              S)date '+%S';;
                              T)date '+%T';;
                              j)date '+%j';;
                              J)date '+%y%j';;
                              w)date '+%w';;
                              a)date '+%a';;
                              h)date '+%h';;
                              r)date '+%r';;
                              \?)echo "无效的选项!$OPTION";;
                            esac
                          done
                        fi

                      有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。


                        下面的例子,实现拷贝一个文件,并给文件赋一个新的名字。-c选项指定程序拷贝的次数,-v选项要求显示新创建文件的文件名。

                        #--拷贝程序

                        COPIES=1
                        VERBOSE=N
                        while getopts vc:OPTION
                        do
                          case $OPTION
                          in
                            c)COPIES=$OPTARG;;
                            v)VERBOSE=Y;;
                            \?)echo "无效参数!"
                              exit 1;;
                          esac
                        done
                        if [ $OPTIND -gt $# ]
                        then
                          echo "No file name specified"
                           exit 2
                        fi
                        shift 'expr $OPTIND - 1'
                        FILE=
                        COPY=0
                        while [ $COPIES -gt $COPY ]
                        do
                          COPY='expr $COPY + 1'
                          cp $FILE $ $
                          if [ VERBOSE = Y }
                          then
                            echo $ $
                          fi
                        done

                      规范Shell:

                        我们知道环境变量PS1是提示符,看下面程序chdir:
                        if [ ! -d "$!" ]
                        then
                          echo " is not a directory"
                          exit 1
                        fi
                        cd
                        PS1="'pwd'>"
                        export PS1

                        我们执行:

                          $chdir /usr/ice666

                        结果提示符号变成/usr/ice666>了吗?没有,为什么?

                        原因在于:chdir在子Shell中执行,变量PS1的修改在当前Shell中也不会起作用,若要chdir完成意想中的功能,必须在当前Shell中执行该命令。最好的方法就是把其改成一个函数并且在.profile文件中定义。但若要把函数放到单个文件中并在当前Shell中执行,则需要使用

                      . 命令,并将chdir重写成一个函数,把其中的exit改写成return。下面代码是
                      .ice_ps的内容:

                        #--提示符
                        chdir()
                        {
                        if [ !-d "" ]
                        then
                          echo " is not a directory"
                          return
                        fi
                        cd
                        PS1="'pwd'>"
                        export PS1;
                        }

                        然后我们在.profile文件中加入下面语句

                        .ice_ps

                        然后在切换目录的时候,我们用chdir命令,结果是什么呢,自己实验好了!
                       
                      调试Shell程序

                      1>调试shell程序

                        用户刚编写完Shell程序中,不可避免的会有错误,这时我们可以利用Bsh中提供的跟踪选项,该选项会显示刚刚执行的命令及参数。用户可以通过set命令打开-x选项或在启动Shell使用-x选项将Shell设置成跟踪模式。例如有下面代码ice_tx:


                        if [ $# -eq 0 ]
                        then
                          echo "usage:sumints integer list"
                          exit 1
                        fi
                        sum=0
                        until [ $# -eq 0 ]
                        do
                          sum='expr $sum + '
                          shift
                        done
                        echo $sum

                        我们用跟踪模式运行:

                        $sh -x ice_tx 2 3 4
                        结果显示:
                        +[ 3 -eq 0 ]
                        +sum=0
                        +[ 3 -eq 0 ]
                        +expr 0+2
                        +sum=2
                        +shift
                        +[ 2 -eq 0 ]
                        +expr 2+3
                        +sum=5
                        +shift
                        +[ 1 -eq 0 ]
                        +expr 5+4
                        +sum=9
                        +[ 0 -eq 0 ]
                        +echo 9
                        9

                        从上面可以看出,跟踪模式下Shell显示执行的每一条命令以及该命令使用的变量替换后的参数值。一些控制字如if、then、until等没显示。


                      2>命令分组

                        Shell中若干命令可以组成一个单元一起执行。为了标识一组命令,这些命令必须放到"()"或"{}"中。放在"()"中的命令将在子Shell中运行,而放在"{}"中的命令将在当前Shell中运行。子Shell中运行的命令不影响当前Shell的变量。当前Shell中运行的命令影响当前Shell的变量。


                        $NUMBER=2
                        $(A=2;B=2;NUMBER='expr $A+$B';echo $NUMBER)
                        结果为:4
                        $echo $NUMBER
                        结果为:2
                        如果把上面的()变成{},结果会是怎么样的呢?

                      3>使用Shell分层管理器shl

                        UNIX是一个多道程序设计的操作系统,一些UNIX系统利用这一特性提供了Shell层次管理器shl。使用shl用户一次可以打开多个层次的Shell,其中活跃的Shell可以从终端上获得输入。但所有Shell的输出都可在终端上显示,除非显示被禁止。


                        多个Shell中有一个为shl,当用户在某个Shell中工作时,可以通过使用特殊字符(一般为Ctrl+z)返回shl。为了同其他Shell区别,shl中提示符为">>>"。当用户工作在Shell层次管理器中时,可以创建、激活和删除Shell,下面是shl中使用的命令。


                        create name    产生名为name的层次
                        delete name    删除名为name的层次
                        block name     禁止名为name的层次的输出
                        unblock name    恢复名为name的层次的输出
                        resume name    激活名为name的层次
                        toggle       激活近来经常使用的层次
                        name        激活名为name的层次

                        layers [-l] name 
                      对于表中的每个层次,显示其正在运行的进程的进程号,-l选项要求显示详细信息。

                        help        显示shl命令的帮助信息
                        quit        退出shl以及所有被激活的层次

                      总结

                        在前面我们主要介绍了sh的变量、基本语法、程序设计等。如果掌握了这些内容,在学习其他UNIX下编程语言的时候,相信有一定的好处,我们说了,在大多数的UNIX中都提供Bourn

                      Shell,而且很少有象sh这样强大的脚本编辑语言了,是系统管理员和程序员的一笔财富,并且不需要额外的软件环境,对文件等处理借助unix命令,实现起来比c实现还要简单。



    Link URL: http://mytesting.bokee.com/viewdiary.15819724.html
  • 我们是糖,甜到哀伤(转)

    2008-04-18 23:36:43

    爱上她,就像儿时爱上糖一样,感觉怎么也爱不够,虽然明知道会有牙齿长虫的危险,但是,却仍然那么义无返顾。也许,别人无法理解,但是对于我来说,爱她已经像是习惯一样,已经像毒品上瘾一样,我无法让自己不去爱她。

     

    虽然她与我总是聚少离多,但是,那相聚时的热烈与分别后的相思就像一柄双刃剑一样,既给我甜蜜,也给我痛苦。让我难以忘却跟她在一起的分分秒秒,让我难以忘却跟她分离的岁岁年年。

     

    记得,刚开始爱上她的时候,我像个小孩子一样在她面前从不掩饰自己的喜怒哀乐,从不压抑和改变自己的倔强脾气,可是,慢慢的,在她面前我开始变得温顺,也许,是小时侯所学到的哲理改变了我:如果你要吃到糖,那么你就要珍惜好糖,不能让她在太阳底下融化。我爱上了她,那么就要像儿时那样去珍惜好糖。所以我要为她改变,虽然她一直对我不满意,但是我一直在努力,从来没有放弃修正自己。

     

    虽然她总是以我们之间年龄的差距来搪塞我,但是,我一直在努力地告诉她这样一个信念:如果是真爱,年龄不是问题。虽然我们无法去与世俗抗衡,但是我们可以自私一点,我们为了寻找属于自己的真正的幸福生活可以不去想那么多,可以不用像别人一样,把自己的生活当作戏剧一样演给别人看,我们只做自己的演员与观众,只演给自己看。但是她总是在强调爱情与婚姻不只是两个人的事情,而是两个家庭之间的事情。所以我们一直为此辩论不休。其实在这个世界上,无论以什么姿态,以什么高超的演技,把自己的生活演绎给别人看,可能我们已经很尽力了,但是,总会有人不满意,要么是我们自己,要么是我们的家人,要想做到十全十美,几乎是不可能的。那我们何必要去想那么多呢?我们只需要在乎我们在一起是否合适,是否幸福就够了。

     

    其实,糖也是这样,有时虽然糖衣很漂亮,但是我们吃起来却并不满意,因为那种糖并不适合我们的口味。每一个人都有自己不同的口味,所以,我们不必去追求糖衣的华丽,我们只需要选择适合自己口味的糖核就够了。追求生活的朴实无华与内在本质就像我们选糖和吃糖的过程一样。

     

    爱上她,感觉自己变成了糖一样,有甜滋滋的幸福,也有怕被阳光融化的惶恐,更有怕一不小心打翻她醋坛子的小心翼翼。虽然我知道她吃醋是在乎我爱我,但是,醋坛子终究会影响糖的甜蜜,终究会影响她的身体健康。我只想告诉她:爱你,已经成为我一生的职业,呵护你,已经是我今生所选择的梦想。无论我们之间有多么深的误会,请你不要轻易放弃我们的爱情,请你不要再轻易将分手说出口。要想糖能够甜蜜得更长久,最好的办法是将糖永远揣在手心里,但不要吃掉,也不要在一只手上揣得太久,偶儿换一只手,可能我们就能永远保持着想吃糖的欲望,永远保持着对糖的甜蜜的回忆。

     

    我们是糖,虽然我们的年龄无法让我们披一件美丽的糖衣,那也没有什么可惜的,毕竟我们是糖,我们有自己的甜蜜;毕竟我们是糖,我们已经融为了一体。虽然有争吵,但是要相信,糖分子永远在糖里,正如爱情永远在我们的心里一样。

     

    我们是糖,甜到哀伤,在每一个孤寂的夜晚,在每一个喧闹的白天,我都在回忆远在大洋彼岸的你,都在回忆你给我的甜蜜,请不要责怪我,请不要批评我,爱你,我愿意这样自我折磨。虽然,我不知道你是否还在为今天的事情生气,但是,看到你生气,我却是那么心急,却是那么心疼,也许你不相信,但是,那钻心的痛苦却让我无法入眠无法进食。我知道,我永远得罪不起你,因为我爱你,得罪了你,我就会受到你温柔而又野蛮的惩罚。

     

    此时此刻,我多想见到你,我多想伏在你的怀中痛哭一场,为我们爱情路上的艰辛,为我们爱情未来的迷茫……..

     

    我们是糖,甜到哀伤。在这个凄风冷雨的深夜,我不知道该用怎样的文字向你表白我内心的痛苦与绝望,因为爱你,我不能在阳光里歌唱我们的爱情,我们彼此只能躲在糖衣下,永远遮掩着我们的爱情,我们本来不是偷情,可是我们却比偷情的人还要小心翼翼。因为爱我,你不能挽着我的手徜徉在阳光里,我们彼此只有躲在阴影里,我们本来是相爱的恋人,可是我们却要避开所有人的眼睛。这是你忧伤,也是我的哀伤;是你的痛苦,也是我的迷茫。

     

    我们是糖,甜到哀伤。我多么希望你放弃对我的怨恨,我多么希望能听到你的声音,因为在这个凄风冷雨的深夜,你是我心里的阳光。




    Link URL: http://mytesting.bokee.com/viewdiary.15843674.html
  • 踏瑶娘(皮影戏)

    2008-04-18 23:36:43

    女:野花迎风飘摆,好像是在倾诉衷肠;绿草凄凄抖动,如无尽的缠绵依恋;初率的柳枝坠入悠悠碧水,搅乱了芳心柔情荡漾.为什么春天每年都如期而至,而我远行的丈夫却年年不见音信。

    男:离家去国整整三年,为了梦想中金碧辉煌的长安,都市里充满了神奇的历险,满足一个男儿宏伟的心愿。现在终于衣锦还乡,又遇上这故里的春天。看这一江春水,看这满溪桃花,看这如黛青山,都没有丝毫改变,也不知我新婚一个月就别离的妻子是否依旧红颜。

    男:来的是谁家女子,生得春光满面,美丽非凡?这位姑娘,请你停下美丽的脚步,你可知自己犯下什么样的错误?

    女:这位将军,明明是你的马蹄踢翻了我的竹篮,你看这宽阔的道路直通蓝天…
       你却非让这可恶的畜生溅起我满身污点,怎么反倒……怪罪起我的错误?

    男:您的错误就是美若天仙,蓬松的乌发涨满了我的眼帘,看不见道路山川,只是漆黑一片……

    女:…真的美若天仙?

    男:是的!你的错误就是美若天仙,你婀娜的身姿让我的手不听使唤,你蓬松的乌发涨满了我的眼帘,看不见道路山川,只是漆黑一片;你明艳的面颊让我胯下的这头畜生倾倒,竟忘记了他的主人是多么威严。



    Link URL: http://mytesting.bokee.com/viewdiary.15843742.html
  • 一道有关榨汁机的面试题引发的思考思考(转)

    2008-04-18 23:36:43

    对于一台榨汁机的需求阶段,需求还没有整理出来,测试人员先行介入,测试人员应该从哪些方面考虑测试用例

    我不知道是哪位仁兄出的这道题目,也不知道这位仁兄的原意如何。但是如果要我来回答,那我的答案是:“无可奉告”。

    我们先来回顾一下软件测试的定义。现在一般分为两派,一派认为软件测试是为了证明软件“可以工作”,另外一派认为软件测试是为了证明软件“不能工作”。好,不管是那派,他们都需要有一个可以测试的东西作为基础,才能开始下面的证明工作。出题目的仁兄告诉我们,“需求还没整理出来”,测试人员就“先行介入”了。如果不是题目的陷阱,那只能认为这个项目的团队“有问题”。在需求还不明确的前提下,测试人员可以做的事情有两个:一是学习和项目有关的基础知识,剩下的就是等待。(需要指出的是,在需求不明确的前提下,开发人员是无法开始做high level design的,更加谈不上让测试人员参与design的讨论)

    回到题目上来,我们假设题目有所改变,该榨汁机是一台普通的榨汁机,插电后放入水果或者蔬菜,按动开关,就可以榨汁。(和市面上能买到的差不多)那么需要如何考虑测试用例?虽然没实际用过榨汁机,但是靠想象应该也差不多。

    1. 考虑90%以上用户的使用习惯,确保最基本的功能-榨汁能够正常运作。

    • 通常的水果:西瓜、番茄、黄瓜、苹果、草莓、香蕉、李子、甘蔗等单独作为输入。
    • 非常见:玉米
    • 水果的混编作为输入。
    • 在输入容器所能容纳的情况下,输出的量杯是否足够大能容纳榨出的液体。
    • 在水果较硬的情况下,是否能正常工作。
    • 水果较软的情况下,是否能正常工作。
    • 如果有按钮或开关调节,测试按钮或开关的可用性和有效性。

    2. 易用性测试

    • 榨汁机的外观是否美观。这是用户选择的关键。
    • 榨汁机的电源线长度是否足够。
    • 量杯大小测试

    3. Force Error测试

    • 在空转情况(无输入)下做榨汁
    • 在有异物(如蔬果的枝叶)的情况下做榨汁
    • 在榨汁过程中停电,看是否能恢复
    • 110v电源输入测试
    • 在高温的情况是否能正常工作(40度以上)
    • 在周围有磁场的情况下是否能正常工作
    • 掉落测试

    4. Security 测试

    • 是否有儿童手指保护措施?
    • 在榨汁有漏出的情况下,是否会有漏电?

    5. 耐用性测试

    • 刀片耐用度测试
    • 平均无故障时间统计
    • 按钮或开关耐用度测试
    • 榨汁机使用寿命测试
    • 榨汁机本体容器压强测试

    基本上来讲,就是这些,对于一个只在电视上看过,从来没用过的人已经是一件不容易的事情了。



    Link URL: http://mytesting.bokee.com/viewdiary.15871762.html
  • 内聚与耦合

    2008-04-18 23:36:43

    内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求强内聚,弱耦合。
    一、内聚强度
    内聚按强度从低到高有以下几种类型:
    (1) 偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。
    (2) 逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。
    (3) 时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。
    (4) 过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
    (5) 通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
    (6) 顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
    (7) 功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。
    二、耦合强度
    耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。
    耦合按从强到弱的顺序可分为以下几种类型:
    (1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。
    (2)公共耦合。两个以上的模块共同引用一个全局数据项就称为公共耦合。
    (3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。
    (4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。
    (5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。
    (6)非直接耦合。模块间没有信息传递时,属于非直接耦合。
    如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。


    Link URL: http://mytesting.bokee.com/viewdiary.15959747.html
  • 软件测试常用术语表

    2008-04-18 23:36:43


    Acceptance Testing--可接受性测试

    一般由用户/客户进行的确认是否可以接受一个产品的验证性测试。

    actual outcome--实际结果

    被测对象在特定的条件下实际产生的结果。

    Ad Hoc Testing--随机测试

    测试人员通过随机的尝试系统的功能,试图使系统中断。

    algorithm--算法

    (1)一个定义好的有限规则集,用于在有限步骤内解决一个问题;(2)执行一个特定任务的任何操作序列。

    algorithm analysis--算法分析

    一个软件的验证确认任务,用于保证选择的算法是正确的、合适的和稳定的,并且满足所有精确性、规模和时间

    方面的要求。

    Alpha Testing--Alpha测试

    由选定的用户进行的产品早期性测试。这个测试一般在可控制的环境下进行的。

    analysis--分析

    (1)分解到一些原子部分或基本原则,以便确定整体的特性;(2)一个推理的过程,显示一个特定的结果是假

    设前提的结果;(3)一个问题的方法研究,并且问题被分解为一些小的相关单元作进一步详细研究。

    anomaly--异常

    在文档或软件操作中观察到的任何与期望违背的结果。

    application software--应用软件

    满足特定需要的软件。

    architecture--构架

    一个系统或组件的组织结构。

    ASQ--自动化软件质量(Automated Software Quality)

    使用软件工具来提高软件的质量。

    assertion--断言

    指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的

    条件。

    assertion checking--断言检查

    用户在程序中嵌入的断言的检查。

    audit--审计

    一个或一组工作产品的独立检查以评价与规格、标准、契约或其它准则的符合程度。

    audit trail--审计跟踪

    系统审计活动的一个时间记录。

    Automated Testing--自动化测试

    使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。

    第120贴【2004-10-13】:常见测试术语二

    Backus-Naur Form--BNF范式

    一种分析语言,用于形式化描述语言的语法

    baseline--基线

    一个已经被正式评审和批准的规格或产品,它作为进一步开发的一个基础,并且必须通过正式的变更流程来变更



    Basic Block--基本块

    一个或多个顺序的可执行语句块,不包含任何分支语句。

    basis test set--基本测试集

    根据代码逻辑引出来的一个测试用例集合,它保证能获得100%的分支覆盖。

    behaviour--行为

    对于一个系统的一个函数的输入和预置条件组合以及需要的反应。一个函数的所有规格包含一个或多个行为。

    benchmark--标杆/指标/基准

    一个标准,根据该标准可以进行度量或比较。

    Beta Testing--Beta测试

    在客户场地,由客户进行的对产品预发布版本的测试。这个测试一般是不可控的。

    big-bang testing--大锤测试/一次性集成测试

    非渐增式集成测试的一种策略,测试的时候把所有系统的组件一次性组合成系统进行测试。

    Black Box Testing--黑盒测试

    根据软件的规格对软件进行的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子



    bottom-up testing--由低向上测试

    渐增式集成测试的一种,其策略是先测试底层的组件,然后逐步加入较高层次的组件进行测试,直到系统所有组

    件都加入到系统。

    boundary value--边界值

    一个输入或输出值,它处在等价类的边界上。

    boundary value coverage--边界值覆盖

    通过测试用例,测试组件等价类的所有边界值。

    boundary value testing--边界值测试

    通过边界值分析方法来生成测试用例的一种测试策略。

    Boundry Value Analysis--边界值分析

    该分析一般与等价类一起使用。经验认为软件的错误经常在输入的边界上产生,因此边界值分析就是分析软件输

    入边界的一种方法。

    branch--分支

    在组件中,控制从任何语句到其它任何非直接后续语句的一个条件转换,或者是一个无条件转换。

    branch condition--分支条件

    branch condition combination coverage--分支条件组合覆盖

    在每个判定中所有分支条件结果组合被测试用例覆盖到的百分比。

    branch condition combination testing--分支条件组合测试

    通过执行分支条件结果组合来设计测试用例的一种方法。

    branch condition coverage--分支条件覆盖

    每个判定中分支条件结果被测试用例覆盖到的百分比。

    branch condition testing--分支条件测试

    通过执行分支条件结果来设计测试用例的一种方法。

    branch coverage--分支覆盖

    通过测试执行到的分支的百分比。

    branch outcome--分支结果

    见判定结果(decision outcome)

    branch point--分支点

    见判定(decision)

    branch testing--分支测试

    通过执行分支结果来设计测试用例的一种方法。

    Breadth Testing--广度测试

    在测试中测试一个产品的所有功能,但是不测试更细节的特性。

    bug--缺陷

    第121贴【2004-10-14】:常见测试术语三

    capture/playback tool--捕获/回放工具

    参考capture/replay tool

    Capture/Replay Tool--捕获/回放工具

    一种测试工具,能够捕获在测试过程中传递给软件的输入,并且能够在以后的时间中,重复这个执行的过程。这

    类工具一般在GUI测试中用的较多。

    CASE--计算机辅助软件工程(computer aided software engineering)

    用于支持软件开发的一个自动化系统。

    CAST--计算机辅助测试

    在测试过程中使用计算机软件工具进行辅助的测试。

    cause-effect graph--因果图

    一个图形,用来表示输入(原因)与结果之间的关系,可以被用来设计测试用例。

    certification --证明

    一个过程,用于确定一个系统或组件与特定的需求相一致。

    change control--变更控制

    一个用于计算机系统或系统数据修改的过程,该过程是质量保证程序的一个关键子集,需要被明确的描述。

    code audit --代码审计

    由一个人、组或工具对源代码进行的一个独立的评审,以验证其与设计规格、程序标准的一致性。正确性和有效

    性也会被评价。

    Code Coverage--代码覆盖率

    一种分析方法,用于确定在一个测试套执行后,软件的哪些部分被执行到了,哪些部分没有被执行到。

    Code Inspection--代码检视

    一个正式的同行评审手段,在该评审中,作者的同行根据检查表对程序的逻辑进行提问,并检查其与编码规范的

    一致性。

    Code Walkthrough--代码走读

    一个非正式的同行评审手段,在该评审中,代码被使用一些简单的测试用例进行人工执行,程序变量的状态被手

    工分析,以分析程序的逻辑和假设。

    code-based testing--基于代码的测试

    根据从实现中引出的目标设计测试用例。

    coding standards--编程规范

    一些编程方面需要遵循的标准,包括命名方式、排版格式等内容。

    Compatibility Testing--兼容性测试

    测试软件是否和系统的其它与之交互的元素之间兼容,如:浏览器、操作系统、硬件等。

    complete path testing --完全路径测试

    参考穷尽测试(exhaustive testing)

    completeness--完整性

    实体的所有必须部分必须被包含的属性。

    complexity --复杂性

    系统或组件难于理解或验证的程度。

    Component--组件

    一个最小的软件单元,有着独立的规格

    Component Testing--组件测试

    参考单元测试

    computation data use--计算数据使用

    一个不在条件中的数据使用。

    computer system security--计算机系统安全性

    计算机软件和硬件对偶然的或故意的访问、使用、修改或破坏的一种保护机制。

    condition--条件

    一个不包含布尔操作的布尔表达式,例如:A

    condition coverage--条件覆盖

    通过测试执行到的条件的百分比。

    condition outcome--条件结果

    条件为真为假的评价。

    configuration control--配置控制

    配置管理的一个方面,包括评价、协调、批准、和实现配置项的变更。

    configuration management--配置管理

    一套技术和管理方面的原则用于确定和文档化一个配置项的功能和物理属性、控制对这些属性的变更、记录和报

    告变更处理和实现的状态、以及验证与指定需求的一致性。

    conformance criterion-- 一致性标准

    判断组件在一个特定输入值上的行为是否符合规格的一种方法。

    Conformance Testing-- 一致性测试

    测试一个系统的实现是否和其基于的规格相一致的测试。

    consistency -- 一致性

    在系统或组件的各组成部分和文档之间没有矛盾,一致的程度。

    consistency checker-- 一致性检查器

    一个软件工具,用于测试设计规格中需求的一致性和完整性。

    control flow--控制流

    程序执行中所有可能的事件顺序的一个抽象表示。

    control flow graph--控制流图

    通过一个组件的可能替换控制流路径的一个图形表示。

    conversion testing--转换测试

    用于测试已有系统的数据是否能够转换到替代系统上的一种测试。

    corrective maintenance--故障检修

    用于纠正硬件或软件中故障的维护。

    correctness --正确性

    软件遵从其规格的程度。

    correctness --正确性

    软件在其规格、设计和编码中没有故障的程度。软件、文档和其它项满足需求的程度。软件、文档和其它项满足

    用户明显的和隐含的需求的程度。

    coverage --覆盖率

    用于确定测试所执行到的覆盖项的百分比。

    coverage item--覆盖项

    作为测试基础的一个入口或属性:如语句、分支、条件等。

    crash--崩溃

    计算机系统或组件突然并完全的丧失功能。

    criticality--关键性

    需求、模块、错误、故障、失效或其它项对一个系统的操作或开发影响的程度。

    criticality analysis--关键性分析

    需求的一种分析,它根据需求的风险情况给每个需求项分配一个关键级别。

    cyclomatic complexity--循环复杂度

    一个程序中独立路径的数量。

    第122贴【2004-10-19】:常见测试术语四

    data corruption--数据污染

    违背数据一致性的情况。

    data definition--数据定义

    一个可执行语句,在该语句上一个变量被赋予了一个值。

    data definition C-use coverage--数据定义C-use覆盖

    在组件中被测试执行到的数据定义C-use使用对的百分比。

    data definition C-use pair--数据定义C-use使用对

    一个数据定义和一个计算数据使用,数据使用的值是数据定义的值。

    data definition P-use coverage--数据定义P-use覆盖

    在组件中被测试执行到的数据定义P-use使用对的百分比。

    data definition P-use pair--数据定义P-use使用对

    一个数据定义和一个条件数据使用,数据使用的值是数据定义的值。

    data definition-use coverage--数据定义使用覆盖

    在组件中被测试执行到的数据定义使用对的百分比。

    data definition-use pair --数据定义使用对

    一个数据定义和一个数据使用,数据使用的值是数据定义的值。

    data definition-use testing--数据定义使用测试

    以执行数据定义使用对为目标进行测试用例设计的一种技术。

    data dictionary--数据字典

    (1)一个软件系统中使用的所有数据项名称,以及这些项相关属性的集合。(2)数据流、数据元素、文件、数据基础、和相关处理的一个集合。

    data flow analysis--数据流分析

    一个软件验证和确认过程,用于保证输入和输出数据和它们的格式是被适当定义的,并且数据流是正确的。

    data flow coverage--数据流覆盖

    测试覆盖率的度量是根据变量在代码中的使用情况。

    data flow diagram--数据流图

    把数据源、数据接受、数据存储和数据处理作为节点描述的一个图形,数据之间的逻辑体现为节点之间的边。

    data flow testing--数据流测试

    根据代码中变量的使用情况进行的测试。

    data integrity--数据完整性

    一个数据集合完全、正确和一致的程度。

    data use--数据使用

    一个可执行的语句,在该语句中,变量的值被访问。

    data validation--数据确认

    用于确认数据不正确、不完整和不合理的过程。

    dead code--死代码

    在程序操作过程中永远不可能被执行到的代码。

    Debugging--调试

    发现和去除软件失效根源的过程。

    decision--判定

    一个程序控制点,在该控制点上,控制流有两个或多个可替换路由。

    Decision condition--判定条件

    判定内的一个条件。

    decision coverage--判定覆盖

    在组件中被测试执行到的判定结果的百分比。

    decision outcome--判定结果

    一个判定的结果,决定控制流走哪条路径。

    decision table--判定表

    一个表格,用于显示条件和条件导致动作的集合。

    Depth Testing--深度测试

    执行一个产品的一个特性的所有细节,但不测试所有特性。比较广度测试。

    design of experiments--实验设计

    一种计划实验的方法,这样适合分析的数据可以被收集。

    design-based testing--基于设计的测试

    根据软件的构架或详细设计引出测试用例的一种方法。

    desk checking--桌面检查

    通过手工模拟软件执行的方式进行测试的一种方式。

    diagnostic--诊断

    检测和隔离故障或失效的过程。

    dirty testing--肮脏测试

    参考负面测试(negative testing)

    disaster recovery--灾难恢复

    一个灾难的恢复和重建过程或能力。

    documentation testing --文档测试

    测试关注于文档的正确性。

    domain--域

    值被选择的一个集合。

    domain testing--域测试

    参考等价划分测试(equivalence partition testing)

    dynamic analysis--动态分析

    根据执行的行为评价一个系统或组件的过程。

    Dynamic Testing--动态测试

    通过执行软件的手段来测试软件。

    第123贴【2004-10-20】:常见测试术语五

    embedded software--嵌入式软件

    软件运行在特定硬件设备中,不能独立于硬件存在。这类系统一般要求实时性较高。

    emulator--仿真

    一个模仿另一个系统的系统或设备,它接受相同的输入并产生相同的输出。

    End-to-End testing--端到端测试

    在一个模拟现实使用的场景下测试一个完整的应用环境,例如和数据库交互,使用网络通信等。

    entity relationship diagram--实体关系图

    描述现实世界中实体及它们关系的图形。

    entry point --入口点

    一个组件的第一个可执行语句。

    Equivalence Class--等价类

    组件输入或输出域的一个部分,在该部分中,组件的行为从组件的规格上来看认为是相同的。

    equivalence partition coverage--等价划分覆盖

    在组件中被测试执行到的等价类的百分比。

    equivalence partition testing--等价划分测试

    根据等价类设计测试用例的一种技术。

    Equivalence Partitioning--等价划分

    组件的一个测试用例设计技术,该技术从组件的等价类中选取典型的点进行测试。

    error--错误

    IEEE的定义是:一个人为产生不正确结果的行为。

    error guessing--错误猜测

    根据测试人员以往的经验猜测可能出现问题的地方来进行用例设计的一种技术。

    error seeding--错误播种/错误插值

    故意插入一些已知故障(fault)到一个系统中去的过程,目的是为了根据错误检测和跟踪的效率并估计系统中遗

    留缺陷的数量。

    exception--异常/例外

    一个引起正常程序执行挂起的事件。

    executable statement--可执行语句

    一个语句在被编译后会转换成目标代码,当程序运行是会被执行,并且可能对程序数据产生动作。

    Exhaustive Testing--穷尽测试

    测试覆盖软件的所有输入和条件组合。

    exit point--出口点

    一个组件的最后一个可执行语句。

    expected outcome--期望结果

    参考预期结果(predicted outcome)。

    第124贴【2004-10-21】:常见测试术语六

    failure--失效

    软件的行为与其期望的服务相背离。

    fault--故障

    在软件中一个错误的表现。

    feasible path--可达路径

    可以通过一组输入值和条件执行到的一条路径。

    feature testing--特性测试

    参考功能测试(Functional Testing)

    FMEA--失效模型效果分析(Failure Modes and Effects Analysis)

    可靠性分析中的一种方法,用于在基本组件级别上确认对系统性能有重大影响的失效。

    FMECA--失效模型效果关键性分析(Failure Modes and Effects Criticality Analysis)

    FMEA的一个扩展,它分析了失效结果的严重性。

    FTA--故障树分析(Fault Tree Analysis)

    引起一个不需要事件产生的条件和因素的确认和分析,通常是严重影响系统性能、经济性、安全性或其它需要特

    性。

    functional decomposition--功能分解

    参考模块分解(modular decomposition)

    Functional Specification --功能规格说明书

    一个详细描述产品特性的文档。

    Functional Testing--功能测试

    测试一个产品的特性和可操作行为以确定它们满足规格。

    第125贴【2004-10-22】:常见测试术语七

    glass box testing--玻璃盒测试

    参考白盒测试(White Box Testing)

    IEEE--美国电子与电器工程师学会(Institute of Electrical and Electronic Engineers)

    incremental testing--渐增测试

    集成测试的一种,组件逐渐被增加到系统中直到整个系统被集成。

    infeasible path--不可达路径

    不能够通过任何可能的输入值集合执行到的路径。

    input domain--输入域

    所有可能输入的集合。

    inspection--检视

    对文档进行的一种评审形式。

    installability testing--可安装性测试

    确定系统的安装程序是否正确的测试。

    instrumentation--插装

    在程序中插入额外的代码以获得程序在执行时行为的信息。

    instrumenter--插装器

    执行插装的工具

    Integration Testing--集成测试

    测试一个应用组合后的部分以确保它们的功能在组合之后正确。该测试一般在单元测试之后进行。

    interface--接口

    两个功能单元的共享边界。

    interface analysis--接口分析

    分析软件与硬件、用户和其它软件之间接口的需求规格。

    interface testing--接口测试

    测试系统组件间接口的一种测试。

    invalid inputs--无效输入

    在程序功能输入域之外的测试数据。

    isolation testing--孤立测试

    组件测试(单元测试)策略中的一种,把被测组件从其上下文组件之中孤立出来,通过设计驱动和桩进行测试的

    一种方法。

    第126贴【2004-10-25】:常见测试术语八

    Job--工作

    一个用户定义的要计算机完成的工作单元。

    job control language--工作控制语言

    用于确定工作顺序,描述它们对操作系统要求并控制它们执行的语言。

    LCSAJ--线性代码顺序和跳转(Linear Code Sequence And Jump)

    包含三个部分:可执行语句线性顺序的起始,线性顺序的结束,在线性顺序结束处控制流跳转的目标语句。

    LCSAJ coverage--LCSAJ覆盖

    在组件中被测试执行到的LCSAJ的百分比。

    LCSAJ testing--LCSAJ测试

    根据LCSAJ设计测试用例的一种技术。

    Load Testing--负载测试

    通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。

    logic analysis--逻辑分析

    (1)评价软件设计的关键安全方程式、算法和控制逻辑的方法。(2)评价程序操作的顺序并且检测可能导致灾难的错误。

    logic-coverage testing--逻辑覆盖测试

    参考结构化测试用例设计(structural test case design)

    maintainability--可维护性

    一个软件系统或组件可以被修改的容易程度,这个修改一般是因为缺陷纠正、性能改进或特性增加引起的。

    maintainability testing--可维护性测试

    测试系统是否满足可维护性目标。

    modified condition/decision coverage--修改条件/判定覆盖

    在组件中被测试执行到的修改条件/判定的百分比。

    modified condition/decision testing --修改条件/判定测试

    根据MC/DC设计测试用例的一种技术。

    Monkey Testing--跳跃式测试

    随机性,跳跃式的测试一个系统,以确定一个系统是否会崩溃。

    MTBF--平均失效间隔实际(mean time between failures)

    两次失效之间的平均操作时间。

    MTTF--平均失效时间 (mean time to failure)

    第一次失效之前的平均时间

    MTTR--平均修复时间(mean time to repair)

    两次修复之间的平均时间

    multiple condition coverage--多条件覆盖

    参考分支条件组合覆盖(branch condition combination coverage)

    mutation analysis--变体分析

    一种确定测试用例套完整性的方法,该方法通过判断测试用例套能够区别程序与其变体之间的程度。

    第127贴【2004-10-26】:常见测试术语九

    Negative Testing--逆向测试/反向测试/负面测试

    测试瞄准于使系统不能工作。

    non-functional requirements testing--非功能性需求测试

    与功能不相关的需求测试,如:性能测试、可用性测试等。

    N-switch coverage--N切换覆盖

    在组件中被测试执行到的N转换顺序的百分比。

    N-switch testing--N切换测试

    根据N转换顺序设计测试用例的一种技术,经常用于状态转换测试中。

    N-transitions--N转换

    N+1转换顺序

    operational testing--可操作性测试

    在系统或组件操作的环境中评价它们的表现。

    output domain--输出域

    所有可能输出的集合。

    第128贴【2004-10-27】:常见测试术语十

    partition testing--分类测试

    参考等价划分测试(equivalence partition testing)

    path--路径

    一个组件从入口到出口的一条可执行语句顺序。

    path coverage--路径覆盖

    在组件中被测试执行到的路径的百分比。

    path sensitizing--路径敏感性

    选择一组输入值强制组件走一个给定的路径。

    path testing--路径测试

    根据路径设计测试用例的一种技术,经常用于状态转换测试中。

    performance testing--性能测试

    评价一个产品或组件与性能需求是否符合的测试。

    portability testing--可移植性

    测试瞄准于证明软件可以被移植到指定的硬件或软件平台上。

    Positive Testing--正向测试

    测试瞄准于显示系统能够正常工作。

    precondition--预置条件

    环境或状态条件,组件执行之前必须被填充一个特定的输入值。

    predicate--谓词

    一个逻辑表达式,结果为‘真’或‘假’。

    predicate data use--谓词数据使用

    在谓词中的一个数据使用。

    program instrumenter--程序插装

    参考插装(instrumenter)

    progressive testing--递进测试

    在先前特性回归测试之后对新特性进行测试的一种策略。

    pseudo-random--伪随机

    看似随机的,实际上是根据预先安排的顺序进行的。

    第129贴【2004-10-28】:常见测试术语十一

    QA--质量保证(quality assurance)

    (1)已计划的系统性活动,用于保证一个组件、模块或系统遵从已确立的需求。(2)采取的所有活动以保证一

    个开发组织交付的产品满足性能需求和已确立的标准和过程。

    QC--质量控制(quality control)

    用于获得质量需求的操作技术和过程,如测试活动。

    Race Condition--竞争状态

    并行问题的根源。对一个共享资源的多个访问,至少包含了一个写操作,但是没有一个机制来协调同时发生的访问。

    recovery testing--恢复性测试

    验证系统从失效中恢复能力的测试。

    regression analysis and testing--回归分析和测试

    一个软件验证和确认任务以确定在修改后需要重复测试和分析的范围。

    Regression Testing--回归测试

    在发生修改之后重新测试先前的测试以保证修改的正确性。

    release--发布

    一个批准版本的正式通知和分发。

    reliability--可靠性

    一个系统或组件在规定的条件下在指定的时间内执行其需要功能的能力。

    reliability assessment--可靠性评价

    确定一个已有系统或组件的可靠性级别的过程。

    requirements-based testing--基于需求的测试

    根据软件组件的需求导出测试用例的一种设计方法。

    review--评审

    在产品开发过程中,把产品提交给项目成员、用户、管理者或其它相关人员评价或批准的过程。

    risk--风险

    不期望效果的可能性和严重性的一个度量。

    risk assessment--风险评估

    对风险和风险影响的一个完整的评价。

    第130贴【2004-10-29】:常见测试术语十二

    safety--(生命)安全性

    不会引起人员伤亡、产生疾病、毁坏或损失设备和财产、或者破坏环境。

    safety critical--严格的安全性

    一个条件、事件、操作、过程或项,它的认识、控制或执行对生命安全性的系统来说是非常关键的。

    Sanity Testing--理智测试

    软件主要功能成分的简单测试以保证它是否能进行基本的测试。参考冒烟测试

    SDP--软件开发计划(software development plan)

    用于一个软件产品开发的项目计划。

    security testing--安全性测试

    验证系统是否符合安全性目标的一种测试。

    security.--(信息)安全性

    参考计算机系统安全性(computer system security)

    serviceability testing--可服务性测试

    参考可维护性测试(maintainability testing)

    simple subpath--简单子路径

    控制流的一个子路径,其中没有不必要的部分被执行。

    simulation--模拟

    使用另一个系统来表示一个物理的或抽象的系统的选定行为特性。

    simulation--模拟

    使用一个可执行模型来表示一个对象的行为。

    simulator--模拟器

    软件验证期间的一个设备、软件程序、或系统,当它给定一个控制的输入时,表现的与一个给定的系统类似。

    第131贴【2004-11-1】:常见测试术语十三

    SLA--服务级别协议(service level agreement)

    服务提供商与客户之间的一个协议,用于规定服务提供商应当提供什么服务。

    Smoke Testing--冒烟测试

    对软件主要功能进行快餐式测试。最早来自于硬件测试实践,以确定新的硬件在第一次使用的时候不会着火。

    software development process--软件开发过程

    一个把用户需求转换为软件产品的开发过程。

    software diversity--软件多样性

    一种软件开发技术,其中,由不同的程序员或开发组开发的相同规格的不同程序,目的是为了检测错误、增加可靠性。

    software element--软件元素

    软件开发或维护期间产生或获得的一个可交付的或过程内的文档。

    software engineering--软件工程

    一个应用于软件开发、操作和维护的系统性的、有纪律的、可量化的方法。

    software engineering environment--软件工程环境

    执行一个软件工程工作的硬件、软件和固件。

    software life cycle--软件生命周期

    开始于一个软件产品的构思,结束于该产品不再被使用的这段期间。

    SOP--标准操作过程(standard operating procedures)

    书面的步骤,这对保证生产和处理的控制是必须的。

    source code--源代码

    用一种适合于输入到汇编器、编译器或其它转换设备的计算机指令和数据定义。

    source statement--源语句

    参考语句(statement)

    第132贴【2004-11-2】:常见测试术语十四

    specification--规格

    组件功能的一个描述,格式是:对指定的输入在指定的条件下的输出。

    specified input--指定的输入

    一个输入,根据规格能预知其输出。

    spiral model --螺旋模型

    软件开发过程的一个模型,其中的组成活动,典型的包括需求分析,概要设计,详细设计,编码,集成和测试等活动被迭代的执行直到软件被完成。

    SQL--结构化查询语句(structured query language)

    在一个关系数据库中查询和处理数据的一种语言。

    state--状态

    一个系统、组件或模拟可能存在其中的一个条件或模式。

    state diagram--状态图

    一个图形,描绘一个系统或组件可能假设的状态,并且显示引起或导致一个状态切换到另一个状态的事件或环境。

    state transition--状态转换

    一个系统或组件的两个允许状态之间的切换。

    state transition testing --状态转换测试

    根据状态转换来设计测试用例的一种方法。

    statement--语句

    程序语言的一个实体,是典型的最小可执行单元。

    statement coverage--语句覆盖

    在一个组件中,通过执行一定的测试用例所能达到的语句覆盖百分比。

    statement testing--语句测试

    根据语句覆盖来设计测试用例的一种方法。

    Static Analysis--静态分析

    分析一个程序的执行,但是并不实际执行这个程序。

    第133贴【2004-11-3】:常见测试术语十五

    Static Analyzer--静态分析器

    进行静态分析的工具。

    Static Testing--静态测试

    不通过执行来测试一个系统。

    statistical testing--统计测试

    通过使用对输入统计分布进行分析来构造测试用例的一种测试设计方法。

    stepwise refinement--逐步优化

    一个结构化软件设计技术,数据和处理步骤首先被广泛的定义,然后被逐步的进行了细化。

    storage testing--存储测试

    验证系统是否满足指定存储目标的测试。

    Stress Testing--压力测试

    在规定的规格条件或者超过规定的规格条件下,测试一个系统,以评价其行为。类似负载测试,通常是性能测试

    的一部分。

    structural coverage--结构化覆盖

    根据组件内部的结构度量覆盖率。

    structural test case design--结构化测试用例设计

    根据组件内部结构的分析来设计测试用例的一种方法。

    structural testing--结构化测试

    参考结构化测试用例设计(structural test case design)

    structured basis testing--结构化的基础测试

    根据代码逻辑设计测试用例来获得100%分支覆盖的一种测试用例设计技术。

    structured design--结构化设计

    软件设计的任何遵循一定纪律的方法,它按照特定的规则,例如:模块化,有顶向下设计,数据逐步优化,系统

    结构和处理步骤。

    structured programming--结构化编程

    在结构化程序开发中的任何包含结构化设计和结果的软件开发技术。

    structured walkthrough--结构化走读

    参考走读(walkthrough)

    第134贴【2004-11-4】:常见测试术语十六

    stub--桩

    一个软件模块的框架或特殊目标实现,主要用于开发和测试一个组件,该组件调用或依赖这个模块。

    symbolic evaluation--符号评价

    参考符号执行(symbolic execution)

    symbolic execution--符号执行

    通过符号表达式来执行程序路径的一种静态分析设计技术。其中,程序的执行被用符号来模拟,例如,使用变量

    名而不是实际值,程序的输出被表示成包含这些符号的逻辑或数学表达式。

    symbolic trace--符号轨迹

    一个计算机程序通过符号执行是经过的语句分支结果的一个记录。

    syntax testing--语法分析

    根据输入语法来验证一个系统或组件的测试用例设计技术。

    system analysis--系统分析

    对一个计划的或现实的系统进行的一个系统性调查以确定系统的功能以及系统与其它系统之间的交互。

    system design--系统设计

    一个定义硬件和软件构架、组件、模块、接口和数据的过程以满足指定的规格。

    system integration--系统集成

    一个系统组件的渐增的连接和测试,直到一个完整的系统。

    System Testing--系统测试

    从一个系统的整体而不是个体上来测试一个系统,并且该测试关注的是规格,而不是系统内部的逻辑。

    第135贴【2004-11-7】:常见测试术语十七

    technical requirements testing--技术需求测试

    参考非功能需求测试(non-functional requirements testing)

    test automation--测试自动化

    使用工具来控制测试的执行、结果的比较、测试预置条件的设置、和其它测试控制和报告功能。

    test case--测试用例

    用于特定目标而开发的一组输入、预置条件和预期结果。

    test case design technique--测试用例设计技术

    选择和导出测试用例的技术。

    test case suite--测试用例套

    对被测软件的一个或多个测试用例的集合。

    test comparator--测试比较器

    一个测试工具用于比较软件实际测试产生的结果与测试用例预期的结果。

    test completion criterion--测试完成标准

    一个标准用于确定被计划的测试何时完成。

    test coverage--测试覆盖

    参考覆盖率(Coverage)

    test driver--测试驱动

    一个程序或测试工具用于根据测试套执行软件。

    test environment--测试环境

    测试运行其上的软件和硬件环境的描述,以及任何其它与被测软件交互的软件,包括驱动和桩。

    第136贴【2004-11-8】:常见测试术语十八

    test execution--测试执行

    一个测试用例被被测软件执行,并得到一个结果。

    test execution technique--测试执行技术

    执行测试用例的技术,包括手工、自动化等。

    test generator--测试生成器

    根据特定的测试用例产生测试用例的工具。

    test harness--测试用具

    包含测试驱动和测试比较器的测试工具。

    test log--测试日志

    一个关于测试执行所有相关细节的时间记录。

    test measurement technique--测试度量技术

    度量测试覆盖率的技术。

    Test Plan--测试计划

    一个文档,描述了要进行的测试活动的范围、方法、资源和进度。它确定测试项、被测特性、测试任务、谁执行

    任务,并且任何风险都要冲突计划。

    test procedure--测试规程

    一个文档,提供详细的测试用例执行指令。

    test records--测试记录

    对每个测试,明确的记录被测组件的标识、版本,测试规格,和实际结果

    test report--测试报告

    一个描述系统或组件执行的测试和结果的文档。

    Test Script--测试脚本

    一般指的是一个特定测试的一系列指令,这些指令可以被自动化测试工具执行。

    Test Specification--测试规格

    一个文档,用于指定一个软件特性、特性组合或所有特性的测试方法、输入、预期结果和执行条件。

    第137贴【2004-11-9】:常见测试术语十九

    test strategy--测试策略

    一个简单的高层文档,用于描述测试的大致方法,目标和方向。

    test suite--测试套

    测试用例和/或测试脚本的一个集合,与一个应用的特定功能或特性相关。

    test target--测试目标

    一组测试完成标准。

    testability--可测试性

    一个系统或组件有利于测试标准建立和确定这些标准是否被满足的测试执行的程度。

    Testing--测试

    IEEE给出的定义是:1)一个执行软件的过程,以验证其满足指定的需求并检测错误。2)一个软件项的分析过程

    以检测已有条件之间的不同,并评价软件项的特性。

    thread testing--线程测试

    自顶向下测试的一个变化版本,其中,递增的组件集成遵循需求子集的实现。

    time sharing--时间共享

    一种操作方式,允许两个或多个用户在相同的计算机系统上同时执行计算机程序。其实现可能通过时间片轮转、

    优先级中断等。

    top-down design--由顶向下设计

    一种设计策略,首先设计最高层的抽象和处理,然后逐步向更低级别进行设计。

    top-down testing--自顶向下测试

    集成测试的一种策略,首先测试最顶层的组件,其它组件使用桩,然后逐步加入较低层的组件进行测试,直到所

    有组件被集成到系统中。

    traceability--可跟踪性

    开发过程的两个或多个产品之间关系可以被建立起来的程度,尤其是产品彼此之间有一个前后处理关系。

    traceability analysis--跟踪性分析

    (1)跟踪概念文档中的软件需求到系统需求;(2)跟踪软件设计描述到软件需求规格,以及软件需求规格到软

    件设计描述;(3)跟踪源代码对应到设计规格,以及设计规格对应到源代码。分析确定它们之间正确性、一致性

    、完整性、精确性的关系。

    traceability matrix--跟踪矩阵

    一个用于记录两个或多个产品之间关系的矩阵。例如,需求跟踪矩阵是跟踪从需求到设计再到编码的实现。

    第138贴【2004-11-10】:常见测试术语二十

    transaction--事务/处理

    (1)一个命令、消息或输入记录,它明确或隐含的调用了一个处理活动,例如更新一个文件。(2)用户和系统

    之间的一次交互。(3)在一个数据库管理系统中,完成一个特定目的的处理单元,如恢复、更新、修改或删除一

    个或多个数据元素。

    transform analysis--事务分析

    系统的结构是根据分析系统需要处理的事务获得的一种分析技术。

    trojan horse--特洛伊木马

    一种攻击计算机系统的方法,典型的方法是提供一个包含具有攻击性隐含代码的有用程序给用户,在用户执行该

    程序的时候,其隐含的代码对系统进行非法访问,并可能产生破坏。

    truth table--真值表

    用于逻辑操作的一个操作表格。

    Unit Testing--单元测试

    测试单个的软件组件,属于白盒测试范畴,其测试基础是软件内部的逻辑。

    Usability Testing--可用性测试

    测试用户使用和学习产品的容易程度。

    validation--确认

    根据用户需要确认软件开发的产品的正确性。

    verification--验证

    评价一个组件或系统以确认给定开发阶段的产品是否满足该阶段开始时设定的标准。

    version--版本

    一个软件项或软件元素的一个初始发布或一个完整的再发布。

    volume testing--容量测试

    使用大容量数据测试系统的一种策略。

    Walkthrough--走读

    一个针对需求、设计或代码的非正式的同行评审,一般由作者发起,由作者的同行参与进行的评审过程。

    waterfall model--瀑布模型

    软件开发过程模型的一种,包括概念阶段、需求阶段、设计阶段、实现阶段、测试阶段、安装和检查阶段、操作

    和维护阶段,这些阶段按次序进行,可能有部分重叠,但很少会迭代。

    White Box Testing--白盒测试

    根据软件内部的工作原理分析来进行测试。


    Link URL: http://mytesting.bokee.com/viewdiary.15959906.html
  • 软件测试相关定义

    2008-04-18 23:36:43

    1、软件测试一般要达到一下目标:
       确保产品完成了它所承诺或者公布的功能,并且保证所有用户可以访问到的功能都有明确的书面说明;
       确保产品满足性能和效率的要求;
       确保产品是健壮的和适应用户环境的;

    2、软件测试的原则:
       应尽早的和不断的进行软件测试;
       程序员或软件的设计机构应避免测试自己设计的程序;
       开始测试前应设计合理的测试用例;
       测试用例的设计应该有合法的数据输入,也应该有非法的数据输入;
       程序修改之后要进行回归测试;
       充分注意测试过程中的群集现象;
       妥善保留测试计划、所有测试用例、错误统计和最终分析报告,并作为软件的组成部分之一,为软件的维护提供方便;
       对每一个测试结果做全面检查;
       严格执行测试计划,排除测试的随意性;

    3、白盒测试:通过对程序内部结构的分析、检测来寻找问题;
       黑盒测试:通过软件的外在表现来发现其缺陷和错误;
       灰盒测试:关注输入对于输入正确性,同时也关注内部表现,但他对内部的关注不像白盒测试那样详细、完整,它只是通过一些表征性的现象、事件、标志来判断内部的运行状态;

    4、单元测试:定义:又称模块测试,是针对软件结构中独立的基本单位进行的测试;
                 目的:检测程序单位对《详细设计说明书》的符合程度;
                 依据:《详细设计说明书》、《单元测试计划》;
                 内容:局部数据结构、模块接口、重要执行路径、错误处理、边界测试;

       集成测试:定义:把通过单元测试的模块组装在一起后进行测试,其目的是检查程序单元或部件的接口关系;
                 依据:《概要设计说明书》、《集成测试计划》;
                 内容:在把各个模块组装起来的时候,穿越模块接口之间的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;各子功能组合起来,是否能达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度;

       确认测试:定义:在开发过程期间或结束时对系统或部件进行评价,以确定它是否满足特定的需求的过程;
                 目的:验证软件的功能、性能及其他特性是否与用户要求的一致;
                 内容:软件是否符合所有的功能和性能的要求;文档资料是否正确完整;人机界面和其他方面是否令客户满意;

       系统测试:定义:在完成确认测试后,将软件作为计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起,在实际应用环境下,对计算机系统进行的一系列组装测试和确认测试;
                 内容:恢复测试、安全性测试、强度测试、性能测试等;

       验收测试:定义:确定系统是否符合其验收准则,使客户确定是否能接受此系统或部件的正式测试;
                 依据:《需求规格说明书》、《验收测试计划》

    5、黑盒测试一般主要为了发现以下几类错误:
       是否有不正确或遗漏的功能;
       在接口上,输入的数据是否能被正确的接受,能否输出正确的结果;
       是否有数据结构错误或外部信息访问错误;
       性能上能否满足要求;
       是否有初始化或终止性错误;

    6、黑盒测试方法:等价类划分、边界值分析法、错误推测法、因果图法、场景法、正交试验法、功能图法、判定表驱动法
      
      


      



    Link URL: http://mytesting.bokee.com/viewdiary.15973081.html
  • 测试要点

    2008-04-18 23:36:43

    网络性能测试内容:网络容量测试、网络响应时间测试、网络可靠性测试、网络吞吐量测试、网络配置规模测试、网络瓶颈测试、衰减测试;
    网络应用测试内容:特性测试、功能测试、网络应用负载测试、网络系统响应时间测试、网络系统升级测试:

    Web测试内容:功能测试、性能测试、可用性测试、兼容性测试、安全测试
    功能测试:链接测试、表单测试、Cookies测试、设计语言测试、数据库测试
    性能测试:连接速度测试、负载测试、压力测试
    可用性测试:导航测试、图形界面测试、内容测试、整体界面测试
    兼容性测试:平台测试、浏览器测试
    安全测试:SSL配置测试、登录模块测试、事务完整性测试

    Web测试方法:虚拟用户法、WUS法、对象驱动法

    防火墙测试主要考虑以下的测试点:
    是否支持交换和路由两种工作模式;
    是否支持对http、ftp、smtp等服务的访问控制;
    是否考虑到防火墙的冗余设计;
    是否对日志进行了统计分析;
    是否支持日志的本地或远程数据库存储;
    对非法攻击是否有多种警告方式和警告级别;

    安全测试方法:功能测试、漏洞测试、模拟攻击测试、侦听技术
    安全测试内容:用户认证机制、加密机制、安全防护策略、数据备份与恢复、防病毒系统

    操作系统兼容性:跨平台测试、操作系统不同版本的兼容性测试、操作系统不同语言版的兼容性测试、不同厂家同类型操作系统的兼容性测试;
    软件兼容性测试:操作系统兼容性测试、数据库兼容性测试、中间件兼容性测试、与其他软件的兼容性测试

    安装测试内容:安装手册的评估、安装的自动化程度测试、安装选项和设置的测试、安装的中断测试、安装的顺序测试、多环境安装测试、安装的正确性测试、修复安装测试及卸载测试

    功能易用性测试:业务符合性、功能定制性、业务模块的集成度、约束性、交互性、系统信息与错误提示

    联机帮助的测试:准确性测试、用户的查询、帮助主题的完整性、帮助的风格

    用户文档:联机帮助、样例、示例和模板、包装、广告和宣传,其他
    用户文档测试要点:文档的读者群、文档的术语、文档的正确性、文档的完整性、文档的一致性、文档的易用性、样例与示例、文档的语言、印刷和包装质量


    面向对象测试过程:指定范围、指定深度、指定已创建的被测试模块的基本要求、以基本模型的内容为输入来设计测试用例作为评估标准、生成测试覆盖度量标准、试用测试清单执行静态分析,确保被测模块与基本模型的一致性、执行测试用例、如果覆盖不足以检测所有的活动,就需要分解测试工作,并且使用传统测试用例的方式来警醒,或者终端测试,重新测试传统测试用例;


    Link URL: http://mytesting.bokee.com/viewdiary.15977627.html
  • 系统可靠度

    2008-04-18 23:36:43

    两个部件地可靠度R均为0.8,由这个部件串联构成地系统地可靠度为______;由这个部件并构成地系统可靠度为______。

    串联:0.8×0.8=0.64

    并联:1-(1-0.8)(1-0.8)=0.96



    Link URL: http://mytesting.bokee.com/viewdiary.15984352.html
  • 软件测试试题参考

    2008-04-18 23:36:43

    1、  从软件工程角度来看,软件测试主要分为哪几个阶段?(画出流程图)

    2、  简要列出bug的几种状态

    3、  黑盒测试的定义,白盒测试的定义

    4、  CMM”的含义,分为哪5个等级。

    5、根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。
      "一个程序读入3个整数,它们分别代表一个三角形的3个边长。该程序判断所输入的整数是否构成一个三角形,以及该三角形是一般的、等腰的或等边的,并将结果打印出来。"
    要求:设三角形的3条边分别为ABC,并且

    1 列出等价类表,格式如下:

    输入条件

    有效等价类

    无效等价类

    (注意:将等价类编号)

    (注意:将等价类编号)

    2 设计测试用例,格式如下:
       用例n:输入【ABC】覆盖等价类……(列出等价类序号),输出结果为……

    6设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:
    有一个处理单价为15角钱的盒装饮料的自动售货机软件。若投入15角硬币,按下可乐雪碧红茶按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。

    (1)
    试利用因果图法,建立该软件的因果图;

    (2)
    设计测试该软件的全部测试用例。



    Link URL: http://mytesting.bokee.com/viewdiary.15984371.html
  • memcmp与strncmp函数

    2008-04-18 23:36:43

      int   memcmp(const   void   *   cs,const   void   *   ct,size_t   count)  
      {  

      const   unsigned   char   *su1,   *su2;  
      int   res   =   0;  
       
      for(   su1   =   cs,   su2   =   ct;   0   <   count;   ++su1,   ++su2,   count--)  
      if   ((res   =   *su1   -   *su2)   !=   0)  
      break;  
      return   res;  
     }  
       
      int   strncmp(const   char   *   cs,const   char   *   ct,size_t   count)  
      {  
      register   signed   char   __res   =   0;       
      while   (count)   {  
      if   ((__res   =   *cs   -   *ct++)   !=   0   ||   !*cs++)  
      break;  
      count--;  
      }      
      return   __res;  
      }

    1、这两个函数的差别其实还是挺大的,差别在这里:     
      对于memcmp(),如果两个字符串相同而且count大于字符串长度的话,memcmp不会在\0处停下来,会继续比较\0后面的内存单元,直到_res不为零或者达到count次数。      
      对于strncmp(),由于((__res   =   *cs   -   *ct++)   !=   0   ||   !*cs++)的存在,比较必定会在最短的字符串的末尾停下来,即使count还未为零。具体的例子:      
      char   a1[]="ABCD";  
      char   a2[]="ABCD";       
      对于memcmp(a1,a2,10),memcmp在两个字符串的\0之后继续比较  
      对于strncmp(a1,a2,10),strncmp在两个字符串的末尾停下,不再继续比较。       
      所以,如果想使用memcmp比较字符串,要保证count不能超过最短字符串的长度,否则结果有可能是错误的。

    2、strncmp("abcd",   "abcdef",   6)   =   0。比较次数是一样的:   
       memcmp:在比较到第5个字符也就是'\0',*su1   -   *su2的结果显然不等于0,所以满足条件跳出循环,不会再进行后面的比较。我想在其他情况下也一样。   
       strncmp:同样的道理再比较到第5个字符时结束循环,其实strncmp中“!*cs++”完全等同于“!*ct++”,其作用仅在于当两个字符串相同的情形下,防止多余的比较次数。

     

     



    Link URL: http://mytesting.bokee.com/viewdiary.16149601.html
271/212>

我的存档

数据统计

  • 访问量: 12274
  • 日志数: 27
  • 建立时间: 2008-04-06
  • 更新时间: 2008-04-18

RSS订阅

Open Toolbar