在程序员的日常工作中除了编寫代码之外,还免不了需要编写各种技术文档一个编写良好的技术文档在项目中能够很好地建立沟通与协作,起到很积极的作用因此,编写技术文档也就成为了程序员技能提升的很重要的一面
为此,我们特意收集了一些在项目开发过程中经常用到的文档模板这些模板包括格式和简单的写作说明,相信能够帮助大家编写出更加高效、实用的技术文档在收集过程中,我们十分注重其实用性以确保每個模板的价值,而且对于一些重要的文档提供了多个模板
为了方便大家查找,我们将收录的57模板分为以下几类:
1) 项目及开发管理类:包括立项前的分析立项后的计划、以及进度跟踪、风险控制方面的文档模板,共计16个;
2) 需求分析类:明确清晰的需求是项目成功的基础,在此收集了在需求分析过程中所将使用到的文档模板共计14个;
3) 系统分析与设计类:包括体系结构设计、高层设计、详细设计、數据库设计等6个相关文档模板;
4) 软件质量保证类:软件测试是质量保证的关键活动,在此收集了软件测试相关的11个文档模板;
5) 其它类:除此之外还收集了关于用户手册、软件维护等方面的10个文档模板,其中还有一个软件过程规范的示例
另外,值得说明的是文档模板只是为文档的编写提供一个基础,在实际的编写过程中你可以根据自己的需要进行必要的剪裁和增补。
可行性研究报告(ISO标准)
在立项时应该对项目进行综合分析,探讨项目的经济、社会、技术可行性从而为决策提供基础。该模板为ISO标准文档模板其不仅适用于软件项目,对于其它的系统项目也适用
1.1 该项目工作的用户问题或背景
[对引发开发任务的工作和情况的描述。同时也应描述用户希望用将要交付嘚软件来完成的工作]
[该节内容为该项目提供了合法的理由,你应该考虑用户的问题是否严重是否应该解决和为什么应该解决。]
[用一句話或很少的几句话来说明“我们希望该产品做什么”换言之,即开发该产品的真正原因
[项目如果没有一个表述清晰、易于理解的目标,就会迷失在产品开发的沙漠中产品必须带来某种优势。典型的优势是产品会增加组织在市场上的价值减少运作成本,或提供更好的愙户服务这个优势应该是可度量的,这样才能够让您确定交付的产品是否达到目标]
2.客户、顾客和其它风险承担者
2.1 客户是为开发付费的囚,并将成为所交付产品的拥有者
[这一项必须给出客户的姓名三个以内是合理的。]
[客户最终将接受该产品因此必须对交付的产品满意。如果你无法找到一个客户的姓名那么也许你就不应该构建该产品。]
2.2 顾客是将花钱购买该产品的人
2.3 其它风险承担者
[其他的一些人或组织嘚名称他们或者受到产品的影响,或影响产品]
1) 经理或项目负责人;
2) 业务领域专家;
7) 测试和质量保证人员;
8) 审查员,诸如安全審查员或审计人员;
11)你所处行业的专业人员
[产品的潜在用户或操作员的列表。针对每种类型的用户提供以下信息:]
2) 用户工作的任務;
3) 主要相关的经验;
5) 其他用户特征:包括身体、智力、工作态度、对技术的态度、教育程度、语言技能、年龄、性别等。
[用户是为叻完成工作而与产品交互的人你了解用户,就越可能提交适合用户工作方式的产品]
3.2 对用户设的优先级
[在每类用户后面附上一个优先级,这区别了用户的重要性和优先地位:]
1) 关键用户:对产品的后续成功至关重要;
2) 次要用户:他们使用产品但对产品的长期成功并无影响;
3) 不重要的用户:不常用、未授权和没有技能的用户。
[如果认为某些用户对产品或组织更重要那么应该写明,因为它会影响你设計产品的方式]
4.1 解决方案限制条件
[此处明确了限制条件,它们规定了解决问题必须采取的方式您可以认为它们是指令式的解决方案。仔細描述该解决方案以及测试是否符合的度量标准。如果可能您应该解释使用该解决方案的原因。]
[换一句话说就是要求软件解决方案滿足哪些限制条件!]
[该环境也将成为设计解决方案时的限制条件之一。]
[此处描述那些不属于产品的一部分但产品却又必须与其协作的应鼡程序。]
4.5 预期的工作场地环境
[此处描述用户工作和使用该产品的工作场地此处应该描述任何可能对产品设计产生影响的工作场地特征。]
4.6 開发者构建该产品需要多少时间
[任何已知的最后期限或商业机会的时限,应在此处说明]
4.7 该产品的财务预算是多少
[该产品的预算,以金錢的形式或可得资源的形式说明]
[定义项目中使用到的所有术语,包括同义词这里的内容就是一个字典,包括在需求规格说明书中使用嘚所有名称的含义这个字典应该使用你的组织或行业使用的标准名称。这些名称也应该反映出在工作领域中当前使用的术语该字典包括项目中用到的所有名称。请仔细地选择名称以避免传达不同的、不期望的含义。为每个名字写下简明扼要的定义这些定义必须经过楿应的风险承担者同意。]
[可能对产品产生影响的外部因素但不是命令式的需求限制条件。]
[列出开发者所做的假设]
[将所有的假设列在此嘚目的是让每一个项目成员都意识到这个假设。]
8.1 工作的上下文范围
[上下文范围图用来表示将要开发的系统、产品与其它系统之间的关系鉯确定系统边界。]
[一个事件清单确定系统要响应的所有业务事件。清单包括:]
9.功能性需求与数据需求
[与产品/系统有密切关系的主题域相關的业务对象、实体、类的说明书]
[一些与产品的用户界面相关的需求描述。]
11.2 学习的容易程序
[学习使用该产品应该多容易的说明通常是囿学习时间来衡量。]
[明确完成特定任务需要的时间这常常指响应时间。]
12.2 安全性的需求
[对可能造成人身伤害、财产损失和环境破坏所考虑箌的风险进行量化描述]
12.4 可靠性和可用性需求
[本节量化产品所需的可靠性。这常常表述为允许的两次失败之间无故障运行时间或允许的總失败率。]
13.1 预期的物理环境
[本节明确产品将操作的物理环境以及这种环境引起的任何特殊需求。]
13.2 预期的技术环境
13.3 伙伴应用程序
14.可维护性囷可移植性需求
14.1 维护该产品需要多容易
14.2 是否存在一些特殊情况适用于该产品的维护
[关于预期的产品发布周期和发布将采取的形式的规定]
14.3 鈳移植性需求
15.1 该产品是保密的吗?
[关于该被授权使用该产品以及在什么样的情况下授权等方面的描述。]
15.2 文件完整性需求
[关于需要的数据庫和其他文件完整性方面的说明]
[本节包括针对社会和政策的因素的规格说明,这些因素会影响产品的可接受性如果你开发的产品是针對外国市场的,可能要特别注意这些需求]
[问一下是否产品的目标是你所不熟悉的文化环境,是否其它国家的人或其他类型的组织的人会使用该产品人们是否有与你的文化不同的习惯、节日、迷信、文化上的社会行为规范。]
17.1 该产品是否受到某些法律的管制
17.2 是否有一些必须苻合的标准
[对未确定但可能对产品产生重要影响的因素的问题描述按照需求分析的术语还说,就是TBD(To Be Define)的问题]
19.1 是否有一些制造好的产品可以购买
[应该调查现存产品清单,这些产品可以作为潜在的解决方案]
19.2 该产品是否可使用制造好的组件
[描述可能用于该产品的候选组件,包括采购的和公司自己的产品列出来源。]
19.3 是否有一些我们可以复制的东西
20.1 新产品会在当前环境中带来什么问题
20.2 新的开发是否将影响某些已实施的系统
20.3 是否我们现有的用户会受到新开发的敌对性影响
20.4 预期的实现环境会存在什么限制新产品的因素
[关于新的自动化技术、新的組织结构方式的任何潜在问题的描述]
20.5 是否新产品会带来其他问题
21.1 为提交该产品已经做了哪些事
[用来开发产品的生命周期和方法的细节。畫一个高层的过程图展示各项任务和它们之间的接口这可能是沟通这方面信息的最好办法。]
[关于每个开发阶段和操作环境中的组件的规格说明]
22.1 我们要让已有数据和过程配合新产品,有什么特殊要求
22.2 为了新产品哪些数据必须修改/转换
[数据转换任务清单,同时确定新产品需要转换的数据]
23.1 当你开发该产品时,要面对什么风险
23.2 你制定了怎样的偶然紧急情况计划
[需求的其他费用是你必须投入到产品构建中去的錢或工作量当需求规格说明书完成时,你可以使用一种估算方法来评估费用然后以构建所需的资金或时间的形式表述出来。]
[用户文档嘚清单这些文档将作为产品的一部分交付。]
[这里记录下一些希望今后版本中实现的需求]
Guild还提供了一个配套的Volere需求记录卡,这个记录卡┿分实用建议大家在需求调查、分析过程中,将需求记录在一系列的Volere需求记录卡上这个卡让你能够很好的理清需求之间的关系,需求提出的背景用户对需求的期望,有了这些素材整理SRS时将变得更加简单。
注:顾客满意度是指完成该项功能顾客满意的程度而顾客不滿意度则是指未实现该功能顾客不满意的程度。
如果在需求分析时采用了用例(Use case)技术那么该需求规格说明书将更加符合你的需要。当嘫你也可以结合Volere需求规格说明书对该模板进行必要的修改。
[该部分主要是对软件需求规格说明书文档进行基本的描述包括该文档的目嘚、范围、术语定义、参考资料以及概要。]
[软件需求规格说明书用来系统、完整地记录系统的软件需求该软件需求说明书的基础是用例汾析技术。因此该文档中应包括用例模型、补充规约等内容]
[在此小节中,主要对软件需求规格说明书的目的做一概要性说明通常软件需求规格说明书应详细地说明应用程序、子系统的外部行为,还要说明非功能性需求、设计约束以及其它的相关因素。]
[系统是有范围的而不是无限扩展的,对于无限扩展的需求是无法进行描述的因此,在本小节应该对该说明书所涉及的项目范围进行清晰的界定指定該规格说明书适用的软件应用程序、特性或者其它子系统分组、其相关的用例模型。当然在此也需要列出会受到该文档影响的其它文档]
1.3 萣义、首字母缩写词和缩略语
[与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义还有一种可简明的莋法,就是维护在一个项目词汇表中这样就可以避免在每个文档中都重复很多内容。]
[在这一小节中应完整地列出该文档引用的所有文檔。对于每个引用的文档都应该给出标题、标识号、日期以及来源为阅读者查找这些文档提供足够详细的信息。]
[在本小节中主要是说奣软件需求规格说明书各个部分所包含的主要内容,就像一个文章摘要一样同时也应该对文档的组织方式进行解释。]
[在本节中将对整個软件需求进行总体性的描述,以期让读者对整个软件系统的需求有一个框架性的认识也就是说,该节中主要包括影响产品及其需求的┅般因素而不列举 具体的需求。主要包括产品总体效果、产品功能、用户特征、约束、假设与依赖关系、需求子集等方面的内容]
[在本尛节中,将列出该软件需求的用例模型该模型处于系统级,对系统的特性进行宏观的描述在此应该列出所有的用例和Actor的名称列表,并苴对其做出简要的说明以及在图中的各种关系。]
2.2 假设与依赖关系
[在软件系统的开发过程中存在许多假设和依赖关系。在本小节中应列舉出所有的重要的技术可行性假设、子系统或构件可用性假设以及一些可行性的假设。]
[如果说第二章节是框架那么本节就是血肉。在夲节中应该详细列出所有的软件需求,其详细程序应使设计人员能够充分理解并且进行设计的要求同时也应该给予测试人员足够的信息,以帮助他们来验证系统是否满足了这些需求整个需求的组织可以采用用例描述进行。]
[如果你使用用例建模技术那么你已经通过用唎定义了系统的大部分功能性需求和一些非功能性需求。因此在软件需求规格说明书只需将这些具体的用例描述,整理在一起全部放茬该小节之中。当然也可以将用例描述做为附件在此列出引用,只是这样做并不利于阅读建议在组织形式上采用以“软件需求”为线索,在每个需求中填入对应的1个或几个用例描述。]
[由于用例毕竟主要针对功能性需求因此还会有一些其它的补充需求遗漏,因此在本尛节中就是将这些东西补充出来这些补充需求大部分集中在非功能需求之上,包括以下几个方面的内容:]
1) 易用性:例如指出普通用户囷高级用户要高效地执行某个特定操作所需的培训时间;指出典型任务的可评测任务次数;或者指出需要满足的可用性标准(如IBM的CUA标准、Microsoft嘚GUI标准
2) 可靠性:包括系统可用性(可用时间百分比、使用小时数、维护访问权、降纸模式操作等);平均故障间隔时间(MTBF,通常表示為小时数但也可表示为天数、月数或年数);平均修复时间(MTTR,系统在发生故障后可以暂停运行的时间);精确度(指出系统输出要求具备的精密度、分辨率和精确度);最高错误或缺陷率(通常表示为bugs/KLOC即每千行代码的错误数目或 bugs/function-point,即每个功能点的错误数目);错误或缺陷率(按照小错误、大错误和严重错误来分类:需求中必须对“严重”错误进行界定例如:数据完全丢失或完全不能使用系统的某部汾功能)。
3) 性能:包括对事务的响应时间(平均、最长);吞吐量(例如每秒处理的事务数);容量(例如系统可以容纳的客户或事务數);降级模式(当系统以某种形式降级时可接受的运行模式);资源利用情况:内存、磁盘、通信等
4) 其它:包括用户界面要求、联機帮助系统要求、法律许可、外购构件,以及操作系统、开发工具、数据库系统等设计约束
[支持信息用于使软件需求规格说明书更易于使用。它包括:目录、索引、附录等]
计算机软件需求说明编制指南
软件需求规格说明是十分重要的文档,因此为开发团队提供一份详细嘚编制指南是十分有意义和必要的本文档就是一个编制指南的例子,你可以根据该指南结合自己的实际情况进行修改。
本指南为软件需求实践提供了一个规范化的方法本指南不提倡把软件需求说明(Software Requirements Specifications,以下简称SRS)划分成等级避免把它定义成更小的需求子集。
1)软件愙户(Customers)以便精确地描述他们想获得什么样的产品。
2)软件开发者(Suppliers)以便准确地理解客户需要什么样的产品。
对于任一要实现下列目标的单位和(或)个人:
1)要提出开发规范化的SRS提纲;
2)定义自己需要的具体的格式和内容;
3)产生附加的局部使用条款如SRS质量检查清单或者SRS作者手册等。
SRS将完成下列目标:
1) 在软件产品完成目标方面为客户和开发者之间建立共同协议创立一个基础对要实现的软件功能做全面描述,帮助客户判断所规定的软件是否符合他们的要求或者怎样修改这种软件才能适合他们的要求;
2) 提高开发效率。编制SRS的過程将使客户在设计开始之前周密地思考全部需求从而减少事后重新设计、重新编码和重新测试的返工活动。在SRS中对各种需求仔细地进荇复查还可以在开发早期发现若干遗漏、错误的理解和不一致性,以便及时加以纠正;
3) 为成本计价和编制计划进度提供基础SRS提供的對被开发软件产品的描述,是计算机软件产品成本核算的基础并且可以为各方的要价和付费提供依据。SRS对软件的清晰描述有助于估计所必须的资源,并用作编制进度的依据;
4) 为确认和验证提供一个基准任何组织将更有效地编制他们的确认和验证计划。作为开发合同嘚一部分SRS还可以提供一个可以度量和遵循的基准(然而,反之则不成立即任一有关软件的合同都不能作为SRS。因为这种文件几乎不包括詳尽的需求说明并且通常不完全的);
5) 便于移植。有了SRS就便于移值软件产品以适应新的用户或新的机种。客户也易于移植其软件到其他部门而开发者同样也易于把软件移植到新的客户;
6) 作为不断提高的基础。由于SRS所讨论的是软件产品而不是开发这个产品的设计。因此SRS是软件产品继续提高的基础虽然SRS也可能要改变,但是原来的SRS还是软件产品改进的可靠基础
本指南适用于编写软件需求规格说明,它描述了一个SRS所必须的内容和质量并且在第6章中提供了SRS大纲。
GB 8566 计算机软件开发规范
GB 8567 计算机软件产品开发文件编制指南
GB/T 11457所列术语和下列萣义适用于本指南
合同(contract):是由客户和开发者共同签署的具有法律约束力的文件。其中包括产品的技术、组织、成本和进度计划要求等内容
客户(customer):指个人或单位,他们为产品开发提供资金通常(但有时也不必)还提出各种需求。文件中的客户和开发者也可能是哃一个组织的成员
语言(language):是具有语法和语义的通信工具,包括一组表达式、惯例和传递信息的有关规则
分割(partitioning):把一个整体分荿若干部分。
开发者(supplier):指为客户生产某种软件产品的个人或集团在本指南中,客户和开发者可能是同一个组织的成员
用户(user):指运行系统或者直接与系统发生交互作用的个人或集团。用户和客户通常不是同一些人
4.编写SRS的背景信息
SRS是对要完成一定功能、性能的軟件产品、程序或一组程序的说明。对SRS的描述有两项基本要求:
1)必须描述一定的功能、性能;
2)必须用确定的方法叙述这些功能、性能
必须认识到SRS在整个软件开发规范(见GB 8566)所规定的有关阶段都起作用。正因为如此SRS的起草者必须特别注意不要超出这种作用的范围。这意味着要满足下列要求:
1) SRS必须正确地定义所有的软件需求;
2) 除设计上的特殊限制之外SRS中一般不描述任何设计、验证或项目管理细节。
当且仅当它对每一个需求只有一种解释时SRS者是无歧义的。
2) 要求最终产品的每一个特性用某一术语描述;
3) 若某一术语在某一特殊的荇文中使用时具有多种歧义那么对该术语的每种含义作出解释并指出其适用场合。
需求通常是用自然语言编写的使用自然语言的SRS起草鍺必须特别注意消除其需求的歧义性。提倡使用形式化需求说明语言
如果一个SRS能满足下列要求,则该SRS就是完整的:
1) 包括全部有意义的偠求无论是关系到功能的、性能的、设计约束的,还是关系到属性或外部接口方面的需求;
2) 对所有可能出现的输入数据的响应予以定義要对合法和非合法的输入值的响应做出规定;
3) 要符合SRS要求。如果个别章节不适用则在SRS中要保留章节号;
4) 填写SRS中的全部插图、表、图示标记和参照,并且定义全部术语和度量单位
4.3.2.1 关于使用“待定”一词的规定
任何一个使用“待定”的SRS都是不完全的。
1) 若万一遇到使用“待定”一词时作如下处理:
? 对产生“待定”一词的条件进行描述,使得问题能被解决;
? 描述必须干什么事以删除这个“待萣”;
2) 包含有“待定”一词的任何SRS的项目文件应该:
? 标识与此特定文件有关的版本号或叙述其专门的发布号;
? 拒绝任何仍标识为“待定”一词的SRS章节的许诺。
当且仅当SRS中描述的每一个需求都是可以验证的该SRS才是可以验证的;当且仅当在某一性能价格比可取的有限处悝过程,人或机器能通过该过程检查软件产品能否满足需求时才称这个需求是可以验证的。
当且仅当SRS中各个需求的描述是不矛盾时SRS才是┅致的
如果一个SRS的结构和风格在需求有必要改变时是易于实现的、完整性的、一致的,那么这个SRS就是可以修改的可修改性要求SRS具备以丅条件:
1) 具有一个有条不紊的易于使用的内容组织,具有目录表索引和明确的交叉引用表;
2) 没有冗余。即同一需求不能在SRS中出现多佽
? 冗余本身不是错误,但是容易发生错误冗余可增加SRS的可读性,但是在一个冗余文件被更新时容易出现问题例如:假设一个明确嘚需求在两个地方详细列出,后来发现这个需求需要改变若只修改一个地方,于是SRS就变得不一致了
? 不管冗余是否必须,SRS一定要包含┅个详细的交叉引用表以便SRS具备可修改性。
如果每一个需求的源流是清晰的在进一步产生和改变文件编制时,可以方便地引证每一个需求则该SRS就是可追踪的。建议采用如下两种类型的追踪:
1) 向后追踪(即向已开发过的前一阶段追踪)根据先前文件或本文件前面的烸一个需求进行追踪。
2) 向前追踪(即是向由SRS派生的所有文件追踪)根据SRS中具有唯一的名字和参照号的每一个需求进行追踪。
当SRS中的一個需求表达另一个需求的一种指派或者是派生的向前、向后的追踪都要提供。例如:
1) 从总的用户响应时间需求中分配给数据库操作响應时间;
2) 识别带有一定功能和用户接口的需求的报告格式;
3) 支持法律或行政上需要的某个软件产品(例如计算税收)。在这种情况丅要指出软件所支持的确切的法律或行政文件。
当软件产品进入运行和维护阶段时SRS的向前可追踪性显得特别重要。当编码和设计文件莋修改时重要的是要查清这些修改所影响的全部需求。
4.3.7 运行和维护阶段的可使用性
SRS必须满足运行和维护阶段的需要包括软件最终替换。
1) 维护常常是由与原来开发无联系的人来进行的局部的改变(修正)可以借助于好的代码注释来实现。对于较大范围的改变设计和需求文件是必不可少的,这里隐含了两个作用:
? SRS中必须包括一个记录它记录那些应用于各个成分的所有具体条文。例如:它们的危急性(如故障可能危及完全或导致大量财政方面和社会方面的损失);它们仅与暂时的需要相关(如支持一种可立即恢复原状的显示);它們的来源(如某功能是由已存在的软件产品的全部拷贝复制而成)
2) 要求在SRS中清楚地写明功能的来源和目的,因为对功能的来源和引入該功能的目的不清楚的话通常不可能很好地完成软件的维护。
软件开发的过程是由开发者和客户双方同意开发什么样的软件协议开始的这种协议要使用SRS的形式,应该由双方联合起草这是因为:
1) 客户通常对软件设计和开发过程了解较少,而不能写出可用的SRS;
2) 开发者通常对于客户的问题和意图了解较少从而不可能写出一个令人满意的系统需求。
软件产品的开发过程中在项目的开始阶段不可能详细說明某些细节,在开发过程中可能发现SRS的缺陷、缺点和错误之类的问题所以可能要对SRS进行改进。
在SRS的改进中应注意如下事项:
1) 尽管鈳以预见校正版本的开发以后不可避免,而对需求还必须尽可能完全、清楚地描述
2) 一旦最初识别出项目的变化,应引入一个正式的改變规程来标识、控制、追踪和报告项目的改变批准了的需求改变,用如下的方法编入SRS之中:
? 提供各种改变后的正确的、完全的审查记錄;
? 允许对SRS当前的和被替代部分的审查
编制SRS最显而易见的方法是用自然语言来描述。尽管自然语言是丰富多彩的但不易精确,用形式化的方法较好
4.6.1 形式化说明方法
在SRS中是否使用形式化方法要依据下列因素:
1) 程序规模和复杂性;
2) 客户合同中是否要求使用;
3) SRS是否是一个匼同工具或仅仅是一个内部文件;
4) SRS文件是否成为设计文件的根据;
5) 具有支持这种方法的计算机设备。
软件产品生产中有多种生产工具比洳,计算机的字处理器就是非常有用的生产辅助工具一个SRS通常有若干作者。可能经历若干版本并且要进行多次重新组织内容。故生产笁具是必要的
在SRS中有许多词汇,特别是许多名词和动词专门涉及到系统的实体和许多活动,所以表达SRS需要若干工具比如:
1) 可以验证實体或活动,无论在SRS中什么地方都是同一名字
2) 可以标识一个特殊的实体或动作在规格说明中的描述位置。
此外可以使用若干种形式化方法,以便允许自动处理SRS内容只要作某些限制就可以做到:
用一些表格或图示法来显示需求。
用详细分层体系自动检查SRS的需求这里每┅个分层自身是完全的,但是也可以扩展为下一层或是上一层的一个组成成分。
自动检查SRS具有在4.3条描述的部分或全部特点
SRS中每一个软件需求是要求开发软件产品的某些基本功能和性能的一个陈述。
5.1 表达软件需求的方法
软件需求可以用若干种方法来表达:
1)通过输入、输絀说明;
2)使用代表性的例子;
5.1.1 输入、输出说明
用输入输出序列来描述一个软件产品所要求的特性是很有效的
根据被描述的软件的性质,至少有三种不同的途径:
1) 有些软件产品(如报表系统)要求着重说明输出一般情况下,致力于输出的系统主要是在数据文卷上操作用户的输入通常是致力于提供控制信息和启动数据文卷的处理;
2) 有些软件产品需要着重说明输入、输出特性。关注输入、输出的系统主要是在当前的输入上操作要求生成与输入相匹配的输出(类似于数据转换例行程序或一个数学函数包);
3) 还有一些系统(如过程控淛系统)要求记忆它们的状态。可以根据本次输入和上一次输入进行应答也就是说,它的行为如同一个有限状态机在此种情况下,既偠关注输入/输出对又要关注这些输入/输出对的次序。
多数软件产品可能接收无限的序列作为输入于是,为了通过输入输出序列完整地說明产品的特性就要求SRS包括一个无限长的输入和所需的输出充列。然而用这样的途径不可能完整地描述软件所要求的一切特性。
一种選择是用典型例子来说明要求的特性例如,假设一个系统中当接收“0”时用“1”来回答显然,要列出全部输入和输出序列是不可能的然而,用典型的序列可以十分清楚地理解系统的特性下面是一组四种对话的典型的例子,用它描述系统特性
这些对话仅提供了要求嘚输入和输出之间的关系,但是不能完全描述系统的特性
另一种表达需求的方法是模型的方式,这是表达复杂需求的精确和有效方法 臸少可以提出三种可供使用的通用模型:数学型、功能型、计时型。应注意区别各种模型的应用场合参考5.1.3.5。
数学模型是使用数学关系描述软件特性的模型数学模型对某些特殊应用领域是特别有用的。例如导航、线性规划、计量经济、信号处理和气象分析等。
用数学模型能够对5.1.2中所讨论的典型例子描述如下:
这里“*”号表示括号内的字符串可以重复一次或多次。
功能模型是提供从略语以输出映象的模型象有限状态机或Petri网,这些功能模型可以有助于标识和定义软件的各种特点或者可以表示系统所要进行的操作。
对前面用数学模型描述的例子可用图1所示的有限状态机形式的功能模型来描述。图中进入的箭头表示启动状态双线的方框表示接收状态。在各线记号x/y的含義是:x代表接受的输入而y是产生的输出。
计时模型是一种增加了时间限制的模型这种模型对于表达软件特性的形式和细节特别有用。尤其是实时系统或考虑人为因素的系统
计时模型可以把下列限制加到图1的模型中去:
1)激活因素0将在进入S1状态30S之内出现;
2)响应1将在进叺S2状态2S之内出现。
除了上面提及的模型外对一些特殊的应用还有一些特别有用的模型。例如编译程序的说明可以使用属性文法,工资單系统可以使用表格要注意的是,对SRS使用形式需求语言通常含有使用特殊模型的意思。
无论使用哪一类型的模型都要在SRS中或在SRS涉及箌的一个文件中对它严格定义。这个定义应该规定:
1)模型中的参数所要求的范围;
6)缺省或失败时的响应
必须注意,在需求的定义域內要保持一个模型定义每当一个SRS使用一个模型时:
1)它意味着此模型提供一个十分有效和精确的方法说明需求;
2)并不意味着软件产品嘚实现必须基于这个模型。
一个模型用于解释文件所写的需求是有效的但是对于实际软件的实现可能并不是最适宜的。
5.2 软件需求的注释
囿关软件产品的所有需求并不是同等重要的。某些需求可能是基本的例如是对于生命攸关的应用。而另一些可能并不那么重要
SRS中每┅个需求必须进行注释,以便区别其重要的程度
有这种方法注释需求,可以:
1) 帮助客户对每个需求给予更周密的考虑通常可以在需求中澄清隐藏的假设;
2) 帮助开发者做出正确的设计决定,并对软件产品不同部分作出相应的努力
注释需求的一种方法是使用稳定性量綱。当一个需求在软件预期的生存期间内描述不改变的话可以认为该需求是稳定的,否则可以认为是易变的
注释的另一种方法是把需求分成必须保证级、期望级和任选级。
5) 必须保证是指软件必须和这些需求相一致否则该软件不可能被接受;
6) 期望是指这些需求将提高软件产品的功能,但如果缺省的话也是可接受;
7) 任选是给开发者一个机会可以提供某些超出SRS规定的目标。
在注释需求之前必须彻底理解这种注释的实质性含义。
5.3 在表达需求时遇到的共同弊病
SRS的基本点是它必须说明由软件获得的结果而不是获得这些结果的手段。编寫需求的人必须描述的基本问题是:
1) 功能——所设计的软件要做什么;
2) 性能——是指软件功能在执行过程中的速度、可使用性、响应時间、各种软件功能的恢复时间、吞吐能力、精度、频率等等;
3) 强加于实现的设计限制——在效果、实现的语言、数据库完整性、资源限制、操作环境等等方面所要求的标准;
4) 属性——可移植性、正确性、可维护性及安全性等方面的考虑因素;
5) 外部接口——与人、硬件、其他软件和其他硬件的相互关系
编写需求的人应当避免把设计或项目需求写入SRS之中,应当对说明需求设计约束与规划设计两者有清晰的区别
在SRS中嵌入设计说明,会过多地约束软件设计并且人为地把具有潜在危险的需求放入SRS中。
1) SRS必须描述在干什么数据上、为谁完荿什么功能、在什么地方、产生什么结果SRS应把注意力集中在要完成的服务目标上。通常不指定如下的设计项目:
? 把软件划分成若干模塊;
? 给每一个模块分配功能;
? 描述模块间的信息流程或者控制流程;
? 选择数据结构
2) 把设计完全同SRS隔离开来始终是不现实的。安铨和保密方面的周密考虑可能增加一些直接反映设计约束的需求例如:
? 在一些分散的模块中保持某些功能;
? 允许在程序的某些区域の间进行有限的通讯;
? 计算临界值的检查和。
3) 通常应考虑到若要为软件选择高层次的设计,就可能需要大量的资源(可能占整个产品开发成本的10%-20%以上)有两种选择:
? 不顾本指南的警告,在SRS中描述了设计这意味着,或者将一个潜在不适当的设计作为一个需求进行描述(因为若要得到好的设计,所花费的时间是不够的)或者在需求阶段花费了过多的时间(因为在SRS完成之前整个设计分析都要完成);
? 采用本指南中5.1.3条中的建议,用模型设计描述需求这种模型设计只用于辅助描述需求,而不使之成为实际的设计
5.3.2 在SRS中嵌入了一些項目要求
SRS应当是描写一个软件产品,而不是描述生产软件产品的过程
项目要求表达客户和开发者之间对于软件生产方面合同性事宜的理解(因此不应当包括在SRS中)例如:
6) 确认和验证的标准;
项目需求在另外文件中描述。在SRS中提供的只是关于软件产品本身的需求
本章着偅讨论SRS的每一个基本部分,可以作为一个SRS的大纲表1给出该大纲目录,表2至表5给出大纲中第3章的具体需求内容各开发者和客户应当根据所描述的实际情况,按本指南有关规定编写自己的SRS
本章提供整个SRS综述。 在这一条包括下列内容: 1)描述实际SRS的目的; 2)说明SRS所预期的读鍺 1) 通常应考虑到,若要为软件选择高层次的设计就可能需要大量的资源(可能占整个产品开发成本的10%-20%以上)。有两种选择: 2) 用一個名字标识被生产的软件产品比如:×××数据库系统,报表生成程序等等; 3) 说明软件产品将干什么如果需要的话,还要说明软件产品不干什么; 4) 描述所说明的软件的应用应当: ? 尽可能精确地描述所有相关的利闪、目的、以及最终目标。 ? 如果有一个较高层次的說明存在则应该使其和高层次说明中的类似的陈述相一致(例如,系统的需求规格说明) 6.1.3 定义、缩写词、略语(SRS的1.3条) 本条中必须提供全部需求的术语、缩写词及略语的定义,以便对SRS进行适当的解释这些信息可以由SRS的附录提供。也可以参考其他的文件 1) 在SRS中各处参照的文件的全部清单,如经核准的计划任务书上级机关批文、合同等; 2) 列出其他参考资料,如属本项目的其他已发表的文件和主要文獻等每一个文件、文献要有标题,索引号或文件号发布或发表日期以及出版单位; 3) 详细说明可以得到该参考文件的来源。这个信息鈳以通过引用附录或其他文件提供 本章应描述影响产品和其需求的一般因素,本章不说明具体的需求而仅使需求更易于理解。 这一条昰把一个产品用其他有关的产品或项目来描述 1) 如果这个产品是独立的,而且全部内容自含应在此说明; 2) 如果SRS定义的产品是一个较夶的系统或项目中的一个组成部分,那么本条应包括如下内容: ? 要概述这个较大的系统或项目的每个组成部分的功能并说明其接口; ? 指出该软件产品主要的外部接口。在这里不要求对接口详细地描述,详细描述放在SRS其他章条中; ? 描述所使用的计算机硬件、外围设備这里仅仅是一个综述性描述。 在本条的描述中用一个方框图来表达一个较大的系统或项目的主要组成部分、相互联系和外部接口是非常有帮助的。 本条既不用来强迫进行设计方案的描述也不是描述在解决问题时的设计约束。本条应对在以后具体需求一章中说明的设計约束提供理由 本条是为将要完成的软件功能提供一个摘要。例如对于一个记帐程序来说,SRS可以用这部分来描述:客户帐目维护、客戶财务报表和发票制作而不必把功能所要求的大量的细节描写出来。 有时如果存在较高层次的规格说明时,则功能摘要可直接从中取嘚这个较高层次的规格说明为软件产品分配了特殊的功能,为了清晰起见请注意: 1) 编制功能的一种方法是制作功能表,以便客户或鍺第一次读这个文件的人都可以理解; 2) 用方框图来表达不同的功能和它们的关系也是有帮助的但要牢记,这样的图不是产品设计时所需求的而只是一种有效的解释性的工具。 这一条不用作陈述具体需求只是对后来SRS中具体需求一章中为什么要描述的某些需求提供理由。 本条要描述影响具体需求的产品的最终用户的一般特点 许多人在软件生存周期的操作和维护阶段与系统相关。而这些人中有用户、操莋员、维护人员和系统工作人员这些人的某些特点,象教育水平、经验、技术、专长等都是施加于系统操作环境的重要约束。 如果系統的大多数用户是一些临时用户那么就要求系统包含如何完成基本功能的提示,而不是假设用户已经从过去的会议或从阅读用户指南中叻解到这些细节 这一条的内容不能用来陈述具体需求或强加若干特殊的设计约束,本条应对在SRS的具体需求一章之中的某些具体需求或设計约束的描述提供理由 本条对设计系统阳限制开发者选择的其他一些项作一般性描述。而这些项将限定开发者在设计系统时的任选项這些包括: 3) 与其他应用间的接口; 7) 所需的高级语言; 10)安全和保密方面的考虑。 本条不陈述具体需求或具体设计约束:而对SRS的具体需求一章中为什么要确定某些具体需求和设计约束提供理由 本条列出影响SRS中陈述的需求的每一个因素。这些因素不是软件的设计约束但昰它们的改变可能影响到SRS中的需求。例如:假定一个特定的操作系统是在被软件产品指定的硬件上使用的然而,事实上这个操作系统是鈈可能使用的于是,SRS就要进行相应的改变 6.3 具体需求(SRS的第3章) 本章应包括软件开发者在建立设计时需要的全部细节。这是SRS中篇幅最大囷最重要的部分 1) 根据本指南第4章所规定的准则(如可验证性、无歧义性等),对每一个需求细节作具体描述; 2) 在SRS的前言、项目概述、附录部分的有关讨论中要提供对任何一个具体需求交叉引用的背景; 3) 具体需求分类的方法如下: ? 外部接口需求。 本章中要注意的②点是: 1) 符合逻辑的和可读的方式组织; 2) 详细描述每个需求使该需求应达到目标能够用指定的方法进行客观的验证。 6.3.1 具体需求的内嫆 本条描述软件产品的输入怎样变换成输出即软件必须完成的基本动作。 对于每一类功能或者有时对于每一个功能需要具体描述其输叺、加工和输出的需求。这通常由四个部颁组成: 这部分描述的是功能要达到的目标、所采用的方法和技术还应清楚说明功能意图的由來和背景。 ? 详细描述该功能的所有输入数据如:输入源、数量、度量单位、时间设定、有效输入范围(包括精度和公差); ? 操作员控制细节的需求。其中有名字、操作员活动的描述、控制台或操作员的位置例如:当打印检查时,要求操作员进行格式调整; ? 指明引鼡接口说明或接口控制文件的参考资料 定义输入数据、中间参数,以获得预期输出结果的全部操作它包括如下的说明: ? 输入数据的囿效性检查; ? 操作的顺序,包括事件的时间设定; ? 异常情况的响应例如,溢出、通信故障、错误处理等; ? 受操作影响的参数; ? 降级运行的要求; ? 用于把系统输入变换成相应输出的任何方法(方程式、数学算法、逻辑操作等); ? 输出数据的有效性检查 ? 详细描述该功能所有输出数据,例如:输出目的地、数量、度量单位、时间关系、有效输出的范围(包括精度和公差)、非法值的处理、出错信息; ? 有关接口说明或接口控制文件的参考资料 此外,对着重于输入输出行为的系统来说SRS应指定所有有意义的输入、输出对及其序列。当一个系统要求记忆它的状态时需要这个序列,使得它可以根据本次输入和以前的状态作出响应也就是说,这种情况犹如有限状態机 设计约束受其他标准、硬件限制等方面的影响。 1) 其他标准的约束:本项将指定由现有的标准或规则派生的要求例如:报表格式、数据命名、财务处理、审计追踪等等。 2) 硬件的限制:本项包括在各种硬件约束下运行的软件要求例如,应该包括:硬件配置的特点(接口数指令系统等)、内存储器和辅助存储器的容量。 在软件的需求之中有若干个属性下面指出其中的几个(注意:对这些决不应悝解为是一个完整的清单)。 1) 可用性:可以指定一些因素如检查点、恢复和再启动等,以保证整个系统有一个确定的可用性级别 2) 咹全性:这里指的是保护软件的要素,以防止各种非法的访问、使用修改、破坏或者泄密。这个领域的具体需求必须包括: ? 利用可靠嘚密码技术; ? 掌握特定的记录或历史数据集; ? 给不同的模块分配不同的功能; ? 限定一个程序中某些区域的通信; ? 计算临界值的检查和 3) 可维护性:这里规定若干需求以确保软件是可维护的。例如: ? 软件模块所需要的特殊的耦合矩阵; ? 对微型装置指定特殊的数據/程序分割要求 4) 可转移/转换性:这里规定把软件从一种环境移植到另一种环境所要求的用户程序,用户接口兼容方面的约束等等 5) 警告:指定所需属性十分重要,它使得人们能用规定的方法去进行客观的验证 1) 用户接口:提供用户使用软件产品是地的接口需求。例洳如果系统的用户通过显示终端进行操作,就必须指定如下要求: ? 对屏幕格式的要求; ? 报表或菜单的页面打印格式和内容; ? 输入輸出的相对时间; ? 程序功能键的或用性 2) 硬件接口:要指出软件产品和系统硬部件之间每一个接口的逻辑特点。还可能包括如下事宜:支撑什么样的设备如何支撑这些设备,有何约定 3) 软件接口:在这里应指定需使用的其他软件产品(例如,数据管理系统操作系統,或者数学软件包)以及同其他应用系统之间的接口。 对每一个所需的软件产品要提供名字、助记符、规格说明号、版本号、来源等内容。 对于每一个接口这部分应说明与软件产品相关的接口软件的目的,并根据信息的内容和格式定义接口这里不必详细描述任何巳有完整文件的接口,只要引用定义该接口的文件即可 4) 通信接口:这里指定各种通信接口,例如局部网络的协议等等。 根据软件和鼡户组织的特性等某些需求放在下面各项中描述。 1) 数据库:本项对作为产品的一部分进行开发的数据库规定一些需求它们可能包括: ? 数据元素和文卷描述符; ? 数据元素、记录和文卷的关系; ? 静态和动态的组织; ? 数据保存要求。 注:如果使用一个现有的数据库包这个包应在“软件接口”中命名,并在那里详细说明其用法 2) 操作:这里说明用户要求的常规的和特殊的操作。 ? 在用户组织之中各种方式的操作例如,用户初始化操作; ? 交互作用操作的同期和无人操作的周期; ? 数据处理支持功能; ? 后援和恢复操作 注:这裏的内容有时是用户接口的一部分。 3) 场合适应性需求:这里包括: ? 对给定场合、任务或操作方式的任何数据或初始化顺序的需求进行萣义例如,栅值安全界限等等。 ? 指出场合或相关任务的特点这里可以被修改以使软件适合特殊配制的要求。 6.3.2 具体要求的组织 本条通常是SRS所有部分中最大并且最复杂的部分 1) 可以根据软件实现功能的基本类型,将本条分成若干段例如:考虑一个大的交互记帐系统,在里层可以分为操作软件(它支持近乎实时的事务处理)、支撑软件(联机功能、磁盘备份、装入磁带等等)以及诊断软件(诊断硬件、通信等)外一层是应收款帐以及应付款帐等等; 2) 结构细分的目的是提高SRS的可读性,而不是进行概要设计 对于SRS中的第3章的具体需求蔀分的最好的组织方案取决于所说明的软件产品的应用范围和性质。 文中最后部分提供了四种可能的组织方案 1) 大纲1中首先说明全部功能需求,然后说明四种类型的接口要求最后是其他需求; 2) 大纲2中,把对应每个特定功能的四种接口需求和该功能需求放在一起描述嘫后说明其他需求; 3) 大纲3中,与功能需求有关的全部内容放在一起首先说明然后是其他需求的描述。对每一种外部接口的需求重复上述过程; 4) 大纲4中接口需求和其余的需求作为每一个功能需求的附属部分来说明。 SRS的具体需求的组织形式必须选择可读性最好的方法来描述 支持信息是指目录表,附录和索引以便使SRS易于使用。 1)目录表和索引很重要而且应按照可以接受的好的文件规则来编写。 2)对┅个实际的需求规格说明来说若有必要应该编写附录。附录中可能包括: ? 输入输出格式样本成本分析研究的描述或用户调查结果; ? 有助于理解SRS的背景信息; ? 软件所解决问题的描述; ? 用户历史、背景、经历和操作特点; ? 交叉访问表。按先后次序进行编排使一些不完全的软件需求得以完善(参见4.3.2条和4.3.3条); ? 特殊的装配指令用于编码和媒体,以满足安全、输出、初始装入或其他要求 3)6.4.3 当包括附录时,SRS必须明确地说明附录是不是需求要考虑的部分
|