Top Banner
Não tem teste? Já nasceu legado. Hedley Luna
61

Palestra Ministrada no 3 Encontro do GTS-CE

Jun 14, 2015

Download

Software

Hedley Luna

Palestra sobre Agile Testing no 3o Encontro do Grupo de Testes do Ceará.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Palestra Ministrada no 3 Encontro do GTS-CE

Não tem teste? Já nasceu legado.Hedley Luna

Page 2: Palestra Ministrada no 3 Encontro do GTS-CE

Quem?

Graduado em Ciência da Computação - UECEMestrando em Ciência da Computação - UECELíder Técnico INSERT-UECEAgilista desde 2010@[email protected]

Page 3: Palestra Ministrada no 3 Encontro do GTS-CE
Page 4: Palestra Ministrada no 3 Encontro do GTS-CE

Agora sim...

Page 5: Palestra Ministrada no 3 Encontro do GTS-CE

Mas… o que é teste?

Page 6: Palestra Ministrada no 3 Encontro do GTS-CE

– Dicionário Aurélio

“Averiguação do funcionamento de algo.”

Page 7: Palestra Ministrada no 3 Encontro do GTS-CE

Mas, como?

Page 8: Palestra Ministrada no 3 Encontro do GTS-CE

“na unha”“print/alert/console“Teste automatizadoTeste unitárioTeste de integraçãoTeste de aceitaçãoTest Driven DevelopmentBehaviour Driven DevelopmentAcceptance Test Driven DevelopmentPlanilhasChecksCaixa PretaCaixa BrancaCaixa Cinzaetc…

Page 9: Palestra Ministrada no 3 Encontro do GTS-CE

Mas...

Page 10: Palestra Ministrada no 3 Encontro do GTS-CE

Tá pronto!(falta só testar….)

Page 11: Palestra Ministrada no 3 Encontro do GTS-CE

Mas, vale a pena…

Page 12: Palestra Ministrada no 3 Encontro do GTS-CE
Page 13: Palestra Ministrada no 3 Encontro do GTS-CE
Page 14: Palestra Ministrada no 3 Encontro do GTS-CE
Page 15: Palestra Ministrada no 3 Encontro do GTS-CE
Page 16: Palestra Ministrada no 3 Encontro do GTS-CE
Page 17: Palestra Ministrada no 3 Encontro do GTS-CE
Page 18: Palestra Ministrada no 3 Encontro do GTS-CE
Page 19: Palestra Ministrada no 3 Encontro do GTS-CE
Page 20: Palestra Ministrada no 3 Encontro do GTS-CE
Page 21: Palestra Ministrada no 3 Encontro do GTS-CE
Page 22: Palestra Ministrada no 3 Encontro do GTS-CE
Page 23: Palestra Ministrada no 3 Encontro do GTS-CE
Page 24: Palestra Ministrada no 3 Encontro do GTS-CE
Page 25: Palestra Ministrada no 3 Encontro do GTS-CE
Page 26: Palestra Ministrada no 3 Encontro do GTS-CE

–Agile Manifesto

“Continuous attention to technical excellence and good design enhances agility.”

Page 27: Palestra Ministrada no 3 Encontro do GTS-CE

Coisa de dev?

Page 28: Palestra Ministrada no 3 Encontro do GTS-CE

NÃO!

Page 29: Palestra Ministrada no 3 Encontro do GTS-CE

“Pair Testing"

Page 30: Palestra Ministrada no 3 Encontro do GTS-CE

–Agile Manifesto

“The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”

Page 31: Palestra Ministrada no 3 Encontro do GTS-CE

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);

}

Page 32: Palestra Ministrada no 3 Encontro do GTS-CE

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

Page 33: Palestra Ministrada no 3 Encontro do GTS-CE

“Padrão" de Testes

Page 34: Palestra Ministrada no 3 Encontro do GTS-CE

Teste Unitário

eXtreme Programming!Teste a menor porção de código possívelDeve ser simples e conciso = Isolado = DesacopladoRápida execuçãoDevem ser poucos por classe

Page 35: Palestra Ministrada no 3 Encontro do GTS-CE

val stack = new Stack[Int] stack.push(1) stack.push(2)

assert(stack.pop() === 2) assert(stack.pop() === 1) }List(1, 2, 3, 4, 5) should contain oneOf (5, 7, 9)

