Requisitos Funcionais e Requisitos Não Funcionais do Surpreendente ChatGPT

Aprenda a distinguir entre requisitos funcionais e requisitos não funcionais para uma especificação de software.

A análise de requisitos é uma etapa essencial no desenvolvimento de soluções, em especial para sistemas de software, pois é por meio dela que se define o que o sistema deve ser capaz de fazer e como deve ser o seu comportamento em diferentes situações. Um dos principais aspectos a serem considerados na análise de requisitos é a distinção entre requisitos funcionais e requisitos não funcionais.

Requisitos Funcionais e Requisitos Não Funcionais, criado com IA usando o Microsoft Designer
Functional vs Non-Functional Requirements, criado pelo autor com IA usando o Microsoft Designer

Há muitas dúvidas sobre essa distinção. Mesmo na literatura especializada são encontradas definições um pouco conflitantes, tornando difícil o aprendizado por analistas em formação. Mesmo analistas experientes carregam vícios e distorções que vão se propagando nas especificações de requisitos do ambiente corporativo.

Recentemente publiquei um artigo sobre a diferença entre Requisitos e Regras de Negócio com exemplos propostos pelo Chat GPT. O resultado ficou bastante didático e algumas pessoas me pediram para fazer o mesmo com Requisitos Funcionais e Não Funcionais. Assim nasceu este artigo que você está lendo agora.

O Chat GPT sabe diferenciar Regras de Requisitos. Você sabe?

Caso ainda não tenha lido, leia também O Chat GPT sabe diferenciar Regras de Requisitos. Você sabe?

A pergunta que fiz ao ChatGPT para obter um bom exemplo da distinção entre requisitos funcionais e requisitos não funcionais foi:

Fabrício: Considerando que o ChatGPT é um aplicativo de software, quais são os seus requisitos funcionais e não funcionais?

Vou mostrar sua resposta daqui a pouco. Antes convém esclarecer as diferenças entre esses dois tipos de requisitos.

Definição de Requisitos Funcionais e Requisitos Não Funcionais

Os principais institutos que tratam do tema Requisitos (IIBA, IREB) os dividem inicialmente em 3 níveis de necessidades:

  1. Requisitos de negócio: representam as necessidades da organização como um todo.
  2. Requisitos de stakeholder (ou de usuário): representam as necessidades de uma classe específica de pessoas.
  3. Requisitos da solução (ou do sistema): representam necessidades de uma solução que pode estar sendo desenvolvida ou modificada.

Os requisitos funcionais e não funcionais fazem parte do terceiro nível de requisitos, os requisitos da solução. Este nível tende a ser mais detalhado e deve suportar uma equipe de entrega com informações sobre o que é esperado da solução que irão entregar.

Os requisitos funcionais referem-se às funcionalidades específicas que o sistema deve ser capaz de realizar. Esses requisitos descrevem as ações que o sistema deve executar para atender aos objetivos do negócio ou do usuário. Eles descrevem as entradas necessárias para que o sistema realize a ação, os dados manipulados, bem como as saídas esperadas.

Já os requisitos não funcionais referem-se às características ou qualidades que o sistema deve possuir para atender às expectativas dos usuários ou dos stakeholders. Eles descrevem os atributos que o sistema deve ter, tais como desempenho, confiabilidade, segurança, usabilidade, entre outros.

Exemplos de Requisitos Funcionais e Requisitos Não Funcionais

Para entender melhor a diferença entre requisitos funcionais e não funcionais, vamos considerar este exemplo simples sugerido pelo ChatGPT a respeito dele mesmo:

  • Requisito Funcional: O ChatGPT deve ser capaz de responder a perguntas e fornecer informações relevantes aos usuários.
  • Requisito Não Funcional: O ChatGPT deve ser fácil de usar e oferecer uma experiência agradável ao usuário.

No primeiro exemplo, o requisito funcional descreve uma funcionalidade específica do sistema, que é responder a perguntas e fornecer informações relevantes aos usuários. Já o segundo exemplo é um requisito não funcional que se refere à qualidade do sistema, que é a facilidade de uso e “agradabilidade” da experiência do usuário.

Embora haja uma clara distinção entre os dois exemplos, é importante ressaltar que pode haver uma sobreposição entre requisitos funcionais e não funcionais. Por exemplo, o requisito funcional de responder a perguntas e fornecer informações relevantes também pode afetar a usabilidade do sistema e a experiência do usuário.

A primeira lista de requisitos do ChatGPT

Minha conversa com o ChatGPT precisou passar por algumas iterações para melhorar a especificação de requisitos. Na primeira resposta que ele me deu, recebi uma descrição de requisitos bastante genérica como este exemplo acima, mas depois pude iterar e melhorar a sua especificação.

Veja abaixo como foi a nossa primeira conversa:

Fabrício: Considerando que o ChatGPT é um aplicativo de software, quais são os seus requisitos funcionais e não funcionais?

ChatGPT: Como um modelo de linguagem natural, o ChatGPT não tem requisitos funcionais específicos, pois não é um aplicativo no sentido tradicional. No entanto, há requisitos não funcionais que devem ser levados em consideração para garantir que o modelo funcione de maneira eficaz e eficiente. Aqui estão alguns exemplos:

