软件需求包括功能需求与非功能需求。其中,功能需求是系统或系统组件应实现的功能,以便用户能够完成自己的任务(用户需求)。它描述系统应该做什么。非功能需求是功能需求之外对系统的要求,包括质量属性、系统与外部世界的接口等。
典型的功能需求描述会包括一个名称及编号并简单说明原因。这些信息有助于读者了解为何需要这些功能,而且可以在系统开发过程中去追踪这些功能需求对应的设计、实现及测试。典型的功能需求模型为数据流图。
非功能需求强调的不是系统要做什么。它们对系统的重要特征或属性进行描述,包括系统的易用性、可用性、安全性、可靠性和性能等对用户很重要的质量属性,以及有效性、可移植性、可重用性等对开发者很重要的质量属性。产品的地域性需求,如用户的文化、语言、法律、货币、专有名词、拼写和其他特征也属于非功能需求。虽然此类需求被归入非功能需求,但需求工程师依然可以从中获得大量的功能,确保系统的所有行为和属性符合用户的预期。还有一些非功能需求描述系统与外部世界的接口,包括与其他软件系统、硬件组件、用户及沟通界面的关联。