DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Enterprise AI Trend Report: Gain insights on ethical AI, MLOps, generative AI, large language models, and much more.

2024 Cloud survey: Share your insights on microservices, containers, K8s, CI/CD, and DevOps (+ enter a $750 raffle!) for our Trend Reports.

PostgreSQL: Learn about the open-source RDBMS' advanced capabilities, core components, common commands and functions, and general DBA tasks.

AI Automation Essentials. Check out the latest Refcard on all things AI automation, including model training, data security, and more.

Related

  • Top 10 Software Architecture Patterns to Follow in 2024
  • Authorization: Get It Done Right, Get It Done Early
  • Why Performance Projects Fail
  • Organizing Knowledge With Knowledge Graphs: Industry Trends

Trending

  • Elevate Your Terminal Game: Hacks for a Productive Workspace
  • Enhancing Performance With Amazon Elasticache Redis: In-Depth Insights Into Cluster and Non-Cluster Modes
  • Understanding Kernel Monitoring in Windows and Linux
  • Machine Learning: A Revolutionizing Force in Cybersecurity
  1. DZone
  2. Culture and Methodologies
  3. Agile
  4. Functional vs. Non-Functional Requirements: The Full Guide, Definitions, and Technical Examples

Functional vs. Non-Functional Requirements: The Full Guide, Definitions, and Technical Examples

There are two types of requirements in the software development world: functional and non-functional. Read on to learn the distinction between the two.

By 
Anastasiia Komendantova user avatar
Anastasiia Komendantova
·
May. 24, 22 · Analysis
Like (2)
Save
Tweet
Share
5.9K Views

Join the DZone community and get the full member experience.

Join For Free

What Are Functional Requirements?

Functional requirements specify which functions your system (or system component) must have. In other words, they define what your custom software needs to do. If these requirements are not met, the software fails; it’s non-negotiable. Examples of the most common functional requirements are (1) use cases and (2) document descriptions.

Use Case

Use cases can be numbered lists with text or diagrams that describe user actions. Each use case illustrates behavioral scenarios through one or more functional requirements. First, a set of use cases is selected — and then an analyst can derive the functional requirements that need to be implemented in order for each use case to be fulfilled. For example, a navigational use-case model for a conference management system is proposed in the diagram below. Each main functionality is associated with user roles: Here’s an example of a use case numbered list for a subway ticket machine:

Written Document Descriptions

A typical written functional requirement will contain a unique name and number, a summary, and a rationale. This information is used to help the reader understand why the requirement is necessary and develop a system to track it. Some examples of written functional requirements include:

  • Interface requirements
  • Data manipulation and processing requirements
  • Verification requirements
  • Documentation requirements
  • Security requirements
  • Acceptance criteria

During the development stage, functional requirements are used to describe whether or not the system is working as intended. Unfortunately, that means that there might be many more requirement types for you to write down until you create a complete picture of a correctly working system.

Who Is Responsible for Preparing Functional Requirements?

Functional requirements are typically collaborated on by a business analyst, system analysts, and an implementation team. The project manager is responsible for making sure the functional requirements are delivered on time, and the System Owner and QA sign them off. 

What Are NFRs or Non-Functional Requirements?

Non-functional requirements define how the software fulfills its functional goals - not what the system will do but how the system will do it. These requirements define criteria that are used to evaluate the system’s performance, reliability, and maintainability. They define and impose external constraints on the software being developed, as well as on the development process. Non-functional requirements are presented as a specific aspect or general property of the system as a whole — as opposed to an exact function. Aspect = a feature linked to many parts of the system but not related to its primary function Properties = software characteristics, including integrity, reliability, accuracy, etc. Non-functional requirements can be divided into two main categories: performance and evolutionary qualities.

PERFORMANCE QUALITIES EVOLUTIONARY QUALITIES
Reliability Testability
Survivability Maintainability
Efficiency Extensibility
Integrity Scalability

Performance qualities are observed at runtime, whereas evolutionary qualities are embodied in the system’s static structure. Let’s take a closer look at some non-functional requirements examples presented in a paper published by the IEEE.

Performance

Efficiency: How well does it utilize resources?

Integrity/Security: How vulnerable is it to cyberattacks?

Reliability: What level of confidence can be placed in its functions?

Survivability: How well does the system perform under poor conditions?

Design

Correctness: How well does the system conform to requirements?

Verifiability: How easy is it to verify the system’s performance?

Maintainability: How easy is it to repair the software?

Adaptation

Expandability: How easy is it to upgrade or expand its capability/performance?

Interoperability: How easily does it interact with other systems?

Flexibility: How easy is it to change?

Portability: How easily transportable is the system?

Reusability: How easily can it be converted for use with another system?

Who Is Responsible for Preparing Non-Functional Requirements?

While functional requirements can be presented in a Functional Requirements Document (FRD), a Product Requirements Document (PRD) combines functional and non-functional ones. Non-functional requirements are usually defined by developers, software architects, and other technical experts, and the product manager typically prepares the PRD.

Comparison Table

To see the differences between functional and non-requirement functions at a glance, just check out the table below:

FUNCTIONAL REQUIREMENTS NON-FUNCTIONAL REQUIREMENTS
Helps the reader understand what functions the system will have Helps the reader understand how the system will perform
Explains the system’s necessary features Explains the way the system should behave
Identifies what the system must (and mustn’t) do Identifies how the software should do it
The system won’t work if these requirements aren’t fulfilled The system will still work if these requirements aren’t fulfilled
Ensures the software meets user requirements Ensures the software will meet user expectations
Straightforward to define Harder to define
Can be documented through a use case Can be documented as a quality attribute

Conclusion

Your software needs to fulfill both functional and non-functional requirements for optimal performance. The former enables it to run, while the latter enhances the user experience. Therefore, it’s important to work with a custom software development team that meticulously documents both kinds of requirements. Otherwise, you could end up with a disappointing product or a decent one that exceeds budget and time constraints. 

Requirement systems Software development Use case

Published at DZone with permission of Anastasiia Komendantova. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Top 10 Software Architecture Patterns to Follow in 2024
  • Authorization: Get It Done Right, Get It Done Early
  • Why Performance Projects Fail
  • Organizing Knowledge With Knowledge Graphs: Industry Trends

Partner Resources


Comments

ABOUT US

  • About DZone
  • Send feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: