靠着 51testing 论坛管理员“风在吹”同志和一位不知名MM的辛勤工作,我的 blog 终于完成 CNBlogs 和 51testing-blog 的同步。亲爱的同志,我要请你们吃饭 ^_^
用例驱动的需求过程实践
上一篇 /
下一篇 2007-06-27 17:39:33
/ 个人分类:10.RUP学习笔记
用例驱动的需求过程实践 51Testing软件测试网X._z8AIB sfM
--------------------------------------------------------------------------------
:U(II U,mU5a ~0 51Testing软件测试网&@1s+]B|9t
来自:计算机世界网 作者:徐锋 [2004/01/05] 51Testing软件测试网4\g;J]wv)bhH
一、需求矛盾
G Y5Q1I5X*hJHW0 根据CHAO的权威统计,虽然自"软件危机"提出以来,软件工程方法得到了长足的发展与进步,但在去年的软件项目成功率仍然不足30%,绝大多数的软件项目仍然超进度、超成本。而在这些不成功的项目中,由于需求不清晰、需求不完整等方面的因素,占到了60%左右。
+X8JT/z-p
J7a0 下面的这幅漫画虽然不乏夸张,但却是能够激起我们的深思: 51Testing软件测试网@5Pf i&F1lU BI4n
~l8p(zv051Testing软件测试网.N5_dMKd
#{z.`uu0
.aP{F1Fi"c}a0
b2TIh$W0 根据笔者多年来从事软件需求捕获、分析工作的实践经验,认为造成这一现象的根本原因在于客户与开发人员之间的沟通存在障碍,双方都以自己的角度、自己的专业术语进行沟通,这使得大家并不能够很好地就软件需求达成共识。
r8Q){cbZSj0 由于帮助客户更好地利用信息化工具提高工作效率,是我们软件开发团队的责任,因此我们没有权利让用户理解我们所用的语言,而是反过来,我们有义务去理解用户的语言,站在用户的角度看问题。
D/\H-F#m3g:_b9q,` x0 而事实上,许多开发团队经常抱怨"我们的客户连需求都说不清楚"、"我们的客户对计算机了解太少了"。多年以来,大家都习惯从自己的角度来定义、分析问题,这也就造成了软件行业成为了一个最缺乏信任的行业,我们需要改一下习惯了。
$n6W8U"}S3kvn"X0二、现代需求实践
&IX["_%{g/Q/s0 针对这些现象,许多先贤们开始了实践,并且总结出了一系列优秀的需求实践:51Testing软件测试网cL {,\@y8}
1)Use case:用例分析技术51Testing软件测试网wD(b,|3]h
鼎鼎大名的RUP是这样总结自己的:用例驱动,以体系结构为中心,迭代、增量的开发过程。Use case也伴随着RUP、UML一起名扬天下。51Testing软件测试网vCs1}(v4@9G"a}g
用例用来描绘一个系统外在可见的需求情况,是代表系统中各个项目相关人员(风险承担人,Stakeholder)之间就系统的行为所达成的契约。
.V)E1e&ti;Z7h'S4T02)User Story:用户故事、用户素材
{?;vd$[+{+M;d0 用户故事是Kent Beck在极限编程(XP)方法论中推荐的最佳实践之一。它由客户参与编写,说明他们需要系统为他们做什么,一般用客户的术语写就,三句话左右。51Testing软件测试网Q+u(@_.p_Y
3)Feature:特征
)U1?+B?u+U0 这是特征驱动开发(FDD)方法论的核心实践之一。一个特征就是一个小的,具有客户价值的功能,通常表示为
2qF4]f
\,gEL0
3Zh#DQc4V0
E:k2^/u8v,` D.t
f0
B6XTi^'x#f9w0
_yacUt03.1 参与者,Actor51Testing软件测试网(Th$?$V"S
参与者,定义了用户在系统交互过程中扮演的角色,其可以是一个人,也可以是另一个相关的系统。51Testing软件测试网EKJ
H5cx
3.2 用例,Use case
D'z;xM[9x_e,KW0 用例实例(场景)是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果,一个用例定义一组用例实例(场景)。
sKM] ?
C]7@g0 一个用例应为参与者提供(实现)一个价值。
+R-o\%Y&cz`YQ0
51Testing软件测试网6J,u.[o9TI51Testing软件测试网sfv6xJtE
4`0]
eGhDz5o2]L03.3 事件流 51Testing软件测试网1f;r
G9A|%@
就像类对应于对象一样,一个用例的实例就是使用场景,用例就是对使用场景进行抽象的总结:51Testing软件测试网w!_c1u9o0wg(PQ
1)前置条件:指在用例启动时,参与者(Actor)与系统应置于什么状态,这个状态应该是系统能够检测到的、可观测的;51Testing软件测试网;G0p.V1xG
2)后置条件:用例结束时,系统应置于什么状态,这个状态也应该是系统能够检测得到的、可观测的;51Testing软件测试网Qv0dB*m
3)基本事件流:基本事件流是对用例中常规、预期路径的描述,也被称为Happy day场景,这时大部分时间所遇到的场景;它将体现系统的核心价值;51Testing软件测试网Cz"wIf'Sn&PAX
4)扩展事件流:主要是对一些异常情况、选择分支进行描述。51Testing软件测试网
xJ"rf!Q1?"J.} Y8o
建议大家在编写事件流时,注意以下几点:51Testing软件测试网?,TQ1_:n#Zl&lC)Xy
1)使用简单的语法:主语明确,语义易于理解;51Testing软件测试网ag4W?H-c@[Dn
2)明确写出"谁控制球":也就是在事件流描述中,让读者直观地了解是参与者在控制还是系统在控制;
B|w+@t%v-O'z5w0 3)从俯视的角度来编写:指出参与者的动作,以及系统的响应,也就是第三者的角度;51Testing软件测试网w)d bc
NqTX2C)w
4)显示过程向前推移:也就是第一步都有前进的感(例如,用户按下tab键做为一个事件就是不合适的);
lR8ZE$JJ f f*yw-B0 5)显示参与者的意图而非动作(光有动作,让人不容易直接从事件流中理解用例);
"QY^L0z)NqW0 6)包括"合理的活动集"(带数据的请求、系统确认、更改内部、返回结果);51Testing软件测试网|:r$SJ"hU$dgq
7)用"确认"而非"检查是否":(如系统确认用户密码正确,而非系统检查用户密码是否正确);
a4CR,a&j_/KdC0 8)可选择地提及时间限制;51Testing软件测试网l6C1E1X hj*F|
9)采用"用户让系统A与系统B交互"的习惯用语;
,c)Q%u$f9X E }0 10)采用"循环执行步骤x到y,直到条件满足"的习惯用语。
!Or^8jj^ Z-b0四、Alistair Cockburn眼中的用例分析技术
S5iQ`7U C.i|Hdi0 在使用用例分析技术时,很多人都觉得如何确定用例的粒度是一个难点,而且感觉到用例没有什么规则遵从,甚至有无所适从的感觉。正如Cockburn先生提出的学习用例分析技术的"守、破、离"的三个阶段:51Testing软件测试网{4v8BJ#afP
1)守:练习基本功夫,遵循规则,照章行事;51Testing软件测试网)x aI,jwXXf
2)破:能突破传统,因地制宜地灵活应用; 3)离:超脱任何招式与规则,达到无招胜有招的境界。51Testing软件测试网E+?V^$x`(C&E
但用例分析技术却让第一阶段的初学者感到无法很快地掌握。而其所著"编写有效用例"则想为用例分析技术补充规则,让大家能够更好地掌握。
s._,L AoQ
L0 Cockburn先生在Ivar Jacobson的基础上,做了一些补充:
DC'^#I$x0i0 1)用例是契约,是系统与涉众之间达成的契约。也就是将用例朝着形式化的方向发展;
Bh[OR vg.y0 2) 将用例分成三级:51Testing软件测试网iG)T!i"H^9YO,?
◆ 概要级:包括多个用户目标(显示用户目标运行的语境,显示相关目标的生命周期、为低层用例提供一个目录表);51Testing软件测试网4v[E#`7]$L
e
◆ 用户目标级51Testing软件测试网]%|y.l
TM{8U6X {
◆ 子功能级51Testing软件测试网)^+l6o],x
^
不过,对于Cockburn先生的贡献,用例始祖Ivar大师并未做出任何反应。本人在实践中认为,Cockburn先生的思路与理念对于初学用例分析技术的人来说,十分有价值,使得用例分析技术更具操作性,当其同时也有点画地为牢的感觉,也许Cockburn先生也意识到这点,因此第三阶段就是"离",没有规则,按需灵活使用。51Testing软件测试网)?$NoU$R0At\SR
A
五、如何在开发过程中应用用例分析技术
M7^;L2r
Xx lag0 用例分析技术在需求过程中的地位如下图所示:51Testing软件测试网U/@BC'vEj6G
Oq!X
q#dBl{%n0
r&A!y+u"xT'~ E0
51Testing软件测试网
J?%|5xAy(WL#Z51Testing软件测试网4]
VT'ufJC
对于用例分析技术理解上的两个最大的误区是:
}CARWJ&g0 1)用例分析技术包括了整个需求过程:它只是一个需求分析技术,是在传统的需求捕获技术的基础上使用的,并无法替代这些技术;51Testing软件测试网\?|er7ASC
2)用例分析技术是分解技术:其实用例分析技术是一种合成技术,将在需求捕获中收集而来的零散的特性合成为用例:
9|jT2@{2C0
2O,O3iXdPQ051Testing软件测试网qJ$i#Nf4C
d"|M*[#g/I
g05.1 用例分析前的工作
l3F*l4n-lUDy0R0 在用例分析之前,应该完成以下工作:
aKys y^nY:ke0 1)确定涉众(Stakeholder)和用户类型(命名、简要描述、涉众代表、特征、能力);51Testing软件测试网]/tG%sC3PZ
2)确定涉众代表(命名、简要描述、责任、参与);
"U_HXn,iB9Z`n0 3)在项目中加入涉众代表(访谈、问卷、顾问、评审、角色扮演);51Testing软件测试网[t2_ p5v
4)创建共同的构想(问题定义、系统范围、用户目标、非功能需求à前景文档);51Testing软件测试网 u(|S\N
{Y]Z8P
5)采用传统的需求捕获技术捕获需求;
%F*C }!W'st|0 6)组建用例分析队伍(少量、有问题域知识)。
@E e(l7b#q%_I:tf,q&b05.2 用例分析过程中的注意事项
3I6s)?)_(K%^0 用例分析的过程如下图所示:51Testing软件测试网usJb'ZGV1n1i)B
I \ @
3Xx.^#Z#~7R%_0
gci$T4]na
V/D
?F0
{)V
IsiJ:t(Iu5VAH|0 在使用中要注意:
f5^AM5D0 1)用例源于涉众,请不要自己杜撰出用例;
w6g+Q5t0w:G0 2)用例的事件流的编写过程中,应充分加入团队的参与;51Testing软件测试网9u'u3`5G~` K
3)虽然用例源于涉众,但不要企图向他们直接问"你还有什么用例?这样的问题。 51Testing软件测试网3eLuP p n/Vq8O
vT
_
\
K-| l051Testing软件测试网.]K,]`Y5g@1u:wE0x)}
}Q01\ `It%q0/Z.Q$^8j9`
p8a0Link URL:
http://www.cnblogs.com/jackei/archive/2005/01/20/95056.html
收藏
举报
TAG: