软件需求分析摸板

转帖 http://blog.163.com/zhangkun_d/blog/static/73848397200941091444907/

 

 

需求分析类文档模板

编者说明:

    许多有经验的开发团队在开始需求调查的时候,总会将“软件客户需求权利书”和“软件客户需求义务书”提交给客户,让客户明确其权利与义务,将会对需求调研、分析的工作带来意想不到的效果,你可以一试。

软件客户需求权利书

1.要求分析人员使用符合客户语言习惯的表达;

2.要求分析人员了解客户系统的业务及目标;

3.要求分析人员组织需求获取期间所介绍的信息,并编写软件需求规格说明。

4.要求开发人员对需求过程中所产生的工作结果进行解释说明;

5.要求开发人员在整个交流过程中保持和维护一种合作的职业态度;

6.要求开发人员对产品的实现及需求都要提供建议,拿出主意。

7.描述产品使其具有易用、好用的特性;

8.可以调整需求,允许重用已有的软件组件;

9.当需要对需求进行变更时,对成本、影响、得失有个真实可信的评估;

10.获得满足客户功能和质量要求的系统,并且这些要求是开发人员同意的。

 

 

软件客户需求义务书

1.给分析人员讲解业务及说明业务方面的术语等专业问题;

2.抽出时间清楚地说明需求并不断完善;

3.当说明系统需求时,力求准确详细;

4.需要时要及时对需求做出决策;

5.要尊重开发人员的成本估算和对需求的可行性分析;

6.对单项需求、系统特性或使用实例划分优先级;

7.评审需求文档和原型;

8.一旦知道要对项目需求进行变更,要马上与开发人员联系;

9.在要求需求变更时,应遵造开发组织确定的工作过程来处理;

10.尊重需求工程中开发人员采用的流程(过程)。

 

 

软件项目视图和范围

编者说明:

    项目所涉及的内容与所解决的问题都是有限的,而且项目应该是十分有目的性的,是为了实现某个可度量的目标而做的。因此,在需求分析的前期应该将“项目的目标与范围”这一项目的本质文档化,让每一个项目成员对其达成共识。该文档是十分重要,但却又是十分容易被忽视的。该文档模板比较适用于定制开发项目。

1.业务需求

[业务需求说明了提供给客户和产品开发商的新系统的最初利益。不同产品可能会有不同的侧重点。本部分描述了你为什么要从事此项项目的开发,以及它将给开发者和购卖者带来的利益。]

1.1 背景

[在这一部分,总结新产品的理论基础,并提供关于产品开发的历史背景或形势的一般性描述。]

1.2 业务机遇

[描述现存的市场机遇或正在解决的业务问题。描述商品竞争的市场和信息系统将运用的环境。包括对现存产品的一个简要的相对评价和解决方案,并指出所建议的产品为什么具有吸引力和它们所能带来的竞争优势。认识到目前只能使用该产品才能解决的一些问题,并描述产品是怎样顺应市场趋势和战略目标的。]

  1.3 业务目标

[用一个定量和可测量的合理方法总结产品总结产品所带来的重要商业利润。关于给客户带来的价值在后面阐述,这里仅把重点放在给业务的价值上。这些目标与收入预算或节省开支有关,并影响到投资分析和最终产品的交付日期。]

1.4 客户或市场需求

[描述一些典型客户的需求,包括不满足现在市场上的产品或信息系统的需求。提出客户目前所遇到的问题在新产品中将可能(或不可能)出现的阐述,提供客户怎样使用产品的例子。确定了产品所能运行的软、硬件平台。定义了较高层次的关键接口或性能要求,但避免设计或实现细节。把这些要求写到列表中,可以反过来跟踪调查特殊用户和功能需求。]

1.5 提供给客户的价值

[确定产品给客户带来的价值,并指明产品怎样满足客户的需要。可以用下列言辞表达产品带给客户的价值:

Ø       提高生产效率,减少返工;

Ø       节省开支;

Ø       业务过程的流水线化;

Ø       先前人工劳动的自动化;

Ø       符合相关标准和规则;

Ø       与目前的应用产品相比较,提高了可用性或减少了失效程度。]

1.6 业务风险

[总结开发(或不开发)该产品有关的主要业务风险,例如市场竞争、时间问题、用户的接受能力、实现的问题或对业务可能带来的消极影响。预测风险的严重性,指明你所能采取的减轻风险的措施。]

2.项目视图的解决方案

[文档中的这一部分为系统建立了一个长远的项目视图,它将指明业务目标。这一项目视图为在软件开发生存期中作出决策提供了相关环境背景。这部分不包括详细的功能需求和项目计划信息。]

2.1 项目视图陈述

[编写一个总结长远目标和有关开发新产品目的的简要项目视图陈述。项目视图陈述将考虑权衡有不同需求客户的看法。它可能有点理想化,但必须以现有的或所期待的客户市场企业框架。组织的战略方向和资源局限性为基础。]

[如:"化学制品跟踪系统"可使科学家查询到化学制品仓库或供应商将提供的化学制品容器。系统可随时了解公司每一个化学制品容器所处的位置,容器中所剩余的药品剂量,任何时候每个容器所处的位置和用法的历史记录。通过充分利用公司内部的可用化学制品,废弃极少量已使用或过期失效的化学制品,使用标准的化学制品的购买过程等将在化学制品上节省25%开支。"化学制品跟踪系统"还能产生符合政府部门规定所要求的全部报表,包括化学制品的使用、存储和废弃等报表。]

2.2 主要特征

[包括新产品将提供的主要特性和用户性能的列表。强调的是区别于以往产品和竞争产品的特性。可以从用户需求和功能需求中得到这些特性。]

2.3 假设和依赖环境

[在构思项目和编写项目视图和范围文档时,要记录所作出的任何假设。通常一方所持的假设应与另一方不同。如果你把它们都记录下来,并加以评论,就能对项目内部隐含的基本假设达成共识。比如,"化学制品跟踪系统"的开发者假设:该系统可以替代现有的仓库存货系统,并能与有关采购部门的应用相连接。把这些都记录下来以防止将来可能的混淆和冲突。还有,记录项目所依赖的主要环境,比如:所使用的特殊的技术、第三方供应商、开发伙伴及其它业务关系。]

3.范围和局限性

[项目范围定义了所提出的解决方案和概念和适用领域,而局限性则指出产品所不包括的某些性能。如果一般客户所提出的需求超出项目的范围时就应当拒绝它,除非这些需求是很有益的。记录这些需求以及拒绝它们的原因,以待查。]

3.1 首次发行的范围

[总结首次发行的产品所具有的性能。描述了产品的质量特性,这些特性使产品可以为不同的客户群提供预期的成果。应当避免将想到的每一个特性都包括到1.0版本产品中去。开发者应把重点放在能提供最大价值、花花费最合理的开发费用及普及率最高的产品上。]

3.2 随后发行的范围

[如果你想象一个周期性的产品演变过程,就要指明哪一个主要特性的开发将被延期,并期待随后版本发行的日期。]

3.3 局限性和专用性

[明确定义包括和不包括的特性和功能的界线是处理范围设定和客户期望的一个途径。列出风险承担者们期望的而你却不打算把它包括到产品中的特性和功能。]

4.业务环境

[这一部分总结了一些项目的业务问题。]

4.1 客户概貌

[客户概述明确了这一产品的不同类型客户的一些本质特点,以及目标市场部门和在这些部门中的不同客户的特征。对于每一种客户类型,概述要包括:

Ø       各种客户类型将从产品中获得的主要益处;

Ø       它们对产品所持的态度;

Ø       感兴趣的关键产品的特性;

Ø       哪一类型客户能成功使用;

Ø       必须适应任何客户的限制。]

4.2 项目的优先级

[一旦明确建立项目的优先级,风险承担者和项目的参与者就能把精力集中在一系列共同的目标上。达到这一目的的一个途径是考虑软件项目的五个方面:性能、质量、计划、成本和人员。在所给的项目中,其每一方面应与下面三个因素之一相适应。

Ø       一个驱动----一个最高级别的目标;

Ø       一个约束----项目管理者必须操纵一个对象的限制因素;

Ø       一个自由度----项目管理能权衡其它方面,进而在约束限制的范围内完成      目标的一个因素。

    未必所有的因素都能成为驱动,或所有的因素都能成为约束因素。在项目开始时记录和分析哪一个因素适用于哪一类型,将有助于使每一个人的努力和期望与普遍认可的优先级相一致。]

5.产品成功的因素

[明确产品的成功是如何定义和测量的,并指明对产品的成功有巨大影响的几个因素。不仅要包括组织直接控制的范围内的事务,还要包括我部素。如果可能,可建立测量的标准,用于评价是否达到业务目标,如:市场股票、销售量及收入、客户满意度、交易处理量和准确度。]

 

 

项目构想[XuFeng1] 

编者说明:

    这个文档模板与“软件项目视图与范围”文档的功能十分接近,只不过该文档更适合于产品型项目。其注重对项目的用户、市场进行分析,紧抓项目相关人员(也叫做风险承担者)的需求的本质。

1.文档简介

[软件需求规格说明书的整个内容还是锁定于整个系统的操作、使用层面之上的功能性需求,只是解决了How的问题,而并未回答Why的问题。这使得系统在开发过程中,开发团队经常陷入知其然,而不知其所以然的困境,造成了不必要的误解与错误。因此,需要一个侧重于对项目的风险承担者、目标用户需要的文档,不仅要了解他们需要的功能,还要找到他们提出这些需求的原因。这就是“项目构想”文档所要描述的重要内容。]

[本节的内容主要是提供项目构想文档的目的、范围、定义、参考资料以及对其的摘要性概述。]

1.1 目的

[说明该文档的写作目的。]

1.2 范围

[范围主要用来说明该文档描述的项目内容,以及与其相关的其它东西。]

1.3 定义、首字母缩写词和缩略语

[与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义。还有一种可简明的做法,就是维护在一个项目词汇表中,这样就可以避免在每个文档中都重复很多内容。]

1.4参考资料

[在这一小节中,应完整地列出该文档引用的所有文档。对于每个引用的文档都应该给出标题、标识号、日期以及来源,为阅读者查找这些文档提供足够详细的信息。]

1.5 概述

[在本小节中,主要是说明项目构想各个部分所包含的主要内容,就像一个文章摘要一样。同时也应该对文档的组织方式进行解释。]

2.定位

2.1 商业机会

[如果该项目是一个产品型项目,那么应该在本小节中描述该产品所针对的商业机会。如果是定制开发项目,那么可以省去本小节。]

2.2 问题说明

[使用表格的形式,将该项目将要解决的问题进行概要性地描述:]

 

存在的问题

 

[问题的简要说明]

 

受影响的人群

 

[该问题对哪些人群带来了影响]

 

导致的后果

 

[该问题带来的不利因素]

 

希望的解决方案

 

[列出解决方案所能够解决的问题,以及其相应的优点。]

2.3 产品定位说明

[如果是产品型项目,则该小节将以表格的形式对产品的定位进行明确,如果是定制开发项目,可以省略本小节。]

 

目标市场

 

[描述产品目标客户群体]

 

目标客户需求

 

[说明客户的需要或者潜在的机会]

 

产品类别

 

[说明该产品属于什么领域]

 

主要优点

 

[描述让目标客户产生兴趣和购买欲的理由]

 

主要竞争对手

 

[列出与该产品有竞争的其它厂商的产品]

 

主要优势

 

[针对竞争产品的分析]

[一个具有清晰定位的产品,在开发过程中,团队将更好地理解,更容易开发出满足目标市场的产品,因而该部分内容是十分重要的。]

3.项目相关人员和用户说明

[了解用户、了解所有与该项目相关的人员,是有效地满足他们对系统、产品需求的基础。你应该在本小节中将所有的项目相关人员以及用户收罗在一起,并对他们进行简要的描述,对他们的需求、习惯、角度进行说明。这些内容将有助于开发团队更好的理解用户的需求本质。]

3.1 产品用户分析

[如果是产品型项目,那么你应该本节中对目标客户进行分析。可以在市场调查的基础上,对其市场的规模和增长率进行研究,从而估计其潜在的用户数量。另外,还应结合目标市场的实际情况,分析你的组织是否在该市场上有拓展的优势,如何获得这些优势。如果是定制开发项目,可以省略这一小节。]

3.2 项目相关人员一览表

[使用下面的表格,对项目相关人员进行分析。]

 

人员类别

 

代表

 

作用

 

[指明项目相关人员的类别]

 

[列举该类人员的代表]

 

[说明其对产品、项目开发的影响]

3.3 用户一览表

 [使用下面的表格,对项目、产品的用户进行分析。]

 

用户类型

 

说明

 

代表

 

[指明用户类别]

 

[简要说明他们在系统中代表的对象和充当的作用]

 

[列举出代表]

3.4 用户环境

[了解用户在使用环境下使用系统或产品,是十分有意义的事,也是实现产品更好地满足需求,提供更加方便的使用界面的基础。例如:该任务由多少人来完成?是否总在变化?一个任务周期需要多长时间?执行每项活动要用多长时间?是否总在变化?是否有特殊的环境约束:移动、户外、乘机旅行等?目前使用的是哪些系统平台?以后会使用哪些平台?还在使用哪些应用程序?您的应用程序是否需要和这些应用程序集成?他们的计算机硬件系统的环境情况如何?他们都是在什么样的工作环境中使用系统的?]

3.5 项目相关人员的简要说明 

[以下表的形式,将各类项目相关人员的基本情况进行说明,以帮助开发团队更好地了解他们的情况。为每一类人员生成一张表格。]

 

代表

 

[列出该类项目相关人员的代表。]

 

说明

 

[对该类人员进行简要说明。]

 

专业技能

 

[描述本类人员的技能特长、技术背景以及电脑系统操作的熟练程度(可以分成业务用户、专家用户、熟练用户、初级用户等)]

 

职责

 

[描述本类人员对系统开发所承担的职责,以及应享有的利益。]

 

验收标准

 

[描述验证系统是否满足其职责的标准。]

 

参与方式

 

[该类人员是否参与系统开发,如果参与将以什么形式参加。]

 

项目成果

 

[说明该类项目相关人员是否参与项目成果的开发,是否有与其相关的项目成果。]

 

意见/问题

 

[列出与该类项目成员相关的问题与建议。]

3.6 用户简要说明

[以下表的形式,将与系统相关的各种用户的信息整理出来,以方便开发团队针对性的工作。要注意的是,用户会有不同的类型,有些用户需要的是灵活性、方便快速操作的高级功能,而有些用户则侧重与用户界面的友好性。这些与该用户的基本情况直接相关,了解用户才能够真正地开发出符合用户习惯和水平的系统。为每类用户生成一张表。]

 

代表

 

[列出该类用户的代表。]

 

说明

 

[对该类用户进行简要说明。]

 

专业技能

 

[描述该用户的技能特长、技术背景和对计算机系统操作的熟练程度。]

 

职责

 

[列出该用户对所开发的系统负有的关键职责,如记录详细信息、撰写报告、协调工作等。]

 

验收标准

 

[描述验证系统符合用户需求的标准。]

 

参与方式

 

[说明该类用户是否参与开发,如何参与。]

 

项目成果

 

[说明是否有依赖于该类用户的项目成果。]

 

意见/问题

 

[列出一些该类用户对系统提出的一个意见与建议,并且收集其认为该系统将遇到的问题。]

3.7 关键的项目相关人员/用户需要

[列出项目相关人员提出的针对对于该解决方案的关键问题。对于列出的每个问题,需澄清:为什么会出现这一问题?目前的解决方案是什么?他们需要什么要的解决方案?或者对新的解决方案有什么样的预期?]

[还有一个很关键的内容就是,每个需求的优先级,这将对制定迭代计划时提供有效的基础,而优先级的确定,应该采用分级、累积投票等方法从用户、项目相关人员那里获得。应充分考虑项目客户方的要求。如果是产品型项目,则应该从产品经理、市场调查资料里获得。]

[经过整理后,将内容填入下表:]

 

需求

 

优先级

 

要点

 

目前解决方案

 

提议的解决方案

 

 

 

 

 

 

 

 

 

 

3.8 备选方案和竞争

[如果是产品型项目,应在此小节列举出客户除了购买该产品这外的选择,其中包括购买竞争对手的产品、自行设计解决方案甚至是维持现状。对所有潜在的竞争产品做一个列表,并根据客户的实际情况来确认主要优缺点。]

[而如果是定制开发型项目,则应该了解竞争对手提供的解决方案,比在此进行相应的比较。]

4. 产品概述

