本书的目的.
太阳下没有任何新东西,所有东西以前都做过了。
——阿瑟·柯南·道尔,《福尔摩斯:血字的研究》
本书的目的是帮助决定和定义新的软件系统需要做什么,建议添加哪些额外的特性,使系统更好或者更卓越。通过详细地指导如何定义一个需求,它将节省你的工作量,使你能更精确。需求模式是技术的结晶,方便将来重用。本书包含37个需求模式,每一种模式描述一种方法,解决在所有系统中反复出现的一种特定的情况,主要关注于商业业务系统。任何系统都只有一小部分属于特定的业务范围,不管系统是做什么的,大部分是反复出现的。这些模式覆盖了一些系统中超过一半的需求(如果添加模式建议的额外需求,会覆盖更多)。
如果你对“需求”这个词敏感,那大可不必;它并不意味着要卷入乏味的文档工作。使用传统分析方法的业务分析师和使用敏捷方法的架构师和工程师都可以使用本书。即使不需要编写正规的需求文档,使用需求模式也可以帮助识别和定义系统需要做什么。
软件系统的需求定义它要解决的问题:它的意图和目的。如果需求遗漏或者做的很糟糕(遗憾的是,这是非常常见的情况)系统就不可能是合适的,不管系统实现得如何完美。相当比例的计算机系统被认为是不合格的;很多甚至没有交付使用;更多的是延期或者超预算。很多研究都表明最大的一个原因就是拙劣的需求定义:没有完全地确定系统的意图和它必须做的事。甚至稍微改进需求就可能节省商业上浪费的大量投资。
为了确保构造更好的系统,需要一系列的改进。几乎各个领域已经(而且将继续)进行大量的投入。但是其中最基础的是需求本身表达什么(同样重要的是不能表达什么)。这点被忽略了,而这正是本书所关注的。如果想定义一种特定类型的需求,需要写什么?如何着手?需要考虑哪些额外需求?其他还有什么应该考虑?本书指出很多方面(大的或小的)的需求经常不充分,不准确,或者完全遗漏,并针对这些问题提出建议。模式本身希望是脚踏实地和实用的多年以来积累的经验(主要来自个人的经验)。
本书是一本参考书,当你需要处理一种特别的情况的时候帮助你摆脱困境——解释需求需要传达的内容,帮助提出问题,指出可能的缺陷,提示额外的需求,提供需求实例,以及提供实用的建议。你不需要通读本书就可以开始使用需求模式。
本书包括很多需求实例(超过400个),很多都可以不用修改就应用于任何系统,其他则可以作为适应读者的各种需要的需求的出发点。这些例子是本书的核心。本书中所有的需求模式来自于实际需求的研究。实际需求中存在的遗漏、含糊以及其他的问题为需求模式提供了很多内容。
本书也指导如何编写需求规范中其他种类的信息(例如,系统范围、假定、词汇表、文档历史和参考)以及如何组织需求规范。本书不做什么
本书不涉及定义需求的流程,分析技术以及需求管理。有很多关于这些方面的优秀的书籍,本书可以作为它们的参考书。不过本书可以很好地单独使用;它包括一节“定义需求速成课程”,(参见第1章)可以帮助没有经验的读者。
本书不关注任何特定的方法论、办法,或者定义软件的工具。不管你选择如何工作,本书都提供相关的建议。本书不是规定:它不会说“你必须这么办。”本书避免使用行话,并尽可能不引入自己的术语。
你不必同意本书的所有观点,也不需要完全照需求模式的建议去做。但是无论是在编写需求的时候还是在之后,如果它帮助你节省了时间,如果它物超所值,那么就值得保留。希望这些模式是足够有用的、引发思考的材料,引导建立更好的系统,从而可以以某种方式证明它是有用的。
谁将从本书中受益
本书的主要读者是涉及决定一个新的软件系统需要做什么的任何人。这就是定义一个软件系统的需求要完成的工作,即使你不喜欢“需求”这个词,或者你不以编写完整的需求规格为目的。为了方便,对任何定义需求的人,我们称之为分析师;他们可能是业务分析师、系统分析师、系统架构师,或者软件工程师;他们可以是业务人员,也可以是技术人员。他们以前可能有定义需求的经验,或者他们没有。他们可以分为两种人:使用传统的分析流程和使用更敏捷一些的方法:
a)业务分析师,或者任何完成这个角色的人。本书不对读者的经验做任何假设:它既适合经验欠缺或经验丰富的业务分析师,也适合以前从没有定义过需求的业务人员和软件工程师。需求模式可以迅速付诸实践。
b)软件架构师和工程师,所负责的系统的需求还没有确定——必须弥补这块空白,不管它使用什么样的方式。无论谁决定系统需要做什么,本书的建议都是有用的。即使组织内部没有专职的分析师,特别是采取敏捷方法开发的组织,它的建议是同样有价值的。敏捷方法不注重(如果有)编写需求规格,但还是要确定系统的功能——无论使用敏捷方法还是传统的方法,本书中的需求模式提供同样的帮助。特别是在极限编程中,需求模式可以帮助编写用户故事,解释用户故事,并为开发人员建立良好的实践规则。熟悉设计模式的软件架构师和工程师应该很容易接受需求模式。
本书的其他读者:
c)任何被要求评审需求规格的人,这包括技术、管理、销售人员以及新系统的用户团体。本书帮助评审人员判断规格的质量和完整性,以及发现遗漏。
d)实现需求的软件开发人员,每个需求模式都包括“开发考虑”部分帮助开发人员。
.e)测试交付的系统满足需求的程度的软件测试人员。每个需求都包括“测试考虑”部分建议测试人员如何测试这种类型的需求。
f)管理系统需求,需求的变更以及实现需求的项目经理。
从本书中受益的人员的职务包括业务分析师、系统分析师、业务系统分析师、软件架构师、系统架构师、软件工程师、测试工程师、产品经理、项目经理、项目办公室经理以及首席技术官。
读者的收益..
亲爱的读者,阅读本书(以及作为参考书)你将能够提高下列方面的技术和生产效率:
1)你将能定义更好的需求——更详细、准确以及清晰,并且更少的不确定性。
2)通过利用本书的一些成果(重用!)你将能更快、更省力的编写需求。
3)你将认识到需求应该额外定义一些主题,进一步提高需求的质量,使需求更完善。
4)你将可以更好的组织需求规格,编写概要部分(例如词汇表)。你、你的同事、你工作的机构将因此获得进一步的收益。
5)更容易估算构造定义的系统所需的工作量。
6)开发和测试组会更容易理解需求。
7)得到的系统将更好地体现组织的需要,有此可能产生相当客观的额外的投资回报。为了避免酿成大祸,你愿意承担多少代价呢?
8)重大的错误、误解以及遗漏将更早发现——考虑到在设计阶段改正缺陷的代价大约是需求阶段的10倍,而开发阶段则10倍不止,这意味潜在着极大的节约。
读者需要的技术和经验
阅读本书不需要以前有定义需求的经验。第1章是一个速成课,包括初学者开始着手所需的最低要求。入门更好的办法是阅读一本关于需求工程的好书(例如第1章开始提到的书籍),阅读过的读者或者已经是经验丰富的业务分析师的读者将从本书中获益更多。使用敏捷方法的软件工程师可以单独使用本书。任何负责评审需求规格的人不需要以前的知识或技术就可以使用本书获得帮助。
非技术人员也可以阅读本书。它关注的是以自然语言编写需求,任何人都可以阅读。它不使用晦涩的图表格式,深奥的理论和术语。即使不知道UML(统一建模语言)或其他规范化语言,也不会影响阅读。
本书的结构
本书分为两部分:
第一部分:准备开始包括4个解释性的章,第1章是写给没有定义需求经验的读者——但是所有人都可以阅读,因为它讲述了一些基本原则,对阅读本书很重要。第2章描述了需求规格包含的素材的类型,除了需求本身之外。本书中的第1章和第2章只是更长的完整版本的纲要,你可以从相关的网站上下载完整版本(参见下面“辅助资源”的描述)。第3章解释了什么是需求模式:基本要素,每个模式包括什么,它们如何组织(形成领域),以及相关概念。第4章解释了如何使用需求模式,以及如何编写自己的需求模式。
第二部分:需求模式目录是一组经常出现的需求类型的模式,可以作为参考书使用。它首先概述了本书中的需求模式,后面的8章(第5~12章)是需求模式的具体描述。
最后给出了书中用到的术语和缩略语的列表,以及参考资料的列表。
笔者建议通读第一部分,以便了解需求模式是怎么回事。如果你认为本书的第1章和第2章不够充分,可以参考网上的完整版本。不必系统地仔细阅读第二部分,只需要熟悉它包含哪些模式(除非你是渴望进步的分析师),当遇到某个模式可以帮助你的时候,再去参考它。
辅助资源
你可以从本书的网站http://wwwmicrosoftcom/mspress/companion/9780735623989下载下列文档:
1)完整版的第1章。
2)完整版的第2章。
3)“需求实例”。本书中所有的一整套实例,加上所有需求模式的需求模板,这样更容易复制和粘贴模板和实例,作为编写你自己需求的出发点。这个文档也包括一个需求模式的模板,可以在编写你自己的模式时使用。
4)适合打印的“现成的参考资料”,包括所有需求模式的图表,并且列出了所有需求模式和每个模式的适用性(使你更容易决定什么时候使用哪个模式)。
前两个文档既有Adobe PDF格式的也有微软XPS格式的。后两个是微软Word文档。下载这些文档需要大约6MB的磁盘空间。看这些文件需要的系统配置,请参见网页。
致谢
非常感谢大量人员认真的慷慨的贡献,没有你们的帮助,本书可能会拙劣很多,甚至可能根本没法完成。首先要特别感谢Trish Reader一直以来的鼓励、中肯的业务分析建议,以及对各种草稿的及时反馈。
非常感谢所有的评审人员,特别是仔细阅读和评论了本书的每一页上的每一个字的人:Roxanne Miller,感谢她深刻理解业务分析师对本书的需求,也感谢她使我对分析技术(相对的)迷途知返;Lydia Ash,感谢她的测试专业知识以及无数的针对各个方面的宝贵建议;感谢Robert Posener的反馈和建议,以高级项目经理的锐利眼光仔细审查本文;感谢Craig Malone的开发方法论(特别是敏捷方法方面);感谢Marc Munro在信息和数据实体模式方面的数据库专业知识;感谢安全大师Eric Fitzgerald的访问控制知识以及易用性专家Annuska Perkins、Norm Hodne、Ramkumar Subramanian和Laura Ruby;最后,感谢Shanno Sanders对本书整体方向的敏锐洞察。就像对待以前犯的所有错误,有时候我固执地坚持不采纳他们的意见——对此我承担全部的责任。
感谢Karl Wiegers为本书所写的序,以及对我开始着手本书前的鼓励。
感谢微软出版社的所有人员,特别感谢策划编辑Ben Ryan对于需求模式概念的信心,感谢编辑Devon Musgrave和Maria Gargiulo巨大的耐心,和蔼地对待我最离奇的想法,以及辛苦的复制编辑工作。
最后,如果没有这么多年以来无数人士对我的职业经验的帮助,本书根本无法编写。最有价值的是两种极端的人士:杰出人士,从他们身上我学习到如何定义和开发好的系统;笨拙人士,他们总能别出心裁地做错事情,提高了我的认识。感谢你们所有的人。微软出版社的支持
微软出版社尽了一切努力保证这本书的准确。在下面的网址上微软出版社提供了本书的勘误:
http://wwwmicrosoftcom/mspress/support/
如果想直接访问微软出版社的知识库,查询相关的问题或者有任何其他问题,使用:
http://wwwmicrosoftcom/mspress/support/searchasp
如果有任何意见、问题或者关于这本书的任何想法,可以使用下列方法联系微软出版社:...
邮寄:
Microsoft Press
Attn: Software Requirement Patterns Editor
One Microsoft Way
Redmond, WA 98052-6399
电子邮件:
mspinput@microsoft.com