Return to Video

5.8 - 5.11 - Cobertura,Teste Unitário x Integração, Outros Conceitos de Testes, e Perspectivas

  • 0:01 - 0:02
    Investimos bastante tempo
  • 0:02 - 0:03
    nas últimas aulas
  • 0:03 - 0:06
    falando sobre diferente tipos de teste
  • 0:06 - 0:08
    sobre teste unitário versus teste integrado
  • 0:08 - 0:10
    sobre como você pode usar RSpec
  • 0:10 - 0:12
    para de fato isolar as partes do seu código que você quer testar
  • 0:12 - 0:15
    você também sabe, devido ao "Homework 3",
  • 0:15 - 0:18
    e outras coisas, que fizemos BDD
  • 0:18 - 0:21
    onde utilizamos, principalmente, o Cucumber para transformar 'User Stories'
  • 0:21 - 0:23
    em testes de integração e aceitação
  • 0:23 - 0:26
    Você viu testes em alguns níveis diferentes
  • 0:26 - 0:28
    e o objetivo aqui é meio que fazer algums comentários
  • 0:28 - 0:30
    para relembrar um pouquinho
  • 0:30 - 0:33
    e conseguir ter uma visão mais abrangente
  • 0:33 - 0:35
    Isso meio que abrange o material
  • 0:35 - 0:37
    de três ou quato seções do livro
  • 0:37 - 0:40
    e eu gostaria the salientar os pontos importantes nas aulas
  • 0:40 - 0:41
    Uma questão que vem...
  • 0:41 - 0:43
    Eu tenho certeza que veio para todos vocês
  • 0:43 - 0:45
    quando vocês faziam o "homework"
  • 0:45 - 0:46
    é: "Quanto teste é o suficiente? "
  • 0:46 - 0:48
    E, tristemente, por um long período
  • 0:48 - 0:51
    se você perguntasse isto para a indústria
  • 0:51 - 0:52
    a resposta seria basicamente
  • 0:52 - 0:53
    "Nós temos uma data de lançamento limite,
  • 0:53 - 0:55
    assim, quanto conseguirmos fazer de teste
  • 0:55 - 0:57
    é o quanto temos que fazer de teste."
  • 0:57 - 0:58
    Certo? O quanto de tempo tiver.
  • 0:58 - 1:00
    Você sabe... isto é meio sarcástico
  • 1:00 - 1:01
    obviamente nada bom
  • 1:01 - 1:03
    Você pode fazer algo melhor, não?
  • 1:03 - 1:04
    Existem algumas medidas estáticas
  • 1:04 - 1:06
    como quantas linhas de código sua aplicação tem
  • 1:06 - 1:08
    e quantas linhas de teste você tem?
  • 1:08 - 1:10
    E não é raro na indústria
  • 1:10 - 1:13
    que para um pedaço de software bem testado
  • 1:13 - 1:15
    o número de linhas de teste
  • 1:15 - 1:18
    vá muito além do número de linhas de código
  • 1:18 - 1:20
    Assim, multiplicadores inteiros não são tão raros
  • 1:20 - 1:22
    E eu acho que mesmo para
  • 1:22 - 1:23
    código de pesquisa ou trabalho escolar
  • 1:23 - 1:27
    a proporção de, sei lá, talvez 1.5 não é absurda
  • 1:27 - 1:30
    assim uma vez e meia a quantidade de código de teste
  • 1:30 - 1:32
    para o código de aplicação
  • 1:32 - 1:34
    E em uma boa quantidade de sistemas de produção
  • 1:34 - 1:35
    onde eles realmente se importam com teste
  • 1:35 - 1:37
    é muito maior que isso
  • 1:37 - 1:38
    Então, talvez uma pergunta melhor a se fazer
  • 1:38 - 1:39
    ao invés de dizer: Quanto teste é suficiente?
  • 1:39 - 1:42
    seria melhor: Quão bom é o teste que estou fazendo agora?
  • 1:42 - 1:44
    Qão completo ele é?
  • 1:44 - 1:46
    Mais tarde neste semestre
  • 1:46 - 1:47
    O Professor Sen falará
  • 1:47 - 1:48
    um pouquinho sobre métodos formais
  • 1:48 - 1:51
    e quais são as fronteiras para teste e depuração
  • 1:51 - 1:53
    Mas a algumas coisas podemos falar agora
  • 1:53 - 1:54
    baseado no que você já sabe
  • 1:54 - 1:58
    sobre conceitos básicos de cobertura de testes
  • 1:58 - 2:00
    e embora eu diria
  • 2:00 - 2:01
    sei lá, temos falado o tempo todo
  • 2:01 - 2:03
    que métodos formais não funcionam para grandes sistemas
  • 2:03 - 2:05
    Eu penso que esta afirmação, em minha opinião pessoal
  • 2:05 - 2:07
    é hoje muito menos verdade do que costumava ser
  • 2:07 - 2:09
    Eu penso que existem alguns lugares específicos
  • 2:09 - 2:11
    especialmente em teste e depuração
  • 2:11 - 2:13
    onde métodos formais estão hoje fazendo rápido progresso
  • 2:13 - 2:16
    e Koushik Sen é um dos líderes nisso
  • 2:16 - 2:18
    Então, você terá a oportunidade de ouvir mais sobre isso depois
  • 2:18 - 2:21
    para agora, eu acho mais prático
  • 2:21 - 2:23
    falarmos sobre medir a cobertura
  • 2:23 - 2:24
    porque isso é a coisa mais importante
  • 2:24 - 2:26
    em termos de como você será avaliado
  • 2:26 - 2:29
    se você estiver fazendo isso pra valer
  • 2:29 - 2:30
    Então o que seria algo básico?
  • 2:30 - 2:31
    Aqui está uma classe bem simples que você pode usar
  • 2:31 - 2:33
    para falar sobre diferentes maneiras de medir
  • 2:33 - 2:35
    como nossos testes cobrem o código
  • 2:35 - 2:37
    e existem alguns níveis diferentes
  • 2:37 - 2:38
    com diferentes terminologias
  • 2:38 - 2:41
    Não é algo universal entre todas as escolas de software
  • 2:41 - 2:43
    mas um grupo comum de terminologias
  • 2:43 - 2:44
    que o livro expõe
  • 2:44 - 2:45
    e que poderíamos falar é S0
  • 2:45 - 2:47
    onde você deve chamar todos os métodos uma vez
  • 2:47 - 2:50
    De tal modo que, se você invocar 'foo', e invocar 'bar'
  • 2:50 - 2:52
    Isto é cobertura S0: não tão completo
  • 2:52 - 2:55
    Um pouco mais rigoroso é o S1
  • 2:55 - 2:56
    você poderia dizer, estamos invocando todos os métodos
  • 2:56 - 2:57
    de todos os lugares onde ele poderia ser invocado
  • 2:57 - 2:59
    Então o que isso significa?
  • 2:59 - 3:00
    Significa, por exemplo
  • 3:00 - 3:01
    que não basta apenas invocar 'bar'
  • 3:01 - 3:03
    Você tem que ter certeza que você deve invocá-lo
  • 3:03 - 3:06
    pelo menos uma vez daqui
  • 3:06 - 3:07
    assim como invocar uma vez
  • 3:07 - 3:10
    de todos as funções externas que podem invocá-lo
  • 3:10 - 3:13
    C0 é o que o "SimpleCov" mede
  • 3:13 - 3:16
    aqueles que colocaram "SimpleCov" para rodar
  • 3:16 - 3:19
    basicamente dizem que cada linha foi executada
  • 3:19 - 3:20
    que cada uma das linhas foi tocada uma vez em seu código
  • 3:20 - 3:22
    Mas o limitante ali é que
  • 3:22 - 3:26
    condicionais contam como uma única linha
  • 3:26 - 3:29
    Então, não importa em que ramo deste "if" você tocou
  • 3:29 - 3:32
    desde que você tenha tocado um dos outros ramos
  • 3:32 - 3:33
    então você executou a linha do "if"
  • 3:33 - 3:36
    Assim, mesmo "C0" meio que ainda oferece cobertura superficial
  • 3:36 - 3:37
    Mas, como veremos
  • 3:37 - 3:39
    o jeito que você deve ler esta informação é:
  • 3:39 - 3:42
    Se você estiver tendo uma cobertura ruim no nível 'C0'
  • 3:42 - 3:44
    então você realmente tem uma cobertura bem ruim
  • 3:44 - 3:46
    Se você não estiver fazendo
  • 3:46 - 3:47
    nem este nível simples de cobertura superficial
  • 3:47 - 3:50
    então seu teste é provavelmente deficiente
  • 3:50 - 3:52
    C1 é o próximo passo a frente
  • 3:52 - 3:54
    Poderíamos dizer:
  • 3:54 - 3:55
    Bem, temos que pegar cada ramo em ambas as direções
  • 3:55 - 3:57
    assim, quando estivermos nesta linha de "if"
  • 3:57 - 3:59
    temos que garantir que
  • 3:59 - 4:00
    fazemos uma vez a parte do "if x"
  • 4:00 - 4:05
    e a pelo menos uma vez a parte do "if not x"
  • 4:05 - 4:08
    C1, pode ampliar isso com decisão de cobertura
  • 4:08 - 4:10
    digamos: Bem, se vamos...
  • 4:10 - 4:12
    Se temos uma linha "if" onde a condição
  • 4:12 - 4:14
    é feita de múltiplos termos
  • 4:14 - 4:16
    temos que garantir que cada sub expressão
  • 4:16 - 4:18
    foi avaliada em ambas as direções
  • 4:18 - 4:20
    Em outra palavras, isso significa que
  • 4:20 - 4:22
    se vamos falhar esta linha do "if"
  • 4:22 - 4:24
    temos que ter certeza de falhá-la pelo menos uma vez
  • 4:24 - 4:26
    porque "y" era falso pelo menos uma vez porque "z" era falso
  • 4:26 - 4:29
    Em outras palavras, qualquer sub expressão que puder
  • 4:29 - 4:31
    mudar independente do resultado da condição
  • 4:31 - 4:34
    tem que ser exercitada em ambas as direções
  • 4:36 - 4:39
    e então tem uma que muita gente aspira
  • 4:39 - 4:41
    mas que não há consenso de quão mais valiosa seria
  • 4:41 - 4:43
    é que você tomaria todos os caminhos do código
  • 4:43 - 4:46
    Obviamente, isso é meio que difícil porque
  • 4:46 - 4:48
    tende a ser exponencial no número de condiçÕes
  • 4:48 - 4:53
    e de forma geral é difícil
  • 4:53 - 4:55
    de avaliar se você tomou cada um dos caminhos do código
  • 4:55 - 4:57
    Existem técnicas formais que você poderia usar
  • 4:57 - 4:59
    para te dizer onde os buracos estão
  • 4:59 - 5:01
    mas no final
  • 5:01 - 5:03
    na maioria das empresas de software
  • 5:03 - 5:05
    não existe um consenso completo
  • 5:05 - 5:07
    em quão mais valioso seria C2
  • 5:07 - 5:09
    comparado com C0 e C1
  • 5:09 - 5:10
    Assim, eu acho que para o propósito da nossa aula
  • Not Synced
    e ligar todas estas coisas junto
  • Not Synced
    até esta data
  • Not Synced
    Certo
  • Not Synced
    está pronto
Title:
5.8 - 5.11 - Cobertura,Teste Unitário x Integração, Outros Conceitos de Testes, e Perspectivas
Video Language:
English

Portuguese, Brazilian subtitles

Incomplete

Revisions