1

For the most part, I am able to distinguish between functional and non-functional requirements, but at times it is not clear for me.

For example, the following are non-functional but they seem functional to me:

The software must use SSL encryption for transmissions

Or

The software must store the configurations in an XML file

Could you please help me with a rule of thumb that helps me make the distinction? Many thanks!

User 19826
  • 213
  • 1
  • 6
  • 2
    Who says that these aren't functional requirements? – Neil Feb 15 '19 at 07:46
  • 3
    These could be argued either way, and it's not generally necessary to categorize all requirements as functional or non-functional. But given that nonfunctional requirements typically address _quality attributes_, these requirements seem more functional as they require a capability and not a quality of the system. – amon Feb 15 '19 at 14:06
  • 1
    Is there some reason to differentiate other than academic purposes? – Dunk Feb 15 '19 at 23:05

2 Answers2

3

Functional requirements describe the functionality that a system must offer to its users. All the other requirements are non-functional requirements.

With that in mind, you can ask yourself, if, for example, the requirement for storing configurations in an XML file is not satisfied (for example, the configurations are stored in a different format, like an .ini file), is there any functionality that is not available to any user of the system. If the answer to that question is yes, then you are dealing with a functional requirement. Otherwise, you are dealing with a non-functional requirement.
In this consideration, any person or external system interacting with the system you are building is a user.

Bart van Ingen Schenau
  • 71,712
  • 20
  • 110
  • 179
  • 1
    Maybe the user wants to edit these configuration files. Maybe he has special tools for editing and validating XML but not .ini or JSON. Also, I don't believe functional requirements are always related to user needs. they can also be related to other systems your software needs to interact with. – Frank Puffer Feb 17 '19 at 10:24
  • 1
    @FrankPuffer, if a user loses the possibility to edit the configuration files with `company-standard tool X`, then the requirement to have the configuration files in XML is a functional requirement. Anyone or anything interacting with the system is a user in this case. That includes administrators and other software systems. – Bart van Ingen Schenau Feb 17 '19 at 10:28
0

A common heuristic is if they end in -ility: Availability, flexibility, changeability, maintainability, adaptability etc.,

It’s a “non-functional” requirement (NFRs) - your system will still function without it but not as effectively.

Think scalability: Twitter still provides functionality if it’s running on a single machine but it can’t effectively cater that to billions of tweets.

NFRs are typically architectural requirements (rule of thumb) but do not directly support the “functional” requirements per se.

In theory you can deliver a piece of software without regards to NFRs but it’ll probably be of poor quality.

Functional: “how” NFRs: “how well

PhD
  • 2,531
  • 2
  • 18
  • 32
  • I disagree that NFR always increase the quality of the product. E.g.: i've had an NFR to use a file-based H2 instead of an Oracle DB simply because the customers Oracle Admin was in another departement. That H2DB didn't scale... – marstato Feb 18 '19 at 09:11
  • They don’t always. Just a rule of thumb. However, library swapping or technology changing are more “horizontally” impacting i.e. impacting all parts of the application. At that instant they’re probably NFRs in isolation. However, when you selected H2 initially it was never called out singly but was used to “support” implementation of requirements. You may mark these as “technology requirements”. But NFRs most commonly map to quality ones. Look up requirement “types and hierarchies” to see what’s clumped where. Whether you wish to clump the Oracle thing as NFRs is nitpicking IMHO – PhD Feb 18 '19 at 15:46