Aqui está um programa que deveria imprimir a média de dois números. Ele executa. Não falha. Imprime uma resposta — e a resposta está errada. Dê a ele quatro e seis…
Narração em inglês · legendas em inglês e 中文 que você pode alternar
1.1
Colaboração
Programa
Compreensão Duradoura (CRD-1): Incorporar múltiplas perspectivas através da colaboração melhora as inovações computacionais conforme elas são desenvolvidas.
Objetivo de Aprendizagem CRD-1.A: Explicar como as inovações computacionais são melhoradas através da colaboração. [Habilidade 1.C]
CRD-1.A.1 Uma inovação computacional inclui um programa como parte integrante de sua função.
CRD-1.A.2 Uma inovação computacional pode ser física (ex.: carro autônomo), software computacional não físico (ex.: software de edição de imagens) ou um conceito computacional não físico (ex.: comércio eletrônico).
CRD-1.A.3 A colaboração eficaz produz uma inovação computacional que reflete a diversidade de talentos e perspectivas daqueles que a projetaram.
CRD-1.A.4 A colaboração que inclui perspectivas diversas ajuda a evitar vieses no desenvolvimento de inovações computacionais.
CRD-1.A.5 A consulta e a comunicação com os usuários são aspectos importantes do desenvolvimento de inovações computacionais.
CRD-1.A.6 As informações coletadas de usuários potenciais podem ser usadas para compreender o propósito de um programa sob diferentes perspectivas e para desenvolver um programa que incorpore plenamente essas perspectivas.
Objetivo de Aprendizagem CRD-1.B: Explicar como as inovações computacionais são desenvolvidas por grupos de pessoas. [Habilidade 1.C]
CRD-1.B.1 Ferramentas online apoiam a colaboração, permitindo que programadores compartilhem e forneçam feedback sobre ideias e documentos.
CRD-1.B.2 Modelos comuns, como programação em par, existem para facilitar a colaboração.
Objetivo de Aprendizagem CRD-1.C: Demonstrar habilidades interpessoais eficazes durante a colaboração. [Habilidade 1.C]
CRD-1.C.1 Equipes de colaboração eficazes praticam habilidades interpessoais, incluindo, mas não se limitando a:
comunicação
construção de consenso
resolução de conflitos
negociação
Fonte: College Board AP Course and Exam Description
Um quebra-cabeça em andamento: colaboração e design modular encaixam a solução juntos
Em 1999, a NASA perdeu a Mars Climate Orbiter, uma sonda espacial que havia custado bem mais de cem milhões de dólares. O código não era mal escrito. O software de uma equipe fornecia seus números em unidades americanas, e o software de outra equipe os interpretava como unidades métricas. Cada parte funcionava isoladamente; a falha ocorreu na comunicação entre as pessoas. Esta unidade trata de como os programas são realmente criados: por grupos, para usuários, em ciclos repetidos, com erros identificados e corrigidos ao longo do processo.
A computação é uma atividade colaborativa. Trabalhar em equipe traz mais perspectivas, detecta mais erros e produz melhores programas do que trabalhar sozinho. Boa colaboração usa construção de consenso, comunicação clara e os pontos fortes de cada membro. Programação em par – duas pessoas em um computador, uma digitando e outra revisando – é uma prática comum. Na prova, você deve ser capaz de explicar como a colaboração melhorou um programa (mais ideias, menos bugs, testes mais amplos).
Uma inovação computacional é algo novo que tem um programa como parte essencial. Pode ser algo físico (um carro autônomo), um software (um editor de fotos) ou um conceito (compras on-line). Quando uma questão disser “inovação computacional”, qualquer um dos três serve.
Por que pessoas diferentes são importantes. Pessoas com experiências diferentes percebem problemas diferentes. Uma equipe que reúne perspectivas diferentes tem mais chances de evitar vieses, porque alguém perguntará “e quanto aos usuários como eu?”. Os desenvolvedores também conversam diretamente com os usuários: o que eles dizem ajuda a equipe a entender a finalidade do programa e para quem ele deve funcionar.
Habilidades e ferramentas. Boas equipes praticam comunicação, construção de consenso, resolução de conflitos e negociação. Ferramentas on-line, como documentos compartilhados e repositórios de código compartilhados, permitem que as pessoas deem feedback de qualquer lugar.
Exemplo resolvido. Dois alunos criam um aplicativo de questionário. Mei escreve o procedimento de pontuação enquanto Tom revisa cada linha à medida que ela digita; depois, Tom pede a cinco colegas para testar o app, e dois deles descobrem que uma resposta em branco causa travamento. Como a colaboração ajudou?
Tom revisa o código enquanto ele é digitado (programação em pares), o que pode identificar erros cedo.
Os colegas são usuários com hábitos diferentes; seus testes encontraram um caso que nenhum dos programadores havia pensado: a resposta em branco.
Cada benefício é nomeado e vinculado ao programa: "mais testadores encontraram o travamento da resposta em branco" ganha créditos onde "trabalho em equipe é bom" não ganha.
Exemplo resolvido: uma discordância. Dois colegas de equipe discordam: Sara quer um cronômetro em cada questão do questionário, e Li diz que um cronômetro deixará usuários nervosos preocupados. Qual é o melhor próximo passo?
Sara e Li votam, e quem perde cede: é rápido, mas ignora os usuários.
Cada um cria sua própria versão e eles nunca a compartilham: a equipe se divide.
Eles consultam alguns usuários e depois chegam juntos a um acordo, por exemplo, um cronômetro que os usuários possam desativar.
A terceira opção é a construção de consenso: a decisão vem de evidências, e ambas as pessoas a aceitam.
Compreensão Permanente (CRD-2): Os desenvolvedores criam e inovam utilizando um processo de design iterativo que é centrado no usuário, que incorpora ciclos de implementação/feedback e que deixa amplo espaço para experimentação e tomada de riscos.
Objetivo de Aprendizagem CRD-2.A: Descrever o propósito de uma inovação computacional. [Habilidade 1.A]
CRD-2.A.1 O propósito das inovações computacionais é resolver problemas ou buscar interesses através da expressão criativa.
CRD-2.A.2 A compreensão do propósito de uma inovação computacional proporciona aos desenvolvedores uma capacidade melhorada de desenvolver essa inovação computacional.
Objetivo de Aprendizagem CRD-2.B: Explicar como um programa ou segmento de código funciona. [Habilidade 4.A]
CRD-2.B.1 Um programa é uma coleção de instruções de programa que executa uma tarefa específica quando executado por um computador. Um programa é frequentemente referido como software.
CRD-2.B.2 Um segmento de código é uma coleção de instruções de programa que faz parte de um programa.
CRD-2.B.3 Um programa precisa funcionar para uma variedade de entradas e situações.
CRD-2.B.4 O comportamento de um programa é como ele funciona durante a execução e é frequentemente descrito pela forma como o usuário interage com ele.
CRD-2.B.5 Um programa pode ser descrito amplamente pelo que ele faz, ou mais detalhadamente tanto pelo que o programa faz quanto como as instruções do programa realizam essa função.
Objetivo de Aprendizagem CRD-2.C: Identificar entrada(s) para um programa. [Habilidade 3.A]
CRD-2.C.1Entradas de programa são dados enviados a um computador para processamento por um programa. A entrada pode vir em várias formas, como táctil, áudio, visual ou texto.
CRD-2.C.2 Um evento está associado a uma ação e fornece dados de entrada para um programa.
CRD-2.C.3 Eventos podem ser gerados quando uma tecla é pressionada, um mouse é clicado, um programa é iniciado ou qualquer outra ação definida ocorre que afeta o fluxo de execução.
CRD-2.C.4 As entradas geralmente afetam a saída produzida por um programa.
CRD-2.C.5 Em programação orientada a eventos, as instruções do programa são executadas quando acionadas, em vez de através do fluxo sequencial de controle.
CRD-2.C.6 A entrada pode vir de um usuário ou de outros programas.
Objetivo de Aprendizagem CRD-2.D: Identificar saída(s) produzidas por um programa. [Habilidade 3.A]
CRD-2.D.1Saídas de programa são quaisquer dados enviados de um programa para um dispositivo. A saída do programa pode vir em várias formas, como táctil, áudio, visual ou texto.
CRD-2.D.2 A saída do programa geralmente é baseada na entrada do programa ou em seu estado anterior (ex.: valores internos).
Fonte: College Board AP Course and Exam Description
Todo programa é escrito para um propósito – resolve um problema ou persegue um interesse. Um programa recebe entrada, processa-a e produz saída. Entradas podem vir de um usuário, dispositivo, arquivo ou outro programa; saídas podem ser visuais, auditivas, textuais ou um sinal para um dispositivo. Saber declarar o propósito de um programa e descrever claramente suas entradas e saídas é uma habilidade essencial (e parte da tarefa de desempenho Criar).
Alguns termos usados pela prova de forma precisa:
Um programa (também chamado de software) é um conjunto de instruções que executa uma tarefa quando um computador o executa. Um segmento de código é uma parte de um programa.
O comportamento de um programa é a maneira como ele age durante sua execução, geralmente descrita pela forma como um usuário interage com ele.
Tanto a entrada quanto a saída podem ser táteis (toque, vibração), sonoras, visuais ou textuais.
A saída geralmente depende da entrada e também pode depender do estado anterior: valores que o programa já armazena.
Você pode descrever um programa de modo geral (o que ele faz) ou com mais detalhes (o que ele faz e como suas instruções o fazem). Uma resposta escrita geralmente exige a segunda opção.
Todo programa se decomponha em entrada, processamento e saídaTodo programa segue o modelo entrada-processamento-saída
Exemplo resolvido. Um aplicativo contador de passos lê o movimento pelo sensor de movimento do celular, conta os passos e mostra o total do dia e um distintivo quando o usuário atinge 10,000.
Pergunta
Resposta
Finalidade: por que existe
para ajudar usuários a manterem-se ativos monitorando suas caminhadas
Função: o que faz
conta os passos e compara o total com uma meta
Entrada
leituras do sensor de movimento; a meta do usuário
Saída
o total de passos na tela; uma insígnia em 10,000
O distintivo também mostra o estado anterior em ação: o mesmo passo recebido como entrada só gera um distintivo se o total armazenado tiver acabado de atingir a meta.
Um erro comum é dar a função como finalidade: "ele conta passos" diz o que o programa faz, não o problema que resolve.
Explorar
Explore o modelo entrada → processamento → saída
Passe pelo modelo IPO. Todo programa recebe uma entrada, realiza processamento seguindo suas instruções e depois produz uma saída — acompanhe um exemplo de aplicativo meteorológico ao longo do pipeline.
1.3
Projeto e Desenvolvimento de Programas
Programa
Compreensão Permanente (CRD-2): Os desenvolvedores criam e inovam utilizando um processo de design iterativo que é centrado no usuário, que incorpora ciclos de implementação/feedback e que deixa amplo espaço para experimentação e tomada de riscos.
Objetivo de Aprendizagem CRD-2.E: Desenvolver um programa usando um processo de desenvolvimento. [Habilidade 1.B]
CRD-2.E.1 Um processo de desenvolvimento pode ser ordenado e intencional, ou exploratório em sua natureza.
CRD-2.E.2 Existem vários processos de desenvolvimento. As seguintes fases são comumente usadas ao desenvolver um programa:
investigação e reflexão
design
prototipagem
teste
CRD-2.E.3 Um processo de desenvolvimento que é iterativo requer refinamento e revisão com base em feedback, testes ou reflexão ao longo do processo. Isso pode exigir o retorno a fases anteriores do processo.
CRD-2.E.4 Um processo de desenvolvimento que é incremental é aquele que divide o problema em partes menores e garante que cada peça funcione antes de adicioná-la ao todo.
Objetivo de Aprendizagem CRD-2.F: Projetar um programa e sua interface do usuário. [Habilidade 1.B]
CRD-2.F.1 O design de um programa incorpora investigação para determinar seus requisitos.
CRD-2.F.2 A investigação em um processo de desenvolvimento é útil para entender e identificar as restrições do programa, bem como as preocupações e interesses das pessoas que usarão o programa.
CRD-2.F.3 Algumas maneiras pelas quais a investigação pode ser realizada são as seguintes:
coleta de dados através de pesquisas
teste com usuários
entrevistas
observações diretas
CRD-2.F.4 Os requisitos do programa descrevem como um programa funciona e podem incluir uma descrição das interações do usuário que um programa deve fornecer.
CRD-2.F.5 A especificação de um programa define os requisitos para o programa.
CRD-2.F.6 Em um processo de desenvolvimento, a fase de design descreve como accomplir uma dada especificação de programa.
CRD-2.F.7 A fase de design de um programa pode incluir:
brainstorming
planejamento e storyboarding
organização do programa em módulos e componentes funcionais
criação de diagramas que representam os layouts da interface do usuário
desenvolvimento de uma estratégia de teste para o programa
Objetivo de Aprendizagem CRD-2.G: Descrever o propósito de um segmento de código ou programa escrevendo documentação. [Habilidade 4.A]
CRD-2.G.1Documentação de programa é uma descrição escrita da função de um segmento de código, evento, procedimento ou programa e de como foi desenvolvido.
CRD-2.G.2Comentários são uma forma de documentação de programa escrita dentro do programa para ser lida por pessoas e não afetam como um programa roda.
CRD-2.G.3 Programadores devem documentar um programa ao longo de seu desenvolvimento.
CRD-2.G.4 A documentação do programa ajuda no desenvolvimento e manutenção de programas corretos ao trabalhar individualmente ou em ambientes de programação colaborativa.
CRD-2.G.5 Nem todos os ambientes de programação suportam comentários, então outros métodos de documentação podem ser necessários.
Objetivo de Aprendizagem CRD-2.H: Reconhecer segmentos de código usados de outras fontes. [Habilidade 1.C]
CRD-2.H.1 É importante reconhecer quaisquer segmentos de código que foram desenvolvidos colaborativamente ou por outra fonte.
CRD-2.H.2 O reconhecimento de um segmento de código(s) escrito por outra pessoa e usado em um programa pode estar na documentação do programa. O reconhecimento deve incluir a origem ou o nome do autor original.
Fonte: College Board AP Course and Exam Description
Um programador depurando em estação de trabalho com múltiplos monitores — projeto e teste iterativos
Os programas são construídos por um processo iterativo, não em uma única linha reta: investigar o problema e os usuários, projetar (muitas vezes com um diagrama ou plano escrito), implementar em código e testar – depois repetir. Um problema grande é dividido em partes menores (decomposição). Comentários e nomenclatura clara documentam o projeto para que outros (e seu futuro eu) possam entendê-lo. O desenvolvimento é incremental – construa e teste uma pequena parte, depois adicione a próxima.
As fases comuns são investigação e reflexão, planejamento, construção de um protótipo (um modelo inicial funcional) e testes. A ordem pode ser planejada com antecedência ou mais exploratória, e uma equipe pode voltar a uma fase anterior a qualquer momento.
Exemplo resolvido: iterativo ou incremental? As duas palavras soam parecidas, e a prova faz distinção entre elas.
O que a equipe faz
Termo
Por quê
As pessoas que testam dizem que o texto é pequeno demais, então a equipe volta ao projeto e o altera
iterativo
o feedback faz a equipe voltar para revisar
A equipe faz as perguntas aparecerem, testa isso, depois acrescenta a pontuação, testa isso e, em seguida, acrescenta um cronômetro
incremental
uma parte de cada vez, cada uma funcionando antes de ser integrada ao todo
Um projeto real geralmente faz as duas coisas.
As etapas do desenvolvimento de programas, com teste alimentando de volta para corrigir e refinarSoftware é construído por um processo de desenvolvimento iterativo e incremental
Investigando o que os usuários realmente precisam
Antes de escrever qualquer código, a pessoa desenvolvedora investiga o problema e as pessoas que usarão o programa. Algumas maneiras de fazer isso:
pesquisas enviadas a potenciais usuários, que coletam dados de muitas pessoas rapidamente;
entrevistas e observação direta de usuários realizando a tarefa manualmente;
testes com usuários, nos quais as pessoas experimentam uma versão inicial enquanto a equipe observa;
estudar soluções existentes para ver o que já funciona e o que frustra as pessoas.
Os resultados são transformados em um projeto. Dois artefatos fazem isso: uma lista de requisitos do programa dizendo exatamente o que o programa deve fazer, e diagramas representando o layout da interface do usuário – esboços mostrando quais controles aparecem onde e o que cada um faz quando usado. Projetar a interface em papel primeiro é mais barato do que descobrir após a codificação que os botões estão no lugar errado.
A especificação de um programa define seus requisitos. A fase de planejamento então estabelece como atendê-los. Ela pode incluir uma chuva de ideias, um roteiro visual (uma sequência de esboços do que o usuário vê), a divisão do programa em módulos e o planejamento de como ele será testado.
Eventos, e programas que aguardam
Nem todo programa é executado diretamente de cima para baixo. Um evento é gerado quando uma tecla é pressionada, o mouse é clicado, um programa é iniciado ou qualquer outra ação definida ocorre — e um evento pode alterar o fluxo de execução ao acionar o código associado a ele, chamado de tratador de eventos. Em muitos programas gráficos, os eventos aguardam em uma fila até que o tratador atual termine.
É por isso que um programa com interface gráfica pode parecer não estar fazendo nada: ele está esperando o próximo evento. A ordem em que esses eventos chegam depende das ações do usuário e de outras fontes de eventos, portanto o mesmo programa pode executar seus blocos em uma ordem diferente cada vez que é usado.
Esse estilo é chamado de programação orientada a eventos: as instruções são executadas quando são acionadas, e não uma após a outra a partir do início. O evento também fornece dados de entrada, como qual tecla foi pressionada.
Documentação e atribuição de autoria
A documentação de um programa é uma descrição escrita do que um segmento de código, evento, procedimento ou programa faz e de como foi desenvolvido. Os comentários são uma forma de documentação: são escritos para pessoas e não alteram a execução do programa. Nem todo ambiente de programação permite comentários, por isso a documentação às vezes fica em um arquivo separado.
Escreva a documentação ao longo de todo o desenvolvimento, e não no final: ela ajuda você e seus colegas de equipe a manter o programa correto.
O código de outra pessoa deve ter sua autoria reconhecida: informe na documentação de onde ele veio e o nome do autor original, se você souber. Isso também se aplica ao código escrito com um colega.
Explorar
Percorra o processo de desenvolvimento iterativo
O desenvolvimento é iterativo — você repete as etapas, melhorando o programa um pouco em cada passagem. Percorra o loop e note que ele retorna ao início, em vez de terminar após uma única execução.
Compreensão Permanente (CRD-2): Os desenvolvedores criam e inovam utilizando um processo de design iterativo que é centrado no usuário, que incorpora ciclos de implementação/feedback e que deixa amplo espaço para experimentação e tomada de riscos.
Objetivo de Aprendizagem CRD-2.I: Para erros em um algoritmo ou programa:
a. Identificar o erro. [Habilidade 4.C]
b. Corrigir o erro. [Habilidade 4.C]
CRD-2.I.1 Um erro lógico é um erro no algoritmo ou programa que causa comportamento incorreto ou inesperado.
CRD-2.I.2 Um erro de sintaxe é um erro no programa onde as regras da linguagem de programação não são seguidas.
CRD-2.I.3 Um erro de tempo de execução é um erro no programa que ocorre durante a execução de um programa. Linguagens de programação definem seus próprios erros de tempo de execução.
CRD-2.I.4 Um erro de overflow é um erro que ocorre quando um computador tenta manipular um número que está fora da faixa de valores definida.
CRD-2.I.5 As seguintes são maneiras eficazes de encontrar e corrigir erros:
casos de teste
traçado manual
visualizações
depuradores
adição de statement(s) de saída extra
Objetivo de Aprendizagem CRD-2.J: Identificar entradas e saídas esperadas correspondentes ou comportamentos que podem ser usados para verificar a correção de um algoritmo ou programa. [Habilidade 4.C]
CRD-2.J.1 No processo de desenvolvimento, testes usam entradas definidas para garantir que um algoritmo ou programa esteja produzindo resultados esperados. Programadores usam os resultados dos testes para revisar seus algoritmos ou programas.
CRD-2.J.2 Entradas definidas usadas para testar um programa devem demonstrar os diferentes resultados esperados que estão nos extremos (mínimo e máximo) ou logo além deles dos dados de entrada.
CRD-2.J.3 Os requisitos do programa são necessários para identificar entradas definidas apropriadas para testes.
Fonte: College Board AP Course and Exam Description
Um bug é um erro em um programa; depuração é o processo de encontrá-lo e corrigi-lo. A prova identifica quatro tipos:
um erro de sintaxe viola as regras da linguagem, impedindo que o programa execute;
um erro de tempo de execução causa travamento do programa durante a execução (ex.: divisão por zero);
um erro de lógica permite que o programa seja executado, mas produz o resultado errado;
um erro de transbordamento ocorre quando um número está fora do intervalo que o computador consegue representar.
Uma tabela de rastreamento registra o valor de cada variável enquanto o programa executa, para encontrar bugs
Encontre bugs usando casos de teste com diferentes entradas, acrescentando instruções de impressão para ver os valores e acompanhando manualmente o código. Um depurador interrompe o programa em uma linha escolhida para que você possa examinar cada variável, e uma visualização, como um gráfico, pode facilitar a identificação de um padrão incorreto. Escolha as entradas de teste de forma criteriosa: elas devem demonstrar os diferentes resultados esperados nos extremos ou logo além deles — os valores mínimo e máximo que o programa deve aceitar e um valor imediatamente fora de cada extremo. Um programa que funciona com dados comuns frequentemente falha com uma lista vazia, um zero ou um valor imediatamente além do fim de um intervalo, portanto vale a pena testar essas entradas primeiro. Corrigir um bug de cada vez e testar novamente é o método confiável.
Exemplo resolvido: escolha de entradas de teste. Uma página de inscrição em um clube deve aceitar idades de 13 a 18. Os requisitos informam o resultado correto, para que você possa escolher entradas e dizer o que espera:
Teste os dois extremos do intervalo e um valor imediatamente além de cada extremo
Cinco testes são suficientes: 12, 13, 15, 18 e 19. Se o código disser age > 13, somente o teste com 13 revela a falha; a idade 15 é aceita de qualquer maneira.
Habilidade de prova: ser capaz de nomear o tipo de erro e descrever uma estratégia de teste que o capturar — um tema recorrente em questões de múltipla escolha e tarefas Create.
Três tipos comuns de erro de programação: sintaxe, lógica e execução
Exemplo resolvido. Um programa destinado a imprimir a média de dois números, em vez disso, executa avg = a + b / 2. Ao traçar a ordem das operações, / é executado antes de +, portanto calcula $a+\tfrac{b}{2}$ em vez da média. Adicione parênteses para corrigir: avg = (a + b) / 2. Testar com $a=4,\ b=6$ confirma a correção — a linha com erro dá $4+3=7$, a linha corrigida dá $\tfrac{10}{2}=5$. Testar com entradas conhecidas é exatamente como você encontra e confirma um erro lógico.
Exemplo resolvido: identifique o erro.
O que acontece
Tipo
Motivo
Falta um sinal de fechamento de agrupamento em DISPLAY(score; nada é executado
sintaxe
uma regra da linguagem é violada
list[0] interrompe o programa com uma mensagem de erro
execução
as listas do AP começam no índice 1, e isso só falha durante a execução
Um desconto de 10% é calculado como 10 dólares
lógica
o programa é executado e a resposta está errada
Um contador de 4 bits em 1111 recebe um acréscimo de 1
transbordamento
16 está fora do intervalo
Respostas escritas sobre seu próprio programa
A Seção II da prova dá 60 minutos para duas questões com quatro itens de resposta escrita, todos sobre o programa que você enviou para a tarefa de criação. Você vê seus próprios segmentos de código na sua Referência Personalizada do Projeto, portanto as respostas devem tratar do seu programa, e não de programas em geral. Imagine que este procedimento esteja no seu programa:
PROCEDURE Average(numbers)
{
sum ← 0
FOR EACH n IN numbers
{
sum ← sum + n
}
RETURN(sum / LENGTH(numbers))
}
Itens de provas anteriores pediram o seguinte.
Uma modificação que causa um erro de lógica e como o comportamento muda. "Se sum ← 0 for alterado para sum ← 1, o procedimento ainda será executado, mas cada total será uma unidade maior do que deveria. Average([2, 4]) retorna $3.5$ em vez de $3$."
Uma chamada que o procedimento aceita, mas trata incorretamente. "Average([]): a lista vazia é aceita, mas LENGTH(numbers) é 0, então a última linha divide por zero e um erro de execução interrompe o programa." Informe a chamada, o comportamento incorreto e o motivo: três coisas distintas.
Documentação para outra pessoa programadora. "Um comentário acima do procedimento dizendo que numbers não deve estar vazio. Outra pessoa programadora que reutilize Average saberá, assim, que deve verificar se a lista está vazia antes de chamá-lo."
Uma entrada inesperada. Indique uma entrada real para seu programa e diga o que ele de fato faz em seguida. Se ele rejeitar a entrada, diga qual linha faz isso.
Erros comuns. Descrever o que é uma modificação sem dizer o que muda quando o programa é executado. Fornecer uma chamada sem valores específicos para os argumentos. Responder sobre um procedimento diferente daquele indicado no enunciado.
Explorar
Rastreie a lógica do jogo de adivinhação e identifique um erro de lógica
Arraste o palpite e observe qual ramo é executado. Um erro de lógica enviaria o mesmo palpite para o ramo errado — o programa ainda executa, mas exibe a mensagem incorreta. O número secreto aqui é 50.
1.4
Prática
Responda antes de ler as respostas abaixo.
Um aplicativo contador de passos conta passos e mostra um total diário para que os usuários possam atingir uma meta. Informe a finalidade do programa e uma de suas funções.
Classifique cada erro como sintaxe, lógica, execução ou transbordamento: (a) a ausência de um sinal de fechamento de agrupamento; (b) uma média calculada como sum / (count + 1); (c) a divisão por uma variável que é zero durante a execução do programa; (d) a adição de $1$ ao maior valor que uma quantidade fixa de bits pode armazenar.
Um procedimento retorna "pass" para pontuações de $60$ ou mais. Escolha quatro entradas de teste e explique suas escolhas.
Apresente um benefício da colaboração ao planejar um programa.
Diferencie o desenvolvimento iterativo do desenvolvimento incremental.
Apresente dois motivos para escrever comentários e outros tipos de documentação de programas.
1.4
Respostas
Finalidade: ajudar os usuários a atingir uma meta diária de atividade. Função: por exemplo, acrescentar $1$ ao total cada vez que um passo é detectado ou exibir o total.
$59$, $60$ e $61$ testam o limite, onde erros são mais prováveis; um extremo como $0$ ou $100$ verifica os limites das entradas válidas.
Perspectivas diferentes ajudam a encontrar erros e evitar vieses, de modo que o programa funcione para mais usuários (por exemplo, a programação em pares identifica erros mais cedo).
O desenvolvimento iterativo repete ciclos de planejamento, teste e aperfeiçoamento, revisando o programa após receber feedback. O desenvolvimento incremental constrói e testa o programa em pequenas partes, acrescentando uma parte funcional de cada vez.
Ela explica o que o código faz e por quê, para que outras pessoas (e o autor posteriormente) possam entendê-lo, mantê-lo e depurá-lo; também registra as fontes de código de terceiros.
1.4
Dicas de prova
A avaliação inclui questões de múltipla escolha e o componente Criar, com respostas escritas no exame AP. Explique seu raciocínio claramente, não apenas o resultado.
Conheça os benefícios da colaboração e como perspectivas diversas reduzem viés em um programa.
Use vocabulário preciso (iterativo, incremental, requisitos do programa) ao descrever um processo de planejamento.
Teste os extremos do intervalo de entrada e valores imediatamente além deles, e informe a saída esperada para cada teste.
Dê e receba feedback de forma construtiva; dê crédito aos colaboradores e fontes.
Divida um problema grande em módulos menores que uma equipe possa construir em paralelo.
Aulas interativas sobre este tópico
Passe por ele passo a passo, com exercícios de verificação instantânea.