`
sunway
  • 浏览: 115153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何写出高质量的需求说明书?

阅读更多
你的工程应该有个好的起点。一个小组要带领客户进入需求启发阶段而且你要写软件需求说明书。这份说明有些大,但客户会很重视,所以说明必须得到赞同。



  现在你正在设计其中的一个特性,已经发现了需求的一些问题。你可以用多种不同的方式解释需求15;需求9 的说明正好与需求21相反,你因该相信哪一个?需求24非常含糊,你根本不明白它的意思;你不得不花上一个小时与2位开发人员讨论需求30,只因为你们对其各有各的理解;并且,唯一能够澄清这些问题的客户没有给你们答复。你被迫破解众多需求的含义,并且你能预料到,如果你错了,你要做大量的重复工作。



  许多软件需求说明书(SRS)写得非常糟糕。任何产品的质量需要其原始材料的质量保证,糟糕的软件需求说明书不可能产出优秀的软件。不幸的是,几乎没有开发人员受过与需求的抽象、分析、文档、质检有关的教育。而且,没有非常多的好需求可以借鉴学习,部分原因是很少有工程可以找到一个好的借鉴,其他原因是公司不愿意将其产品说明书放在公共区域。



  这篇文章描述了高质量需求叙述和说明的几个特性(特点)。我们将用这些观点检查一些有缺陷的需求,带着痛楚重新编写。而且我会谈一些如何编写好的需求的提示。你也许想通过这些质量标准评估你的工程需求。对于修订,也许迟了,但你会学到一些有用的东西,并帮助你的小组在下次编写出更好的需求。



  不要期望能够编写出一份能体现需求应具备的所有特性的SRS。无论你怎么细化、分析、评论和优化需求,都不可能达到完美。但是,如果你牢记这些特性,你就会编写出更好的需求,生产出更好的产品。

高质量需求叙述的特性

  我们如何从一些有问题的需求中分辨出好的软件需求?这一节将分别介绍需求叙述应体现的6个特性,下一节将从整体上介绍SRS文档应具备的特性。判断每个需求是否具备应有的特性的一种方式是由持有不同观点的工程资金管理人所作的正规检查。另一种有力的方法是在编写代码前依据需求编写测试例子。测试例子能够明确显现在需求中描述的产品行为(特性),能够显现缺陷、冗余和含糊之处。



  正确:每个需求必须精确描述要交付的功能。正确性依据于需求的来源,如真实的客户或高级别的系统需求说明书。一个软件需求与其对应的系统需求说明书相抵触是不正确的(当然,系统需求说明书本身可能不正确)。



  只有用户的代表能够决定用户需求的正确性,这就是为什么在检查需求时,要包括他们或他们的代理的关键所在。不包括用户的需求检查就会导致开发人员的:“这是没意义的”,“这可能是他们的意思”等众所周知的猜测。



  可行性:在已知的能力、有限的系统及其环境中每个需求必须是可实现的。为了避免需求的不可行性,在需求分析阶段应该有一个开发人员参与,在抽象阶段应该有市场人员参与。这个开发人员应能检查在技术上什么能做什么不能做,哪些需要需要额外的付出或者和其他的权衡。



  必要性:每个需求应载明什么是客户确实需要的,什么要顺应于外部的需求,接口或标准。每个需求源于你认可、具有权说明需求的原始资料,这是考虑必需的另外情形(译注,此句翻译不顺,请参照原文:Another way to think of “necessary” is that each requirement originated from a source you recognize as having the authority to specify requirements)。跟踪每个需求回溯到出处,如用例,系统需求,规章,或来自其他用户的意见。如果你不能标识出处,可能需求只是个镀金的例子,没有真正的必须。



  优先权:为了表明在一个详细的产品版本中应包含哪些要点,需要为每个需求,特征,或用例分配实现的优先权。客户或其代理都应有强烈的责任建立优先权。如果所有的需求都被视为同等重要,那么由于在开发中,预算削减,计划超时或组员的离开导致新的需求时, 项目经理将不能起到作用。优先权的作用是提供给客户的价值,实现的相关费用,实现相关联的有关技术风险。



  我是用3种级别的优先权:高优先权表明需求必须体现在下一个产品版本中,中优先权表明需求是必须的,但是如果需要可以推迟到晚一些的产品版本中,低优先权表明有它很好,但我们必须认识到如果没有充足的时间或资源,它可以被放弃掉。



  明确:需求叙述的读者应只能从其得到唯一的解释说明,同样,一个需求的多个读者也应达成共识。自然语言极易导致含糊。要避免使用一些对于SRS作者很清楚但对于读者不清楚的主观词汇,如:用户友好性,容易,简单,快速,有效,几个,艺术级,改善的,最大,最小等等。每写一个需要都应简洁,简单,直观的采用用户熟知的语言,不要采用计算机术语。检查需求模糊的有效方式包括需求说明书的正规检查,根据需求写测试,建立用户的假想来说明产品某个特定部分预期的特性。



  可证实:看你是否能够做出测试计划或其他验证方式,如检查和实证,来决定在产品中每个需求是否正确的实现。如果需求是不可验证的,决定需求是不是正确的实现就成了判断的事。需求之间不一致,不可行,不明确也能导致不可证实。任何需求如果说产品将要支持什么也是不可证实的。

高质量需求说明的特征

  一个完整的SRS不仅是包括长长的功能性需求列表,还包括外部接口描述和一些诸如质量属性,期望性能的非功能性需求。下面描述了高质量的SRS的一些特性。



  完整:不应该遗漏要求和必需的信息。完整性也是一个需求应具备的。发现缺少的信息很难,因为根本不存在。在SRS中将需求以分层目录方式组织,将帮助评审人员理解功能性描述的结构,使他们很容易指出遗失的东西。



  在需求抽象时,相对于系统功能,你过多的注意用户的业务,将导致在需求的全局观和引进不是真正必需的需求上显得不足。在需求抽象上,应用用例方法会发挥很好的作用。能够从不同角度察看需求的图形分析模型也可以检查出不完整性。



  如果你知道已缺少一些信息,使用TBD(to be determined)标准标志可以突出这些缺陷,当你在构建产品的相关部分时,就可以从一个给定的需求集中解决所有的缺陷。



  一致性:一致性需求就是不要于其他的软件需求或高级别的系统(商业)需求发生冲突。需求中的不一致必须在开发开始前得到解决。只有经过调研才能确定哪些是正确的。修改需求时一定要谨慎,如果只审定修改的部分,没有审定于修改相关的部分,就可能导致不一致性。



  可修改性:当每个需求的要求修改了或维护其历史更改时,你必须能够审定SRS。也就是说每个需求必须相对于其他需求有其单独的标示和分开的说明,便于清晰的查阅。通过良好的组织可以使需求易于修改,如:将相关的需求分组,建立目录表,索引,以及前后参考(照)。



  可追踪:你应能将一个软件与其原始材料相对应,如高级系统需求,用例,用户的提议等。也能够将软件需求与设计元素,源代码,用于构造实现和验证需求的测试相对应。可追踪的需求应该具有独立标示,细密和结构化的编写,不应过大,不应是叙述性的文字和公告式的列表。 需求质量的评审

  这些有关需求质量的特性的描述在理论上都是非常好的,但一个好的需求到底是个什么样子的呢?为了体现得更切合实际,我们做个小练习。下面有几个从实际的工程选出的需求,依据上面的质量标准,评估每个需求,看看有什么问题,然后用更好的方式重写。我将对每个例子都提出自己的分析和改进的建议。也欢迎你提出不同的见解。我所占优的只是我知道每个需求的出处。因为你我都不是真正的客户,我们只能猜测每个需求的意图。

  例1.“产品应在不少于每60秒的正常周期内提供状态信息”

  这个需求是不完整的:状态信息是什么,如何显示给用户。这个需求有几处含糊。我们在谈论产品的哪部分?状态信息间隔真的假定为不少于60秒?,甚者每10年显示一条新的状态信息也可以?也许它的意图是消息间隔不应超过60秒,那么1毫秒是不是太短?“每”这个词导致了不确定性。问题的后果,就是需求的不可证实。

弥补缺陷,重写需求的一种方法:



  1、状态信息

  1.1后台任务管理器因该以误差上下不超过10秒的60秒间隔,在用户界面的指定位置显示状态信息

  1.2如果后台进程处理正常,那么应该显示任务已完成的百分数/比

  1.3任务完成时,应显示相关的信息

   1.4后台任务出错应该显示错误信息

  为了分别测试和追踪,我将其分成了多个需求。如果将几个需求串接在一节中,在构造和测试时就很容易漏掉一个。

  例2.“产品应瞬间在显示和隐藏不可打印字符间切换”

  计算机在瞬间不能做任何事,所以这个需求不切实可行。它的不完整性表现在没有声明触发状态切换的条件。软件要在某些条件下更改自己?或者用户为了模仿更改要做一些动作?而且,在文档中改变显示的范围是多大:选中的文本,整个的文档,或其他的?这也是个模糊的问题。不可打印字符合隐藏字符一样吗?或者是一些属性标志或一些控制字符?问题的后果,就是需求的不可证实。



  象这样编写需求也许更好一些:“用户能够在一个由特定触发条件激活处于编辑的文档中在显示和隐藏所有HTML标记间切换”。现在就很清楚,不可打印字符是HTML标记。由于没有定义触发条件,需求对设计没有约束力。只有设计人员选定了触发条件后,你才能编写测试验证触发的正确操作。

  例3.“HTML分析器可以产生HTML标记错误报告,帮助HTML入门者快速解决错误”。单词“快速”使其模糊,没  有加进错误报告的定义也是其部完整。我不知道,你怎么验证这个需求。找一个自称为HTML的入门者,看看能不能根据错误报告快速解决错误?



  试试这个:“HTML分析器可以产生一个错误报告,错误报告包含有在被分析文件中出错的HTML文本和行号以及错误的描述。如果没有错误,就不会产生错误报告”。现在我们知道了,什么会被加到出错报告中,但是出错报告是个什么样子,则留由设计人员决定。我们还指定了一个例外:如果没有发现错误,不产生错误报告。

  例4.“如果可能,主管号码应通过联机校验,而不是通过主全体主管号码列表校验”。真感到绝望,什么是“如果可能”:如果技术上可行?如果主全体主管号码列表可以联机获得?要避免象“应该”的这类不确切的词。客户是需要这个功能性还是不需要。我曾看过一些需求说明书,采用诸如:应,将,应该/将要等一些词描述优先级的细微差别。但我更喜欢用“应”清楚的说明需求的意图,指明优先级。这是修改后的:系统应校验输入的主管号码而不通过联机的主全体主官号码列表。如果在列表中没有发现主管号码,将会显示一条错误信息,也不接受指令。



  在理解各个已完成的糟糕需求上,开发人员将会遇到的难题是:开发人员与客户将会在审核需求,未达成共识前发生激烈的争论。详细检查大的需求文档不是一件轻松的事情。我清楚有人做过,而且他们花在检查上的每一分钟都是值得的。相对于开发阶段和用户的抱怨电话,在这个阶段修补缺陷是便宜的,

编写质量需求的方针



  编写优秀的需求是没有公式化的方法的。这需要大量的经验,要从你在过去的文档中发现的问题学习。请在组织软件需求文档时,严格遵从这些方针。



  句子和段落要短。采用主动语气。使用正确的语法,拼写,标点。使用术语,要保持一致性,并在术语表或数据字典中定义它们



  要看需求是否被有效的定义,可以以开发人员的观点看看。在内心将“当你们做完了找我”这句加到文档尾部,看看能不能是你紧张起来。换句话说,你是否需要SRS的编写者的额外解释帮助开发人员很好的理解需求,以便于设计和实现?如果是的话,在继续工作前,需求还需要细化。



  需求编写者还要努力正确地把握细化程度。要避免包含多个需求的长的叙述段落。有帮助的提示是编写独立的可测试的需求。如果你认为一小部分测试可以验证一个需求的正确,那么它已经正确的细化了。如果你预想到多种不同类的测试,几个需求可能已挤到了一起,需要拆分开。



  密切关注多个需求合成了单个需求。一个需求中的连接词“和”/“或”建议几个需求合并。不要在一个需求中使用“和”/“或”。



  通篇文档细节上要保持一致。我曾看见过多个需求说明书前后不一致。如:“对于红色合法的颜色代码应是R”及“对于绿色合法的颜色代码应是G”就有可以以分散的需求分离开,而“产品应能对来自语音编辑指示做出反应”应作为一个子系统,不应作为单个的功能性需求。



  避免在SRS中过多的申述需求。在多处包含相同的需求可以使文档更易于阅读,但也会给文档的维护增加困难。文档的多份文本要在同一时间内全部更新,避免不一致性。

  如果你遵从了这些方针,你能够尽早地经常正式或非正式的审查需求,这些需求对于产品的构造,系统测试以及最后的客户满意,都会成为好的奠基石。并且要记住,没有高质量的需求,软件就象一盒巧克力,你永远不知道你会得到什么。
[size=medium]
[/size]
分享到:
评论

相关推荐

    软件测试需求说明书模板

    《软件测试需求说明书模板》 在软件开发过程中,软件测试是不可或缺的一环,它确保了产品的质量和稳定性。软件测试需求说明书(Test Requirements Specification,TRS)是测试工作的基础文档,明确了测试的目标、...

    需求规格说明书,需求文档的标准说明

    编写一份高质量的需求规格说明书对于确保项目成功至关重要,因为它为整个开发团队提供了共同理解的基础,避免了因沟通不明确导致的误解和错误。 需求规格说明书通常包含以下几个部分: 1. **封面和版本信息**:...

    eGov电子政务项目需求规格说明书

    在《eGov电子政务项目需求规格说明书》中,会详细列出政府机构期望通过电子政务系统实现的各项服务,如公民在线办事、政策信息发布、数据共享等。同时,也会对非功能性需求进行描述,例如系统的安全性、稳定性、可...

    实验室信息管理系统用户需求说明书.doc

    《实验室信息管理系统用户需求说明书》是一份详细阐述实验室信息管理系统(LIMS)需求的文档,旨在为软件开发的各个阶段提供基础和依据。该文档由系统分析师、项目经理、编程及维护人员共同参考,确保所有相关人员对...

    软件工程 需求说明书文档

    本压缩包文件“071需求说明书”聚焦于软件工程中的需求分析阶段,包含了一系列的需求文档,旨在帮助开发者理解并构建满足用户期望的高质量软件。 需求说明书通常包括以下几个核心部分: 1. **引言**:这部分简要...

    如何写好软件需求说明书

    编写一份高质量的需求说明书,不仅能够确保项目的顺利进行,还能减少沟通误解,提高工作效率。 首先,需求说明书应当包含系统建立的背景资料。这部分内容虽然看似与技术开发关联不大,但却为读者提供了一个理解项目...

    需求分析阶段结束之前,系统分析员应该写出软件需求规格说明书,以书面的形式准确地描述软件需求

    编写高质量的需求规格说明书要求系统分析员不仅具有扎实的技术知识,还需要具备良好的沟通技巧和文档编写能力。在编写过程中,分析员需要不断地与项目利益相关者,特别是最终用户进行沟通,以确保对需求的理解准确...

    软件需求说明书定义(自己写的)

    《软件需求说明书定义详解》 软件开发过程中,需求分析是至关重要的一步,它为后续的设计、编码、测试等环节提供明确的方向。而软件需求说明书(Software Requirements Specification,简称SRS)则是需求分析阶段的...

    网上商城java版需求规格说明书

    网上商城Java版需求规格说明书是指导开发团队构建一个基于JSP技术的在线购物平台的关键文档。这份详尽的文档旨在确保...通过这份文档,开发人员能够准确把握用户需求,进而构建出满足市场需求的高质量网上商城系统。

    搜索引擎系统需求分析说明书.doc

    通过遵循这份需求分析说明书,开发团队可以构建出满足用户需求的《迷你文件搜》搜索引擎系统,为用户提供高效、安全的文件检索体验。同时,这份文档也为项目的质量管理、测试和持续优化提供了坚实的基础。

    动漫阅读器需求规格说明书

    根据给定的文件标题“动漫阅读器需求规格说明书”及描述“动漫阅读器移动客户端的一个需求分析文档”,本文将深入解析该文档所涵盖的关键IT知识点,...深入理解这些知识点,对于开发出高质量的动漫阅读器应用至关重要。

    公交系统需求分析说明书

    【公交系统需求分析说明书】 本需求分析说明书详细阐述了长沙市公交路线查询系统的需求,旨在为系统分析人员和开发团队...开发团队应依据本需求分析说明书进行设计和实施,以打造出满足市场需求的高质量公交查询系统。

    软件系统概要设计说明书.docx

    本《软件系统概要设计说明书》是软件开发过程中的关键文档,它在《软件需求规格说明书》的基础上建立,详细阐述了软件系统的整体设计思路、结构和功能,确保了设计与用户需求的一致性。这份文档的改动必须经过用户的...

    软件说明书模板方便您写软件设计说明书

    《软件设计说明书撰写指南》 编写一份详尽的软件设计说明书是软件开发过程中不可或缺的一环。这份指南将为你提供一个...通过遵循上述结构和内容,你可以创建一份高质量的软件设计说明书,为项目的成功奠定坚实基础。

    森海克斯8800说明书.pdf

    9. **故障代码与解决方案**:当设备出现故障时,说明书会列出可能的错误代码和对应的解决方法,帮助用户快速诊断并解决问题。 10. **售后服务**:为了保障用户的权益,说明书还会提供厂商的联系方式,以便在需要...

    如何做CRM的年度总结+规划?_CRM产品经理 需求规格说明书管理系统规格需求说明书模板.pdf

    通过遵循这些原则和方法,CRM 产品经理可以写出一份高质量的年度总结和规划,从而总结过去一年来的工作,并规划未来的发展方向。 在 CRM 团队中,年度总结和规划可以分为五个部分: 1. 绩效指标总结 2. 任务事项...

    软件需求规格说明书模板.doc

    《软件需求规格说明书模板》是IT行业中至关重要的文档,用于明确和详细地描述软件产品的需求,为后续的设计、开发和测试工作提供...因此,创建和维护一份高质量的软件需求规格说明书对于任何IT项目来说都是至关重要的。

    弧焊机器人操作说明书

    弧焊机器人在现代制造业中扮演着至关重要的角色,尤其是在汽车制造、航空航天、船舶制造等行业,它们以其高精度、高效性和一致性在焊接任务中展现出巨大优势。本文将深入解析《弧焊机器人操作说明书》中的关键知识点...

    软件工程 需求分析(写法)

    - 需求评审:在编写完需求规格说明书后,需要团队和利益相关者共同审查,确保无误。 - 需求管理:跟踪需求的变化,管理需求变更过程,防止需求蔓延。 综上所述,需求分析是软件工程的关键步骤,涉及多方面的工作...

    尼康D7100使用说明书 简体中文 PDF

    尼康D7100作为一款高性能的数码单反相机,其使用说明书不仅全面覆盖了基本操作与高级功能,还提供了丰富的故障排除与保养指南,是用户掌握相机全部潜力、创作高质量摄影作品的重要资源。通过细致阅读与实践,用户...

Global site tag (gtag.js) - Google Analytics