Questão
ID 66254Disciplina: Tecnologia da Informação
Assuntos: Erro, Falta, Falha e Defeito, Unidade, Componente, Módulo
Ano: 2025 Banca: PERFIL - ENADE Órgão: Primeiro Simulado Pnd
Numa disciplina de Engenharia de Software para um curso de Licenciatura em Computação, o professor Marco Antônio decide abordar o tema de qualidade de software, focando especificamente na prática de testes. Ele observa que os estudantes, ao desenvolverem seus projetos, geralmente realizam apenas testes manuais e exploratórios, verificando se o programa 'parece funcionar' nos casos mais óbvios. Para introduzir uma abordagem mais sistemática, ele apresenta o conceito da pirâmide de testes de Mike Cohn: "Uma estratégia de testes robusta e eficiente deve ser composta por uma grande base de testes de unidade, que são rápidos, baratos e isolam pequenas partes do código (funções, métodos); uma camada intermediária menor de testes de serviço ou integração, que verificam a colaboração entre componentes; e um topo muito pequeno de testes de interface do usuário (UI) ou ponta-a-ponta (E2E), que são lentos, frágeis e caros de manter. Equipes que invertem essa pirâmide, dependendo excessivamente de testes manuais na UI, acabam com um 'cone de sorvete de testes', que é instável e derrete facilmente sob a pressão da mudança." O professor então apresenta um trecho de código em Python de um projeto dos alunos: uma função `calcular_imc(peso, altura)` que deve retornar o Índice de Massa Corporal. O código contém uma falha sutil: ele não trata o caso em que a altura é zero, o que levaria a um erro de divisão por zero (`ZeroDivisionError`).
Considerando o conceito da pirâmide de testes e o cenário apresentado, avalie as seguintes afirmações sobre como testar a função `calcular_imc`:
I. Um teste de unidade automatizado seria a forma mais apropriada para detectar essa falha. O teste consistiria em chamar a função `calcular_imc` com os argumentos `(70, 0)` e verificar se ela lança a exceção `ZeroDivisionError` ou retorna um valor indicando erro, em vez de quebrar o programa.
II. A abordagem de testes manuais, onde o testador insere '0' no campo de altura da interface gráfica do programa, também encontraria o erro. Portanto, ela é tão eficaz e eficiente quanto o teste de unidade para este caso específico, tornando o teste automatizado redundante.
III. O teste de integração é o mais indicado para este cenário, pois ele verificaria a interação da função `calcular_imc` com o banco de dados do sistema para garantir que o resultado seja salvo corretamente, o que é mais importante do que testar a lógica interna da função.
É correto o que se afirma em: