在测试的道路上,越走越远,越飞越高

发布新日志

  • 软件测试9(美)Ron Patton著周予滨姚静 等译

    2007-08-23 10:24:19

    第九章 兼容性测试

    并非所有软件都必须进行某种程度的兼容性测试。有极少数不与外界打交道的专用软件,独立使用,只有一个版本,不需要进行兼容性测试。但是,除此之外99%的软件都必须进行兼容性测试。

    兼容性是一种产品特性,可以有不同程度的符合标准。软件的兼容性取决于客户的要求。某字处理程序与其竞争对手产品的文件格式不兼容或者新操作系统不支持某一类游戏软件,都很正常的。软件测试员应该通过判断检查兼容性的工作量,为这些决定提供输入。

    如果受命对产品的数据文件格式进行兼容性测试,应该如何完成任务?
    调查一下接受测试的程序文件是否符合已有的标准。如果符合,测试就要遵循这些标准。对可能读写程序文件的程序进行等价分配。设计测试文档,使其包含程序能够读写的数据类型的典型范例。测试这些文件在接受测试的程序和其他程序之间是否正确传输。

    向后兼容:可以使用软件的以前版本。
    向前兼容,可以是用软件的未来版本。

    进行向前兼容性测试:
    这并不容易。对现在已经见不到的东西进行测试毕竟难以实现。解决问题的方法是,完整细致地将测试定义在可以作为标准之处,从而是该标准成为判定向前兼容性测试的手段。
  • 软件测试 8 (美)Ron Patton著周予滨姚静 等译

    2007-08-22 10:29:05

    第八章 配置测试

    组件和外设区别:
    组件一般指PC机内部的硬件设备。外设是PC机外部的。但是,根据硬件的类型,这个界限也可以突破。

    如何辨别发现的软件缺陷是普通问题还是特定的配置问题:
    在不同的配置中重新运行暴露软件缺陷的相同步骤。如果软件缺陷不出现了,就可能是配置软件缺陷。如果在不同的配置中都出现,就可能是普通问题。但一定要注意。配置问题可以跨越整个等价类别。

    保证软件永远不会有配置问题:
    这是一种技巧性问题。需要把硬件和软件打成一个包,软件只能在该硬件上运行,硬件必须完全密封,没有通往外界的单独接口。

    配置测试,用于等价分配硬件的原则是:
    年限,流行程度,地区和国家,客户或者商业需要。

    能够发布具有配置缺陷的软件产品吗?
    可以。永远不可能把软件缺陷全部修复。在所有测试中,仍和处理都是有风险的。测试员和测试小组需要决定哪些软件缺陷修复,哪些不修复。决定留下在仅在少见的硬件中出现的不太重要的软件缺陷和容易,出现此之外,就没有那么容易了。
  • 软件测试 7 (美)Ron Patton著周予滨姚静 等译

    2007-08-22 10:28:22

    第七章 带上X光眼镜检查软件

    了解软件的工作方法会影响测试的方式和内容,原因是:
    如果仅从黑盒子的角度测试软件,就无法知道软件案例是否足以覆盖软件的各个部分,以及测试案俩是否多余。有经验的黑盒子测试员能够为程序设计相当有效的测试案例,但没有白盒子测试知识,他就不知道这一套测试的好坏程度。

    动态白盒子测试和调试区别:
    这两个过程存在交叉,但是动态白盒子测试是为了发现软件缺陷,而调试的目标是修复软件缺陷。在分离和查找软件缺陷原因是发生交叉。

    大棒软件开发模式下救护不可能进行测试的两个原因是:
    1.难以甚至不可能找出导致问题的原因
    2.某些软件缺陷掩饰了其他软件缺陷。
    像构造时那样有步骤地集成,测试模块,可以在软件缺陷互相重叠,隐藏之前将其找出。

    测试存根和测试驱动的区别:
    测试存个用于自顶向下的测试。它清查到低级模块或者把自己替换为低级模块。其对于要测试的高级代码,外表和行为就像原有低级模块。
    测试驱动与测试存根相反,用于自底向上的测试。它是代替高级软件,更有效地运用低级模块的测试代码。

    总是首先设计黑盒子测试案例,根据认为软件要做的事设计测试案例,然后利用白盒子测试技术进行检查和加强成效。

    数据范围:
    • 数据流
    • 次边界
    • 公式和等式
    • 错误强制

    三种代码范围:
    • 程序语句和代码行范围
    • 分支范围
    • 条件范围
    条件范围是最好的,因为它还综合了分支范围和语句范围。它保证决策逻辑中的所有条件,例如if-then语句等,以及来自这些语句的所有分支和代码行都得到验证。


    白盒子测试最大的问题是,容易形成偏见。


    动态白盒子测试包括以下4个部分:

    • 直接测试底层功能,过程,子程序和库。在 Microsoft Windows中这称为应用程序编程接口(API)
    • 以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试案例
    • 从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行。
    • 估算执行测试时“命中”的代码量和具体代码,然后调整测试,去掉多余的,补充遗漏的。

    静态黑盒子测试是指检查产品说明书,并在投入软件编写之前查找问题。
    动态黑盒子测试是指在不了解软件如何工作的前提下进行测试。
    静态白盒子测试是指通过正式审查和检验检查代码的细节。
    动态白盒子测试是指在看到软件的工作方式时,根据获得的信息对软件进行测试。
  • 软件测试6 (美)Ron Patton著周予滨姚静 等译

    2007-08-21 10:48:34

    第六章 检查代码

    静态白盒子测试的好处:
    静态白盒子测试是在开发过程早期发现软件缺陷,使修复的时间和费用大幅减低。软件测试员可以得到软件如何运行的信息,存在哪些弱点和危险,而且可以与程序员建立良好的伙伴关系。项目状态可以传达给参与测试的所有小组成员。

    正式审查的关键要素:
    过程。按照过程进行是正式审查和两个程序员之间互查代码的区别。
    4个基本要素:
    确定问题
    遵守规则
    准备
    编写报告

    除了更正式之外,检验与其他审查类型的重大区别:在检验时,在场的不是代码的原创者。这迫使另一个完全理解要检验的软件。这比让其他人只是审查软件寻找软件缺陷更加有效。

    坚持标准或规范三个重要原因:
    可靠性
    可读性/可维护性
    移植性

    通用代码审查清单:
    数据引用错误
    数据声明错误
    计算错误
    比较错误
    控制流程错误
    子程序参数错误
    输入/输出错误
    其他检查
  • 软件测试5 (美)Ron Patton著周予滨姚静 等译

    2007-08-21 10:47:42

    第5章 闭着眼睛测试软件



    动态黑盒子测试:不深入代码细节的运行程序的软件测试方法。工作内容:进行输入,接受输出,检查结果。


    ps:选择软件测试案例是软件测试员最重要的一项任务。不正确的选择可能导致测试量过大或者过小,甚至测试目标不对。准确评估风险,把不可穷尽的可能性减少到可以控制的范围是成功的诀窍。



    成熟的专业软件开发过程都会有软件的详细说明。如果采用大棒模式或者边写边改模式,就不会有作为测试依据的产品说明书。

    尽管这对于测试员不是理想状况,但此时可以采取称为探索测试的解决方案。

    把软件当作产品说明书来对待。分步骤地逐项探索软件特性。记录软件执行情况,详细描述功能,运动静态黑盒子技术进行测试,然后运用动态黑盒子技术进行测试。

    这种情况下,无法像有产品说明书那样完整测试软件--比如无法断定是否遗漏功能,但可以进行系统测试。找到软件缺陷几乎是肯定的。



    在设计和执行测试案例时,总是首先进行通过测试。在破坏性试验之前看看软件基本功能是否实现很重要的。否则在正常使用软件时就会奇怪为什么那么多软件缺陷。


    选择测试案例的方法是等价分配(等价划分):分步骤地把过多(无限)的测试案例减小到同样有效的小范围的过程。

    等价类别或者等价区间指i测试相同目标或者暴露相同软件缺陷的一组测试案例。

    在找等价区间时,想办法把软件的相似输入,输出,操作分成组。这些组就是等价区间。



    数据测试的技巧,根据下列主要原则进行等价分配:

    • 边界条件:软件计划的操作界限所在的边缘条件。
           ps:提出边界条件时,一定要测试临近边界的合法数据,即测试最后一个可能的合法数据,以及刚超过边界的非法数据。
                    在软件的每一个部分不断寻找边界极为重要,更多的边界将会被发现,从而找出更多软件缺陷。
    • 次边界条件:最终用户几乎看不见,但是存在于软件内部的边界条件。如ASCII表的边界。
    • 空值
    • 无效数据


    软件测试员必须测试软件程序的状态及其转换。


    状态转换图的三个要素:

    • 软件所处的每一个独立状态
    • 从一个状态转移到另一个状态所需要的输入和条件
    • 当进入和退出状态时产生的条件,变量和输出。。


    失败状态测试案例:竞争条件,重复,压迫和重负。

    任何测试都是合理的。重复,压迫和重复可以交叠。



    其他黑盒子测试技术:

    • 向愚笨的用户那样做
    • 在已经找到软件缺陷的地方再找找
    • 凭借经验,直觉和预感。
  • 精妙SQL语句收集(转)

    2007-08-21 10:40:05

    最近需要用到SQL
    所以从网上找到篇很精妙的介绍。
    原文转至CSDN http://blog.csdn.net/chen8148/archive/2007/08/14/1741991.aspx

    精妙 SQL 语句收集

    SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
    一、基础
    1、说明:创建数据库
    CREATE DATABASE database-name
    2、说明:删除数据库
    drop database dbname
    3、说明:备份sql server
    --- 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
    --- 开始 备份
    BACKUP DATABASE pubs TO testBack
    4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2... from tab_old definition only
    5、说明:删除新表
    drop table tabname
    6、说明:增加一个列
    Alter table tabname add column col type
    注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
    7、说明:添加主键: Alter table tabname add primary key(col)
    说明:删除主键: Alter table tabname drop primary key(col)
    8、说明:创建索引:create [unique] index idxname on tabname(col....)
    删除索引:drop index idxname
    注:索引是不可更改的,想更改必须删除重新建。
    9、说明:创建视图:create view viewname as select statement
    删除视图:drop view viewname
    10、说明:几个简单的基本的sql语句
    选择:select * from table1 where 范围
    插入:insert into table1(field1,field2) values(value1,value2)
    删除:delete from table1 where 范围
    更新:update table1 set field1=value1 where 范围
    查找:select * from table1 where field1 like '%value1%' ---like的语法很精妙,查资料!
    排序:select * from table1 order by field1,field2 [desc]
    总数:select count as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1
    11、说明:几个高级查询运算词
    A: UNION 运算符
    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
    B: EXCEPT 运算符
    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
    C: INTERSECT 运算符
    INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
    注:使用运算词的几个查询结果行必须是一致的。
    12、说明:使用外连接
    A、left outer join:
    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
    B:right outer join:
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
    C:full outer join:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
    二、提升
    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1
    法二:select top 0 * into b from a
    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;
    3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from b in '具体数据库' where 条件
    例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
    4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
    5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
    7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;
    8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2
    9、说明:in 的使用方法
    select * from table1 where a [not] in ('值1','值2','值4','值6')
    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
    14、说明:前10条记录
    select top 10 * form table1 where 范围
    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)
    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()
    18、说明:随机选择记录
    select newid()
    19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
    20、说明:列出数据库里所有的表名
    select name from sysobjects where type='U'
    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')
    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3
    23、说明:初始化表table1
    TRUNCATE TABLE table1
    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
    三、技巧
    1、1=1,1=2的使用,在SQL语句组合时用的较多
    "where 1=1" 是表示选择全部   "where 1=2"全部不选,
    如:
    if @strWhere !=''
    begin
    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
    end
    else
    begin
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
    end
    我们可以直接写成
    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
    2、收缩数据库
    --重建索引
    DBCC REINDEX
    DBCC INDEXDEFRAG
    --收缩数据和日志
    DBCC SHRINKDB
    DBCC SHRINKFILE
    3、压缩数据库
    dbcc shrinkdatabase(dbname)
    4、转移数据库给新用户以已存在用户权限
    exec sp_change_users_login 'update_one','newname','oldname'
    go
    5、检查备份集
    RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
    6、修复数据库
    ALTER DATABASE [dvbbs] SET SINGLE_USER
    GO
    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
    GO
    ALTER DATABASE [dvbbs] SET MULTI_USER
    GO
    7、日志清除
    SET NOCOUNT ON
    DECLARE @LogicalFileName sysname,
            @MaxMinutes INT,
            @NewSize INT

    USE     tablename             -- 要操作的数据库名
    SELECT  @LogicalFileName = 'tablename_log',  -- 日志文件名
    @MaxMinutes = 10,               -- Limit on time allowed to wrap log.
            @NewSize = 1                  -- 你想设定的日志文件的大小(M)
    -- Setup / initialize
    DECLARE @OriginalSize int
    SELECT @OriginalSize = size
      FROM sysfiles
      WHERE name = @LogicalFileName
    SELECT 'Original Size of ' + db_name() + ' LOG is ' +
            CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
            CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
      FROM sysfiles
      WHERE name = @LogicalFileName
    CREATE TABLE DummyTrans
      (DummyColumn char (8000) not null)

    DECLARE @Counter   INT,
            @StartTime DATETIME,
            @TruncLog  VARCHAR(255)
    SELECT  @StartTime = GETDATE(),
            @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    EXEC (@TruncLog)
    -- Wrap the log if necessary.
    WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
          AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
          AND (@OriginalSize * 8 /1024) > @NewSize 
      BEGIN -- Outer loop.
        SELECT @Counter = 0
        WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
          BEGIN -- update
            INSERT DummyTrans VALUES ('Fill Log') 
            DELETE DummyTrans
            SELECT @Counter = @Counter + 1
          END  
        EXEC (@TruncLog) 
      END  
    SELECT 'Final Size of ' + db_name() + ' LOG is ' +
            CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
            CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
      FROM sysfiles
      WHERE name = @LogicalFileName
    DROP TABLE DummyTrans
    SET NOCOUNT OFF
    8、说明:更改某个表
    exec sp_changeobjectowner 'tablename','dbo'
    9、存储更改全部表
    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
     @OldOwner as NVARCHAR(128),
     @NewOwner as NVARCHAR(128)
    AS
    DECLARE @Name   as NVARCHAR(128)
    DECLARE @Owner  as NVARCHAR(128)
    DECLARE @OwnerName  as NVARCHAR(128)
    DECLARE curObject CURSOR FOR
     select 'Name'   = name,
      'Owner'   = user_name(uid)
     from sysobjects
     where user_name(uid)=@OldOwner
     order by name
    OPEN  curObject
    FETCH NEXT FROM curObject INTO @Name, @Owner
    WHILE(@@FETCH_STATUS=0)
    BEGIN    
     if @Owner=@OldOwner
     begin
      set @OwnerName = @OldOwner + '.' + rtrim(@Name)
      exec sp_changeobjectowner @OwnerName, @NewOwner
     end
    -- select @name,@NewOwner,@OldOwner
     FETCH NEXT FROM curObject INTO @Name, @Owner
    END
    close curObject
    deallocate curObject
    GO

    10、SQL SERVER中直接循环写入数据
    declare @i int
    set @i=1
    while @i<30
    begin
       insert into test (userid) values(@i)
       set @i=@i+1
    end
    小记存储过程中经常用到的本周,本月,本年函数
    Dateadd(wk,datediff(wk,0,getdate()),-1)
    Dateadd(wk,datediff(wk,0,getdate()),6)
    Dateadd(mm,datediff(mm,0,getdate()),0)
    Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
    Dateadd(yy,datediff(yy,0,getdate()),0)
    Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
    上面的SQL代码只是一个时间段
    Dateadd(wk,datediff(wk,0,getdate()),-1)
    Dateadd(wk,datediff(wk,0,getdate()),6)
    就是表示本周时间段.
    下面的SQL的条件部分,就是查询时间段在本周范围内的:
    Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
    而在存储过程中
    select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
    select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)


  • 软件测试新手的修炼之路(转)

    2007-08-20 11:38:32

       对于刚进入软件测试工作岗位的新人,如何快速、健康的在职业道路上成长,我谈几点看法,欢迎大家讨论。

    (1)兴趣是最好的老师

            对于软件测试工作,通常是比较枯燥的,如果没有兴趣很难做到持久。

            我最近参与了一个软件测试项目,在测试团队中,有三位是在校学生,他们以兼职的身份到公司上班,他们都是软件相关专业的本科生和研究生,基础都不错。但 是,只有其中一位表现最突出,因为他很珍惜这份社会实践的工作机会,做事认真,找出了很多高优先级的Bug。

            另两位同学,在参加项目不到1个月后就以各种理由退出了。在我与他们的交流中,其中一位说测试工作太枯燥了,没有挑战性,他更希望做软件开发的工作。这位同学由于不喜欢做软件测试,实际上他对软件测试技术缺乏基本的了解。所以他在7天的测试工作中,只找到了3个Bug(正常情况下,其他测试人员每天能找到5个缺陷)。因此,从绩效评比中他的成效最低。

            另一位同学虽然愿意做软件测试,但是他觉得现在的黑盒测试太简单,学习不到测试技术的高级技巧,他更愿意学习白盒测试,能够自己测试软件源代码。而现在的项目没有这部分的内容,所以尽管他工作成绩也不错,但是积极性不高。

            因此,建议同学们在寻找工作中,首先需要了解,你是否愿意做软件测试,愿意做白盒测试还是功能的黑盒测试,不要盲目的参与到工作中,否则对于用人单位,对于个人的成长都是浪费。

    (2)测试人员要学会思考

            测试是个技术工作,需要学会主动思考。如果你遇到一个好的测试主管(组长),他会主动的解决你的测试实际技术难点,这是你的幸运。但是测试问题错综复杂, 测试主管工作很忙,他没有时间解决你遇到的任何技术问题,需要你自己分析问题的性质,尝试各种解决方法,搜索网络上的文章,最好如果仍然解决不了才向主管 求助。

            我们反对遇到问题表现得很茫然失措,不要问一些很“弱智”的问题,否则主管认为你解决问题的能力不做,学习能力欠缺,这样对于今后的发展不利。

            测试人员如何思考?根据问题的现象思考。问题是属于测试专业知识不足引起的,还是测试用例等测试文档模糊、错误引起的,是个别现象还是测试项目的其他内容都存在的普遍现象。测试要从模拟用户使用的角度展看,因此要用最终用的角度,分析问题的严重程度。

            在询问最终的解决方法前,确保你根据自己的经验尝试了各种解决方法,并且尽量把你发现的问题和猜测,告诉测试主管,证明你已经主动思考了,但是没有找到好的解决方法,或者不能确定是否方法可行。

    (3)选择适合的测试学习材料

            软件测试的技术博大精深,对于初学者该从何入手呢?可以从以下几个方面学习:

            第一是公司提供的培训材料。测试新员工到公司后一般都要经过短暂的培训,这是学习的最好的第一手材料。针对性特别强,都是公司今后用到的测试知识的总结, 针对性和实用性都很强。如果有不懂得问题,可以随时提出来,因为你是测试新人,不懂要问,任何人都不会对你的能力表示怀疑。

            第二是借助测试项目的测试文档学习,包括测试计划、测试用例,测试缺陷数据库,可以先看看以前发现了哪些bug,这些bug是怎么发现的,有什么规律和特征,学习别人怎么写测试缺陷报告。

            第三是阅读测试书籍和测试网站和论坛。这些内容很多,建议利用工作之后的时间,根据自己的知识有选择的选择测试书籍,先从基础知识阅读。正式出版的书的内 容质量都比较高,而测试网站和论坛的文章良莠不齐,有些只是只言片语,很多还存在错误。因此,需要有一定的鉴别能力,否则会误导,浪费时间。

    (4)巩固测试知识基础

            练武术需要先练“蹲马步”,否则直接学习刀枪棍棒等十八般武器,只能学到几招皮毛,甚至伤及自己,武林高手都是基础很牢固的,内功很深厚的。

            做软件测试也是这个道理。很多出入测试行业的新人,希望走捷径,往往听信各种测试培训机构的宣传,认为参加几天的能力提高班,就可以步入测试高手的殿堂,这是错误的,也是要吃大亏的。

            另一个错误就是还没有学会测试的基本概念,就盲目地学习各种大型商业自动化测试软件,结果花了很多时间和金钱,只是学会了工具的具体操作。到了实际测试项目中,无法有效利用工具解决实际测试问题。

            实际上,作为测试新手,大部分都是从手工功能测试开始起步的,大型自动化测试只有成为测试高手,才有机会使用。另外测试工具的操作是很简单的技术问题,关键是如何发挥测试工具的作用,这需要测试策略。

            所以,初学者要老老实实的学习测试基础知识,学习各种测试术语、测试概念、测试分类、测试的流程、测试项目的执行过程等。如果这些都不懂,今后的职业发展会成为限制。

            学习是痛苦的过程,但是学习是增强技能的必然之路。学习测试知识没有捷径,需要日积月累,需要勤奋,需要思考,需要总结,从一点一滴学起。

    (5)不断学习行业知识

            测试人员除了学习和掌握测试技术外,还需要不断学习行业知识,这是区别普通测试技术人员和测试行业专家的最好方法。

            学习什么行业知识呢?根据你测试的软件的应用领域决定。例如,你正在测试的是电信行业的应用软件,那么你需要学习电信行业知识,包括术语、业务和行业技术。怎么学习呢?可以与客户交流,与开发人员交流,看专业书和文章。

            学习行业知识是个不断进步的过程,每个行业都有很系统的知识架构,首先学习工作中最需要的理论和技术。然后有机会和兴趣的时候,不断细化和深入。

            高级的测试人员需要精通测试技术,掌握行业知识,可以提供行业软件的测试和质量保证方案。对于初学者,要认识到经过不断努力,可以成为测试行业专家。千里之行,始于足下,目前最重要的是从测试入门知识开始。

  • 软件测试4 (美)Ron Patton著周予滨姚静 等译

    2007-08-20 11:28:50

    第4章 检查产品说明书


    软件测试员用于描述测试方式的两(4)个术语:黑盒子测试和白盒子测试。静态测试和动态测试。

    黑盒子测试,软件测试员之需要知道软件要做什么,不知道程序如何运作。

    白盒子测试,软件测试员可以访问程序员的代码,并通过检查代码来协助测试。

    ps:进行白盒子测试需要冒些风险。因为要调整测试程序以适应代码操作,所以很容易形成偏见而无法进行客观测试。


    静态测试:测试不运行的部分-只是检查和审阅。

    动态测试:运行和使用软件。


    测试产品说明书属于静态黑盒子测试。


    对产品说明书进行高级审查:

    • 设身处地为客户着想
    • 研究现有的标准和规范
    • 审查和测试同类软件

    产品说明书的低级测试技术:
    1. 产品说明书属性检查清单
    • 完整。
    • 准确。
    • 精确,不含糊,清晰。
    • 一致。
    • 贴切。
    • 合理。
    • 代码无关。
    • 可测试。
      2.产品说明书用于检查清单
    • 总是,每一种,所有,没有,从不。
    • 当然,因此,明显,显然,必然。
    • 某些,有时,常常,通常,惯常,经常,大多,几乎。
    • 等等,诸如此类,以此类推。
    • 良好,迅速,廉价,高效,小,稳定。
    • 已处理,以拒绝,已忽略,已消除。
    • 如果。。。那么。。。(没有否则)
  • 软件测试3 (美)Ron Patton著周予滨姚静 等译

    2007-08-20 11:28:02

    第三章 软件测试的实质

       

        测试原则      

    • 完全测试程序是不可能的
    •  软件测试是有风险的行为
    • 测试无法显示潜伏的软件缺陷
    • 找到的软件缺陷越多,就说明软件缺陷越多
    • 杀虫剂怪事,抗药性
    • 并非所有软件缺陷都能修复
    • 难以说清的软件缺陷
    • 产品说明书不断变化
    • 软件测试员在产品小组中不受欢迎
    • 软件测试是一项讲究条理的技术专业

     

        软件测试的术语和定义

    • 精确和准确
    • 验证和合法性检查
    • 质量和可靠性
    • 测试和质量评判(QA

    Ps:软件质量评判人员的主要职责是创建和加强促进软件开发并防止软件缺陷的标准和方法。

  • 电子商务测试之重点:业务知识(转)

    2007-08-17 10:24:31

    电子商务测试之重点:业务知识


    熟悉业务知识远比测试知识更重要

    1. 购物流程,直接影响顾客的购物体验;
    2. 销售规则,商家营销获利的法宝;
    3. 产品的组织和管理,网店高效经营的重点;
    4. 客服管理,稳住老客户、开发新客户的手段;
    5. 行业特点和个性化服务,产品差异化竞争、商家战胜对手的原则;
    6. 安全性和诚信,电子商务发展最有力的保证。

    基于以上原因,我认为电子商务测试中需要注意:
    1.与时俱进,及时了解最新的电子商务动态,坚持学习。
       曾经听过某名人说过:学习型的团队才是最好的团队;人只有在学习中,才能得到提升。

    2.良好的购物体验,发掘更优、更简捷的购物模式。

    3.掌握常规的销售手段和促销方法,善于联系实际生活,善于总结实物营销的经验。

    4.良好的组织思维,善于理清多层/多重关系,抓住关键流。
      (如商品流、货款流、订单流、运输流、顾客流等)

    5.要有服务的意识,最好懂得一点顾客消费心理学。

    6.换位思考,多站在商家、顾客的角度想问题。
  • 测试用例(Test Cases)设计

    2007-08-16 10:26:18

    来自51
    http://www.51testing.com/?action_viewnews_itemid_17401.html

    1、如何创建Test Cases

    Test Cases基本要素:
            1 简明的标题(说明测试的目的)
            2 用例的优先级,测试所需时间
            3 初始化条件,如何构造测试环境
            4 执行测试的详细步骤
            5 期望Test Cases执行后的正确结果


    关于测试用例的优先级别的设定:
            pri1 - 基本的功能
            pri2 - 错误的条件,界限用例(最大值,最小值...)
            pri3 - 极端的条件,边缘用例

    编写Test Cases的注意事项:
            一个好的Test Cases的重要性不亚于一段好的代码,在写Case的过程中我们需要注意以下几个方面:
            1 需要有一个具有自我解释功能的标题,将测试的目的说清楚。(例如:按下“ALT+F+C”关闭“XXXX”主窗体。)
            2 足够详细准确的内容,即使是一个对所要测试的内容根本不了解的新手,也能准确的按照所写的Test Cases完成测试。
            3 拒绝重复的测试用例
            4 不要有模糊的,个性化和想当然的Test Cases(例如:用各种方法打开对话框“XXXX”)
            5 尽量提供一些于Test Cases相关的参考

    当你在写完cases的时候最好带着一下几个问题检查一下你的case:
            1 你的test case的标题是否体现了该用例详细而精确的目的性
            2 你的test case对于一个新手来说是否能让他们精确的执行
            3 你的test case是否有重复
            4 你的test case中的步骤是否清晰,让人一看就能很明白的执行
            5 你定义的执行结果是否能让人很清楚的意识到他跑完这个case后是成功还是失败

    2、运行Test Cases
            根据Test Cases的优先级和不同的测试阶段运行测试用例,运行时要注意Case的优先级(有必要时可以对其进行修改)和测试方式(手动测试还是自动化测试等),并最终记录测试结果。

    3、记录测试结果
            记录在不同测试阶段(Test Pass 1, Regression 1, Test Pass 2…UI Freeze.. Regression 2….Final Test Pass.)运行Test Cases的结果,一般分四种结果Blocked(记录bug号和原因)、Failed(记录bug号和原因)、Not Run(记录原因)、Pass。

    4、何时再修改并创建新的Test Cases
            1 测试目标一些特性的改变
            2 Test Cases的优先级发生改变
            3 代码改变
            4 发现新的Bug但用例库中没有与之相关的Test Case
            5 发现新的Bug但用例库中已经存在与之相关的Test Case

  • 软件测试笔试题(转)

    2007-08-15 13:59:58

    题与答案尽供参考
    一、判断题
    1.软件测试的目的是尽可能多的找出软件的缺陷。(Y)
    2.Beta 测试是验收测试的一种。(Y)
    3.验收测试是由最终用户来实施的。(N)
    4.项目立项前测试人员不需要提交任何工件。(Y)
    5.单元测试能发现约80%的软件缺陷。(Y)
    6.代码评审是检查源代码是否达到模块设计的要求。(N)
    7.自底向上集成需要测试员编写驱动程序。(Y)
    8.负载测试是验证要检验的系统的能力最高能达到什么程度。(N)
    9.测试人员要坚持原则,缺陷未修复完坚决不予通过。(N)
    10.代码评审员一般由测试员担任。(N)
    11.我们可以人为的使得软件不存在配置问题。(N)
    12.集成测试计划在需求分析阶段末提交。(N)
     
    二、选折
    1.软件验收测试的合格通过准则是:(ABCD)
    A. 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
    B. 所有测试项没有残余一级、二级和三级错误。
    C. 立项审批表、需求分析文档、设计文档和编码实现一致。
    D. 验收测试工件齐全。
    2.软件测试计划评审会需要哪些人员参加?(ABCD)
    A.项目经理
    B.SQA 负责人
    C.配置负责人
    D.测试组
    3.下列关于alpha 测试的描述中正确的是:(AD)
    A.alpha 测试需要用户代表参加
    B.alpha 测试不需要用户代表参加
    C.alpha 测试是系统测试的一种
    D.alpha 测试是验收测试的一种
    4.测试设计员的职责有:(BC)
    A.制定测试计划
    B.设计测试用例
    C.设计测试过程、脚本
    D.评估测试活动
    5.软件实施活动的进入准则是:(ABC)
    A.需求工件已经被基线化
    B.详细设计工件已经被基线化
    C.构架工件已经被基线化
    D.项目阶段成果已经被基线化
    三、添空
    1.软件验收测试包括:正式验收测试,alpha测试,beta测试。
    2.系统测试的策略有:功能测试,性能测试,可靠性测试,负载测试,易用性测试,强度测试,安全测试,配置测试,安装测试,卸载测试,文挡测试,故障恢复测试,界面测试,容量测试,兼容性测试,分布测试,可用性测试,(有的可以合在一起,分开写只要写出15就满分哦)
    3.设计系统测试计划需要参考的项目文挡有:软件测试计划,软件需求工件和迭代计划。
    4.对面向过程的系统采用的集成策略有:自顶向下,自底向上两种。
    5.(这题出的有问题哦,详细的5步骤为~~)通过画因果图来写测试用例的步骤为:
    (1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
    (2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
    (3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。
    (4)把因果图转换成判定表。
    (5)把判定表的每一列拿出来作为依据,设计测试用例。
     
    四、简答(资料是搜集整理的,感谢前辈的解题)无
    1.区别阶段评审的与同行评审
    同行评审目的:发现小规模工作产品的错误,只要是找错误;
    阶段评审目的:评审模块 阶段作品的正确性 可行性 及完整性
    同行评审人数:3-7人 人员必须经过同行评审会议的培训,由SQA指导
    阶段评审人数:5人左右 评审人必须是专家 具有系统评审资格
    同行评审内容:内容小 一般文档 <  40页, 代码 < 500行
    阶段评审内容: 内容多,主要看重点
    同行评审时间:一小部分工作产品完成
    阶段评审时间: 通常是设置在关键路径的时间点上!
     
    2.什么是软件测试
    为了发现程序中的错误而执行程序的过程
     
    3简述集成测试的过程
    系统集成测试主要包括以下过程:
    1. 构建的确认过程。
    2. 补丁的确认过程。
    3. 系统集成测试测试组提交过程。
    4. 测试用例设计过程。
    5. 测试代码编写过程。
    6. Bug的报告过程。
    7. 每周/每两周的构建过程。
    8. 点对点的测试过程。
    9. 组内培训过程。
     
    4 怎么做好文档测试
    仔细阅读,跟随每个步骤,检查每个图形,尝试每个示例。P142
    检查文档的编写是否满足文档编写的目的
    内容是否齐全,正确
    内容是否完善
    标记是否正确
     
     
    5 白盒测试有几种方法
    总体上分为静态方法和动态方法两大类。
    静态:关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义
    动态:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
     
    6系统测试计划是否需要同行审批,为什么
    需要,系统测试计划属于项目阶段性关键文档,因此需要评审。
     
    7Alpha测试与beta的区别
    Alpha测试 在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。
     
    Beta测试 当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。
     
    8比较负载测试,容量测试和强度测试的区别
    负载测试:在一定的工作负荷下,系统的负荷及响应时间。
    强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
    容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
  • 读书笔记2--软件测试(美)Ron Patton著周予滨 姚静

    2007-08-15 13:58:03

    第二章     软件开发过程

     

    程序员开始编码前需要完成:

    开发小组需要了解客户的要求,在产品说明书中定义特性。应该建立详细的进度,使小组成员知道哪些工作已经完成,哪些工作还要做。软件应该形成体系,经过设计,测试小组应该开始计划工作。

     

    不得更改的正规产品说明书的缺点

    如果由于竞争对手发布了产品或者客户要求改变,就没有调整软件的灵活性。

     

    软件开发模式

     

    大棒式

    边写边改式

    流水式

    螺旋式

    优点

    简单

    适合小项目

    便捷,优雅

    集众优点于一身

    缺点

    结果不可欲知

    无休止

    缺陷隐藏

     

    备注

    没有时间测试

    无休止的测试

    有利测试

    Good

     

    流水模式:需求-分析-设计-开发-测试

    螺旋模式

    1.       确定目标,可选方案和限制条件

    2.       指出并解决风险

    3.       评估方案

    4.       本阶段开发和测试

    5.       计划下一阶段

    6.       确定进入下一阶段的方法

    软件测试员like 此种模式,因为他们很早就参与开发过程,有机会尽早发现问题,为项目节省时间和金钱。

  • 读书笔记--软件测试1(美)Ron Patton著周予滨 姚静

    2007-08-14 16:27:02

    第一章 软件测试背景


    软件缺陷定义:

       1.软件未达到产品说明书标明的功能
       2.软件出现了产品说明书指明不会出现的错误
       3.软件功能超出了产品说明书指明的范围
       4.软件未达到产品说明书虽未指明但应达到的功能
       5.软件测试员认为软件难以理解,不易使用,运行速度缓慢,或者最终用户认为不好。


    软件测试员的目标:找出软件缺陷,尽可能早一些,并确保其得以修复。


    优秀软件测试元应具备的素质:

        探索精神。软件测试员不会害怕进入陌生环境。他们喜欢拿到新软件,安装在自己的机器上,观看结果。
        故障排除能手。软件测试员善于发现问题的症结。他们喜欢猜谜。
        不懈努力。软件测试员总是不停尝试。他们可能会碰到转瞬即逝或者难以重建的软件缺陷。他们不会心存侥幸,而且尽一切可能去寻找。
        创造性。测试显而易见的事实,那不是软件测试员。他们的工作是想出富有创意甚至超常的手段来寻找软件缺陷。
        追求完美。他们力求完美,但是知道某些无法企及时,不去渴求,而是尽力接近目标。
        判断准确。软件测试员要决定测试内容,测试时间,以及看到的问题是否算作真正的缺陷。
        老练稳重。软件测试员不害怕坏消息。他们必须告诉程序员,你的孩子(程序)很丑。优秀的软件测试员知道怎么样老练的处理这些问题,和不够冷静的程序员怎么样合作。
        说服力。软件测试员找出的软件缺陷有时被认为不重要,不用修复。测试员要善于表达观点,表明软件缺陷为何必须修复,并通过实际演示力陈观点。


    PS:软件测试员的一个基本素质是打破砂锅问到底。他们喜欢找出那些深藏不漏的系统冲突。他们乐于处理最复杂的问题。他们外表上热衷于来回奔忙,追求尽善尽美,为征服系统而额手称庆。这就是麻烦堆里的快乐。


    此外,软件编程方面知识。个行业专业知识。
  • 加油◎◎在测试的道路上奋勇前进!!!

    2007-08-14 16:11:48

    加油◎◎在测试的道路上奋勇前进!!!

    开通我的测试博客了
754/4<1234
Open Toolbar