2 of 3
added 1406 characters in body
Arseni Mourzenko
  • 135.4k
  • 31
  • 348
  • 516

There is already an excellent answer by Aaronaught, but since there are four other answers which are totally wrong about what a non-functional requirement is, and seing the comment: "I was taught in my university that that was a functional requirement" by DeadMG, I think it would be useful for the community to add a few explanations to avoid the mistakes about what a non-functional requirement is.


A non-functional requirement is *"a quality or property that the product must have"*¹. James Taylor tells that a non-functional requirement "[...] is [nonetheless] a requirement, and it is important to the customer—sometimes even more important than a functional requirement". He then gives two examples: the logo of the product, and the accuracy and reliability of the equipment. Those both examples show very well that:

  • The non-functional requirements are not a marketing jibber-jabber like: "Internet is important nowadays and we wanna have a website".
  • The non-functional requirements concern the customers, since they can heavily impact their productivity and the ability itself to use the product.
  • The non-functional requirements are totally objective.

The last point is essential. If the requirement is subjective, it has nothing to do in the list of requirements. It would be impossible to build validation tests from something which is subjective. The sole purpose of the list of requirements is to enumerate the non-ambiguous expectations of the customer². "I want this square to be red" is a requirement. "I want this square to have a nice color" is a wish which requires explanation.

Remember that the list of requirements is like a contract (and in most cases is a part of a contract). It is signed by the customer and the development company, and in a case of a litigation, it will be used legally to determine if you've done your work correctly. What if I order you a software product, specify that "the product must be great", and refuse to pay when the product is done, because for me, what you've actually done is not a great product?

So, let's see some examples.

**  1.  The software product is responsive to the end user.**

This is not a requirement. Not a functional. Not a non-functional. It's just not a requirement. At all. It has zero value. You can't check if the software system meets this requirement during validation testing. Neither you - the QA department, nor the customer.

**  2.  The reloading of the user statistics performs 90% of the time below 100 ms. when tested on machine with the performances specified in appendix G part 2 and the load below 10% for the CPU, below 50% for memory and no active R/W disk operations.**

It is a requirement. If the appendix G part 2 is precise enough, I can take the machine with the similar hardware and perform the validation test in QA department, and I will always obtain a binary result: passed or failed.

Is it a functional requirement? No. It does not specify what the system must do. There were probably a functional requirement before, specifying that the software application must be able to reload user statistics.

Is it a non-functional requirement? It is. It specifies a property that a product must have, i.e. the maximum/average response time, given the percentage threshold.

**  3.  The application is written in C#.**

Is this a requirement? We don't really know without a context. It might be a wish of the lead developer, who wants, by inserting this requirement, to avoid later a discussion with his colleagues about the language to use. It might also be a requirement based on hardware/software, legacy or compatibility elements. We don't know.

**  4.  The C# codebase of the product follows Microsoft Minimum Recommended Rules and Microsoft Globalization Rules.**

This is a strange thing. Personally, I would rather not call it a requirement, and put it into a separate document specifying the standards and best practices.

**  5.  The main window of the application has a blue (#00f) 10px border with pink (#fcc) filled circles, those circles being placed at the inner edge of the border and being 3px in diameter, separated by 20px from each other.**

It is a requirement, and a non-functional one. It specifies something we may test during validation testing, and it specifies a property of the product, not what the product is intended to do.

**  6.  The vehicle tracking system measures the speed with a precision of ±0.016 mph.**

Also a non-functional requirement. It gives a measurable threshold of the precision of the system. It doesn't tell what the system must do, but tells how precise is it doing its work. But wait? It tells that the vehicle tracking system measures the speed, isn't it? So it's a functional requirement too? Well, no, since we put an accent on the precision of the measurement, not on the fact that the measurement is done.

**  7.  The vehicle tracking system measures the speed of the vehicle.**

Now it's a functional requirement. It doesn't tell how the system works, but what it's doing. Through functional requirements, we could learn that the vehicle tracking system measures the speed, the battery power, the pressure of I don't know what and if the lights are on or not.

**  8.  The pages of the website take 850 ms. to load.**

This is not a requirement. Is tries to be one, but is totally invalid. How would you asset this? What pages? All? Tested through a local 1Gbps network on a quad-core client machine and a eight-core server with SSDs used at 2%, or through a modem of a old and crappy laptop while the website is being hosted by a small server used at 99%? What is meant by "to load"? Does it mean downloading the page? Downloading and displaying it? Sending the POST request with some large data, then loading the response and displaying it?

To conclude, a non-functional requirement is always a requirement, which means that it describes something which is totally objective and can be checked through an automated or manual validation test, but instead of telling what the system is doing, it explains how the system is doing something or how the system is itself.


¹ Managing Information Technology Projects: Applying Project Management Strategies to Software, Hardware, and Integration Initiatives, James Taylor, ISBN: 0814408117.

Arseni Mourzenko
  • 135.4k
  • 31
  • 348
  • 516