师傅领进门,修行靠个人。

系统测试用例设计方法【zhuan】

上一篇 / 下一篇  2012-03-17 14:43:27 / 心情: 大地回春---到处弥漫着雾气 / 精华(3) / 置顶(2) / 个人分类:测试用例

目         录
0 C1 m2 H( H6 Y% [7 ]9 l
一、 测试用例格式以及写作要点        3
二、系统测试用例设计方法        4
1、等价类划分法        5! c6 }. l* F$ d% R  G& {
2、边界值分析法        69 e$ P, v2 J; h* h$ _
3、判定表法        7
4、因果图法        9' r+ T$ b, A: j7 i+ C: _! ^, |" A% a
5、状态迁移图法        15( M! g- S1 L/ \" w- ?! L
6、流程分析法        204 J% R. O6 J" J* p& g3 n
7、正交试验法        343 _& \0 }( [, `1 e# `) L
8、错误推测法        411 B" l# p. Q; Q

一、        测试用例格式以及写作要点2 W6 x" t# N" C1 v8 f1 U7 k4 A
测试用例编号       ( D5 T, @, A, @+ u# y3 t! a6 \
测试项目       
测试标题       
重要级别       
预置条件       3 J5 P& o6 P6 J: t
输入       6 Z, A& I2 h7 u" K
操作步骤       % c6 @- y- R4 R. H6 w: o4 e3 O. s( y
预期输出       # v, t: Z) v* f7 Q
        以上是一般的测试用例格式,可以根据公司具体要求删除一些或加入其它项。

测试用例编号2 Y, J, x& A" D1 S2 j* Y8 ~
测试用例编号是由字母和数字组合而成的,用例的编号应该具有唯一性,易识别性。比如可以采用统一的约定,产品编号—ST—系统测试项名—系统测试子项名—编号。这样看到编号就可以知道是做的什么测试,测试的对象是什么。也方便维护。
测试项目
        你现在这个测试用例所测的项目名,可以是测试用例所属的大类,被测需求,被测的模块,或者是被测的单元。例如:计算器加法功能。3 |, v. r' N3 a3 U2 [: z3 J9 X
测试标题* J9 v$ H0 d  S9 a: z+ ^3 B, e" X6 K! Q
        测试标题是对测试用例的简单描述。用概括的语言描述该测试用例的测试点。每个测试用例的标题不能够重复,因为每个测试用例的测试点是不一样的。例如:手机在没有SIM卡的情况下,拨打119。
重要级别6 X, C5 i6 o7 i  v! x! {- l
        重要级别分为高中底三等:! \$ W, ~. |" d7 H- P. W8 }
                高:保证系统基本功能、重要特性、实际使用频率比较高的用例;  B3 y! w  G; {6 z
                中:重要程度介于高和底之间的测试用例;
                底:实际使用频率不高、对系统业务功能影响不大的模块或功能的测试用例。
        注:一般情况下,重要级别为高的测试用例,一个测试子项里有且尽有一个,大多数都是重要级别为中的测试用例。因为一般我们会进行一个系统测试预测试,如果重要级别为高的太多,则就失去了预测试的实际意义。7 q' t2 |; u- `5 B
预置条件
        就是执行当前测试用例的前提条件,如果不满足这些条件,则无法进行测试。
输入
        测试用例执行时,需要输入的外部信息。例如某一个文件,数据记录等。* G: |( w# ?4 D& \& h
操作步骤+ G/ M' G* ]/ L( g  B
        执行当前测试所要经过的操作步骤,需要给出每一步操作的描述,测试人员根据测试用例操作步骤,完成测试用例的执行。8 K& s6 r6 A& }) H5 W7 j
预期输出
        当前测试用例的预期输出结果。用来与实际结果比较,如果相同则该测试用例通过,否则该测试用例失败。

二、系统测试用例设计方法9 j% _8 J% n3 b. o7 H1 A8 ^4 r) [
1、等价类划分法5 F, r8 U/ h. `! N0 r0 w
何为等价类,某个输入域的集合,在这个集合中每个输入条件都是等效的,如果其中一个的输入不能导致问题发生,那么集合中其它输入条件进行测试也不可能发现错误。& I( Y! [$ {* Q. U3 Q0 `
等价类分为有效等价类和无效等价类,有效等价类就是由那些对程序的规格说明有意义的、合理的输入数据所构成的集合;无效等价类就是那些对程序的规格说明不合理的或无意义的输入数据所构成的集合。' b  @3 v, l! l# U# ], O; E
划分等价类的方法:下面给出六条确定等价类的原则。% H7 r3 h/ [, E9 {
1、在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。3 R; u* v0 Z+ B
2、在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。) Q$ y0 W  Y: n5 x8 W
3、在输入条件是一个布尔量的情况下,可确定一个有效等价类。
4、在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
5、在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
6、在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。! ?# }; L0 @9 ~: P1 B0 S0 v
根据等价类划分原则,将等价类填入下表。
等价类表
输入条件        有效等价类        无效等价类
               ( l, a; y0 ^  g& a
               % `3 V5 O/ T# b3 J/ v
根据等价类表,然后从划分出的等价类中按以下三个原则设计测试用例:$ w0 V! G6 E2 c# {
1、为每一个等价类规定一个唯一的编号。
2、设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
3、设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。% [' q" w" g" M0 h- P; m  Y6 j7 L1 q
举例:& n" B/ I+ J* s2 e. I9 P% \
拿PowerPoint的打印功能界面做例子,用等价类方法,划分等价类。' Q/ I3 B9 G: Z' V

根据原则划分等价类,填入等价类表。
输入条件        有效等价类        无效等价类
打印机名称        可选择的打印机       " ]' }% J! S. E" B! y, O- p
打印到文件        TRUE、FALSE       
打印范围        全部、当前幻灯片、幻灯片       
幻灯片        不大于幻灯片总数的自然数集合        小于1的整数
打印份数        [1,32767]        小于1的整数,大于32767的整数- P# @3 |! Z: b5 P" |
逐份打印        TRUE、FALSE       
打印内容        幻灯片、讲义、备注页、大纲视图       
颜色/灰度        颜色、灰度、纯黑白       0 f) A" v6 L, y6 p4 ^( V+ ]/ {. b
每页幻灯片数        {1、2、3、4、6、9}        除了1、2、3、4、6、9以外 整数8 h2 B, N4 P. H& }* h+ Z. D3 o
顺序        水平、垂直       
根据纸张调整大小        TRUE、FALSE       ( O1 N3 c6 U- s7 C- l/ i7 Y  i" K& n/ I
幻灯片加框        TRUE、FALSE       

测试用例略。等价类划分是最常用的方法,通常和边界值分析法一起用,在下面的流程分析法里,我会将等价类、边界值和流程分析法一起举例,一起写测试用例。9 B: t6 d2 L6 ~4 J; h) B0 _
$ \# m& e/ P5 l- I
2、边界值分析法
测试经验丰富的前辈们公司我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对个中边界情况设计测试用例,可以查处更多的错误。: Q5 b: o# p! X: M0 H# g" J
首先来了解一下边界点的定义,边界点分为上点、内点和离点。如图:1 e, V1 b) @  b# J0 J% D
8 D# U) y8 K" L
结合上面的图示。
上点,就是边界上的点,不管它是开区间还是闭区间,就是说,如果该点是封闭的,那上点就在域范围内,如果该点是开放的,那上点就在域范围外;
内点,就是在域范围内的任意一个点;
离点,就是离上点最近的一个点,如果边界是封闭的,那离点就是域范围外离上点最近的点,如果边界是开放的,那离点就是域范围内离上点最近的点。) x: K  n, i4 I/ Y4 o- P( A
现在大家都知道边界点了,那接下来就讲一下,边界值分析方法的原则:; {5 ?4 Y& S  X' e( C, F0 S# J
1、        如果输入(输出)条件规定了取值范围,则应该以该范围的边界值及边界附近的值作为测试数据;3 d5 ?+ f6 [, L& |/ F$ i' w( `; D
2、        如果输入(输出)条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据;
3、        如果程序规格说明书中提到的输入或输出是一个有序的集合,应该注意选取有序集合的第一个和最后一个元素作为测试数据;. P) y9 @) E0 f* V  F
4、        如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试数据。
* H* @' \4 a+ Q, T
举例:
        闭区间[50,100]的上点为50和100,离点是49和101,在域范围内的都是内点;" C' ~+ O- B, q' r$ X3 C
        半开半闭区间(50,100]的上点为50和100,离点是51和101,在域范围内的都是内点;
        开区间(50,100)的上点为50和100,离点是51和99,在域范围内的都是内点;# v: N9 |; K% x1 I- u. i
测试用例略。在下面的流程分析法里,我会将等价类、边界值和流程分析法一起举例,一起写测试用例。
3、判定表法: g; ~- c  y( A
        现在我们先讲判定表法,再讲因果图法,因为判定表法经常和因果图法一起用,先进行因果图分析,再结合判定表,最后完成测试用例。
        在多个条件决定多个动作,并且每个条件的取值只有两种情况下,我们就可以采用因果图和判定表方法。/ b2 l8 g. H% p1 E9 V
        注:条件和动作之间的逻辑关系是明确的,可以直接使用判定表法;如果条件和动作关系不明确,则要先使用因果图法。: o& E! M: r5 W6 q" w% d
        判定表通常由四部分组成,如图:

每一个部分之间用双线或粗条线分开,左上部称条件桩,它列出决定一组条件的对象;右上部称条件项,它列出各种可能的条件组合;左下部称动作桩,它列出所有的操作,右下部为动作项,它列出在对应的条件组合下的动作。2 |. e  W  S7 Q7 z4 [
表的右部一般有很多列。3 o' J/ }( j4 u5 u) \  S
举例:. k& w- z% W; ~5 ]- h
订购单的检查。如果金额超过500元,又未过期,则发出批准单和提货单;如果金额超过500元,但过期了,则不发批准单;如果金额低于500元,则不论是否过期都发出批准单和提货单,在过期的情况下还需要发出通知单。
将这段需求进行判定表分析,可以得到如下判定表。
金额- D6 Y9 R# N/ U
>500        >500        <=500        <=500
状态        未过期        已过期        未过期        已过期' D3 `, y' F7 |5 @9 ?0 T5 F
发出批准单
O                O        O
发出提货单        O                O        O
发出通知单                                O, e; ^* `3 g  ]; L6 L
在很多情况下,一个判定表写出来以后,是很复杂的,我们需要对其进行简化。如果表中有两条或多条规则具有相同的动作,并且其条件项之间存在极为相似的关系,我们就可以将其合并。
比如表中,条件:>500、未过期;<=500、未过期。这两个条件项导致的结果是一样的,并且条件项之间很相似,我们就可以将它们合并。结果如下:
  v- D1 ^# J/ L7 F# i. Q$ V
金额! A6 {- |# j# V) n
        >500        <=500
状态        未过期        已过期        已过期
发出批准单
O                O9 _2 u4 l9 q! }* @( ^% E+ P. B
发出提货单        O                O
发出通知单                        O9 r# _1 n5 A- j& X# E
这里在引入一个概念,规则,以上判定表里,右部的每一列(条件项和对应的动作项)都是一条规则。以上判定表里每一条规则都可以转化为测试用例。
用例:- P  X0 J: G( }% |
1、
测试用例编号        ORDER_ST_CHECK_001
测试项目        订购单的检查
测试标题        状态为未过期0 O+ x; v& d: @- j3 u4 S
重要级别        高
预置条件        无
输入        499
操作步骤        1、        输入金额:499* X7 v( d2 \3 [2 r/ {" I
2、        选择未过期
3、        点击确定
预期输出        发出批准单和提货单
2、
测试用例编号        ORDER_ST_CHECK_0029 O9 e/ N* d4 S
测试项目        订购单的检查5 s; S. P/ V% I; p! d7 s, ?+ T/ F
测试标题        金额>500,状态为已过期! K  u( Y- L( c4 ]9 _# U8 w
重要级别        中
预置条件        无! L3 M) i7 ^- \% x
输入        5011 x; r: w( K: Y* L6 g
操作步骤        1、输入金额:501
2、选择已过期, K8 M7 @- z3 W& e" m1 f9 \
3、点击确定
预期输出        批准单、提货单和通知单都不发出
3、
测试用例编号        ORDER_ST_CHECK_003
测试项目        订购单的检查9 Q, B& S) W: M/ }/ ^
测试标题        金额<=500,状态为已过期6 \1 |9 z4 M4 z8 |7 q7 ^0 n. K, E! _
重要级别        中9 [0 O! A1 {& Q
预置条件        无
输入        499
操作步骤        1、输入金额:4995 R, x% d) J/ n* ~! B+ s
2、选择已过期
3、点击确定
预期输出        发出批准单、提货单和通知单
& ]* i8 m6 F* i0 t6 d
4、因果图法" e* {- N5 g! l9 s- q
接下来我们讲因果图法。前面说过在多个条件决定多个动作,并且每个条件的取值只有两种情况下,我们就可以采用因果图和判定表方法。% @" b4 C0 F; R- B0 s" x1 m
因果图法就是从程序规格说明书的描述中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转换为判定表,最后为判定表中的每一列设计一个测试用例。) G+ G* z) h% R1 i5 Y
首先我们来了解一下因果图的基本符号,我会在边上加些注解以帮助大家理解。- G# s3 l! a, v

接着我们讲一下使用因果图法的步骤:4 Z, Y) ]# B3 X: J' t
1、根据程序规格说明书描述的语义内容,分析并确定“因”和“果”,将其表示成连接各个原因与各个结果的“因果图”。需要注意的是,由于语法或环境的限制,某些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,需要在因果图上使用若干个约束符号来标明约束条件;
2、将得到的因果图转换成判定表;4 ^4 E% E( l8 B
3、为判定表中每一列所表示的情况设计一个测试用例。* m2 m, W* |2 S# y
对于较为复杂的问题,这个方法常常是十分有效的。具体我们来举个例子来讲,可以更好的理解。
举例:
以中国象棋中马的走法为例子,具体说明:2 A) ?( J& c) ^6 ]3 s" q. W/ p
1、如果落点在棋盘外,则不移动棋子;2、如果落点与起点不构成日字型,则不移动棋子;3、如果落点处有自己方棋子,则不移动棋子;4、如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;5、如果不属于1-4条,且落点处无棋子,则移动棋子;6、如果不属于1-4条,且落点处为对方棋子 (非老将) ,则移动棋子并除去对方棋子;7如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。
对说明进行分析,得到原因和结果:5 p6 _+ e' y7 E: T
原因:, j$ r% z- {' t
1、        落点在棋盘外;
2、        不构成日字;( `" o4 f3 _$ w5 Q% O( a# a
3、        落点有自方棋子;
4、        绊马腿;" v% t/ m) D9 ?: ]
5、        落点无棋子;
6、        落点为对方棋子;
7、        落点为对方老将。) b' {/ L& I1 B% N% u
结果:
1、        不移动;
2、        移动;! F  b8 j5 U6 a! S
3、        移动己方棋子消除对方棋子;
4、        移动并战胜对方。
根据分析出来的原因和结果,我们可以画出因果图,如下:2 X+ I; |. M' q
# p- `: F; ~$ o+ m: \
画得不好,比较乱,大家请见谅。我只加了些必要的约束条件,还有一些没有加,不过后面会讲的。
11这个结点称做中间结点,是为了让因果图的结构更加明了,简化因果图导出的判定表。分析得出以下两个结论。只有1、2、3、4都不成立时,产生11,跟 5、6、7结合分别得出22、23、24三个结果;不管5、6、7哪个成立,只要1、2、3、4有一个成立,就产生结果21;再加上落点有自方棋子的状况。可以得到判定表如下:
条件        1        1        1        1        0        0        0        0        0        0        0        0        0        0        0        0        0        0
        2        0        0        0        1        1        1        0        0        0        0        0        0        0        0        0        0        0
        3        0        0        0        0        0        0        1        1        1        1        0        0        0        0        0        0        0
        4        0        0        0        0        0        0        0        0        0        0        1        1        1        0        0        0        07 |+ O- D# m9 Q: }
        5        0        0        0        1        0        0        1        0        0        0        1        0        0        1        0        0        0
        6        0        1        0        0        1        0        0        1        0        0        0        1        0        0        1        0        05 o# w# v) l7 ~
        7        0        0        1        0        0        1        0        0        1        0        0        0        1        0        0        1        0
中间结果        11        0        0        0        0        0        0        0        0        0        0        0        0        0        1        1        1        1
结果        21        1                        1        1        1                                1        1        1        1        0        0        0       8 K8 v" m0 G& }1 Y2 m
        22        0                        0        0        0                                0        0        0        0        1        0        0       
        23        0                        0        0        0                                0        0        0        0        0        1        0       
        24        0                        0        0        0                                0        0        0        0        0        0        1       
进一部分析,将各种不可能产生的组合情况,取消掉,我用灰色表示出来了。这些都是之前没有写的一些约束条件导致的。比如落点在棋盘外,那么落点就不可能在对方棋子上了。
最后将判定表内的规则转换成测试用例。5 ^2 V* z2 d% s9 R% w* U8 G, N
; _$ Z- V3 j$ A/ b
$ P3 W0 u+ z7 l; w

! a2 K( H" V4 ?

用例:
1
测试用例编号        CHINESECHESS_ST_MOVE_MA_0017 m1 ?! d8 ], D- B" |+ R; z6 ~; B8 }
测试项目        象棋马的移动3 N& g  j+ b& E% i4 m. _
测试标题        条件1-4不成立,移动马,落点是对方老将
重要级别        高
预置条件        无% j% W. Y* G! l9 @
输入        点击马,点击棋子的落点
操作步骤        1、点击自方马;
2、点击对方老将。# u! b, e, _0 D7 o/ y' h; c5 S7 D, w+ l
预期输出        移动棋子并提示战胜对方。! n2 s- [; G+ y% w
23 c+ G# K, T3 L2 G% a2 S  y
测试用例编号        CHINESECHESS_ST_MOVE_MA_002& q; a  L$ [3 S
测试项目        象棋马的移动
测试标题        条件1-4不成立,移动马,落点是对方棋子(非老将)+ t* S7 i7 B3 ]% ^
重要级别        中  P) J% }# M3 U. n
预置条件        无
输入        点击马,点击棋子的落点; z& c* e8 w# n6 c1 d
操作步骤        1、点击自方马;
2、点击对方棋子。
预期输出        移动棋子并除去对方棋子。
3) A0 W0 M: }! r' _- S
测试用例编号        CHINESECHESS_ST_MOVE_MA_003
测试项目        象棋马的移动! @# x2 g' Y' L
测试标题        条件1-4不成立,移动马,落点无棋子& b& x9 O2 f. ^# ?. A' k3 D0 `
重要级别        中
预置条件        无
输入        点击马,点击棋子的落点8 G# b. k+ ]1 L* S" k% l
操作步骤        1、点击自方马;6 H! c9 l7 I5 w+ L- w$ @0 l
2、点击无棋子的落点。
预期输出        移动棋子。. H4 J4 f( \* F: r: {
4
测试用例编号        CHINESECHESS_ST_MOVE_MA_004
测试项目        象棋马的移动3 C  t* M1 n4 c7 n/ A
测试标题        绊马腿,落点为对方老将
重要级别        中
预置条件        无
输入        点击马,点击棋子的落点) m, _+ I4 U2 w' G
操作步骤        1、点击自方马;1 R2 }2 i  B; r* s, P( q
2、点击对方老将。2 ^- A1 ]4 v$ z9 B  F  B
预期输出        不移动棋子。
  v8 S. b7 `& M

5/ n4 ^% J" H. G8 S
测试用例编号        CHINESECHESS_ST_MOVE_MA_0051 t4 |, R- s" i; Z& e! a2 P7 @7 a
测试项目        象棋马的移动
测试标题        绊马腿,落点为对方棋子(非老将), \5 Y7 D5 m( U( p5 h# S7 B) h- d
重要级别        中
预置条件        无# a7 @9 e) t4 }% J! d/ P9 D% C& Y
输入        点击马,点击棋子的落点
操作步骤        1、点击自方马;% B; n# h- x' b% G5 l& ]; L$ w$ T
2、点击对方棋子。
预期输出        不移动棋子。2 E' \3 [' Y- x* l2 }
6
测试用例编号        CHINESECHESS_ST_MOVE_MA_006+ V+ I$ u) E, v5 m/ I6 d1 u3 Z' v
测试项目        象棋马的移动
测试标题        绊马腿,落点无棋子, f0 t/ |; v, s0 g, R: ~
重要级别        中
预置条件        无
输入        点击马,点击棋子的落点; i% }/ s& N. Q: k% b7 \
操作步骤        1、点击自方马;, G! v+ C* p" f5 t! v8 ~
2、点击无棋子落点。" a% f& n' l1 D6 m8 V
预期输出        不移动棋子。
7. H% ^, F& |  U' g5 x& W
测试用例编号        CHINESECHESS_ST_MOVE_MA_007
测试项目        象棋马的移动- N  h! x. W) o; r  [
测试标题        落点为自方棋子" @' g7 h2 \0 ~3 i: s
重要级别        中  v3 W1 ^. q! \+ }, c5 ^5 P; d
预置条件        无
输入        点击马,点击棋子的落点
操作步骤        1、点击自方马;
2、点击自方棋子。
预期输出        不移动棋子。8 a- p; K3 @2 e& x: w
8" N9 Y' a, U" ^( }) e- E
测试用例编号        CHINESECHESS_ST_MOVE_MA_008
测试项目        象棋马的移动
测试标题        不构成日字,落点为对方老将
重要级别        中2 K9 w, J1 q* r/ v/ W* `4 \
预置条件        无3 B& m; q! {6 T! ^* E" a
输入        点击马,点击棋子的落点
操作步骤        1、点击自方马;* }2 M+ R2 `' S, B7 j
2、点击对方老将。
预期输出        不移动棋子。6 T1 K' M/ S8 i! `0 I
7 i( W2 P3 U9 @8 A2 n6 l. v1 V2 W
/ O( u; W# D+ Y: F; V

95 B) o3 @/ V% M, R+ V
测试用例编号        CHINESECHESS_ST_MOVE_MA_009# H6 Y, a* t+ O5 b5 F
测试项目        象棋马的移动
测试标题        不构成日字,落点为对方棋子(非老将)
重要级别        中
预置条件        无
输入        点击马,点击棋子的落点, w5 ?/ m( S% u7 V  |
操作步骤        1、点击自方马;
2、点击对方棋子。! {( u4 F5 [) m* R3 D' M
预期输出        不移动棋子。
10! i! Z! v& A3 m+ |1 u' L- y' W
测试用例编号        CHINESECHESS_ST_MOVE_MA_010
测试项目        象棋马的移动
测试标题        不构成日字,落点无棋子/ a- C8 C' I8 h% p3 P
重要级别        中+ `9 V# M2 h6 O, o6 h
预置条件        无
输入        点击马,点击棋子的落点9 m- @: N# s8 l: z; O# n; W
操作步骤        1、点击自方马;
2、点击无棋子落点。0 ^* T! H0 ]. G% m
预期输出        不移动棋子。
114 a' ?( d) U& i3 i0 n. |, r
测试用例编号        CHINESECHESS_ST_MOVE_MA_011
测试项目        象棋马的移动
测试标题        落点在棋盘外
重要级别        中& p  @- l) I: h) E
预置条件        无8 S- @3 ^; ~7 D& e2 g1 w. `$ y
输入        点击马,点击棋子的落点# R! z+ V  D6 b* I
操作步骤        1、点击自方马;' Z5 H0 H& G- o  j
2、点击棋盘外。
预期输出        不移动棋子。
5、状态迁移图法. y+ `* Q( B- e
许多需求用状态机的方式来描述,状态机的测试主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,可能不可能产生非法的状态转移等。/ [% a6 m$ y- X4 p9 I$ m  O- F
构造能导致状态迁移的事件,来测试状态之间的转换。9 q, b! {1 c7 A8 M" b
状态迁移图的步骤:! N) a7 K9 m" M  [( B) t. s
1、        画出状态迁移图;
2、        列出状态——事件表;
3、        得到状态转换树;
4、        推出测试路径;
5、        根据测试路径编写测试用例。0 S) O, p) S8 w
下面我们结合一个例子来理解。
举例:# M$ H% b3 S  ~, l* N/ I
手机中MP3播放功能状态-事件表如下,请用状态迁移法设计用例。其中没有选择MP3曲目时不能按任何键,并且当MP3曲目在起点时不能按R键,当MP3曲目在末端时不能按P、F键。
按键        Idle        倒        播放        进        录音
R(倒)        倒        ---        倒        倒        ---
P(播放)        播放        播放        ---        播放        ---
F(进)        进        进        进        ---        ---- U, L5 S& I* m- |  q7 |7 z
RC(录音)        录音        ---        ---        ---        ---  s( N( A$ r5 O3 D6 p  `
S(Idle)        ---        Idle        Idle        Idle        Idle, G* o9 U/ V' Y
这里我给出了状态-事件表,为了能更清楚的说明问题,没有有复杂的文字描述出来,一般需要先从需求中提取信息,画出状态图,再得到状态-事件表。
画出状态迁移图:


图画得不好,原则上应该没有交叉的线,这里画得比较乱了,大家见谅。7 N( |6 j6 ~* }1 t- o
得到状态-事件表如下:
按键        R(倒)        P(播放)        F(进)        RC(录音)        S(Idle)
Idle        倒        播放        进        录音        ---/ ~( N3 x5 z  q( n8 N
倒        ---        播放        进        ---        Idle

根据状态-事件表,得到状态树:& X$ T! u3 ?- L& A
" v7 d2 e& b2 W9 f
每一条路径都是一个测试用例。( Q1 N; }2 Y8 D, W5 n6 W! {1 L) e
用例:
18 W* _- g1 i% t0 X
测试用例编号        MOBILE_ST_MP3_ PLAY_0018 y0 w. L( E+ K2 S' i
测试项目        播放器状态转换
测试标题        在Idle状态时,先倒后播放
重要级别        高. `6 u) l8 y1 o' [
预置条件        已选定MP3曲目,并且不在起点
输入        选定曲目
操作步骤        1、按R键;
2、按P键。
预期输出        曲目先倒带后正常播放。
2  c( `1 g" N* t2 d0 N
测试用例编号        MOBILE_ST_MP3_ PLAY_002
测试项目        播放器状态转换9 @: e( _0 R, y4 [7 M; G
测试标题        在Idle状态时,先倒后快进  O, |# K3 s$ _* e5 [' @1 f
重要级别        中4 ~8 X' b5 \: i; S& T
预置条件        已选定MP3曲目,并且不在起点
输入        选定曲目
操作步骤        1、按R键;. |5 u- X; ]( \: v, r: R) g7 x
2、按F键。
预期输出        曲目先倒带后快进。: Z& |1 [1 P# k) b8 b4 w; C
  }( L( X5 S" g3 r( e" X1 Z' H

3
测试用例编号        MOBILE_ST_MP3_ PLAY_003
测试项目        播放器状态转换
测试标题        在Idle状态时,先倒带,然后再停止
重要级别        中0 X- ?: `, E  B  C& f
预置条件        已选定MP3曲目,并且不在起点9 K* }  X9 T! @5 M
输入        选定曲目& \- y: t) \$ D- V2 {( r
操作步骤        1、按R键;5 z; |$ e1 B+ I" H( Y# _
2、按S键。
预期输出        曲目先倒带后停止。
4* S' ^% i" y: B+ V6 Y! {' d
测试用例编号        MOBILE_ST_MP3_ PLAY_0042 E, j1 W& u$ ~/ i0 ?' f
测试项目        播放器状态转换
测试标题        在Idle状态时,先播放后倒带- j1 v5 u0 i( X
重要级别        中
预置条件        已选定MP3曲目,并且不在末端
输入        选定曲目
操作步骤        1、按P键;
2、按R键。
预期输出        曲目先正常播放后倒带。
5
测试用例编号        MOBILE_ST_MP3_ PLAY_0059 G5 ^# }  J. e; q( U, F
测试项目        播放器状态转换
测试标题        在Idle状态时,先播放后快进! R, }6 I. O" \- C5 I4 O
重要级别        中
预置条件        已选定MP3曲目,并且不在末端
输入        选定曲目
操作步骤        1、按P键;, X3 R- s1 o- [5 ^. V
2、按F键。9 L# g/ M' |; Y9 ?0 J
预期输出        曲目先正常播放后快进。
6
测试用例编号        MOBILE_ST_MP3_ PLAY_006* L/ P# @( J* z0 l" ^8 Y( c
测试项目        播放器状态转换
测试标题        在Idle状态时,先播放后停止
重要级别        中
预置条件        已选定MP3曲目,并且不在末端" _4 E: R  _9 s6 ]# Q
输入        选定曲目" s- b7 K5 W; d* ~7 L
操作步骤        1、按P键;
2、按S键。
预期输出        曲目先正常播放后停止。) X: M6 m7 O% A
: n# k* ~4 m5 j# z3 p1 n" K
( e" D1 x  u& d2 g
71 D# ~0 I2 u6 ]4 M6 }9 A+ Y- T: a
测试用例编号        MOBILE_ST_MP3_ PLAY_007, R5 p" f0 f6 Q; ^8 |. Y3 a
测试项目        播放器状态转换" t+ w$ h/ b! }$ E* w. q
测试标题        在Idle状态时,先快进后倒带2 c- Y6 t+ w0 W& f1 e7 `
重要级别        中* D* h3 O" d8 K+ o
预置条件        已选定MP3曲目,并且不在末端1 `0 B: S# l4 n0 T9 L' N; g8 [
输入        选定曲目
操作步骤        1、按F键;, n+ C4 A/ I+ p; F& E
2、按R键。
预期输出        曲目先快进后倒带。
8
测试用例编号        MOBILE_ST_MP3_ PLAY_008
测试项目        播放器状态转换, r# d& Q; f) O
测试标题        在Idle状态时,先快进后播放7 d! ~& X! Y7 c1 X/ h+ r) N
重要级别        中; L" R1 l/ p/ b) U7 V
预置条件        已选定MP3曲目,并且不在末端+ l3 W. b6 y- [9 X- b% k( l
输入        选定曲目, C% h' A# h" Z5 L9 l4 Y
操作步骤        1、按F键;. _  H; K  m' G  X6 j3 [
2、按P键。
预期输出        曲目先快进后正常播放。$ f6 R4 @6 V# [, L5 ~
90 q+ \4 y" F0 W& i
测试用例编号        MOBILE_ST_MP3_ PLAY_009% X9 X% \+ k3 V. @; H  K1 \  p
测试项目        播放器状态转换
测试标题        在Idle状态时,先快进后停止/ s' I1 B: y4 ]! h- L, u9 J
重要级别        中
预置条件        已选定MP3曲目,并且不在末端
输入        选定曲目; L( N) a/ D4 _7 v0 b2 ]& {+ c
操作步骤        1、按F键;1 W: I) v' L6 V! f
2、按S键。5 x: R8 ]4 Z% T2 t; W& |- P
预期输出        曲目先快进后停止。
10
测试用例编号        MOBILE_ST_MP3_ PLAY_0102 n$ Q0 B, n5 J: d6 b" Q0 e
测试项目        播放器状态转换
测试标题        在Idle状态时,先录音后停止
重要级别        中4 h8 f& s( S, D9 F4 b$ |  |
预置条件        已选定MP3曲目。4 @* f  g. X; |& C) R  l$ T
输入        选定曲目( b* B* C4 I" z4 o8 ~2 A& `
操作步骤        1、按RC键;
2、按S键。
预期输出        曲目先录音后停止。+ b8 O1 L; R" S/ s" A  {6 z
6、流程分析法
流程分析法是将软件系统的某个流程看成路径,用路径分析的方法来设计测试用例。根据流程的顺序依次进行组合,使得流程的各个分支都能走到。
这里拿一个最简单的流程来做分析。用户登陆操作的流程。这个大家都应该很熟悉的,需求如下(这里只简单举个例子说明用例设计方法,具体需求应该还要详细。):3 c& c' R4 U2 l8 P# T9 Q5 B
1、        用户执行程序,弹出登陆对话框;% G: O  a% c5 G' B$ `. O
2、        用户输入用户名,格式要符合如下规范:
a.        2-16个字长,英文或数字;
b.        用户名中不可出现空格符;7 c6 U+ ^5 W, |/ A) C; J" Q: X* q
c.        可以使用这些字符:“横线-”,“下划线_”,“点.”;7 D! O% k# A6 {. x$ V1 p
d.        不可以使用“&、%、$”等其它字符。* v+ @" S) N9 I- l5 Y% X7 K
用户名出错处理:  v' T* e! l3 y; M
        1)、用户名为空:提示用户:“请输入用户名!”;! q: ^" s; c1 n! N, S6 i* R
        2)、用户名错误:提示用户:“用户名错误,请重新输入用户名!”。! e. a( \6 O- b! Q# B6 |
3、用户输入密码,格式要符合如下规范:9 Q9 O( N5 A5 X- Q0 C
                a. 密码为字符串;
                b. 字符串为0~9之间的阿拉伯数字组合,密码长度为6位。
        密码出错处理:! a2 M! h- Y3 P! ~5 Z
        1)、密码为空:提示用户:“请输入密码!”;
                2)、密码错误:提示用户:“密码错误,请重新输入密码!”。
4、确定登陆,系统验证用户登陆;+ N" p5 ]8 K2 k0 `$ X
5、取消登陆,退出系统。& G" ~' v( q& R6 u
提取需求信息,得到流程图:
' [% b0 N$ Y1 X
( f& h8 l0 i  A  ]. b, q6 U1 |
4 u4 R% d2 y1 ?9 \1 u

: {8 x& |; h+ ~6 S
在流程图里,我们将用户和系统的操作用不同的颜色区分开来。用户部分,就相当于是用例的输入;系统部分就相当于是用例的输出。, C5 @$ V: k0 G5 S7 M; K$ t2 }
流程图中有很多路径,每一条路径都可以设计测试用例,首先要列出一条基本路径(优先级最高)的路径,进行测试分析。
基本路径:启动程序 -> 输入用户名密码 –> 进入系统
任何测试用例都会采用这条基本测试路径,只是测试结果不同。下面我们来设计测试用例,首先进行等价类的划分:
输入条件        有效等价类        无效等价类
用户名        2-16个字长,英文或数字或“横线-”、“下划线_”、“点.”;
        字长为0、1和大于16;空格;“&、%、$”等其它字符;
密码        字符串为0~9之间的阿拉伯数字组合,密码长度为6位        长度不是6位的0~9之间的组合;含有不是阿拉伯数字的字符;
再进行边界值分析9 @/ I7 g. `4 b) }
输入        内点        上点        离点
用户名        Abc、ab-12_34.ABmU15        Qq、16ab-12_34ABmU16        P、17ab-12_34.ABmU17& F( b# ]' o5 Q( i8 \
密码        000001、999998        000000、999999        11111、0000000
可以看到,我在进行边界值分析的时候,内点和上点已经覆盖了所有有效等价类。下面根据等价类测试用例设计原则和边界值分析法设计测试用例的原则,进行用例的编写。& a0 v  S8 @% j6 S
注:用例设计完后,对照流程图分析是否有遗漏的路径没有覆盖到。如果有,设计用例覆盖这些路径。+ G9 }$ k# T5 b. k0 E4 U- H
, z  L9 _, I: C# y
用例:8 ]" S2 `- t% J, p& g
1、
测试用例编号        XXXX_ST_XXX_LOGIN_0019 Z4 O  \6 x( A$ y& E$ y. z
测试项目        LOGIN
测试标题        输入合法用户名和密码,按确认,内点小
重要级别        高: T  v1 {- u) K0 _5 s
预置条件        系统数据库内存在该用户及密码8 N* q' r5 O) s+ `
输入        Abc,000001* `3 y( s0 F* ~' D' o' F  Y
操作步骤        1、启动系统;
2、输入用户名:Abc;
3、输入密码:000001;  x$ a% h3 |, g/ {0 a2 S
4、点击确定。
预期输出        进入系统。$ W/ A9 d! `6 J* R
5 w  l" B% Y. w) w3 v

; R: C; V, p! \' n8 q7 F  M2 \
  N4 I9 h  t* p4 W8 R) K8 p' ]


. h- ]! K4 U* I( y& [2 r7 Q. m! M
9 q: F! d" x3 `6 A& b$ N
2、. ]: G1 Q  r) V% k
测试用例编号        XXXX_ST_XXX_LOGIN_002+ T( L1 h9 X) }! w$ ?
测试项目        LOGIN2 `- X% B5 m* C  I0 x( |
测试标题        输入合法用户名和密码,按确认,内点大
重要级别        中2 y1 T* W& ?+ C
预置条件        系统数据库内存在该用户及密码, L' k3 @: K+ T5 X) {3 ^- m  Y
输入        ab-12_34.ABmU15,9999988 X, n8 a- o! r7 x$ E3 r; `
操作步骤        1、启动系统;& T9 r% T5 l; k! Q, J6 o! H
2、输入用户名: ab-12_34.ABmU15;% u, V. P% d. n/ w, ]
3、输入密码:999998;
4、点击确定。
预期输出        进入系统。
3、! q5 ]7 p+ n! f8 ?
测试用例编号        XXXX_ST_XXX_LOGIN_003
测试项目        LOGIN3 z0 j6 ?& }1 O% S( s9 B. o+ B
测试标题        输入合法用户名和密码,按确认,上点小
重要级别        中
预置条件        系统数据库内存在该用户及密码
输入        Qq,000000
操作步骤        1、启动系统;3 Z1 X: ~+ P) B
2、输入用户名: Qq;) d/ u! p7 h. t; ^
3、输入密码:000000;
4、点击确定。
预期输出        进入系统。0 |! |9 J$ f2 u* f4 b1 w2 H3 M
4、
测试用例编号        XXXX_ST_XXX_LOGIN_004
测试项目        LOGIN
测试标题        输入合法用户名和密码,按确认,上点大
重要级别        中
预置条件        系统数据库内存在该用户及密码
输入        16ab-12_34.ABmU16,999999& z) z1 N' i7 u8 ]# ], a
操作步骤        1、启动系统;
2、输入用户名:16ab-12_34.ABmU16;
3、输入密码:999999;- V! I- O6 d/ @( Y8 r0 n  Y# C
4、点击确定。- e1 P2 p7 B9 r+ r) G* m
预期输出        进入系统。

% O0 l; _; \9 c8 ?& J0 H
9 {* `/ _- d9 E) D2 @* j) Z- w
2 H1 [' t4 H6 y9 M) I! j% \/ D

5、
测试用例编号        XXXX_ST_XXX_LOGIN_005! `# t  L" Z; }! F0 t( I( ~
测试项目        LOGIN
测试标题        用户名为空8 Q, ~! @$ D9 J/ V+ b( }9 l1 w
重要级别        中
预置条件       
输入        “”,0000002 b1 U5 Q* N6 n
操作步骤        1、启动系统;/ N" g9 S% ^- Q3 c% u
2、输入用户名: ;
3、输入密码:000000;* r( c5 J6 J; {% ?: |
4、点击确定。% Q- C! m- D' O& h7 n0 A' {
预期输出        提示用户“请输入用户名!”。' C% E$ ]. y8 n, @7 F7 f  }
6、
测试用例编号        XXXX_ST_XXX_LOGIN_006: M! c- F6 V- W# |. S' u
测试项目        LOGIN
测试标题        用户名字长为19 }/ O% I3 m0 P' m5 [4 z
重要级别        中+ P& T3 h, e1 o/ {8 n$ k* @* [# N
预置条件         ]3 ?' F3 g  C( t; j$ i9 P
输入        P,000000/ f3 B& I. F# k. D6 Q4 U
操作步骤        1、启动系统;- G0 j/ r( l: R# O( g
2、输入用户名:P;0 `+ _/ h. A7 y/ B6 q$ h
3、输入密码:000000;
4、点击确定。: G, {0 _1 y! o% Y* ^
预期输出        提示用户:“用户名错误,请重新输入用户名!”. @% m/ k1 ?" _# L- A
7、$ C0 x% H; l! p2 q- q
测试用例编号        XXXX_ST_XXX_LOGIN_007
测试项目        LOGIN
测试标题        用户名字长为17( g( ?: _" \6 E8 _/ ^
重要级别        中' D  \' Y" {; [. }
预置条件       , ]4 ~7 ~+ o9 |! K% k! z# E
输入        17ab-12_34.ABmU17,000000* c/ i! I/ t4 W; x+ K, u$ x0 r# z
操作步骤        1、启动系统;! k- d2 s( l$ n" G( K0 ?/ K( O% k
2、输入用户名:17ab-12_34.ABmU17;
3、输入密码:000000;& V- K0 k0 p  t
4、点击确定。
预期输出        提示用户:“用户名错误,请重新输入用户名!”) P) R# H* e7 p! |3 p; S) g

7 P; o# V  ]1 g5 J, W! u


* m# T" X/ m, Y4 j: e7 c

8、
测试用例编号        XXXX_ST_XXX_LOGIN_008$ ~: ]$ `( n, {- z
测试项目        LOGIN* X# b" ^5 R; y8 t/ E/ q0 @7 }# }
测试标题        用户名含有空格
重要级别        中
预置条件       
输入        123  456,000000& l& s% W7 b/ {! G) o% E! f& v
操作步骤        1、启动系统;% @: X( o5 z  G/ h
2、输入用户名:123  456;
3、输入密码:000000;2 x/ L( B7 k" k2 W
4、点击确定。
预期输出        提示用户:“用户名错误,请重新输入用户名!”/ i$ g) E( L( \( f" j$ ^
9、8 }; g5 u! y$ l& ?8 Y/ U8 T1 M  }
测试用例编号        XXXX_ST_XXX_LOGIN_009
测试项目        LOGIN
测试标题        用户名含有“&、%、$”等其它字符" k, s5 C& T2 o& X1 z
重要级别        中
预置条件       
输入        123$4,000000$ H2 @& ~: ?7 j1 p! n
操作步骤        1、启动系统;
2、输入用户名:123$4;+ Z4 v% Y( Y" P+ F# v3 J, e
3、输入密码:000000;/ i# X! r# E" B" l/ `' q. O0 l' b" S1 ^
4、点击确定。
预期输出        提示用户:“用户名错误,请重新输入用户名!”

TAG:

xiaoming00的个人空间 引用 删除 xiaoming00   /   2012-09-16 09:24:24
 

评分:0

我来说两句

Open Toolbar