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. If they are not, they have nothing to do in the list of requirements, otherwise it would be impossible to build validation tests from something which is subjective.
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 dots, the dots being placed at the inner edge of the border and being 3px in diameter.
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.
7. 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.