书名:编写有效用例
Rating: excellent!
原书名: Writing Effective Use Cases
原出版社 Pearson Education
作者: (美)Alistair Cockburn
译者:王雷、张莉
出版社: 机械工业出版社
Reviewed by:刘艺 肖成海

实践出真知
--评读《编写有效用例》

在两年前,国内绝大多数企业还在考虑、论证UML的可用性及在实际开发工作中的可操作性的时候,一次偶然的机会看到了Alistair Cockburn的《Write effective use case》部分章节,我为之一振。今天看到了机械工业出版社华章公司引进翻译的《编写有效用例》,我同样感到兴奋不已,并一直认为这是一本系统分析员不可缺少的必备书,也正是这个原因使我再次认真读完了这本书。
《编写有效用例》是获2001年度开发大奖(Productivity Award)的图书。作者Alistair Cockburn凭借自己在面向对象领域的丰富的经验并参考其他专家的良好建议,扩展了典型的用例处理方法,为软件开发人员编写用例提供了一种“基本、具体和实用的”指南。虽然中译本在国内出版有点晚,但这本书作为专门针对用例编写的“圣经”却有着不可取代的地位,值得所有信奉UML的开发人员虔诚拜读。
在软件开发过程中,如何沟通用户和开发人员,构建符合用户需求并可以实现的系统模型是许多大型项目成败的关键。随着系统开发规模和难度的不断增大,系统分析员的特殊功能凸现出来,成为软件开发团队中最重要的角色。实际上,每一位真正的系统分析员都谙悉“软件开发过程(process)是一个将用户需求转化为软件系统所需要的活动的集合。” [RUP01]。显然,软件系统是为服务用户而出现的,系统分析员所起的作用就是将用户需求转变成软件需求的桥梁。需求的本质就是5W的问题,怎样快速、有效、准确、全面的解决他们是每个系统分析员一直努力追求的梦想。直到“用例”概念的提出和广泛使用,才为需求和需求建模等一系列问题提出了一个优秀的解决方案。
在20世纪60年代后期,“用例”的概念首次被Ivar Jacobson提出。进入20世纪80年代后期,用例被引进到面向对象编程领域,就成了系统分析员工作中谈论最多的话题之一。特别是Ivar Jacobson、Grady Booch、James Rumbaugh三位UML鼻祖在RUP(瑞理统一过程)中提出三个关键词——用例驱动、以架构为中心、迭代和增量的[RUP01][RUP02],将用例在软件开发过程中的重要性放到了首位。
尽管“用例驱动”已经是OOA/D(面向对象分析和设计)中的一个重要原则,但在实践中却难一蹴而就。怎样去描述、表达、使用用例,怎样去发现系统涉及的用例,怎样去度量用例的粒度和数量,这些实践中的难题往往使我们又陷入另一个困境中。
由于在国内的软件企业中,真正采用软件工程方法进行开发的并不多,所以我们绝大多数开发人员对用例的了解和使用基本上还停留在理论和实验阶段,以致连有些软件工程专家也在怀疑UML和用例是否可以真正具有实用价值。不久前在《程序员》杂志上引发的一场UML 建模与全程建模的争论就说明了这一点。
 在阅读《编写有效用例》这本书中,你会发现,其实用例作为UML实践的关键一环其本身就对可用性做了最好的论证。在书中大量的实际用例分析的环境中,许多对于用例的误解和怀疑都将不攻自破。因为这本书的实例都是来自实践,字里行间传达着实践出真知的道理。
实际上,当我们看到别人编写的用例时,并不觉得这是一项很难的工作,然而当自己去做这项工作时,往往会发现自己编写的是一大堆用例并没有多少价值。记得Timothy Korson博士曾经在“用例的使用误区”一文[用02]中讲过一个规模很大的项目开发中超过1000名开发人员花50万美元写出12,386个无用 “用例”的可笑故事。其实作者提到的这个真实而可悲的故事,在我们高涨的OOA/D热情下完全可能重现。不少自称为OO高手的开发人员实际上并不知道如何编写有效用例,他们编写用例的经验仅仅来自于对教科书上那些简单例子的模仿。有些人在多次失败后甚至怀疑用例在开发实践中的意义和价值。由此看来,在UML实践中,像《编写有效用例》这种针对性很强的技术指南实在是太少了。在读完了《编写有效用例》这本书之后,如果你还有兴趣对照书中的方法和实例重新研习自己写过的用例,肯定会发现不少这些疑虑、问题都会迎刃而解。这就是《编写有效用例》一书的真正魅力之所在——让读者在阅读和实践中提高编写有效用例的能力。
《编写有效用例》包含了四部分,即“引言”、“用例体部分”、“经常讨论的主题”和“对忙于编写用例人的提示”,每一部分都是由若干章节组成,都有一个主题。下面简单介绍这几部分的内容。
“引言”部分对重要概念作了初步介绍,一开始就提出:“用例是什么样的?”、“何时编写用例?”和“什么样的用例是合法的?”。并以 “在万维网上买股票”、“获取汽车交通事故赔偿”等实例进行了用例说明。接下来并对实例的重用性、适合性等进行了简单的讨论,直接将读者带入一个实际的用例分析的环境中。实际上本书都是以实际的用例来贯穿本书。
  “第一部分,用例体部分”,从第二章到第十一章都是在讨论用例体的内容,在书中阐述了需要掌握的重要概念,以及应编写的模板。用例的每部分内容都用一章的内容来阐述,这些章节是“用例是规范行为的契约”、“范围”、“项目相关人员和执行者”、“三个命名的目标层次”、“前置条件、触发事件和保证”、“场景和步骤”、“扩展”、“技术和数据的变化”、“连接用例”和“用例格式”。在《编写有效用例》对用例进行系统表述之前,大多数在需求工作或书籍,对于需求问题的描述应该是不够系统化,条例不是很清晰,大多数采用角色、场景、道具等这些事物或语句对过程进行简单描述,而不能系统的、全面地对用例进行阐述。
  “第二部分,经常讨论的主题”,在这部分中作者所提及的问题,也是我们做系统分析中经常遇到的问题,也是争论最多、把握最难的问题。这些问题就是“什么时候才算完成了?”、“扩展到多个用例”、“CRUD和参数化用例”、“业务过程建模”、“遗漏的需求”、“用例在整个过程中的作用”、“用例概述和极端编程”和“错误改正”。就像在书中的第一部分阐述的一样“所有的用例不都是需求”,我们需要通过对这些问题的解决和深入的了解,我们需要知道什么时候该有什么样的用例。这样,我们才能在真正意义上做到“从业务到技术的过程”,再从“从技术到业务的过程”,才能逐步完成系统的需求分析,这也是我们逐步掌握UML的系统分析的精髓。
“第三部分,对忙于编写用例的人的提示”,包含了一组提示,针对那些已经阅读完本书,或者已经了解这些资料,想要回顾一下关键概念的人们。这部分包括:“对每个用例的提示”、“对用例集的提示”和“处理用例的提示”。这一部分内容可以说是给人们提个醒,让人们时刻谨记书中提到的原则和方法,让人们在工作中养成一个习惯。
本书的附录是对UML知识的一个总体的介绍和总结,并提出了使用他们的一些原则,这些内容对于那些将要学或正在学习UML知识的人们,无疑是良师益友,让你更快的掌握它、使用它。
附录B给出了书中练习的部分答案。在附录C中对书中的部分名词进行了解释或定义。使人们更能清楚的阅读和理解本书的内容。
本书的所期望读者,作者在书中明确指明,是针对业界的专业人士而著,即有志于系统、需求分析的人们。当然,对于系统分析员,这本书是案头必备的。
另外,从本书所用的实例来看,都是取自实际项目,有很强的实践指导性。更可贵的是这本书每一部分都包括了概念、示例、提示和练习及部分答案。毋庸置疑,《编写有效用例》是一本难得的关于系统需求分析方面的技术指南类书籍。至少我个人认为,该书在我的实际工作中使我受益匪浅。在此不得不再次感谢作者Alistair Cockburn先生和译者王雷、张莉两位老师,以及为引进该书而独具慧眼的机械工业出版社华章公司。

参考资料:
[用01]Alistair Cockburn著,王雷、张莉译,《编写有效用例》机械工业出版社
[用02]Timothy Korson,用例的使用误区 (http://www.umlchina.com/Indepth/Misuse.htm http://www.software-architects.com/)
[高01] 高展,“UML 三大‘硬伤’”,《程序员》,2002/5, (http://www.csdn.net/subject/79)
[高02] 高展,“质疑第一代面向对象建模技术”,《程序员》,2002/9, 2002/10
[RUP01]Ivar Jacobson、Grady Booch、James Rumbaugh著,《统一软件开发过程》机械工业出版社 (http://www.china-pub.com)
[RUP02] Rational Unified Process, Rational Software Corporation, (http://www.rational.com)
[张01]张恂等,“驳UML三大‘硬伤’论”,《非程序员》,第18期, (http://www.umlchina.com)