1、需求规格说明书(ISO标准版)编者说明: 当需求调查、分析工作告一段落时,你就需要将这些需求进行规格化描述,整理成文,即软件需求规格说明书,也就是SRS。这是在软件项目过程中最有价值的一个文档。ISO所提供的标准虽然已经时间久远,但还是颇具参考价值的。1引言1.1编写的目的 说明编写这份需求说明书的目的,指出预期的读者。1.2背景a.待开发的系统的名称;b.本项目的任务提出者、开发者、用户;c.该系统同其他系统或其他机构的基本的相互来往关系。1.3定义 列出本文件中用到的专门术语的定义和外文首字母组词的原词组。1.4参考资料 列出用得着的参考资料。2任务概述2.1目标叙述该系统开发的意图、应用
2、目标、作用范围以及其他应向读者说明的有关该系统开发的背景材料。解释被开发系统与其他有关系统之间的关系。2.2用户的特点列出本系统的最终用户的特点,充分说明操作人员、维护人员的教育水平和技术专长,以及本系统的预期使用频度。2.3假定和约束 列出进行本系统开发工作的假定和约束。3需求规定 3.1对功能的规定用列表的方式,逐项定量和定性地叙述对系统所提出的功能要求,说明输入什么量、经怎么样的处理、得到什么输出,说明系统的容量,包括系统应支持的终端数和应支持的并行操作的用户数等指标。3.2 对性能的规定3.2.1精度 说明对该系统的输入、输出数据精度的要求,可能包括传输过程中的精度。3.2.2时间特性
3、要求 说明对于该系统的时间特性要求。3.2.3灵活性说明对该系统的灵活性的要求,即当需求发生某些变化时,该系统对这些变化的适应能力。3.3输入输出要求解释各输入输出数据类型,并逐项说明其媒体、格式、数值范围、精度等。对系统的数据输出及必须标明的控制输出量进行解释并举例。3.4数据管理能力要求(针对软件系统)说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求作出估算。3.5故障处理要求列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。3.6其他专门要求如用户单位对安全保密的要求,对使用方便的要求,对可维护性、可补充性、易读性、可靠
4、性、运行环境可转换性的特殊要求等。4运行环境规定4.1设备 列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能,包括:a.处理器型号及内存容量b.外存容量、联机或脱机、媒体及其存储格式,设备的型号及数量c.输入及输出设备的型号和数量,联机或脱机;d.数据通信设备的型号和数量e.功能键及其他专用硬件4.2支持软件列出支持软件,包括要用到的操作系统、编译程序、测试支持软件等。4.3接口 说明该系统同其他系统之间的接口、数据通信协议等。4.4控制 说明控制该系统的运行的方法和控制信号,并说明这些控制信号的来源。软件需求规格说明书(RUP版)编者说明: 如果在需求分析时采用了用例(Use c
5、ase)技术,那么该需求规格说明书将更加符合你的需要。当然,你也可以结合Volere需求规格说明书对该模板进行必要的修改。1. 文档概述该部分主要是对软件需求规格说明书文档进行基本的描述,包括该文档的目的、范围、术语定义、参考资料以及概要。软件需求规格说明书用来系统、完整地记录系统的软件需求。该软件需求说明书的基础是用例分析技术。因此该文档中应包括用例模型、补充规约等内容。1.1目的在此小节中,主要对软件需求规格说明书的目的做一概要性说明,通常软件需求规格说明书应详细地说明应用程序、子系统的外部行为,还要说明非功能性需求、设计约束,以及其它的相关因素。1.2范围系统是有范围的,而不是无限扩展的
6、,对于无限扩展的需求是无法进行描述的。因此,在本小节应该对该说明书所涉及的项目范围进行清晰的界定。指定该规格说明书适用的软件应用程序、特性或者其它子系统分组、其相关的用例模型。当然在此也需要列出会受到该文档影响的其它文档。1.3 定义、首字母缩写词和缩略语与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义。还有一种可简明的做法,就是维护在一个项目词汇表中,这样就可以避免在每个文档中都重复很多内容。1.4参考资料在这一小节中,应完整地列出该文档引用的所有文档。对于每个引用的文档都应该给出标题、标识号、日期以及来源,为阅读者查找这些文档提供足够详细的信息。1.5 概述在本
7、小节中,主要是说明软件需求规格说明书各个部分所包含的主要内容,就像一个文章摘要一样。同时也应该对文档的组织方式进行解释。2. 整体说明在本节中,将对整个软件需求进行总体性的描述,以期让读者对整个软件系统的需求有一个框架性的认识。也就是说,该节中主要包括影响产品及其需求的一般因素,而不列举 具体的需求。主要包括产品总体效果、产品功能、用户特征、约束、假设与依赖关系、需求子集等方面的内容。2.1用例模型在本小节中,将列出该软件需求的用例模型,该模型处于系统级,对系统的特性进行宏观的描述。在此应该列出所有的用例和Actor的名称列表,并且对其做出简要的说明,以及在图中的各种关系。2.2 假设与依赖关
8、系在软件系统的开发过程中,存在许多假设和依赖关系。在本小节中应列举出所有的重要的技术可行性假设、子系统或构件可用性假设,以及一些可行性的假设。3. 具体需求如果说第二章节是框架,那么本节就是血肉。在本节中,应该详细列出所有的软件需求,其详细程序应使设计人员能够充分理解并且进行设计的要求,同时也应该给予测试人员足够的信息,以帮助他们来验证系统是否满足了这些需求。整个需求的组织可以采用用例描述进行。3.1用例描述如果你使用用例建模技术,那么你已经通过用例定义了系统的大部分功能性需求和一些非功能性需求。因此,在软件需求规格说明书只需将这些具体的用例描述,整理在一起,全部放在该小节之中。当然也可以将用
9、例描述做为附件,在此列出引用,只是这样做并不利于阅读。建议在组织形式上采用以“软件需求”为线索,在每个需求中,填入对应的1个或几个用例描述。3.2补充需求由于用例毕竟主要针对功能性需求,因此还会有一些其它的补充需求遗漏,因此在本小节中就是将这些东西补充出来。这些补充需求大部分集中在非功能需求之上,包括以下几个方面的内容:1) 易用性:例如指出普通用户和高级用户要高效地执行某个特定操作所需的培训时间;指出典型任务的可评测任务次数;或者指出需要满足的可用性标准(如IBM的CUA标准、Microsoft的GUI标准。2) 可靠性:包括系统可用性(可用时间百分比、使用小时数、维护访问权、降纸模式操作等
10、);平均故障间隔时间(MTBF,通常表示为小时数,但也可表示为天数、月数或年数);平均修复时间(MTTR,系统在发生故障后可以暂停运行的时间);精确度(指出系统输出要求具备的精密度、分辨率和精确度);最高错误或缺陷率(通常表示为bugs/KLOC,即每千行代码的错误数目或 bugs/function-point,即每个功能点的错误数目);错误或缺陷率(按照小错误、大错误和严重错误来分类:需求中必须对“严重”错误进行界定,例如:数据完全丢失或完全不能使用系统的某部分功能)。3) 性能:包括对事务的响应时间(平均、最长);吞吐量(例如每秒处理的事务数);容量(例如系统可以容纳的客户或事务数);降级
11、模式(当系统以某种形式降级时可接受的运行模式);资源利用情况:内存、磁盘、通信等。4) 其它:包括用户界面要求、联机帮助系统要求、法律许可、外购构件,以及操作系统、开发工具、数据库系统等设计约束。4.支持信息支持信息用于使软件需求规格说明书更易于使用。它包括:目录、索引、附录等。计算机软件需求说明编制指南(国标版)编者说明: 软件需求规格说明是十分重要的文档,因此为开发团队提供一份详细的编制指南是十分有意义和必要的。本文档就是一个编制指南的例子,你可以根据该指南,结合自己的实际情况进行修改。1引言 1.1 目的和作用 本指南为软件需求实践提供了一个规范化的方法。本指南不提倡把软件需求说明(So
12、ftware Requirements Specifications,以下简称SRS)划分成等级,避免把它定义成更小的需求子集。 本指南适用对象: 1)软件客户(Customers),以便精确地描述他们想获得什么样的产品。 2)软件开发者(Suppliers),以便准确地理解客户需要什么样的产品。 对于任一要实现下列目标的单位和(或)个人: 1)要提出开发规范化的SRS提纲; 2)定义自己需要的具体的格式和内容; 3)产生附加的局部使用条款,如SRS质量检查清单或者SRS作者手册等。 SRS将完成下列目标: 1) 在软件产品完成目标方面为客户和开发者之间建立共同协议创立一个基础。对要实现的软件
13、功能做全面描述,帮助客户判断所规定的软件是否符合他们的要求,或者怎样修改这种软件才能适合他们的要求; 2) 提高开发效率。编制SRS的过程将使客户在设计开始之前周密地思考全部需求,从而减少事后重新设计、重新编码和重新测试的返工活动。在SRS中对各种需求仔细地进行复查,还可以在开发早期发现若干遗漏、错误的理解和不一致性,以便及时加以纠正; 3) 为成本计价和编制计划进度提供基础。SRS提供的对被开发软件产品的描述,是计算机软件产品成本核算的基础,并且可以为各方的要价和付费提供依据。SRS对软件的清晰描述,有助于估计所必须的资源,并用作编制进度的依据; 4) 为确认和验证提供一个基准。任何组织将更
14、有效地编制他们的确认和验证计划。作为开发合同的一部分,SRS还可以提供一个可以度量和遵循的基准(然而,反之则不成立,即任一有关软件的合同都不能作为SRS。因为这种文件几乎不包括详尽的需求说明,并且通常不完全的); 5) 便于移植。有了SRS就便于移值软件产品,以适应新的用户或新的机种。客户也易于移植其软件到其他部门,而开发者同样也易于把软件移植到新的客户; 6) 作为不断提高的基础。由于SRS所讨论的是软件产品,而不是开发这个产品的设计。因此SRS是软件产品继续提高的基础。虽然SRS也可能要改变,但是原来的SRS还是软件产品改进的可靠基础。 1.2 范围 本指南适用于编写软件需求规格说明,它描
15、述了一个SRS所必须的内容和质量,并且在第6章中提供了SRS大纲。 2引用标准 GB 8566 计算机软件开发规范 GB 8567 计算机软件产品开发文件编制指南 GB/T 11457 软件工程术语 3定义 GB/T 11457所列术语和下列定义适用于本指南。 合同(contract):是由客户和开发者共同签署的具有法律约束力的文件。其中包括产品的技术、组织、成本和进度计划要求等内容。 客户(customer):指个人或单位,他们为产品开发提供资金,通常(但有时也不必)还提出各种需求。文件中的客户和开发者也可能是同一个组织的成员。 语言(language):是具有语法和语义的通信工具,包括一组
16、表达式、惯例和传递信息的有关规则。 分割(partitioning):把一个整体分成若干部分。 开发者(supplier):指为客户生产某种软件产品的个人或集团。在本指南中,客户和开发者可能是同一个组织的成员。 用户(user):指运行系统或者直接与系统发生交互作用的个人或集团。用户和客户通常不是同一些人。 4编写SRS的背景信息 4.1 SRS的基本要求 SRS是对要完成一定功能、性能的软件产品、程序或一组程序的说明。对SRS的描述有两项基本要求: 1)必须描述一定的功能、性能; 2)必须用确定的方法叙述这些功能、性能。 4.2 SRS的环境 必须认识到SRS在整个软件开发规范(见GB 85
17、66)所规定的有关阶段都起作用。正因为如此,SRS的起草者必须特别注意不要超出这种作用的范围。这意味着要满足下列要求: 1) SRS必须正确地定义所有的软件需求; 2) 除设计上的特殊限制之外,SRS中一般不描述任何设计、验证或项目管理细节。 4.3 SRS的特点 4.3.1 无歧义性 当且仅当它对每一个需求只有一种解释时,SRS者是无歧义的。 1) 要求最终产品的每一个特性用某一术语描述; 2) 若某一术语在某一特殊的行文中使用时具有多种歧义,那么对该术语的每种含义作出解释并指出其适用场合。 需求通常是用自然语言编写的,使用自然语言的SRS起草者必须特别注意消除其需求的歧义性。提倡使用形式化
18、需求说明语言。 4.3.2 完整性 如果一个SRS能满足下列要求,则该SRS就是完整的: 1) 包括全部有意义的要求,无论是关系到功能的、性能的、设计约束的,还是关系到属性或外部接口方面的需求; 2) 对所有可能出现的输入数据的响应予以定义,要对合法和非合法的输入值的响应做出规定; 3) 要符合SRS要求。如果个别章节不适用,则在SRS中要保留章节号; 4) 填写SRS中的全部插图、表、图示标记和参照,并且定义全部术语和度量单位。 4.3.2.1 关于使用“待定”一词的规定 任何一个使用“待定”的SRS都是不完全的。 1) 若万一遇到使用“待定”一词时,作如下处理: 对产生“待定”一词的条件进
19、行描述,使得问题能被解决; 描述必须干什么事,以删除这个“待定”;2) 包含有“待定”一词的任何SRS的项目文件应该: 标识与此特定文件有关的版本号或叙述其专门的发布号; 拒绝任何仍标识为“待定”一词的SRS章节的许诺。 4.3.3 可验证性 当且仅当SRS中描述的每一个需求都是可以验证的,该SRS才是可以验证的;当且仅当在某一性能价格比可取的有限处理过程,人或机器能通过该过程检查软件产品能否满足需求时,才称这个需求是可以验证的。 4.3.4 一致性 当且仅当SRS中各个需求的描述是不矛盾时SRS才是一致的。 4.3.5 可修改性 如果一个SRS的结构和风格在需求有必要改变时是易于实现的、完整
20、性的、一致的,那么这个SRS就是可以修改的。可修改性要求SRS具备以下条件: 1) 具有一个有条不紊的易于使用的内容组织,具有目录表,索引和明确的交叉引用表; 2) 没有冗余。即同一需求不能在SRS中出现多次。 冗余本身不是错误,但是容易发生错误。冗余可增加SRS的可读性,但是在一个冗余文件被更新时容易出现问题。例如:假设一个明确的需求在两个地方详细列出,后来发现这个需求需要改变,若只修改一个地方,于是SRS就变得不一致了。 不管冗余是否必须,SRS一定要包含一个详细的交叉引用表,以便SRS具备可修改性。 4.3.6 可追踪性 如果每一个需求的源流是清晰的,在进一步产生和改变文件编制时,可以方
21、便地引证每一个需求,则该SRS就是可追踪的。建议采用如下两种类型的追踪: 1) 向后追踪(即向已开发过的前一阶段追踪)。根据先前文件或本文件前面的每一个需求进行追踪。 2) 向前追踪(即是向由SRS派生的所有文件追踪)。根据SRS中具有唯一的名字和参照号的每一个需求进行追踪。 当SRS中的一个需求表达另一个需求的一种指派或者是派生的,向前、向后的追踪都要提供。例如: 1) 从总的用户响应时间需求中分配给数据库操作响应时间; 2) 识别带有一定功能和用户接口的需求的报告格式; 3) 支持法律或行政上需要的某个软件产品(例如,计算税收)。在这种情况下,要指出软件所支持的确切的法律或行政文件。 当软
22、件产品进入运行和维护阶段时,SRS的向前可追踪性显得特别重要。当编码和设计文件作修改时,重要的是要查清这些修改所影响的全部需求。 4.3.7 运行和维护阶段的可使用性 SRS必须满足运行和维护阶段的需要,包括软件最终替换。 1) 维护常常是由与原来开发无联系的人来进行的。局部的改变(修正)可以借助于好的代码注释来实现。对于较大范围的改变。设计和需求文件是必不可少的,这里隐含了两个作用: 如4.3.5 条指出,SRS必须是可修改的; SRS中必须包括一个记录,它记录那些应用于各个成分的所有具体条文。例如:它们的危急性(如故障可能危及完全或导致大量财政方面和社会方面的损失);它们仅与暂时的需要相关
23、(如支持一种可立即恢复原状的显示);它们的来源(如某功能是由已存在的软件产品的全部拷贝复制而成)。 2) 要求在SRS中清楚地写明功能的来源和目的,因为对功能的来源和引入该功能的目的不清楚的话,通常不可能很好地完成软件的维护。 4.4 SRS的编制者 软件开发的过程是由开发者和客户双方同意开发什么样的软件协议开始的。这种协议要使用SRS的形式,应该由双方联合起草。这是因为: 1) 客户通常对软件设计和开发过程了解较少,而不能写出可用的SRS; 2) 开发者通常对于客户的问题和意图了解较少,从而不可能写出一个令人满意的系统需求。 4.5 SRS的改进 软件产品的开发过程中,在项目的开始阶段不可能
24、详细说明某些细节,在开发过程中可能发现SRS的缺陷、缺点和错误之类的问题,所以可能要对SRS进行改进。 在SRS的改进中,应注意如下事项: 1) 尽管可以预见校正版本的开发以后不可避免,而对需求还必须尽可能完全、清楚地描述。 2) 一旦最初识别出项目的变化,应引入一个正式的改变规程来标识、控制、追踪和报告项目的改变。批准了的需求改变,用如下的方法编入SRS之中: 提供各种改变后的正确的、完全的审查记录; 允许对SRS当前的和被替代部分的审查。 4.6 SRS的编制工具 编制SRS最显而易见的方法是用自然语言来描述。尽管自然语言是丰富多彩的,但不易精确,用形式化的方法较好。 4.6.1 形式化说
25、明方法 在SRS中是否使用形式化方法要依据下列因素: 1) 程序规模和复杂性; 2) 客户合同中是否要求使用; 3) SRS是否是一个合同工具或仅仅是一个内部文件; 4) SRS文件是否成为设计文件的根据; 5) 具有支持这种方法的计算机设备。 4.6.2 生产工具 软件产品生产中有多种生产工具。比如,计算机的字处理器就是非常有用的生产辅助工具。一个SRS通常有若干作者。可能经历若干版本,并且要进行多次重新组织内容。故生产工具是必要的。 4.6.3 表达工具 在SRS中有许多词汇,特别是许多名词和动词,专门涉及到系统的实体和许多活动,所以表达SRS需要若干工具。比如: 1) 可以验证实体或活动
26、,无论在SRS中什么地方都是同一名字。2) 可以标识一个特殊的实体或动作在规格说明中的描述位置。 此外,可以使用若干种形式化方法,以便允许自动处理SRS内容,只要作某些限制就可以做到:用一些表格或图示法来显示需求。 用详细分层体系自动检查SRS的需求,这里每一个分层自身是完全的,但是也可以扩展为下一层,或是上一层的一个组成成分。 自动检查SRS具有在4.3条描述的部分或全部特点。5 软件需求 SRS中每一个软件需求是要求开发软件产品的某些基本功能和性能的一个陈述。 5.1 表达软件需求的方法 软件需求可以用若干种方法来表达: 1)通过输入、输出说明; 2)使用代表性的例子; 3)用规范化的模型
27、。 5.1.1 输入、输出说明 用输入输出序列来描述一个软件产品所要求的特性是很有效的。 5.1.1.1 途径 根据被描述的软件的性质,至少有三种不同的途径: 1) 有些软件产品(如报表系统)要求着重说明输出。一般情况下,致力于输出的系统主要是在数据文卷上操作。用户的输入通常是致力于提供控制信息和启动数据文卷的处理; 2) 有些软件产品需要着重说明输入、输出特性。关注输入、输出的系统主要是在当前的输入上操作,要求生成与输入相匹配的输出(类似于数据转换例行程序或一个数学函数包); 3) 还有一些系统(如过程控制系统)要求记忆它们的状态。可以根据本次输入和上一次输入进行应答。也就是说,它的行为如同
28、一个有限状态机。在此种情况下,既要关注输入/输出对,又要关注这些输入/输出对的次序。 5.1.1.2 困难 多数软件产品可能接收无限的序列作为输入,于是,为了通过输入输出序列完整地说明产品的特性,就要求SRS包括一个无限长的输入和所需的输出充列。然而,用这样的途径不可能完整地描述软件所要求的一切特性。 5.1.2 典型例子 一种选择是用典型例子来说明要求的特性。例如,假设一个系统中当接收“0”时用“1”来回答。显然,要列出全部输入和输出序列是不可能的。然而,用典型的序列可以十分清楚地理解系统的特性。下面是一组四种对话的典型的例子,用它描述系统特性。 0101 010101010101 01 0
29、10101 这些对话仅提供了要求的输入和输出之间的关系,但是不能完全描述系统的特性。 5.1.3 模型 另一种表达需求的方法是模型的方式,这是表达复杂需求的精确和有效方法。 至少可以提出三种可供使用的通用模型:数学型、功能型、计时型。应注意区别各种模型的应用场合,参考5.1.3.5。 5.1.3.1 数学模型 数学模型是使用数学关系描述软件特性的模型。数学模型对某些特殊应用领域是特别有用的。例如,导航、线性规划、计量经济、信号处理和气象分析等。 用数学模型能够对5.1.2中所讨论的典型例子描述如下: (01)*。 这里,“*”号表示括号内的字符串可以重复一次或多次。 5.1.3.2 功能模型
30、功能模型是提供从略语以输出映象的模型。象有限状态机或Petri网,这些功能模型可以有助于标识和定义软件的各种特点,或者可以表示系统所要进行的操作。 对前面用数学模型描述的例子。可用图1所示的有限状态机形式的功能模型来描述。图中进入的箭头表示启动状态。双线的方框表示接收状态。在各线记号x/y的含义是:x代表接受的输入,而y是产生的输出。 5.1.3.3 计时模型 计时模型是一种增加了时间限制的模型。这种模型对于表达软件特性的形式和细节特别有用。尤其是实时系统或考虑人为因素的系统。 计时模型可以把下列限制加到图1的模型中去: 1)激活因素0将在进入S1状态30S之内出现; 2)响应1将在进入S2状
31、态2S之内出现。 5.1.3.4 其他模型 除了上面提及的模型外。对一些特殊的应用还有一些特别有用的模型。例如,编译程序的说明可以使用属性文法,工资单系统可以使用表格。要注意的是,对SRS使用形式需求语言,通常含有使用特殊模型的意思。 5.1.3.5 警告 无论使用哪一类型的模型,都要在SRS中或在SRS涉及到的一个文件中对它严格定义。这个定义应该规定: 1)模型中的参数所要求的范围; 2)使用时的限定值; 3)结果的精确度; 4)负载的能力; 5)要求的执行时间; 6)缺省或失败时的响应。 必须注意,在需求的定义域内要保持一个模型定义。每当一个SRS使用一个模型时: 1)它意味着此模型提供一
32、个十分有效和精确的方法说明需求; 2)并不意味着软件产品的实现必须基于这个模型。 一个模型用于解释文件所写的需求是有效的,但是对于实际软件的实现可能并不是最适宜的。 5.2 软件需求的注释 有关软件产品的所有需求,并不是同等重要的。某些需求可能是基本的,例如是对于生命攸关的应用。而另一些可能并不那么重要。 SRS中每一个需求必须进行注释,以便区别其重要的程度。 有这种方法注释需求,可以: 1) 帮助客户对每个需求给予更周密的考虑,通常可以在需求中澄清隐藏的假设; 2) 帮助开发者做出正确的设计决定,并对软件产品不同部分作出相应的努力。 5.2.1 稳定性 注释需求的一种方法是使用稳定性量纲。当
33、一个需求在软件预期的生存期间内描述不改变的话,可以认为该需求是稳定的,否则可以认为是易变的。 5.2.2 必要性等级 注释的另一种方法是把需求分成必须保证级、期望级和任选级。 5) 必须保证是指软件必须和这些需求相一致,否则该软件不可能被接受; 6) 期望是指这些需求将提高软件产品的功能,但如果缺省的话也是可接受; 7) 任选是给开发者一个机会,可以提供某些超出SRS规定的目标。 5.2.3 注意事项 在注释需求之前,必须彻底理解这种注释的实质性含义。 5.3 在表达需求时遇到的共同弊病 SRS的基本点是它必须说明由软件获得的结果,而不是获得这些结果的手段。编写需求的人必须描述的基本问题是:
34、1) 功能所设计的软件要做什么;2) 性能是指软件功能在执行过程中的速度、可使用性、响应时间、各种软件功能的恢复时间、吞吐能力、精度、频率等等; 3) 强加于实现的设计限制在效果、实现的语言、数据库完整性、资源限制、操作环境等等方面所要求的标准; 4) 属性可移植性、正确性、可维护性及安全性等方面的考虑因素; 5) 外部接口与人、硬件、其他软件和其他硬件的相互关系。 编写需求的人应当避免把设计或项目需求写入SRS之中,应当对说明需求设计约束与规划设计两者有清晰的区别。 5.3.1 在SRS中嵌入了设计 在SRS中嵌入设计说明,会过多地约束软件设计,并且人为地把具有潜在危险的需求放入SRS中。
35、1) SRS必须描述在干什么数据上、为谁完成什么功能、在什么地方、产生什么结果。SRS应把注意力集中在要完成的服务目标上。通常不指定如下的设计项目: 把软件划分成若干模块; 给每一个模块分配功能; 描述模块间的信息流程或者控制流程; 选择数据结构。 2) 把设计完全同SRS隔离开来始终是不现实的。安全和保密方面的周密考虑可能增加一些直接反映设计约束的需求。例如: 在一些分散的模块中保持某些功能; 允许在程序的某些区域之间进行有限的通讯; 计算临界值的检查和。 3) 通常应考虑到,若要为软件选择高层次的设计,就可能需要大量的资源(可能占整个产品开发成本的10%-20%以上)。有两种选择: 不顾本
36、指南的警告,在SRS中描述了设计。这意味着,或者将一个潜在不适当的设计作为一个需求进行描述(因为,若要得到好的设计,所花费的时间是不够的),或者在需求阶段花费了过多的时间(因为在SRS完成之前整个设计分析都要完成); 采用本指南中5.1.3条中的建议,用模型设计描述需求,这种模型设计只用于辅助描述需求,而不使之成为实际的设计。 5.3.2 在SRS中嵌入了一些项目要求 SRS应当是描写一个软件产品,而不是描述生产软件产品的过程。 项目要求表达客户和开发者之间对于软件生产方面合同性事宜的理解(因此不应当包括在SRS中)例如: 1) 成本; 2) 交货进度; 3) 报表处理; 4) 软件开发方法;
37、 5) 质量保证; 6) 确认和验证的标准; 7) 验收过程。 项目需求在另外文件中描述。在SRS中提供的只是关于软件产品本身的需求。6 SRS大纲本章着重讨论SRS的每一个基本部分,可以作为一个SRS的大纲。表1给出该大纲目录,表2至表5给出大纲中第3章的具体需求内容。各开发者和客户应当根据所描述的实际情况,按本指南有关规定编写自己的SRS。 1 前言 1.1 目的 1.2 范围 1.3 定义、缩写词、略语 1.4 参考资料 2 项目概述 2.1 产品描述 2.2 产品功能 2.3 用户特点 2.4 一般约束 2.5 假设和依据 3 具体需求 (参阅本指南6.3.2 条中具体需求的组织形式)
38、 附录 索引 6.1 前言(SRS第1章) 本章提供整个SRS综述。 6.1.1 目的(SRS的1.1条) 在这一条包括下列内容: 1)描述实际SRS的目的; 2)说明SRS所预期的读者。 6.1.2 范围(SRS的1.2条) 1) 通常应考虑到,若要为软件选择高层次的设计,就可能需要大量的资源(可能占整个产品开发成本的10%-20%以上)。有两种选择: 2) 用一个名字标识被生产的软件产品。比如:数据库系统,报表生成程序等等; 3) 说明软件产品将干什么,如果需要的话,还要说明软件产品不干什么; 4) 描述所说明的软件的应用。应当: 尽可能精确地描述所有相关的利闪、目的、以及最终目标。 如果
39、有一个较高层次的说明存在,则应该使其和高层次说明中的类似的陈述相一致(例如,系统的需求规格说明)。 6.1.3 定义、缩写词、略语(SRS的1.3条) 本条中必须提供全部需求的术语、缩写词及略语的定义,以便对SRS进行适当的解释。这些信息可以由SRS的附录提供。也可以参考其他的文件。 6.1.4 参考资料(SRS的1.4条) 本条应包括: 1) 在SRS中各处参照的文件的全部清单,如经核准的计划任务书,上级机关批文、合同等; 2) 列出其他参考资料,如属本项目的其他已发表的文件和主要文献等。每一个文件、文献要有标题,索引号或文件号,发布或发表日期以及出版单位; 3) 详细说明可以得到该参考文件
40、的来源。这个信息可以通过引用附录或其他文件提供。 6.2 项目概述(SRS第2章) 本章应描述影响产品和其需求的一般因素,本章不说明具体的需求,而仅使需求更易于理解。6.2.1 产品描述(SRS的2.1条) 这一条是把一个产品用其他有关的产品或项目来描述。 1) 如果这个产品是独立的,而且全部内容自含,应在此说明; 2) 如果SRS定义的产品是一个较大的系统或项目中的一个组成部分,那么本条应包括如下内容: 要概述这个较大的系统或项目的每个组成部分的功能,并说明其接口; 指出该软件产品主要的外部接口。在这里,不要求对接口详细地描述,详细描述放在SRS其他章条中; 描述所使用的计算机硬件、外围设备
41、。这里仅仅是一个综述性描述。 在本条的描述中,用一个方框图来表达一个较大的系统或项目的主要组成部分、相互联系和外部接口是非常有帮助的。 本条既不用来强迫进行设计方案的描述,也不是描述在解决问题时的设计约束。本条应对在以后具体需求一章中说明的设计约束提供理由。 6.2.2 产品功能(SRS的2.2条) 本条是为将要完成的软件功能提供一个摘要。例如,对于一个记帐程序来说,SRS可以用这部分来描述:客户帐目维护、客户财务报表和发票制作,而不必把功能所要求的大量的细节描写出来。 有时,如果存在较高层次的规格说明时,则功能摘要可直接从中取得,这个较高层次的规格说明为软件产品分配了特殊的功能,为了清晰起见
42、,请注意: 1) 编制功能的一种方法是制作功能表,以便客户或者第一次读这个文件的人都可以理解;2) 用方框图来表达不同的功能和它们的关系也是有帮助的。但要牢记,这样的图不是产品设计时所需求的,而只是一种有效的解释性的工具。 这一条不用作陈述具体需求,只是对后来SRS中具体需求一章中为什么要描述的某些需求提供理由。 6.2.3 用户特点(SRS的2.3条) 本条要描述影响具体需求的产品的最终用户的一般特点。 许多人在软件生存周期的操作和维护阶段与系统相关。而这些人中有用户、操作员、维护人员和系统工作人员。这些人的某些特点,象教育水平、经验、技术、专长等,都是施加于系统操作环境的重要约束。 如果系
43、统的大多数用户是一些临时用户,那么就要求系统包含如何完成基本功能的提示,而不是假设用户已经从过去的会议或从阅读用户指南中了解到这些细节。 这一条的内容不能用来陈述具体需求或强加若干特殊的设计约束,本条应对在SRS的具体需求一章之中的某些具体需求或设计约束的描述提供理由。 6.2.4 一般约束(SRS的2.4条) 本条对设计系统阳限制开发者选择的其他一些项作一般性描述。而这些项将限定开发者在设计系统时的任选项。这些包括: 1) 管理方针;2) 硬件的限制; 3) 与其他应用间的接口; 4) 并行操作; 5) 审查功能; 6) 控制功能; 7) 所需的高级语言; 8) 通信协议; 9) 应用的临界
44、点; 10)安全和保密方面的考虑。 本条不陈述具体需求或具体设计约束:而对SRS的具体需求一章中为什么要确定某些具体需求和设计约束提供理由。 6.2.5 假设和依据(SRS的2.5条) 本条列出影响SRS中陈述的需求的每一个因素。这些因素不是软件的设计约束,但是它们的改变可能影响到SRS中的需求。例如:假定一个特定的操作系统是在被软件产品指定的硬件上使用的,然而,事实上这个操作系统是不可能使用的,于是,SRS就要进行相应的改变。 6.3 具体需求(SRS的第3章) 本章应包括软件开发者在建立设计时需要的全部细节。这是SRS中篇幅最大和最重要的部分。 1) 根据本指南第4章所规定的准则(如可验证
45、性、无歧义性等),对每一个需求细节作具体描述; 2) 在SRS的前言、项目概述、附录部分的有关讨论中,要提供对任何一个具体需求交叉引用的背景; 3) 具体需求分类的方法如下: 功能需求; 性能需求; 设计约束; 属性; 外部接口需求。 本章中要注意的二点是: 1) 符合逻辑的和可读的方式组织; 2) 详细描述每个需求,使该需求应达到目标能够用指定的方法进行客观的验证。 6.3.1 具体需求的内容 6.3.1.1 功能需求 本条描述软件产品的输入怎样变换成输出。即软件必须完成的基本动作。 对于每一类功能或者有时对于每一个功能,需要具体描述其输入、加工和输出的需求。这通常由四个部颁组成: 1) 引
46、言这部分描述的是功能要达到的目标、所采用的方法和技术,还应清楚说明功能意图的由来和背景。 2) 输入 这部分应包括: 详细描述该功能的所有输入数据,如:输入源、数量、度量单位、时间设定、有效输入范围(包括精度和公差); 操作员控制细节的需求。其中有名字、操作员活动的描述、控制台或操作员的位置。例如:当打印检查时,要求操作员进行格式调整; 指明引用接口说明或接口控制文件的参考资料。 3) 加工 定义输入数据、中间参数,以获得预期输出结果的全部操作。它包括如下的说明: 输入数据的有效性检查; 操作的顺序,包括事件的时间设定; 异常情况的响应,例如,溢出、通信故障、错误处理等; 受操作影响的参数; 降级运行的要求; 用于把系统输入变换成相应输出的任何方法(方程式、数学算法、逻辑操作等); 输出数据的有效性检查。 4) 输出 这部分应包括: 详细描述该功能所有输出数据,例如:输出