Requirements analysis is an essential step in the development of solutions, especially for software systems, as it defines what the system should be able to do and how it should behave in different situations. One of the main aspects to be considered in requirements analysis is the distinction between functional and non-functional requirements.
There are many doubts about this distinction. Even in the specialized literature, we find conflicting definitions making learning difficult for analysts in training. Even experienced analysts carry vices and distortions that propagate in the requirements specifications of the corporate environment.
I recently published an article about the difference between Requirements and Business Rules with examples proposed by ChatGPT. The result was quite didactic and some people asked me to do the same with Functional and Non-Functional Requirements. Thus was born this article that you are reading now.
If you haven’t read it yet, read the article Chat GPT knows how to differentiate rules from requirements. Do you?
The question I asked ChatGPT to get a good example of the distinction between functional and non-functional requirements was:
Fabrício: Considering that ChatGPT is a software application, what are its functional and non-functional requirements?
I’ll show you ChatGPT’s answer in a moment. First, it is convenient to clarify the differences between these two types of requirements.
Definition of Functional and Non-Functional Requirements
- Business requirements: represent the needs of the organization as a whole.
- Stakeholder (or user) requirements: represent the needs of a specific class of people.
- Solution (or system) requirements: represent the needs of a solution that may be in development or modification.
Functional and non-functional requirements are part of the third level of requirements, the solution requirements. This level tends to be more granular and should support a delivery team with information about what is expected of the solution they will deliver.
Functional requirements refer to the specific functionality that the system must be able to perform. These requirements describe the actions the system must perform to meet business or user objectives. They describe the inputs required for the system to perform the action, the data handled, as well as the expected outputs.
Non-functional requirements, on the other hand, refer to the characteristics or qualities that the system must have to meet the expectations of users or stakeholders. They describe the attributes that the system must have, such as performance, reliability, security, usability, among others.
Examples of Functional and Non-Functional Requirements
To better understand the difference between functional and non-functional requirements, let’s consider this simple example suggested by ChatGPT about itself:
- Functional Requirement: ChatGPT must be able to answer questions and provide relevant information to users.
- Non-Functional Requirement: ChatGPT must be easy to use and provide a pleasant user experience.
In the first example, the functional requirement describes a specific functionality of the system, which is to answer questions and provide relevant information to users. The second example is a non-functional requirement that refers to the quality of the system, which is the ease of use and “pleasantness” of the user experience.
While there is a clear distinction between the two examples, it is important to point out that there may be an overlap between functional and non-functional requirements. For example, the functional requirement to answer questions and provide relevant information can also affect system usability and user experience.
The first list of ChatGPT requirements
My conversation with ChatGPT had to go through a few iterations to improve the requirements specification. In its first answer, I got a pretty generic requirements description like this example above, but then I could iterate and improve its specification.
See below how our first conversation went:
Fabrício: Considering that ChatGPT is a software application, what are its functional and non-functional requirements?
ChatGPT: As a natural language model, ChatGPT has no specific functional requirements as it is not an application in the traditional sense. However, there are non-functional requirements that must be taken into account to ensure that the model works effectively and efficiently. Here are some examples:
- Accuracy: ChatGPT must provide accurate and relevant answers to users’ questions and statements.
- Response speed: ChatGPT should be able to respond quickly to user requests, ideally in real-time.
- Scalability: ChatGPT must be able to handle a large number of user requests simultaneously, without losing quality or response speed.
- Reliability: ChatGPT must be highly reliable, ensuring that the answers provided are consistent and correct.
- Security: ChatGPT must be designed with adequate security measures to protect user information and avoid any kind of data breach.
- Adaptability: ChatGPT must be able to adapt to different users and contexts, providing personalized responses based on information provided by users.
- Ease of use: ChatGPT should be easy to use and intuitive, allowing users to interact with it efficiently and effectively.
- Availability: ChatGPT should be available 24/7 so that users can access it whenever they need it.
These are just a few examples of non-functional requirements that are important to ensure that ChatGPT works correctly and meets user expectations.
Note that in this first response, ChatGPT did not present functional requirements and the non-functional requirements were described quite comprehensively and ambiguously. With the exception of the availability requirement (24×7), no other presented a quantifiable metric that can be verified in a quality assurance process. Working with AI, as with any stakeholder, requirements typically emerge more broadly and need to be refined in successive iterations.
Refining the quality of non-functional requirements
I presented ChatGPT with what I actually expected and the answer seemed quite adequate:
Fabrício: These requirements carry a high degree of ambiguity. Could you rewrite these requirements in a verifiable way?
ChatGPT: Absolutely! Here are some more specific and verifiable rewrites of the non-functional requirements of ChatGPT:
- Accuracy: ChatGPT must have a hit rate of at least 95% when answering questions in a standardized test suite.
- Response speed: ChatGPT should provide a response in less than 1 second on 90% of user requests.
- Scalability: ChatGPT must be able to handle at least 1000 concurrent requests with an average response time of fewer than 2 seconds.
- Reliability: ChatGPT should have an error rate of less than 0.1% when providing responses to users.
- Security: ChatGPT must use end-to-end encryption and data protection to protect user information and pass regular security tests.
- Adaptability: ChatGPT must be able to customize responses based on information provided by users, such as past conversation history and language preferences.
- Ease of use: ChatGPT should be rated by at least 90% of users as easy to use and intuitive, with constant user feedback being incorporated for improvements.
- Availability: ChatGPT must be guaranteed to be available at least 99.9% of the time, with a contingency process to recover from failures in less than 30 minutes.
These more specific and verifiable rewrites can help ensure that ChatGPT is properly designed and tested to meet user requirements.
As you can see, it has improved a lot.
Examples of Functional Requirements
Although ChatGPT initially responded that it “is not an application in the traditional sense and because it is a natural language model it has no specific functional requirements”, be aware that every application has functional requirements. Functional requirements describe what the application does. If it had no functional requirements, the app would do nothing and then it wouldn’t be an app.
I insisted on identifying its functional requirements through the functionalities it offers to users.
Fabrício: Regarding ChatGPT not having functional requirements, I would like to discuss this further. Although its requirements are not specific, there are features. Could you list them, along with a description of each one?
ChatGPT: Of course, I will list some of the main features of ChatGPT:
- Natural language understanding: ChatGPT is able to understand and interpret questions and statements written in natural language, allowing for more natural communication between the user and the system.
- Response Generation: Based on user input, ChatGPT is able to generate relevant and coherent responses that match the user’s request.
- Continuous Learning: ChatGPT is designed to continually learn and improve by processing massive amounts of data and user feedback, allowing it to adapt to new situations and providing more accurate and personalized responses.
- Personalized responses: Based on the information provided by the user, ChatGPT is able to provide personalized responses tailored to the user’s individual needs.
- Sentiment analysis: ChatGPT is able to recognize and analyze the user’s emotional tone, allowing the user to respond appropriately and empathetically.
- Integration with other systems: ChatGPT can be integrated with other systems, such as virtual assistants and chatbots, to provide a more comprehensive and integrated conversational experience for the user.
- Automatic translation: ChatGPT can be programmed to provide responses in many different languages, allowing for broader and more accessible communication for users around the world.
These are just some of the main features of ChatGPT. Each of these contributes to the system’s overall ability to provide accurate, relevant, and personalized responses to users, making it a useful tool in many different contexts.
As you can see, ChatGPT does a lot of things and has quite complex functional requirements.
Classifying Requirements Appropriately
The criteria for classifying a requirement as functional or non-functional depend on the context and scope of the system. As I said before, in general, a functional requirement refers to a specific functionality of the system, that is, an action that the system must be able to perform. A non-functional requirement refers to a characteristic or quality of the system, such as performance, security, usability, reliability, etc.
Proper classification of functional and non-functional requirements is essential to ensure that all relevant system functionality and characteristics are considered during the requirements analysis process. However, it is not always easy to make this distinction, and there may be different ways of classifying the same requirement, depending on the context and scope of the system.
For example, a requirement describing “ease of use” might be considered a non-functional requirement in a general-purpose software system, but might be classified as a functional requirement in a software system aimed at visually impaired users, since the ease of use, in this case, refers to accessibility functionalities that the system must have, such as “verbalizing texts on the screen” or “navigating through the fields of a form using certain keys”.
Another example, a “security” requirement could be considered a non-functional requirement in a database management system, but could be considered a functional requirement in an access control system.
Likewise, a “performance” requirement might be classified as non-functional in a project management application but could be a functional requirement based on user-chosen settings in a gaming application.
To ensure proper classification of requirements, it is important that analysts understand the context of the project and the stakeholders involved. They should ask questions and explore the nature of the requirement to determine whether it is essentially something the system does (functional) or a performance or quality characteristic of the system (non-functional). In addition, it is important to involve stakeholders in classifying requirements to ensure that their needs and expectations are adequately represented and are clear to them.
In short, functional and non-functional requirements are essential for the success of any software system project. They represent different aspects of the system and therefore must be managed properly to ensure that stakeholder needs and expectations are met. Analysts should be aware of the differences between the two types of requirements and take a holistic approach to classify and properly manage these requirements.
That said, it is also important to point out that the classification of a requirement as functional or non-functional is not always clear and there may be an overlap between the two types of requirements. Therefore, it is important to carefully analyze each requirement and determine how best to classify it based on its specific context and scope.
Always try to evaluate how the specified requirements will be used by your target audience and try to specify them in a way that can best support their work.
Other articles on Artificial Intelligence
- Few people understood the highest breakthrough of Chat GPT
- Chat GPT knows how to differentiate rules from requirements. Do you?
- How can Chat GPT support Business Analysts?
- Chat GPT as a tool for business analysis
- Will Artificial Intelligence take my place?
- Interview with Chat GPT
For the production of this article, prompts and tests were carried out with the language model based on Artificial Intelligence:
- Chat GPT, OpenAI, https://chat.openai.com/chat
The image used in this article was created by the author using the support of the following AI image generation tool:
- Designer, Microsoft, https://designer.microsoft.com/