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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Isso é um valor guardado: o contador lembra quantos obstáculos foram enfrentados, e você pode conferir no final.
- 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
| Run | Resultado esperado | Resultado real | Bateu? (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
| Sintoma | Família suspeita | Única mudança tentada | Consertou? (S/N) |
|---|---|---|---|
Verificação de aprendizagem
Responda cada pergunta. Nas de múltipla escolha, circule a melhor resposta.
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
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ô
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
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ô
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
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?