发布新日志

  • SQL Server小札

    iory 发布于 2010-08-20 00:59:39

    表格创建
    CREATE TABLE Employee
    (Emp_id numeric(10,0) IDENTITY,
    last_name varchar(30) NOT NULL,
    first_name varchar(30) NOT NULL,
    age numeric(3,0)
    country varchar(30) NOT NULL
    city varchar(30) NULL
    )

    NOTES
    IDENTITY,一个表里只能定义一个标识列,默认值为(1,1),插入数据时值会递增
    ROWGUIDCOL, 定义该列为行全局唯一的标识列,一个表只有一个标识符列可以定义为ROWGUIDCOL

    表格的删除
    DROP TABLE table_name


    修改表格定义
    CREATE TABLE doc_exa (colum_a INT)
    ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL
    ALTER TABLE doc_exa ADD column_c VARCHAR(20) NULL
    ALTER TABLE doc_exa DROP column_c
    ALTER TABLE doc_exa CHECK CONSTRAINT column_B
    ALTER TABLE doc_exa NOCHECK CONSTRAINT column_B
    ENABLE TRIGGER trigger_name
    ALTER TABLE doc_exa DROP column_c
    DROP TABLE doc_exa

    查看表属性
    sp_help table_name '查看表和表中数据列有关的信息
    sp_spaceused table_name '查看表格行数和表格所用的存储空间
    sp_depends table_name '查看表格的这种相关性关系


    表格重命名
    sp_rename old_table_name,new_table_name

    索引
    优点:在列上建立的一种数据库对象,对表中的数据提供逻辑排序,可以提高数据的访问速度。
    缺点:过多的建立索引会占据大量磁盘空间,增加系统开销

    不适用
    查找小表(如100行数据)中的某些数据
    查找大表中绝大多数数据

    适用
    查找大表中有限数量的数据,使用索引是一个不错的选择

    簇族索引和非簇族索引
    簇族索引按照键值对进行排列,一个表只能对应一个簇族索引
    非簇族索引不根据键值排序,索引结构与数据行是分开的,查找速度明显低于簇族索引

    创建索引INDEX
    语法
    CREATE UNIQUE CLUSTERED|NOCLUSTERED INDEX index_name ON table (column)


    CREATE TABLE emp_pay
    (employeeID int NOT NULL,
    base_pay money NOT NULL,
    commission decimal(2,2) NOT NULL
    )
    CREATE UNIQUE CLUSTERED INDEX employeeID_ind ON emp_pay (employeeID)

    索引删除
    DROP INDEX table.index
    DROP INDEX emp_pay.employeeID

    DBMS
    数据库管理系统(database management system)

    遍历
    所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问

    TOP关键字
    只返回前面一定数量的数据
    语法
    SELECT [TOP integer|TOP integer PERCENT] column_name FROM table_name

    select top 10 * from customer
    select top 10 percent * from customer

    DISTINCT关键字
    优点:能够从返回的结果数据集合中删除重复行,使返回结果更简洁。
    缺点:须花费额外的CPU时间来执行查询数据的分类和整理,导致查询速度变慢

    select distinct country from publishers
    注意:DISTINCT关键字作用范围是整个查询列表,而不是单一的列,如同时对两列数据进行
    查询时,将返回两列数据的唯一组合。

    操作查询的列名
    可以用AS关键字,=号来连接

    select title_id AS '图书代号', '原价'=price,price-price*0.3 '现价' from titles


    BETWEEN,IN关键字

    LIKE字句模糊查询
    通配符
    %:任意个字符
    _:单个字符
    []:方括号里列出的任意一个字符
    [^]:任意一个没有在方括号列出的字符

    ESCAPE转义字符
    select coll
    from example
    where coll like 't[X[XYZ]Z]'
    escape 't'


    排序ORDER BY,ASC,DESC
    select strore_name,city from stores order by 1 desc
    1代表所处的位置

     

    INSERT添加表格数据
    INSERT publishers
    (pub_id,pub_name,city,state)
    VALUES
    ('9993','SANCO','WASHINGTON','WA')

    UPDATE实现数据修改
    语法
    UPDATE table_name
    set
    column_name={expression|DEFAULT|NULL}
    [from table_name]
    where searchcondition

    update authors set au_lname='JOE' where au_id='172-32-1176'

    update authors set state='ZZ'
    from (select top 10 * from authors order by au_lname) AS t1
    where authors.au_id=t1.au_id

    DELETE删除表中数据
    DELETE [FROM] table_name WHERE search_conditions
    删除所有来自CA州的作家
    delete from authors where state='CA'

    删除表中每一行数据
    delete from authors


    TRUNCATE TABLE清空表格
    清空表格中所有数据,只留下一个表格定义,执行速度比delete快,不进行日志的记录,删除数据后
    无法恢复。
    TRUNCATE table_name

     

    视图
    与直接使用表相比,视图有许多优点
    1.对表中需要的数据横向(select语句实现)和纵向(where子句实现)分割,有限制的显示数据,简化
    浏览数据的工作
    2.简化对表格的存储操作
    3.设置访问许可权限,限制用户访问,保护数据,不同用户可以建立不同视图
    4.为数据库重构提供一定的逻辑独立性

     

    视图创建
    语法
    CREATE VIEW view_name
    AS
    SELECT Statement
    [WITH CHECK OPTION]

    create view author_view
    AS
    select au_id,au_fname,au_lname
    from authors

    删除视图
    DROP VIEW view_name

    修改视图
    先建立了一个可以访问所有作家的视图,然后修改定义,只有华盛顿州的作家可以被查询
    create view all_authors (au_fname,u_lname,address,city,zip)
    AS
    select au_fname,au_lname,address,city,zip
    from authors

    alter view all_authors (au_fname,u_lname,address,city,zip)
    AS
    select au_fname,au_lname,address,city,zip
    from authors
    where state ='WA'

    视图信息浏览
    sp_help author_view '浏览视图中各列列表
    sp_depends '返回引用了哪些别的数据库对象
    sp_helptext '检索存储在视图,触发器,存储过程中的文本

    INSERT,UPDATE与表格操作一致


    删除视图中数据
    通过视图删除数据最终都体现为从基本表中删除数据

    WITH CHECK OPTION
    使用WITH CHECK OPTION可以有效地对不合理数据进行筛选,建议使用
    WITH ENCRYPTION
    隐藏生成视图的代码

    create view wa_publishers_2
    with encyption
    AS
    select *
    from publishers
    where state='WA'
    with check option

    视图许可权限
    不同用户授予不同使用权限
    通过使用select字句限制用户对某些底层基本表列的访问
    通过使用where字句限制用户对某些底层基本表行的访问


    整数数据类型
    bit
    bigbit
    int
    smallint
    tinyint

    货币数据类型
    money
    smallmoney

    数字数据类型
    decimal
    numeric

    浮点数据类型
    real
    float


    日期/时间数据类型
    datetime


    字符数据类型
    char
    varchar
    text

    笛卡尔乘积
    问题:出现在对表格连接条件的限制上
    select title_id,au_fname
    from titles,authors

    注意:如有N个表格出现在FROM后面,定义的连接条件不得少于N-1个

    JOIN  ON关键字
    JOIN用于连接两个不同的表格,ON用于给出这两个表格之间的连接条件
    select titles.title_id,au_fname
    from titles join titleauthor
    on titleauthor.title_id=titles.title_id
    join authors
    on authors.au_id=titleauthor.au_id
    where authors.state="CA"

    另一种写法
    select titles.title_id,au_fname
    from titles,titleauthor,authors
    where titleauthor.title_id=titles.title_id
    and authors.au_id=titleauthor.au_id and authors.state="CA"


    表格别名的使用
    目的:简化查询语句的写法
    写法1
    select titles.title_id,au_fname
    from titles t join titleauthor ta
    on ta.title_id=t.title_id
    join authors a
    on a.au_id=ta.au_id
    where a.state="CA"
    写法2
    select titles.title_id,au_fname
    from titles as t,titleauthor as ta,authors as a
    where ta.title_id=t.title_id
    and a.au_id=ta.au_id and a.state="CA"

    UNION子句
    可以对UNION操作的数据集结果进行排序,把ORDER BY子句放在最后的SELECT子句后面
    但排序的依据是第一个SELECT列表中的列
    select state
    from authors
    union
    select state
    from publishers
    order by state


    统计函数
    sum()
    avg()
    min()
    max()
    count()
    count(*)
    与统计函数一起使用distinct
    select avg(qty) "avg_qty",sum(qty) "sum_qty",count(distinct stor_id)
    where sales


    count(*)进行行数统计
    select count(*)
    from publishers
    where state ="CA"


    GROUP BY使用方法
    按某一列数值进行分类,在分类的基础上进行查询,需要使用GROUP BY
    select type,pub_id,avg(price) "avg_price",sum(price) "sum_price"
    from title
    where type in ("business","trad_cook","mod_cook")
    group by type,pub_id

    HAVING关键字筛选结果
    select type,avg(price) "avg_price"
    from titles
    where price>10
    order by type
    having avg(price)>18


    ALL关键字
    GROUP BY子句中提供了All关键字,只有当select语句中,同时使用了where子句的情况下才有
    意义,如使用了All关键字,所有被GROUP BY子句分类的数据集都将出现在结果集中
    select type,pub_id,avg(price) "avg_price",sum(price) "sum_price"
    from title
    where type in ("business","trad_cook")
    group by all type,pub_id
    order by type


    CUBE关键字
    多维立方体,数据列的数据进行交叉组合产生的结果集。
    select type,pub_id,avg(price) "avg_price",sum(price) "sum_price"
    from title
    where type in ("business","trad_cook","mod_cook")
    group by type,pub_id
    with cube


    ROLLUP关键字
    类似CUBE关键字,但能够压缩掉无意义的行
    select type,pub_id,avg(price) "avg_price",sum(price) "sum_price"
    from title
    where type in ("business","trad_cook","mod_cook")
    group by type,pub_id
    with rollup

    COMPUTE,COMPUTE BY
    select type,price,advance
    form. titles
    order by type
    compute sum(price),sum(advance) by type


    嵌套查询中使用EXISTS关键字
    select title_id,au_id
    from titleauthor
    where exists
    (select *
    from authors
    where authors.au_id=titleauthor.au_id
    and state="CA"
    order by title_id

    列清单中使用嵌套查询
    select a.au_lname,t.title_id,
    "Quantity Sold" = (select sum(qty) from sales where title_id=t.title_id)
    from authors a,titles t,titleauthors ta
    where a.state="CA"
    and a.au_id=ta.au_id
    and ta.title_id=t.title_id
    order by a.au_lname

     

     

    约束
    列级约束:列级约束是行定义的一部分,只能应用爱一列上
    表级约束:表级约束的定义独立于列的定义,可以应用在一个表中的多列上

    浏览具体表的约束信息
    sp_helpconstraint table_name

    PRIMARY KEY约束
    利用表中的一列或多列数据来唯一地标识一行数据,为了有效实现数据管理,
    每一张表都应该有自己的主键,且只能有一个主键(PRIMARY KEY约束唯一性)

    主键操作
    在创建表格时,定义主键,主键是表格定义的一部分。
    主键添加
    修改或删除表上已经定义的主键
    --主键已存在,先删除,再建立
    --主键被外键引用,可以先删外键,再删主键

    列级主键约束
    create table test1
    (
    job_id smallint identity(1,1) primary key clustered,
    job_desc varchar(50) not null
    default
    )
    表级主键
    create table test2
    (
    event_type int,
    event_time datetime,
    event_site char(50),
    event_desc char(1024),
    constraint even_key primary key (event_type,event_time)
    )

    查看主键信息
    sp_pkey table_name

    主键删除
    alter table test1
    drop constraint pk_test1_440b1d61

    主键修改
    alter table test1
    add constraint pk_id primary key clustered (job_id)


    UNIQUE约束
    用来确保不受主键约束的列上的数据唯一性

    PRIMARY KEY约束与UNIQUE约束区别
    UNIQUE约束主要用在非主键的一类或多列上要求数据唯一的情况
    UNIQUE约束允许在该列上存在NULL值,主键不允许
    一个表上可以设置多个UNIQUE约束,而一个表上只能设置一个主键

    UNIQUE约束操作
    在创建表格时,定义UNIQUE约束,UNIQUE约束是表格定义的一部分。
    UNIQUE约束添加
    修改或删除表上已经定义的UNIQUE约束
    --UNIQUE约束已存在,先删除,再建立
    --UNIQUE约束可以在列级或表级上设置

    create table test3
    (
    event_name char(20),
    event_type char(20),
    event_time datetime,
    event_id int primary key clustered,
    constraint uniq_event unique (event_type,event_time)
    )

    删除UNIQUE方法
    添加UNIQUE方法
    --同PRIMARY KEY


    CHECK约束
    检查数据值的合理性来实现数据的完整性
    create table sales
    (
    saleid int identify(100000,1) not for replication,
    check not for replication (saleid<=199999),
    salesregion char(2),
    constraint id_pk primary key (saleid)
    )


    表上所有约束无效
    alter table authors
    nocheck constraint all

    FOREIGN KEY约束
    用来维护两个表之间的一致性关系,外键的建立主要是通过将一个表中的主键所在列包含在另
    一个表中,这些列就是另一个表的外键

     

     


    局部变量
    可以在一个DECLARE语句中声明多个变量
    DECLARE @LastName NVARCHAR(30),
      @FirstName NVARCHAR(30),
      @State NCHAR(2)
      

    局部变量赋值
    SELECT语句赋值
    SET语句赋值
    查询功能和赋值功能不能混合使用

    DECLARE @MyCounter INT
    SELECT @MyCounter=20

    DECLARE @row int
    SET @row = (select count(*) from authors)

    全局变量
    用来记录SQL Server服务器活动状态的一组数据。


    IF ELSE条件判断结构
    BEGIN  END语句块
    可以将一组SQL语句封装成一个完整的SQL语句块

    if (select avg(price) from titles where type = "business")< $20

    BEGIN
    print "这是一些优秀的经济类书籍:"
    select title
    from titles
    where type="business"
    END

    else
    print "平均书价超过$20."


    WHILE循环结构
    在满足条件的情况下,重复执行同样的语句

    WHILE NOT EXISTS(SELECT price
          from titles
          WHERE price <$30)
    BEGIN
    UPDATE titles
    SET price = price * 1.5
    SELECT MAX(price) FROM titles
    IF (SELECT MAX(price) FROM titles) > $50
    BREAK
    ELSE
    CONTINUE

    CASE多选择
    CASE语句可以更方便地实现多重选择的情况,可以避免编写多重的IF THEN嵌套循环。
    select "作者"=
     case
      when "CA" then "来自加利福尼亚"
      when "KS" then "来自堪萨斯州"
      when "MI" then "来自马萨诸塞州"
      when "IN" then "来自印第安纳州"
      when "TN" then "来自田纳西州"
      else "来自其他州"
     end
     au_fname+"."+au_name
     from authors
     order by state
     
     
    游标
    游标类似C语言的指针一样的语言结构,数据库执行的大多数SQL命令都是同时处理集合内部的所有
    数据,有时候用户也需要对这些数据集合中的每一行进行操作。如果没有游标,这种工作不得不放
    到数据前端,用高级语言实现。这将导致不必要的数据传输,从而延长执行的时间。通过游标可以在
    服务器端有效地解决这个问题


    事务
    BEGIN TRANSACTION transaction_name
    开始一个事务单元
    COMMIT TRANSACTION transaction_name
    完成一个事务单元
    ROLLBACK TRANSACTION transaction_name
    回滚一个事务单元
    SAVE TRANSACTION savepoint_name
    设置保存点

    回滚:只有在保存点到回滚语句之间的操作被取消。
    BEGIN TRANSACTION exampletrans
    USE pubs
    GO
    UPDATE titleauthor
    SET royaltype =35
    FROM titleauthor,titles
    WHERE royaltyper =25
    AND titleauthor.title_id=titles.title_id
    AND title= 'The Gourmet Microwave'
    GO
    SAVE TRANSACTION percentchange
    UPDATE titles
    SET price = price * 2
    WHERE title= 'The Gourmet Microwave'
    GO
    ROLLBACK TRANSACTION percentchanged
    PRINT "程序继续执行"
    COMMIT TRANSACTION


    存储过程
    是一组预先编译好的Transact-SQL代码。
    既可以作为数据库的对象,也可以作为一个单元被用户调用

    存储过程类似其它编程语言里的过程(procedure)
    存储过程可以接收参数,并以输出参数的形式返回多个参数给调用存储过程的过程或批处理
    存储过程也可以容纳对数据库进行查询、修改的编程语句,也可以调用其他的存储过程
    可以返回执行存储过程的状态值以反映存储过程的执行情况
    存储过程不同于函数,存储过程不能在被调用的位置上返回数据,也不能被应用在语句当中
    USE pubs
    GO
    IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'au_info' AND type='p')
    DROP PROCEDURE au_info
    GO
    CREATE PROCEDURE author_information
    AS
    SELECT au_lname,au_fname,title,pub_name
    FROM authors a
    JOIN titleauthor ta
    ON a.au_id=ta.au_id
    JOIN titles t
    ON t.title_id=ta.title_id
    JOIN publishers p
    ON t.pub_id=p.pub_id
    GO


    存储过程管理
    查看存储过程文本信息
    sp_helptext author_information

    修改存储过程的名字
    sp_rename author_information,authors_information

    存储过程执行
    EXECUTE procedure_name

    删除存储过程
    DROP procedure procedure_name


    修改存储过程
    同Create


    通过存储过程传递参数

    USE pubs
    GO
    IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'titles_sum' AND type='p')
    DROP PROCEDURE titles_sum
    GO

    CREATE PROCEDURE titles_sum @TITLE varchar(40)='%',@sum money OUTPUT
    AS
    SELECT 'Title Name'=title
    FROM titles
    WHERE title LIKE @TITLE

    SELECT @SUM = SUM(price)
    FROM titles
    WHERE title LIKE @TITLE
    GO

  • Web 测试总结(1)

    navy2008 发布于 2010-07-29 16:17:41

      测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上。具有了这样的思想,就会找出更多的bug。(^_^个人认为,不代表官方立场)

      对于一个web网站来说,主要从这么几个大的方面来进行测试:

    1、 功能测试;2、 界面测试;3、 易用性测试;4、兼容性测试;5、 链接测试;6、 业务流程测试;7、 安全性测试

    下面主要从以上七个方面进行叙述:

     

    一、功能测试

    测试用例是测试的核心,测试用例的设计是一种思维方式的体现,在用例的设计中,用的比较多的方法是边界值分析法和等价类划分法,下面主要从输入框,搜索功能,添加、修改功能,删除功能,注册、登录功能以及上传图片功能等11个方面进行总结说明。

    1、输入框

    输入框是测试中最容易出现bug的地方,所以在测试时,一定要多加注意。

     

    控件类型

    大分类

    小分类

    检查内容

    输入框

    字符型输入框

    字符种类

    英文全角字符

    英文半角字符

    数字

    汉字

    空或空格

    特殊字符“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符,特别要注意单引号和&符号。

    禁止直接输入特殊字符时,使用“粘贴”、“拷贝”功能尝试输入,并测试能否正常提交保存。

    长度检查

    最小长度-1

    最小长度

    最大长度

    最大长度+1

    输入超长字符:比如把整篇word文档copy过去

    空格检查

    输入的字符间有空格

    字符前有空格

    字符后有空格

    字符前后都有空格

    多行文本框输入

    允许回车换行

    保存后再显示能够保持输入时的格式

    仅输入回车换行,检查能否正确保存;若能,查看保存结果。若不能,查看是否有正确提示

    安全性检查

    输入特殊字符串:nullNULL&nbspjavascript<script></script><title><html><td>

    输入脚本函数:<script>alter("abc")</script>document.write("abc")<b>hello</b>

    数值型输入框

    边界值

    最小值-1

    最小值

    最大值

    最大值+1

    位数

    最小位数+1

    最小位数

    最大位数

    最大位数+1

    输入超长值

    异常值、特殊值

    输入[空白(NULL)]、空格或‘“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符

    禁止直接输入特殊字符时,使用“粘贴”、“拷贝”功能尝试输入,并测试能否正常提交保存。

    word 中的特殊功能,通过剪贴板拷贝到输入框:分页符,分节符,类似公式的上下标等

    输入负整数、负小数、分数

    输入字母或汉字

    带符号的数值:带正号的正数,带负号的负数

    小数:小数点前零舍去的情况,如 .12;多个小数点的情况;0值:0.00..0

    首位为零的数值:如0102

    科学技术法是否支持:如  1.0E2

    全角数字和半角数字的情况

    数字与字母的混合:16进制数值,8进制数值

    货币型输入项:允许小数点后几位

    安全性检查同上

    不能直接输入,就copy

    日期型

    合法性检查

    日输入[0]

    日输入[1]

    日输入[32]

    月输入[135781012]、日输入[31]

    月输入[46911]、日输入[30]

    月输入[46911]、日输入[31]

    输入非闰年,月输入[2]、日输入[28]

    输入非闰年,月输入[2]、日输入[29]

    (闰年)月输入[2]、日输入[29]

    (闰年)月输入[2]、日输入[30]

    月输入[0]

    月输入[1]

    月输入[12]

    月输入[13]

    异常值、特殊值

    输入[空白(NULL)]或“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符

    安全性检查同上

     

     

     

    2、搜索功能

    1)比较长的名称是否能查到?

    2)空格 或空

    3)名称中含有特殊字符,如:' $ % & *以及空格等

    4)关键词前面或后面有空格

    5)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到

    6)输入系统中不存在与之匹配的条件

    7)两个查询条件是否为21,来回选择是否出现页面错误

    8)输入脚本语言,如:<script>alter(abc)</script>

     

    3、添加、修改功能

    1)是否支持tab

  • web应用程序测试方法和测试技术详述(转)

    peag 发布于 2010-04-25 22:52:42

     

    web应用程序测试方法和测试技术详述
    1. 概述
    l 随着web应用的增多,新的模式解决方案中以web为核心的应用也越来越多, 很多公司各种应用的架构都以B/S及web应用为主,但是有关WEB测试方面的内容并没有相应的总结,所以我在这里对web的测试方法和采用的测试技术进行总结,便于内部交流。
    l 测试方法尽量涵盖web程序的各个方面,测试技术方面在继承传统测试技术的技术上结合web应用的特点。
    l 相关的测试和实现技术也有着很大的关系,由于本公司使用J2EE体系,也许例子中只有JAVA平台可以使用,.NET平台测试技术暂时不涉及,如果你有请与我联系。
    2. 测试方法
    说明:测试方法的选择取决你的测试策略。
    l 一般的web测试和以往的应用程序的测试的侧重点不完全相同,基本包括以下几个方面。
    l 当然圆满的完成测试还要有好的团体和流程等的方方面面的支持,你同样应该对这些方面进行注意。
    l 有些测试方法设计到了流程,哪些应该在你的测试团队建设中建立。
    2.1 界面测试
    l 现在一般人都有使用浏览器浏览网页的经历,用户虽然不是专业人员但是对界面效果的印象是很重要的。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反界面对不懂技术的客户来说那相当关键,慢慢体会你会明白的。
    l 方法上可以根据设计文档,如果够专业的话可以专业美工人员,来确定整体风格页面风格,然后根据这个可以页面人员可以生成静态的HTML,CSS等甚至生成几套不用的方案来讨论,或者交给客户评审,最后形成统一的风格的页面/框架。注意不要靠程序员的美术素养形成你的web风格,那样可能会很糟糕。
    主要包括以下几个方面的内容:
    ? 站点地图和导航条 位置、是否合理、是否可以导航等内容布局 布局是否合理,滚动条等简介说明 说明文字是否合理,位置,是否正确
    ? 背景/色调 是否正确、美观,是否符合用户需求;
    ? 页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)表单样式 大小,格式,是否对提交数据进行验证(如果在页面部分进行验证的话)等
    ? 连接 连接的形式,位置,是否易于理解等
    l web测试的主要页面元素
    ? 页面元素的容错性列表(如输入框、时间列表或日历)
    ? 页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)
    ? 页面元素的容错性是否存在
    ? 页面元素的容错性是否正确
    ? 页面元素基本功能是否实现(如文字特效、动画特效、按钮、超连接)
    ? 页面元素的外形、摆放位置(如按钮、列表框、核选框、输入框、超连接等)
    ? 页面元素是否显示正确(主要针对文字、图形、签章)
    ? 元素是否显示(元素是否存在)
    页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)
    l 测试技术
    ? 通过页面走查,浏览确定使用的页面是否符合需求。可以结合兼容性测试对不用分辨率下页面显示效果,如果有影响应该交给设计人员提出解决方案。
    ? 可以结合数据定义文档查看表单项的内容,长度等信息。
    ? 对于动态生成的页面最好也能进行浏览查看。如Servelet部分可以结合编码规范,进行代码走查。是否支持中文,如果数据用XML封装要做的工作会多一点等等。
    l 界面测试要素:
    符合标准和规范,灵活性,正确性,直观性,舒适性,实用性,一致性
    l 1.直观性:
    ? 用户界面是否洁净,不唐突,不拥挤.界面不应该为用户制造障碍.所需功能或者期待的响应应该明显,并在预期出现的地方.
    ? 界面组织和布局合理吗?是否允许用户轻松地从一个功能转到另一个功能?下一步做什么明显吗?任何时刻都可以决定放弃或者退回,退出吗?输入得到承认了吗?菜单或者窗口是否深藏不露?
    ? 有多余功能吗?软件整体抑或局部是否做得太多?是否有太多特性把工作复杂化了?是否感到信息太庞杂?
    ? 如果其他所有努力失败,帮助系统真能帮忙吗?

    l 2.一致性
    ? 快速键和菜单选项.在Windows 中按F1键总是得到帮助信息
    ? 术语和命令.整个软件使用同样的术语吗?特性命名一致吗?例如,Find是否一直叫Find,而不是有时叫Search?
    ? 软件是否一直面向同一级别用户?带有花哨用户界面的趣味贺卡程序不应该显示泄露技术机密的错误提示信息.
    ? 按钮位置和等价的按键.大家是否注意到对话框有OK按钮和Cancle按钮时,OK按钮总是在上方或者左方,而Cancle按钮总是在下方或右方?同样原因,Cancle按钮的等价按键通常是Esc,而选中按钮的等价按钮通常是Enter.保持一致.

    l 3.灵活性
    ? 状态跳转.灵活的软件实现同一任务有多种选择方式.
    ? 状态终止和跳过,具有容错处理能力.
    ? 数据输入和输出.用户希望有多种方法输入数据和查看结果.例如,在写字板插入文字可用键盘输入,粘贴,从6种文件格式读入,作为对象插入,或者用鼠标从其他程序拖动.
    l 4.舒适性
    ? 恰当.软件外观和感觉应该与所做的工作和使用者相符.
    ? 错误处理.程序应该在用户执行严重错误的操作之前提出警告,并允许用户恢复由于错误操作导致丢失的数据.如大家认为undo /redo是当然的.
    ? 性能.快不见得是好事.要让用户看得清程序在做什么,它是有反应的.  

    2.2 功能测试
    l 对功能测试是测试中的重点
    主要包括一下几个方面的内容
    ? 连接 这个连接和界面测试中的连接不同那里注重的是连接方式和位置,如是图像还是文字放置的位置等,还是其他的方式。这里的连接注重功能。如是否有连接,连接的是否是说明的位置等。
    ? 表单提交 应当模拟用户提交,验证是否完成功能,如注册信息,要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。还有数据正确性验证,异常处理等,最好结合易用性要求等。B/S结构实现的功能可能主要的就在这里,提交数据,处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能,编写可重复使用的脚本代码,可以在测试、回归测试时运行以便减轻测试人员工作量。
    ? Cookies 验证 如果系统使用了cookie,测试人员需要对它们进行检测。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。关于cookie的使用可以参考浏览器的帮助信息。如果使用B/S结构cookies中存放的信息更多。功能易用性测试 完成了功能测试可以对应用性进行了解,最好听听客户的反映,在可以的情况下对程序进行改进是很有必要的,和客户保持互动对系统满意度也是很有帮助的。
    l 测试技术 功能测试的测试技术可是很多的,我们可以结合实际环境选择使用
    ? 白盒测试技术(White Box Testing) 深入到代码一级的测试,使用这种技术发现问题最早,效果也是最好的。该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,在JAVA平台使用Xunit系列工具进行测试,Xunit测试工具是类一级的测试工具对每一个类和该类的方法进行测试。
    ? 黑盒测试技术(Black Box Testing)黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,根据软件需求,设计文档,模拟客户场景随系统进行实际的测试,这种测试技术是使用最多的测试技术涵盖了测试的方方面面,可以考虑以下方面
    ?? 正确性 (Correctness):计算结果,命名等方面
    ?? 可用性 (Usability):是否可以满足软件的需求说明。
    ?? 边界条件 (Boundary Condition)输入部分的边界值,就是使用一般书中说的等价类划分,试试最大最小和非法数据等等.
    ?? 性能 (Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着
    程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题
    ?? 压力测试 (Stress) 多用户情况 可以考虑使用压力测试工具,建议将压力和性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况,如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以).这里的压力测试针对的是某几项功能,.
    ?? 错误恢复 (Error Recovery) 错误处理,页面数据验证,包括突然间断电,输入脏数据等.
    安全性测试(Security)这个领域正在研究中,不过防火墙,补丁包.杀毒软件等的就不必说了,不过可以考虑破坏性测试时任意.看了一些资料后得知,这里面设计到的知识\内容可以写本书了,不是一两句可以说清的,特别是一些商务网站,或者跟钱有关,或者和公司秘密有关的web更是,需要这方面的测试,在外国有一种专门干这一行的人叫安全顾问,可以审核代码,提出安全建议,出现紧急事件是的处理办法等,在国内没有听说哪里有专门搞安全技术测试的内容.
    ?? 兼容性 (Compatibility) 不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式,如果你测试的是一个公共网站的话.
    l 兼容性测试内容详述
    ? 硬件平台
    ? 浏览器软件和版本:浏览器插件,浏览器选项,视频分辨率和色深.文字大小,调制解调器速率.
    ?? 软件配置 (Configuration) 如IE浏览器的不用选项-安全设定最高,禁用脚本程序,等等,你们的程序在各种不用的设置下表现如何.
    单元测试技术(Unit Test):
    2.2.1 下面是对白盒测试和单元测试的区别的论述:
    l 单元测试和白盒测试是不同的,虽然单元测试和白盒测试都是关注功能虽然他们都需要代码支持,但是级别不同,白盒测试关注的是类中一个方法的功能是更小的单位,但是完成一个单元测试可能需要N多类,所以说作单元测试需要什么写驱动和稳定桩,比如查询单元是一个查询包包N多的测试类,测试数据,运行他需要提供数据的部分,输入参数和发出命令的驱动等等.是比类大的一个整体进行的.
    l 另一个明显的区别是白盒测试不会关注类接口,但是单元测试主要的内容就是类接口测试.
    l 不过很多时候是很少区分的,因为这两种技术实现起来有很多相互关联的部分.不过要看你对质量的关注程度来决定.
    2.2.2 功能测试边界测试\越界测试技术详述
    ? 边界条件
    边界条件是指软件计划的操作界限所在的边缘条件.
    如果软件测试问题包含确定的边界,那么数据类型可能是:
    数值 速度 字符 地址 位置 尺寸 数量
    同时,考虑这些类型的下述特征:
    第一个/最后一个 最小值/最大值
    开始/完成 超过/在内
    空/满 最短/最长
    最慢/最快 最早/最迟
    最大/最小 最高/最低
    相邻/最远
    ? 越界测试
    通常是简单加1或者很小的数(对于最大值)和减少1或者很小的数(对于最小值),例如:
    第一个减1/最后一个加1
    开始减1/完成加1
    空了再减/满了再加
    慢上加慢/快上加快
    最大数加1/最小数减1
    最小值减1/最大值加1
    刚好超过/刚好在内
    短了再短/长了再长
    早了更早/晚了更晚
    最高加1/最低减1
    l 另一些该注意的输入:默认,空白,空值,零值和无;非法,错误,不正确和垃圾数据.
    2.2.3 状态测试技术

    ? 软件可能进入的每一种独立状态;
    ? 从一种状态转入另一种状态所需的输入和条件;
    ? 进入或退出某种状态时的设置条件及输入结果.

    l 具体测试方法可以参考如下:
    ? 每种状态至少访问一次;
    ? 测试看起来最常见最普遍的状态转换;
    ? 测试状态之间最不常用的分支
    ? 测试所有错误状态及其返回值
    ? 测试随机状态转换
    2.2.4 竞争条件测试技术
    l 竞争条件典型情形参考如下:
    ? 两个不同的程序同时保存或打开同一个文档
    ? 共享同一台打印机,通信端口或者其他外围设备
    ? 当软件处于读取或者修改状态时按键或者单击鼠标
    ? 同时关闭或者启动软件的多个实例
    ? 同时使用不同的程序访问一个共同数据库
    2.3 负载\压力测试(StressTest)
    l 在这里的负载\压力和功能测试中的不同,他是系统测试的内容,是基本功能已经通过后进行的.可以在集成测试阶段,亦可以在系统测试阶段进行.
    l 使用负载测试工具进行,虚拟一定数量的用户看一看系统的表现,是否满足定义中的指标.
    l 负载测试一般使用工具完成,loadrunner,webload,was,ewl,e-test等,主要的内容都是编写出测试脚本,脚本中一般包括用户一般常用的功能,然后运行,得出报告。所以负载测试包括的主要内容就不介绍了。
    l 负载测试技术 在各种极限情况下对产品进行测试 (如很多人同时使用该软件,或者反复运行该软件),以检查产品的长期稳定性。例如,使用压力测试工具对web服务器进行压力测试. 本项测试可以帮助找到一些大型的问题,如死机、崩损、内存泄漏等,因为有些存在内存泄漏问题的程序,在运行一两次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑。用J2EE实现的系统很少但是并不是没有内存问题.
    ? 无论什么工具基本的技术都是利用线程技术模仿和虚拟用户,在这里主要的难点在与测试脚本的编写,每种工具使用的脚本都不一样,但是大多数工具都提供录制功能就算是不会编码的测试人员同样可以测试。
    ? 对负载工具的延伸使用可以进行系统稳定性测试,系统极限测试,如使用100的Load Size连续使用24小时,微软定义的通过准则是通过72小时测试的程序一般不会出现稳定性的问题。
    2.4 回归测试 (Regression Test)
    l 过一段时间以后,再回过头来对以前修复过的Bug重新进行测试,看该Bug 是否会重新出现。
    ? 回归测试技术 可以在测试的各个阶段出现,无论是单元测试还是集成测试还是系统测试。是对以前问题进行验证的过程。
    ? 回归测试的目的就是保证以前已经修复的Bug不会再出现。实际上,许多Bug都是在回归测试时发现的,在此阶段,我们首先要检查以前找到的Bug 是否已经更正了。值得注意的是,已经更正的Bug 也可能又回来了,有的Bug 经过修改之后可能又产生了新的Bug。所以,回归测试可保证已更正的Bug不再重现,不产生新的Bug。
    2.5 Alpha 和Beta 测试 (Alpha and Beta Test):
    l 在正式发布产品之前往往要先发布一些测试版,让用户能够反馈出相关信息,或者找到存在的Bug,以便在正式版中得到解决。
    l 特别是在有客户参加的情况下,对系统进行测试可能会出现一些我们没有考虑的情况,还可以解决一些客户实际关心的问题

    不同的测试技术区分
    3.1 覆盖测试技术
    说明:测试覆盖率可以看出测试的完成度,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。
    l 覆盖测试可以是程序代码的执行路径覆盖,亦可以是功能实现的步骤覆盖(可以理解成流程图的路径覆盖)。
    l 该技术可以用在任何测试阶段,包括单元测坏死、集成测试、系统测试。
    l 使用该技术时可以使用以上的任何测试方法和测试技术。
    3.2 白盒测试和黑盒测试技术
    l 白盒测试技术 (White Box Testing)该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,使用Xunit系列工具进行测试,可以包括很多方面如功能性能等。
    l 黑盒测试 (Black Box Testing)测试的主体部分黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,包括的不同测试类型请参考以上内容。
    3.3 手工测试和自动化测试
    l 手工测试 (Manual Testing):即依靠人力来查找Bug。方法可以参考上边的测试,也可以根据对实现技术及经验等进行不同的测试。
    l 自动测试 (Automation Testing)使用有针对工具实行。可以作出自动化测试的计划,对可以进行自动化测试的部分编写或者录制相应的脚本,可以加入功能,容错,表单提交等,可以参考MI,Rational或者其他类测试工具说明.
    l 根据权威的软件测试经验,手工测试还是主要的测试方法,自动测试不够灵活,在这里不再详述。微软的测试过程80%还是手工完成。
    l 自动测试永远也代替不了手工测试,但是手工测试的工作量很大是不争的事实。
    3.4 根据RUP标准按阶段区分测试
    l 单元测试 在上边有详细的叙述,还有针对单元测试和集成测试的论述,请参考。
    l 集成测试 分为功能集成测试和系统集成测试,相互有调用的功能集成,在系统环境下功能相互调用的影响等,使用方法可以任意选用上面的内容。注重功能方面。
    l 系统测试 在功能实现的基础上,可以加入兼容性,易用性,性能等等
    l 验收测试 可以包括Alpha和Beta测试,在这里就不再详述。
    4. 存在风险及解决方法
    说明:测试不能找出所有的问题,只是尽量将问题在开发阶段解决大多数的问题而已。
    测试风险如下:
    l 软硬件的测试环境提供上也对测试结果有很大的影响。
    l 测试团队的水平,经验,合作效果等
    l 整个开发流程对测试的重视程度,测试的进入时间等
    l 由于测试环境操作系统,网络环境,带宽等情况可能产生的测试结果可能不同这是就需要经验以及对测试环境的保护等方面下一些功夫。
    5. 软件缺陷的原则
    l 软件缺陷区别于软件bug,它是在测试过程中出现的对系统有影响的,但是在设计中没有的或者对修改后的bug测试和开发人员有不同意见
    ? 软件未达到产品说明书标明的功能。
    ? 软件出现了产品说明书指明不会出现的错误。
    ? 软件功能超出产品说明书指明范围。
    ? 软件未达到产品说明书虽未指出但应达到的目标。
    ? 软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。
    6. 文档测试
    l 产品说明书属性检查清单
    ? 完整.是否有遗漏和丢失?完全吗?单独使用是否包含全部内容?
    ? 准确.既定解决方案正确吗?目标明确吗?有没有错误?
    ? 精确,不含糊,清晰.描述是否一清二楚?还是自说自话?容易看懂和理解吗?
    ? 一致.产品功能能描述是否自相矛盾,与其他功能有没有冲突?
    ? 贴切.描述功能的陈述是否必要?有没有多余信息?功能是否原来的客户要求?
    ? 合理.在特定的预算和进度下,以现有人力,物力和资源能否实现?
    ? 代码无关.是否坚持定义产品,而不是定义其所信赖的软件设计,架构和代码?
    ? 可测试性.特性能否测试?测试员建立验证操作的测试程序是否提供足够的信息?

    l 产品说明书用语检查清单
    说明 对问题的描述通常表现为粉饰没有仔细考虑的功能----可归结于前文所述的属性.从产品说明书上找出这样的用语,仔细审视它们在文中是怎样使用的.产品说明书可能会为其掩饰和开脱,也可能含糊其词----无论是哪一种情况都可视为软件缺陷.
    ? 总是,每一种,所有,没有,从不.如果看到此类绝对或肯定的,切实认定的叙述,软件测试员就可以着手设计针锋相对的案例.
    ? 当然,因此,明显,显然,必然.这些话意图诱使接受假定情况.不要中了圈套.
    ? 某些,有时,常常,通常,惯常,经常,大多,几乎.这些话太过模糊."有时"发生作用的功能无法测试.
    ? 等等,诸如此类,依此类推.以这样的词结束的功能清单无法测试.功能清单要绝对或者解释明确,以免让人迷惑,不知如何推论.
    ? 良好,迅速,廉价,高效,小,稳定.这些是不确定的说法,不可测试.如果在产品说明书中出现,就必须进一步指明含义.
    ? 已处理,已拒绝,已忽略,已消除.这些廉洁可能会隐藏大量需要说明的功能.
    ? 如果...那么...(没有否则).找出有"如果...那么..."而缺少配套的"否则"结构的陈述.想一想"如果"没有发生会怎样.
  • 吐血之作,面试与招聘经验总结之一,面试篇

    allenzgw 发布于 2010-02-21 11:21:57Digest 3

      新年第一天到公司,没啥事情,把之前写的一篇文章写完,发布出来,比较长哦,其实还有好多东西没写,人都是比较懒啦,总之希望能给大家一些帮助吧:)

    ==============

      已经不准备在这里待下去了,所以动作多了一些,这两个月认识了不少猎头,也面试了不少公司,给自己稍微总结一下,尽管自己面试过的人也有几百个了,自己这段时间被面也有点新的收获,呵呵,希望从interviewer + interviewee两方面讲讲,也能给后来的朋友一些帮助

      首先,我们要搞清楚自己到底想去怎样的企业,是外企(美国,欧洲,印度),还是内企(民企或者国企),是搞外包的,还是有自己的产品的,是大型的企业(Top 500),还是发展潜力比较好的?一句话,搞清楚自己到底想要什么。是发展前途,还是“钱”!从HR或者interviewer的角度看,明确自己目标的人,比较受欢迎。我面试过程中,遇到好几个HR,在英文面试的时候,都会让我用英语讲一下自己的Career Plan,而英语表达,我觉得最重要的是言之有物,就是观点一定要明确,这样说的时候,别人也容易听懂,自己也容易表达。用英语表达很细腻含糊的概念是很困难的(起码对我来说是这样),而且对方的HR如果是中国人也不一定能听懂,呵呵。所以这边的意思你要有了相当清晰的认识,才容易表达自己,无论英语还是中文。

      第二,精心修改简历。这个过程,其实是个漫长的过程,每个月,或者每当自己有所新的大的认识提高就可以更新一次简历。其实人需要经常对自己的工作做一些体悟,感悟,最好能将工作和生活中的某些事情能够从本质上统一起来,因为本身世界上道理都是相通的。自己在写简历的时候,要一边修改,一边想,面试者可能会针对你这个简历问什么样的问题,你需要用实际工作中的怎样一个具体的例子来解释这个事情。然后,同时如果有相关的感悟,这时候,在面试的时候,就可以把感悟说出来,这样,会令面试官知道你不是死学,而是活学活用,企业很喜欢这样的人。如果你认识的非常深刻,则会给面试官相当不错的印象的,因为面试官他自己可能都没你认识的深刻,呵呵!所以说,修改简历,不仅仅是改文字,而且是准备好自己的思想和语言。

      第四,面试!第一关,一般是HR,或者猎头先跟你联系,他们目的是要把握基本的个人信息的完整性和正确性,还有个人素质的感觉。会问一些你的情况,是否真的想要换工作,为什么要换工资,然后你的技能跟他们的岗位是否匹配啊之类的信息。这时候,我个人觉得,两方面,我比较喜欢实话实说,不要说谎,做个诚实的人,心理坦荡,有底气。但是,如果你决定要说谎的话,请不要让对方拆穿你的谎言。其实我以前面试别人的时候,看到过不少人撒谎哦,虽然没拆穿,但是,对这个人印象就不好了。比如,一个家伙他没有任何测试经验,但我感觉他基础还行,准备要他,然后,他说他对测试真的非常感兴趣。我就问他,你既然说你很感兴趣,你看过什么测试方面的书么?他有点支支吾吾,我又问你做过测试方面的什么试验么?他更是支支吾吾。这样搞得就很囧了。

      对于HR,一般好公司,HR都会问一下你的薪资需求,因为,如果你的要求太高,人家满足不了,也就不用安排后面的面试了。对于自己目前的薪资情况,也没必要撒谎,因为可能到时候要提供自己目前的工资证明的。所以,这时候,对自己要求的薪资应该有个明确的需求,没必要含含糊糊的。不过,我这次就遇到过一个本地的企业,号称是美国的企业,HR水平比较菜,不管三七二十一,就让我过去面试,我都怀疑他们给不起薪水,然后还是决定去了,想练习一下自己么,结果过去一看,压根就是差距很远,只不过是个华人开的,而且管理各方面也都很国企的感觉,面试管的素质也很差。哎,真的浪费时间。

      第五,面试,第二关,这里说的是一般的情况下的第二关面试,因为我面试过一个top500,他们第二关是英语面试,还有一般的技术了解,然后第三关才是真正的技术面试。我们这里第二关就算是技术面试吧,一般情况下,这个技术面试,是比较简单的,大致的了解,比如linux, DB,之类的都会问到,以确保你知识的全面性。这个只要自己平时有所准备,面试之前稍微总结一下就好了。

      第六,面试,第三关,一般,这个面试,也是技术面试,更加专业一点的,专门针对他们的技术需求的,比如就是搞自动化的,或者性能测试的。这个有一定难度。这个过程我觉得,最重要的一点就是,保持思路清晰,不要东拉西扯,或者不懂装懂(如果你要装懂,你就要确保别人不会发现你是装懂)。这个专业性的东西,自己之前一定要有自己的一套思路,比如,如果是搞性能的,最好能有自己的一套体系和方法,然后,在这里侃侃而谈,呵呵。如果这个面试也是英文的话,在面试之前,需要好好看看相关概念的英文描述,要不然到时候,可能有些语言不好表达。

      第七,面试,第四关,如果上面技术面试都没问题了,后面,可能会遇到一个manager,主要跟你谈一下公司的情况,或者以后需要的工作,了解一下,两个人的合作方式啊之类的。呵呵,这个面试,可以说重要,也可以说不重要,如果面的好,你可以,一下子就把你未来的领导搞定。如果面试的不好,搞不好你就没机会了,其中滋味,进公司就知道了哦。

      总结:上面啰嗦了好多,下面罗列几个面试重点问题和分析:

    1 简单的谈一下自己。 观察应试者的语言是否流畅、有条理、层次分明,讲话的风度如何。
    2 请你告诉我你的一次失败经历。 如果能迅速作答,则应试者反应灵敏,或可能是应试者善于总结教训。
    3 你有什么优点和缺点。 应试者对自己的判断是否中肯,自信、自卑和自傲倾向如何。
    4 请讲述一次让你很感动的经历。 考察应试者是否有感性。

      其实这些问题,一般都是问刚毕业的年轻人的,工作过几年之后,基本上就不会问这么傻乎乎的问题了,呵呵。一般会问些下面的问题:

    1 请谈谈你在选择工作时都考虑哪些因素? 同时可判断对方的分析能力和自知力
    2 说一下你的工作经历, 了解技术背景,还有能力
    3 你为什么离开前面几个公司? 看看是否稳定工作,是否有明确的职业规划

      最后说一点,无论是否被录用,都不能让所有的面试管都对你不满意,最起码要有几个人能感觉你这个家伙还不错,只是某方面稍微有点缺憾,或者说不适合自己公司,这才能说明,你的面试基本上是成功的,要不然,真的算是失败了。我面试了几个公司,最后因为各种愿意,放弃了,但是,人家HR还是觉得跟我聊的很愉快,甚至会问,如果以后再有其他岗位机会,能否继续再合作(也许有虚假成分,呵呵),不过,很多HR根本可以不跟你说这个话,也许可以说,基本上对你这个人的素质还是认可的。你也容易从中找到自己需要改进的地方。

      关于面试的东西,太多了,先总结这么多吧。

  • SQL语法(一)

    kaku21 发布于 2010-04-02 09:55:24

    SQL DML 和 DDL

    可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

    SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

    查询和更新指令构成了 SQL 的 DML 部分:

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据

    SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

    SQL 中最重要的 DDL 语句:

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引

     

    SQL SELECT DISTINCT 语句

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。

    关键词 DISTINCT 用于返回唯一不同的值。

    SELECT DISTINCT Company FROM Orders

     

    Update 语句

    Update 语句用于修改表中的数据。

    UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
    WHERE LastName = 'Wilson'

     

    DELETE 语句

    DELETE 语句用于删除表中的行。

    DELETE FROM Person WHERE LastName = 'Wilson'

    DELETE FROM table_name

     

    TOP 子句

    TOP 子句用于规定要返回的记录的数目。

    对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

    注释:并非所有的数据库系统都支持 TOP 子句。

    SELECT TOP 2 * FROM Persons

    SELECT TOP 50 PERCENT * FROM Persons

     

    LIKE 操作符

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

    SELECT * FROM Persons WHERE City LIKE 'N%'

    SELECT * FROM Persons WHERE City NOT LIKE '%lon%'

     

    SQL 通配符

    在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。

    SQL 通配符必须与 LIKE 运算符一起使用。

    在 SQL 中,可使用以下通配符:

    通配符 描述
    % 替代一个或多个字符
    _ 仅替代一个字符
    [charlist] 字符列中的任何单一字符

    [^charlist]

    或者

    [!charlist]

    不在字符列中的任何单一字符

     

    SELECT * FROM Persons WHERE City LIKE '%lond%'

    SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

    选取居住的城市以 "A" 或 "L" 或 "N" 开头的人

    SELECT * FROM Persons WHERE City LIKE '[ALN]%'

    不以 "A" 或 "L" 或 "N" 开头的人

    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

     

    IN 操作符

    IN 操作符允许我们在 WHERE 子句中规定多个值。

    SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

     

    SQL Alias

    通过使用 SQL,可以为列名称和表名称指定别名(Alias)。

    SELECT po.OrderID, p.LastName, p.FirstName
    FROM Persons AS p, Product_Orders AS po
    WHERE p.LastName='Adams'
    WHERE p.FirstName='John'

    使用一个列名别名

    SELECT LastName AS Family, FirstName AS Name
    FROM Persons

     

    SQL JOIN

    除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以其他几种连接。

    下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P = Orders.Id_P
    ORDER BY Persons.LastName

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    RIGHT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

  • 开放源代码软件测试工具介绍(转)

    godn_1981 发布于 2008-06-30 23:26:08

    目前市场主流的测试工具和管理软件,如Rational和Mercury的系列产品,大多比较昂贵。(godn_1981批注:并且更可恶的是对中文字体支持的都不太好) 商业软件的优势主要表现在其售后服务和工具本身的强大和易用性上,而作为技术基础相对较好的测试人员,也可考虑使用开源的软件,这将为公司节省一大笔开支,必要时也有更好的扩展自由度。

    (一)开源测试工具——功能测试工具

    Linux Test Project
    http://ltp.sourceforge.net/
    工具描述:
    Linux Test Project是一个测试Linux内核和内核相关特性的工具集合。该工具的目的是通过把测试自动化引入到Linux内核测试,提高Linux的内核质量。
    使用环境: Linux

    MaxQ
    http://maxq.tigris.org/
    工具描述:
    MaxQ是一个免费的功能测试工具。它包括一个HTTP代理工具,可以录制测试脚本,并提供回放测试过程的命令行工具。测试结果的统计图表类似于商用测试工具,比如Astra QuickTest和Empirix e-Test,这些商用工具都很昂贵。MaxQ希望能够提供一些关键的功能,比如HTTP测试录制回放功能,并支持脚本。
    使用环境:
    Java 1.2以上版本

    WebInject
    http://www.webinject.org/
    工具描述:
    WebInject是一个针对Web应用程序和服务的免费测试工具。 它可以通过HTTP接口测试任意一个单独的系统组件。可以作为测试框架管理功能自动化测试和回归自动化测试的测试套。

    使用环境:
    Windows, OS Independent, Linux

    (二)开源测试工具——性能测试工具

    Apache JMeter
    http://jakarta.apache.org/jmeter/
    工具描述:
    Apache JMeter是100%的Java桌面应用程序,它被设计用来加载被测试软件功能特性、度量被测试软件的性能。设计Jmeter的初衷是测试Web应用,后来又扩充了其它的功能。Jmeter可以完成针对静态资源和动态资源(讹误女监, Servlets, Perl脚本, Java对象, 数据查询s, FTP服务等)的性能测试。Jmeter可以模拟大量的服务器负载、网络负载、软件对象负载,通过不同的加载类型全面测试软件的性能。Jmeter提供图形化的性能分析。

    使用环境:
    Solaris, Linux, Windows (98, NT, 2000). JDK1.4以上.


    DBMonster
    http://dbmonster.kernelpanic.pl/

    工具描述:
    DBMonster是一个生成随机数据,用来测试SQL数据库的压力测试工具。

    使用环境: OS Independent

    OpenSTA (Open System Testing Architecture)
    http://portal.opensta.org/index.php

    (godn_1981批注:不过我当年曾用同样的环境,同样的程序,用OpenSTA和LR测试出来的性能结果差距很大,不知道谁会更准一点,可能LR吧)

    工具描述:

    基于CORBA的分布式软件测试构架。使用OpenSTA,测试人员可以模拟大量的虚拟用户。 OpenSTA的结果分析包括虚拟用户响应时间、web服务器的资源使用情况、数据库服务器的使用情况,可以精确的度量负载测试的结果。
    使用环境:OS Independent

    TPTEST
    http://tptest.sourceforge.net/about.php
    工具描述:

    TPTest的提供测试Internet连接速度的简单方法。

    使用环境:

    MacOS/Carbon、 Win32

    Web Application Load Simulator
    http://www.openware.org/loadsim/index.html

    工具描述:
    LoadSim是一个网络应用程序的负载模拟器。
    使用环境:

    JDK 1.3以上

    (三)开源测试工具——缺陷管理工具

    Mantis
    http://mantisbt.sourceforge.net/

    (godn_1981批注:强力推荐,非常好用,个人觉得从纯bug管理来说,比Td好用)

    工具描述:

    Mantis是一款基于WEB的软件缺陷管理工具,配置和使用都很简单,适合中小型软件开发团队,关于Mantis的介绍文章参见51testing软件测试网顾问蔡琰的文章 《使用开源软件 Mantis 实施缺陷跟踪的成功实践》

    使用环境: MySQL, PHP

    Bugzilla
    http://www.mozilla.org/projects/bugzilla/
    工具描述:
    一款不错的软件缺陷管理工具。
    TBC

    (四)开源测试工具——测试管理工具
    TestLink
    http://testlink.sourceforge.net/docs/testLink.php
    工具描述:
    基于WEB的测试管理和执行系统。测试小组在系统中可以创建、管理、执行、跟踪测试用例,并且提供在测试计划中安排测试用例的方法。
    使用环境: Apache, MySQL, PHP

    Bugzilla Test Runner
    http://sourceforge.net/projects/testrunner/
    工具描述:
    Bugzilla Test Runner基于Bugzilla缺陷管理系统的测试用例管理系统。
    使用环境:
    Bugzilla 2.16.3 or above

  • 常用软件缺陷预防技术和缺陷分析技术有哪些?

    godn_1981 发布于 2008-06-19 23:34:27

    本周51testing有zhuzx问到这个问题,这个问题问的真是很帅很高深。我想这样的问题是没有标准答案的,各自按照自己的经验和实践来给出自己的看法,在此我也聊聊我的看法,仅一家之言,欢迎讨论。

    说到软件缺陷预防技术吧,其实什么是缺陷预防,就是说能把缺陷消灭在萌芽状态,就是能在缺陷还没产生出来就已经被扼杀了,这也是软件测试者所追求的最高境界。一般的软件测试属于后来弥补型,产生bug之后再来修改,但是bug发现越晚,修改掉花的代价就越大,所以软件缺陷预防技术就是项目生命周期的早期消灭bug。

    一般常用的缺陷预防有几个阶段,需求阶段,设计阶段,编码阶段。

    第一,在需求阶段,最重要的事情是需求验证。一般验证的几个大项是,功能是否完整,是否考虑性能,有没有模糊需求,有没有考虑安全性,有没有冗余和错误的需求,需求是不是过于苛刻,需求是不是矛盾等方面。一般常用的方法是列出需求检查表,并进一步执行需求/测试 矩阵。

    第二,设计阶段,这个阶段主要通过技术评审测试逻辑设计。常用比较规范的作法是建立过程/数据矩阵,也就是CRUD矩阵,把过程影射到实体,把整个程序的数据的生命周期(建立,更新,读取,删除)反映出来。

    第三,编码阶段,这个阶段预防措施主要有统一编码规范,代码评审,单元测试。统一代码规范一般是开发经理统一要求,代码评审则是互相评审或者开发leader进行评审,最后最重要的则是单元测试,就是一般说的白盒测试。

    再来说缺陷分析吧,很多很高深的分析技术也不很实用,我只介绍一点常用的分析方法。

    1.模块的缺陷分布,一般用柱状图或饼状图,就是每一个功能模块发现bug的比例,发现bug最多的模块证明在发布以后需要更多的维护。

    另外,历史数据可以参照,譬如上一个版本在哪个模块发现的bug比例对这个版本就是一个参考。如果,某个模块发现bug的比例比上个版本大幅下降,则很可能说明该模块还需要更多测试。

    2.缺陷的起因分布,一般用柱状图或饼状图,一般可分为架构缺陷、功能缺陷、易用性缺陷、性能缺陷、安全性缺陷、界面文字缺陷。一般如果架构缺陷占的比例较大,则说明设计有很大问题。

    3.按照不同发现人员的缺陷分布,一般用柱状图或饼状图,一般分为测试人员发现,开发人员发现,beta测试发现,外部客户发现。如果测试人员发现的bug低于某个比例,证明质量保证测试不足。

    4.按照不同方式的缺陷分布 ,一般有需求审查,设计测试,代码走查,JAD,手工测试,自动化测试,白盒测试。一般来说,如果通过需求审查,设计测试,代码走查,JAD发现的bug比重很低则说明测试前期重视不够,另外,在手工测试和自动化测试之间的比例也能说明自动化测试的贡献度。

    5.缺陷差额分析,就是已经发现的和已经解决的曲线关系,以时间为横轴,两者越接近说明产品质量越高

    6.按照时间段的缺陷分布,一般用时间为横轴的曲线图表示,主要说明在哪个阶段发现的bug最多,对测试总结有指导意义

    7.Rayleigh分析,就是俗称的零缺陷追踪法,一般截至某个时间点发现的缺陷总数和时间有一个函数关系(一个复杂的数学函数),一般用这个函数来推测经过多少天测试之后软件中大概还有多少个bug,以及交付到用户手中之后大概还能出现多少个bug。不过由于本人严重怀疑该方法的实用性,我还没用过。

    一不小心,罗罗嗦嗦这么多,希望对大家有帮助,哪怕是一点点,也希望大家多探讨探讨。

     

  • 如何编写有效的测试报告?

    godn_1981 发布于 2008-07-03 23:28:21

    看到有人提到这个问题,就来凑凑热闹,结合实践谈谈我的看法。

    既然是说到如何编写有效的测试报告,那么我的重点就是在于有效,而不是一般的洋洋洒洒几千字的非常八股文的测试报告,有时候怎么说呢,唉,生在中国就不得不搞一些形象工程,所以,一说到报告大家的概念好像就必须是洋洋洒洒罗罗嗦嗦繁冗复杂的数千字……不过,我在这里不想谈那个“政绩报告”。偶是一个非常实用主义者。

    废话少说,我们要说的是如何做有效的测试报告。

    既然说到有效,我觉得要有两个特点:完整和实用,突出重点。引用一句广告词就是说“简约而不简单”,就是说要完整但又不说废话,能肥则肥,能瘦则瘦,重点部分要突出,要细说,非重点部分,一笔带过,只是为了保证一个文档的完整性。

    说到一个测试报告,是对测试的过程和结果的汇总描述,所以其核心内容是两个,一个是测试结果的汇总报告,一个是测试过程的汇总总结,前者是针对所测软件本身,是给所测软件一个客观真实的评价;后者则是针对过程改进,回顾测试流程中存在的不足,加以总结改进。除了这两项核心内容之外,其他的内容都是次要的,但是为了保持文档的美观性和周全性,其他各部分还是要写写的。

    具体说一般一个测试报告有如下部分构成,下面一一细说。(下面也是我在我们公司执行的模板)

    1.引言

    这个不用多说了,一般包括编写目的,项目背景介绍,参考资料等等,该项基本可以随便写写。(只是为了保持文档的完整性)

    2.测试用例设计

    对用例设计做一个简单的描述,包括测试范围阿,测试目标阿,测试重点阿等。该项基本可以随便写写。(只是为了保持文档的完整性)

    3.测试环境

    主要描述测试所用环境,包括硬件环境和软件环境,服务端和客户端。该项比较重要。

    4.测试方法

    主要描述测试过程中自己用到什么测试方法,白盒还是黑盒,哪些部分用了自动化,用多少。该项比较重要。

    6.测试时间安排(执行情况)

    主要描述测试过程,每个时间段都做了什么事情。该项必不可少。

    7.缺陷汇总及分析

    7.1缺陷总结

    一般按照严重程度,功能模块进行划分。能画图就画个图吧,直观一点。该项很重要,绝不可少。

    7.2缺陷分析

    通过上面7.1的总结,对bug进行分析。这项是测试报告的核心所在,一般有缺陷功能模块分析,缺陷类型分析和缺陷发现阶段分析,具体更多方法参见我的另一篇博文:http://www.51testing.com/?1592/action_viewspace_itemid_85427.html  该项很重要,绝不可少。

    7.3遗留问题

    目前软件残存的已知问题。有些是解决不掉的问题。该项很重要,绝不可少。

    7.4测试结论

    基于以上分析,给被测软件一个全面客观真实的结论,功能如何,性能如何,稳定性,安全性等等给出一个评价。该项最重要,绝不可少。

    8.测试过程改进

    对整个测试活动进行一个总结,有哪些得失,测试方法和流程需要哪些改进,测试过程中暴露出哪些问题,有哪些好的地方值得发扬等等。该项很重要,绝不可少。

    9.附录

    一般附上缺陷列表以及执行过的测试用例地址等。该项基本可以随便写写。(只是为了保持文档的完整性)

    上面这个只是我个人比较常用的模板,仅供参考。我觉得写文档要有模板,但模板只限于统一规范和格式(一般公司内部的文档要统一规范,要不大家各写各的就乱了),模板还有一个好处是引导思路,但是写文档不要拘泥于模板,还是要根据自己的需要,实用一点。

    最后,啰嗦一句,其实测试总结报告不是仅仅为了应付测试经理或者领导,任何事情好好去做了就又是一回事,我觉得作为一个测试人员,静下心来对自己几个月的测试工作有一个深入的总结,也能够使经验得到积累,意识得到升华,何乐而不为呢?不能抱着应付的态度,总结是提高自己的必经之路。

    这就是如何才“有效”!

     

  • 安全测试版资料汇总

    ttkk 发布于 2009-03-30 11:45:47

     


    1.Rational AppScan Enterprise Edition 7.7.654安装程序下载
    http://bbs.51testing.com/thread-137577-1-1.html

    2.安全性测试方法
    http://bbs.51testing.com/thread-63812-1-1.html

    3.系统安全性测试总结
    http://bbs.51testing.com/thread-120076-1-1.html

    4.入侵的艺术(安全测试)
    http://bbs.51testing.com/thread-71327-1-1.html

    5.使用APPSCAN进行安全性检测总结
    http://bbs.51testing.com/thread-85970-1-1.html

    6.安全技术培训资料---安全标准
    http://bbs.51testing.com/thread-122993-1-1.html

    7.分享信息安全人员培训资料--安全技术
    http://bbs.51testing.com/thread-126102-1-1.html

    8.安全技术培训资料---系统网络与信息安全
    http://bbs.51testing.com/thread-123005-1-2.html

    9.安全性测试ppt,自己写的
    http://bbs.51testing.com/thread-113815-1-1.html

    10.WEB安全测试通常要考虑的测试点
    http://bbs.51testing.com/thread-112894-1-1.html

    11.SQL Server 系统检查流程
    http://bbs.51testing.com/thread-124025-1-2.html

    12.Oracle 安全检查流程
    http://bbs.51testing.com/thread-124024-1-2.html

    13.IIS系统检测流程
    http://bbs.51testing.com/thread-124023-1-2.html

    14.CISCO检查流程
    http://bbs.51testing.com/thread-124022-1-2.html

    15.应用系统安全检查流程
    http://bbs.51testing.com/thread-124021-1-2.html

    16.安全技术培训资料---cisco安全管理实例
    http://bbs.51testing.com/thread-123062-1-2.html

    17安全技术培训资料---系统网络与信息安全
    http://bbs.51testing.com/thread-123005-1-2.html

    18.举例说明对数据库防SQL注入
    http://bbs.51testing.com/thread-131908-1-2.html

    19.应用系统安全测试内容及方法
    http://bbs.51testing.com/thread-110657-1-6.html

    20.安全技术培训资料---unix系统安全管理
    http://bbs.51testing.com/thread-123024-1-5.html

    21.分享信息安全人员培训资料--安全技术
    http://bbs.51testing.com/thread-126102-1-1.html

    22.网络安全培训资料
    http://bbs.51testing.com/thread-85970-1-1.html
  • 测试人员容易遗漏一些隐藏的缺陷

    feer 发布于 2008-12-31 14:49:11

    看到了一篇WEB测试的,感觉还不错!所以就放在这里来,方便下次查看。

    测试人员容易遗漏一些隐藏的缺陷

      

    通常软件测试会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:

     

    1、安装缺陷

     

    通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试的时候,没有仔细的测试这一部分,而把用例集中在其他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。

     

    2、配置文件

     

    有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的黑客。所以,配置文件可能成为软件安全方面的一个缺陷。

     

    3、网页安全缺陷

     

    现在网站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。

     

    网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。

     

    4、判断顺序/逻辑缺陷

     

    对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如,一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。

     

    5、调试语句和冗余信息

     

    维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不必要的错误。

     

    同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。

     

    6、不可重现的故障

     

    新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。

     

    7、多节点的逆向流转缺陷

     

    当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。

     

    8、输入框缺陷

     

    试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。

     

    输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。

     

    9、界面布局缺陷

     

    曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。

     

    界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这些快捷方式和跳转顺序。

     

    10、版本和补丁包的环境问题

     

    理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨,怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。

     

    11、用户管理缺陷

     

    用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。

     

    另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。

     

    12、常识缺陷

     

    从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。

     

    尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。

  • 我的测试历程--写给测试新人

    feiyunkai 发布于 2008-12-31 15:23:10

    时间如指缝滑过的风,还没来得及察觉,就已流逝,不知不觉做测试工作一年多了,从没有项目经验到EM,从EM到HRS,从HRS到CRM,从CRM到CB...迷惘过,也失落过,但就在这迷惘与失落的同时,自己也在慢慢的成长……
        从ERP到软件测试:
        我以前一直过着与世无争的生活,只要能吃饱,就算天塌下来也无所谓,05年大学毕业做了一年多的ERP,包吃住2000一个月,工作很轻松,当时也很乐意做这样的工作(可那时我忽略了一件事:我,是男人)……时间如墙上的蜗牛,虽然爬的慢,可一刻都没停止过,再回头只能看到墙上的那道淡淡的白色“轨道”,某年某月(保密)与恋爱十一年的她分手了,坚贞的情感,最终抵挡不住金钱的诱惑,曾经自己的公主拜倒在别人的脚下
    没有痛,因为心已麻木,没有哭,因为在雨天,有人说泪水可以泡软人的脊梁,如果你甘愿堕落,我颓废了将近2个月,又有人说泪水可以让人变的坚强,如果你不向现实低头,只要有风吹过,泪水总有干的时候,渐渐的我开始思考,渐渐的开始发现,钱对男人是多么的重要,于是我辞职了,考察了很多行业以后,我选择了软件测试,因为它的前景,也因为自己的特性,于是我向测试迈出了第一步:参加测试培训,培训的过程除了听、记、问、实践以外也没什么可说的……
        对面试班驳的记忆
            第一次面试失败原因:1、学了后面忘了前面,没有及时回顾以前的知识2、紧张是最大的障碍,记得那次问的问题很简单,但是很多平时脱口而出的知识点,这时候却怎么也想不起来,主要问了以下几部分内容:OSI七层结构、白盒和黑盒测试有什么异同,编写用例有哪些方法,软件测试生命周期,软件开发模式有哪些,如何提交缺陷,Linux常用命令有哪些,SQL语句:增、删、改、查、创建视图、创建存储过程等,软件测试需要哪些素质,你以前工作还不错,
        现在为什么选择测试,你认为你做测试工作的优势是什么?总之问了很多,不过问题都不难
        失败后,我采取的对策;买了个可随身携带的小本子,花了一下午时间总结一下面试中问过的问题,晚上又到网上查了很多面试中可能问到的问题,一一记录下来,后来又花了2天时间把所有学习中的重要知识点记录下来,再后来的2天我出现在了秦淮河边,手里拿着那个小本子(后来送朋友了).....
            第二次面试:失败原因对待遇问题回答的失败:
        第一轮笔试,考的是开发的试卷C/C++,C占10% C++占60%,智力题30%,因为没学过C++,所以C++都是根着自己的推想答题的,C语言只有2题,一个选择题一个编程题(考了指针)智力题总共4题,比较简单都做对了,具体题目记不清了(面试结束回家等通知,回家的路上买了本C++从入门到精通)
        第二轮测试王经理面试:问了很多测试方面的问题,都是对答如流,但后来问了2个开发的问题,一个面向对象语言的,刚好看到过,回答上了,还有个是架构方面的,没回答上来,我说不好意思我不会(后来才知道,勇敢的承认自己不会要比乱回答好的多)面试的过程很愉快,面试结束后,王经理说,请稍等一下,人事部陈经理有些人事方面的问题要问一下
        第三轮人事陈经理面试:开始问了一些问题:这样做好测试,为什么选择测试行业,等等都回答的很好,最后聊到薪水的时候,陈经理问:假如我们公司录用你,你期望的月薪是多少?我说:作为一个测试新人来讲,测试经验对我来说很重要,薪水多少并不重要(犯了个巨大的错误)陈经理说:“薪水不重要,那公司不给薪水你也愿意做吗?怎么可能?”听到这句话,我知道自己失败了一半
        失败后,我采取的对策:记录下人事问的问题,修改了下对薪水问题的回答:测试经验的积累对于一个测试新人来讲无疑是最大的财富,但人要生存,又必需有经济收入,我期望的薪水就是经验财富与物质财富的平衡点:月薪***(回答的时候面带笑容,语速不能太快,最好能像和朋友聊天一样),当天又到网上查了很多面试陷阱
            第三次面试,成功的开始,成功原因对基本知识的掌握、自信、礼仪
        第一轮上机面试:参与面试的共六个人,公司直接给个系统,让我们开始测试,然后写份测试报告,时间2个小时
            这是我第一次接触真实项目的上机操作,紧张是难免的,但是很快就进入状态,首先看了下测试说明(缺陷提交规范),然后开始看需求文档,看完后,打开系统,打开需要测试模块的每个功能模块,粗略看下有哪些功能,然后进入了漫长的测试(没有用例,只能通过自己对系统的理解去测,再次说明需求理解对测试的重要性)房间里只剩下6个相对静止的人
            时间不因为我们的“静止”而静止,终于上机时间到了,把测试报告提交到指定文件夹下,当时测试说明中明确规定,以姓名_日期.TXT命名报告, 可打开文件夹,有WORD,有Execl,有的命名格式也不对
            上机结束了,大家自我感觉都很不错,当时我表现的并不好,找了23个BUG,第3,这时经理和我们讲,你们要是没什么疑问就先回去等消息吧,我把椅子还原到原来位子,因为是最后一个走,和经理说了声:**经理,谢谢您,再见,然后又和另外一位在办公室的员工说了声再见,然后随手把门轻轻的带上
            第三天,6个人中只有2个人接到电话面试通知,其中有一个是我
            又过了2天,电话面试开始了,有点紧张,但问的问题基本上都回答上来了,电话面试结束前,问了下,请问经理您贵姓,他说他姓王,我说谢谢您王经理,希望以后有机会向您学习测试经验(可以不失时机的表达一下自己对学习的渴望,语气要诚恳)
            又过了2天,接到经理打给我的电话,面试通过了,6个人只有一个通过
            成功经验:1、熟悉系统,不错发BUG,严格按要求做(当然公司有什么不合理的地方可以提建议)
                      2、礼仪、礼貌(一般比较正规的公司都会注意到这些细节)
                      3、学会总结,不要让自己在同一个地方跌倒
    下面总结一下测试新人,怎样快速找出系统的不足或缺陷
            1、阅读需求文档,深入了解系统,磨刀不误砍柴工,不要还没弄清需求就开测了,(一个星期前,公司刚进一个新人,没测试经验,因为测试的模块是我负责的,所以在TD上查看了下他们发的BUG,发现好几个是需求不明确误发的)心想:原来是这个系统啊,项目实训的时候做过和这个类似的项目,于是就把实训的系统需求硬生生的搬到当前系统来,这样做的风险太大,
               因为每个系统的需求都不一样,不能生搬硬套,打个比方:假设要你制造一辆轿车,你以前制造过普桑,就把你制造普桑的技术拿去制造林肯,这样做显然不合适
               熟悉系统(一般公司都会有系统熟悉情况考核)所以请一定要认真的阅读需求文档(有的公司叫产品定义)
            2、熟悉测试用例,这是测试执行的一个导向,要想快速高效率的执行用例,必须在熟悉系统的同时,熟悉用例,熟悉每条用例覆盖的需求,这样执行起来才能事半功倍
            3、胆大心细,测试就像是一场优胜劣汰的战斗,你的动作慢了,成果就是别人的了,假设你和同事同时发现了个BUG,而你打字比较慢,结果在你提交的同时他已经提交了,那么不好意思,你的BUG只能作CLOSED_Nbug处理了,如果一定要加上一个批注,那么将是,重复提交(测试新人,备注里不建议加测试建议(即怎样修改可以避免此缺陷),因为有可能会对开发产生误导)
            4、新版本发布,第一件事,验证FIXED缺陷,然后冒下烟确保主流程畅通,然后再进行功能测试,着重测试有修改的或者与所修改模块有调用关系的模块和发现BUG比较多的模块(公司发布版本会邮件通知修改的模块与修复的BUG),未改动的模块建议做个流程测试
            5、如果版本未更新,1)建议着重进行业务逻辑方面测试,在电脑上以文档形式画出简单的业务逻辑图片,重点说明:一定要尽量考虑所有的情况,因为这样的BUG要么就没有,一旦有就是HIGH
                               2)建议进行环境测试(当然要根据需求测试相应的环境)
                               3)严格核对需求文档,防止需求遗漏
            6、严格按照缺陷提交说明提交BUG,因为这有可能涉及BUG的统计问题,(一般公司的缺陷描述:系统名称_功能模块,缺陷描述,要具体问题具体对待)
    好了,今天先写这些了,都是自己的一些体会,要是有什么不对的地方,希望大家多多指正,谢谢!
    最后,喊一下我的口号:学会分享,明天你就是测试大虾
           
  • web 测试技巧

    alextowxm 发布于 2008-12-30 16:14:20

    测试人员容易遗漏一些隐藏的缺陷

      

    通常软件测试会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:

     

    1、安装缺陷

     

    通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试的时候,没有仔细的测试这一部分,而把用例集中在其他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。

     

    2、配置文件

     

    有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的黑客。所以,配置文件可能成为软件安全方面的一个缺陷。

     

    3、网页安全缺陷

     

    现在网站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。

     

    网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。

     

    4、判断顺序/逻辑缺陷

     

    对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如,一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。

     

    5、调试语句和冗余信息

     

    维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不必要的错误。

     

    同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。

     

    6、不可重现的故障

     

    新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。

     

    7、多节点的逆向流转缺陷

     

    当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。

     

    8、输入框缺陷

     

    试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。

     

    输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。

     

    9、界面布局缺陷

     

    曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。

     

    界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这些快捷方式和跳转顺序。

     

    10、版本和补丁包的环境问题

     

    理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨,怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。

     

    11、用户管理缺陷

     

    用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。

     

    另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。

     

    12、常识缺陷

     

    从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。

     

    尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。

     

     

     

     

     

     

     

     

     

     

     

    十大负面测试用例

     

     

     

    2008-07-09 作者:朱少民 来源:网络

     

     

    负面测试(Negative testing)是相对于正面测试(Positive testing)而言的。它们也是测试设计时的两个非常重要的划分。简单点说,正面测试就是测试系统是否完成了它应该完成的工作;而负面测试就是测试系统是否不执行它不应该完成的操作。形象一点,正面测试就象一个毕恭毕敬的小学生,老师叫我做什么,我就做什么;而负面测试就象一个调皮捣蛋的孩子,你叫我这样做,我偏不这样做,而且和你对着干。开发人员也是最讨厌修改此类bug的。

     

    正面测试主要根据需求,功能说明书,设计文档等相关参考文档来执行测试,而负面测试则主要根据错误猜测,逆向思维来测试系统,一定程序上的的依赖测试人员的经验积累。

     

    执行负面测试时,不单单要测试系统是否处理了用户的异常操作,还要检查系统对于这些异常操作是否给予了正确的错误提示。它是系统对用户进行继续正确操作的指引。

     

    简言之负面测试的三部曲就是:

     

    1、检查程序中的屏幕或页面是否给出了清晰且充分的提示或约束;

     

    2、测试系统是否处理了用户的异常操作;

     

    3、检查系统的错误提示是否清晰且充分。

     

    以下是Steve Miller的《Top 10 Negative Test Cases》,概括性的提到了一些做负面测试时经常需要注意的测试。

     

    负面测试用例被设计于用软件未意欲被使用的方式测试软件,它也应该是测试工作的一部分。以下就是在设计测试工作量时你应该考虑的十大负面测试用例。

     

    1、植入的单引号。大多数基于SQL的数据库系统在用户存储包含一个单引号的信息时会出现问题,例如John's car。每一个可以接受文字数字型数据条目的屏幕都要试试输入包含一个或多个单引号的文本。

     

    【补充】其实不只是单引号,基本上测试人员应该测试所有的特殊字符和空/空格(单纯的空格和文本前后的空格)。单引号,逗号,/<>(对于web的应用程序)都是很容易引发错误的。在开发早期测试组就可以建议开发组写一个通用的函数来处理这些特殊字符,然后在处理用户的输入时套用这个函数就可以避免此类错误了。

     

    2、必需输入的数据条目。功能说明书上应该清楚的指出屏幕上必须输入数据条目的字段。测试屏幕上每一个被说明为必须输入的字段以保证它强制要求你在字段中输入数据。

     

    【补充】对于强制输入的字段,在屏幕上最好有些标识以说明其为必须输入的字段。一般在字段前或后用红色的*号表示。测试时必须要检查有标识的字段是否和功能说明书或其他参考文档一致,错误信息提示是否正确,强制输入的字段是否真的必须输入。

     

    3、字段类型测试。功能说明书上应该清楚的指出要求特定数据输入要求(日期字段,数字字段,电话号码,邮编等等)的字段。测试屏幕上每一个被指出有特定类型的字段以保证你输入了基于字段类型的符合正确格式的数据(数字型字段应该不允许字符或特殊字符,日期型的字段应该允许输入一个正确的日期等等)

     

    【补充】其实这里还有一个字段格式和字段内容的测试。有些字段对输入的格式有要求,这些字段的格式一般在屏幕上也有相应的提示。所以在测试时需要测试提示的格式是否合理(和功能说明书或其他参考文档相一致)以及系统是否正确识别输入的格式。有些字段对字段的内容有限制,如常见的用户名,不能包含特殊字符,首字不能未数字等要求。所以在测试时需要测试提示的格式是否合理(和功能说明书或其他参考文档相一致)还有不符合内容要求的数据输入时系统是否正确的处理。

     

    4、字段长度测试。功能说明书上应该清楚的指出可以在字段中输入的字符数(例如,first name必须是50个或更少的字符)。写测试用例以保证你只可以输入特定的字符数。防止用户输入比允许范围更多的字符比因用户已输入过多的字符而给出的错误信息更加的文雅些。

     

    【补充】一般对于限制长度的字段,现在开发大多采用限制输入的方法(设置字段的长度)来处理。所以测试时需要测试限制的长度是否合理(和功能说明书或其他参考文档相一致),对于没有限制长度的字段,要测试无穷输入时是否出错,有问题报bug时建议开发人员根据需要限制长度。

     

    5、数字型的边界测试。对于数字型的字段,测试上下边界是非常重要的。例如,如果你正在计算某个账户的利息时,你永远不会输入一个负的利息数给应该赢取利息的账户。因此,你应该尝试用负数测试。同样,如果功能说明书上要求字段在某一个特定的范围(如从1050),你就应该尝试输入951,它应该给出一个得体的信息表示失败。

     

    6、数字的约束测试。大多数数据库系统和编程语言允许数字条目被识别为整数或长整数。通常,整数的范围是从-32,767~32,767,长整数的范围从-2,147,483,648~2,147,483,647。对于那些没有特定边界限制的数字数据条目,用这些限制测试以确保不会出现数字的溢出错误。

     

    【补充】小数型的数字字段同样也需要格外的测试。一般对于未指出数字类型的字段,尝试输入负整数,负小数,0,正整数,正小数进行测试。

     

    不管是哪种数据库系统,对于数字一般都有多种数字类型。所以测试人员一定要测试的全面。

     

    7、日期边界测试。对于日期型的字段,测试上下边界是很重要的。例如,如果你正在检查一个出生日期的字段,很大可能出生日期不能早于150年前。同样,出生日期应该不是将来的某一天。

     

    【补充】一般来说,每种数据库系统的日期都有个范围,如SQL Server最小日期是175311日,所以如果是输入型的日期字段同样也应该测试早于1753的日期。

     

    8、日期的有效性。对于日期字段,确保不允许无效的日期是很重要的(04/31/2007是一个无效的日期)。测试用例也应该检查闰年(每个第4年和第400年是一个闰年)

     

    9web会话测试。很多的web应用程序依赖浏览器的会话来追踪已登录的用户,应用程序的设置等等。应用程序的大多数屏幕不被设计为没有首次登录就可以被运行。应用程序应该确保在打开应用程序的某一页面之前会话里有一个有效的登录。

     

    10、性能的改变。当发布产品的最新版本时,应该有一套运行于识别屏幕(列出信息的屏幕,add/update/delete数据的屏幕等等)速度的性能测试。测试包里应该包括比较先前版本和现有版本性能统计值的测试用例。这个可以帮助识别那些可以证明是随着对现有版本的代码变更而引起的潜在的性能问题。

     

    【补充】从第一条到第八条是我们在测试字段时常常需要做的测试,一般的测试人员都不陌生。第九条在测试web应用程序中会作为检查应用程序的安全性而做的一项测试。而第十条估计很多公司都不会将它考虑到测试的范畴中,一般最多也就是在测试用例中添加校验某一个操作是否在系统允许的响应时间里,很少去做这样的比较,除了一些有针对性的性能测试。

     

     

  • 必懂SQL语句

    yxd2006 发布于 2008-12-30 16:17:21

    asc 按升序排列
    desc 按降序排列
    下列语句部分是Mssql语句,不可以在access中使用。
    SQL分类:
    DDL—数据定义语言(Create,Alter,Drop,DECLARE)
    DML—数据操纵语言(Select,Delete,Update,Insert)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
    首先,简要介绍基础语句:
    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:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
    其次,大家来看一些不错的sql语句
    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
      
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd*499) +1
     
    While Not objRec.EOF
    If objRec("ID") = RNumber THEN
    ... 这里是执行脚本 ...
    end if
    objRec.MoveNext
    Wend
     
      这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd*499) + 1
     
    sql = "Select * FROM Customers Where ID = " & RNumber
     
    set ōbjRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
     
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
    sql = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or ID = " & RNumber3
     
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 Select 语句只显示一种可能(这里的ID 是自动生成的号码):
    sql = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

     
    随机读取若干条记录,测试
    Access语法:Select top 10 * From 表名 orDER BY Rnd(id)
    sql server:select top n * from 表名 order by newid()
    mysqlelect * From 表名 order By rand() Limit n
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
    使用SQL语句 用...代替过长的字符串显示
    语法:
    SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
    Access数据库:Select iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
     
    Conn.Execute说明
    Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

    1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
        Set 对象变量名=连接对象.Execute("SQL 查询语言")
       Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

        2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
        连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
          ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
          ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

    ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
      BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息
  • 【收集链接】测试人生——不断更新

    八宝玛丽 发布于 2008-12-03 15:22:57

    1.一位前辈工程师职业发展的忠告

    ——写了10点,金科玉言,句句真理!

    2.做好测试工程师需要学习掌握的技能

    ——计算机专业知识、行业素养、个人行为素质

    3.保留更新……

  • 【转编】测试策略

    八宝玛丽 发布于 2008-12-03 15:08:06

    第一部分


    软件测试策略基础
    为什么要编写测试策略?测试策略就是如何进行软件测试的计划。测试策略的目标包括:

    取得利益相关者(比如管理部门、开发人员、测试人员、顾客和用户等)的一致性目标;
    从开始阶段对期望值进行管理;
    确保“开发方向正确”;
    确定所有要进行的测试类型。
    1、策略与软件测试策略

    (1)策略:在一定的政治路线指导下,根据具体条件而规定的斗争原则、方式和方法。<新华字典>

    (2)软件测试策略:在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。

    测试策略为测试提供全局分析,并确定或参考:

    项目计划、风险和需求;
    相关的规则、政策或指示;
    所需过程、标准与模板;
    支持准则;
    利益相关者及其测试目标;
    测试资源与评估;
    测试层次与阶段;
    测试环境;
    各阶段的完成标准;
    所需的测试文档与检查方法。
    2、软件测试策略的重要性

    1)任何一个完全测试或穷举测试的工作量都是巨大的,在实践上是行不通的,因此任何实际测试都不能保证被测程序中不遗漏错误或缺陷;

    2)为了最大程度较少这种遗漏,同时最大限度发现可能存在的错误,在实施测试前必须确定合适的测试方法和测试策略,并以此为依据制定详细的测试案例。

    3、软件测试策略的目的

    是不是所有软件测试都要运用现有软件测试方法去测试呢?答案是否定的。依据软件本身性质、规模和应用场合的不同,我们将选择不同测试方案,以最少的软硬件、人力资源投入得到最佳的测试效果,这就是测试策略的目标所在。

    3、软件测试策略的影响因素

    软件测试策略随着软件生命周期的变化、软件测试方法、技术与工具的不同发生的变化。这就要求我们在制定测试策略时候,应该综合考虑测试策略的影响因素及其依赖关系。这些影响因素可能包括:测试项目资源因素、项目的约束和测试项目的特殊需要等。

    4、软件测试策略的制定过程

    (1)输入

    需要的软硬件资源的详细说明;

    针对测试和进度约束而需要的人力资源的角色和职责;

    测试方法、测试标准和完成标准;

    目标系统的功能性和技术性需求;

    系统局限(即系统不能够提供的需求)等等。

    (2)输出

    已批准和签署的测试策略文档、测试用例、测试计划;

    需要解决方案的测试项目;

    (3)过程

    1)确定测试的需求¤

    测试需求所确定的是测试内容,即测试的具体对象。在分析测试需求时,可应用以下几条一般规则:

    测试需求必须是可观测、可测评的行为。如果不能观测或测评测试需求,就无法对其进行评估,以确定需求是否已经满足。

    在每个用例或系统的补充需求与测试需求之间不存在一对一的关系。用例通常具有多个测试需求;有些补充需求将派生一个或多个测试需求,而其他补充需求(如市场需求或包装需求)将不派生任何测试需求。

    测试需求可能有许多来源,其中包括用例模型、补充需求、设计需求、业务用例、与最终用户的访谈和软件构架文档等。应该对所有这些来源进行检查,以收集可用于确定测试需求的信息。

    2)评估风险并确定测试优先级¤

    成功的测试需要在测试工作中成功地权衡资源约束和风险等因素。为此,应该确定测试工作的优先级,以便先测试最重要、最有意义或风险最高的用例或构件。为了确定测试工作的优先级,需执行风险评估和实施概要,并将其作为确定测试优先级的基础。

    3)确定测试策略¤

    一个好的测试策略应该包括:实施的测试类型和测试的目标、实施测试的阶段、技术、用于评估测试结果和测试是否完成的评测和标准、对测试策略所述的测试工作存在影响的特殊事项等内容。

    如何才能确定一个好的测试策略呢?我们可以从基于测试技术的测试策略、基于测试方案的测试策略两个方面来回答这个问题。

    ①基于测试技术的测试策略的要点

    著名测试专家给出了使用各种测试方法的综合策略:

    任何情况下都必须使用边界值测试方法;

    必要时使用等价类划分方法补充一定数量的测试用例;

    对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,看是否达到了要求;

    如果程序功能规格说明中含有输入条的组合情况,则已开始可以选择因果图方法。

    ②基于测试方案的测试策略

    对于基于测试方法的测试策略,一般来说应该考虑如下方面:

    根据程序的重要性和一旦发生故障将造成的损失来确定它的测试等级和测试重点;

    认真研究,使用尽可能少的测试用例发现尽可能多的程序错误,避免测试过度和测试不足!

    第二部分

    测试策略的方法

    软件测试的策略、方法和技术是多种多样的。对于软件测试技术,可以从不同的角度加以分类:从是否需要执行被测软件的角度,可分为静态测试和动态测试。从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。
      1.静态方法与动态方法
      所谓静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
      动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。
      2.功能测试与结构测试
      (1)功能测试
      功能测试是指在对程序进行的功能抽象的基础上,将程序划分成功能单元,然后在数据抽象的基础上,对每个功能单元生成测试数据进行测试。用这种方法进行测试时,被测程序被当作打不开的黑盒,因而无法了解其内部构造,因此又称为黑盒测试。
      黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当接收输入数据而产生正确的输出信息,并且保持外部信息的完整性。
      在功能测试中,被测软件的输入域和输出域往往是无限域,因此穷举测试通常是不可行的。必须以某种策略分析软件规格说明,从而得出测试用例集,尽可能全面而又高效地对软件进行测试。下面就说明几种功能测试的方法:
      a.等价类划分
      所谓等价类,就是指某个输入域的集合,集合中的每个输入对揭露程序错误来说是等效的,把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例,这就是等价类划分方法。它是功能测试的基本方法。
      b.因果图法
      因果图是一种形式语言,由自然语言写成的规范转换而成,这种形式语言实际上是一种使用简化记号表示数字逻辑图。因果图法是帮助人们系统地选择一组高效测试用例的方法,此外,它还能指出程序规范中的不完全性和二义性。
      c.边值分析
      实践证明,软件在输入、输出域的边界附近容易出现差错,边值分析是考虑边界条件而选取测试用例的一种功能测试方法。所谓边界条件,是相对于输入和输出等价类直接在其边缘上,稍高于和稍低于其边界的这些状态条件。边值分析是对等价类划分的有效补充。
      (2)结构测试
      结构测试是根据被测程序的内部结构设计测试用例的一类测试,又称为白盒测试。白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。其主要方法有逻辑驱动、基路测试等,主要用于软件验证。白盒法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。白盒法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。
      与功能测试不同的是,结构测试涉及程序内部结构。尽管用户更倾向于基于程序规格说明的功能测试,但是结构测试能发现潜在的逻辑错误,而这种错误往往是功能测试发现不了的。它们各有利弊,常常结合使用。

    第三部分

    测试策略文档范例


      ●测试目的:
      (1) 测试的范围,哪些功能要包括在内,哪些要排除在外
      (2) 谁是客户和最终用户,谁就是测试结果的验收者
      (3) 测试的次序和日程安排
      (4) 验收的条件,成功因素,限制

      ●资源需求:
      (1) 制定计划和运行测试需要哪些技术和经验
      (2) 相关人员的角色和责任
      (3) 谁将对测试工作进行全盘协调
      (4) 谁负责测试资料管理,版本控制,错误跟踪

      ●测试环境:
      (1) 用于测试的系统配置怎样
      (2) 需要什么自动化工具
      (3) 需要哪些测试数据(数据库和输入交易),如何安装
      (4) 您如何前调系统时钟

      ●测试过程:
      (1) 运行测试时要遵循哪些过程(设置、执行、记录)
      (2) 测试案例如何制定,其标准格式是什么
      (3) 测试案例定义的覆盖要求是什么
      (4) 遇到问题如何决定其严重程度,对问题如何处理 

    ——以上摘自网络并整理合并

  • 【收集链接】测试概念——不断更新

    八宝玛丽 发布于 2008-12-24 15:09:32

362/2<12

数据统计

  • 访问量: 282
  • 日志数: 1
  • 建立时间: 2008-10-25
  • 更新时间: 2009-03-20

RSS订阅

Open Toolbar