Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apresentação Agile Testing GTS-Ce

Apresentação Agile Testing GTS-Ce

Apresentação sobre Agile Testing no Grupo de Testes do Ceará.

Hedley Luna

October 20, 2014
Tweet

More Decks by Hedley Luna

Other Decks in Programming

Transcript

  1. Quem? ·Graduado em Ciência da Computação - UECE ·Mestrando em

    Ciência da Computação - UECE ·Líder Técnico INSERT-UECE ·Agilista desde 2010 ·@hedlabel ·[email protected]
  2. l “na unha” “print/alert/console“ Teste automatizado Teste unitário Teste de

    integração Teste de aceitação Test Driven Development Behaviour Driven Development Acceptance Test Driven Development Planilhas Checks Caixa Preta Caixa Branca Caixa Cinza etc… ! ! ! ! ! ! ! !
  3. –Agile Manifesto “The most efficient and effective method of conveying

    information to and within a development team is face-to-face conversation.”
  4. public static int calculaSoma(int a, int b) { return 0;

    } ! public static void main(String args[]) { System.out.println(“A soma deve ser 4. E foi: “ + calculaSoma(2,2); }
  5. Testes Automatizados ·Qualquer teste que rode sem intervenção humana(ou com

    pouca) ·Porque? Velocidade(mesmo nos de aceitação)! ·Teste de regressão! ·Feedback rápido e contínuo(Karma, Infinitest…!) ·Não garante qualidade de código! ·Não garante “Clean Code” ·Integração Contínua e Entrega Contínua
  6. Teste Unitário ·eXtreme Programming! ·Teste a menor porção de código

    possível ·Deve ser simples e conciso = Isolado = Desacoplado ·Rápida execução ·Devem ser poucos por classe
  7. ! ! List(1, 2, 3, 4, 5) should contain oneOf

    (5, 7, 9) ! ! it("should pop values in last-in-first-out order") { val stack = new Stack[Int] stack.push(1) stack.push(2) assert(stack.pop() === 2) assert(stack.pop() === 1) }
  8. @Mock private Gerenciador gerenciador; ! @Test public void NaoDeveExcluirCasoExistamDocumentosVinculados() {

    when(gerenciador.documentosDo(“fulano”)).thenReturn("existeDocumento"); when(gerenciadorSaidas.buscarSaidas()).thenCallRealMethod(); ! assertFalse(gerenciador.excluir("fulano")); }
  9. Teste de Integração lParafraseando Bruno Maomeh e Matheus Fechine: ·Se

    conversa com o DB, não é teste unitário ·Se comunica pela rede, não é teste unitário ·Se ele toca no sistema de arquivos, não é teste unitário ·Se ele não pode rodar junto de outro teste, não é teste unitário ·(Possível)Porta de entrada para testes em legados
  10. @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= {"classpath:applicationContext-test.xml"}) @Transactional public class UsuarioServiceTest { ! @Autowired

    private UsuarioService usuarioService; ! @Test public void deveCarregarUsuarioJoao(){ Usuario usuario = usuarioService.carregaUm(usuarioJoao()); assertEquals(usuarioJoao(), usuario); }
  11. Teste de Aceitação ·GUI testing ·Teste final de uma user

    story(ou similares) ·Lento, Custoso e Frágil ·Dev + Tester/Requisitos ·Caixa Preta
  12. TDD ·Testar !== TDD ·Baby Steps ·Rápido Feedback + Melhoria

    Contínua ·Design/Arquitetura de Código ·Regras de Negócio = “Pair Testing” === Compartilhamento de conhecimento
  13. BDD ·Similar ao TDD, mas numa linguagem mais próxima do

    negócio lVantagens do TDD + Traz o business mais perto do desenvolvedor ·Compartilhamento de Conhecimento ·É a “evolução do TDD”
  14. ! @Given("^Minha saudacao e \"([^\"]*)\"$") public void I_have_a_hello_app_with(String greeting) {

    hello = new Hello(greeting); } ! @When("^Eu executo minha aplicacao$") public void I_ask_it_to_say_hi() { hi = hello.sayHi(); } ! @Then("^Ela deveria responder com \"([^\"]*)\"$") public void it_should_answer_with(String expectedHi) { assertEquals(expectedHi, hi); }
  15. ATDD ·Dev + QA/Tester/Requisitos/Business ·Especificações criadas durante a criação do

    backlog: Time + PO + Stakeholders(se necessário) ·Top-Down ou Bottom-Up? Não há consenso. ·Ponto de Vista do Usuário != Ponto de Vista do Código, logo TDD ! == ATDD
  16. –Refactoring: Improving the Design of Existing Code, 1999 “The key

    is to test the areas that you are most worried about going wrong. That way you get the most benefit for your testing effort. It is better to write and run incomplete tests than not to run complete tests”
  17. –Agile Manifesto “Welcome changing requirements, even late in development. Agile

    processes harness change for the customer's competitive advantage.”
  18. Por que nasceu legado? ·"Mais fácil re-escrever que refatorar" ·“Na

    minha máquina funciona!” ·“Funciona, só não sei porque…" ·Difícil de evoluir! Cadê a segurança? ·Nova feature === +10 Bugs(e que você só detecta em produção) ·Error prone!