Weekly thoughts: What is the difference between Functional and Non-Functional requirements?
When I first see the question, the first answer that comes to me is that functional requirements are more aimed to solve the problem “what does the system do” while the non-functional requirements solve the problem of “how does the system do that”.
For example, in a library application, a functional requirement could be “a user can search a book from inputting a keyword” while a non-functional requirement could be “book search from inputting a keyword should be finished within 3 seconds.”
Sommerville(2015) also points out another difference between them. He mentions non-functional requirements “specify or constrain characteristics of the system as a whole” while functional requirements are “directly concerned with the specific services delivered by the system to its users”.
Let’s take the library app as an example again, functional requirements like “A user can borrow a book”, “A user can return a book” usually are related to some certain components in the app. However, the non-functional requirements like “make sure the app is lightweight” are related to the whole app’s memory use.
Also, Sommerville mentions one type of non-functional requirements is external requirements, which means “(a) broad heading covers all requirements that are derived from factors external to the system and its development process”. That’s very different from functional requirements since they are usually about the development process.
For example, one of the functional requirements for the library app might be “The system should allow a user to sign up an account with the user’s personal information”, but the non-functional requirement might be “the collection of data should conform to privacy legislation”, which is derived from political factors.
Note: After I finished this post yesterday, I went through all of my classmates’ post and some more reading materials, I have the feeling non-functional requirements are extremely critical for a product, even more than functional requirements because there are a lot of applications in the store aiming at almost the same functional requirements and have similar user stories. However, what makes them stand out is “how” they implement in terms of security issues and efficiency and other performance attributes. I am not sure if it is right since I don’t have too much real-life experience, but still want to add this extra thought here so if I understand it wrongly, let me know! Also, grateful for all my classmates that leave their valuable ideas! Very helpful :)
References
Sommerville, I(2015).Software Engineering. Tenth Edition. England: Pearson Education.