Entrevistas – Desenvolvedor Java – Testes #9

O tópico testes tem evoluído bastante nas últimas décadas e em muitas empresas tem sido um requisito na hora da contratação. Neste post irei descrever as minhas respostas para as perguntas que costumo fazer em entrevistas a respeito do tema “Testes”, mencionado no post #0 da série.

Motivação

Alguns tipos de teste têm se tornado requisito na caixa de ferramenta de desenvolvedores que trabalham para desenvolver aplicações em nível profissional. O tipo mais comum é o teste unitário, geralmente implementado com JUnit na linguagem java.

Além dos tipos, alguns conceitos de teste emergiram com força nas últimas duas décadas e são muito debatidos por comunidades de desenvolvimento de software, alguns dos mais conhecidos e solicitados são Test-Driven Development (TDD) e Behavior Driven Development (BDD).

Perguntas

  • O que é BDD?

Resposta: BDD significa Behavior Driven Development – ou em português, desenvolvimento orientado ao comportamento – e pode ser considerada como uma técnica do desenvolvimento de software ágil para que o time compreenda o comportamento de um usuário e crie cenários de teste a partir desse conhecimento, otimizando a prática do desenvolvimento orientado a testes (TDD).

  • Você utiliza TDD? Por onde começa? Qual é a sua maior dificuldade?

Resposta: Tenho o hábito de utilizar TDD somente quando considero ter um desenvolvimento de alta complexidade em regras de negócio, que geralmente envolvem diversos cenários de teste e cálculos com muitas variáveis, dificilmente utilizo em CRUDs simples. Nestes casos complexos, usar TDD me ajuda a construir um design de código mais flexível e simples, além de garantir o bom funcionamento do software. Quando utilizo em arquiteturas MVC, costumo começar pelas classes de domínio com suas regras, seguindo para camadas Service e Controller, criando e escrevendo os cenários de teste de acordo com o que foi definido em histórias de usuário ou utilizando o que já foi escrito por um analista de QA, já trabalhei com essas duas situações. A minha maior dificuldade geralmente está relacionada com o entendimento das regras de negócio e costuma ser o que toma mais tempo no desenvolvimento de soluções complexas, depois entra a ideia de isolar o domínio e refatorar para utilizar as melhores práticas de OO.

  • Você considera importante fazer testes? Quais? Por que?

Resposta: Cada teste tem a sua importância e razão para ser aplicado, para aplicar alguns tipos de teste dependerá de cada situação. Em geral, os mais comuns e que acredito que podem ser utilizados em diversos cenários são: teste unitário para garantir que cada parte do sistema está se comportando individualmente como deveria; de integração para garantir que essas mesmas partes funcionam em conjunto; aceitação manual para garantir qualidade visual com base nas definições de experiência do usuário e automatizado para validar fluxos e validações em telas; de performance para garantir velocidade; de concorrência para validar estabilidade e confiabilidade em múltiplos acessos; e carga para validar escalabilidade e volumetria.

  • O que você utiliza para realizar testes nas suas aplicações pessoais?

Resposta: Geralmente faço só unit test em aplicações pessoais e uso JUnit 5 com mockito para aplicações Java. Se fosse necessário fazer testes de integração e/ou aceitação, eu provavelmente usaria Spring Test, Cucumber, Selenium com Selenide ou RSpec e para testes de performance, carga e concorrência usaria JMeter.

Trabalhar com testes tem se mostrado uma necessidade nos dias atuais e pode trazer diversas vantagens e desafios. Saber quando utilizar testes de unidade, integração e aceitação com base na pirâmide de testes, reconhecendo seus níveis de cobertura e custos de implementação pode ser considerada uma boa opção. Além disso, conhecer os conceitos de TDD e BDD pode ser bastante útil no dia a dia e recomendo que você experimente-os em situações reais, mesmo que depois você decida que não quer utilizá-los na prática por algum motivo.

Para saber mais

Gostou? Foi útil? Concorda ou discorda de algum ponto? Comenta ai e vamos aprender mais juntos.

Espero que te ajude 😉

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s