对一个系统的需求是关于该系统应当提供的服务以及对其运行的约束的描述。找出、分析、文档化并且检查这些服务和约束的过程被称为需求工程RE。需求工程是软件工程过程的第一个阶段。
需求工程过程中出现的一些问题是由于没有清晰区分不同描述层次上的需求而造成的。用户需求指高层的抽象需求,系统需求指关于系统应当做什么的详细描述。用户需求使用自然语言和图形,陈述系统被期望向系统用户提供什么服务以及系统运行必须满足的约束。系统需求是对软件系统的功能、服务和运行约束的更详细的描述。系统需求文档又叫功能规格说明,应该精确定义要实现哪些东西,它可以是系统购买方和软件开发者之间合同的一部分。
软件系统需求分功能需求和非功能需求。功能性需求是对系统应该提供的服务、系统应该如何响应特定的输入、系统在特定的情形中应该如何表现的陈述。非功能性需求是对系统提供的服务或功能的约束,包括时间性约束、对于开发过程的约束、标准规范中所施加的约束等。非功能性需求经常用于系统整体而不是单个的系统特征或服务。需求不是独立的一个需求经常产生其他需求或对其他需求产生约束。
需求工程过程包括三个关键活动: 通过与利益相关者交互发现需求(抽取和分析)、将这些需求转换为标准格式(规格说明)、检查需求是否实际上定义了客户所要的系统(确认)。需求工程是一个迭代化的过程,其中的活动相互交织。
需求抽取的困难包括:1、利益相关者经常不知道他们想从一个计算机系统中得到什么;2、他们会很自然地用自己的话表达需求,其中隐含一些关于他们自己工作的知识;3、不同的利益相关者有不同的需求;4、管理政治因素可能影响需求;5、业务环境是动态的。
需求抽取和分析活动包括:1、需求发现和理解;2、需求分类和组织;3、需求优先级排列和协商;4、需求文档化。需求抽取可以采用访谈和观察,载体可以采用故事和场景。
书写系统需求的表示法包括:自然语言句子、结构化自然语言、图形化表示法、数学规格说明、用例。
需求文档的结构包括:前言、引言、术语表、用户需求定义、系统体系结构、系统需求规格说明、系统模型、系统演化、附录、索引。
需求确认包括:正确性检查、一致性检查、完整性检查、现实性检查、可验证性检查。
需求确认技术包括:需求评审、原型化、测试用例生成。
需求管理包括:需求标识、变更管理过程、追踪关系策略、工具支持。