[本节主要从产品级、系统级的视角,高度概括产品的功能、与其它应用程序的交互以及所需的系统配置等。]

4.1 产品总体效果

[本小节主要将产品话在用户环境、使用环境的角度来介绍。如果是自成一体,则说明用户将如何使用;如果是与其它的应用系统进行交互的,则在此小节说明如何与这些系统进行交互?它们之间采用什么样的通讯方式和接口。在这里最适合的方式是使用UML的部署图,让用户对系统最终的运行环境有一个较宏观的了解。]

4.2 主要功能

[本小节不是对系统或产品所有功能的罗列,而是将能够体现系统、产品主要优点和特性功能在此列出。在内容组织方面,应该直接与“客户能够通过产品获得的好处”相联系,使读者能够将系统的功能与客户的价值直接联系起来,在开发时能够从本质出发,构建出更加符合客户需要的系统。]

4.3 假设与依赖关系

[在此小节中,列出所有会影响该文档中所述特性的各种因素。也就是列举出所有可能让该文档发生变化的假设条件。]

4.4 成本与定价

[该小节主要是对该项目的成本进行核算,对给出相应的定价策略。对于定制开发的项目,其成本主要包括开发的人工成本、公司管理成本、项目额外开支、相关软硬件工具投资等方面。而对于产品型项目而言,还包括分销成本、用户手册制作、CD制作等方面的成本。这里的成本核算为最终的合同价格以及产品的销售价值将提供一个基础的依据,因此也是十分重要的。]

4.5 许可与安装

[该小节中主要列出影响开发工作的一些许可和安装相关的问题。例如是否需要加密,如果验证用户合法性,安装界面的要求是什么。这方面对于产品型项目而言显得更加重要,也是对软件知识产权保护的一个重要措施。]

5.产品特性

[在本节中将列出系统或产品的特性,特性是指实现用户价值的系统功能。每一个特性都是一个所需的服务,通常是通过一系列操作实现预期结果。在FDD中,也就是特征。通常一个特征会由一个或多个用例来实现,通常系统的特性应该进行整合打包,以25-99项为合适。]

[本小节的描述应该能够让用户、操作人员、外部系统直接从系统的外边感受到每项特性,这些特性应该包括功能性说明以及一些可用性问题。但是要注意,在这里不要过早地引入设计的内容,这里说明的是What,而不是How。]

[另外,因在所有特性的描述中,确定其优先级。]

6.约束

[记录用户、项目相关人员提供出的一些约束条件,以及与其它系统之间的依赖关系,这是制订解决方案时必须考虑到的问题。]

7.质量要求

[对于整个系统的质量要求,如可靠性、可用性、性能、容错等质量要求,在这此节中详细地定义与描述。]

8.其他产品需求

[一些要求符合的标准、硬件基础要求、软件基础要求、环境要求等。]

8.1 适用的标准

[列出产品必须符合的所有标准。其中可能包括法律和法规(FDA、UCC)标准、通讯标准(TCP/IP、ISDN)、平台一致性标准(Windows、Unix 等)以及质量和安全标准(UL、ISO、CMM)。]

8.2 系统需求

[确定支持该应用程序所必需的任何系统需求。其中可能包括操作系统、网络环境、系统配置、内存大小、硬盘大小、外围设备和配套软件。]

8.3 性能需求

[本节用于详细说明性能需求。性能问题可能包括在各种负载条件下的用户负载因素、带宽或通信容量、吞吐量、精确度以及可靠性或响应时间。]

8.4 环境需求

[对于基于硬件的系统,环境因素可以包括温度、振荡、湿度、辐射等。对于软件应用系统,环境因素可以包括使用条件、用户环境、资源可用性、维护问题、错误处理和恢复。]

9. 文档需求

[列举用户所需的与该系统或产品相关的文档。]

9.1 用户手册

[用户手册的制作说明,例如手册篇幅、详细程序、是否需要图、主要关心的点、要不要建立索引、词汇表,采用教程式还是速查手册式。]

9.2 联机帮助

[联机帮助是一种用户界面友好的服务,它可以为用户提供实时的协助。]

9.3 安装指南、配置文件、自述文件

9.4 标签与包装

10. 功能需求属性

[为了在项目开发过程中,对每个功能需求进行跟踪管理,在此对所有的功能进行一个总体的描述。]

[可以生成一张功能需求属性表,每条记录代表一条功能,每个功能包括以下字段:]

1)状态:标识该功能的最新状态。

Ø       已提出:已经提出来,但是还没有经过正式的复审而确定的需求;

Ø       已批准:已经经过正式的渠道复审而确定,准备实施的需求;

Ø       已加入:已经加入到需求管理基线中的特性。

2)利益:根据客户的态度,确定每个需求的重要程序,也是确定系统开发优先级的基础数据。

Ø       关键:必不可少的特性,缺少这些特性的系统将无法满足客户的要求,这些特性通常会在最早安排到迭代开发中去;

Ø       重要:对于系统来说,该特性是十分重要的,很难以通过其它方式来弥补,如果这些特性没有第一时间实现,将会使得客户满意度大大降低。因此是第二优先实现的特性;

Ø       有用:这些是一些有效,但使用频率较低的功能特性。如果没有在第一时间实现,也不会对客户满意度造成很大的影响;

Ø       无用:对于系统来说是“镀金”需求,有也可以,没有也行的。

3)工作量:根据特性所需的时间和资源进行估算,给出团队开发的工作时间或个人开发的工作时间。也可以估算出代码行数或功能点数,这也将为迭代开发计划的制定提供良好的基础。

4)风险:列出该特性开发的最大风险,可以对这些风险进行级别细分,对于影响较大的风险还应该制定相应的应对措施。

5)稳定性:对该特性需求是否容易变化进行一个预估,以帮助设计人员在设计解决方案时更加有效地避免变化对体系结构的影响,从而节省时间。

6)基线:确定其是否已经纳入基线;

7)职责分配:列出负责实现该特性的团队;

8)原因:列出提出该特性的原因,也可以将与客户交流的记录等资料放在这里,以帮助开发团队更好的理解客户的本意。

 

 

需求规格说明书(ISO标准版)

编者说明:

    当需求调查、分析工作告一段落时,你就需要将这些需求进行规格化描述,整理成文,即软件需求规格说明书,也就是SRS。这是在软件项目过程中最有价值的一个文档。ISO所提供的标准虽然已经时间久远,但还是颇具参考价值的。

1.引言

1.1编写的目的

        [说明编写这份需求说明书的目的,指出预期的读者。]

1.2背景

a.     待开发的系统的名称;

b.    本项目的任务提出者、开发者、用户;

c.    该系统同其他系统或其他机构的基本的相互来往关系。

1.3定义

        [列出本文件中用到的专门术语的定义和外文首字母组词的原词组。]

1.4参考资料

        [列出用得着的参考资料。]

2.任务概述

2.1目标

[叙述该系统开发的意图、应用目标、作用范围以及其他应向读者说明的有关该系统开发的背景材料。解释被开发系统与其他有关系统之间的关系。]

2.2用户的特点

[列出本系统的最终用户的特点,充分说明操作人员、维护人员的教育水平和技术专长,以及本系统的预期使用频度。]

2.3假定和约束

        [列出进行本系统开发工作的假定和约束。]

3.需求规定

3.1对功能的规定

[用列表的方式,逐项定量和定性地叙述对系统所提出的功能要求,说明输入什么量、经怎么样的处理、得到什么输出,说明系统的容量,包括系统应支持的终端数和应支持的并行操作的用户数等指标。]

3.2 对性能的规定

3.2.1精度

    [说明对该系统的输入、输出数据精度的要求,可能包括传输过程中的精度。]

3.2.2时间特性要求

    [说明对于该系统的时间特性要求。]

3.2.3灵活性

[说明对该系统的灵活性的要求,即当需求发生某些变化时,该系统对这些变化的适应能力。]

3.3输入输出要求

[解释各输入输出数据类型,并逐项说明其媒体、格式、数值范围、精度等。对系统的数据输出及必须标明的控制输出量进行解释并举例。]

3.4数据管理能力要求(针对软件系统)

[说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求作出估算。]

3.5故障处理要求

[列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。]

3.6其他专门要求

[如用户单位对安全保密的要求,对使用方便的要求,对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。]

4.运行环境规定

4.1设备

        [列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能,包括:

a.     处理器型号及内存容量

b.    外存容量、联机或脱机、媒体及其存储格式,设备的型号及数量

c.    输入及输出设备的型号和数量,联机或脱机;

d.    数据通信设备的型号和数量

e.     功能键及其他专用硬件]

4.2支持软件

[列出支持软件,包括要用到的操作系统、编译程序、测试支持软件等。]

4.3接口

        [说明该系统同其他系统之间的接口、数据通信协议等。]

4.4控制

        [说明控制该系统的运行的方法和控制信号,并说明这些控制信号的来源。]

 

 

需求规格说明书(Volere版)

编者说明:

    Atlantic System Guild(www.atlsysguild.com)公司所提供的Volere需求过程与软件需求规格说明书模板则充分利用了现代软件工程思想与技术,是一个十分实用、完善的SRS模板。其所提供的Volere需求记录卡也十分实用,强烈推荐。

注:从Atlantic System Guild公司网站www.atlsysguild.com上获得,并稍做修改

1.产品的目标

1.1 该项目工作的用户问题或背景

[对引发开发任务的工作和情况的描述。同时也应描述用户希望用将要交付的软件来完成的工作。]

[该节内容为该项目提供了合法的理由,你应该考虑用户的问题是否严重,是否应该解决和为什么应该解决。]

1.2 产品的目标

[用一句话或很少的几句话来说明“我们希望该产品做什么?”换言之,即开发该产品的真正原因。

[项目如果没有一个表述清晰、易于理解的目标,就会迷失在产品开发的沙漠中。产品必须带来某种优势。典型的优势是产品会增加组织在市场上的价值,减少运作成本,或提供更好的客户服务。这个优势应该是可度量的,这样才能够让您确定交付的产品是否达到目标。]

2.客户、顾客和其它风险承担者

2.1 客户是为开发付费的人,并将成为所交付产品的拥有者

    [这一项必须给出客户的姓名,三个以内是合理的。]

[客户最终将接受该产品,因此必须对交付的产品满意。如果你无法找到一个客户的姓名,那么也许你就不应该构建该产品。]

2.2 顾客是将花钱购买该产品的人

    [也给出姓名和相关的信息]

2.3 其它风险承担者

    [其他的一些人或组织的名称,他们或者受到产品的影响,或影响产品。]

1)  经理或项目负责人;

2)  业务领域专家;

3)  技术人员;

4)  系统开发者;

5)  市场人员;

6)  产品经理;

7)  测试和质量保证人员;

8)  审查员,诸如安全审查员或审计人员;

9)  律师;

10)易用性专家;

11)你所处行业的专业人员。

3.产品的用户

3.1 产品的用户

    [产品的潜在用户或操作员的列表。针对每种类型的用户,提供以下信息:]

1)  用户分类

2)  用户工作的任务;

3)  主要相关的经验;

4)  技术经验;

5)  其他用户特征:包括身体、智力、工作态度、对技术的态度、教育程度、语言技能、年龄、性别等。

[用户是为了完成工作而与产品交互的人,你了解用户,就越可能提交适合用户工作方式的产品。]

3.2 对用户设的优先级

    [在每类用户后面附上一个优先级,这区别了用户的重要性和优先地位:]

1)  关键用户:对产品的后续成功至关重要;

2)  次要用户:他们使用产品,但对产品的长期成功并无影响;

3)  不重要的用户:不常用、未授权和没有技能的用户。

[如果认为某些用户对产品或组织更重要,那么应该写明,因为它会影响你设计产品的方式。]

4.需求限制条件

4.1 解决方案限制条件

[此处明确了限制条件,它们规定了解决问题必须采取的方式。您可以认为它们是指令式的解决方案。仔细描述该解决方案,以及测试是否符合的度量标准。如果可能,您应该解释使用该解决方案的原因。]

[换一句话说,就是要求软件解决方案满足哪些限制条件!]

4.2 实现环境

    [此处描述产品将被实施的技术环境和物理环境。]

    [该环境也将成为设计解决方案时的限制条件之一。]

4.3 伙伴应用

    [此处描述那些不属于产品的一部分,但产品却又必须与其协作的应用程序。]

4.4 COTS

    [此处描述实现产品需求所必须使用的COTS(商业组件)。]

4.5 预期的工作场地环境

[此处描述用户工作和使用该产品的工作场地。此处应该描述任何可能对产品设计产生影响的工作场地特征。]

4.6 开发者构建该产品需要多少时间

    [任何已知的最后期限,或商业机会的时限,应在此处说明。]

4.7 该产品的财务预算是多少

    [该产品的预算,以金钱的形式或可得资源的形式说明。]

5.命名标准和定义

[定义项目中使用到的所有术语,包括同义词。这里的内容就是一个字典,包括在需求规格说明书中使用的所有名称的含义。这个字典应该使用你的组织或行业使用的标准名称。这些名称也应该反映出在工作领域中当前使用的术语。该字典包括项目中用到的所有名称。请仔细地选择名称,以避免传达不同的、不期望的含义。为每个名字写下简明扼要的定义,这些定义必须经过相应的风险承担者同意。]

6.相关事实

[可能对产品产生影响的外部因素,但不是命令式的需求限制条件。]

7.假定

[列出开发者所做的假设。]

[将所有的假设列在此的目的是让每一个项目成员都意识到这个假设。]

8.产品的范围

8.1 工作的上下文范围

[上下文范围图用来表示将要开发的系统、产品与其它系统之间的关系,以确定系统边界。]

8.2 工作切分

    [一个事件清单,确定系统要响应的所有业务事件。清单包括:]

1)  事件名称

2)  输入和输出

8.3 产品边界

    [你可以使用用例图(use-case)来确定了用户与产品之间的边界。]

9.功能性需求与数据需求

9.1 功能性需求

    [对产品必须执行的动作的描述。]

    [每个功能性需求必须有一个验收标准。]

9.2 数据需求

    [与产品/系统有密切关系的主题域相关的业务对象、实体、类的说明书。]

    [进行问题域建模,生成相应的类图。]

10.观感需求

[一些与产品的用户界面相关的需求描述。]

11.易用性需求

11.1 易于使用

    [描述如何构建符合最终用户期望的产品。]

11.2 学习的容易程序

    [学习使用该产品应该多容易的说明。通常是有学习时间来衡量。]

12.性能要求

12.1 速度需求

    [明确完成特定任务需要的时间,这常常指响应时间。]

12.2 安全性的需求

    [对可能造成人身伤害、财产损失和环境破坏所考虑到的风险进行量化描述。]

12.3 精度需求

    [对产品产生的结果期望的精度进行量化描述。]

12.4 可靠性和可用性需求

[本节量化产品所需的可靠性。这常常表述为允许的两次失败之间无故障运行时间,或允许的总失败率。]

12.5 容量需求

    [本节明确处理的吞吐量和产品存储数据的容量。]

13.操作需求

13.1 预期的物理环境

    [本节明确产品将操作的物理环境,以及这种环境引起的任何特殊需求。]

13.2 预期的技术环境

    [硬件和其它组成新产品操作环境的设备的规范。]

13.3 伙伴应用程序

    [对产品必须与之交互的其它应用程序的描述。]

14.可维护性和可移植性需求

14.1 维护该产品需要多容易

    [对产品作特定修改所需时间的量化描述。]

14.2 是否存在一些特殊情况适用于该产品的维护

    [关于预期的产品发布周期和发布将采取的形式的规定。]

14.3 可移植性需求

    [对产品必须支持的其他平台或环境的描述。]

15.安全性需求

15.1 该产品是保密的吗?

    [关于该被授权使用该产品,以及在什么样的情况下授权等方面的描述。]

15.2 文件完整性需求

    [关于需要的数据库和其他文件完整性方面的说明。]

15.3 审计需求

    [关于需要的审计检查方面的说明。]

16.文件和政策需求

[本节包括针对社会和政策的因素的规格说明,这些因素会影响产品的可接受性。如果你开发的产品是针对外国市场的,可能要特别注意这些需求。]

[问一下是否产品的目标是你所不熟悉的文化环境,是否其它国家的人或其他类型的组织的人会使用该产品。人们是否有与你的文化不同的习惯、节日、迷信、文化上的社会行为规范。]

17.法律需求

17.1 该产品是否受到某些法律的管制

    [明确该产品的法律需求的描述。]

17.2 是否有一些必须符合的标准

    [明确适用的标准和参考的详细标准的描述。]