it("should pop values in last-in-first-out order") {

Page 36: Palestra Ministrada no 3 Encontro do GTS-CE

Mocks

Facilitar os testesAbstrair implementações complexasMock !== Fake Object !== StubMock = ComportamentoLegados!

Page 37: Palestra Ministrada no 3 Encontro do GTS-CE

@Mock private Gerenciador gerenciador;

NaoDeveExcluirCasoExistamDocumentosVinculados() {when(gerenciador.documentosDo(“fulano”)).thenReturn("existeDocumento");when(gerenciadorSaidas.buscarSaidas()).thenCallRealMethod();

assertFalse(gerenciador.excluir("fulano"));}@Test public void

Page 38: Palestra Ministrada no 3 Encontro do GTS-CE

Teste de Integração

Parafraseando Bruno Maomeh e Matheus Fechine:Se conversa com o DB, não é teste unitárioSe comunica pela rede, não é teste unitárioSe ele toca no sistema de arquivos, não é teste unitárioSe ele não pode rodar junto de outro teste, não é teste unitário

(Possível)Porta de entrada para testes em legados

Page 39: Palestra Ministrada no 3 Encontro do GTS-CE

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations= {"classpath:applicationContext-test.xml"})@Transactionalpublic class UsuarioServiceTest {

private UsuarioService usuarioService;

@Test public void deveCarregarUsuarioJoao(){Usuario usuario = usuarioService.carregaUm(usuarioJoao());assertEquals(usuarioJoao(), usuario);

}

@Autowired

Page 40: Palestra Ministrada no 3 Encontro do GTS-CE

Teste de Aceitação

GUI testingTeste final de uma user story(ou similares)Lento, Custoso e FrágilDev + Tester/RequisitosCaixa Preta

Page 41: Palestra Ministrada no 3 Encontro do GTS-CE

it('should add on service', function(){ element(by.model('service.identifier')).sendKeys('security'); element(by.model('service.function')).sendKeys('Security'); selectDropdownByNumber(element(by.id('serviceType')), 1); element(by.id('utilizationLevel')).sendKeys(protractor.Key.ENTER); element(by.id('btnAdd')).click(); services = element.all(by.repeater('row in renderedRows')); expect(services.count()).toEqual(QUANTITY_SERVICES + 1); });

Page 42: Palestra Ministrada no 3 Encontro do GTS-CE

TDD

Testar !== TDDBaby StepsRápido Feedback + Melhoria ContínuaDesign/Arquitetura de CódigoRegras de Negócio = “Pair Testing” === Compartilhamento de conhecimento

Page 43: Palestra Ministrada no 3 Encontro do GTS-CE

Fluxo TDD

Não escrevo código novo enquanto um teste não quebrar

Page 44: Palestra Ministrada no 3 Encontro do GTS-CE

BDD

Similar ao TDD, mas numa linguagem mais próxima do negócioVantagens do TDD + Traz o business mais perto do desenvolvedorCompartilhamento de ConhecimentoÉ a “evolução do TDD”

Page 45: Palestra Ministrada no 3 Encontro do GTS-CE

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);}@Given("^Minha saudacao e \"([^\"]*)\"$")

Page 46: Palestra Ministrada no 3 Encontro do GTS-CE
Page 47: Palestra Ministrada no 3 Encontro do GTS-CE
Page 48: Palestra Ministrada no 3 Encontro do GTS-CE

ATDD

Dev + QA/Tester/Requisitos/BusinessEspecificaçõ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

Page 49: Palestra Ministrada no 3 Encontro do GTS-CE
Page 50: Palestra Ministrada no 3 Encontro do GTS-CE

Mais importante é… O que NÃO TESTAR!

Page 51: Palestra Ministrada no 3 Encontro do GTS-CE

–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”

Page 52: Palestra Ministrada no 3 Encontro do GTS-CE

–Agile Manifesto

“Simplicity--the art of maximizing the amount of work not done--is essential.”

Page 53: Palestra Ministrada no 3 Encontro do GTS-CE

“Novo” requisito =Novo Teste

= Refatoração

Page 54: Palestra Ministrada no 3 Encontro do GTS-CE

–Agile Manifesto

“Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.”

Page 55: Palestra Ministrada no 3 Encontro do GTS-CE

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!

Page 56: Palestra Ministrada no 3 Encontro do GTS-CE

Leituras Recomendadas

Page 57: Palestra Ministrada no 3 Encontro do GTS-CE

Livro de Cabeceira

Page 58: Palestra Ministrada no 3 Encontro do GTS-CE

Testes

Page 59: Palestra Ministrada no 3 Encontro do GTS-CE

Refactoring

Page 60: Palestra Ministrada no 3 Encontro do GTS-CE
Page 61: Palestra Ministrada no 3 Encontro do GTS-CE