软件需要解决的是用户所面临的现实问题,但是,这些现实问题需要由软件技术人员来解 决。情况往往是,开发软件的技术人员精通计算机技术,但并不熟悉用户的业务领域;而用户 清楚自己的业务,却又不太懂计算机技术。因此,对于同一个问题,技术人员和用户之间可能 存在认识上的差异。也因此,在软件技术人员着手设计软件之前,需要由既精通计算机技术又 熟悉用户应用领域的软件系统分析人员,对软件问题进行细致的需求分析。 需求分析是软件工程过程中一个重要的里程碑。在需求分析过程中,软件系统分析人员通 过研究用户在软件问题上的需求意愿,分析出软件系统在功能、性能、数据等诸多方面应该达 到的目标,从而获得有关软件的需求规格定义,其信息流如图 4-1 所示。
需求分析是在软件系统分析人员的操作下进行的,在这个过程中,用户和开发者之间需要 达成的是对系统的一致性需求认识。实际上,可以把软件系统分析人员看成是软件用户与软件 开发技术人员之间的信息通道,其作用是使用户对软件问题的现实描述,能够有效地转变为开 发软件的技术人员所需要的对软件的技术描述,以方便技术人员对软件的技术构建
需求分析是在软件系统分析人员的操作下进行的,在这个过程中,用户和开发者之间需要 达成的是对系统的一致性需求认识。实际上,可以把软件系统分析人员看成是软件用户与软件 开发技术人员之间的信息通道,其作用是使用户对软件问题的现实描述,能够有效地转变为开发软件的技术人员所需要的对软件的技术描述,以方便技术人员对软件的技术构建。
一、需求分析任务
需求分析需要实现的是将软件用户对于软件的一系列意图、想法转变为软件开发人员所需要的有关软件的技术规格,并由此实现用户和开发人员之间的有效通信,它涉及面向用户的用 户需求和面向开发者的系统需求这两个方面的工作内容。
1.用户需求
用户需求是用户关于软件的一系列意图、想法的集中体现,涉及软件的操作方式、界面风格、报表格式,用户机构的业务范围、工作流程,以及用户对于软件应用的发展期望等。因此, 用户需求也就是用户关于软件的外界特征的规格表述。 实际上,用户需求提出了一个有关软件的基本需求框架,具有以下特点:
(1)用户需求直接来源于用户,可以由用户主动提出,也可以通过与用户交谈,或对用户 进行问卷调查等方式获取。由于用户对计算机系统认识上的不足,分析人员有义务帮助用户挖掘需求,例如,可以使用启发的方式激发用户的需求想法。如何更有效地获取用户需求,既是 一门技术,也是一门思维沟通艺术。
(2)用户需求需要以文档的形式提供给用户审查,因此需要使用流畅的自然语言或简洁清 晰的直观图表来进行表述,以方便用户的理解与确认。
(3)可以把用户需求理解为用户对软件的合理请求,这意味着,用户需求并不是开发者 用户的盲目顺从,而是建立在开发者和用户共同讨论、相互协商的基础上。
(4)用户需求主要是为用户方管理层撰写的,但用户方的技术代表,软件系统今后的操作 者,以及开发方的高层技术人员,也有必要认真阅读用户需求文档。
2.系统需求
系统需求是比用户需求更具有技术特性的需求陈述,是提供给开发者或用户方技术人员阅 读的,并将作为软件开发人员设计系统的起点与基本依据。 系统需求需要对系统在功能、性能、数据等方面进行规格定义,由于自然语言随意性较大, 在描述问题时容易发生歧义,因此系统需求往往要求用更加严格的形式化语言进行表述,例如 PDL 伪码,以保证系统需求表述具有一致性。 系统需求涉及有关软件的一系列技术规格,包括:功能、数据、性能、安全等诸多方面的 问题。
(1)功能需求
功能需求是有关软件系统的最基本的需求表述,用于说明系统应该做什么,涉及软件系统 的功能特征、功能边界、输入输出接口、异常处理方法等方面的问题。也就是说,功能需求需 要对软件系统的服务能力进行全面的详细的描述。 在结构化方法中,往往通过数据流图来说明系统对数据的加工过程,它能够在一定程度上 表现出系统的功能动态特征。也就是说,可以使用数据流图建立软件系统的功能动态模型。
(2) 数据需求
数据需求用于对系统中的数据,包括:输入数据、输出数据、加工中的数据、保存在存储 设备上的数据等,进行详细的用途说明与规格定义。 在结构化方法中,往往使用数据字典对数据进行全面准确的定义,例如,数据的名称、别 名、组成元素、出现的位置、出现的频率等。当所要开发的软件系统涉及到对数据库的操作时, 还可以使用数据关系模型图(ER图)对数据库中的数据实体、数据实体之 间的关系等进行描述。
(3) 其他需求
其他需求是指系统在性能、安全、界面等方面需要达到的要求。
二、需求分析过程
需求分析是对软件系统的后期分析,需要进行一系列的活动,包括:分析用户需求、建立 需求原型、分析系统需求和进行需求验证等,其活动流程如图 4-2 所示。
(1)需求分析可以可行性分析中软件系统的高层模型为前提,首先需要进行的是分析用户 需求,由此可以提出关于软件的需求框架。 (2)由于用户对计算机信息系统认识上的模糊性,以致直接来源于用户的需求想法往往存 在着许多缺陷,例如:需求冲突、需求遗漏。为提高用户需求的有效性,可以按照需求框架的 要求建立需求原型让用户确认,然后再通过需求原型去提取系统模型。
(3)系统需求是面向技术人员的。因此,它不仅需要从需求原型中提取系统模型,而且需 要对系统模型进行细节化处理,例如:数据流细化、数据字典分解、类模型的定义等,由此获 得对系统的详细的技术性需求说明。
(4)对需求框架、系统模型和需求细节等文档进行有效性验证,由此产生出用户方、开发 方都能接受的关于软件的需求规格说明书。
三、用户需求获取
优秀软件总是能够最大限度地满足用户需求。因此,有效获取用户需求,是实施软件开发 时需要完成的第一项工作。
1.研究用户
在建立软件抽象模型过程中,用户可以被当作为一个抽象概念,泛指诸多从系统获得服务 的系统以外的对象,例如:软件使用机构,软件操作人员,以及从软件获得信息服务的其他系 统或设备。也就是说,可以把用户看作为系统的外部应用接口。但从软件的商业服务角度来看, 用户则主要是指购置软件的机构、使用软件的部门、操作软件的人。 软件是为用户开发的,为了使软件能够更好地为用户服务,在软件需求阶段,软件开发者 应该尽量充分地和用户进行沟通,了解用户的意图。例如,用户希望软件为他提供哪些方面的 服务,用户在操作软件时有哪些工作习惯,喜欢什么样的工作界面等。 软件往往需要为各种不同的用户服务,例如,用户机构负责人、使用软件的部门主管、软 件操作人员,他们都是用户,但由于所处位置不同,因此会有不同的需求。软件操作人员大多需要较长时间地操作软件,因此他们会特别关心软件的工作方式、界面布局;使用软件的部门 主管则一般不会直接操作软件,但他需要从软件中得到年度报表之类的打印数据,因此比较关 心软件能够提供哪些方面的报表,报表格式如何等。 用户情况是复杂的,为了更好地研究用户,有必要对软件用户做一些分类,例如:按软 件需求层次不同,将用户分为高层用户、中层用户和基层用户;按使用软件时间长短不同, 将用户分为熟练用户和非熟练用户;按是否直接操作软件系统,将用户分为直接用户和间接 用户。
2. 从调查中获取用户需求
直到今天,用户调查仍是最基本的用户需求信息收集方法。应该说,用户需求信息来源是 多方面的,为了保证用户需求的完整性,在需求分析过程中,软件系统分析人员往往需要调查 各类能够代表用户意愿的相关人员,如图 4-3 所示。
实际上,针对不同的应用项目通常会有不同的调查内容,需要采用不同的调查策略。例如, 开发一个信息管理系统,其用户需求调查一般会涉及以下方面的内容:
(1)调查用户的组织机构,包括:该组织的部门组成,各部门的职责等。由此得到的调查 结果将作为分析软件系统领域边界的基本依据。 (2)调查用户各部门的业务活动,包括:各个部门输入和使用什么数据,如何