脑袋里装的浆糊咩?总是记不住,总是做不对。。。。要说你多少次???

发布新日志

  • Unix/Linux之oracle相关shell

    2009-10-09 10:44:29

    1、执行oracle数据库中的存储过程

        proc.sh脚本内容(IBM的AIX环境下)

        ORACLE_BASE=/oracle;export ORACLE_BASE

        ORACLE_HOME=$ORACLE_BASE/product/10.2.0;export ORACLE_HOME

        ORACLE_SID=commdb;export ORACLE_SID

        $ORACLE_HOME/bin/sqlplus cfa/cfa<<!

        exec sp_B_20090827;

        exit

        !

        2、备份文件名后缀为日期对数据库中的表进行exp备份

        exp_tab_perday.sh脚本内容(IBM的AIX环境下)

        DATE=`date +%Y%m%d_%T`;export DATE

        ORACLE_BASE=/oracle;export ORACLE_BASE

        ORACLE_HOME=$ORACLE_BASE/product/10.2.0;export ORACLE_HOME

        ORACLE_SID=commdb;export ORACLE_SID

        $ORACLE_HOME/bin/exp cfa/cfa file=/oracle/dlbk_table$DATE.dmp log=/oracle/dlbk_table$DATE.log tables=cfa_income_ent_new,cfa_income_inst_old,cfa_income_ent_old 3、对exp的用户备份,进行恢复imp_user.sh脚本内容(RedHat AS4环境下)

        export ORACLE_HOME=/opt/oracle/product/10g

        $ORACLE_HOME/bin/imp cfa/cfa@orcl file=/home/oracle/dlbk_cfa2009-09-12.dmp log=/home/oracle/dlbk_cfa2009-09-12.dmp fromuser=cfa touser=cfa

        4、将oracle数据库中表的数据用spool导成标准的txt格式

        调度脚本spool_out.sh的内容(IBM的AIX环境下):

        ORACLE_BASE=/oracle;export ORACLE_BASE

        ORACLE_HOME=$ORACLE_BASE/product/10.2.0;export ORACLE_HOME

        ORACLE_SID=commdb;export ORACLE_SID

        DATE=`date +%Y%m%d_%T`;export DATE

        $ORACLE_HOME/bin/sqlplus cfa/cfa @/oracle/cfaout/spool.sql spool配置脚本spool.sql的内容

        set heading on;

        set feedback off;

        set pagesize 0;

        set linesize 8000;

        set trimout on;

        set trimspool on;

        set term off;

        SET NEWPAGE 1;

        spool /oracle/cfaout/aix_ent_info_$DATE.txt;@/oracle/cfaout/select_ent_info.sql;

        spool off;

        spool /oracle/cfaout/aix_report_record_$DATE.txt;@/oracle/cfaout/select_report_record.sql;

        spool off;

        exit;

        两select表成标准格式脚本内容:

        select_ent_info.sql:

        select CUSTOMERID||'|'||CORPID||'|'||ENTERPRISENAME||'|'||ENGLISHNAME||'|'||FICTITIOUSPERSON||'|'||ORGNATURE||'|'||FINANCETYPE||'|'||ENTERPRISEBELONG||'|'||INDUSTRYTYPE||'|'||INDUSTRYTYPE1||'|'||INDUSTRYTYPE2||'|'||PRIVATE||'|'||ECONOMYTYPE||'|'||ORGTYPE||'|'||MOSTBUSINESS||'|'||BUDGETTYPE||'|'||RCCURRENCY||'|'||REGISTERCAPITAL||'|'||PCCURRENCY||'|'||PAICLUPCAPITAL||'|'||FUNDSOURCE||'|'||TOTALASSETS||'|'||NETASSETS||'|'||ANNUALINCOME||'|'||SCOPE||'|'||LIMIT||'|'||CREDITDATE||'|'||LICENSENO||'|'||LICENSEDATE||'|'||LICENSEMATURITY||'|'||SETUPDATE||'|'||INSPECTIONYEAR||'|'||LOCKSITUATION||'|'||TAXNO||'|'||BANKLICENSE||'|'||BANKID||'|'||MANAGEAREA||'|'||BANCHAMOUNT||'|'||EXCHANGEID||'|'||REGISTERADD||'|'||CHARGEDEPARTMENT||'|'||OFFICEADD||'|'||OFFICEZIP||'|'||COUNTRYCODE||'|'||REGIONCODE||'|'||VILLAGECODE||'|'||VILLAGENAME||'|'||RELATIVETYPE||'|'||OFFICETEL||'|'||OFFICEFAX||'|'||WEBADD||'|'||EMAILADD||'|'||EMPLOYEENUMBER||'|'||MAINPRODUCTION||'|'||NEWTECHCORPORNOT||'|'||LISTINGCORPORNOT||'|'||HASIERIGHT||'|'||HASDIRECTORATE||'|'||BASICBANK||'|'||BASICACCOUNT||'|'||MANAGEINFO||'|'||CUSTOMERHISTORY||'|'||PROJECTFLAG||'|'||REALTYFLAG||'|'||WORKFIELDAREA||'|'||WORKFIELDFEE||'|'||ACCOUNTDATE||'|'||LOANCARDNO||'|'||LOANCARDPASSWORD||'|'||LOANCARDINSYEAR||'|'||LOANCARDINSRESULT||'|'||LOANFLAG||'|'||FINANCEORNOT||'|'||FINANCEBELONG||'|'||CREDITBELONG||'|'||CREDITLEVEL||'|'||EVALUATEDATE||'|'||OTHERCREDITLEVEL||'|'||OTHEREVALUATEDATE||'|'||OTHERORGNAME||'|'||INPUTORGID||'|'||INPUTUSERID||'|'||INPUTDATE||'|'||UPDATEORGID||'|'||UPDATEUSERID||'|'||UPDATEDATE||'|'||REMARK||'|'||TAXNO1||'|'||FICTITIOUSPERSONID||'|'||GROUPFLAG||'|'||EVALUATELEVEL||'|'||MYBANK||'|'||MYBANKACCOUNT||'|'||OTHERBANK||'|'||OTHERBANKACCOUNT||'|'||TEMPSAVEFLAG||'|'||FINANCEDEPTTEL||'|'||ECGROUPFLAG||'|'||SUPERCORPNAME||'|'||SUPERLOANCARDNO||'|'||SUPERCERTTYPE||'|'||SMEINDUSTRYTYPE||'|'||SELLSUM||'|'||SUPERCERTID||'|'||ISVOUCHCORP from aix_ent_info;

        select_report_report.sql:

        select REPORTNO||'|'||REPORTDATE||'|'||MODELNO||'|'||REPORTSCOPE||'|'||OBJECTNO from aix_report_record;

    5、将标准的txt文件load进oracle数据库的shell脚本

        sqlldr_in.sh(IBM的AIX环境下)

        ORACLE_BASE=/oracle;export ORACLE_BASE

        ORACLE_HOME=$ORACLE_BASE/product/10.2.0;export ORACLE_HOME

        ORACLE_SID=commdb;export ORACLE_SID

        DATE=`date +%Y%m%d`;export DATE

        $ORACLE_HOME/bin/sqlldr cfa/cfa control=ENT_INFO.ctl log=ENT_INFO_$DATE.log rows=10000 readsize=20000000 bindsize=20000000 $ORACLE_HOME/bin/sqlldr cfa/cfa control=REPORT_CATALOG.ctl log=REPORT_CATALOG_$DATE.log rows=10000 readsize=20000000 bindsize=20000000 $ORACLE_HOME/bin/sqlldr cfa/cfa control=REPORT_DATA.ctl log=REPORT_DATA_$DATE.log rows=10000 readsize=20000000 bindsize=20000000 $ORACLE_HOME/bin/sqlldr cfa/cfa control=REPORT_RECORD.ctl log=REPORT_RECORD_$DATE.log rows=10000 readsize=20000000 bindsize=20000000

        相关的四张表的控制文件的内容:

        ENT_INFO.ctl:==

        LOAD DATA

        INFILE '/oracle/cfain/ENT_INFO_$DATE.txt'

        TRUNCATE

        INTO TABLE AIX_ENT_INFO

        FIELDS TERMINATED BY '|'

        TRAILING NULLCOLS

        (

        CUSTOMERID           "nvl(:CUSTOMERID        ,'0')",CORPID               "nvl(:CORPID            ,'0')",ENTERPRISENAME       "nvl(:ENTERPRISENAME    ,'0')",ENGLISHNAME          "nvl(:ENGLISHNAME       ,'0')",FICTITIOUSPERSON     "nvl(:FICTITIOUSPERSON ,'0')",ORGNATURE            "nvl(:ORGNATURE         ,'0')",FINANCETYPE          "nvl(:FINANCETYPE       ,'0')",ENTERPRISEBELONG     "nvl(:ENTERPRISEBELONG ,'0')",INDUSTRYTYPE         "nvl(:INDUSTRYTYPE      ,'0')",INDUSTRYTYPE1        "nvl(:INDUSTRYTYPE1     ,'0')",INDUSTRYTYPE2        "nvl(:INDUSTRYTYPE2     ,'0')",PRIVATE              "nvl(:PRIVATE           ,'0')",ECONOMYTYPE          "nvl(:ECONOMYTYPE       ,'0')",ORGTYPE              "nvl(:ORGTYPE           ,'0')",MOSTBUSINESS         "nvl(:MOSTBUSINESS      ,'0')",BUDGETTYPE           "nvl(:BUDGETTYPE        ,'0')",RCCURRENCY           "nvl(:RCCURRENCY        ,'0')",REGISTERCAPITAL      "nvl(:REGISTERCAPITAL   ,'0')",PCCURRENCY           "nvl(:PCCURRENCY        ,'0')",PAICLUPCAPITAL       "nvl(:PAICLUPCAPITAL    ,'0')",FUNDSOURCE           "nvl(:FUNDSOURCE        ,'0')",TOTALASSETS          "nvl(:TOTALASSETS       ,'0')",NETASSETS            "nvl(:NETASSETS         ,'0')",ANNUALINCOME         "nvl(:ANNUALINCOME      ,'0')",SCOPE                "nvl(:SCOPE             ,'0')",LIMIT                "nvl(:LIMIT             ,'0')",CREDITDATE           "nvl(:CREDITDATE        ,'0')",LICENSENO            "nvl(:LICENSENO         ,'0')",LICENSEDATE          "nvl(:LICENSEDATE       ,'0')",LICENSEMATURITY      "nvl(:LICENSEMATURITY   ,'0')",SETUPDATE            "nvl(:SETUPDATE         ,'0')",INSPECTIONYEAR       "nvl(:INSPECTIONYEAR    ,'0')",LOCKSITUATION        "nvl(:LOCKSITUATION     ,'0')",TAXNO                "nvl(:TAXNO             ,'0')",BANKLICENSE          "nvl(:BANKLICENSE       ,'0')",BANKID               "nvl(:BANKID            ,'0')",MANAGEAREA           "nvl(:MANAGEAREA        ,'0')",BANCHAMOUNT          "nvl(:BANCHAMOUNT       ,'0')",EXCHANGEID           "nvl(:EXCHANGEID        ,'0')",REGISTERADD          "nvl(:REGISTERADD       ,'0')",CHARGEDEPARTMENT     "nvl(:CHARGEDEPARTMENT ,'0')",OFFICEADD            "nvl(:OFFICEADD         ,'0')",OFFICEZIP            "nvl(:OFFICEZIP         ,'0')",COUNTRYCODE          "nvl(:COUNTRYCODE       ,'0')",REGIONCODE           "nvl(:REGIONCODE        ,'0')",VILLAGECODE          "nvl(:VILLAGECODE       ,'0')",VILLAGENAME          "nvl(:VILLAGENAME       ,'0')",RELATIVETYPE         "nvl(:RELATIVETYPE      ,'0')",OFFICETEL            "nvl(:OFFICETEL         ,'0')",OFFICEFAX            "nvl(:OFFICEFAX         ,'0')",WEBADD               "nvl(:WEBADD            ,'0')",EMAILADD             "nvl(:EMAILADD          ,'0')",EMPLOYEENUMBER       "nvl(:EMPLOYEENUMBER    ,'0')",MAINPRODUCTION       "nvl(:MAINPRODUCTION    ,'0')",NEWTECHCORPORNOT     "nvl(:NEWTECHCORPORNOT ,'0')",LISTINGCORPORNOT     "nvl(:LISTINGCORPORNOT ,'0')",HASIERIGHT           "nvl(:HASIERIGHT        ,'0')",HASDIRECTORATE       "nvl(:HASDIRECTORATE    ,'0')",BASICBANK            "nvl(:BASICBANK         ,'0')",BASICACCOUNT         "nvl(:BASICACCOUNT      ,'0')",MANAGEINFO           "nvl(:MANAGEINFO        ,'0')",CUSTOMERHISTORY      "nvl(:CUSTOMERHISTORY   ,'0')",PROJECTFLAG          "nvl(:PROJECTFLAG       ,'0')",REALTYFLAG           "nvl(:REALTYFLAG        ,'0')",WORKFIELDAREA        "nvl(:WORKFIELDAREA     ,'0')",WORKFIELDFEE         "nvl(:WORKFIELDFEE      ,'0')",ACCOUNTDATE          "nvl(:ACCOUNTDATE       ,'0')",LOANCARDNO           "nvl(:LOANCARDNO        ,'0')",LOANCARDPASSWORD     "nvl(:LOANCARDPASSWORD ,'0')",LOANCARDINSYEAR      "nvl(:LOANCARDINSYEAR   ,'0')",LOANCARDINSRESULT    "nvl(:LOANCARDINSRESULT ,'0')",LOANFLAG             "nvl(:LOANFLAG          ,'0')",FINANCEORNOT         "nvl(:FINANCEORNOT      ,'0')",FINANCEBELONG        "nvl(:FINANCEBELONG     ,'0')",CREDITBELONG         "nvl(:CREDITBELONG      ,'0')",CREDITLEVEL          "nvl(:CREDITLEVEL       ,'0')",EVALUATEDATE         "nvl(:EVALUATEDATE      ,'0')",OTHERCREDITLEVEL     "nvl(:OTHERCREDITLEVEL ,'0')",OTHEREVALUATEDATE    "nvl(:OTHEREVALUATEDATE ,'0')",OTHERORGNAME         "nvl(:OTHERORGNAME      ,'0')",INPUTORGID           "nvl(:INPUTORGID        ,'0')",INPUTUSERID          "nvl(:INPUTUSERID       ,'0')",INPUTDATE            "nvl(:INPUTDATE         ,'0')",UPDATEORGID          "nvl(:UPDATEORGID       ,'0')",UPDATEUSERID         "nvl(:UPDATEUSERID      ,'0')",UPDATEDATE           "nvl(:UPDATEDATE        ,'0')",REMARK               "nvl(:REMARK            ,'0')",TAXNO1               "nvl(:TAXNO1            ,'0')",FICTITIOUSPERSONID   "nvl(:FICTITIOUSPERSONID,'0')",GROUPFLAG            "nvl(:GROUPFLAG         ,'0')",EVALUATELEVEL        "nvl(:EVALUATELEVEL     ,'0')",MYBANK               "nvl(:MYBANK            ,'0')",MYBANKACCOUNT        "nvl(:MYBANKACCOUNT     ,'0')",OTHERBANK            "nvl(:OTHERBANK         ,'0')",OTHERBANKACCOUNT     "nvl(:OTHERBANKACCOUNT ,'0')",TEMPSAVEFLAG         "nvl(:TEMPSAVEFLAG      ,'0')",FINANCEDEPTTEL       "nvl(:FINANCEDEPTTEL    ,'0')",ECGROUPFLAG          "nvl(:ECGROUPFLAG       ,'0')",SUPERCORPNAME        "nvl(:SUPERCORPNAME     ,'0')",SUPERLOANCARDNO      "nvl(:SUPERLOANCARDNO   ,'0')",SUPERCERTTYPE        "nvl(:SUPERCERTTYPE     ,'0')",SMEINDUSTRYTYPE      "nvl(:SMEINDUSTRYTYPE   ,'0')",SELLSUM              "nvl(:SELLSUM           ,'0')",SUPERCERTID          "nvl(:SUPERCERTID       ,'0')",ISVOUCHCORP          "nvl(:ISVOUCHCORP       ,'0')"

        )

    REPORT_CATALOG.ctl:==

        LOAD DATA

        INFILE '/oracle/cfain/REPORT_CATALOG_$DATE.txt'

        TRUNCATE

        INTO TABLE AIX_REPORT_CATALOG

        FIELDS TERMINATED BY '|'

        TRAILING NULLCOLS

        (

        MODELNO "NVL(:MODELNO,'0')",MODELNAME "NVL(:MODELNAME,' ')",MODELTYPE "NVL(:MODELTYPE,'0')",MODELCLASS "NVL(:MODELCLASS,'0')"

        )

        REPORT_DATA.ctl:==

        LOAD DATA

        INFILE '/oracle/cfain/REPORT_DATA_$DATE.txt'

        TRUNCATE

        INTO TABLE AIX_REPORT_DATA

        FIELDS TERMINATED BY '|'

        TRAILING NULLCOLS

        (

        REPORTNO "NVL(:REPORTNO,'0')",ROWNO "NVL(:ROWNO,' ')",ROWNAME "NVL(:ROWNAME,'0')",COL2VALUE "NVL(:COL2VALUE,'0')"

        )

        REPORT_RECORD.ctl:==

        LOAD DATA

        INFILE '/oracle/cfain/REPORT_RECORD_$DATE.txt'

        TRUNCATE

        INTO TABLE AIX_REPORT_RECORD

        FIELDS TERMINATED BY '|'

        TRAILING NULLCOLS

        (

        REPORTNO "NVL(:REPORTNO,'0')",REPORTDATE "NVL(:REPORTDATE,' ')",MODELNO "NVL(:MODELNO,'0')",REPORTSCOPE "NVL(:REPORTSCOPE,'0')",OBJECTNO "NVL(:OBJECTNO,'0')"

        )

        那一天的数据文件名举例:

        ENT_INFO_20090909.txt REPORT_CATALOG_20090909.txt REPORT_DATA_20090909.txt REPORT_RECORD_20090909.txt

        6、用ftp配置Unix/Linux文件的自动传输

        ftpget.sh文件内容:(RedHat AS4环境下)

        export DATE=`date +%Y%m%d`;

        ftp -n<<!

        open 192.168.80.5

        user oracle oracle

        prompt off

        mget dl_$DATE.dmp yh_$DATE.dmp

        quit

        !

        注:顺带说明一下:linux下,ftp的相关启动关闭命令如下:[root@localhost ~]# /etc/init.d/vsftpd start [root@localhost ~]# /etc/init.d/vsftpd stop [root@localhost ~]# /etc/init.d/vsftpd restart

        说明:。sh脚本要有执行权限;ftp服务开启与关闭要在根用户下执行;本文用到的例子有在RedHat as4环境下的,有在IBM AIX环境下的,其中涉及到的环境变量等,都大同小异;脚本测试好之后可以配在Linux/Unix调度程序crontab中,以实现shell的自动定时运行!

  • 【转】常用的ORACLE PL/SQL管理命令

    2009-10-09 10:24:13

    熟悉ORACLE管理的一定对这些命令不会陌生,不过对于我这个刚接触ORACLE管理的来说,还是有必要做下记录,以便随时查看。

      一 登录SQLPLUS

      sqlplus用户名/密码@数据库实例as登录角色;

      如:用户sys(密码为123)以sysdba的角色登录数据库ORACL,我们可以输入:sqlplus sys/123@oracl as sysdba;

      这种登录方式会直接暴露密码,如果想隐藏密码,可以在此省略密码的输入,如:sqlplus sys@oracl as sysdba;回车以后ORACLE会给出输入密码的提示符。

      登录以后如果想切换其他的用户,可以直接使用connect 命令,如:connect user2/password@oracl as sysdba,同上一样,可以将密码分开输入。

      二 退出SQLPLUS

      quit;

      三 创建用户

      create user用户名identified by密码;

      如:创建用户CKSP,密码为123: create user cksp identified by 123;

      四 给用户分配角色或权限

      grant *** to ***;

      如:给刚才的用户分配角色DBA:grant dba to cksp;

      分配create table权限:grant

      五 删除用户

      drop user用户[cascade];

      其中cascade是可选的,如果输入了,则表示删除该用户及所有数据。

      如:删除上面创建的用户CKSP及他的所有数据:drop user cksp cascade;

  • 【转】oracle用户自定义函数

    2009-10-09 10:17:40

    原文地址http://blog.csdn.net/success_dream/archive/2007/11/14/1885924.aspx

    用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其中,value被称为参数。函数参数有3种类型。
    IN 参数类型:表示输入给函数的参数。
    OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
    IN OUT参数类型:表示参数既可以传值也可以被赋值。
     
    1、语法格式:
    SQL语法方式创建的语法格式为:
    CREATE OR REPLACE FUNCTION function_name         /**//*函数名称*/
    (
    Parameter_name1,mode1 datatype1,            /**//*参数定义部分*/
    Parameter_name2,mode2 datatype2,
    Parameter_name3,mode3 datatype3

    )
    RETURN return_datatype                /**//*定义返回值类型*/
    IS/AS
    BEGIN
          Function_body                  /**//*函数体部分*/
          RETURN scalar_expression                        /**//*返回语句*/
    END function_name;
      
    说明:
    function_name::用户定义的函数名。函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
    parameter:用户定义的参数。用户可以定义一个或多个参数。
    mode:参数类型。
    datatype:用户定义参数的数据类型。
    return_type::用户返回值的数据类型。
    函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
     
    2、示例
    函数代码:
    create or replace function T01001_count
    return number
    is
    count_T01001 number;
    begin
    select count(*) into count_T01001 from T01001;
    return(count_T01001);
    end T01001_count;                  --记得一定要打分号

    调用:
    declare
    i number;
    begin
    i:=T01001_count();
    dbms_output.put_line(to_char(i));
    end;                 --记得一定要打分号
     
    注意:
    (1)    如果函数没有参数,那么函数名后不应该要括号;
    (2)    创建函数的时候end后面一定要记得写函数名


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/success_dream/archive/2007/11/14/1885924.aspx

  • [转载]史上最全的测试用例设计方法总结(因果图方法)

    2008-07-16 10:46:45

     

    .    方法简介

    1.定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

    2.因果图法产生的背景:

    等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。

    如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

    3.因果图介绍

    1) 4种符号分别表示了规格说明中向4种因果关系。

    2) 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

    3) Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ciei均可取值010表示某状态不出现,1表示某状态出现。

    4. 因果图概念

    1)    关系

    恒等:若ci1,则ei也是1;否则ei0

    非:若ci1,则ei0;否则ei1

    或:若c1c2c31,则ei1;否则ei0可有任意个输入。

    与:若c1c2都是1,则ei1;否则ei0也可有任意个输入。

    2)    约束

    输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。

    A.输入条件的约束有以下4类:

       E约束(异):ab中至多有一个可能为1,即ab不能同时为1

       I约束(或):abc中至少有一个必须是1,即 ab c不能同时为0

       O约束(唯一);ab必须有一个,且仅有1个为1

       R约束(要求):a1时,b必须是1,即不可能a1b0

    B.输出条件约束类型

       输出条件的约束只有M约束(强制):若结果a1,则结果b强制为0

    5. 采用因果图法设计测试用例的步骤:

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

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

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

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

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

    . 实战演习

    1. 某软件规格说明书包含这样的要求:第一列字符必须是AB,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M

    解答:

    1) 根据题意,原因和结果如下:

           原因:

              1——第一列字符是A

              2——第一列字符是B

              3——第二列字符是一数字。

           结果:

              21——修改文件;

              22 ——给出信息L

              23——给出信息M

    2) 其对应的因果图如下:

    11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。

    3)根据因果图建立判定表。

    <!--[endif]--> 

           表中8种情况的左面两列情况中,原因和原因同时为1,这是不可能出现的,故应排除这两种情况。表的最下一栏给出了6种情况的测试用例,这是我们所需要的数据。

    2.有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。

    1) 分析这一段说明,列出原因和结果

    原因:

    1.售货机有零钱找

    2.投入1元硬币

    3.投入5角硬币

    4.押下橙汁按钮

    5.押下啤酒按钮

    结果:

    21.售货机〖零钱找完〗灯亮   

    22.退还1元硬币

    23.退还5角硬币             

    24.送出橙汁饮料

    25.送出啤酒饮料

    2)画出因果图,如图所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:

    11. 投入1元硬币且押下饮料按钮

                    12. 押下〖橙汁〗或〖啤酒〗的按钮

                    13. 应当找5角零钱并且售货机有零钱找

                    14. 钱已付清

    3)转换成判定表:

    <!--[endif]--> 

    4) 在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据。
    (本文节选自己开拖拉机上班《史上最全的测试用例设计方法总结》)

242/2<12
Open Toolbar