18.Opend问题

[对未确定但可能对产品产生重要影响的因素的问题描述。按照需求分析的术语还说,就是TBD(To Be Define)的问题。]

19.COTS解决方案

19.1 是否有一些制造好的产品可以购买

    [应该调查现存产品清单,这些产品可以作为潜在的解决方案。]

19.2 该产品是否可使用制造好的组件

    [描述可能用于该产品的候选组件,包括采购的和公司自己的产品。列出来源。]

19.3 是否有一些我们可以复制的东西

    [其他相似产品的清单。]

20.新问题

20.1 新产品会在当前环境中带来什么问题

    [关于新产品将怎样影响当前的实现环境的描述。]

20.2 新的开发是否将影响某些已实施的系统

    [关于新产品将怎样与现存系统协同工作的描述。]

20.3 是否我们现有的用户会受到新开发的敌对性影响

    [关于现有用户可能产生的敌对性反应的细节。]

20.4 预期的实现环境会存在什么限制新产品的因素

    [关于新的自动化技术、新的组织结构方式的任何潜在问题的描述。]

20.5 是否新产品会带来其他问题

    [确定我们可能不能处理的情况。]

21.任务

21.1 为提交该产品已经做了哪些事

[用来开发产品的生命周期和方法的细节。画一个高层的过程图展示各项任务和它们之间的接口,这可能是沟通这方面信息的最好办法。]

21.2 开发阶段

    [关于每个开发阶段和操作环境中的组件的规格说明。]

22.移交

22.1 我们要让已有数据和过程配合新产品,有什么特殊要求

    [一个移交活动的列表,一个实现的时间表。]

22.2 为了新产品,哪些数据必须修改/转换

    [数据转换任务清单,同时确定新产品需要转换的数据。]

23. 风险

23.1 当你开发该产品时,要面对什么风险

23.2 你制定了怎样的偶然紧急情况计划

24.费用

    [需求的其他费用是你必须投入到产品构建中去的钱或工作量。当需求规格说明书完成时,你可以使用一种估算方法来评估费用,然后以构建所需的资金或时间的形式表述出来。]

25.用户文档

[用户文档的清单,这些文档将作为产品的一部分交付。]

26.后续版本的需求

[这里记录下一些希望今后版本中实现的需求。]

 

 

Volere需求记录卡

编者说明:

正如前面所述,Atlantic System Guild还提供了一个配套的Volere需求记录卡,这个记录卡十分实用。建议大家在需求调查、分析过程中,将需求记录在一系列的Volere需求记录卡上,这个卡让你能够很好的理清需求之间的关系,需求提出的背景,用户对需求的期望,有了这些素材,整理SRS时将变得更加简单。

 

 

 

 

 

需求#:                     需求类型:                 事件/用例#:

 

描述:

 

 

理由:

 

来源:

验收标准:

 

 

 

顾客满意度:                          顾客不满意度:

依赖关系:                                    冲突:

支持材料:                                                                                

历史:

 

Copyright @ Atiantic system Guild

 

 

Volere

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注:顾客满意度是指完成该项功能顾客满意的程度,而顾客不满意度则是指未实现该功能顾客不满意的程度。

 

 

软件需求规格说明[XuFeng2] 

编者说明:

    如果在需求分析时采用了用例(Use case)技术,那么该需求规格说明书将更加符合你的需要。当然,你也可以结合Volere需求规格说明书对该模板进行必要的修改。

1. 文档概述

[该部分主要是对软件需求规格说明书文档进行基本的描述,包括该文档的目的、范围、术语定义、参考资料以及概要。]

[软件需求规格说明书用来系统、完整地记录系统的软件需求。该软件需求说明书的基础是用例分析技术。因此该文档中应包括用例模型、补充规约等内容。]

1.1目的

[在此小节中,主要对软件需求规格说明书的目的做一概要性说明,通常软件需求规格说明书应详细地说明应用程序、子系统的外部行为,还要说明非功能性需求、设计约束,以及其它的相关因素。]

1.2范围

[系统是有范围的,而不是无限扩展的,对于无限扩展的需求是无法进行描述的。因此,在本小节应该对该说明书所涉及的项目范围进行清晰的界定。指定该规格说明书适用的软件应用程序、特性或者其它子系统分组、其相关的用例模型。当然在此也需要列出会受到该文档影响的其它文档。]

1.3 定义、首字母缩写词和缩略语

[与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义。还有一种可简明的做法,就是维护在一个项目词汇表中,这样就可以避免在每个文档中都重复很多内容。]

1.4参考资料

[在这一小节中,应完整地列出该文档引用的所有文档。对于每个引用的文档都应该给出标题、标识号、日期以及来源,为阅读者查找这些文档提供足够详细的信息。]

1.5 概述

[在本小节中,主要是说明软件需求规格说明书各个部分所包含的主要内容,就像一个文章摘要一样。同时也应该对文档的组织方式进行解释。]

2. 整体说明

[在本节中,将对整个软件需求进行总体性的描述,以期让读者对整个软件系统的需求有一个框架性的认识。也就是说,该节中主要包括影响产品及其需求的一般因素,而不列举 具体的需求。主要包括产品总体效果、产品功能、用户特征、约束、假设与依赖关系、需求子集等方面的内容。]

2.1用例模型

[在本小节中,将列出该软件需求的用例模型,该模型处于系统级,对系统的特性进行宏观的描述。在此应该列出所有的用例和Actor的名称列表,并且对其做出简要的说明,以及在图中的各种关系。]

2.2 假设与依赖关系

[在软件系统的开发过程中,存在许多假设和依赖关系。在本小节中应列举出所有的重要的技术可行性假设、子系统或构件可用性假设,以及一些可行性的假设。]

3. 具体需求

[如果说第二章节是框架,那么本节就是血肉。在本节中,应该详细列出所有的软件需求,其详细程序应使设计人员能够充分理解并且进行设计的要求,同时也应该给予测试人员足够的信息,以帮助他们来验证系统是否满足了这些需求。整个需求的组织可以采用用例描述进行。]

3.1用例描述

[如果你使用用例建模技术,那么你已经通过用例定义了系统的大部分功能性需求和一些非功能性需求。因此,在软件需求规格说明书只需将这些具体的用例描述,整理在一起,全部放在该小节之中。当然也可以将用例描述做为附件,在此列出引用,只是这样做并不利于阅读。建议在组织形式上采用以“软件需求”为线索,在每个需求中,填入对应的1个或几个用例描述。]

3.2补充需求

[由于用例毕竟主要针对功能性需求,因此还会有一些其它的补充需求遗漏,因此在本小节中就是将这些东西补充出来。这些补充需求大部分集中在非功能需求之上,包括以下几个方面的内容:]

1)  易用性:例如指出普通用户和高级用户要高效地执行某个特定操作所需的培训时间;指出典型任务的可评测任务次数;或者指出需要满足的可用性标准(如IBM的CUA标准、Microsoft的GUI标准。

2)  可靠性:包括系统可用性(可用时间百分比、使用小时数、维护访问权、降纸模式操作等);平均故障间隔时间(MTBF,通常表示为小时数,但也可表示为天数、月数或年数);平均修复时间(MTTR,系统在发生故障后可以暂停运行的时间);精确度(指出系统输出要求具备的精密度、分辨率和精确度);最高错误或缺陷率(通常表示为bugs/KLOC,即每千行代码的错误数目或 bugs/function-point,即每个功能点的错误数目);错误或缺陷率(按照小错误、大错误和严重错误来分类:需求中必须对“严重”错误进行界定,例如:数据完全丢失或完全不能使用系统的某部分功能)。

3)  性能:包括对事务的响应时间(平均、最长);吞吐量(例如每秒处理的事务数);容量(例如系统可以容纳的客户或事务数);降级模式(当系统以某种形式降级时可接受的运行模式);资源利用情况:内存、磁盘、通信等。

4)  其它:包括用户界面要求、联机帮助系统要求、法律许可、外购构件,以及操作系统、开发工具、数据库系统等设计约束。

4.支持信息

[支持信息用于使软件需求规格说明书更易于使用。它包括:目录、索引、附录等。]

 

 

计算机软件需求说明编制指南

编者说明:

    软件需求规格说明是十分重要的文档,因此为开发团队提供一份详细的编制指南是十分有意义和必要的。本文档就是一个编制指南的例子,你可以根据该指南,结合自己的实际情况进行修改。

1.引言

1.1 目的和作用

本指南为软件需求实践提供了一个规范化的方法。本指南不提倡把软件需求说明(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还是软件产品改进的可靠基础。

1.2 范围

本指南适用于编写软件需求规格说明,它描述了一个SRS所必须的内容和质量,并且在第6章中提供了SRS大纲。

2.引用标准

GB 8566 计算机软件开发规范

GB 8567 计算机软件产品开发文件编制指南

GB/T 11457 软件工程术语

3.定义

GB/T 11457所列术语和下列定义适用于本指南。

合同(contract):是由客户和开发者共同签署的具有法律约束力的文件。其中包括产品的技术、组织、成本和进度计划要求等内容。

客户(customer):指个人或单位,他们为产品开发提供资金,通常(但有时也不必)还提出各种需求。文件中的客户和开发者也可能是同一个组织的成员。

语言(language):是具有语法和语义的通信工具,包括一组表达式、惯例和传递信息的有关规则。

分割(partitioning):把一个整体分成若干部分。

开发者(supplier):指为客户生产某种软件产品的个人或集团。在本指南中,客户和开发者可能是同一个组织的成员。

用户(user):指运行系统或者直接与系统发生交互作用的个人或集团。用户和客户通常不是同一些人。

4.编写SRS的背景信息

4.1 SRS的基本要求

SRS是对要完成一定功能、性能的软件产品、程序或一组程序的说明。对SRS的描述有两项基本要求:

1)必须描述一定的功能、性能;

2)必须用确定的方法叙述这些功能、性能。

4.2 SRS的环境

必须认识到SRS在整个软件开发规范(见GB 8566)所规定的有关阶段都起作用。正因为如此,SRS的起草者必须特别注意不要超出这种作用的范围。这意味着要满足下列要求:

1)  SRS必须正确地定义所有的软件需求;

2)  除设计上的特殊限制之外,SRS中一般不描述任何设计、验证或项目管理细节。

4.3 SRS的特点

4.3.1 无歧义性

当且仅当它对每一个需求只有一种解释时,SRS者是无歧义的。

2)  要求最终产品的每一个特性用某一术语描述;

3)  若某一术语在某一特殊的行文中使用时具有多种歧义,那么对该术语的每种含义作出解释并指出其适用场合。

需求通常是用自然语言编写的,使用自然语言的SRS起草者必须特别注意消除其需求的歧义性。提倡使用形式化需求说明语言。

4.3.2 完整性

如果一个SRS能满足下列要求,则该SRS就是完整的:

1)  包括全部有意义的要求,无论是关系到功能的、性能的、设计约束的,还是关系到属性或外部接口方面的需求;

2)  对所有可能出现的输入数据的响应予以定义,要对合法和非合法的输入值的响应做出规定;

3)  要符合SRS要求。如果个别章节不适用,则在SRS中要保留章节号;

4)  填写SRS中的全部插图、表、图示标记和参照,并且定义全部术语和度量单位。

4.3.2.1 关于使用“待定”一词的规定

任何一个使用“待定”的SRS都是不完全的。

1)  若万一遇到使用“待定”一词时,作如下处理:

Ø       对产生“待定”一词的条件进行描述,使得问题能被解决;

Ø       描述必须干什么事,以删除这个“待定”;

2)  包含有“待定”一词的任何SRS的项目文件应该:

Ø       标识与此特定文件有关的版本号或叙述其专门的发布号;

Ø       拒绝任何仍标识为“待定”一词的SRS章节的许诺。

4.3.3 可验证性

当且仅当SRS中描述的每一个需求都是可以验证的,该SRS才是可以验证的;当且仅当在某一性能价格比可取的有限处理过程,人或机器能通过该过程检查软件产品能否满足需求时,才称这个需求是可以验证的。

4.3.4 一致性

当且仅当SRS中各个需求的描述是不矛盾时SRS才是一致的。

4.3.5 可修改性

如果一个SRS的结构和风格在需求有必要改变时是易于实现的、完整性的、一致的,那么这个SRS就是可以修改的。可修改性要求SRS具备以下条件:

1)  具有一个有条不紊的易于使用的内容组织,具有目录表,索引和明确的交叉引用表;

2)  没有冗余。即同一需求不能在SRS中出现多次。

Ø       冗余本身不是错误,但是容易发生错误。冗余可增加SRS的可读性,但是在一个冗余文件被更新时容易出现问题。例如:假设一个明确的需求在两个地方详细列出,后来发现这个需求需要改变,若只修改一个地方,于是SRS就变得不一致了。

Ø       不管冗余是否必须,SRS一定要包含一个详细的交叉引用表,以便SRS具备可修改性。

4.3.6 可追踪性

如果每一个需求的源流是清晰的,在进一步产生和改变文件编制时,可以方便地引证每一个需求,则该SRS就是可追踪的。建议采用如下两种类型的追踪:

1)  向后追踪(即向已开发过的前一阶段追踪)。根据先前文件或本文件前面的每一个需求进行追踪。

2)  向前追踪(即是向由SRS派生的所有文件追踪)。根据SRS中具有唯一的名字和参照号的每一个需求进行追踪。

当SRS中的一个需求表达另一个需求的一种指派或者是派生的,向前、向后的追踪都要提供。例如:

1)  从总的用户响应时间需求中分配给数据库操作响应时间;

2)  识别带有一定功能和用户接口的需求的报告格式;

3)  支持法律或行政上需要的某个软件产品(例如,计算税收)。在这种情况下,要指出软件所支持的确切的法律或行政文件。

当软件产品进入运行和维护阶段时,SRS的向前可追踪性显得特别重要。当编码和设计文件作修改时,重要的是要查清这些修改所影响的全部需求。

4.3.7 运行和维护阶段的可使用性

SRS必须满足运行和维护阶段的需要,包括软件最终替换。

1)  维护常常是由与原来开发无联系的人来进行的。局部的改变(修正)可以借助于好的代码注释来实现。对于较大范围的改变。设计和需求文件是必不可少的,这里隐含了两个作用:

Ø       如4.3.5 条指出,SRS必须是可修改的;

Ø       SRS中必须包括一个记录,它记录那些应用于各个成分的所有具体条文。例如:它们的危急性(如故障可能危及完全或导致大量财政方面和社会方面的损失);它们仅与暂时的需要相关(如支持一种可立即恢复原状的显示);它们的来源(如某功能是由已存在的软件产品的全部拷贝复制而成)。

2)  要求在SRS中清楚地写明功能的来源和目的,因为对功能的来源和引入该功能的目的不清楚的话,通常不可能很好地完成软件的维护。

4.4 SRS的编制者

软件开发的过程是由开发者和客户双方同意开发什么样的软件协议开始的。这种协议要使用SRS的形式,应该由双方联合起草。这是因为:

1)  客户通常对软件设计和开发过程了解较少,而不能写出可用的SRS;

2)  开发者通常对于客户的问题和意图了解较少,从而不可能写出一个令人满意的系统需求。

4.5 SRS的改进

软件产品的开发过程中,在项目的开始阶段不可能详细说明某些细节,在开发过程中可能发现SRS的缺陷、缺点和错误之类的问题,所以可能要对SRS进行改进。

在SRS的改进中,应注意如下事项:

1)  尽管可以预见校正版本的开发以后不可避免,而对需求还必须尽可能完全、清楚地描述。

2)  一旦最初识别出项目的变化,应引入一个正式的改变规程来标识、控制、追踪和报告项目的改变。批准了的需求改变,用如下的方法编入SRS之中:

Ø       提供各种改变后的正确的、完全的审查记录;

Ø       允许对SRS当前的和被替代部分的审查。

4.6 SRS的编制工具

编制SRS最显而易见的方法是用自然语言来描述。尽管自然语言是丰富多彩的,但不易精确,用形式化的方法较好。

4.6.1 形式化说明方法

在SRS中是否使用形式化方法要依据下列因素:

1) 程序规模和复杂性;

2) 客户合同中是否要求使用;

3) SRS是否是一个合同工具或仅仅是一个内部文件;

4) SRS文件是否成为设计文件的根据;

5) 具有支持这种方法的计算机设备。

4.6.2 生产工具

软件产品生产中有多种生产工具。比如,计算机的字处理器就是非常有用的生产辅助工具。一个SRS通常有若干作者。可能经历若干版本,并且要进行多次重新组织内容。故生产工具是必要的。

