中华人民共和国国家标准计算机软件需求说明编制指南发布实施中华人民共和国电子工业部发布中华人民共和国国家标准计算机软件需求说明编制指南中华人民共和国电子工业部批准实施引言目的和作用本指南为软件需求实践提供了一个规范化的方法本指南不提倡把软件需求说明以下简称划分成等级避免把它定义成更小的需求子集本指南适用对象软件客户以便精确地描述他们想获得什么样的产品软件开发者以便准确地理解客户需要什么样的产品对于任一要实现下列目标的单位和或个人要提出开发规范化的提纲定义自己需要的具体的格式和内容产生附加的局部使用条款如质量检查清单或者作者手册等将完成下列目标在软件产品完成目标方面为客户和开发者之间建立共同协议创立一个基础对要实现的软件功能做全面描述帮助客户判断所规定的软件是否符合他们的要求或者怎样修改这种软件才能适合他们的要求提高开发效率编制的过程将使客户在设计开始之前周密地思考全部需求从而减少事后重新设计重新编码和重新测试的返工活动在中对各种需求仔细地进行复查还可以在开发早期发现若干遗漏错误的理解和不一致性以便及时加以纠正为成本计价和编制计划进度提供基础提供的对被开发软件产品的描述是计算机软件产品成本核算的基础并且可以为各方的要价和付费提供依据对软件的清晰描述有助于估计所必须的资源并用作编制进度的依据为确认和验证提供一个基准任何组织将更有效地编制他们的确认和验证计划作为开发合同的一部分还可以提供一个可以度量和遵循的基准然而反之则不成立即任一有关软件的合同都不能作为因为这种文件几乎不包括详尽的需求说明并且通常是不完全的便于移植有了就便于移植软件产品以适应新的用户或新的机种客户也易于移植其软件到其他部门而开发者同样也易于把软件移植到新的客户作为不断提高的基础由于所讨论的是软件产品而不是开发这个产品的设计因此是软件产品继续提高的基础虽然也可能要改变但是原来的还是软件产品改进的可靠基础范围本指南适用于编写软件需求规格说明它描述了一个所必须的内容和质量并且在第章中提供了大纲引用标准计算机软件开发规范计算机软件产品开发文件编制指南软件工程术语定义所列术语和下列定义适用于本指南合同是由客户和开发者共同签署的具有法律约束力的文件其中包括产品的技术组织成本和进度计划要求等内容客户指个人或单位他们为产品开发提供资金通常但有时也不必还提出各种需求文件中的客户和开发者也可能是同一个组织的成员语言是具有语法和语义的通信工具包括一组表达式惯例和传递信息的有关规则分割把一个整体分成若干部分开发者指为客户生产某种软件产品的个人或集团在本指南中客户和开发者可能是同一个组织的成员用户指运行系统或者直接与系统发生交互作用的个人或集团用户和客户通常不是同一些人编写的背景信息的基本要求是对要完成一定功能性能的软件产品程序或一组程序的说明对的描述有两项基本要求必须描述一定的功能性能必须用确定的方法叙述这些功能性能的环境必须认识到在整个软件开发规范见所规定的有关阶段都起作用正因为如此的起草者必须特别注意不要超出这种作用的范围这意味着要满足下列要求必须正确地定义所有的软件需求除了设计上有特殊限制之外中一般不描述任何设计验证或项目管理细节的特点无歧义性当且仅当它对每一个需求只有一种解释时才是无歧义的要求最终产品的每一个特性用某一术语描述若某一术语在某一特殊的行文中使用时具有多种含义那么对该术语的每种含义作出解释并指出其适用场合需求通常是用自然语言编写的使用自然语言的起草者必须特别注意消除其需求的歧义性提倡使用形式化需求说明语言完整性如果一个能满足下列要求则该就是完整的包括全部有意义的需求无论是关系到功能的性能的设计约束的还是关系到属性或外部接口方面的需求对所有可能出现的输入数据的响应予以定义要对合法和非合法的输入值的响应做出规定要符合要求如果个别章节不适用则在中要保留章节号填写中的全部插图表图示标记和参照并且定义全部术语和度量单位关于使用待定一词的规定任何一个使用待定的都是不完全的若万一遇到使用待定一词时作如下处理对产生待定一词的条件进行描述使得问题能被解决描述必须干什么事以删除这个待定包含有待定一词的任何的项目文件应该标识与此特定文件有关的版本号或叙述其专门的发布号拒绝任何仍标识为待定一词的章节的许诺可验证性当且仅当中描述的每一个需求都是可以验证的该才是可以验证的当且仅当在某一性能价格比可取的有限处理过程人或机器能通过该过程检查软件产品能否满足需求时才称这个需求是可以验证的一致性当且仅当中各个需求的描述是不矛盾时才是一致的可修改性如果一个的结构和风格在需求有必要改变时是易于实现的完整的一致的那么这个就是可以修改的可修改性要求具备以下条件具有一个有条不紊的易于使用的内容组织具有目录表索引和明确的交叉引用表没有冗余即同一需求不能在中出现多次冗余本身不是错误但是容易发生错误冗余可增加的可读性但是在一个冗余文件被更新时容易出现问题例如假设一个明确的需求在两个地方详细列出后来发现这个需求需要改变若只修改了一个地方于是就变得不一致了不管冗余是否必须一定要包含一个详细的交叉引用表以便具备可修改性可追踪性如果每一个需求的源流是清晰的在进一步产生和改变文件编制时可以方便地引证每一个需求则该就是可追踪的建议采用如下两种类型的追踪向后追踪即向已开发过的前一阶段追踪根据先前文件或本文件前面的每一个需求进行追踪向前追踪即是向由派生的所有文件追踪根据中具有唯一的名字和参照号的每一个需求进行追踪当中的一个需求表达另一个需求的一种指派或者是派生时向前向后的追踪都要提供例如从总的用户响应时间需求中分配给数据库操作响应时间识别带有一定功能和用户接口的需求的报告格式支持法律或行政上需要的某个软件产品例如计算税收在这种情况下要指出软件所支持的确切的法律或行政文件当软件产品进入运行和维护阶段时的向前可追踪性显得特别重要当编码和文件作修改时重要的是要查清这些修改所影响的全部需求运行和维护阶段的可使用性必须满足运行和维护阶段的需要包括软件最终替换维护常常是由与原来开发无联系的人来进行的局部的改变修正可以借助于好的代码注释来实现对于较大范围的改变设计和需求文件是必不可少的这里隐含了两个作用如条指出必须是可修改的中必须包括一个记录它记录那些应用于各个成分的所有具体条文例如它们的危急性如故障可能危及完全或导致大量财政方面的社会方面的损失它们仅与暂时的需要相关如支持一种可立即恢复原状的显示它们的来源如某功能是由已存在的软件产品的全部拷贝复制而成要求在中清楚地写明功能的来源和目的因为对功能的来源和引入该功能的目的不清楚的话通常不可能很好地完成软件的维护的编制者软件开发的过程是由开发者和客户双方同意开发什么样的软件协议开始的这种协议要使用的形式应该由双方联合起草这是因为客户通常对软件设计和开发过程了解较少而不能写出可用的开发者通常对于客户的问题和意图了解较少从而不可能写出一个令人满意的系统需求的改进软件产品的开发过程中在项目的开始阶段不可能详细说明某些细节在开发过程中可能发现的缺陷缺点和错误之类的问题所以可能要对进行改进在的改进中应注意如下事项尽管可以预见校正版本在开发以后不可避免而对需求还必须尽可能完全清楚地描述一旦最初识别出项目的变化应引入一个正式的改变规程来标识控制追踪和报告项目的改变批准了的需求改变用如下的方法编入之中提供各种改变后的正确的完全的审查记录允许对当前的和被替代部分的审查的编制工具编制最显而易见的方法是用自然语言来描述尽管自然语言是丰富多彩的但不易精确用形式化的方法较好形式化说明方法在中是否使用形式化方法要依据下列因素程序规模和复杂性客户合同中是否要求使用是否是一个合同工具或仅仅是一个内部文件文件是否成为设计文件的根据具有支持这种方法的计算机设备生产工具软件产品生产中有多种生产工具比如计算机的字处理器就是非常有用的生产辅助工具一个通常有若干作者可能经历若干版本并且要进行多次重新组织内容故生产工具是必要的表达工具在中有许多词汇特别是许多名词和动词专门涉及到系统的实体和许多活动所以表达需要若干工具比如可以验证实体或活动无论在中什么地方都是同一名字可以标识一个特殊的实体或动作在规格说明中的描述位置此外可以使用若干种形式化方法以便允许自动处理内容只要作某些限制就可以做到用一些表格或图示法来显示需求用详细分层体系自动检查的需求这里每一个分层自身是完全的但是也可以扩展为下一层或是上一层的一个组成成分自动检查具有在条描述的部分或全部特点软件需求中每一个软件需求是要求开发软件产品的某些基本功能和性能的一个陈述表达软件需求的方法软件需求可以用若干种方法来表达通过输入输出说明使用代表性的例子用规范化的模型输入输出说明用输入输出序列来描述一个软件产品所要求的特性是很有效的途径根据被描述的软件的性质至少有三种不同的途径有些软件产品如报表系统要求着重说明输出一般情况下致力于输出的系统主要是在数据文卷上操作用户的输入通常是致力于提供控制信息和启动数据文卷的处理有些软件产品需要着重说明输入输出特性关注输入输出的系统主要是在当前的输入上操作要求生成与输入相匹配的输出类似于数据转换例行程序或一个数学函数包还有一些系统如过程控制系统要求记忆它们的状态可以根据本次输入和上一次输入进行应答也就是说它的行为如同一个有限状态机在此种情况下既要关注输入输出对又要关注这些输入输出对的次序困难多数软件产品可能接收无限的序列作为输入于是为了通过输入输出序列完整地说明产品的特性就要求包括一个无限长的输入和所需的输出序列然而用这样的途径不可能完整地描述软件所要求的一切特性典型例子一种选择是用典型例子来说明要求的特性例如假设一个系统中当接收时用来回答显然要列出全部输入和输出序列是不可能的然而用典型的序列可以十分清楚地理解系统的特性下面是一组四种对话的典型的例子用它描述系统特性这些对话仅提供了要求的输入和输出之间的关系但是不能完全描述系统的特性模型另一种表达需求的方法是模型的方式这是表达复杂需求的精确和有效的方法至少可以提出三种可供使用的通用模型数学型功能型计时型应注意区别各种模型的应用场合参考数学模型数学模型是使用数学关系描述软件特性的模型数学模型对某些特殊应用领域是特别有用的例如导航线性规划计量经济信号处理和气象分析等用数学模型能够对中所讨论的典型例子描述如下这里号表示括号内的字符串可以重复一次或多次功能模型功能模型是提供从输入到输出映象的模型象有限状态机或网这些功能模型可以有助于标识和定义软件的各种特点或者可以表示系统所要进行的操作对前面用数学模型描述的例子可用图所示的有限状态机形式的功能模型来描述图中进入的箭头表示启动状态双线的方框表示接收状态在各线记号的含义是代表接受的输入而是产生的输出图计时模型计时模型是一种增加了时间限制的模型这种模型对于表达软件特性的形式和细节特别有用尤其是实时系统或考虑人为因素的系统计时模型可以把下列限制加到图的模型中去激活因素将在进入状态之内出现响应将在进入状态之内出现其他模型除了上面提及的模型外对一些特殊的应用还有一些特别有用的模型例如编译程序的说明可以使用属性文法工资单系统可以使用表格要注意的是对使用形式需求语言通常含有使用特殊模型的意思警告无论使用哪一类型的模型都要在中或在涉及到的一个文件中对它严格定义这个定义应该规定模型中的参数所要求的范围使用时的限定值结果的精确度负载的能力要求的执行时间缺省或失败时的响应必须注意在需求的定义域内要保持一个模型定义每当一个使用一个模型时它意味着此模型提供一个十分有效和精确的方法说明需求并不意味软件产品的实现必须基于这个模型一个模型用于解释文件所写的需求是有效的但是对于实际软件的实现可能并不是最适宜的软件需求的注释有关软件产品的所有需求并不是同等重要的某些需求可能是基本的例如是对于生命攸关的应用而另一些可能并不那么重要中每一个需求必须进行注释以便区别其重要的程度用这种方法注释需求可以帮助客户对每一个需求给予更周密的考虑通常可以在需求中澄清隐藏的假设帮助开发者做出正确的设计决定并对软件产品不同部分作出相应的努力稳定性注释需求的一种方法是使用稳定性量纲当一个需求在软件预期的生存期间内描述不改变的话