发布新日志

  • 测试计划--测试风险(个人收集)

    2007-04-05 12:33:31

    风险编号

    风险描述

    风险发生可能性(高、中、低)

    风险对测试或项目的影响(高、中、低)

    责任人

    规避方法

    CSFX1

    需求、设计变更频繁导致测试依据失效

    需求分析人员

    充分了解用户需求,确保主要需求不变更

    CSFX2

    测试人员对于需求理解不充分

    测试人员

    学习相关的业务知识;查看访谈记录;与需求分析人员充分交流,深入了解需求分析书的每章节

    CSFX3

    测试资源不充分、不能如期到位

    测试组长

    合理安排,提前做好分配

    CSFX4

    开发人员是否能够按计划及时提供可以测试的版本

    项目经理

    按计划严格控制开发进度

    CSFX5

    BUG的生命周期过长

    项目经理

    及时分配修复任务,并检查监督

  • 测试计划--测试工作的人力需求(原创)

    2007-04-04 19:06:54

    角色

    人员技能

    所推荐的最少资源(所分配的专职角色数量)

    具体职责

     测试负责人

    Ø         良好的沟通技巧和质量管理意识

    Ø         熟悉软件工程中常见的风险,熟悉软件工程、数据库、常用软件开发和测试工具

    Ø         丰富的测试管理经验

    Ø         了解系统或所测试的应用程序

    1

    Ø         进行管理监督

    Ø         提供技术指导

    Ø         获取适当的资源

    Ø         集成与系统测试计划的review

    Ø         测试用例的review

    Ø         测试结果的review

    项目经理

    Ø         熟悉应用程序的需求

    Ø         熟悉应用程序的架构和设计

    1

    Ø         提供业务知识和技术支持

    Ø         负责缺陷修复任务的分配和监督

    Ø         集成与系统测试计划的review

    Ø         测试用例的review

    Ø         测试结果的review

    测试员

    Ø         熟悉被测试的应用程序

    Ø         熟悉测试管理过程

    Ø         具备诊断和解决问题的技能

    Ø         掌握黑盒测试方法

    Ø         会使用性能自动化测试工具,具备一定的编程技能

    Ø         掌握数据库的SQL语句

    Ø         较强的表达能力和文档编写能力

    1

    Ø         生成测试计划

    Ø         编写测试用例

    Ø         执行测试。

    Ø         记录测试结果

    Ø         缺陷追踪和回测

    Ø         生成测试报告

    实施人员

    Ø         熟练掌握各种平台下的系统安装、集成和应用部署

    1

    Ø         授予对测试系统的访问权

    Ø         确保测试硬软件环境得到管理和维护。

    Ø         协助系统调优

    数据库管理员

    Ø         熟练掌握各种平台下数据库的安装、集成和应用部署

    Ø         精通SybaseOracle的数据库设计、性能调优和系统管理

    1

    Ø         管理测试数据(数据库)

    Ø         协助系统调优

  • ORACLE常用命令--测试人员应该掌握的知识

    2007-04-03 13:10:14

     ORACLE常用命令

    一、ORACLE的启动和关闭
    1、在单机环境下
    要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下
    su - oracle

    a、启动ORACLE系统
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>startup
    SVRMGR>quit

    b、关闭ORACLE系统
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>shutdown
    SVRMGR>quit

    启动oracle9i数据库命令:
    $ sqlplus /nolog

    SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003

    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

    SQL> connect / as sysdba 
    Connected to an idle instance.
    SQL> startup^C

    SQL> startup
    ORACLE instance started.


    2、在双机环境下
    要想启动或关闭ORACLE系统必须首先切换到root用户,如下
    su - root

    a、启动ORACLE系统
    hareg -y oracle

    b、关闭ORACLE系统
    hareg -n oracle

    Oracle数据库有哪几种启动方式


    说明:

    有以下几种启动方式:
    1、startup nomount
    非安装启动,这种方式启动下可执行:重建控制文件、重建数据库

    读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。


    2、startup mount dbname
    安装启动,这种方式启动下可执行:
    数据库日志归档、
    数据库介质恢复、
    使数据文件联机或脱机,
    重新定位数据文件、重做日志文件。

    执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
    但此时不对数据文件和日志文件进行校验检查。


    3、startup open dbname
    先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,
    这种方式下可访问数据库中的数据。


    4、startup,等于以下三个命令
    startup nomount
    alter database mount
    alter database open


    5、startup restrict
    约束方式启动
    这种方式能够启动数据库,但只允许具有一定特权的用户访问
    非特权用户访问时,会出现以下提示:
    ERROR:
    ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用


    6、startup force
    强制启动方式
    当不能关闭数据库时,可以用startup force来完成数据库的关闭
    先关闭数据库,再执行正常启动数据库命令


    7、startup pfile=参数文件名
    带初始化参数文件的启动方式
    先读取参数文件,再按参数文件中的设置启动数据库
    例:startup pfile=E:Oracleadminoradbpfileinit.ora


    8、startup EXCLUSIVE
    二、用户如何有效地利用数据字典
       ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化,
    体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。

        数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。
    我们不能手工修改数据字典里的信息。

      很多时候,一般的ORACLE用户不知道如何有效地利用它。

      dictionary   全部数据字典表的名称和解释,它有一个同义词dict
        dict_column   全部数据字典表里字段名称和解释

        如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:

        SQL>select * from dictionary where instr(comments,'index')>0;

        如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:

        SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';

        依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。

        下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。

        1、用户

                查看当前用户的缺省表空间
                SQL>select username,default_tablespace from user_users;

            查看当前用户的角色
            SQL>select * from user_role_privs;

            查看当前用户的系统权限和表级权限
            SQL>select * from user_sys_privs;
            SQL>select * from user_tab_privs;

        2、表

                查看用户下所有的表
                SQL>select * from user_tables;

                查看名称包含log字符的表
                SQL>select object_name,object_id from user_objects
                    where instr(object_name,'LOG')>0;

                查看某表的创建时间
                SQL>select object_name,created from user_objects where object_name=upper('&table_name');

                查看某表的大小
                SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                    where segment_name=upper('&table_name');

                查看放在ORACLE的内存区里的表
                SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

        3、索引

                查看索引个数和类别
                SQL>select index_name,index_type,table_name from user_indexes order by table_name;

                查看索引被索引的字段
                SQL>select * from user_ind_columns where index_name=upper('&index_name');

                查看索引的大小
                SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                    where segment_name=upper('&index_name');

        4、序列号

                查看序列号,last_number是当前值
                SQL>select * from user_sequences;

        5、视图

                查看视图的名称
                SQL>select view_name from user_views;

                查看创建视图的select语句
                SQL>set view_name,text_length from user_views;
                SQL>set long 2000;                说明:可以根据视图的text_length值设定set long 的大小
                SQL>select text from user_views where view_name=upper('&view_name');

        6、同义词

                查看同义词的名称
                SQL>select * from user_synonyms;

        7、约束条件

                查看某表的约束条件
                SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
                    from user_constraints where table_name = upper('&table_name');

            SQL>select c.constraint_name,c.constraint_type,cc.column_name
                from user_constraints c,user_cons_columns cc
                where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
                and c.owner = cc.owner and c.constraint_name = cc.constraint_name
                order by cc.position;

        8、存储函数和过程

                查看函数和过程的状态
                SQL>select object_name,status from user_objects where object_type='FUNCTION';
                SQL>select object_name,status from user_objects where object_type='PROCEDURE';

                查看函数和过程的源代码
                SQL>select text from all_source where ōwner=user and name=upper('&plsql_name');


    三、查看数据库的SQL
    1、查看表空间的名称及大小

        select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
        from dba_tablespaces t, dba_data_files d
        where t.tablespace_name = d.tablespace_name
        group by t.tablespace_name;

    2、查看表空间物理文件的名称及大小

        select tablespace_name, file_id, file_name,
        round(bytes/(1024*1024),0) total_space
        from dba_data_files
        order by tablespace_name;

    3、查看回滚段名称及大小

        select segment_name, tablespace_name, r.status,
        (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
        max_extents, v.curext CurExtent
        From dba_rollback_segs r, v$rollstat v
        Where r.segment_id = v.usn(+)
        order by segment_name ;

    4、查看控制文件

        select name from v$controlfile;

    5、查看日志文件

        select member from v$logfile;

    6、查看表空间的使用情况

        select sum(bytes)/(1024*1024) as free_space,tablespace_name
        from dba_free_space
        group by tablespace_name;

        SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
        (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
        FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
        WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

    7、查看数据库库对象

        select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;

    8、查看数据库的版本

        Select version FROM Product_component_version
        Where SUBSTR(PRODUCT,1,6)='Oracle';

    9、查看数据库的创建日期和归档方式

        Select Created, Log_Mode, Log_Mode From V$Database;
    四、ORACLE用户连接的管理

    用系统管理员,查看当前数据库有几个用户连接:

    SQL> select username,sid,serial# from v$session;

    如果要停某个连接用

    SQL> alter system kill session 'sid,serial#';

    如果这命令不行,找它UNIX的进程数

    SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;

    说明:21是某个连接的sid数

    然后用 kill 命令杀此进程号。


    五、SQL*PLUS使用
    a、近入SQL*Plus
    $sqlplus 用户名/密码

       退出SQL*Plus
    SQL>exit

    b、在sqlplus下得到帮助信息
    列出全部SQL命令和SQL*Plus命令
    SQL>help
    列出某个特定的命令的信息
    SQL>help 命令名

    c、显示表结构命令DESCRIBE
    SQL>DESC 表名

    d、SQL*Plus中的编辑命令
    显示SQL缓冲区命令
    SQL>L

    修改SQL命令
    首先要将待改正行变为当前行
    SQL>n
    用CHANGE命令修改内容
    SQL>c/旧/新
    重新确认是否已正确
    SQL>L

    使用INPUT命令可以在SQL缓冲区中增加一行或多行
    SQL>i
    SQL>输入内容

    e、调用外部系统编辑器
    SQL>edit 文件名
    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行
    DEFINE_EDITOR=vi

    f、运行命令文件
    SQL>START test
    SQL>@test

    常用SQL*Plus语句
    a、表的创建、修改、删除
    创建表的命令格式如下:
    create table 表名 (列说明列表);

    为基表增加新列命令如下:
    ALTER TABLE 表名 ADD (列说明列表)
    例:为test表增加一列Age,用来存放年龄
        sql>alter table test
            add (Age number(3));

    修改基表列定义命令如下:
    ALTER TABLE 表名
    MODIFY (列名 数据类型)
    例:将test表中的Count列宽度加长为10个字符
        sql>alter atble test
            modify (County char(10));

    b、将一张表删除语句的格式如下:
    DORP TABLE 表名;
    例:表删除将同时删除表的数据和表的定义
    sql>drop table test

    c、表空间的创建、删除


    六、ORACLE逻辑备份的SH文件

    完全备份的SH文件:exp_comp.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp"

    累计备份的SH文件:exp_cumu.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp"

    增量备份的SH文件: exp_incr.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp"

    root用户crontab文件
    /var/spool/cron/crontabs/root增加以下内容

    0 2 1 * * /oracle/exp_comp.sh

    30 2 * * 0-5 /oracle/exp_incr.sh

    45 2 * * 6 /oracle/exp_cumu.sh

    当然这个时间表可以根据不同的需求来改变的,这只是一个例子。


    七、ORACLE 常用的SQL语法和数据对象

    一.数据控制语句 (DML) 部分

    1.INSERT  (往数据表里插入记录的语句)

    INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
    INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT (字段名1, 字段名2, ……) FROM 另外的表名;

    字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
    如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.
    字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.

    日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
    或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
    TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.
    年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS

    INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
    方法借用ORACLE里自带的DBMS_LOB程序包.

    INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号
    CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1  START  WITH  1
    MAXVALUE  99999  CYCLE  NOCACHE;
    其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
    INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL

    2.DELETE  (删除数据表里记录的语句)

    DELETE FROM表名 WHERE 条件;

    注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.

    如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
    TRUNCATE TABLE 表名;
    此操作不可回退.

    3.UPDATE  (修改数据表里记录的语句)

    UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;

    如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
    值N超过定义的长度会出错, 最好在插入前进行长度校验..

    注意事项:
    A.        以上SQL语句对表都加上了行级锁,
            确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
            否则改变不一定写入数据库里.
            如果想撤回这些操作, 可以用命令 ROLLBACK 复原.

    B.        在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,
            应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段.
            程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成,
            其间加上COMMIT 确认事物处理.
    二.数据定义 (DDL) 部分

    1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)

    ORACLE常用的字段类型有
    CHAR                        固定长度的字符串
    VARCHAR2                可变长度的字符串
    NUMBER(M,N)                数字型M是位数总长度, N是小数的长度
    DATE                        日期类型

    创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面

    创建表时可以用中文的字段名, 但最好还是用英文的字段名

    创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE
    这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间

    创建表时可以给字段加上约束条件
    例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY

    2.ALTER        (改变表, 索引, 视图等)

    改变表的名称
    ALTER TABLE 表名1  TO 表名2;

    在表的后面增加一个字段
    ALTER TABLE表名 ADD 字段名 字段名描述;

    修改表里字段的定义描述
    ALTER TABLE表名 MODIFY字段名 字段名描述;

    给表里的字段加上约束条件
    ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
    ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);

    把表放在或取出数据库的内存区
    ALTER TABLE 表名 CACHE;
    ALTER TABLE 表名 NOCACHE;

    3.DROP        (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)

    删除表和它所有的约束条件
    DROP TABLE 表名 CASCADE CONSTRAINTS;

    4.TRUNCATE (清空表里的所有记录, 保留表的结构)

    TRUNCATE 表名;

    三.查询语句 (SELECT) 部分

    SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;

    字段名可以带入函数
      例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名),
               TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')

    NVL(EXPR1, EXPR2)函数
    解释:
    IF EXPR1=NULL
                    RETURN EXPR2
    ELSE
                           RETURN EXPR1

    DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数
    解释:
    IF AA=V1 THEN RETURN R1
    IF AA=V2 THEN RETURN R2
    ..…
    ELSE
    RETURN NULL

    LPAD(char1,n,char2)函数
    解释:
    字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位

    字段名之间可以进行算术运算
    例如:  (字段名1*字段名1)/3

    查询语句可以嵌套
    例如: SELECT …… FROM
    (SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;

    两个查询语句的结果可以做集合操作
    例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,  交集INTERSECT

    分组查询
    SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1
    [HAVING 条件] ;

    两个以上表之间的连接查询

    SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
                    表名1.字段名 = 表名2. 字段名 [ AND ……] ;

    SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
                    表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;

    有(+)号的字段位置自动补空值

    查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC

    SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]
    ORDER BY字段名1, 字段名2 DESC;

    字符串模糊比较的方法

    INSTR(字段名, ‘字符串’)>0
    字段名 LIKE  ‘字符串%’  [‘%字符串%’]

    每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.

    四.ORACLE里常用的数据对象 (SCHEMA)

    1.索引 (INDEX)

    CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );
    ALTER INDEX 索引名 REBUILD;

    一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况,
    也可以建立多字段的组合索引和基于函数的索引

    ORACLE8.1.7字符串可以索引的最大长度为1578 单字节
    ORACLE8.0.6字符串可以索引的最大长度为758 单字节

    2.视图 (VIEW)

    CREATE VIEW 视图名AS SELECT …. FROM …..;
    ALTER VIEW视图名 COMPILE;

    视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.

    3.同义词 (SYNONMY)
    CREATE SYNONYM同义词名FOR 表名;
    CREATE SYNONYM同义词名FOR 表名@数据库链接名;

    4.数据库链接 (DATABASE LINK)
    CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;

    数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

    数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样

    数据库全局名称可以用以下命令查出
    SELECT * FROM GLOBAL_NAME;

    查询远端数据库里的表
    SELECT …… FROM 表名@数据库链接名;

    五.权限管理 (DCL) 语句

    1.GRANT        赋于权限
    常用的系统权限集合有以下三个:
    CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)
    常用的数据对象权限有以下五个:
    ALL         ON 数据对象名,         SELECT ON 数据对象名,         UPDATE ON 数据对象名,
    DELETE         ON 数据对象名,  INSERT ON 数据对象名,   ALTER  ON 数据对象名

    GRANT CONNECT, RESOURCE TO 用户名;
    GRANT SELECT ON 表名 TO 用户名;
    GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;

    2.REVOKE 回收权限

    REVOKE CONNECT, RESOURCE FROM 用户名;
    REVOKE SELECT ON 表名 FROM 用户名;
    REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;


    查询数据库中第63号错误:
    select orgaddr,destaddr from sm_histable0116 where error_code='63';

    查询数据库中开户用户最大提交和最大下发数: select MSISDN,TCOS,OCOS from ms_usertable;


    查询数据库中各种错误代码的总和:
    select error_code,count(*) from sm_histable0513 group by error_code order
    by error_code;

    查询报表数据库中话单统计种类查询。
    select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111
    select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype

  • 邀您共同讨论---偶然性不可重现BUG如何处理?

    2007-04-03 08:50:24

    tiger 2005-08-12 18:17
    一、一定要提交!!

    1. 记得有这么个缺陷,以后再遇到的时候可能就会了解发生的原因。
    2. 尽力去查找出错的原因,比如有什么特别的操作,或者一些操作环境等。
    3. 程序员对程序比测试人员熟悉的多,也许你提交了,即使无法重新,程序员也会了解问题所在。
    4. 无法重现的问题再次出现后,可以直接叫程序员来看看问题。
    5. 对于测试人员来说,没有操作错误这条.既然遇到,就是问题。即使真的操作错了,也要推到程序员那里,既然测试人员犯错误,用户也可能会犯同样的错误。错误发生的时候,Tester最大。

    二、程序不是测试人员写的,出问题也不是测试人员的原因。

    至于无法重现,可能的原因很多,因为测试人员看到的只是程序的外部,无法深入程序内部,所以把责任推给测试人员是不对的。

    测试人员的任务只是尽力重现问题,而不是必须重现!!


    三、下次再遇到的时候,拉他们来看就可以了。

    因为问题如果无论如何无法重现,程序员确实也没有什么好的解决方法。

    而且此类问题即使程序员说修改了,测试员也没有好的方法去验证是不是。 : )


    四、你可以告诉程序员,测试过程是没有错误的。

    测试人员只是检查程序中可能存在的问题,虽然测试人员使用一定的手段方法努力去覆盖所有的情况,但这些都是理论的推测。在实际中,可能因为人员、环境、配置等种种原因出现各种各样的问题,在测试人员这里发现问题是公司内部的事情,程序发到外面可就是公司的形象问题了。

    需要让程序员理解,测试人员是帮助他们的,不是害他们的。

    客户那里发现问题比测试员发现问题结果要严重的多。


    五、测试部门是独立与开发部门的呀,真的打交道,也是经理对经理。

    在我们这里,工作上面的事情,和程序员相互只能商议解决,并没有谁高谁低。

    问题无法重现,也要提出,程序员那里可以回复无法再现。问题放在那里,等到再次出现的时候,就立刻叫程序员过来查看。

    实在没有再次出现,最后可以写到报告中,说出现了什么现象,但无法再现(比较严重的问题才如此处理,小问题经理之间商量商量可能就算了)。

    至于测试人员必须重现bug,你杀了我好了,我每次测试项目都有无法重现的问题,很多我能找到大概的原因,有些根本无法重现(仅仅出现一次)。

    这种事情是无法避免的,并不能说测试人员无法重现问题,就是工作不到位(哼,程序有bug,是否可以说程序员工作不到位的呀)。


    六、测试部门要独立,最好不受开发的制约。其实真正要重视,就应该有否决的权利。

    我们公司就是项目承包,要拿最后的项目尾款,就要测试部签字通过,这样就避免了很多的问题。

    其实只要自己尽到心就可以了,管别人怎么说呢。


    七、我们使用的状态有:

    程序员处理的状态(由测试员提交的Action):等待处理的,再次出现的。

    测试员处理的状态(由程序员提交的Action):已经修改的,暂不修改的,系统限制的,使用错误的,无法再现的。测试员可以修改记录。

    经理处理的状态(由测试员提交Action):管理员处理的。经理还可以删除记录。

    按照比较标准的说法,其实对于缺陷还应该有“等待确认的”、“已经确认的”和“重复提交的”的状态,我们为了省事,统一使用了“等待处理的”。

    最后结项的时候,缺陷的状态对我们来说有两种,“已经关闭的”(由测试员或经理确认)和“暂不修改的”(比如下一个版本处理等)。

    呵呵,状态多,有些烦琐,特别是程序员很多的时候都不清楚应该回复什么状态,但我个人觉得对测试人员来说,这些状态比较清晰明了,容易处理。


    八、一个叫doer_ljy(可战)的网友回复了一些内容,我个人认为不很妥当,就回复了一些内容,绿颜色的是doer_ljy(可战)的内容:


    关于“无法重现”我看是有这么个问题存在。

    首先如果你在测试之前有严格的测试计划,就很难出现“无法重现”这种现象。“无法重现”的意思是不知道怎么操作才能再次看见这个BUG。那么这个BUG多半是“计划外”的。

    不清楚你是否是测试人员。“计划外”这个词,对测试员来说应该不存在。测试用例的粒度一直是个在讨论中的问题,测试人员很难有时间和精力写出包含内容、数据、步骤等等全部操作一切的测试用例(说白了,只要一个长手识字的人,按照测试单做,就能发现所有的问题,呵呵,有软件蓝领的感觉了)。即使真的有,意义也不大,测试很多的时候,是发散性的思维,带点创造性,想事先考虑完全,很难。所以更多时候,是在测试过程中逐步对用例等进行完善,所以说“计划外”最好不要提。

    说说我现在测试的一个项目,有一个业务,首先查询出人员,有个“全选”按钮,“全选”后,再用鼠标一个一个取消选择,这个时候进行业务办理的时候,就会提示“没有选择人员”,至今为止一切都正常,但是这个时候再次点选人员进行业务处理,仍然会提示“没有选择人员”,这就是一个缺陷了。这个问题我想一般人都不会在测试用例中考虑到吧,因为发生的条件很苛刻:不用“全选”按钮的时候不会发生;全选后点击“取消全选”按钮再办理业务不会发生;全选全消后,先点击人员再办理业务也不会发生。

    其次,成熟的测试人员及时无法再现BUG,也能准确的描述出BUG发生之前几个步骤的操作方法,测试用例情况。这些对开发人员分析BUG原因很重要。所谓的BUG发现环境。

    呵呵,看来我不是成熟的测试人员。手工测试,比较熟练的时候,和打字可以说差不多,应该进行到哪里,心中是有数的,但让我完全从头到尾的重复,不容易呀。写测试缺陷报告单的时候,也只是说明操作步骤和发生的现象。其实无法重现的问题,既然说“无法重现”,也就是测试人员已经对这个现象进行了多次的验证,一般从程序外部来说,测试人员的操作比程序员要熟练的。

    最后,我不同意测试人员不假思索把发现的“问题”直接推给编码人员的做法。毕竟是大家合作,目标是一致的。测试人员总是处在BUG发生的第一现场,应该帮助分析出现问题的原因。确认是不是自己的此时Miss.

    测试人员提交任何一个问题,都会经过反复的验证,如果容易重现,早就提出来了。绝对不是在推脱责任,还是那句话,对程序的结构,做的人当然比不做的人要清楚。另外,除非程序员询问,否则我不会给程序员提出修改分析和建议!!测试人员的任务是发现问题,解决问题是程序员的事情。这么做可能会影响程序员思考问题的思路;而且测试人员做的多了,程序员不但不感激,可能反而会反感(好像程序员对测试人员有好印象的不多)。

    再说两个我这两天遇到的问题。第一个就是我们的程序有一个锁定数据的功能。锁定后,在其它的业务,此数据将不能再使用。我当时发现这个功能无效,而且经过了几次的验证都不行,我当然就提出了。但是程序员那里说此功能好使,我再验证的时候,就没有问题了,这个问题当时可以重现(但是我不可能遇到问题就拉程序员来看吧),后来却没有了,只能放在那里,最后关闭掉。第二个就是在一个界面中,录入有顺序要求,必须先选择一个ListBox(必填)再进行Edit的录入,但一次操作我没有选择 ListBox就录入的Edit,也正常保存了。后来无论我怎么操作此问题都没有出现(不够成熟呀),我就放弃了,也没有提交记录(为了避免麻烦)。

    测试人员的时间是有限的,进度给的都很少,一般连用例都没有时间写,还要去花很多时间验证“无法重现”的问题?反正10分钟如果试验不出来,我就会放弃。严重的就提交,不影响的就当不知道。

    下面是其它一些人的观点:

    doublefalse(散诸怀抱):如果不能重现的bug确实比较麻烦,但最好在测试过程中注意干净环境、正确的操作、相同的数据源,只要真的有问题,一定能否复现的。呵呵,多试试!!!我们以前一直有客户反映入库的数据经常有无关数据,但在家里测试没有问题,后来才发现是汉字编码错位,这样同样的字,错位后就变成另外的东西了。

    liuxiaoyuzhou(蟀哥):遇到过同样的问题!主要是记住BUG出现的环境!测试的时候这是关键!在我们这里不能从现的BUG,是测试人员的工作不到位!我们这里程序员比测试人员说话有力度!郁闷呀!

    ericzhangali(另一个空间):首先一定要提交bug;其次不要企图RD一定去解这个bug;某些时候还得关闭这个bug。如果RD认为是测试错误,(不明白什么叫测试错误,是不是说他从测时要告诉你千万不要怎么怎么做,否则后果自负啊,)那也没什么办法,如果沟通解决不了,爱咋认为就咋认为吧。

    darkcat_c(错了重来):没有bug是不可以重现的,bug本事是建立在标准的规程上所出现的异常,如果你按test case步骤做的话不太可能出现此类bug。作为测试人员一定要具备良好的记忆能力,一旦出现一些不知如何产生的bug,至少你要知道刚才你大致进行了那些操作。良好的分析能力,尽管你只是测试,但你应该全面的了解程序的架构,和一些重要的内部细节,不然你这个测试就是不合格的。定位bug是开发的事情,而重现一个bug是测试的本职工作,不要把所有的事情推给开发,不然你的确比开发要低一等。(编者按:这种话,不愿意去辩驳,标准开发人员的看法,也许应该让他们也来做做测试)

    liyan_1014(雁子):我觉得应该是这么处理:

    1、一定提交bug,必须由负责bug的tester详细描述测试操作步骤,bug发生的症状,并将bug发生的具体环境也描述清楚;这样对于再次重现也有一定的参考性。

    2、测试和开发之间是需要良好沟通的,如果得到的回复是操作错误,那么请开发人员解释,为什么会允许存在操作错误,一般来说,对于错误控制,开发那边应该能很好的把握。

    3、沟通方面是需要方式的,开发人员对于自己完成的程序有一种满足感,一般来说是不允许别人来破坏他的这种感觉,如果沟通的时候尽可能是一种建议的形式,让开发人员自己指出自己的程序缺陷,这样对于开发人员来说是可以接受。


    longman7 2005-08-16 13:51
    工作中也遇到不少,虽然研发兄弟不讲,但自己还是感觉有些内疚,更怕别人怀疑自己。

    bug如果只出现一次,一来研发也不好定位问题,二来对自己产品的把握度也会降低,

    从效果来讲,跟没发现没区别。

    所以我觉得最好的方法就是较大限度杜绝"不能重现bug",也许测试人员参加研发过程,

    甚至写写代码是个好方法。看起来参加研发工作浪费了时间精力,但艰难一天爬座大山
    远比在盆地里转悠一个月要值得。

    tiger 2005-08-16 19:58
    同意.

    可以写测试脚本开始.这样可行,也可能锻炼自己的开发能力

    october 2005-08-17 12:53
    预测一下此BUG到了客户那里出现后客户的反映,根据严重程度,可以将其写在风险报告中。
    然后由头头们决定此BUG的生死。

  • 性能指标参数说明(下载)

    2007-04-02 21:36:15

    包括以下几个方面:

    1.Windows(pc Server)

    2.Unix(sun 480)

    3.Sql Server

    4.Sybase

    5.WebSphere

    自己以前做性能测试时,整理的一些内容,供大家参考,共同学习!

    下载性能指标参数

我的存档

数据统计

  • 访问量: 7044
  • 日志数: 5
  • 文件数: 1
  • 建立时间: 2007-04-02
  • 更新时间: 2007-04-05

RSS订阅

Open Toolbar