4.6.3 表达工具

在SRS中有许多词汇,特别是许多名词和动词,专门涉及到系统的实体和许多活动,所以表达SRS需要若干工具。比如:

1) 可以验证实体或活动,无论在SRS中什么地方都是同一名字。

2) 可以标识一个特殊的实体或动作在规格说明中的描述位置。

此外,可以使用若干种形式化方法,以便允许自动处理SRS内容,只要作某些限制就可以做到:

用一些表格或图示法来显示需求。

用详细分层体系自动检查SRS的需求,这里每一个分层自身是完全的,但是也可以扩展为下一层,或是上一层的一个组成成分。

自动检查SRS具有在4.3条描述的部分或全部特点。

5 软件需求

SRS中每一个软件需求是要求开发软件产品的某些基本功能和性能的一个陈述。

5.1 表达软件需求的方法

软件需求可以用若干种方法来表达:

1)通过输入、输出说明;

2)使用代表性的例子;

3)用规范化的模型。

5.1.1 输入、输出说明

用输入输出序列来描述一个软件产品所要求的特性是很有效的。

5.1.1.1 途径

根据被描述的软件的性质,至少有三种不同的途径:

1)  有些软件产品(如报表系统)要求着重说明输出。一般情况下,致力于输出的系统主要是在数据文卷上操作。用户的输入通常是致力于提供控制信息和启动数据文卷的处理;

2)  有些软件产品需要着重说明输入、输出特性。关注输入、输出的系统主要是在当前的输入上操作,要求生成与输入相匹配的输出(类似于数据转换例行程序或一个数学函数包);

3)  还有一些系统(如过程控制系统)要求记忆它们的状态。可以根据本次输入和上一次输入进行应答。也就是说,它的行为如同一个有限状态机。在此种情况下,既要关注输入/输出对,又要关注这些输入/输出对的次序。

5.1.1.2 困难

多数软件产品可能接收无限的序列作为输入,于是,为了通过输入输出序列完整地说明产品的特性,就要求SRS包括一个无限长的输入和所需的输出充列。然而,用这样的途径不可能完整地描述软件所要求的一切特性。

5.1.2 典型例子

一种选择是用典型例子来说明要求的特性。例如,假设一个系统中当接收“0”时用“1”来回答。显然,要列出全部输入和输出序列是不可能的。然而,用典型的序列可以十分清楚地理解系统的特性。下面是一组四种对话的典型的例子,用它描述系统特性。

0101

010101010101

01

010101

这些对话仅提供了要求的输入和输出之间的关系,但是不能完全描述系统的特性。

5.1.3 模型

另一种表达需求的方法是模型的方式,这是表达复杂需求的精确和有效方法。 至少可以提出三种可供使用的通用模型:数学型、功能型、计时型。应注意区别各种模型的应用场合,参考5.1.3.5。

5.1.3.1 数学模型

数学模型是使用数学关系描述软件特性的模型。数学模型对某些特殊应用领域是特别有用的。例如,导航、线性规划、计量经济、信号处理和气象分析等。

用数学模型能够对5.1.2中所讨论的典型例子描述如下:

(01)*。

这里,“*”号表示括号内的字符串可以重复一次或多次。

5.1.3.2 功能模型

功能模型是提供从略语以输出映象的模型。象有限状态机或Petri网,这些功能模型可以有助于标识和定义软件的各种特点,或者可以表示系统所要进行的操作。

对前面用数学模型描述的例子。可用图1所示的有限状态机形式的功能模型来描述。图中进入的箭头表示启动状态。双线的方框表示接收状态。在各线记号x/y的含义是:x代表接受的输入,而y是产生的输出。

5.1.3.3 计时模型

计时模型是一种增加了时间限制的模型。这种模型对于表达软件特性的形式和细节特别有用。尤其是实时系统或考虑人为因素的系统。

计时模型可以把下列限制加到图1的模型中去:

1)激活因素0将在进入S1状态30S之内出现;

2)响应1将在进入S2状态2S之内出现。

5.1.3.4 其他模型

除了上面提及的模型外。对一些特殊的应用还有一些特别有用的模型。例如,编译程序的说明可以使用属性文法,工资单系统可以使用表格。要注意的是,对SRS使用形式需求语言,通常含有使用特殊模型的意思。

5.1.3.5 警告

无论使用哪一类型的模型,都要在SRS中或在SRS涉及到的一个文件中对它严格定义。这个定义应该规定:

1)模型中的参数所要求的范围;

2)使用时的限定值;

3)结果的精确度;

4)负载的能力;

5)要求的执行时间;

6)缺省或失败时的响应。

必须注意,在需求的定义域内要保持一个模型定义。每当一个SRS使用一个模型时:

1)它意味着此模型提供一个十分有效和精确的方法说明需求;

2)并不意味着软件产品的实现必须基于这个模型。

一个模型用于解释文件所写的需求是有效的,但是对于实际软件的实现可能并不是最适宜的。

5.2 软件需求的注释

有关软件产品的所有需求,并不是同等重要的。某些需求可能是基本的,例如是对于生命攸关的应用。而另一些可能并不那么重要。

SRS中每一个需求必须进行注释,以便区别其重要的程度。

有这种方法注释需求,可以:

1)  帮助客户对每个需求给予更周密的考虑,通常可以在需求中澄清隐藏的假设;

2)  帮助开发者做出正确的设计决定,并对软件产品不同部分作出相应的努力。

5.2.1 稳定性

注释需求的一种方法是使用稳定性量纲。当一个需求在软件预期的生存期间内描述不改变的话,可以认为该需求是稳定的,否则可以认为是易变的。

5.2.2 必要性等级

注释的另一种方法是把需求分成必须保证级、期望级和任选级。

5)  必须保证是指软件必须和这些需求相一致,否则该软件不可能被接受;

6)  期望是指这些需求将提高软件产品的功能,但如果缺省的话也是可接受;

7)  任选是给开发者一个机会,可以提供某些超出SRS规定的目标。

5.2.3 注意事项

在注释需求之前,必须彻底理解这种注释的实质性含义。

5.3 在表达需求时遇到的共同弊病

SRS的基本点是它必须说明由软件获得的结果,而不是获得这些结果的手段。编写需求的人必须描述的基本问题是:

1)  功能——所设计的软件要做什么;

2)  性能——是指软件功能在执行过程中的速度、可使用性、响应时间、各种软件功能的恢复时间、吞吐能力、精度、频率等等;

3)  强加于实现的设计限制——在效果、实现的语言、数据库完整性、资源限制、操作环境等等方面所要求的标准;

4)  属性——可移植性、正确性、可维护性及安全性等方面的考虑因素;

5)  外部接口——与人、硬件、其他软件和其他硬件的相互关系。

编写需求的人应当避免把设计或项目需求写入SRS之中,应当对说明需求设计约束与规划设计两者有清晰的区别。

5.3.1 在SRS中嵌入了设计

在SRS中嵌入设计说明,会过多地约束软件设计,并且人为地把具有潜在危险的需求放入SRS中。

1)  SRS必须描述在干什么数据上、为谁完成什么功能、在什么地方、产生什么结果。SRS应把注意力集中在要完成的服务目标上。通常不指定如下的设计项目:

Ø       把软件划分成若干模块;

Ø       给每一个模块分配功能;

Ø       描述模块间的信息流程或者控制流程;

Ø       选择数据结构。

2)  把设计完全同SRS隔离开来始终是不现实的。安全和保密方面的周密考虑可能增加一些直接反映设计约束的需求。例如:

Ø       在一些分散的模块中保持某些功能;

Ø       允许在程序的某些区域之间进行有限的通讯;

Ø       计算临界值的检查和。

3)  通常应考虑到,若要为软件选择高层次的设计,就可能需要大量的资源(可能占整个产品开发成本的10%-20%以上)。有两种选择:

Ø       不顾本指南的警告,在SRS中描述了设计。这意味着,或者将一个潜在不适当的设计作为一个需求进行描述(因为,若要得到好的设计,所花费的时间是不够的),或者在需求阶段花费了过多的时间(因为在SRS完成之前整个设计分析都要完成);

Ø       采用本指南中5.1.3条中的建议,用模型设计描述需求,这种模型设计只用于辅助描述需求,而不使之成为实际的设计。

5.3.2 在SRS中嵌入了一些项目要求

SRS应当是描写一个软件产品,而不是描述生产软件产品的过程。

项目要求表达客户和开发者之间对于软件生产方面合同性事宜的理解(因此不应当包括在SRS中)例如:

1)  成本;

2)  交货进度;

3)  报表处理;

4)  软件开发方法;

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 条中具体需求的组织形式)

附录

索引

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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)  描述所说明的软件的应用。应当:

Ø       尽可能精确地描述所有相关的利闪、目的、以及最终目标。

Ø       如果有一个较高层次的说明存在,则应该使其和高层次说明中的类似的陈述相一致(例如,系统的需求规格说明)。

6.1.3 定义、缩写词、略语(SRS的1.3条)

本条中必须提供全部需求的术语、缩写词及略语的定义,以便对SRS进行适当的解释。这些信息可以由SRS的附录提供。也可以参考其他的文件。

6.1.4 参考资料(SRS的1.4条)

本条应包括:

1)  在SRS中各处参照的文件的全部清单,如经核准的计划任务书,上级机关批文、合同等;

2)  列出其他参考资料,如属本项目的其他已发表的文件和主要文献等。每一个文件、文献要有标题,索引号或文件号,发布或发表日期以及出版单位;

3)  详细说明可以得到该参考文件的来源。这个信息可以通过引用附录或其他文件提供。

6.2 项目概述(SRS第2章)

本章应描述影响产品和其需求的一般因素,本章不说明具体的需求,而仅使需求更易于理解。

6.2.1 产品描述(SRS的2.1条)

这一条是把一个产品用其他有关的产品或项目来描述。

1)  如果这个产品是独立的,而且全部内容自含,应在此说明;

2)  如果SRS定义的产品是一个较大的系统或项目中的一个组成部分,那么本条应包括如下内容:

Ø       要概述这个较大的系统或项目的每个组成部分的功能,并说明其接口;

Ø       指出该软件产品主要的外部接口。在这里,不要求对接口详细地描述,详细描述放在SRS其他章条中;

Ø       描述所使用的计算机硬件、外围设备。这里仅仅是一个综述性描述。

在本条的描述中,用一个方框图来表达一个较大的系统或项目的主要组成部分、相互联系和外部接口是非常有帮助的。

本条既不用来强迫进行设计方案的描述,也不是描述在解决问题时的设计约束。本条应对在以后具体需求一章中说明的设计约束提供理由。

6.2.2 产品功能(SRS的2.2条)

本条是为将要完成的软件功能提供一个摘要。例如,对于一个记帐程序来说,SRS可以用这部分来描述:客户帐目维护、客户财务报表和发票制作,而不必把功能所要求的大量的细节描写出来。

有时,如果存在较高层次的规格说明时,则功能摘要可直接从中取得,这个较高层次的规格说明为软件产品分配了特殊的功能,为了清晰起见,请注意:

1)  编制功能的一种方法是制作功能表,以便客户或者第一次读这个文件的人都可以理解;

2)  用方框图来表达不同的功能和它们的关系也是有帮助的。但要牢记,这样的图不是产品设计时所需求的,而只是一种有效的解释性的工具。

这一条不用作陈述具体需求,只是对后来SRS中具体需求一章中为什么要描述的某些需求提供理由。

6.2.3 用户特点(SRS的2.3条)

本条要描述影响具体需求的产品的最终用户的一般特点。

许多人在软件生存周期的操作和维护阶段与系统相关。而这些人中有用户、操作员、维护人员和系统工作人员。这些人的某些特点,象教育水平、经验、技术、专长等,都是施加于系统操作环境的重要约束。

如果系统的大多数用户是一些临时用户,那么就要求系统包含如何完成基本功能的提示,而不是假设用户已经从过去的会议或从阅读用户指南中了解到这些细节。

这一条的内容不能用来陈述具体需求或强加若干特殊的设计约束,本条应对在SRS的具体需求一章之中的某些具体需求或设计约束的描述提供理由。

6.2.4 一般约束(SRS的2.4条)

本条对设计系统阳限制开发者选择的其他一些项作一般性描述。而这些项将限定开发者在设计系统时的任选项。这些包括:

1)  管理方针;

2)  硬件的限制;

3)  与其他应用间的接口;

4)  并行操作;

5)  审查功能;

6)  控制功能;

7)  所需的高级语言;

8)  通信协议;

9)  应用的临界点;

10)安全和保密方面的考虑。

本条不陈述具体需求或具体设计约束:而对SRS的具体需求一章中为什么要确定某些具体需求和设计约束提供理由。

6.2.5 假设和依据(SRS的2.5条)

本条列出影响SRS中陈述的需求的每一个因素。这些因素不是软件的设计约束,但是它们的改变可能影响到SRS中的需求。例如:假定一个特定的操作系统是在被软件产品指定的硬件上使用的,然而,事实上这个操作系统是不可能使用的,于是,SRS就要进行相应的改变。

6.3 具体需求(SRS的第3章)

本章应包括软件开发者在建立设计时需要的全部细节。这是SRS中篇幅最大和最重要的部分。

1)  根据本指南第4章所规定的准则(如可验证性、无歧义性等),对每一个需求细节作具体描述;

2)  在SRS的前言、项目概述、附录部分的有关讨论中,要提供对任何一个具体需求交叉引用的背景;

3)  具体需求分类的方法如下:

Ø       功能需求;

Ø       性能需求;

Ø       设计约束;

Ø       属性;

Ø       外部接口需求。

本章中要注意的二点是:

1)  符合逻辑的和可读的方式组织;

2)  详细描述每个需求,使该需求应达到目标能够用指定的方法进行客观的验证。

6.3.1 具体需求的内容

6.3.1.1 功能需求

本条描述软件产品的输入怎样变换成输出。即软件必须完成的基本动作。对于每一类功能或者有时对于每一个功能,需要具体描述其输入、加工和输出的需求。这通常由四个部颁组成:

1)  引言

这部分描述的是功能要达到的目标、所采用的方法和技术,还应清楚说明功能意图的由来和背景。

2)  输入

这部分应包括:

Ø       详细描述该功能的所有输入数据,如:输入源、数量、度量单位、时间设定、有效输入范围(包括精度和公差);

Ø       操作员控制细节的需求。其中有名字、操作员活动的描述、控制台或操作员的位置。例如:当打印检查时,要求操作员进行格式调整;

Ø       指明引用接口说明或接口控制文件的参考资料。

3)  加工

定义输入数据、中间参数,以获得预期输出结果的全部操作。它包括如下的说明:

Ø       输入数据的有效性检查;

Ø       操作的顺序,包括事件的时间设定;

Ø       异常情况的响应,例如,溢出、通信故障、错误处理等;

Ø       受操作影响的参数;

Ø       降级运行的要求;

Ø       用于把系统输入变换成相应输出的任何方法(方程式、数学算法、逻辑操作等);

Ø       输出数据的有效性检查。

4)  输出

这部分应包括:

Ø       详细描述该功能所有输出数据,例如:输出目的地、数量、度量单位、时间关系、有效输出的范围(包括精度和公差)、非法值的处理、出错信息;

Ø       有关接口说明或接口控制文件的参考资料。

此外,对着重于输入输出行为的系统来说,SRS应指定所有有意义的输入、输出对及其序列。当一个系统要求记忆它的状态时,需要这个序列,使得它可以根据本次输入和以前的状态作出响应。也就是说,这种情况犹如有限状态机。

6.3.1.2 设计约束

设计约束受其他标准、硬件限制等方面的影响。

1)  其他标准的约束:本项将指定由现有的标准或规则派生的要求。例如:报表格式、数据命名、财务处理、审计追踪等等。

2)  硬件的限制:本项包括在各种硬件约束下运行的软件要求,例如,应该包括:硬件配置的特点(接口数,指令系统等)、内存储器和辅助存储器的容量。

6.3.1.3 属性

在软件的需求之中有若干个属性,下面指出其中的几个(注意:对这些决不应理解为是一个完整的清单)。

1)  可用性:可以指定一些因素,如检查点、恢复和再启动等,以保证整个系统有一个确定的可用性级别。

2)  安全性:这里指的是保护软件的要素,以防止各种非法的访问、使用,修改、破坏或者泄密。这个领域的具体需求必须包括:

Ø       利用可靠的密码技术;

Ø       掌握特定的记录或历史数据集;

Ø       给不同的模块分配不同的功能;

