O documento discute o desenvolvimento orientado a testes de aceitação, descrevendo como eles podem resolver problemas de comunicação e especificações obscuras. A ferramenta EasyAccept permite escrever testes de aceitação sob a forma de scripts executáveis que verificam as funcionalidades conforme implementadas. Um caso prático mostra como os testes reduziram bugs em dois sistemas desenvolvidos por estudantes.
2. Agenda
• O que queremos?
• Por que é tão difícil?
• Como resolvemos ou amenizamos esses
problemas?
• Um caso prático
• Conclusões
3. O que queremos?
• Produzir software de qualidade
• Desenvolver software que atenda os
requisitos do cliente
• Garantir que o time de desenvolvimento
está implementando o que foi especificado
4. Por que é tão difícil?
• Problemas de comunicação entre:
– cliente e analistas
– analistas e o time de desenvolvimento
• Especificação obscura
5. Como resolvemos ou amenizamos
esses problemas?
• Processo de desenvolvimento
• Ferramenta EasyAccept
• Vantagens
6. Processo de desenvolvimento
• As user stories são escritas na forma
testes de aceitação executáveis
• Um teste de aceitação consiste de um
script que é processado pela ferramenta
EasyAccept
• Os testes de aceitação são enviados para
o time de desenvolvimento
• Uma user story só é finalizada quando
seus testes estão passando
7. EasyAccept
Analistas
juntamente com
os clientes Façade
Script 1
(teste de aceitação)
Programa
Script 2
(teste de aceitação)
8. EasyAccept
• Scripts acessam métodos da Façade
• Asserções podem ser realizadas com os
seguintes comandos:
– expect
– expectError
– equalFiles
id = criarUsuario nome=zeca aniversario=12/12/1979
expect zeca getNome usuario=${id}
expect 12/12/1979 getAniversario usuario=${id}
expectError “Usuário não existe!” getNome usuario=blahblah
expectError “Data inválida!” criarUsuario nome=ze aniversario=12/a
9. EasyAccept
public class Facade {
...
public String criarUsuario( String nome , String aniversario )
throws CadastroInvalidoException {
return gerenciadorDeUsuarios.criarUsuario( nome , aniversario );
}
public String getNome( String usuarioId )
throws UsuarioInexistenteException {
return gerenciadorDeUsuarios.getNome( usuarioId );
}
public String getAniversario( String usuarioId )
throws UsuarioInexistenteException {
return gerenciadorDeUsuarios.getAniversario( usuarioId );
}
...
}
10. Vantagens
• Os testes de aceitação testam e dirigem o
desenvolvimento
• Análise executável
• Análise sincronizada com o
desenvolvimento
• Fácil perceber quais user stories foram
implementadas ou não
11. Vantagens
• Meio de comunicação mais preciso
• Redução do gap entre clientes e
desenvolvedores
• Evita explosão de funcionalidades não
requisitadas pelos clientes
• Permite o cliente fazer parte do time de
desenvolvimento
12. Um caso prático
• Dois sistemas em desenvolvimento
– SisRTM (em operação)
– SmartAction
• Desenvolvedores: alunos de graduação
do 5°/6° período
• Práticas utilizadas
– O desenvolvedor sempre conversa com o
escritor do teste antes de iniciar a
implementação
13. Um caso prático
• Resultados
– Poucos bugs encontrados
• Apenas três na lógica (em quatro meses de
operação)
• Demais na interface gráfica
– Quando um bug é encontrado:
• Comunicado ao escritor do teste
• Um teste é escrito imediatamente para isolar o bug
(TDD)