Ir para o conteúdo

Nome: ______________________________

Data: ____________________

Semana 6

Depuração e confiabilidade

Descubra por que um robô se comporta mal (mecânica, programação ou sensor) e prove que ele funciona de novo e de novo.

70 a 85 minutos

Ideias principais

O que depurar é de verdade

Toda vez que você roda um programa, tem dois resultados na cabeça: o esperado (o que DEVERIA acontecer) e o real (o que ACONTECEU). Quando eles batem, o robô está funcionando. Quando não batem, existe um bug, e depurar é o trabalho de detetive de descobrir por que eles diferem.

As três famílias de bugs

Os bugs vêm em três famílias, e nomear a família já é meio caminho andado. Um bug mecânico é um problema físico no corpo do robô: uma roda frouxa, um fio se arrastando pelo chão, uma engrenagem que patina. Um bug de programação é um erro nas instruções: um número errado, um bloco faltando, ou blocos fora de ordem. Um bug de sensor é um problema de percepção: uma leitura ruim, um limiar ajustado no valor errado, ou um sensor que precisa de calibração.

Variáveis e contadores: guardar e acompanhar valores

Às vezes um programa precisa lembrar de um número. Uma variável é uma caixinha com nome que guarda um valor, e esse valor pode mudar enquanto o programa roda. Um contador é uma variável especial usada para contar: ela começa em zero e sobe de um em um cada vez que alguma coisa acontece, tipo toda vez que o robô desvia de um obstáculo.

Confiabilidade: provar com ensaios repetidos

Um robô que funciona uma vez pode só ter dado sorte. Confiabilidade quer dizer fazer o mesmo trabalho corretamente de novo e de novo, e você não pode afirmar isso sem prova. A prova é um ensaio de confiabilidade: você roda a mesma tarefa várias vezes, com o mesmo caso de teste em cada rodada, e anota o resultado esperado e o resultado real de cada uma.

Palavras para conhecer

Depuração:
O trabalho de descobrir por que o resultado real de um robô é diferente do resultado esperado, e depois consertar isso.
Variável:
Um lugar com nome dentro de um programa, que guarda um valor capaz de mudar enquanto o programa roda.
Contador:
Uma variável usada para contar: ela começa num número e sobe de um em um cada vez que alguma coisa acontece.
Valor guardado:
Um número ou um dado que um programa mantém numa variável para poder usar ou mudar depois.
Valor de calibração:
Um número que você mede e salva para as leituras de um sensor significarem a coisa certa, como o nível de luz de um chão branco.
Resultado esperado:
O que DEVERIA acontecer quando o programa roda direito, ou seja, o que você prevê antes de testar.
Resultado real:
O que ACONTECEU quando você de fato rodou o robô, e que você observa e anota.
Caso de teste:
Uma situação específica que você monta de propósito para testar, tipo "uma parede a exatamente 15 cm".
Bug mecânico:
Um problema físico no corpo do robô, como uma roda frouxa, um fio se arrastando ou uma engrenagem travada.
Bug de programação:
Um erro nas instruções: um bloco ou número errado, faltando ou fora de ordem.
Bug de sensor:
Um problema na percepção: uma leitura ruim, um limiar errado, ou um sensor que precisa ser calibrado.
Confiabilidade:
O quanto um robô faz o mesmo trabalho corretamente de novo e de novo, comprovado por ensaios repetidos.

A sua atividade

Missões de Detetive de Bugs

Objetivo: Diagnosticar um robô que se comporta mal: decidir se o bug é mecânico, de programação ou de sensor, e depois consertá-lo.

  1. Em cada missão, escreva primeiro o resultado esperado e o resultado real. A diferença entre os dois é o sintoma que você está investigando.
  2. Faça a pergunta das três famílias: isso é físico (mecânico), é de instrução (programação), ou é um problema de percepção (sensor)? Use o sintoma para chutar antes de mexer em qualquer coisa.
  3. Mude UMA coisa de cada vez, rode de novo e anote se o resultado real agora bate com o esperado.

Escreva o que aconteceu:

Ensaio de confiabilidade de três rodadas