Ø       限定一个程序中某些区域的通信;

Ø       计算临界值的检查和。

3)  可维护性:这里规定若干需求以确保软件是可维护的。例如:

Ø       软件模块所需要的特殊的耦合矩阵;

Ø       对微型装置指定特殊的数据/程序分割要求。

4)  可转移/转换性:这里规定把软件从一种环境移植到另一种环境所要求的用户程序,用户接口兼容方面的约束等等。

5)  警告:指定所需属性十分重要,它使得人们能用规定的方法去进行客观的验证。

6.3.1.4 外部接口要求

1)  用户接口:提供用户使用软件产品是地的接口需求。例如,如果系统的用户通过显示终端进行操作,就必须指定如下要求:

Ø       对屏幕格式的要求;

Ø       报表或菜单的页面打印格式和内容;

Ø       输入输出的相对时间;

Ø       程序功能键的或用性。

2)  硬件接口:要指出软件产品和系统硬部件之间每一个接口的逻辑特点。还可能包括如下事宜:支撑什么样的设备,如何支撑这些设备,有何约定。

3)  软件接口:在这里应指定需使用的其他软件产品(例如,数据管理系统,操作系统,或者数学软件包),以及同其他应用系统之间的接口。对每一个所需的软件产品,要提供名字、助记符、规格说明号、版本号、来源等内容。 对于每一个接口,这部分应说明与软件产品相关的接口软件的目的,并根据信息的内容和格式定义接口,这里不必详细描述任何已有完整文件的接口,只要引用定义该接口的文件即可。

4)  通信接口:这里指定各种通信接口,例如,局部网络的协议等等。

6.3.1.5 其他需求

根据软件和用户组织的特性等,某些需求放在下面各项中描述。

1)  数据库:本项对作为产品的一部分进行开发的数据库规定一些需求,它们可能包括:

Ø       在6.3.1.1条中标识的信息类别;

Ø       用的频率;

Ø       存取能力;

Ø       数据元素和文卷描述符;

Ø       数据元素、记录和文卷的关系;

Ø       静态和动态的组织;

Ø       数据保存要求。

注:如果使用一个现有的数据库包,这个包应在“软件接口”中命名,并在那里详细说明其用法。

2)  操作:这里说明用户要求的常规的和特殊的操作。

Ø       在用户组织之中各种方式的操作。例如,用户初始化操作;

Ø       交互作用操作的同期和无人操作的周期;

Ø       数据处理支持功能;

Ø       后援和恢复操作。

 注:这里的内容有时是用户接口的一部分。

3)  场合适应性需求:这里包括:

Ø       对给定场合、任务或操作方式的任何数据或初始化顺序的需求进行定义。例如,栅值,安全界限等等。

Ø       指出场合或相关任务的特点,这里可以被修改以使软件适合特殊配制的要求。

6.3.2 具体要求的组织

本条通常是SRS所有部分中最大并且最复杂的部分。

1)  可以根据软件实现功能的基本类型,将本条分成若干段。例如:考虑一个大的交互记帐系统,在里层可以分为操作软件(它支持近乎实时的事务处理)、支撑软件(联机功能、磁盘备份、装入磁带等等)以及诊断软件(诊断硬件、通信等),外一层是应收款帐以及应付款帐等等;

2)  结构细分的目的是提高SRS的可读性,而不是进行概要设计。

对于SRS中的第3章的具体需求部分的最好的组织方案取决于所说明的软件产品的应用范围和性质。文中最后部分提供了四种可能的组织方案。

1)  大纲1中首先说明全部功能需求,然后说明四种类型的接口要求,最后是其他需求;

2)  大纲2中,把对应每个特定功能的四种接口需求和该功能需求放在一起描述,然后说明其他需求;

3)  大纲3中,与功能需求有关的全部内容放在一起首先说明,然后是其他需求的描述。对每一种外部接口的需求重复上述过程;

4)  大纲4中,接口需求和其余的需求作为每一个功能需求的附属部分来说明。

SRS的具体需求的组织形式必须选择可读性最好的方法来描述。

6.4 支持信息

支持信息是指目录表,附录和索引。以便使SRS易于使用。

1)目录表和索引很重要,而且应按照可以接受的好的文件规则来编写。

2)对一个实际的需求规格说明来说,若有必要应该编写附录。附录中可能包括:

Ø       输入输出格式样本,成本分析研究的描述或用户调查结果;

Ø       有助于理解SRS的背景信息;

Ø       软件所解决问题的描述;

Ø       用户历史、背景、经历和操作特点;

Ø       交叉访问表。按先后次序进行编排,使一些不完全的软件需求得以完善(参见4.3.2条和4.3.3条);

Ø       特殊的装配指令用于编码和媒体,以满足安全、输出、初始装入或其他要求。

3)6.4.3 当包括附录时,SRS必须明确地说明附录是不是需求要考虑的部分。

 

SRS大纲1

3 具体需求

3.1 功能需求

3.1.1 功能需求1

3.1.1.1 引言  3.1.1.2 输入  3.1.1.3 加工  3.1.1.4 输出

3.1.2 功能需求2

……

3.1.n 功能需求n

3.2 外部接口需求

3.2.1 用户接口  3.2.2 硬件接口  3.2.3 软件接口  3.2.4 通信接口

3.3 性能需求

3.4 设计约束

3.4.1 其他标准的约束  3.4.2 硬件的限制  …………

3.5 属性

3.5.1 安全性  3.5.2 可维护性  …………

3.6 其他需求

3.6.1 数据库  3.6.2 操作  3.6.3 场合适应性  …………

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SRS大纲2

3 具体需求

3.1 功能需求

3.1.1 功能需求1

3.1.1.1 规格说明

  3.1.1.1.1 引言  3.1.1.1.2 输入  3.1.1.1.3 加工  3.1.1.1.4 输出

3.1.1.2 外部接口

3.1.1.2.1 用户接口  3.1.1.2.2 硬件接口  3.1.1.2.3 软件接口

3.1.1.2.4 通信接口

3.1.2 功能需求2

…………

3.1.n 功能需求n

3.2 性能需求

3.3 设计约束

3.4 属性

3.4.1 安全性  3.4.2 可维护性 …………

3.5 其他需求

 3.5.1 数据库  3.5.2 操作  3.5.3 场合适应性  …………  

 

 

SRS大纲4

3 具体需求

3.1 功能需求1

3.1.1 引言   3.1.2 输入   3.1.3 加工  3.1.4 输出  

3.1.5 外部接口

3.1.5.1 用户接口   3.1.5.2 硬件接口  

3.1.5.3 软件接口   3.1.5.4 通信接口

3.1.6 性能需求  

3.1.7 设计约束

3.1.8 属性

3.1.8.1 安全性  3.1.8.2 可维护性  …………

3.1.9 其他需求

3.1.9.1 数据库  3.1.9.2 操作  3.1.9.3 场合适应性  …………

3.2 功能需求2

…………

3.n 功能需求n

 

 

SRS大纲3

3 具体需求

3.1 功能需求

3.1.1 功能需求1

3.1.1.1 引言  3.1.1.2 输入  3.1.1.3 加工  3.1.1.4 输出  

3.1.1.5 性能需求

3.1.1.6 设计约束

    3.1.1.6.1 其他标准的约束  3.1.1.6.2 硬件的限制  …………

3.1.1.7 属性

3.1.1.7.1 安全性  3.1.1.7.2 可维护性  …………

3.1.1.8 其他需求

3.1.1.8.1 数据库  3.1.1.8.2 操作  3.1.1.8.3 场合适应性

…………

3.1.2 功能需求2

…………

3.1.n 功能需求n

3.2 外部接口需求

3.2.1 用户接口

3.2.1.1 性能需求

3.2.1.2 设计约束  

3.2.1.2.1 其他标准的约束  3.2.1.2.2 硬件的限制  …………

3.2.1.3 属性

3.2.1.3.1 安全性  3.2.1.3.2 可维护性  …………

3.2.1.4 其他需求

3.2.1.4.1 数据库  3.2.1.4.2 操作  3.2.1.4.3 场合适应性

…………

3.2.2 硬件接口  3.2.3 软件接口  3.2.4 通信接口

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用例说明模板1(经典模板)

编者说明:

    随着UML的日益普及,用例(Use case)分析技术也在需求实践中广泛被采用。但是也有许多团队在使用该技术时,只画出了用例图,而缺少了用例说明,其实这是一个严重的误区。而本模板就将指导你编写该说明。

1.用例名称

1.1  简要说明

[简要说明用例的作用和目的。该小节的篇幅不要太长。]

2.上下文图

    [在此小节中,有一个只包括本用例和所有与该用例相关的Actor和其它用例组成的,一个用例图的局部。]

3. 事件流

3.1 基本流

[当Actor采取行动时,用例也就随即开始。用例总是由Actor启动的,用例应说明Actor的行为及系统的响应,可按照Actor与系统进行对话的形式来逐步引入用例。]

[要注意的是,用例描述应该说明系统内发生的事情,而不是事件发生的方式与原因。如果进行了信息交换,则需指出来回传递的具体信息。例如,只表述主角输入了客户信息就不够明确。最好明确地说主角输入了客户姓名和地址。当然你也可以通过项目词汇表来定义这些信息,使得用例中的内容被简化,从而不致于让用例描述陷入过多的细节内容。]

[如果存在一些相对比较简单的备选流,只需少数几句话就可以说明清楚,那么也可以直接在这一部分中描述。但是如果比较复杂,还是应该单独放在备选流小节中描述。]

[一幅图胜过千言万语,因此建议在这一小节中,除了叙述性文字之外,你还可以引用UML中的活动图、顺序图、协作图、状态图等手段,对其进行补充说明。]

3.2  备选流

3.2.1  第一备选流

[正如前面所述,对于较复杂的备选流应单独地说明。]

3.2.1.1  备选支流

[如果能使表达更明确,备选流又可再分为多个支流。]

3.2.2  第二备选流

[在一个用例中很可能会有多个备选流。为了使表达更清晰,应将各个备选流分开说明。使用备选流可以提高用例的可读性,并防止将用例分解为过多的层次。应切记,用例只是文本说明,其主要目的是以清晰、简洁、易于理解的方式记录系统的行为。]

4.  非功能需求

[在这个小节中,主要对该用例所涉及的非功能性需求进行描述。由于其通常很难以在事件流中进行表述,因此单列为一小节进行阐述。这些需求通过包括法律法规、应用程序标准、质量属性(可用性、可靠性、性能、支持性等)、兼容性、可移植性,以及设计约束等方面的需求。在这些需求的描述方面,一定要注意使其可度量、可验证,否则就容易流于形式,形同摆设。]

5. 前置条件

[用例的前置条件是执行用例之前必须存在的系统状态。]

6. 后置条件

[用例的后置条件是用例一执行完毕系统可能处于的一组状态。]

7. 扩展点

[此用例的扩展点,通常是用例图中的extent关系。]

 

 

用例说明模板2(单列表格式)

编者说明:

    如果你觉得文本描述不够清晰,也可以采用如本文档模板所示的表格式的描述方式。

 

用例#

 

[用例名应是一个动词短语,应让读者一目了然地从名字中就可以知道该用例的目标。]

 

使用语境

 

[用例目标,是一个较长的描述,甚至包括触发条件。]

 

范围

 

[用例的设计范围,在设计时将系统作为一个黑盒来考虑。]

 

级别

 

[概要、用户目标、子功能三者之一。]

 

主执行者

 

[也就是该用例的主Actor,在此应列出其名称,并简要描述。]

 

项目相关人员利益

 

项目相关人员

 

利益

 

[项目相关人员名称]

 

[项目相关人员取得的利益]

 

……

 

……

 

前置条件

 

[也就是激发该用例,所应该满足的条件。]

 

后置条件

 

[也就是该用例完成之后,将执行什么动作。]

 

成功保证

 

[描述当目标完成后,环境的变化情况。]

 

触发事件

 

[什么引发用例,例如时间事件。]

 

描述

 

步骤

 

活动

 

1

 

[在这里写出触发事件到目标完成以及清除的步骤。]

 

2

 

[……]

 

3

 

 

 

扩展

 

步骤

 

分支动作

 

1a

 

[引起分支的条件]

 

 

 

[活动或子用例名称]

 

技术和数据变化

 

 

 

 

 

1

 

[变化列表]

     

 

 

用例说明模板3(双列表格式)

编者说明:

本模板是对上一模板的补充,如果你想更好地捕捉系统的响应,那么就可以采用本表格所示的格式。

有时,为了更好地捕获系统的响应,对于场景描述(主成功场景、扩展场景)在上表的基础上变成如下表所示的双列:

 

步骤

 

用户

 

系统

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用例说明模板4(文本式)

编者说明:

    相信用过用例分析技术的,对用例应该多少细有很大的疑问,而Alistair Cockburn率先将其进行分级:概要、用户目标、子功能,如果你对他的思想有认同,则该模板就适合于你。

1.用例名:

[用例名应是一个动词短语,应让读者一目了然地从名字中就可以知道该用例的目标。]

2.使用语境:

[用例目标,是一个较长的描述,甚至包括触发条件。]

3.范围:

[用例的设计范围,在设计时将系统作为一个黑盒来考虑。]

4.级别:

[用来表示该用例是在描述哪个级别上的功能,通常包括概要、用户目标、子功能三种。这三种级别的划分是Alistair Cockburn在《编写有效用例》一书是提出的。]

5.主执行者:

[也就是该用例的主Actor,在此应列出其名称,并给予简要描述。]

1.       项目相关人员利益

[说明该用例对项目相关人员能够带来什么好处。]

2.       前置条件:

[也就是激发该用例,所应该满足的条件。]

3.       后置条件:

[也就是该用例完成之后,将执行什么动作。]

4.       成功保证:

[描述当目标完成后,环境的变化情况。]

5.       触发事件:

[什么引发用例,例如时间事件。]

6.       主成功场景

[在这里写出触发事件到目标完成以及清除的步骤。]

