2.6 软件需求分析的文档
软件过程模型是软件开发人员经过多年的探索形成的软件开发步骤和方法,针对应用特点,对开发过程归纳为开发过程框架。
2.6.1 软件需求说明的特征
1.完整性
不能遗漏任何必要的需求信息。遗漏需求将很难查出。注重用户的任务而不是系统的功能将有助于避免不完整性。如果知道缺少某项信息,用TBD(“待确定”)作为标识来标明这项缺漏。在开始开发之前,必须解决需求中所有的TBD项。
2.一致性
一致性是指与其他软件需求或高层(系统、业务)需求不矛盾。在开发前必须解决所有需求间的不一致部分。只有进行一番调查研究,才能知道某一项需求是否确实正确。
3.可修改性
在必要时或维护每一需求变更历史记录时,应该修订SRS。这就要求每项需求要独立标出,并与别的需求区别开来,从而无二义性。每项需求只应在SRS中出现一次。这样更改时易于保持一致性。另外,使用目录表、索引和相互参照列表方法,将使软件需求规格说明更容易修改。
4.可跟踪性
应能在每项软件需求与它的根源和设计元素、源代码、测试用例之间建立起链接,这种可跟踪性要求每项需求以一种结构化的、粒度好(Fine-Grained)的方式编写并单独标明,而不是大段大段的叙述。
2.6.2 软件需求说明书的编写原则
编写优秀的需求文档没有现成固定的方法,最好是根据经验进行。从过去所遇到的问题中可受益匪浅。许多需求文档可以通过使用有效的技术编写风格和使用用户术语而不是计算机专业术语的方式得以改进(Kovitz, 1999)。在编写软件需求文档时,应牢记以下几点建议。
(1)保持语句和段落的简短。
(2)采用主动语态的表达方式。
(3)编写具有正确的语法、拼写和标点的完整句子。
(4)使用的术语与词汇表中所定义的应该一致。
(5)需求陈述应该具有一致的样式,例如“系统必须……”或者“用户必须……”,并紧跟一个行为动作和可观察的结果。再如,“仓库管理子系统必须显示一张所请求的仓库中有存货的化学药品容器清单。”
(6)为了减少不确定性,必须避免模糊的、主观的术语,例如,用户友好、容易、简单、迅速、有效、支持、许多、最新技术、优越的、可接受的和健壮的。当用户说“用户友好”或者“快”或者“健壮”时,应该明确它们的真正含义并且在需求中阐明用户的意图。
(7)避免使用比较性的词汇,例如:提高、最大化、最小化和最佳化。定量地说明所需要提高的程度或者说清一些参数可接受的最大值和最小值。当客户说明系统应该“处理”、“支持”或“管理”某些事情时,应该能理解客户的意图。含糊的语句表达将引起需求的不可验证。由于需求的编写是层次化的,因此,可以把顶层不明确的需求向低层详细分解,直到消除不明确性为止。编写详细的需求文档,所带来的益处是如果需求得到满足,那么客户的目的也就达到了,但是不要让过于详细的需求影响了设计。如果能用不同的方法来满足需求且这种方法都是可接受的,那么需求的详细程度也就足够了。如果评审软件需求规格说明的设计人员对客户的意图还不甚了解,就需要增加额外的说明,以减少由于误解而产生返工的风险。
需求文档的编写人员总是力求寻找到恰如其分的需求详细程度。一个有益的原则就是编写单个的可测试需求文档。如果能想出一些相关的测试用例来验证这个需求能够正确地实现,就达到了合理的详细程度。如果预想的测试很多并且很分散,那么可能就要将一些集合在一起的需求分离开。建议将可测试的需求作为衡量软件产品规模大小的尺度(Wilson, 1995)。文档的编写人员必须以相同的详细程度编写每个需求文档。在同一份软件需求规格说明中,切忌对需求的说明五花八门。例如,“组合键Control+S代表保存文件”和“组合键Control+P代表打印文件”被当成两个独立的需求。“产品必须响应以语音方式输入的编辑指令”则被作为一个子系统,而不是作为一个简单的功能需求。文档的编写人员不应该把多个需求集中在一个冗长的叙述段落中。在需求中诸如“和”、“或”之类的连词就表明了该部分集中了多个需求。务必记住,不要在需求说明中使用“和/或”、“等等”之类的连词。文档的编写人员在编写软件需求规格说明时不应该出现需求冗余。虽然在不同的地方出现相同的需求可能会使文档更易读,但这也造成了维护上的困难。需求的多个实例都需要同时更新,以免造成需求各实例之间的不一致。在软件需求规格说明中交叉引用相关的各项,在进行更改时有助于保持它们之间的同步。让独立性强的需求在需求管理工具或数据库中只出现一次,这样可以缓和冗余问题。
2.6.3 软件需求规格说明书的模板
每个软件开发组织都应该在它们的项目中采用一种标准的软件需求规格说明的模板。有许多推荐的软件需求规格说明模板可以使用(Davis, 1993; Robertson and Robertson, 1999)。Dorfman和Thayer(1990)从美国国家标准局、美国国防部、美国宇航局以及英国和加拿大的有关部门中收集了20多个需求标准和许多实例。许多人使用来自IEEE标准的模板,这是一个结构好并适用于许多种软件项目的灵活的模板。图2-25描绘软件需求规格说明的模板。可以根据项目的需要来修改这个模板。如果模板中某一特定部分不适合你的项目,就在原处保留标题,并注明该项不适用。这将防止读者认为是否不小心遗漏了一些重要的部分。与其他任何软件项目文档一样,该模板包括一个内容列表和一个修正的历史记录,该记录包括对软件需求规格说明所做的修改、修改日期、修改人员和修改原因。
图2-25 软件需求规格说明书模板
a.引言
引言提出了对软件需求规格说明的纵览,这有助于读者了解文档如何编写并且如何阅读和理解。
a.1 目的
对产品进行定义,在该文档中详尽说明了这个产品的软件需求,包括修正或发行版本号。如果这个软件需求规格说明只与整个系统的一部分有关系,那么只定义文档中说明的部分或子系统。
a.2 文档约定
描述编写文档时所采用的标准或排版约定,包括正文风格、提示区或重要符号。例如,说明了高层需求的优先级是否可以被其所有细化的需求所继承,或者每个需求陈述是否都有其自身的优先级。
a.3 预期的读者和阅读建议
该标题列举了软件需求规格说明所针对的不同读者,例如开发人员、项目经理、营销人员、用户、测试人员或文档的编写人员,描述了文档中剩余部分的内容及其组织结构,提出了最适合于每一类型读者阅读文档的建议。
a.4 产品的范围
产品的范围提供了对指定的软件及其目的的简短描述,包括利益和目标。把软件与企业目标或业务策略相联系。可以参考项目视图和范围文档,而不是将其内容复制到这里。
a.5 参考文献
参考文献列举了编写软件需求规格说明时所参考的资料或其他资源。可能包括用户界面风格指导、合同、标准、系统需求规格说明、使用实例文档或相关产品的软件需求规格说明。在这里应该给出详细的信息,包括标题名称、作者、版本号、日期、出版单位或资料来源,以方便读者查阅这些文献。
b.综合描述
综合描述概述了正在定义的产品以及它所运行的环境、使用产品的用户和已知的限制、假设和依赖。
b.1 产品的前景
产品的前景描述了软件需求规格说明中所定义的产品的背景和起源。说明该产品是否是产品系列中的下一成员,是否是成熟产品所改进的下一代产品,是否是现有应用程序的替代品,或者是否是一个新型的、自含型产品。如果软件需求规格说明定义了系统的一个组成部分,就要说明这部分软件是怎样与整个系统相关联的,并且要定义出两者之间的接口。
b.2 产品的功能
产品的功能概述了产品所具有的主要功能。其详细内容将在d中描述,所以在此只需要概略地总结,例如用列表的方法给出。很好地组织产品的功能,使每个读者都易于理解。用图形表示主要的需求分组以及它们之间的联系,例如数据流图的顶层图或类图,都是有用的。
b.3 用户类和特征
用户类和特征确定可能使用该产品的不同用户类并描述它们相关的特征。有一些需求可能只与特定的用户类相关。将该产品的重要用户类与那些不太重要的用户类区分开。
b.4 运行环境
运行环境描述了软件的运行环境,包括硬件平台、操作系统和版本,还有其他的软件组件或与其共存的应用程序。
b.5 设计和实现上的限制
设计和实现上的限制确定影响开发人员自由选择的问题,并说明这些问题为什么成为一种限制。可能的限制包括如下内容:
● 必须使用或者避免的特定技术、工具、编程语言和数据库;
● 所要求的开发规范或标准(例如,如果由客户的公司负责软件维护,就必须定义转包者;
● 所使用的设计符号表示和编码标准;
● 企业策略、政府法规或工业标准;
● 硬件限制,例如定时需求或存储器限制;
● 数据转换格式标准。
b.6 假设和依赖
假设和依赖列举出在对软件需求规格说明中影响需求陈述的假设因素(与已知因素相对立)。这可能包括打算要用的商业组件或有关开发或运行环境的问题。你可能认为产品符合一个特殊的用户界面设计约定,但是另一个SRS读者却可能不这样认为。如果这些假设不正确、不一致或被更改,就会使项目受到影响。
此外,确定项目对外部因素存在的依赖。例如,如果打算把其他项目开发的组件集成到系统中,那么就要依赖那个项目按时提供正确的操作组件。如果这些依赖已经记录到其他文档(例如项目计划)中,那么在此就可以参考其他文档。
c.外部接口需求
利用本节来确定可以保证新产品与外部组件正确连接的需求。关联图表示了高层抽象的外部接口。需要把对接口数据和控制组件的详细描述写入数据字典中。如果产品的不同部分有不同的外部接口,那么应把这些外部接口的详细需求并入到这一部分的实例中。
c.1 用户界面
陈述所需要的用户界面的软件组件。描述每个用户界面的逻辑特征。以下是可能要包括的一些特征:
● 将要采用的图形用户界面(GUI)标准或产品系列的风格;
● 屏幕布局或解决方案的限制;
● 将出现在每个屏幕的标准按钮、功能或导航链接(例如一个帮助按钮);
● 快捷键;
● 错误信息显示标准。
对于用户界面的细节,例如特定对话框的布局,应该写入一个独立的用户界面规格说明中,而不能写入软件需求规格说明中。
c.2 硬件接口
硬件接口描述系统中软件和硬件每一接口的特征。这种描述可能包括支持的硬件类型、软硬件之间交流的数据和控制信息的性质以及所使用的通信协议。
c.3 软件接口
软件接口描述该产品与其他外部组件(由名字和版本识别)的连接,包括数据库、操作系统、工具、库和集成的商业组件。明确并描述在软件组件之间交换数据或消息的目的。描述所需要的服务以及内部组件通信的性质。确定将在组件之间共享的数据。如果必须用一种特殊的方法来实现数据共享机制,例如在多任务操作系统中的一个全局数据区,就必须把它定义为一种实现上的限制。
c.4 通信接口
通信接口描述与产品所使用的通信功能相关的需求,包括电子邮件、Web浏览器、网络通信标准或协议及电子表格等。定义相关的消息格式,规定通信安全或加密问题、数据传输速率和同步通信机制。
d.系统特性
在图2-25所示的模板中,功能需求是根据系统特性即产品所提供的主要服务来组织的。可通过使用实例、运行模式、用户类、对象类或功能等级来组织这部分内容(IEEE 1998),还可以使用这些元素的组合。总而言之,必须选择一种使读者易于理解预期产品的组织方案。仅用简短的语句说明特性的名称,例如“4.1拼写检查和拼写字典管理”。无论想说明何种特性,阐述每种特性时都将重述d.1~d.3这三步系统特性。
d.1 说明和优先级
说明和优先级提出了对该系统特性的简短说明并指出该特性的优先级是高、中,还是低。或者还可以包括对特定优先级部分的评价,例如利益、损失、费用和风险,其相对优先等级可以为1(低)~9(高)。
d.2 激励/响应序列
激励/响应序列列出输入激励(用户动作、来自外部设备的信号或其他触发器)和定义这一特性行为的系统响应序列,这些序列将与使用实例相关的对话元素相对应。
d.3 功能需求
该标题列出与该特性相关的详细功能需求。这些是必须提交给用户的软件功能,使用户可以使用所提供的特性执行服务或者使用所指定的使用实例执行任务。描述产品如何响应可预知的出错条件或者非法输入或动作。就像本章开头所描述的那样,必须唯一地标识每个需求。
e.其他非功能需求
这部分列举出了所有非功能需求,而不是外部接口需求和限制。
e.1 性能需求
该标题阐述了不同的应用领域对产品性能的需求,并解释它们的原理,以帮助开发人员做出合理的设计选择。确定相互合作的用户数或者所支持的操作、响应时间以及与实时系统的时间关系。还可以在这里定义容量需求,例如存储器和磁盘空间的需求或者存储在数据库中表的最大行数。尽可能详细地确定性能需求。可能需要针对每个功能需求或特性分别陈述其性能需求,而不是把它们都集中在一起陈述。例如,“在运行微软Windows 2000的450 MHz PentiumⅡ的计算机上,当系统至少有50%的空闲资源时,95%的目录数据库查询必须在两秒内完成。”
e.2 安全设施需求
该标题详尽陈述与产品使用过程中可能发生的损失、破坏或危害相关的需求。定义必须采取的安全保护或动作,还有那些应该预防的潜在的危险动作。明确产品必须遵从的安全标准、策略或规则。一个安全设施需求的范例如下:“如果油箱的压力超过了规定的最大压力的95%,那么必须在1秒钟内终止操作。”
e.3 安全性需求
该标题详尽陈述与系统安全性、完整性或与私人问题相关的需求,这些问题将会影响到产品的使用和产品所创建或使用的数据的保护。定义用户身份确认或授权需求。明确产品必须满足的安全性或保密性策略,也可通过称为完整性的质量属性来阐述这些需求。一个软件系统的安全需求的范例如下:“每个用户在第一次登录后,必须更改他的最初登录密码。最初的登录密码不能重用。”
e.4 软件质量属性
软件质量属性详尽陈述与客户或开发人员至关重要的其他产品质量特性。这些特性必须是确定、定量的并在可能时是可验证的。至少应指明不同属性的相对侧重点,例如易用程度优于易学程度,或者可移植性优于有效性。
e.5 业务规则
业务规则列举出有关产品的所有操作规则,例如什么人在特定环境下可以进行何种操作。这些本身不是功能需求,但它们可以暗示某些功能需求执行这些规则。一个业务规则的范例如下:“只有持有管理员密码的用户,才能执行$100.00或更大额的退款操作。”表明对退款操作功能有一定的权限限制。
e.6 用户文档
用户文档列举出将与软件一同发行的用户文档部分,例如,用户手册、在线帮助和教程。明确所有已知的用户文档的交付格式或标准。
f.其他需求
该标题定义在软件需求规格说明的其他部分未出现的需求,例如国际化需求或法律上的需求。还可以增加有关操作、管理和维护部分来完善产品安装、配置、启动和关闭、修复和容错,以及登录和监控操作等方面的需求。在模板中加入与项目相关的新部分。如果不需要增加其他需求,就省略这一部分。
附录A:词汇表
词汇表定义所有必要的术语,以便读者可以正确地解释软件需求规格说明,包括词头和缩写。可以为整个公司创建一张跨越多项项目的词汇表,并且只包括特定于单一项目的软件需求规格说明中的术语。
附录B:分析模型
这个可选部分包括或涉及相关的分析模型的位置,例如数据流图、类图、状态转换图或实体—关系图。
附录C:待确定问题的列表
编辑一张在软件需求规格说明中待确定问题的列表,其中每一表项都是编上号的,以便于跟踪调查。详尽陈述与产品使用过程中可能发生的损失、破坏或危害相关的需求。定义必须采取的安全保护或动作,还有那些预防的潜在的危险动作。明确产品必须遵从的安全标准、策略或规则。一个安全设施需求的范例如下:“如果油箱的压力超过了规定的最大压力的95%,那么必须在1秒钟内终止操作。”