Ian Sommerville – Software Engineering – Requirements Engineering

Requirements

I have a question about the structure of requirements. Ian Sommerville (Software Engineering 10th Edition, 2016) divides requirements into User Requirements, System Requirements, Functional Requirements and Non-Functional Requirements. Can I understand this structure in a way that user and system requirements are one abstraction level above functional and non-functional requirements?

Example:

1. user requirements
1.1 Functional requirements
1.2 Non-functional requirements

2. system requirements
2.1 Functional requirements
2.2 Non-functional requirements

Best Answer

There are many different ways of categorizing requirements. Without seeing the exact text that you are referring to (and Sommerville has written several editions of Software Engineering, with the most recent being the 10th edition in 2015, and then Engineering Software Products in 2019 as a replacement), it's not possible to explain exactly what the author means. However, I can speak about requirements engineering in general.

User requirements, system requirements, functional requirements, and non-functional requirements aren't equal levels of abstraction. There are different ways to categorize a given requirement.

Functional versus non-functional (sometimes called the "quality attributes" or "quality requirements" of a system) is one way. Functional requirements describe behavior, usually in the sense of inputs and outputs. Non-functional requirements describe the overall operation or properties of the system under design.

The distinction between user requirements and system requirements is more about the source of the requirements. User requirements specify what the users and customers expect from a system, in the context of the user's domain. System requirements exist in the solution domain and describe what the software must do.

Often, system requirements are derived from and traced to user requirements. Both levels of requirements - system and user - may have both functional and non-functional requirements. In that sense, yes, it's safe to say that system requirements are an abstraction over functional and non-functional requirements or that user requirements are an abstraction over functional and non-functional requirements.

Related Topic