Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
TDD: Evidenciando a importância do Teste - Revista Java Magazine 92
Neste artigo veremos como os testes podem agregar valor ao desenvolvimento através da utilização do TDD. Mitos, equívocos, vantagens e a comparação entre TDD e a metodologia tradicional são alguns dos assuntos abordados.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 92
A
metodologia ágil (em inglês Agile Modeling, ou AG) surgiu no início da década
de 70 após o fracasso de alguns grandes projetos de software. A deficiência no
gerenciamento das atividades, atrasos na entrega e sistemas que não refletiam a
verdadeira necessidade do cliente eram características habitualmente atribuídas
à metodologia tradicional.
A existência de uma crise do software não
foi um consenso entre os profissionais da área naquela época. Mas para tornar
possível a solução dos problemas enfrentados, foi criada
uma nova metodologia com uma abordagem bem diferenciada.
Os métodos ágeis são um conjunto de
práticas onde os princípios e valores são aplicados por profissionais de
software no dia a dia e seguidos como guia. Não é um processo que define
detalhadamente como criar um modelo, mas indica caminhos para obtenção de
melhores resultados.
A expressão “Métodos Ágeis” é conhecida há
muito tempo, porém, apenas recentemente começou a se tornar popular no Brasil.
Ser ágil geralmente é confundido com falta de controle e completa anarquia,
quando na verdade, ter agilidade, ao contrário do que parece, exige bastante organização.
O objetivo da Metodologia Ágil é acelerar o
desenvolvimento do software através do desenvolvimento de versões mínimas. Dessa
forma, as funcionalidades são desenvolvidas por partes, há uma interatividade direta
com o cliente e os testes são realizados em paralelo ao ciclo de
desenvolvimento.
Agilidade envolve disciplina e
trabalho coordenado, podendo tratar de projetos de vários segmentos e portes.
Agilidade é também a habilidade de criar e responder a mudanças com respeito ao
resultado financeiro do projeto em um turbulento ambiente de negócios.
Em 2001, um grupo de profissionais da
área de desenvolvimento de software se reuniu para discutir assuntos
relacionados à agilidade. Como consequência desse encontro, foram definidas
boas práticas para utilização dos Métodos Ágeis no gerenciamento de projetos.
Essas práticas foram denominadas “Manifesto Ágil”.
A metodologia ágil Extreme
Programming (XP) foi popularizada na década de 90 e tem sido muito utilizada
por pequenas e médias empresas nos Estados Unidos. Atualmente, também vem sendo
adotada com bastante frequência no Brasil.
O processo do XP é composto por
quatro atividades: Planejamento,
Projeto, Codificação e Teste; e por quatro diretrizes: Feedback, Comunicação, Simplicidade e Coragem. Existem ainda outros
pontos fortes na metodologia, citados na Figura
1, que também contribuem bastante para um ciclo de desenvolvimento de
software ágil.
Uma técnica que vem sendo muito utilizada em conjunto com a metodologia XP é o Test Driven Development (TDD), numa tradução livre Desenvolvimento Orientado a Testes. Ela não é uma técnica de teste como muitos pensam. É uma abordagem voltada para ajudar em todo o ciclo de desenvolvimento do software.
Como
funciona o TDD?
O Desenvolvimento Orientado a Testes
tem como objetivo obter um código “limpo”, com qualidade e que funcione. O
grande diferencial dessa técnica é que a evolução do código é gradativa (cresce
conforme o problema), além disso, os testes automatizados são escritos antes mesmo
de a solução existir.
O processo do TDD, conhecido como Teste-Codificação-Refatoração, ou Vermelho-Verde-Refatoração, demonstrado na Figura 2, é bastante simples e se baseia em três premissas básicas:
1. Escreva um teste
que falhe (vermelho):
é a fase inicial do ciclo. O primeiro passo antes de codificar é entender a
necessidade do cliente (o negócio). Neste momento, realize a análise dos
requisitos e ordene as funcionalidades que serão desenvolvidas de acordo com as
prioridades do cliente.
"
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
6 COMENTÁRIOS
Tem alguma coisa errada com o metodo compareTo da Listagem 3. Ele é implementado a toa porque o metodo utilizado efetivamente é compareTo da classe BigDecimal. Por favor, corrijam-me se eu estiver errado.
Valeu !
Moacir,
para corrigir esse problema é preciso apagar a implementação da interface Comparable, o método sobrescrito compareTo() da classe Conta e substituir o método sacar() pelo apresentado a seguir:
public BigDecimal sacar(BigDecimal montante) throws SaldoInsuficienteException {
if (new BigDecimal(getSaldo().doubleValue()){
@Override
public int compareTo(BigDecimal valor) {
if(getSaldo().doubleValue() == valor.doubleValue()) {
return 0;
} else if (getSaldo().doubleValue() >= valor.doubleValue()) {
return 1;
} else {
return -1;
}
}
}.compareTo(montante) == -1)
throw new SaldoInsuficienteException ("Saldo insuficiente para sacar");
setSaldo(getSaldo().subtract(montante) );
return getSaldo();
}
Repare que o método compareTo() foi declarado internamente na condicional "if" que recupera o saldo.
Sabemos que essa não é a melhor prática, mas o exemplo é apenas didático, como citado no artigo."



