Questão de Engenharia de Software — Engenharia de Requisitos — CESPE / CEBRASPE 2024
- Código
- ce403897
- Banca
- CESPE / CEBRASPE
- Órgão
- STJ
- Ano
- 2024
- Cargo
- AJ
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: Errado (E). A afirmação está incorreta porque, quando o desempenho é um requisito crítico, a arquitetura não deve ser projetada com componentes pequenos, autocontidos e coesos para permitir replicação e execução em diferentes processadores — essa descrição se aproxima de um estilo de arquitetura distribuída, mas a premissa de que componentes pequenos e coesos são a solução para desempenho crítico é uma generalização indevida. O desempenho é um requisito não funcional que afeta diretamente a arquitetura, mas a estratégia correta depende de análise específica, podendo envolver desde a distribuição de componentes até a otimização de comunicação e concorrência, não sendo uma regra universal.
O desempenho é um requisito não funcional (RNF), ou seja, uma restrição ou característica de qualidade que o sistema deve apresentar, como tempo de resposta, throughput, disponibilidade e escalabilidade. Diferentemente dos requisitos funcionais, que descrevem o que o sistema faz, os RNFs definem como o sistema opera e, por isso, têm impacto direto na arquitetura de software. A escolha da arquitetura é uma decisão de projeto que deve considerar os requisitos não funcionais mais críticos para o sistema em questão.
A afirmação do enunciado sugere que, para atender a um requisito crítico de desempenho, a arquitetura deve ser composta por componentes pequenos, autocontidos e coesos, permitindo replicação e execução em diferentes processadores. Essa descrição remete a um estilo arquitetural distribuído, como microsserviços ou arquitetura baseada em componentes, que pode facilitar a escalabilidade horizontal. No entanto, a premissa de que "componentes pequenos, autocontidos e coesos" são a solução universal para desempenho crítico é uma generalização indevida. A escolha do estilo arquitetural deve ser baseada em uma análise criteriosa dos requisitos, das restrições e do contexto do sistema. Em muitos casos, um desempenho crítico pode ser alcançado com uma arquitetura monolítica otimizada, com uso de cache, balanceamento de carga, ou com a distribuição de componentes específicos, sem necessariamente fragmentar o sistema em componentes pequenos.
A pegadinha da banca está em apresentar uma solução arquitetural específica como consequência direta e obrigatória de um requisito de desempenho crítico. O candidato pode ser levado a concordar com a afirmação por associar desempenho a distribuição e escalabilidade, mas a engenharia de software não estabelece essa relação de causalidade de forma tão simplista. A arquitetura deve ser projetada para atender aos requisitos, mas a forma de fazê-lo é uma decisão de projeto que depende de diversos fatores, como a natureza do sistema, o orçamento, a equipe e as restrições tecnológicas.
Para ilustrar, considere um sistema de processamento de transações financeiras com requisito crítico de baixa latência. Uma arquitetura de microsserviços com componentes pequenos e distribuídos pode introduzir overhead de comunicação entre serviços, aumentando a latência, em vez de reduzi-la. Nesse caso, uma arquitetura monolítica com otimização de código e uso de cache pode ser mais adequada. Por outro lado, um sistema de streaming de vídeo com requisito de alta escalabilidade pode se beneficiar de uma arquitetura distribuída com componentes replicáveis. Portanto, a decisão arquitetural é contextual e não pode ser reduzida a uma regra geral.
A distinção crucial é entre requisitos funcionais e não funcionais, e como cada um influencia a arquitetura. Requisitos funcionais definem as funcionalidades, enquanto os não funcionais definem as qualidades e restrições. O desempenho é um RNF que pode ser abordado de diversas formas na arquitetura, como:
Distribuição de componentes: para escalabilidade horizontal, mas com custo de comunicação.
Concorrência e paralelismo: para uso eficiente de múltiplos processadores.
Otimização de algoritmos e estruturas de dados: para reduzir o tempo de processamento.
Cache e balanceamento de carga: para melhorar o tempo de resposta.
A afirmação do enunciado é uma simplificação excessiva e, portanto, incorreta. A banca explora a confusão entre a necessidade de considerar o desempenho na arquitetura e a adoção de um estilo arquitetural específico como solução obrigatória.
A banca tenta fazer o candidato acreditar que desempenho crítico exige, necessariamente, componentes pequenos e distribuídos. Isso é uma generalização indevida: a arquitetura deve ser projetada para atender aos requisitos, mas a solução depende do contexto. Um sistema monolítico bem otimizado pode ter melhor desempenho que um distribuído mal projetado, devido ao overhead de comunicação.
A afirmação está errada porque estabelece uma relação de causalidade direta e obrigatória entre desempenho crítico e uma arquitetura com componentes pequenos, autocontidos e coesos, para permitir replicação e execução em diferentes processadores. Essa é uma solução arquitetural possível, mas não é a única nem necessariamente a mais adequada. O desempenho é um requisito não funcional que influencia a arquitetura, mas a escolha do estilo arquitetural deve ser baseada em análise criteriosa do contexto, podendo envolver diferentes estratégias, como otimização de código, uso de cache, concorrência, ou distribuição seletiva de componentes. A afirmação é uma generalização indevida, pois não há uma regra universal que determine essa solução para todo sistema com requisito crítico de desempenho.
Gabarito: letra E (Errado).
Link permanente: /questoes/ce403897