软件需求分析教程.docx
- 文档编号:5854817
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:53
- 大小:242.43KB
软件需求分析教程.docx
《软件需求分析教程.docx》由会员分享,可在线阅读,更多相关《软件需求分析教程.docx(53页珍藏版)》请在冰豆网上搜索。
软件需求分析教程
目录
前言--------------------------------------------------------------2
本书有益于读者之处-------------------------------------------------2
谁应该读这本书------------------------------------------------------3
本书说明------------------------------------------------------------3
致谢---------------------------------------------------------------4
第一部分软件需求:
是什么和为什么-------------------------------------5
第一章基本的软件需求-------------------------------------------5
软件需求的定义-------------------------------------------6
需求的层次-----------------------------------------------7
每个项目都有需求-----------------------------------------8
什么情况导致发生不合格的需求说明-------------------------9
高质量的需求过程带来的好处------------------------------11
优秀需求具有的特性--------------------------------------12
需求的开发和管理----------------------------------------13
第二章客户的需求观--------------------------------------------15
谁是客户------------------------------------------------15
客户与开发人员之间的合作关系----------------------------16
软件客户需求权利书--------------------------------------17
软件客户需求义务书--------------------------------------18
第3章需求工程的推荐方法--------------------------------------22
第4章改进需求过程--------------------------------------------30
第5章软件需求与风险管理--------------------------------------41
软件风险管理基础----------------------------------------42
编写项目风险文档----------------------------------------44
前言
尽管拥有五十年积累的经验,但许多软件开发组织仍不得不在收集、编写和管理产品需求中疲于奔命。
而缺乏用户参与、不完整的需求及不断变更需求,是导致信息技术项目不能按进度安排和资金预算完成全部功能的主要原因(TheCHAOSReport,TheStandishGroupInternational.Inc.,1995)。
许多软件开发人员不能熟练地收集客户(customer)需求,很多开发者并不知道实用的需求工程技术,而且教学课程中也是技术主题比需求主题占有优势,工程参与者甚至连“需求”是什么也有不同的看法。
软件开发中,信息沟通(交流)至少应与计算占有同等的比重,然而我们往往强调了计算而忽略了信息沟通。
本书提供的许多工具将有助于信息交流,同时将帮助软件专业人员、管理者、市场营销者以及客户能应用有效的需求工程方法。
本书还介绍了许多方法,用来帮助开发小组和客户一致理解怎样构造一个软件才能满足用户(user)实际的需要,同时也包括了编写文档和管理变更的方法。
本书中介绍的技术都代表着需求工程中主流的“良好的习惯做法”,而并非来源于专业领域的高新技术或试图解决所有需求问题的复杂的方法学。
本书有益于读者之处Top
本书对你着手的所有软件过程改进,对改善需求开发和管理实践都能提供很多的益处。
本书是介绍概念和方法的,并不涉及专门的研究方法学或应用领域,所以它适用于各种项目。
我尽力以清晰的结构风格介绍大量实用的且经过验证的技术,希望在以下几个方面能给你提供帮助:
◆达到实现更高的客户满意度。
◆减少维护和支持费用。
◆在开发周期早期提高项目需求分析的质量,减少重复劳动,从而提高生产率。
◆通过控制项目范围的扩展(creep)及需求变更,来达到按计划完成预定目标。
我的目标是帮助你改进收集和分析需求、编写和修改需求规格说明以及在整个产品开发周期中管理需求。
改进过程的最终目的是使你组织中的人员以新的方式进行工作,从而获得更好的结果。
因此,希望你能将所学用于实践,而不仅是“纸上谈兵”。
实例研究
为帮助读者理解怎样应用本书介绍的各种方法,书中提供了几个基于实际项目的实例,其中一个中等规模的信息系统——“化学制品跟踪系统”说明了许多实用技术(不必担忧——你勿需知道任何关于化学的知识也能理解该项目)。
这个实例的项目说明还会帮助你了解怎样把不同的策略(方法)较好地融合到一块。
本书中还穿插着源于该实例的项目参与者之间的对话实例。
不论你的小组是开发什么软件的,这些对话总是常见的,也是类似的。
谁应该读这本书Top
凡参与一个新的或升级的软件产品的需求定义或说明中的任何人员都能从本书中获得有用的信息。
这些人中包括那些必须理解并满足用户期望的分析、开发、测试人员;也包括用户,这些用户想定义一种符合他们功能和使用需要的产品。
希望确认产品是否满足业务需要的客户将能更好地理解需求分析过程的重要性。
而负责监督按期完成产品的项目管理者也将学会怎样管理潜在的威胁——需求变更。
在许多训练性讨论会中,我发现那些非技术方面的项目参与者也很容易理解本书所涉及的内容。
想提高自己对开发过程的理解和想了解需求在软件成功中扮演的关键角色的任何人都将从本书中受益。
本书结构Top
本书分为三大部分。
第一部分先介绍了一些基本的需求工程定义和一些优秀的需求分析所具有的特性。
我希望你与你的重要客户能一起阅读第2章(关于客户与开发者之间的伙伴关系);第3章介绍了许多需求开发和管理的改进熟练程度的好方法(良好的习惯做法)。
第4章有助于计划怎样将新的策略融入小组的开发过程中。
方法是基于对附录中当前需求实践自我测试的回答。
第5章则介绍了一些通常与需求相关的项目风险。
第二部分介绍了许多关于需求开发的技术。
首先是定义项目的业务需求,项目视图(wision)及涉及的范围(scope)。
接下来的章节介绍怎样为项目寻找合适的客户代表,获取(elicit)用户需求,编写功能需求文档及质量属性文档。
第10章介绍了一些分析模型,这些模型可用于不同范围的需求分析。
第12章介绍了软件原型的结构和应用。
第二部分中的其它章节还探讨了定义需求优先级的方法及验证需求分析是否正确的方法。
第三部分的主题是需求管理的原则和策略。
这部分还特别介绍了处理需求变更和评价每项变更对项目影响的技术。
第18章介绍了怎样把需求跟踪能力和单个需求相关的内容需求来源到与需求相关的设计、代码等)联系起来。
第三部分的内容包括一些商业工具的说明,这些工具能增强你管理项目需求的能力。
从原理到实践
要克服障碍,更改旧的传统做法,把新的知识付诸实践的确不是一件容易的事情。
你也许仍想保持原有熟悉(可能并不很有效)的方法,为了帮助你改进需求分析,本书的每一章都包括一个称作“下一步”的内容,它细致地教你如何将本章所学的知识真正开始应用于实践。
我提供了许多带有详细注释的模板,包括:
需求分析文档、审查校对清单列表、需求优先级电子表格等,所有这些都放在我的网站:
http:
//上,希望能帮助你尽快把这些技术应用于实践。
请从今天就开始,一点一点地逐渐改进你的需求分析。
一些项目参与者在尝试新需求技术时是很勉强的。
因为有一些人完全不讲理,而与这些不理解的人合作,所有新技术都是没用的。
因此将本书介绍的知识告诉你的同事、客户和管理者,用你们以前项目中遇到的与需求有关的问题或困难来提醒他们,与他们一起讨论这些新技术拥有的潜在优势,共同学习、共同提高。
你不一定非要在一个新项目中开始应用这种改进的需求工程方法。
其实就地改变控制过程就是很好的开端。
也就是说,你可以从管理需求变更的请求开始,采用这种比过去更好的方法。
因为你能开始作系统的影响分析,创建跟踪能力矩阵,从而把新的需求与相应的设计、代码、测试用例都联系起来了。
为现存系统回头重新编写整个系统的需求规格说明是不现实的。
但你可以写一个更加结构化的新版本,作一些新特点的分析模型,并调查新的需求。
逐渐实施改进的需求,其风险较低,并且也可以为你将新技术应用于下一个主要项目奠定基础。
需求工程的目标是做出高质量而并非完美的需求分析,这使得你能在一个可接受的风险限度上实施。
为了把返工重做、不被接收的产品及超期未完成这些风险降低到最小程度,你必须花大量的时间来研究需求工程。
而本书将有助于确定何时能达到合适的需求分析质量标准,同时还介绍了具体实施方法。
致谢Top
我深深地感谢那些花费时间、精力审阅我的手稿并提供了许多改进建议的人们。
特别要感谢凯茜·弗德,他细致的检查,为我的思考和介绍提供了许多珍贵而深入的想法。
我真诚地感谢克瑞丝·凡巴斯,汤米·汉格森,蒂彭·莫勒,麦克·瑞巴克,菲尔·瑞克其,约翰·罗丝曼,路易丝·斯塔茨,多瑞丝·斯芬伯格,布兰卡·哈帕雅,苏格特·瑞特曼,他们为每一章节所作的极耗时间的评注。
我也很感激那些为某些章节做出努力的人:
斯蒂夫·安道夫,迪克·巴尔科,比尔·坦格,德尔·爱莫瑞,基尔夫·弗兰默克,琳达·弗勒明,凯丝·格茨,吉姆·哈特,迈克·梅尔克,他们找出了草稿中的许多错误,而所余下的任何错误都完全是我的疏漏所至。
我还要感谢斯蒂夫·迈克奈尔,正是他鼓励我写一本软件需求书。
还有我的熟人微软出版社的编辑本·瑞思,他帮我拓展了研究途径并与外界建立了良好的工作关系。
玛丽·凯本蒂·巴纳德在米切尔·古德曼的协助下管理整个过程,并将初稿精心编辑,最终定稿。
美术家罗伯·耐斯把许多先前的草图绘制成清晰的表格和图形,排版员波纳·格里克把它插入到书中。
我非常感激我的客户顾问,特别是斯迪·布洛林,迈特·德沙斯,凯丝·弗德,凯丝·沃勒斯,他们邀请我参与到他们的需求分析过程中`,这对我来说既是指导,又是学习。
我特别要感激凯丝·弗德愿意将她的经验在本书中予以讨论。
还要感谢罗宾·古德斯密斯提供的业务需求分析想法以及迈特·德沙斯提供的一些典型软件开发工程的极好的术语,例如:
“快速缩小范围阶段”(rapiddescopingphase)。
本书中介绍的一些技术将它改称为:
“受控的缩小范围阶段”(controlleddescopingphase)。
在过去几年中,参与我需求分析讨论会的上百参与者给与的反馈和贡献是相当有益的,作为一个学者和顾问,我从我工作过的每一个公司中都学到了很多有用的东西,并从讨论参与者的经验交流中也收获颇丰。
那些把这些技术应用并发崛其价值的人们所给与的评价,使我更确信:
这是项目需求分析所需的实用方法。
如果你认为这能有助于工作或不能,请你告诉我:
kwiegers@acm.org。
最后,我将最深的谢意献给我那最富耐心,给予我莫大支持并使我生活充满快乐的妻子——克瑞丝·扎彼得。
有这样一位妻子是任何作者梦寐以求的。
第一部分软件需求:
是什么和为什么
第一章基本的软件需求Top
“喂,是Phil吗?
我是人力资源部的Maria,我们在使用你编写的职员系统时遇到一个问题,就是一个职员想把她的名字改成SparkleStarlight,而系统不允许,你能帮帮忙吗?
”
“她嫁给了一个姓Starlight的人吗?
”Phil问道。
“不,她没有结婚,而仅仅是要更改她的名字,”Maria回答道。
“就是这问题,好像我们只能在婚姻状况改变时才能更改姓名。
”
“当然是这样,我从没想过谁会莫名其妙地更改自己的姓名。
我记不起你曾告诉我系统需要处理这样的事情,这就是为什么你们只能在改变婚姻状况对话框中才能进入更改姓名的对话框。
”Phil说道。
Maria说:
“我想你当然知道每个人只要愿意都可以随时合法更改他(她)们的姓名。
但不管怎样,我们希望在下周五之前解决这个不合理的地方,否则,Sparkle将不能支付她的账单。
你能在此前修改好这个错误吗?
“
“这并非是个错误!
我从来不知道你需要处理这种情况。
我现在正忙着做一个新的性能检测系统,并且我还要处理职员系统的一些需求变更请求”(传来翻阅稿纸的声音)。
“哦,这儿还有别的事。
我只可能在月底前修改好,一周内不行,很抱歉。
下次若有类似情况,请早一些告诉我并把它们写下来。
”
“那我怎么跟Sparkle说呢?
”Maria追问道,“如果她不能支付账单,那她只能挂帐了。
”
“Maria,你要明白,这不是我的过错。
”Phil坚持道,“如果你一开始就告诉我,你要能随时改变某个人的名字,那这些都不会发生。
因此你不能因未猜出你的想法(需求)就责备我。
”
Maria不得不很愤怒地屈从道:
“好吧,好吧,这种烦人的事使我恨死计算机系统了。
等你修改好了,马上打电话告诉我,行吧?
”
如果你曾作为客户有过类似的对话,你一定知道:
一个不能让你进行一项基本操作的软件产品是多么令人烦恼。
你不会感谢开发者,尽管他最终会满足你主要的需求变更。
但从开发者角度,你也知道,当用户在整个系统已经完成后,再提出一些功能要求是多么烦人的事。
同时,由于修改系统的请求会打断你当前的项目,也是令人很不愉快的。
而且往往这种修改请求还要求你优先处理。
其实,在软件开发中遇到的许多问题,都是由于收集、编写、协商、修改产品需求过程中的手续和作法(方法)失误所带来的。
例如上面的Phil和Maria,出现的问题涉及到非正式信息的收集,未确定的或不明确的功能,未发现或未经交流的假设,不完善的需求文档,以及突发的需求变更过程。
对大多数人来说,若要建一幢20万美元的房子,他一定会与建房者详细讨论各种细节,他们都明白以后的修改会带来损失,以及变更细节的危害性。
然而,到软件开发,人们却变得“大大咧咧”起来。
软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”(Leffingwell1997)。
可许多组织仍在那些基本的项目功能上采用一些不合规范的方法,这样导致的后果便是一条鸿沟(期望差异)——开发者所想开发的与用户所想得到的存在着巨大期望差异。
在软件工程中,所有的风险承担者(stakeholder)都感兴趣的就是需求分析阶段。
这些风险承担者包括客户、用户、业务或需求分析员(负责收集客户需求并编写文档,以及负责客户与开发机构之间联系沟通的人)、开发人员、测试人员、用户文档编写者、项目管理者和客户管理者。
这部分工作若处理好了,能开发出很出色的产品,同时会使客户感到满意,开发者也倍感满足、充实。
若处理不好,则会导致误解、挫折、障碍以及潜在质量和业务价值上的威胁。
因为需求分析奠定了软件工程和项目管理的基础,所以所有风险承担者最好是采用下面提供的有效的需求分析过程。
本章将帮助你:
◆了解软件需求开发中使用的一些关键名词。
◆警惕在软件项目中可能出现的与需求相关的一些问题。
◆知道优秀的需求规格说明应该具有的特点。
◆明白需求开发与需求管理之间的区别。
软件需求的定义Top
软件产业存在的一个问题就是缺乏统一定义的名词术语来描述我们的工作。
客户所定义的“需求”对开发者似乎是一个较高层次的产品概念。
而开发人员所说的“需求”对用户来说又像是详细设计了。
实际上,软件需求包含着多个层次,不同层次是从不同角度与不同程度反映着细节问题。
IEEE软件工程标准词汇表(1997年)中定义需求为:
(1)用户解决问题或达到目标所需的条件或权能(Capability)。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。
(3)一种反映上面
(1)或
(2)所描述的条件或权能的文档说明。
一些关于“需求”的解释
IEEE公布的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部
特性)来阐述需求。
一个很关键的问题是一定要编写需求文档。
我曾经目睹过一个项目中途更换了几乎所有的开发者,客户被迫又与新的需求分析者坐到一起。
分析人员说:
“我们想与你谈谈你的需求。
”客户的第一反应便是:
“我已经将我的要求都告诉你们前任了,就是给我编一个系统”。
而实际上,需求并未编写成文档,因此新的分析人员不得不从头做起。
所以事实上你只有一堆邮件、贴条、会谈过几次或一些零碎的对话,要是你确信你已明白需求,那完全是在自欺欺人。
另外一种定义认为需求是“用户所需要的并能触发一个程序或系统开发工作的说明”(Jones1994)。
需求分析专家AlanDavis(1993)拓展了这个概念:
“从系统外部能发现系统所具有的满足于用户的特点、功能、属性等”。
这些定义强调的都是产品是什么样的,而并非产品是怎样设计、构造的。
而下面的定义则从用户需要进一步转移到了系统特性(Sommerville和Sawyer1997):
需求是……指明必须实现什么样的规格说明。
它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。
从上面这些不同形式的定义不难发现:
并没有一个清晰、毫无二义性的“需求”术语存在,真正的“需求”实际上在人们的脑海中。
任何文档形式的需求(例如:
需求规格说明)仅是一个模型,一种叙述(Lawrence1998)。
我们需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识。
需求的层次Top
下面这些定义是需求工程领域中常见术语的定义说明。
软件需求包括三个不同的层次——业务需求、用户需求和功能需求——也包括非功能需求。
业务需求(businessrequirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。
用户需求(userrequirement)文档描述了用户使用产品必须要完成的任务,这在使用实例(usecase)文档或方案脚本(scenario)说明中予以说明。
功能需求(functionalrequirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。
所谓特性(feature)是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。
软件需求各组成部分之间的关系如图1-1所示。
在软件需求规格说明(softwarerequirementsspecification简称“SRS”)中说明的功能需求充分描述了软件系统所应具有的外部行为。
软件需求规格说明在开发、测试、质量保证、项目管理以及相关项目功能中都起了重要的作用。
对一个复杂产品来说,软件功能需求也许只是系统需求的一个子集,因为另外一些可能属于软件部件。
作为功能需求的补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等。
它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性。
所谓约束是指对开发人员在软件产品设计和构造上所具有的选择限制。
质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能,多角度描述产品对用户和开发人员都极为重要。
下面以一个字处理程序为例来说明需求的不同种类。
业务需求可能是:
“用户能有效地纠正文档中的拼写错误”,该产品的包装盒封面上可能会标明这个满足业务需求的拼写检查器。
而对应的用户需求可能是“找出文档中的拼写错误并通过一个提供的替换项列表来供选择替换拼错的词”。
同时,该拼写检查器还有许多功能需求,如找到并高亮度提示错词的操作;显示提供替换词的对话框以及实现整个文档范围的替换。
管理人员或市场分析人员会确定软件的业务需求,这有利于公司操作更加高效(对信息系统而言)或具有很强的市场竞争力(对商业软件产品而言)。
所有的用户需求必须与业务需求一致。
用户需求允许需求分析者能从中得到一些功能需求以满足用户使用产品来完成其任务,而开发人员则利用功能需求来设计如何实现必须的功能。
从以上定义可以发现,需求并未包括设计细节、实现细节、项目计划信息或测试信息。
需求与这些没有关系,它关注的是充分说明你究竟想开发什么。
项目也有其它方面的需求,如开发环境需求或发布产品及移植到支撑环境的需求。
尽管这些需求对项目成功也至关重要,但它们并非本书所要讨论的。
每个项目都有需求Top
FrederickBrooks在他1987年的经典的文章“NoSilverBullet:
EssenceandAccidentsofSoftwareEngineering”中充分说明了需求过程在软件项目中扮演的重要角色:
开发软件系统最为困难的部分就是准确说明开发什么。
最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。
同时这也是一旦做错,将会最终给系统带来极大损害的部分,而且以后再对它进行修改也极为困难。
每个软件产品都是为了使其用户能以某种方式改善他们的生活,于是,花在了解他们需要上的时间便是使项目成功的一种高层次的投资。
这对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的某一部分的产品是显而易见的。
但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?
而如果我们不知道什么对客户来说很重要,那我们又如何能使客户感到满意呢?
然而,即便并非出于商业目的的软件需求也是必须的。
例如软件库、组件和工具这些供一个开发小组内部使用的软件。
当然你可能偶然地勿需文档说明就能与其他人意见接近一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价。
近来,我遇到一个开发小组开发包括流程图工具和源代码编辑器在内的一套计算机辅助软件工程工具。
不幸的是,在他们开发完这个工具后,发现这个工具不能打印出源代码文件,而用户当然希望有这个功能。
结果这个小组只好手工抄写源代码文档以供代码检查。
这说明如果我们没有编写文档,那怕这种需求是明确无误和设想的,软件达不到期望目标也只是是咎由自取了。
相反的情况,我曾为一个要集成到“商业错误跟踪系统”中的简单电子邮件界面写了一页需求说明。
而Unix系统管理员在为处理电子邮件写脚本时发现如此简单的一张需求清单竟是如此有用。
我依据需求进行测试时,不仅非常清晰地实现了所有必需功能,而且未发现任何错误。
什么情况将会导致好的群体发生不合格的需求说明Top
不重视需求过程的项目队伍将自食其果。
需求工程中的缺陷将给项目成功带来极大风险,这里的“成功”是指推出的产品能以合理的价格、及时地完成并在功能、质量上完全满足用户的期望。
下面将讨论一些需求风险。
第5章将介绍怎样应用软件风险管理从而防止与需求有关的风险的出现和不适当的需求过程所引起的一些风险。
◆包含的用户数不多将导致无法接受的产品。
◆用户需求的扩展将带来过度的耗费和降低产品的质量。
◆模棱两可的需求说明可能导致时间浪费和返工。
◆用户增加一些不必要的特性和开发人员“画蛇添足(gold-plating)”的追求。
◆过分精简的需求说明以致遗漏某些关键需求。
◆忽略某一部分用户类的需求将导致众多客户的不满。
◆不完善的需求说明使得项目计划
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 需求 分析 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)