Requisitos não funcionais:

  • Precisão: o ChatGPT deve fornecer respostas precisas e relevantes para as perguntas e declarações dos usuários.
  • Velocidade de resposta: o ChatGPT deve ser capaz de responder rapidamente às solicitações do usuário, idealmente em tempo real.
  • Escalabilidade: o ChatGPT deve ser capaz de lidar com um grande número de solicitações de usuários simultaneamente, sem perder a qualidade ou a velocidade de resposta.
  • Confiabilidade: o ChatGPT deve ser altamente confiável, garantindo que as respostas fornecidas sejam consistentes e corretas.
  • Segurança: o ChatGPT deve ser projetado com medidas de segurança adequadas para proteger as informações do usuário e evitar qualquer tipo de violação de dados.
  • Adaptabilidade: o ChatGPT deve ser capaz de se adaptar a diferentes usuários e contextos, fornecendo respostas personalizadas com base em informações fornecidas pelos usuários.
  • Facilidade de uso: o ChatGPT deve ser fácil de usar e intuitivo, permitindo que os usuários interajam com ele de maneira eficiente e eficaz.
  • Disponibilidade: o ChatGPT deve estar disponível 24 horas por dia, 7 dias por semana, para que os usuários possam acessá-lo sempre que precisarem.

Esses são apenas alguns exemplos de requisitos não funcionais que são importantes para garantir que o ChatGPT funcione corretamente e atenda às expectativas dos usuários.

Veja que nesta primeira resposta, o ChatGPT não apresentou requisitos funcionais e os requisitos não funcionais foram descritos de forma bastante abrangente e ambígua. Com exceção do requisito de disponibilidade (24×7), nenhum outro apresenta uma métrica quantificável para que possa ser verificado num processo de garantia de qualidade. Para trabalhar com a IA, assim como com qualquer stakeholder, os requisitos normalmente surgem de forma mais ampla e precisam ser refinados em sucessivas iterações.

Refinando a qualidade dos requisitos não funcionais

Eu apresentei ao ChatGPT o que de fato eu esperava que ele me fornecesse e a resposta me pareceu bastante adequada:

Fabrício: Esses requisitos carregam um alto grau de ambiguidade. Você conseguiria reescrever esses requisitos de uma forma verificável?

ChatGPT: Com certeza! Aqui estão algumas reescritas mais específicas e verificáveis ​​dos requisitos não funcionais do ChatGPT:

  • Precisão: o ChatGPT deve ter uma taxa de acerto de pelo menos 95% ao responder a perguntas em um conjunto de teste padronizado.
  • Velocidade de resposta: o ChatGPT deve fornecer uma resposta em menos de 1 segundo em 90% das solicitações do usuário.
  • Escalabilidade: o ChatGPT deve ser capaz de lidar com pelo menos 1000 solicitações simultâneas com um tempo médio de resposta de menos de 2 segundos.
  • Confiabilidade: o ChatGPT deve ter uma taxa de erro de menos de 0,1% ao fornecer respostas aos usuários.
  • Segurança: o ChatGPT deve usar criptografia de ponta a ponta e proteção de dados para proteger informações de usuários, além de passar em testes regulares de segurança.
  • Adaptabilidade: o ChatGPT deve ser capaz de personalizar respostas com base em informações fornecidas pelos usuários, como histórico de conversas anteriores e preferências de idioma.
  • Facilidade de uso: o ChatGPT deve ser avaliado por pelo menos 90% dos usuários como fácil de usar e intuitivo, com feedback constante dos usuários sendo incorporado para melhorias.
  • Disponibilidade: o ChatGPT deve ter uma disponibilidade garantida de pelo menos 99,9% do tempo, com um processo de contingência para recuperação de falhas em menos de 30 minutos.

Essas reescritas mais específicas e verificáveis ​​podem ajudar a garantir que o ChatGPT seja projetado e testado de maneira adequada para atender aos requisitos do usuário.

Como você pode ver, melhorou bastante.

Exemplos de Requisitos Funcionais

Embora o ChatGPT inicialmente tenha respondido que ele “não é um aplicativo no sentido tradicional e que por ser um modelo de linguagem natural ele não tem requisitos funcionais específicos”, saiba que todo aplicativo tem requisitos funcionais. Os requisitos funcionais descrevem o que o aplicativo faz. Se não tivesse requisitos funcionais, o aplicativo não faria nada e então não seria um aplicativo.

Eu insisti nisso com ele para identificar seus requisitos funcionais através das funcionalidades que ele oferece aos seus usuários.

Fabrício: Sobre o ChatGPT não ter requisitos funcionais, eu gostaria de discutir isso melhor. Embora não sejam requisitos específicos, existem funcionalidades. Você poderia listá-las, juntamente com uma descrição de cada uma delas?

ChatGPT: Com certeza, vou listar algumas das principais funcionalidades do ChatGPT:

  1. Compreensão de linguagem natural: O ChatGPT é capaz de compreender e interpretar perguntas e declarações escritas em linguagem natural, permitindo uma comunicação mais natural entre o usuário e o sistema.
  2. Geração de respostas: Com base na entrada do usuário, o ChatGPT é capaz de gerar respostas relevantes e coerentes que correspondam à solicitação do usuário.
  3. Aprendizado contínuo: O ChatGPT é projetado para aprender e melhorar continuamente por meio do processamento de grandes quantidades de dados e feedback do usuário, permitindo que ele se adapte a novas situações e fornecendo respostas mais precisas e personalizadas.
  4. Respostas personalizadas: Com base nas informações fornecidas pelo usuário, o ChatGPT é capaz de fornecer respostas personalizadas e adaptadas às necessidades individuais do usuário.
  5. Análise de sentimentos: O ChatGPT é capaz de reconhecer e analisar o tom emocional do usuário, permitindo que ele responda de maneira apropriada e empática.
  6. Integração com outros sistemas: O ChatGPT pode ser integrado com outros sistemas, como assistentes virtuais e chatbots, para fornecer uma experiência de conversação mais abrangente e integrada para o usuário.
  7. Tradução automática: O ChatGPT pode ser programado para fornecer respostas em vários idiomas diferentes, permitindo uma comunicação mais ampla e acessível para usuários em todo o mundo.

Essas são apenas algumas das funcionalidades principais do ChatGPT. Cada uma delas contribui para a capacidade geral do sistema de fornecer respostas precisas, relevantes e personalizadas para os usuários, tornando-o uma ferramenta útil em muitos contextos diferentes.

Como você pode ver, o ChatGPT faz um monte de coisas e tem requisitos funcionais bastante complexos.

Classificando Requisitos de Forma Adequada

Os critérios para classificar um requisito como sendo funcional ou não funcional dependem do contexto e do escopo do sistema. Como já disse, em geral, um requisito funcional se refere a uma funcionalidade específica do sistema, ou seja, uma ação que o sistema deve ser capaz de realizar. Já um requisito não funcional se refere a uma característica ou qualidade do sistema, como desempenho, segurança, usabilidade, confiabilidade, etc.

A classificação adequada de requisitos funcionais e não funcionais é essencial para garantir que todas as funcionalidades e características relevantes do sistema sejam consideradas durante o processo de análise de requisitos. No entanto, nem sempre é fácil fazer essa distinção, e pode haver diferentes formas de classificar um mesmo requisito, dependendo do contexto e do escopo do sistema.

Por exemplo, um requisito que descreve uma “facilidade de uso” pode ser considerado um requisito não funcional em um sistema de software de uso geral, mas pode ser classificado como um requisito funcional em um sistema de software voltado para usuários com deficiência visual, uma vez que a facilidade de uso nesse caso se refere a recursos de acessibilidade que o sistema deve possuir, como “verbalizar textos da tela” ou então “navegar pelos campos de um formulário utilizando determinadas teclas”.

Outro exemplo, um requisito de “segurança” pode ser considerado um requisito não funcional em um sistema de gestão de banco de dados, mas pode ser considerado um requisito funcional em um sistema de controle de acesso.

Da mesma forma, um requisito de “desempenho” pode ser classificado como não funcional em um aplicativo de gerenciamento de projetos, mas pode ser um requisito funcional baseado em configurações escolhidas pelo usuário em um aplicativo de jogos.

Para garantir uma classificação adequada dos requisitos, é importante que os analistas entendam o contexto do projeto e dos stakeholders envolvidos. Eles devem fazer perguntas e explorar a natureza do requisito para determinar se ele é essencialmente algo que o sistema faz (funcional) ou uma característica de desempenho ou de qualidade do sistema (não funcional). Além disso, é importante envolver os stakeholders na classificação dos requisitos para garantir que suas necessidades e expectativas sejam adequadamente representadas e estejam claras para eles.

Conclusão

Em resumo, requisitos funcionais e não funcionais são essenciais para o sucesso de qualquer projeto de software. Eles representam diferentes aspectos do sistema e, portanto, devem ser gerenciados adequadamente para garantir que as necessidades e expectativas dos stakeholders sejam atendidas. Os analistas devem estar cientes das diferenças entre os dois tipos de requisitos e adotar uma abordagem holística para classificar e gerenciar adequadamente esses requisitos.

Dito isso, é importante ressaltar também que a classificação de um requisito como sendo funcional ou não funcional nem sempre é clara e pode haver sobreposição entre os dois tipos de requisitos. Por isso, é importante analisar cuidadosamente cada requisito e determinar qual é a melhor forma de classificá-lo com base em seu contexto e escopo específicos.

Procure sempre avaliar como os requisitos especificados serão utilizados pelo seu público alvo e procure especificá-los da maneira que melhor poderá apoiar o seu trabalho.


Outros artigos sobre Inteligência Artificial

Referências

Para a produção deste artigo foram realizadas consultas e testes com o modelo de linguagem baseados em Inteligência Artificial:

A imagem usada neste artigo foi criada pelo autor usando o apoio da seguinte ferramenta de geração de imagem: