-
测试新人怎样快速成长
2009-01-04 11:43:17
1、阅读需求文档,深入了解系统,磨刀不误砍柴工,不要还没弄清需求就开测了,(一个星期前,公司刚进一个新人,TD上查看了下他们发的BUG,发现好几个是需求不明确误发的)心想:原来是这个系统啊,项目实训的时候做过和这个类似的项目,于是就把实训的系统需求硬生生的搬到当前系统来,这样做的风险太大,因为每个系统的需求都不一样,不能生搬硬套,打个比方:假设要你制造一辆轿车,你以前制造过普桑,就把你制造普桑的技术拿去制造林肯,这样做显然不合适。熟悉系统(一般公司都会有系统熟悉情况考核)所以请一定要认真的阅读需求文档(有的公司叫产品定义)
2、熟悉测试用例,这是测试执行的一个导向,要想快速高效率的执行用例,必须在熟悉系统的同时,熟悉用例,熟悉每条用例覆盖的需求,这样执行起来才能事半功倍
3、记住自己在工作中扮演的角色是测试而不是开发 。珍惜时间,避免不必要的浪费。作为一个测试新人来讲,刚开始接触项目,有很多时候发现BUG,只是知道它的表象特征,却无法弄清这个缺陷是由什么引起的,这里就存在一个误区,花过多的时间去寻找原因,因为受个人所学习知识和经验上的限制,有的缺陷很难短时间内找到产生原因,与其这样浪费时间,不如将BUG重现给开发看一下,让开发找原因,那样即不耽误下面的测试也能在短时间内找出原因,从根本上解决BUG。
4、一旦发现缺陷,应立刻提交。有几种情况:测试就像是一场优胜劣汰的战斗,你的动作慢了,成果就是别人的了。
1)作为一个测试新人来讲,测试的第一步,可能是从执行用例开始,而成功的用例(项目刚开始时)可以发现很多系统中存在的问题,同一条case里的不同STEP就可能发现多个BUG,那么对于这样的情况,我们要做的是:发现就提交,不要等到所有STEP都执行完再提交。那样说不定已经被别人提交了。
2)‘抛开’需求说明书(即不用看需求说明书,对需求也特别熟悉),以快取胜。假设你和同事同时发现了个BUG(双方都不知道对方在提交),而你对需求不熟悉,不太确信是个BUG,然后又去翻需求,翻完回来再提交,结果这时候同事已经提交了,那么不好意思,你的BUG只能作CLOSED_Nbug处理了,如果一定要加上一个批注,那么将是,重复提交(测试新人,备注里不建议加测试建议(即怎样修改可以避免此缺陷),因为有可能会对开发产生误导)特别说明:1)速度和效率同时考虑,尽量别发错BUG;2)公平竞争,还要考虑团队合作,在别人的测试模块发现BUG,建议告知对方提,与同事交流的时候,同事讲到的缺陷,而缺陷管理工具中没提,应该让对方提交上去
5、新版本发布:
1)验证FIXED缺陷,如果验证通过了,把状态改为CLOSED(关闭的时候一定要加个备注,(比如:某月某日某版本验证通过。)对于开发修改了,但是与需求有出入的,且与测试经理确认可以这样修改时,备注建议这样写:某月某日某版本验证通过,修改为……),如果没通过改为OPEN(同样加个备注:某月某日某版本验证未通过),这里存在一个误区,有的人会把状态改为REOPEN,如果是公司要求的,那无可厚非,如果没有要求,建议改为OPEN,因为REOPEN是已经确认修改并且该BUG已经改为CLOSED状态后,才需要修改为REOPEN状态的。(有很多公司是不允许出现REOPEN状态的(针对开发),一旦出现,开发此模块的程序员绩效可能会被大打折扣,我现在所在的公司就是这样的)
2)冒下烟确保主流程畅通,然后再进行功能测试,着重测试有修改的或者与所修改模块有调用关系的模块和发现BUG比较多的模块(公司发布版本会邮件通知修改的模块与修复的BUG),未改动的模块建议做个流程测试。特别说明:主流程走不通,应立刻MSN给项目负责人(组长或经理,如果有本项目MSN群,直接在群里讲就可以了)
6、如果版本未更新,
1)建议着重进行业务逻辑方面测试,在电脑上以文档形式画出简单的业务逻辑图片,重点说明:一定 要尽量考虑所有的情 况,因为这样的BUG要么就没有,一旦有就是HIGH
2)建议进行环境测试(当然要根据需求测试相应的环境)
3)严格核对需求文档,防止需求遗漏
7、严格按照缺陷提交说明提交BUG,因为这有可能涉及BUG的统计问题,(一般公司的缺陷描述:系统名称_功能模块,缺陷描述,要具体问题具体对待)
优先级和严重程度不要夸大也不要降低,实事求是,因为这与开发和测试的绩效考评有挂钩,要是夸大缺陷,会影响开发的绩效考评,降低会影响自己的绩效考评,建议:系统级(影响流程)和跳黄页(报服务器错误的,这类缺陷有的是服务器配置错误导致)建议为高,功能实现建议为中,界面易用,或者不影响系统使用的其他问题建议为低,具体级别公司会有规定,如果没有规定,可以参考一下我的建议
8、测试没有空闲。项目在不同阶段,会有些时间很‘空闲’。建议:
1)把测试管理工具中的缺陷全部分类导出,总结一下哪些模块容易产生哪些缺陷,重点看一下自己没发现或没有考虑到的缺陷,有多余时间可以看一下CLOSED_NBUG的缺陷,这类BUG一般都是需求不明确,需求变更而产生的,看一下这类缺陷,可以总结一下哪些需求容易产生误解,和出现了哪些新需求。
2)把测试管理工具中的用例细细看几遍,学习别人的用例编写方法和思想,空闲时间可以自己试着编写,看自己编写的与别人编写的用例差距在哪,从而不断完善
3)进入一些测试论坛,比如51testing,把自己的困惑和经验和大家一起分享,共同学习,共同进步!
好了,今天先写这些了,都是自己的一些体会,要是有什么不对的地方,希望大家多多指正,谢谢!主要针对新人写的,大虾看了别见笑,测试经验中有的不适合大虾 -
感动过后……
2008-12-31 15:37:07
感动过后……(08年4月在南京)回来的路上,经过新街口的天桥附近,遇到一个做问卷调查的男孩,缠着一个女孩,还不时的伸手占女孩的便宜,看着女孩子很痛苦的神情,心里有种说不出的感觉,于是我对着女孩喊:“叶子,你什么时候来南京的?他是你朋友啊?”女孩说:“不认识”。那个男孩听到我们的话以为我和女孩认识,所以知趣的走开了,然后我和女孩并肩走过了天桥,当我说再见的时候,女孩要我留下联系方式,当时心里竟有种说不出的感觉,酸酸的,我笑了下,对她说:“下一次遇到,再留吧”。女孩也笑了下,挥了挥手:“好吧,下次见,拜拜!”
生活中,因为发生一些偶然的事,可能偶然的认识一些人,有了一种偶然的感动,可感动过后,也许就再也记不清对方的摸样,以前也有过类似的经历,那是第一次做长途客车去济南,到站的时候,看到一个女孩吃力的从车上向下拿几个大包,于是就上去帮了下,后来在等朋友接的时候,闲聊了一会,才知道她是南邮的大一学生,家是济南的,后来彼此留了电话,再后来只联系过一次,往后再也没有联系过……
生活就是这样,无论当时多么感动,感动过后,也许剩下的什么也没有,或许这就是生活,有太多的感动,太多的话想说,可过后,却是一样的结局。人是容易遗忘的动物…… -
有关数据库的一些操作:
2008-12-31 15:33:40
有关数据库的一些操作:
创建表项就不说了.
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
插入记录:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
删除记录:
delete from Student where Sno = 'aaa';
注:只需要删除一个主键就可以了。其他的记录会相应的删除掉。
删除表中一个字段:
ALTER TABLE Student DROP column Ssex; 列名;
修改表中的那一行数据:
原来的记录:
Sno Sname Ssex Sdept
aaa mary f 172
update Student set Sname='mary1', Ssex='m' where Sno='aaa';
修改后:
Sno Sname Ssex Sdept
aaa mary1 m 172
desc倒叙排列:
建立索引:
create unique index Sno on Student(Sno);
索引的一点好处:在查询时候比较方便,在存在的所有记录中查找一个Sno=1的时候!建立索引的表中就直接查找Sno项比较它是否=1找到后查相关的记录就比较快。没有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比较其值=1的相关记录。
默认是ASC。
按表中哪个字段倒叙排序:
select * from Student order by Sno desc;
注意:要排序的字段必须是int型。
设置成自增长的字段在插入数据的时候不需要插入该字段的值:
select * from Student order by Sno desc;
原来没有设置成自增长插入数据命令:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
将int型的Sno字段设置成自增长后
insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');
insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');
insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');
在表中的排序如下:
Sno Sname Ssex Sdept
1 mary1 f 172
2 mar1y f 172
3 ma1ry f 172
4 m1ary f 172
/*********************************************************************************
2006.7.20
*********************************************************************************/
查询表中记录总数:(无字段名字)
select count() from usertable;
或:(userid 为字段名字,结果是字段的总行数)
select count(*) userid from Student;
查询字段的平均值:
selecet avg(Sno) from Student;
select avg(字段名)from 表名;
给出查询的字段的平均值取别名:
select avg(字段名) as (别名) from (表名);
查找指定的字段的其他字段
select Sdept,Ssex,Sname
from Student
where Sno=3;
(where Sname='mary1';或则where Sname like 'mary1';)
在between语句查询的都是在and之间的所有值而IN语句则必须是in括号里面的值.
select Sno,Ssex,Sname from Student where Sdept between 180 and 190;
select Sno,Ssex,Sname from Student where Sdept in (172,190);
查询Student表中的所有的名字中的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';
注:%%之间是把所有的String类型的值
like和where条件查询
select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;
查询Student表中的所有的名字中间有mary的所有名字对应的的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
注:mary1,1mary,marydsajdh,等.
注意:and or not 用的时候,and是用在连接并列条件的2个不同的字段
or是用在选择的2个不同的字段之间,not一般用于not in(180,190)之间.
order by 和asc|desc的一点不同:
order by是按先进先排,desc是先进后排,asc和desc是排列顺序不一样.
disctinct条件查询
distinct 这个关键字来过滤掉多余的重复记录只保留一条,
select distinct name from table 表示将返回table表中name字段不重复的所有字段的集合。
注:distinct必须放在开头,select id distinct name from table 是错误的!
-------------------------------------------------------------------------------------
表TEST_1:
id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77
-------------------------------------------------------------------------------------
select distinct(name1) from test_1
结果:
name1
aaa
bbb
ccc
ddd
eee
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的集合,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,即上表中只能返回name1字段的所有不重复记录集合。
-------------------------------------------------------------------------------------
如果现在想查询出表test_1中所有name1不重复的id和name1字段的记录呢?
select distinct name, id from table
结果:
name1 id
aaa 9
bbb 5
bbb 8
ccc 3
ccc 4
ddd 6
eee 7
并不是我们所想要的结果
select distinct name,id from table 作用了两个字段,也就是必须得id与name都相同的才会被排除,即返回去除table表中id和name两个字段同时相同情况下所有集合。
-------------------------------------------------------------------------------------
如果现在想查询出表test_1中所有name1不重复的所有字段的记录呢?
对于
select * from test_1 where name1 in (select distinct name1 from tablename)
等价于
select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')
我们很可能认为它是可行的,但实际上结果却是:
id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77
正确sql应该是:
select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id
min(id)或max(id)都行,order by id 可要可不要.这里用内连接实现联合查询,也可以用where语句
select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id
-------------------------------------------------------------------------------------
**********************************************************************************
联合查询
**********************************************************************************
查询表中的各个字段的值
select Sno,Sname,Ssex,Sdept from Student;
多表查询(2个表,publishtable和publishtable,给表起了别名)
select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;
多表查询(3个表employees,departments和locations表,给表起别名)
(从多表中查询出所有姓smith的雇员的名字,所在部门以及部门所在的城市)
select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';
***********************************************************************************
联合查询
***********************************************************************************
等值连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等*/
select * from books,bookstype where bookstype.typeid = books.typeid
内连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等,和等值连接等价*/
select * from books inner join bookstype on books.typeid = bookstype.typeid
左外连接
/*将books表和表bookstype中的信息联合查询,包括在books表中没有和bookstype表关联的信息*/
select * from books left outer join bookstype on bookstype.typeid = books.typeid
右外连接
/*将bookstype表和books表中的信息联合查询,包括在bookstype表中没有和books表关联的信息*/
select * from books right outer join bookstype on bookstype.typeid = books.typeid
全连接
/*将bookstype表和books表中的信息联合查询,包括在books表中没有和bookstype表关联的信息以及在bookstype表中没有和books表关联的信息*/
select * from books full outer join bookstype on bookstype.typeid = books.typeid
***********************************************************************************
联合查询
***********************************************************************************
多表查询应该注意的几点:
多表查询和单表查询的不同在于多表查询在查询某个字段的时候应该带上表名
格式是:表名.字段名,表名.字段名
select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name
from bbs,bbsr
where bbs.id=bbsr.id;
一般的在多表查询中的表名取的麻烦用别名来代替
如下:
select b.id,b.name,b.dep,c.id,c.name
from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取别名也可以用空格或则用as.
where b.id=c.id;
*************************************************************************************
分组查询
*************************************************************************************
在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息SQLServer 按照group by 子句中指定的表达式的值分组查询结果。
-------------------------------------------------------------------------------------
分组查询一般是用来进行统计需求的,要进行分组查询必须使用group by子句或having子句,在分组统计时要用到SQL的多行存储函数。在where条件中不能使用多行存储函数.
查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。
在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数.
------------------------------------------------------------------------------------
部门表department:
department_id department_name
10 开发部
20 测试部
30 用服部
40 财务部
50 培训部
雇员表employees:(department_id为外键)
id employees_name department_id
1 cheng 10
2 zhou 50
3 liguo 10
4 wang 20
5 feng 30
6 ling 30
7 wu 20
8 tang 20
9 yang 40
10 tan 50
------------------------------------------------------------------------------------
按部门编号统计出表employees中的每个部门的人数(group by分组查询)
select department_id, count(*) from employees
group by department_id;
显示出部门人数少于5人的部门编号以及人数( 按照department_id来分组,having count(*)<5做为限制条件 )
select department_id 部门号, count(*) 部门人数 from employees
group by department_id
having count(*)<5;
--------------------------------------
(注意:having必须在group by子句的后面)
--------------------------------------
图:
部门号 部门人数
------------------------------
10 2
20 3
30 2
40 1
50 2
-------------------------------------------------------------------------------------
where子句和having子句可以同时使用,where子句是对要分组的行进行过滤,即选择要分组的行;
而having子句是对分组后的数据进行过滤。此时where子句必须在group by...having子句之前
-------------------------------------------------------------------------------------
显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数
select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees
where salary >5000
group by department_id
having count(*)>5;
图:
--------------------------------------
部门号 最低工资 部门人数
80 6100 34
100 6800 6
group by 按照哪个字段来排序查询,一般的group by和having一起使用,注意在查询中只能查询与group by和having有关的字段。
--------------------------------------
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
查询每个部门的每种职位的雇员数(待测试...)
select deptno,job,count(*) from emp group by deptno,job;
*********************************************************************************
数据排序
*********************************************************************************
order by子句中可以用asc(升序)和desc(降序)来完成相应的排序,默认时是按找asc(升序)。
---------------------------------------------------------------------------------
显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数,并要求按照部门人数降序排序.
select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees
where salary >5000
group by department_id
having count(*)>5
order by count(*)desc
-------------------------------------------------------------------
(注意:当对分组查询后的结果进行排序时,order by 必须在group by之后)
-------------------------------------------------------------------
图:
--------------------------------------
部门号 最低工资 部门人数
80 6100 34
100 6800 30
90 6500 28
70 6300 25
*******************************************************************************
子查询
*******************************************************************************
-----------------------------------------------------------------------------------------------------
子查询是一个在select查询中含有其他的select语句,子查询通常用在where子句中,即将一个查询结果做为查询的条件.
-----------------------------------------------------------------------------------------------------
统计表employees中所有工资小于平均工资的人数
select count(*)工资 from employees
where salary <
(select avg(salary) from employees)
图:
----------------
工资
56
49
36
Select MIN(Salary),Manager_id
from Employee
group by Manager_id
having MIN(Salary) >
(Select MIN(Salary)
From Employee
where Manager_id=004);
注意在多表查询中返回的值应该是一个唯一确定的值,而不应该是多中值。
select Employee_id,Last_name,Salary,Manager_id
from Employee
WHERE Salary>
(select Salary
from Employee
where Manager_id=003)
and
Last_name= (select Last_name
from Employee
where Last_name like 'mary');
注意在any,or,all的区别:
Select Salary,Manager_id,Last_name,Employee_id
from Employee
where Salary < any
(Select Salary
From Employee
where Manager_id=005);
Select Salary
From Employee
where Manager_id=005;返回的是2000,2500
就是在工资中小于2000.2500其中一个就可以了,而ALL则必须是小于2000和2500其中任何一个
。而or则是和and用在一起的.
******************************************************************************************
集合运算
******************************************************************************************
---------------------------------------------------------------------------------
集合运算是将2个或多个子查询结果进行(并union),交(intersect)和减(minus)
---------------------------------------------------------------------------------
(并union):
select employee_id,empname from emp1
union
select employee_id,name from emp2
图:
-----------------
employee_id empname
100 king1
1000 king2
1000 king3
10000 king4
100000 king5
1000000 king6
注:使用union,重复行只包括一个,当使用union all时将包括重复行
交(intersect):2个或多个子查询的公共行
select employee_id,empname from emp1
intersect
select employee_id,name from emp2
减(minus):从第一个查询结果中去掉出现在第二个查询结果中的行:
select employee_id,empname from emp1
minus
select employee_id,name from emp2
*****************************************************************************************
视图,存储过程和触发器
*****************************************************************************************
创建视图:(查询数据,用于系统统计报表)
create view dept_sum_vu
(name,minsal,maxsal,avgsal)
as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)
from employees e,departments d
where e.department_id = d.department_id
group by d.department_name;
存贮过程,触发器和删除外键
1).存贮过程:
存贮过程的路径:打开Stored Procedures中new一个新的Stored Procedures,中间填写代码,代码如下:
CREATE PROCEDURE sa.bbsTest AS
select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id
CREATE PROCEDURE bbsTest AS
select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id
2).触发器
打开用户表项,点设计表,选中其中一个字段,右键task点manager triggers,在弹出的表单中写代码:
CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]
FOR DELETE
AS
BEGIN
DELETE rebbs
FROM bbs, deleted
WHERE rebbs.bbs_id = bbs.bbsid
AND bbs.area_id = deleted.id
DELETE bbs
FROM deleted
WHERE bbs.area_id = deleted.id
END
3).删除外键
打开用户表项,点设计表,选中其中一个字段,右键relationships,在弹出的主键和外键中选择就可以了.
删除外键,需要先删除主键表里面的有关外键的字段,再来删除外键的有关字段. -
测试用例编写方法
2008-12-31 15:25:03
测试用例设计方法---场景VS功能
1 目的
站在用户的角度,以用户的使用逻辑及操作习惯为出发点,结合功能用例的设计方法,使用例设计更符合用户使用逻辑更具有可执行性,从而最大程度上覆盖用户需求。
2 使用者
用例设计、执行及热爱测试的人员
3 测试用例设计方法
按照不同的规则可以将测试用例分为四个部分:场景用例(用户场景)、系统用例(用户场景的细化)、功能用例(基于业务规则、界面)、设计指标(基于环境、性能、安全等)。
Ø 用户场景用例:按照用户的实际操作与业务逻辑设计用例,不必涉及很复杂的操作或逻辑,把用户最常用的、正常的操作流程作为一个场景设计测试用例
Ø 系统用例:是用户场景的细化,包含正常场景、分支场景和异常场景,是两个或多个有关联的功能组合而成的场景。
Ø 功能用例:用于验证各功能点的业务规则,包括界面元素和各功能的业务规则验证。主要针对单个功能点。
Ø 设计指标:系统所需要达到的各级指标。主要包含环境、性能、安全等方面的指标。
第一步:用户场景用例(关键字:模拟用户实际操作)
描述用户的主要业务目标,包含完整的系统级场景和模拟用户实际操作的不同场景,几个功能点的组合也算是用户场景,这类的用例不宜过多。
第二步:系统各角色的系统用例
将系统划分多个角色,再将每个角色分解为多个任务,每个任务就是一个系统用例。系统用例分别正常流程、异常流程,分支流程,以场景的形式描述。
系统用例命名原则:正常(异常、分支)流程_描述
第三步:功能用例
描述单点功能的逻辑规则及页面元素,分层描述逻辑规则,对逻辑规则细化可直接作为用例的操作步骤描述。
第四步:设计指标
设计指标包含三种类型的用例:环境测试用例、性能测试用例、安全性用例。
环境测试用例可依照操作系统版本,浏览器版本不同划分为多个用例。每个用例下可直接调用已有的用户场景用例、系统用例、功能用例,可无须单独编写用例。
4 用例设计规则
规则如下:
1 每个用例需要选择优先级,分为高、中、低三种。
每个用例需要关联项目。
2 需要特别强调的是,用户场景用例,一定要脱离系统提供功能,站在用户角度来设计用例,从用户实际可能的操作场景考虑。
3用户场景及系统用例的划分粒度。比如:注册登录,其本身也算一个用户场景,但不是用户关心的业务目标,所以把其划分为系统用例中。
4 系统用例与功能用例的划分粒度。功能点是测试用例设计的基本单位,是一个不可再细分的完整操作,可以基于一个表单或者多个表单,依照产品具体需求进行划分。系统用例侧重于场景,是两个或两个以上多个功能点的组合。
-
我的测试历程--写给测试新人
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的统计问题,(一般公司的缺陷描述:系统名称_功能模块,缺陷描述,要具体问题具体对待)
好了,今天先写这些了,都是自己的一些体会,要是有什么不对的地方,希望大家多多指正,谢谢!
最后,喊一下我的口号:学会分享,明天你就是测试大虾