[步骤编号#:动作描述]

[步骤编号#:动作描述]

……

7.       扩展:

[在这里写出扩展情况,每次写一个扩展,每个扩展都应指向主场景的特定步骤。]

[被改变步骤  条件:动作或子用例]

[被改变步骤  条件:动作或子用例]

……

8.       技术和数据变化列表

[在这里写出场景中因技术或数据变化而引起的可能分支。]

[步骤或变化编号#:变化列表]

[步骤或变化编号#:变化列表]

……

9.       相关信息

[项目所需要的所有附加信息。]

 

 

数据要求说明书(ISO标准)

编者说明:

    如果在你的项目中有大量要求数据存储、数据采集等方面的需求,那么你就应该专门将这些需求进行整理,以数据要求说明书的形式表现出来。

1.引言

1.1编写目的

        [说明编写这份数据要求说明书的目的,指出预期的读者。]

1.2背景

          a.待开发软件系统的名称;

b.列出本项目的任务提出者、开发者、用户以及将运行该项软件的计算站或计算机网络系统。

1.3定义

        [列出本文件中用到的专门术语的定义和外文首字母组词的原词组。]

1.4参考资料

        [列出有关的参考资料。]

2.数据的逻辑描述

    [对数据进行逻辑描述时可把数据分为动态数据和静态数据。]

2.1静态数据

        [列出所有作为控制或参考用的静态数据元素。]

2.2动态输入数据

        [列出动态输入数据元素。]

2.3动态输出数据

        [列出动态输出数据元素。]

2.4内部生成数据

        [列出向用户或开发单位中的维护调试人员提供的内部生成数据。]

2.5数据约定

[说明对数据要求的制约。逐条列出对进一步扩充或使用方面的考虑而提出的对数据要求的限制。对于在设计和开发中确定是临界性的限制更要明确指出。]

3.数据的采集

3.1要求和范围

[按数据元的逻辑分组来说明数据采集的要求和范围,指明数据的采集方法,说明数据采集工作的承担者是用户还是开发者。]

3.2输入的承担者

[说明预定的对数据输入工作的承担者。如果输入数据同某一接口软件有关,还应说明该接口软件的来源。]

3.3预期处理

[对数据的采集和预处理过程提出专门的规定,包括适合应用的数据格式、预定的数据通信媒体和对输入的时间要求等。对于需经模拟转换或数字转换处理的数据量,要给出转换方法和转换因子等有关信息,以便软件系统使用这些数据。]

3.4影响

        [说明这些数据要求对于设备、软件、用户、开发单位所可能产生的影响。]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
软件工程(原书第9版)》是系统介绍软件工程理论的经典教材,自1982年初版以来,随着软件工程学科的不断发展,不断更新版本,影响了一代又一代软件工程人才,对学科本身也产生了重大影响。本版保留了上一版中的软件工程的基本材料,但对各章都进行了修改和更新,并增加了很多有关其他主题的新材料。 《软件工程(原书第9版)》包含四个部分:第一部分是对软件工程的一般性介绍,包括软件工程过程和敏捷开发,以及面向对象的设计和设计模式的使用;第二部分介绍可依赖性和信息安全性问题;第三部分介绍高级软件工程;第四部分介绍软件管理,重点介绍技术管理问题。 《软件工程(原书第9版)》适合作为软件和系统工程专业本科生或研究生教材,同时也是软件工程师难得的优秀参考书籍。 目录编辑 《软件工程(原书第9版)》 出版者的话 译者序 前言 第一部分软件工程导论 第1章概述 1.1专业化软件开发 1.1.1软件工程 1.1.2软件工程的多样性 1.1.3软件工程和web 1.2软件工程人员的职业道德 1.3案例研究 1.3.1胰岛素泵控制系统 1.3.2用于心理健康治疗的患者信息系统 1.3.3野外气象站 要点 进一步阅读材料 练习 参考书目 第2章软件过程 .2.1软件过程模型 2.1.1瀑布模型 2.1.2增量式开发 2.1.3面向复用的软件工程 2.2过程活动 2.2.1软件描述 2.2.2软件设计和实现 2.2.3软件有效性验证 2.2.4软件进化 2.3应对变更 2.3.1原型构造 2.3.2增量式交付 2.3.3boehm的螺旋模型 2.4rational统一过程 要点 进一步阅读材料 练习 参考书目 第3章敏捷软件开发 3.1敏捷方法 3.2计划驱动开发和敏捷开发 3.3极限编程 3.3.1极限编程中的测试 3.3.2结对编程 3.4敏捷项目管理 3.5可扩展的敏捷方法 要点 进一步阅读材料 练习 参考书目 第4章需求工程 4.1功能需求和非功能需求 4.1.1功能需求 4.1.2非功能需求 4.2软件需求文档 4.3需求描述 4.3.1自然语言描述 4.3.2结构化描述 4.4需求工程过程 4.5需求导出和分析 4.5.1需求发现 4.5.2采访 4.5.3脚本 4.5.4用例 4.5.5深入实际 4.6需求有效性验证 4.7需求管理 4.7.1需求管理规划 4.7.2需求变更管理 要点 进一步阅读材料 练习 参考书目 第5章系统建模 5.1上下文模型 5.2交互模型 5.2.1用例建模 5.2.2时序图 5.3结构模型 5.3.1类图 5.3.2泛化 5.3.3聚合 5.4行为模型 5.4.1数据驱动的建模 5.4.2事件驱动模型 5.5模型驱动工程 5.5.1模型驱动体系结构 5.5.2可执行uml 要点 进一步阅读材料 练习 参考书目 第6章体系结构设计 6.1体系结构设计决策 6.2体系结构视图 6.3体系结构模式 6.3.1分层体系结构 6.3.2容器体系结构 6.3.3客户机-服务器体系结构 6.3.4管道和过滤器体系结构 6.4应用体系结构 6.4.1事务处理系统 6.4.2信息系统 6.4.3语言处理系统 要点 进一步阅读材料 练习 参考书目 第7章设计与实现 7.1利用uml进行面向对象设计 7.1.1系统上下文与交互 7.1.2体系结构的设计 7.1.3对象类识别 7.1.4设计模型 7.1.5接口描述 7.2设计模式 7.3实现问题 7.3.1复用 7.3.2配置管理 7.3.3宿主机-目标机开发 7.4开源开发 要点 进一步阅读材料 练习 参考书目 第8章软件测试 8.1开发测试 8.1.1单元测试 8.1.2选择单元测试案例 8.1.3组件测试 8.1.4系统测试 8.2测试驱动开发 8.3发布测试 8.3.1基于需求的测试 8.3.2情景测试 8.3.3性能测试 8.4用户测试 要点 进一步阅读材料 练习 参考书目 第9章软件进化 9.1进化过程 9.2程序进化的动态特性 9.3软件维护 9.3.1维护预测 9.3.2软件再工程 9.3.3通过重构进行预防性维护 9.4遗留系统管理 要点 进一步阅读材料 练习 参考书目 第二部分可依赖性和信息安全性 第10章社会技术系统 10.1复杂系统 10.1.1系统总体特性 10.1.2系统非确定性 10.1.3成功标准 10.2系统工程 10.3系统采购 10.4系统开发 10.5系统运行 10.5.1人为错误 10.5.2系统进化 要点 进一步阅读材料 练习 参考书目 第11章可依赖性与信息安全性 11.1可依赖性特征 11.2可用性和可靠性 11.3安全性 11.4信息安全性 要点 进一步阅读材料 练习 参考书目 第12章可依赖性与信息安全性描述 12.1风险驱动的需求描述 12.2安全性描述 12.2.1危险识别 12.2.2危险评估 12.2.3危险分析 12.2.4风险降低 12.3可靠性描述 12.3.1可靠性度量 12.3.2非功能性的可靠性需求 12.3.3功能可靠性描述 12.4信息安全性描述 12.5形式化描述 要点 进一步阅读材料 练习 参考书目 第13章可依赖性工程 13.1冗余性和多样性 13.2可依赖的过程 13.3可依赖的系统体系结构 13.3.1保护性系统 13.3.2自监控系统体系结构 13.3.3n-版本编程 13.3.4软件多样性 13.4可依赖的编程 要点 进一步阅读材料 练习 参考书目 第14章信息安全工程 14.1信息安全风险管理 14.1.1生存期风险评估 14.1.2运行风险评估 14.2面向信息安全的设计 14.2.1体系结构设计 14.2.2设计准则 14.2.3部署设计 14.3系统生存能力 要点 进一步阅读材料 练习 参考书目 第15章可依赖性与信息安全保证 15.1静态分析 15.1.1检验和形式化方法 15.1.2模型检测 15.1.3自动静态分析 15.2可靠性测试 15.3信息安全性测试 15.4过程保证 15.5安全性和可依赖性案例 15.5.1结构化论证 15.5.2结构化的安全性论证 要点 进一步阅读材料 练习 参考书目 第三部分高级软件工程 第16章软件复用 16.1复用概览 16.2应用框架 16.3软件产品线 16.4cots产品的复用 16.4.1cots解决方案系统 16.4.2cots集成系统 要点 进一步阅读材料 练习 参考书目 第17章基于组件的软件工程 17.1组件和组件模型 17.2cbse过程 17.2.1面向复用的cbse 17.2.2基于复用的cbse 17.3组件合成 要点 进一步阅读材料 练习 参考书目 第18章分布式软件工程 18.1分布式系统的问题 18.1.1交互模型 18.1.2中间件 18.2客户机-服务器计算 18.3分布式系统的体系结构模式 18.3.1主从体系结构 18.3.2两层客户机-服务器结构 18.3.3多层客户机-服务器结构 18.3.4分布式组件体系结构 18.3.5对等体系结构 18.4软件作为服务 要点 进一步阅读材料 练习 参考书目 第19章面向服务的体系结构 19.1服务作为可复用的组件 19.2服务工程 19.2.1可选服务的识别 19.2.2服务接口设计 19.2.3服务实现和部署 19.2.4遗留系统服务 19.3使用服务的软件开发 19.3.1工作流设计和实现 19.3.2服务测试 要点 进一步阅读材料 练习 参考书目 第20章嵌入式软件 20.1嵌入式系统设计 20.1.1实时系统建模 20.1.2实时编程 20.2体系结构模式 20.2.1观察和反应 20.2.2环境控制 20.2.3处理管道 20.3时序分析 20.4实时操作系统 要点 进一步阅读材料 练习 参考书目 第21章面向方面的软件工程 21.1关注点分离 21.2方面、连接点和切入点 21.3采用方面的软件工程 21.3.1面向关注点的需求工程 21.3.2面向方面的设计和编程 21.3.3检验和有效性验证 要点 进一步阅读材料 练习 参考书目 第四部分软 件 管 理 第22章项目管理 22.1风险管理 22.1.1风险识别 22.1.2风险分析 22.1.3风险规划 22.1.4风险监控 22.2人员管理 22.3团队协作 22.3.1成员挑选 22.3.2小组的结构 22.3.3小组的沟通 要点 进一步阅读材料 练习 参考书目 第23章项目规划 23.1软件报价 23.2计划驱动的开发 23.2.1项目计划 23.2.2规划过程 23.3项目进度安排 23.4敏捷规划 23.5估算技术 23.5.1算法成本建模 23.5.2cocomo Ⅱ模型 23.5.3项目的工期和人员配备 要点 进一步阅读材料 练习 参考书目 第24章质量管理 24.1软件质量 24.2软件标准 24.3复查与审查 24.3.1复查过程 24.3.2程序审查 24.4软件度量和量度 24.4.1产品量度 24.4.2软件组件分析 24.4.3度量歧义 要点 进一步阅读材料 练习 参考书目 第25章配置管理 25.1变更管理 25.2版本管理 25.3系统构建 25.4发布版本管理 要点 进一步阅读材料 练习 参考书目 第26章过程改善 26.1过程改善过程 26.2过程度量 26.3过程分析 26.4过程变更 26.5cmmi过程改善框架 26.5.1分阶段的cmmi模型 26software engineering,9e 出版者的话 译者序 前言 第一部分软件工程导论 第1章概述 1.1专业化软件开发 1.1.1软件工程 1.1.2软件工程的多样性 1.1.3软件工程和web 1.2软件工程人员的职业道德 1.3案例研究 1.3.1胰岛素泵控制系统 1.3.2用于心理健康治疗的患者信息系统 1.3.3野外气象站 要点 进一步阅读材料 练习 参考书目 第2章软件过程 2.1软件过程模型 2.1.1瀑布模型 2.1.2增量式开发 2.1.3面向复用的软件工程 2.2过程活动 2.2.1软件描述 2.2.2软件设计和实现 2.2.3软件有效性验证 2.2.4软件进化 2.3应对变更 2.3.1原型构造 2.3.2增量式交付 2.3.3boehm的螺旋模型 2.4rational统一过程 要点 进一步阅读材料 练习 参考书目 第3章敏捷软件开发 3.1敏捷方法 3.2计划驱动开发和敏捷开发 3.3极限编程 3.3.1极限编程中的测试 3.3.2结对编程 3.4敏捷项目管理 3.5可扩展的敏捷方法 要点 进一步阅读材料 练习 参考书目 第4章需求工程 4.1功能需求和非功能需求 4.1.1功能需求 4.1.2非功能需求 4.2软件需求文档 4.3需求描述 4.3.1自然语言描述 4.3.2结构化描述 4.4需求工程过程 4.5需求导出和分析 4.5.1需求发现 4.5.2采访 4.5.3脚本 4.5.4用例 4.5.5深入实际 4.6需求有效性验证 4.7需求管理 4.7.1需求管理规划 4.7.2需求变更管理 要点 进一步阅读材料 练习 参考书目 第5章系统建模 5.1上下文模型 5.2交互模型 5.2.1用例建模 5.2.2时序图 5.3结构模型 5.3.1类图 5.3.2泛化 5.3.3聚合 5.4行为模型 5.4.1数据驱动的建模 5.4.2事件驱动模型 5.5模型驱动工程 5.5.1模型驱动体系结构 5.5.2可执行uml 要点 进一步阅读材料 练习 参考书目 第6章体系结构设计 6.1体系结构设计决策 6.2体系结构视图 6.3体系结构模式 6.3.1分层体系结构 6.3.2容器体系结构 6.3.3客户机-服务器体系结构 6.3.4管道和过滤器体系结构 6.4应用体系结构 6.4.1事务处理系统 6.4.2信息系统 6.4.3语言处理系统 要点 进一步阅读材料 练习 参考书目 第7章设计与实现 7.1利用uml进行面向对象设计 7.1.1系统上下文与交互 7.1.2体系结构的设计 7.1.3对象类识别 7.1.4设计模型 7.1.5接口描述 7.2设计模式 7.3实现问题 7.3.1复用 7.3.2配置管理 7.3.3宿主机-目标机开发 7.4开源开发 要点 进一步阅读材料 练习 参考书目 第8章软件测试 8.1开发测试 8.1.1单元测试 8.1.2选择单元测试案例 8.1.3组件测试 8.1.4系统测试 8.2测试驱动开发 8.3发布测试 8.3.1基于需求的测试 8.3.2情景测试 8.3.3性能测试 8.4用户测试 要点 进一步阅读材料 练习 参考书目 第9章软件进化 9.1进化过程 9.2程序进化的动态特性 9.3软件维护 9.3.1维护预测 9.3.2软件再工程 9.3.3通过重构进行预防性维护 9.4遗留系统管理 要点 进一步阅读材料 练习 参考书目 第二部分可依赖性和信息安全性 第10章社会技术系统 10.1复杂系统 10.1.1系统总体特性 10.1.2系统非确定性 10.1.3成功标准 10.2系统工程 10.3系统采购 10.4系统开发 10.5系统运行 10.5.1人为错误 10.5.2系统进化 要点 进一步阅读材料 练习 参考书目 第11章可依赖性与信息安全性 11.1可依赖性特征 11.2可用性和可靠性 11.3安全性 11.4信息安全性 要点 进一步阅读材料 练习 参考书目 第12章可依赖性与信息安全性描述 12.1风险驱动的需求描述 12.2安全性描述 12.2.1危险识别 12.2.2危险评估 12.2.3危险分析 12.2.4风险降低 12.3可靠性描述 12.3.1可靠性度量 12.3.2非功能性的可靠性需求 12.3.3功能可靠性描述 12.4信息安全性描述 12.5形式化描述 要点 进一步阅读材料 练习 参考书目 第13章可依赖性工程 13.1冗余性和多样性 13.2可依赖的过程 13.3可依赖的系统体系结构 13.3.1保护性系统 13.3.2自监控系统体系结构 13.3.3n-版本编程 13.3.4软件多样性 13.4可依赖的编程 要点 进一步阅读材料 练习 参考书目 第14章信息安全工程 14.1信息安全风险管理 14.1.1生存期风险评估 14.1.2运行风险评估 14.2面向信息安全的设计 14.2.1体系结构设计 14.2.2设计准则 14.2.3部署设计 14.3系统生存能力 要点 进一步阅读材料 练习 参考书目 第15章可依赖性与信息安全保证 15.1静态分析 15.1.1检验和形式化方法 15.1.2模型检测 15.1.3自动静态分析 15.2可靠性测试 15.3信息安全性测试 15.4过程保证 15.5安全性和可依赖性案例 15.5.1结构化论证 15.5.2结构化的安全性论证 要点 进一步阅读材料 练习 参考书目 第三部分高级软件工程 第16章软件复用 16.1复用概览 16.2应用框架 16.3软件产品线 16.4cots产品的复用 16.4.1cots解决方案系统 16.4.2cots集成系统 要点 进一步阅读材料 练习 参考书目 第17章基于组件的软件工程 17.1组件和组件模型 17.2cbse过程 17.2.1面向复用的cbse 17.2.2基于复用的cbse 17.3组件合成 要点 进一步阅读材料 练习 参考书目 第18章分布式软件工程 18.1分布式系统的问题 18.1.1交互模型 18.1.2中间件 18.2客户机-服务器计算 18.3分布式系统的体系结构模式 18.3.1主从体系结构 18.3.2两层客户机-服务器结构 18.3.3多层客户机-服务器结构 18.3.4分布式组件体系结构 18.3.5对等体系结构 18.4软件作为服务 要点 进一步阅读材料 练习 参考书目 第19章面向服务的体系结构 19.1服务作为可复用的组件 19.2服务工程 19.2.1可选服务的识别 19.2.2服务接口设计 19.2.3服务实现和部署 19.2.4遗留系统服务 19.3使用服务的软件开发 19.3.1工作流设计和实现 19.3.2服务测试 要点 进一步阅读材料 练习 参考书目 第20章嵌入式软件 20.1嵌入式系统设计 20.1.1实时系统建模 20.1.2实时编程 20.2体系结构模式 20.2.1观察和反应 20.2.2环境控制 20.2.3处理管道 20.3时序分析 20.4实时操作系统 要点 进一步阅读材料 练习 参考书目 第21章面向方面的软件工程 21.1关注点分离 21.2方面、连接点和切入点 21.3采用方面的软件工程 21.3.1面向关注点的需求工程 21.3.2面向方面的设计和编程 21.3.3检验和有效性验证 要点 进一步阅读材料 练习 参考书目 第四部分软 件 管 理 第22章项目管理 22.1风险管理 22.1.1风险识别 22.1.2风险分析 22.1.3风险规划 22.1.4风险监控 22.2人员管理 22.3团队协作 22.3.1成员挑选 22.3.2小组的结构 22.3.3小组的沟通 要点 进一步阅读材料 练习 参考书目 第23章项目规划 23.1软件报价 23.2计划驱动的开发 23.2.1项目计划 23.2.2规划过程 23.3项目进度安排 23.4敏捷规划 23.5估算技术 23.5.1算法成本建模 23.5.2cocomo Ⅱ模型 23.5.3项目的工期和人员配备 要点 进一步阅读材料 练习 参考书目 第24章质量管理 24.1软件质量 24.2软件标准 24.3复查与审查 24.3.1复查过程 24.3.2程序审查 24.4软件度量和量度 24.4.1产品量度 24.4.2软件组件分析 24.4.3度量歧义 要点 进一步阅读材料 练习 参考书目 第25章配置管理 25.1变更管理 25.2版本管理 25.3系统构建 25.4发布版本管理 要点 进一步阅读材料 练习 参考书目 第26章过程改善 26.1过程改善过程 26.2过程度量 26.3过程分析 26.4过程变更 26.5cmmi过程改善框架 26.5.1分阶段的cmmi模型 26.5.2连续cmmi模型 要点 进一步阅读材料 练习 参考书目 术语表5.2连续cmmi模型 要点 进一步阅读材料 练习 参考书目 术语表
一、软件工程概述 1.软件特点 软件:计算机程序、方法、规则、相关的文档资料,以及计算机程序运行时所需要的数据。 软件是计算机系统中的逻辑成分,具有无形性。其主要内容包括:程序、配置文件、系统 文档、用户文档等。 2.软件分类 (1)按功能划分:系统软件、支撑软件、应用软件。 (2)按工作方式划分:实时处理软件、分时处理软件、交互式软件、批处理软件。 (3)按规模划分:微型软件、小型软件、中型软件、大型软件。 (4)按服务对象划分:通用软件、定制软件。 3.软件发展阶段 (1)程序设计时代(20世纪50年代)。 (2)程序系统时代(20世纪60年代)。 (3)软件工程时代(20世纪70年代起)。 4.软件危机 (1)危机现象:软件开发成本与进度估计不准确,软件产品与用户要求不一致,软件产品质量可靠性差,软件文档不完整不一致,软件产品可维护性差,软件生产率低。 (2)危机原因:软件的不可见性,系统规模庞大,生产工程化程度低,对用户需求关心不 够,对维护不够重视,开发工具自动化程度低。 5.软件工程 软件工程:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。 软件工程是一门关于软件开发与维护的工程学科,它涉及软件生产的各个方面,能够为经济、高效地开发高质量的软件产品提供最有效的支持。 (1)工程方法:结构化方法、JSD方法、面向对象方法。 (2)软件工具:具有自动化特征的软件开发集成支撑环境。 (3)工程过程:在软件工具支持下的一系列工程活动,基本活动是软件定义、软件开发、 软件验证、软件维护。 (4)工程管理:项目规划,项目资源调配,软件产品控制。 (5)工程原则:分阶段生命周期计划,阶段评审制度,严格的产品控制,采用先进的技术, 成果能清楚地审查,开发队伍精练,不断改进工程实践。 (6)工程目标:开发成本较低,软件功能能满足用户需求,软件性能较好,软件可靠性高, 软件易于使用、维护与移植,能按时完成开发任务并及时交付使用。 (7)工程文化:包括工程价值、工程思想和工程行为三个方面的内容。 二、软件工程过程模型 1.软件生命周期 如同任何事物都有一个发生、发展、成熟直至衰亡的全过程一样,软件系统或软件产品也有一个定义、开发、运行维护直至被淘汰这样的全过程,我们把软件将要经历的这个全过程称为软件的生命周期。它包含:软件定义、软件开发、软件运行维护三个时期,并可以细分为可行性研究、项目计划、需求分析、概要设计、详细设计、编码实现与单元测试、系统集成测试、系统确认验证、系统运行与维护等几个阶段。 软件定义期 软件定义是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发做准备。这个时期往往需要分阶段地进行以下几项工作。 1.软件任务立项 软件项目往往开始于任务立项,并需要以“软件任务立项报告”的形式针对项目的名称、性质、目标、意义和规模等作出回答,以此获得对准备着手开发的软件系统的最高层描述。 2.项目可行性分析 在软件任务立项报告被批准以后,接着需要进行项目可行性分析。可行性分析是针对准备进行的软件项目进行的可行性风险评估。因此,需要对准备开发的软件系统提出高层模型,并根据高层模型的特征,从技术可行性、经济可行性和操作可行性这三个方面,以“可行性研究报告”的形式,对项目作出是否值得往下进行的回答,由此决定项 目是否继续进行下去。 3.制定项目计划 在确定项目可以进行以后,接着需要针对项目的开展,从人员、组织、进度、资金、设备等多个方面进行合理的规划,并以“项目开发计划书”的形式提交书面报告。 4.软件需求分析 软件需求分析软件规格描述的具体化与细节化,是软件定义时期需要达到的目标。 需求分析要求以用户需求为基本依据,从功能、性能、数据、操作等多个方面,对软件系统给出完整、准确、具体的描述,用于确定软件规格。其结果将以“软件需求规格说明书”的形式提交。 在软件项目进行过程中,需求分析是从软件定义到软件开发的最关键步骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行验收的基本依据。 软件开发期 在对软件规格完成定义以后,接着可以按照“软件需求规格说明书”的要求对软件实施开发,并由此制作出软件产品。这个时期需要分阶段地完成以下几项工作。 1.软件概要设计 概要设计是针对软件系统的结构设计,用于从总体上对软件的构造、接口、全局数据结构和数据环境等给出设计说明,并以“概要设计说明书”的形式提交书面报告,其结果将成为详细设计与系统集成的基本依据。 模块是概要设计时构造软件的基本元素,因此,概要设计中软件也就主要体现在模块的构成与模块接口这两个方面上。结构化设计中的函数、过程,面向对象设计中的类、对象,它们都是模块。概要设计时并不需要说明模块的内部细节,但是需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。 在进行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块的内聚、耦合这两个定性参数对模块独立性进行度量。 2.软件详细设计 设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件结构中每个模块的内部细节,为编写程序提供最直接的依据。 详细设计需要从实现每个模块功能的程序算法和模块内部的局部数据结构等细节内容上给出设计说明,并以“详细设计说明书”的形式提交书面报告。 3.编码和单元测试 编码是对软件的实现,一般由程序员完成,并以获得源程序基本模块为目标。 编码必须按照“详细设计说明书”的要求逐个模块地实现。在基于软件工程的软件开发过程中,编码往往只是一项语言转译工作,即把详细设计中的算法描述语言转译成某种适当的高级程序设计语言或汇编语言。 为了方便程序调试,针对基本模块的单元测试也往往和编码结合在一起进行。单元测试也以“详细设计说明书”为依据,用于检验每个基本模块在功能、算法与数据结构上是否符合设计要求。 4.系统集成测试 所谓系统集成也就是根据概要设计中的软件结构,把经过测试的模块,按照某种选定的集成策略,例如渐增集成策略,将系统组装起来。 在组装过程中,需要对整个系统进行集成测试,以确保系统在技术上符合设计要求,在应用上满足需求规格要求。 5.系统确认验证 在完成对系统的集成之后,接着还要对系统进行确认验证。 系统确认验证需要以用户为主体,以需求规格说明书中对软件的定义为依据,由此对软件的各项规格进行逐项地确认,以确保已经完成的软件系统与需求规格的一致性。为了方便用户在系统确认期间能够积极参入,也为了系统在以后的运行过程中能够被用户正确使用,这个时期往往还需要以一定的方式对用户进行必要的培训。 在完成对软件的验收之后,软件系统可以交付用户使用,并需要以“项目开发总结报告”的书面形式对项目进行总结。 软件运行与维护期 软件系统的运行是一个比较长久的过程,跟软件开发机构有关的主要任务是对系统进行经常性的有效维护。 软件的维护过程,也就是修正软件错误,完善软件功能,由此使软件不断进化升级的过程,以使系统更加持久地满足用户的需要。因此,对软件的维护也可以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个方面的任务,即改正性维护、适应性维护和完善性维护。 2.瀑布模型 瀑布模型诞生于20世纪70年代,是最经典的并获得最广泛应用的软件过程模型。瀑布模型中的“瀑布”是对这个模型的形象表达,即山顶倾泻下来的水,自顶向下、逐层细化。 (1)特点:线性化模型、阶段具有里程碑特征、基于文档的驱动、阶段评审机制。 (2)作用:为软件项目按规程管理提供了便利,为其他过程模型的推出提供了一个良好的 拓展平台。 (3)局限性:主要适合于需求明确且无大的需求变更的软件开发,但不适合分析初期需求 模糊的项目。 3.原型模型 (1)快速原型方法:是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求上的模糊认识,或用来试探某种设计是否能够获得预期结果。 (2)原型进化模型:针对有待开发的软件系统,先开发一个原型给用户使用,然后根据用 户的使用意见,对原型不断修改,使它逐步接近,并最终到达开发目标。 4.增量模型 增量模型结合了瀑布模型与原型进化模型的优点。在整体上按照瀑布模型的流程实施开发,以方便对项目的管理。但在软件的实际创建中,则将软件系统按功能分解为许多增量构件逐个地创建与交付,直到全部构件创建完毕,并都被集成到系统之中交付使用。 比较瀑布模型、原型进化模型,增量模型具有非常显著的优越性。但增量模型对软件设计有更高的技术要求。 5.螺旋模型 螺旋模型是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和风险分析方法的有机结合。其基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项目风险。 6.喷泉模型 喷泉模型是专门针对面向对象软件开发方法而提出的。“喷泉”一词用于形象地表达面向对象软件开发过程中的迭代和无缝过渡。 7.组件复用模型 组件复用方法是最近几年发展起来的先进的软件复用技术,在基于组件复用的软件开发中,软件由组件装配而成,这就如同用标准零件装配汽车一样。因此,组件复用模型能够有效地提高软件生产率。 三、项目分析与规划 1.计算机系统分析 (1)计算机系统 计算机系统是一个非常复杂并具有智能特性的开发系统,包括:硬件系统、软件系统、网络通信系统、人工操作系统等诸多子系统。 (2)系统分析 系统分析是对软件项目的高层分析,需要获取的是有关系统的框架描述,并需要使系统从它所处的环境中分离出来,为划分系统边界与确定系统构架提供依据。 (3)系统分析模型 分析模型是指采用作图方式对系统进行直观的描述。系统前期分析过程中经常使用的图形模型有系统框架图和系统流程图。其中,系统框架图用于说明系统的基本构造框架,而系统流程图则用于表现系统的基本加工流程。 2.项目可行性分析 (1)意义 •以少量的费用对项目能否实施尽早作出决断。 •根据项目条件限制,对系统的体系构造、工作模式等作出高层抉择。 •其结果可作为一个高层框架被用于需求分析之中。 (2)分析内容 •技术可行性:从技术与技术资源这两个方面作出可行性评估。 •经济可行性:从项目投资和经济效益这两个方面作出可行性评估。 •应用可行性:从法律法规、用户操作规程等方面作出可行性评估。 (3)分析过程 •建立系统模型。 •进行可行性评估。 •撰写可行性研究报告。 3.项目成本效益分析 (1)项目成本估算方法:基于软件规模的成本估算;基于任务分解的成本估算。 (2)项目效益分析指标:纯收入;投资回收期;投资回收率。 4.项目规划 (1)项目开发计划 项目开发计划涉及的内容包括: •开发团队的组织结构,人员组成与分工。 •项目成本预算。 •项目对硬件、软件的资源需求。 •项目任务分解和每项的任务里程碑标志。 •基于里程碑的进度计划和人员配备计划。 •项目风险计划。 •项目监督计划。 (2)项目进度表 项目进度是基于里程碑制定的,可以使用进度图表来描述项目进度。甘特图表是一种常用的项目进度图表,可以直观地描述项目任务的活动分解,以及活动之间的依赖关系、资源配置情况、各项活动的进展情况等。 四、软件需求分析 1.需求分析任务 (1)用户需求 用户需求是用户关于软件的一系列意图、想法的集中体现,是用户关于软件的外界特征的规格表述。 (2)系统需求 系统需求是比用户需求更具有技术特性的需求陈述,是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。主要包括:功能、数据、性能、安全等诸多方面的需求问题。 2.需求分析过程 需求分析是对软件系统的后期分析,需要进行的活动包括:分析用户需求、建立需求原型、分析系统需求和进行需求验证等。 3.用户需求获取 (1)用户调查是最基本的用户需求信息收集方法,比较常用的调查方法包括:访谈用户、开座谈会、问卷调查、跟班作业、收集用户资料。 (2)需求原型可被用来解决用户对软件系统在需求认识上的不确定性。一般情况下,开发人员将软件系统中最能够被用户直接感受的那一部分东西构造成为原型。例如,界面、报表或数据查询结果。 4.结构化分析建模 所谓模型,就是对问题所做的一种符号抽象。可以把模型看作为一种思维工具,利用这种工具可以把问题规范地表示出来。主要的分析模型包括: (1)功能层次模型。它使用矩形来表示系统中的子系统或功能模块,使用树形连线结构来表达系统所具有的功能层级关系。 (2)数据流模型。用于描述系统对数据的加工过程,其图形符号是一些具有抽象意义的逻辑符号,主要的图形符号包括:数据接口、数据流、数据存储和数据处理。可以依靠数据流图来实现从用户需求到系统需求的过渡。结构化分析就是基于数据流的细化实现的,它是结构化分析方法的关键。 (3)数据关系模型。也称为ER图,是应用最广泛的数据库建模工具。需要通过数据实体、数据关系和数据属性这三类图形元素建立数据关系模型。 (4)系统状态模型。通过系统的外部事件、内部状态为基本元素来描绘系统的工作流程,这种建模方式比较适合于描述一些依赖于外部事件驱动的实时系统。 5.需求有效性验证 需求有效性验证是指对已经产生的需求结论所要进行的检查与评价。一般需要对需求文档草稿从有效性、一致性、完整性、现实性、可检验性等几个方面进行有效性验证。比较常用的需求有效性验证方法与工具包括:需求评审、需求原型评价和基于CASE工具的需求一致性分析。 6.需求规格定义 需求规格说明书是需求分析阶段需要交付的基本文档,将成为开发者进行软件设计和用户进行软件验证的基本依据,涉及引言、术语定义、用户需求、系统体系结构、系统需求等有关软件需求及其规格的诸多描述与定义。 五、软件概要设计 1.设计过程与任务 概要设计中首先需要进行的是系统构架设计,然后是软件结构、数据结构等方面的设计。主要有以下几个方面的设计任务:制定规范、系统构架设计、软件结构设计、公共数据结构设计、安全性设计、故障处理设计、可维护性设计、编写文档、设计评审。 2.系统构架设计 (1)集中式结构 集中式系统由一台计算机主机和多个终端设备组成。其具有非常好的工作稳定性和安全保密性。但系统建设费用、运行费用比较高,灵活性不够好,结构不便于扩充。 (2)客户机/服务器结构 客户机/服务器结构依靠网络将计算任务分布到许多台不同的计算机上,但通过其中的服务器计算机提供集中式服务。其优越性是结构灵活、便于系统逐步扩充。 (3)多层客户机/服务器结构 •两层结构:将信息表示与应用逻辑处理都放在了客户机上,服务器只需要管理数据库事务。 •三层结构:将两层结构的客户机上的容易发生变化的应用逻辑部分提取出来,并放到一个专门的“应用服务器”上。 •B/S结构:是Web技术与客户机/服务器结构的结合。其优点是不需要对客户机进行专门的维护。 (4)组件对象 分布式结构通过组件进行计算分布。它依赖于对象中间件建立,具有灵活的构架,系统伸缩性好,能够给系统的功能调整与扩充带来便利。 3.软件结构设计 软件结构设计是对组成系统的各个子系统的进一步分解与规划。主要设计内容有:确定模块元素、定义模块功能、定义模块接口、确定模块调用与返回、进行结构优化。 (1)模块概念 •模块化:使用构造程序,可使软件问题简化。 •抽象化:概要设计中的模块被看成是一个抽象化的功能黑盒子。 •信息隐蔽:每个模块的内部实现细节对于其他模块来说是隐蔽的。 (2)模块的独立性 软件系统中每个模块都只涉及自己特定的子功能,并且接口简单,与软件中其他模块没有过多的联系。一般采用耦合和内聚这两个定性的技术指标进行度量。 耦合用来反映模块相互关联程度,模块间连接越紧密,耦合性就越高。内聚用来反映模块内元素的结合程度,模块内元素结合越紧密,则内聚性就越高。为提高模块独立性,要求模块高内聚、低耦合。 耦合形式由低至高是:非直接耦合、数据耦合、控制耦合、公共耦合、内容耦合。 内聚形式由低至高是:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 (3)设计建模 •软件结构图:由Yourdon于20世纪70年代提出,被广泛应用于软件结构设计中,能够有效说明软件中模块之间的调用与通信。 •HIPO图:由美国IBM公司推出。其中,H图用于描述软件的分层调用关系,作用类似软 件结构图,IPO图用于说明描述模块的输入—处理—输出特征。 (4)软件结构优化 主要优化设计原则有:使模块功能完整、使模块大小适中、使模块功能可预测、尽量降低模块接口的复杂程度、使模块作用范围限制在其控制范围之内、模块布局合理。 4.面向数据流的结构设计 (1)变换分析 软件结构由输入、变换和输出三个部分组成。 (2)事务分析 软件结构由接收事务与事务活动两个部分组成。 (3)混合流分析与设计 软件系统是变换流与事务流的混合。对于这样的系统,通常采用变换分析为主、事务分析为辅的方式进行软件结构设计。5.数据库结构设计 (1)逻辑结构设计 •设计数据表 •规范数据表 •关联数据表 •设计数据视图 (2)物理结构设计 •数据存储结构 •数据索引与聚集 •数据完整性 六、面向对象分析与设计 1.面向对象方法学 面向对象技术涉及面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程实现(OOP)这三个方面的问题。 (1)基本概念 •类:面向对象模块单位,作用是为创建对象实例提供模板。其具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •属性、操作与方法:类具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •类的继承性:指上级父类能够把自己的属性、操作传递给下级子类。 •类的多态性:子类对象可以像父类对象那样使用,它们可以共享一个操作名,然而却有不同的实现方法。 •对象:对象是类模块实例化的结果。 •消息:指对象之间的通信。 (2)优越性 •跟现实世界更加接近 •可使软件系统结构更加稳定 •软件具有更好的可重用性 •软件更加便于维护与扩充 2.面向对象分析建模 面向对象分析建模需要建立的是软件系统的用户领域模型,需要从系统业务流程、组织结构和行为过程等几个方面对系统进行分析。 (1)用例图 用例图涉及参入者、用例等元素,用于描述用户与系统之间的交互关系,说明系统所具有的业务能力和业务流程,能够方便开发者理解用户领域的专有术语和业务内容。 (2)活动图 活动图是一种行为模型,主要用于描述用例图中用例的内部活动状态与活动转换过程,以获得对用例的交互行为与工作流程的细节说明。涉及活动状态、活动转换等元素。 (3)分析类图 建立类图的概念模型,描述体现现实世界中数据构造的实体类及其它们之间的关系。 (4)序列图 以用例图中的用例为描述单位,以类图中的类为对象依据,以活动图中的活动转换为行为依据,建立与时间顺序有关的用例中对象之间的交互模型。 3.面向对象设计建模 面向对象设计建模需要把分析阶段的结果扩展成技术解决方案,需要建立的是软件系统的技术构造模型。 (1)设计类图 设计类图中的类是构造系统的基本模块单位,需要在分析类图基础上进行更加完整的面向设计的描述。除了实体类,设计类图中还需要考虑用于向外提供操作接口的边界类和用于实现内部协调的控制类。 (2)协作图 描述对象交互时的链接关系和基于链接而产生的消息通信及其操作接口。 (3)状态图 描述一个特定对象的所有可能的状态以及引起状态转换的事件。 (4)构件图 描述组成系统的物理构件及其它们之间的关系。构件之间关系主要是依赖关系。 (5)部署图 描述系统运行时的物理架构,涉及物理节点、节点之间的连接关系以及部署到各个节点上的构件的实例等。 七、用户界面设计 1.图形用户界面(GUI)所具有的特点 (1)比较容易学习和使用。 (2)用户可利用多屏幕(窗口)与系统进行交互,并可通过任务窗方便地由一个任务转换到另一个任务。 (3)可以实现快速、全屏的交互,能很快在屏幕上的任何地方进行操作。 图形用户界面设计已不是设计人员能够独立解决的了,需要邀请图形设计人员、系统分析人员、系统设计人员、程序员、用户应用领域方面的专家和社会行为学方面的专家以及最终用户的共同参入。 2.基于原型的用户界面设计 用户界面设计是一个迭代的过程,其基本过程包括三个步骤: (1)建立界面需求规格模型。 (2)以界面需求模型为依据创建界面原型。 (3)评价界面原型。 3.界面设计中需要考虑的因素 用户界面设计将会受诸多用户因素的影响,并主要体现在以下几个方面: (1)用户工作环境与工作习惯。 (2)用户操作定势。 (3)界面一致性。 (4)界面动作感。 (5)界面信息反馈。 (6)个性化。 (7)容错性。 (8)审美性与可用性。 4.界面类型 在基于图形界面的应用系统中,用户界面一般由若干个窗体组成,其窗体类型包括: (1)单窗体界面(SDI)。其特点是应用程序一次只能打开一个独立窗体。 (2)多窗体界面(MDI)。由一个MDI主窗体和多个MDI子窗体组成。其中MDI主窗体如同容器用来装载MDI子窗体,而MDI子窗体则被限制于MDI主窗体之内,不能独立存在。诸多公共操作都被放置在MDI主窗体上。 (3)辅助窗体。通常也叫做对话框,它是对主窗体的补充,用于扩展主窗体的功能。辅助窗体的种类主要有:登录窗、消息窗、设置窗等。 (4)Web页面。当采用到基于Web的B/S结构时,系统中的某个Web页面可能会被作为Web应用的进入点,则它可以作为一个特殊的主窗体看待。 5.界面功能特征 在进行用户界面设计时,需要考虑界面的功能问题。大体上说来,用户界面的功能主要体现在以下方面: (1)用户交互。指用户与计算机系统之间的信息交流。 (2)信息表示。指系统提供给用户信息,信息可以采用文本形式表示,也可以采用图形形式表示。 (3)用户联机支持。指系统给用户提供的应用指导。 6.界面导航设计 界面导航所指的是如何由一个界面转换到另一个界面。可以使用活动图来描述界面之间的转换关系,其中活动图中的每一个活动状态可用来表示系统中的每一个界面。 八、程序算法设计与编码 1.结构化程序特征 结构化程序的基本特征是程序的任何位置是单入口、单出口的。因此,结构化程序设计中,GOTO语句的使用受到了限制,并且程序控制也要求采用结构化的控制结构,以确保程序是单入口和单出口的。 2.程序算法设计工具 (1)程序流程图 程序流程图又称为程序框图,其历史悠久、应用广泛,从20世纪40年代末到70年代中期,它一直是程序算法设计的主要工具。程序流程图的主要优点是能够非常直观的描述程序的控制流程。但是,传统的程序流程图却是一种非结构化的程序算法设计工具。 (2)N-S图 为了满足结构化程序设计对算法设计工具的需要,Nassi和Shneiderman推出了盒图,又称为N-S图。它是一种严格符合结构化程序设计原则的图形描述工具。 N-S图的基本特点是通过矩形框描述模块内部程序的各个功能区域,并通过由外到内的矩形框嵌套表示程序的多层控制嵌套。 (3)PAD图 PAD是问题分析图(ProblemAnalysisDiagram)的英文缩写,由日本日立公司首先推出,并得到了广泛的应用。它是符合结构化程序设计原则的图形描述工具。 PAD图的基本特点是使用二维树形结构表示程序的控制流程,从上至下是程序进程方向,从左至右是程序控制嵌套关系。 (4)PDL语言 PDL语言也称为伪码,或过程设计语言,它一般是某种高级语言稍加改造后的产物,可以使用普通的正文编辑软件或文字处理系统进行PDL的书写和编辑。 PDL语言的语法规则分外部语法和内部语法。其中,外部语法用于定义程序中的控制结构和数据结构,内部语法则用于表示程序中的加工计算或条件。 (5)判定表 判定表是算法设计辅助工具,专门用于对复杂的条件组合关系及其对应的动作行为等给出更加清晰的说明,能够简洁而又无歧义地描述涉及条件判断的处理规则。 3.Jackson程序设计方法 1983年法国科学家Jackson提出了一种以软件中的数据结构为基本依据的程序算法设计方法。在以数据处理为主要内容的信息系统开发中,具有一定的应用价值。 Jackson程序设计方法的基本设计途径是通过分析输入数据与输出数据的层次结构,由此对程序算法的层次结构进行推论。 为了方便由数据结构映射出程序结构,Jackson将软件系统中所遇到的数据分为顺序、选择和重复三种结构,并使用图形方式加以表示。Jackson程序结构也是顺序、选择和重复这三种结构,并可以使用与数据结构相同的图形符号表示。 4.程序编码 在完成程序算法设计之后,接着需要编码。 (1)编程语言种类 •低级语言:包括第一代机器语言与汇编语言,它们是直接面向机器的语言。 •高级语言:指面向问题求解过程的语言,使用了与人的思维体系更加接近的概念和符号,一般不依赖于实现这种语言的计算机,具有较好的可移植性。 •第四代语言(4GL):指一些面向问题的高级语言,第四代语言是在更高一级抽象的层次上表示数据与猜想结构,它不需要规定程序算法细节。 (2)选择编程语言的依据 在对软件系统进行编码之前,必须抉择使用什么样的程序设计语言实现这个软件系统。在选择编程语言时往往需要考虑诸多方面的因素,例如软件项目的应用领域、软件问题的算法复杂性、软件工作环境、软件在性能上的需要、软件中数据结构的复杂性、软件开发人员的知识水平和心理因素等。 (3)编程风格与质量 编程风格是编写程序时需要遵守的一些规则。在衡量程序质量时,源程序代码的逻辑简明清晰、易读易懂是一个重要因素,而这些都与编程风格有着直接的关系。 (4)影响程序工作效率的因素 一般说来,程序工作效率会受到处理器计算速度、存储器存储容量和输入输出速度等几个方面因素的影响,并与程序设计语言、操作系统、硬件环境等有着直接关系。因此,在考虑程序工作效率时,需要将诸多因素综合起来分析。 5.程序算法复杂性度量 程序算法复杂性主要指模块内程序的复杂性。比较著名的程序算法复杂性度量方法是McCabe度量法,其对程序复杂性的度量采用的是程序的环形复杂度,计算公式是: V(G)=m–n+p 其中,V(G)是程序有向图G中的环数,m是程序有向图G中的弧数,n是程序有向图G中的节点数,p是程序有向图G中分离部分的数目。 九、软件测试 1.测试目标 尽力发现软件中的错误,而不是为了验证软件的正确性。 2.测试方法 (1)黑盒测试:基于程序的外部功能规格而进行的测试,又称为功能测试。 (2)白盒测试:基于程序的内部结构与处理过程而进行的测试,又称为结构测试。 3.单元测试 单元测试的对象是单元模块,一般以白盒测试为主,以黑盒测试为辅。测试内容包括模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试。 单元测试通常在编码阶段进行。测试时需要用到辅助模块,如驱动模块、桩模块。 4.集成测试 系统集成时主要有非渐增组装测试和渐增组装测试这两种方法: (1)非渐增组装测试:一种一次性地进行系统组装的方法。 (2)渐增组装测试:一种将单元模块的确认测试与集成测试结合在一起的测试方法,它比非渐增组装测试是具有更大的优越性。可以自顶向下渐增集成,也可以自底向上渐增集成。5.确认测试 确认测试又称有效性测试,其任务是验证软件的功能、性能及其他特性是否与用户的要求一致。在进行确认测试时,可以采用Alpha测试或Beta测试。其中,Alpha测试是在开发环境下由用户进行的测试,而Beta测试则是由软件用户在软件实际使用环境下进行的测试。 6.测试用例设计 设计测试用例就是为测试准备测试数据。由于测试用例不同,发现程序错误的能力也就不同,为了提高测试效率降低测试成本,应该选用高效的测试用例。 白盒测试用例设计主要采用逻辑覆盖,包括语句覆盖、判定覆盖、条件覆盖、判定—条件覆盖、条件组合覆盖和路径覆盖。 黑盒测试用例设计包括等价划分、边界值分析和错误推测等几种方法。 7.面向对象测试 (1)面向对象单元测试 不能孤立地测试单个操作,而应该把操作作为类的一部分来测试。 (2)面向对象集成测试 •基于线程的测试。 •基于使用的测试。 (3)面向对象确认测试 研究系统的用例模型和活动模型,设计出确认测试时的用户操作脚本。 8.软件调试 软件调试也叫做排错,涉及诊断与排错这两个步骤。但调试的关键是诊断。 常用的调试方法有:输出存储器内容、在程序中插入输出语句、使用自动调式工具。 常用的调试策略有:试探法、回溯法、对分查找法、归纳法、演绎法。 9.自动测试工具 常用的自动测试工具有:测试数据生成程序、动态分析程序、静态分析程序、模块测试、程序。 10.软件可靠性评估 软件可靠性的定义是:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 软件可用性的定义是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。为了方便可用性的计算,一般使用稳态可用性对系统进行可用性评价。 系统平均无故障时间的估算式是:MTTF=1/(K(ET/IT–Ec(t)/IT)) 十、软件维护 1.软件维护定义 软件维护是在软件运行维护阶段,为了改正软件错误或为了满足用户新的应用需要,而对软件进行改错、变更或进化的过程。 维护任务一般分为:改正性维护、适应性维护、完善性维护和预防性维护。 2.影响软件维护工作的因素 主要因素有:系统大小、程序设计语言、系统文档和系统年龄等。 3.非结构化维护 没有按照软件工程原则实施软件开发,以致和软件配套的一系列文档没有建立起来,保留下来的可能只有源程序。 4.结构化维护 建立在严格按照软件工程原则实施软件开发基础上,因此各个阶段的文档完整,能够比较全面地说明软件的功能、性能、软件结构、数据结构、系统接口和设计约束等。 5.软件维护的代价 软件维护代价包括有形与无形这两个方面的代价。其中,有形代价是指软件维护的直接费用支出,无形代价则指其他非直接的维护代价。 6.软件可维护性 软件可维护性是指维护人员理解、改正、改动和改进这个软件的难易程度。 可以从系统的可理解性、可靠性、可测试性、可修改性、可移植性、运行效率和可使用性这七个方面对软件的可维护性进行综合评估。 7.软件维护的实施 软件维护实施过程中,一般涉及以下几个问题:维护机构、维护申请报告、软件维护工作流程、维护记录和维护评价。 8.对老化系统的维护 老化系统是指一些使用早期程序设计语言开发的系统。为了能够有效地对老化系统进维 护,Yourdon提出了以下的几点维护建议: (1)尽可能得到更多的背景信息。 (2)力图熟悉程序的所有控制流程。 (3)评价现有文档的可用性。 (4)充分利用交叉引用信息。 (5)必须非常谨慎地对程序进行修改。 (6)在删除某些代码时,要确认代码确实不再使用。 (7)不要试图共享程序已有的临时变量或工作区。 (8)保持详细的维护活动和维护结果记录。 (9)如果程序结构混乱,修改受到干扰,可抛弃程序重新编写。 (10)插入出错检验。 9.逆向工程与再工程 逆向工程是通过源程序,甚至是目标程序,由此导出设计模型、分析模型的过程。可以把逆向工程描述为一个魔术管道,从管道一端流入的是一些非结构化的无文档的源代码或目标代码,而从管道另一端流出的则是计算机软件的分析、设计文档。 逆向工程被用到了软件维护上,通过从老化系统的源代码中提取程序流程设计、系统结构设计,甚至是数据流图,给老化系统的维护带来方便。 当逆向工程被用于重新构造或重新生成老化系统时,这个过程就叫做再工程。再工程不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来改建或重建现有的系统。 10.软件配置管理 配置管理包括软件配置标识、软件变更控制和软件版本控制等方面的内容。 当对软件进行维护时,软件产品发生了变化,这一系列的改变,必须在软件配置中体现出来,以防止因为维护所产生的变更给软件带来混乱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半部论语

如果觉得有帮助,打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值