从严格意义上讲,软件需求是直接或间接关系到软件系统功能的期望。需求需要被文档化表述,这要求需求工程师搞清楚需求有哪些类型以及每种类型如何进行表述。
分类的目的是为了区别对待,否则分类就失去了意义。需求分类是为了将需求划分为需要区别对待的不同类型,每种类型会被文档化到不同的部分,服务于不同的读者、不同的目的。
严格意义上,将需求分为这几个类别:
(1)功能需求
和系统主要工作相关的需求,即在不考虑物理约束的情况下,用户希望系统所能够执行的活动,这些活动可以帮助用户完成任务。功能需求主要表现为系统和环境之间的行为交互。
(2)性能需求
系统整体或其组成部分应该拥有的性能特征,如CPU使用率和内存使用率等。
(3)质量属性
系统完成工作的质量,即系统需要在一个“好的程度”上实现功能需求,如可靠性程度和可维护性程度。
(4)对外接口
系统和环境中其他系统之间需要建立的接口,包括硬件接口、软件接口和数据库接口等。
(5)约束
进行系统构造时需要遵守的约束,如编程语言和硬件设施等。