Objetivo: Provar que um robô é confiável rodando a mesma tarefa três vezes e comparando o resultado esperado com o real a cada rodada.

  1. Escolha uma tarefa bem definida e um caso de teste (exatamente a mesma montagem em toda rodada). Escreva o resultado esperado uma vez só: ele é o mesmo para as três rodadas.
  2. Rode a tarefa três vezes SEM mudar nada entre uma rodada e outra. Anote o resultado real e marque Bateu? (sim ou não) em cada uma.
  3. Três acertos querem dizer confiável para esse caso de teste. Qualquer diferença é um bug para caçar com os passos do Detetive de Bugs.

Escreva o que aconteceu:

Contador de obstáculos

Objetivo: Usar uma variável como contador que soma um a cada obstáculo desviado pelo robô, e depois ler o valor guardado.

  1. Coloque uma variável contador em 0 no começo. Cada vez que o robô perceber e desviar de um obstáculo, some 1 ao contador.
  2. Isso é um valor guardado: o contador lembra quantos obstáculos foram enfrentados, e você pode conferir no final.
  3. Preveja quantos obstáculos existem na pista, e depois compare a sua previsão com o valor final do contador.

Escreva o que aconteceu:

Preveja

Escreva o seu palpite antes de testar.

Antes do seu ensaio de confiabilidade de três rodadas, preveja qual rodada (se alguma) não vai bater com o resultado esperado, e por quê.

Olhe o sintoma do Detetive de Bugs antes de encostar no robô: preveja a que família o bug pertence, se mecânica, de programação ou de sensor.

Para o contador de obstáculos, preveja o valor guardado final antes de percorrer a pista.

Teste e registre

Teste de confiabilidade de três rodadas

Escolha uma tarefa e um caso de teste. Escreva o resultado esperado uma vez só, e depois rode a mesma tarefa três vezes sem mudar nada. Anote o resultado real e se ele bateu em cada rodada.

Registre: Se o resultado real bateu com o esperado em cada uma das três rodadas

RunResultado esperadoResultado realBateu? (S/N)
    
    
    

Registro de diagnóstico de bugs

Em cada missão de depuração, registre o sintoma, a família de bug de que você desconfia, a única mudança que você tentou, e se isso corrigiu a diferença.

Registre: Qual família de bug era a responsável e se uma única mudança direcionada resolveu

SintomaFamília suspeitaÚnica mudança tentadaConsertou? (S/N)
    
    
    

Verificação de aprendizagem

Responda cada pergunta. Nas de múltipla escolha, circule a melhor resposta.

  1. Diagnostique o tipo de bug mais provável.

    Um robô seguidor de linha funcionou ontem. Hoje ele passa direto pela linha toda vez, mesmo sem o código ter mudado. Hoje a sala está bem mais clara.

    • A.Um bug de programação
    • B.Um bug de sensor que precisa de recalibração
    • C.Um bug mecânico
    • D.O robô quebrou de vez
  2. O que é depurar?

    • A.Fazer o robô andar mais rápido
    • B.Descobrir por que o resultado real é diferente do esperado, e depois consertar isso
    • C.Apagar o programa inteiro e começar do zero
    • D.Colocar mais sensores no robô
  3. Um robô andava reto na semana passada. O programa dele não mudou, mas agora ele faz curva para um lado em toda rodada. Qual família de bug é a mais provável?

    • A.Um bug de programação
    • B.Um bug de sensor
    • C.Um bug mecânico
    • D.Não existe bug nenhum
  4. O que é um contador?

    • A.Um sensor que mede distância
    • B.Uma variável que começa num número e sobe de um em um cada vez que alguma coisa acontece
    • C.Um bloco que faz o robô parar
    • D.O nível de bateria do robô
  5. Num ensaio de confiabilidade, o que é o "resultado esperado"?

    • A.O que aconteceu de verdade quando você rodou o robô
    • B.O que DEVERIA acontecer se o programa funcionar direito
    • C.O número de sensores que o robô tem
    • D.O tempo mais rápido possível
  6. Por que se roda a mesma tarefa três vezes num ensaio de confiabilidade?

    • A.Para provar que o robô funciona de novo e de novo, e não só uma vez por sorte
    • B.Porque as duas primeiras rodadas são só treino
    • C.Para acabar com a bateria mais rápido
    • D.Porque uma rodada só é contra as regras

Refletir

O que você mudou por causa de um teste, e não por chute?

O que rodar a tarefa três vezes fez você saber sobre o seu robô, comparado com rodar uma vez só?

Por que mudar uma coisa de cada vez deixa a depuração mais fácil? O que deu errado (ou certo) quando você tentou isso?