Testing and maintenance · Testes e manutenção
| English | Português |
|---|---|
| run-time error/rʌn taɪm ˈerə/ | erro de tempo de execução |
| syntax error/ˈsɪntæks ˈerə/ | erro de sintaxe |
| logic error/ˈlɒdʒɪk ˈerə/ | erro de lógica |
| dry run/draɪ rʌn/ | execução seca |
| walkthrough/ˈwɔːkθruː/ | revisão |
| white-box testing/waɪt bɒks ˈtestɪŋ/ | teste de caixa branca |
| black-box testing/blæk bɒks ˈtestɪŋ/ | teste de caixa preta |
| integration testing/ˌɪntɪˈɡreɪʃn ˈtestɪŋ/ | teste de integração |
| stub/stʌb/ | stub |
| alpha testing/ˈælfə ˈtestɪŋ/ | teste alfa |
| beta testing/ˈbiːtə ˈtestɪŋ/ | teste beta |
| acceptance testing/əkˈseptəns ˈtestɪŋ/ | teste de aceitação |
| test strategy/test ˈstrætədʒi/ | estratégia de teste |
| test plan/test plæn/ | plano de teste |
| normal data/ˈnɔːml ˈdeɪtə/ | dados normais |
| abnormal data/əbˈnɔːml ˈdeɪtə/ | dados anormais |
| extreme data/ekˈstriːm ˈdeɪtə/ | dados extremos |
| boundary data/ˈbaʊndəri ˈdeɪtə/ | dados de fronteira |
| corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ | manutenção corretiva |
| adaptive maintenance/əˈdæptɪv ˈmeɪntənəns/ | manutenção adaptativa |
| perfective maintenance/pəˈfektɪv ˈmeɪntənəns/ | manutenção perfectiva |
| regression testing/rɪˈɡreʃn ˈtestɪŋ/ | teste de regressão |
Thirty-seven seconds
- On 4 June 1996 the first Ariane 5 rocket lifted off from French Guiana. Thirty-seven seconds later it veered off course and destroyed itself. The payload was four satellites worth $370 million.
- The cause was one line of code, reused from Ariane 4, that converted a 64-bit number into a 16-bit integer. Ariane 5 flew faster, the number was bigger, and the conversion overflowed: a run-time error 运行时错误 in a routine that was not even needed after lift-off.
- The code had never been tested with Ariane 5's flight data. Nobody had chosen test data at the extremes of the new rocket's range.
- This lesson is the three kinds of error, the methods of testing, how to choose test data, and how a program is kept alive after release.
Trinta e sete segundos
- Em 4 de junho de 1996, o primeiro foguete Ariane 5 decolou da Guiana Francesa. Trinta e sete segundos depois, desviou da rota e destruiu a si mesmo. A carga útil valia quatro satélites de US$ 370 milhões.
- A causa foi uma linha de código, reutilizada do Ariane 4, que convertia um número de 64 bits em um inteiro de 16 bits. O Ariane 5 voava mais rápido, o número era maior, e a conversão transbordou: um erro de execução 运行时错误 em uma rotina que nem era necessária após o decolagem.
- O código nunca havia sido testado com os dados de voo do Ariane 5. Ninguém escolheu dados de teste nos extremos do novo intervalo do foguete.
- Esta lição abrange os três tipos de erro, os métodos de teste, como escolher dados de teste e como manter um programa vivo após o lançamento.
Three kinds of error
- A syntax error 语法错误 breaks the grammar of the language: a missing bracket, a misspelled keyword. It is found at translation, so the program will not run until it is fixed.
- A run-time error happens while the program runs: division by zero, a file that does not exist, an array index out of range. The program crashes or raises an exception; the fix is a check before the risky operation.
- A logic error 逻辑错误 lets the program run and produce wrong results:
+for-, an off-by-one loop, conditions in the wrong order. Nothing flags it; only testing and tracing reveal it.
Found at translation, found at run time, found only in the output
Três tipos de erro
- Um erro de sintaxe 语法 erro quebra a gramática da linguagem: um colchete faltando, uma palavra-chave grafada incorretamente. Ele é encontrado na tradução, então o programa não rodará até ser corrigido.
- Um erro de execução ocorre enquanto o programa roda: divisão por zero, um arquivo que não existe, um índice de array fora do intervalo. O programa falha ou levanta uma exceção; a correção é um check antes da operação arriscada.
- Um erro de lógica 逻辑错误 permite que o programa rode e produza resultados errados:
+para-, um loop off-by-one, condições na ordem errada. Nada o sinaliza; apenas testes e traçagem o revelam.

Encontrado na tradução, encontrado em tempo de execução, encontrado apenas na saída
Match each kind of error to how it shows up. · Combine cada tipo de erro com como ele aparece.
Syntax = caught at translation; logic = wrong output; run-time = crash while running. · Sintaxe = capturada na tradução; lógica = saída errada; tempo de execução = crash enquanto executa.
Worked example: find and correct the errors
- Syntax: the
IFhas noENDIF. The translator rejects it. Run-time: ifCountis 0 the division fails; guard it withIF Count > 0 THEN. Logic: if a pass is 50 or more,> 50fails a student on exactly 50; it should be>= 50. - Name the type, say why it is that type, and give the correction. Three parts, three marks.
Exemplo resolvido: encontre e corrija os erros
Total ← 0
FOR i ← 1 TO Count
Total ← Total + Marks[i]
NEXT i
Average ← Total / Count
IF Average > 50 THEN
OUTPUT "Pass"
- Sintaxe: o
IFnão temENDIF. O tradutor o rejeita. Execução: seCountfor 0, a divisão falha; proteja-o comIF Count > 0 THEN. Lógica: se uma nota for 50 ou mais,> 50reprova um aluno exatamente em 50; deveria ser>= 50. - Nomeie o tipo, diga por que é aquele tipo e dê a correção. Três partes, três pontos.
A program divides a total by the number of entries and crashes when the input file is empty. This is a: · Um programa divide um total pelo número de entradas e crashed quando o arquivo de entrada está vazio. Isso é um:
Division by zero happens while the program runs and stops it. A guard such as IF Count > 0 fixes it. · Divisão por zero ocorre enquanto o programa executa e o interrompe. Um guardião como IF Count > 0 o corrige.
Testing methods: reading the code
- A dry run 手工跟踪 traces the code on paper, writing each variable's value in a trace table after each line.
- A walkthrough 走查 is a team review: the programmer explains the code line by line while colleagues look for faults.
- White-box testing 白盒测试 designs tests from the code's internal structure, so that every statement, branch and loop is exercised. Black-box testing 黑盒测试 designs tests from the specification only: feed inputs, compare the outputs with what was expected, without looking at the code.
Outside looking in, or inside looking at every path
Métodos de teste: lendo o código
- Uma execução seca 手工跟踪 rastreia o código no papel, escrevendo o valor de cada variável em uma tabela de traçagem após cada linha.
- Uma revisão guiada 走查 é uma revisão em equipe: o programador explica o código linha por linha enquanto colegas buscam falhas.
- Teste de caixa branca 白盒测试 projeta testes a partir da estrutura interna do código, para que cada instrução, ramificação e laço seja exercitado. Teste de caixa preta 黑盒测试 projeta testes a partir apenas da especificação: forneça entradas, compare as saídas com o esperado, sem olhar o código.

De fora olhando para dentro, ou de dentro olhando para cada caminho
Designing test cases from the specification only (inputs and expected outputs), ignoring the code inside, is called ______-box testing. · Projetar casos de teste apenas a partir da especificação (entradas e saídas esperadas), ignorando o código interno, é chamado de teste ______-box.
Black-box tests from the spec; white-box uses the code's internal structure to cover statements and branches. · Testes black-box baseados na especificação; white-box usa a estrutura interna do código para cobrir declarações e ramos.
Testing methods: assembling and releasing
- Integration testing 集成测试 combines modules that were tested separately and tests the interfaces between them. A stub 桩 stands in for a module that is not yet written, returning fixed values so the rest can be tested top-down.
- Alpha testing α测试 is done in-house by the developers before release. Beta testing β测试 gives a limited group of real users the program in their own environment.
- Acceptance testing 验收测试 is done by the customer, against the requirements, to decide whether the product is fit for purpose.
Métodos de teste: ensamblagem e liberação
- Teste de integração 集成测试 combina módulos que foram testados separadamente e testa as interfaces entre eles. Um stub 桩 substitui um módulo ainda não escrito, retornando valores fixos para que o resto possa ser testado top-down.
- Teste alpha α测试 é feito internamente pelos desenvolvedores antes do lançamento. Teste beta βtest dá a um grupo limitado de usuários reais o programa em seu próprio ambiente.
- Teste de aceitação 验收测试 é feito pelo cliente, contra os requisitos, para decidir se o produto está apto para o fim a que se destina.
Software process lab · Laboratório de processo de software
Classify development examples by the stage or tool they belong to. · Classifique exemplos de desenvolvimento pela etapa ou ferramenta a que pertencem.
Worked example: which method for which situation
- The reporting module is finished but the database module it calls does not exist yet: test it with a stub that returns fixed data.
- Two modules pass their own tests but fail when the output of one feeds the other: integration testing of the interface.
- The software is complete; the company wants faults found in real conditions before general release: beta testing by a limited group of users.
- The customer decides whether to pay: acceptance testing against the agreed requirements. Name the method and what it is for.
Exemplo resolvido: qual método para qual situação
- O módulo de relatórios está pronto, mas o módulo de banco de dados que ele chama ainda não existe: teste-o com um stub que retorna dados fixos.
- Dois módulos passam seus próprios testes, mas falham quando a saída de um alimenta o outro: teste de integração da interface.
- O software está completo; a empresa quer encontrar falhas em condições reais antes do lançamento geral: teste beta por um grupo limitado de usuários.
- O cliente decide se vai pagar: teste de aceitação contra os requisitos acordados. Nomeie o método e para que ele serve.
Match each situation to the testing method it needs. · Combine cada situação com o método de teste necessário.
Stub for a missing part, beta for real users, acceptance for the customer, integration for the joins. · Stub para parte faltante, beta para usuários reais, aceitação para o cliente, integração para as junções.
Test strategy and test plan
- A test strategy 测试策略 is the high-level approach: which kinds of testing will be done, by whom, when, and what must pass before the next stage.
- A test plan 测试计划 is the detailed list of tests. For each: the purpose, the input data, the expected output, and a column for the actual output when the test is run.
- A test without an expected result is not a test. It only shows what the program did, not whether that was right.
Estratégia de teste e plano de teste
- Uma estratégia de teste 测试 strategy é a abordagem de alto nível: quais kinds de teste serão feitos, por quem, quando, e o que deve passar antes da próxima etapa.
- Um plano de teste 测试计划 é a lista detalhada de testes. Para cada um: o propósito, os dados de entrada, a saída esperada, e uma coluna para a saída real quando o teste for executado.
- Um teste sem um resultado esperado não é um teste. Ele só mostra o que o programa fez, não se isso estava certo.
A test plan lists, for each test, the input data and the expected output. · Um plano de testes lista, para cada teste, os dados de entrada e a saída esperada.
Purpose, input, expected output and a column for the actual output. The strategy is the high-level approach; the plan is the detailed list. · Propósito, entrada, saída esperada e uma coluna para a saída real. A estratégia é a abordagem de alto nível; o plano é a lista detalhada.
Choosing test data
- Normal data 正常数据: typical valid values inside the range, which should be accepted and processed correctly.
- Abnormal data 异常数据: values that should be rejected, out of range or the wrong type.
- Extreme data 极端数据: the largest and smallest values still accepted, at the edges of the range. Boundary data 边界数据: the pairs that straddle each edge, the accepted extreme and the rejected value just outside it, where off-by-one errors hide.
Inside, outside, and right on the line
Escolhendo dados de teste
- Dados normais 正常数据: valores típicos válidos dentro do intervalo, que devem ser aceitos e processados corretamente.
- Dados anormais 异常数据: valores que devem ser rejeitados, fora do intervalo ou do tipo errado.
- Dados extremos 极端数据: os maiores e menores valores ainda aceitos, nas bordas do intervalo. Dados de fronteira 边界数据: os pares que cruzam cada borda, o extremo aceito e o valor rejeitado logo fora dele, onde erros off-by-one se escondem.

Dentro, fora e bem na linha
For a field that accepts marks 0–100, which are the boundary test values? · Para um campo que aceita notas de 0–100, quais são os valores de teste de fronteira?
Boundary data sits at the edges of the valid range (and just outside) — where off-by-one errors hide. · Dados de fronteira ficam nas bordas do intervalo válido (e logo fora) — onde erros off-by-one se escondem.
Worked example: test data for a mark from 0 to 100
| Kind | Data | Expected result |
|---|---|---|
| normal | 50, 75 |
accepted and processed |
| abnormal | -10, 200, "abc" |
rejected: out of range or wrong type |
| extreme | 0, 100 |
accepted: the smallest and largest valid values |
| boundary | -1 and 0, 100 and 101 |
-1 rejected, 0 accepted; 100 accepted, 101 rejected |
- Every row needs the expected result; a table of inputs alone scores half. The extremes are accepted:
-1is boundary, not extreme.
Exemplo resolvido: dados de teste para uma nota de 0 a 100
| Tipo | Dados | Resultado esperado |
|---|---|---|
| normal | 50, 75 |
aceitos e processados |
| anormal | -10, 200, "abc" |
rejeitado: fora da faixa ou tipo errado |
| extremo | 0, 100 |
aceitos: os menores e maiores valores válidos |
| fronteira | -1 e 0, 100 e 101 |
-1 rejeitado, 0 aceito; 100 aceito, 101 rejeitado |
- Cada linha precisa do resultado esperado; uma tabela de entradas sozinha vale metade. Os extremos são aceitos:
-1é fronteira, não extremo.
A field accepts marks from 0 to 100. Which values are extreme test data? Select all · todos that apply. · Um campo aceita notas de 0 a 100. Quais valores são dados de teste extremos? Selecione todos os que se aplicam.
Extreme values are the smallest and largest still accepted. -1 is rejected, so it is boundary or abnormal; 50 is normal. · Valores extremos são os menores e maiores ainda aceitos. -1 é rejeitado, então é fronteira ou anormal; 50 é normal.
Maintenance
- Most of a program's lifetime cost is spent after release. Corrective maintenance 纠正性维护 fixes faults found in use.
- Adaptive maintenance 适应性维护 keeps the program working in a changing environment: a new operating system, a new API, a change in the law.
- Perfective maintenance 完善性维护 improves a program that already works: faster performance, a new feature users asked for. A program may need all three throughout its life.
Fix it, keep it working, make it better
Manutenção
- A maior parte do custo de vida de um programa é gasta após o lançamento. Manutenção corretiva 纠正性维护 corrige falhas encontradas no uso.
- Manutenção adaptativa 适应性维护 mantém o programa funcionando em um ambiente em mudança: um novo sistema operacional, uma nova API, uma mudança na lei.
- Manutenção perfectiva 完善性维护 melhora um programa que já funciona: desempenho mais rápido, um novo recurso solicitado pelos usuários. Um programa pode precisar dos três durante sua vida.

Corrija-o, mantenha-o funcionando, melhore-o
Corrective maintenance fixes faults, perfective maintenance improves features, and adaptive maintenance keeps the software working in a changed environment. · Manutenção corretiva corrige falhas, manutenção perfective melhora recursos, e manutenção adaptativa mantém o software funcionando em um ambiente alterado.
Three maintenance types: corrective (fix bugs), perfective (enhance), adaptive (new OS/hardware/rules). · Três tipos de manutenção: corretiva (corriger bugs), perfective (melhorar), adaptativa (novo SO/hardware/regras).
A payroll program is changed because the tax law changed. Which kind of maintenance is this? · Um programa de folha de pagamento é alterado porque a lei fiscal mudou. Que tipo de manutenção é este?
The program was not faulty and is not being improved; its environment changed. That is adaptive maintenance. · O programa não estava defeituoso e não está sendo melhorado; seu ambiente mudou. Isso é manutenção adaptativa.
Amending an existing program
- Read the existing code until you understand the algorithm and the data flow. Find where the change belongs: which subroutine, which lines.
- Make the change as small as possible; do not rewrite working code. Update every related part: each caller of a changed parameter list, each routine that uses a changed data structure.
- Test the new behaviour and the old: regression testing 回归测试 checks that nothing that used to work has broken. Then document the change.
Alterando um programa existente
- Leia o código existente até entender o algoritmo e o fluxo de dados. Encontre onde a alteração pertence: qual subrotina, quais linhas.
- Faça a alteração o mais pequena possível; não reescreva código funcional. Atualize todas as partes relacionadas: cada chamada de uma lista de parâmetros alterada, cada rotina que usa uma estrutura de dados alterada.
- Teste o novo comportamento e o antigo: teste de regressão 回归测试 verifica se nada que funcionava antes não quebrou. Depois documente a alteração.
After changing a program, regression testing checks that: · Após alterar um programa, o teste de regressão verifica que:
Regression testing re-runs old tests to confirm existing behaviour still works after a change. · O teste de regressão reexecuta testes antigos para confirmar que o comportamento existente ainda funciona após uma alteração.
Put the steps of amending an existing program in order. · Organize os passos para modificar um programa existente em ordem.
Understand, locate, change small, propagate, test everything, record. Skipping the regression test is how a fix breaks something else. · Entenda, localize, mude pouco, propague, teste tudo, registre. Pular o teste de regressão é como uma correção quebrar outra coisa.
Marks that slip away
- Extreme is accepted; abnormal is rejected.
0and100are extreme;-1and101are boundary values on the rejected side. - A logic error does not crash the program. If it crashed, it was a run-time error.
- Alpha is in-house; beta is real users outside. A stub replaces a missing module; it is not a test method for finished code.
- A test plan row without an expected output earns nothing. Regression testing follows every change.
Marcas que escapam
- Extremo é aceito; anormal é rejeitado.
0e100são extremos;-1e101são valores de fronteira no lado rejeitado. - Um erro de lógica não faz o programa travar. Se tivesse travado, seria um erro de execução.
- Alpha é interno; beta é usuários reais externos. Um stub substitui um módulo ausente; não é um método de teste para código finalizado.
- Uma linha de plano de teste sem uma saída esperada não ganha pontos. O teste de regressão segue todo alteration.
You've got it
- syntax errors stop translation · run-time errors crash a running program · logic errors run and give wrong output, found only by testing
- methods: dry run, walkthrough, white-box (from the code), black-box (from the specification), integration (interfaces, with stubs for missing modules), alpha (in-house), beta (real users), acceptance (the customer)
- test data: normal accepted, abnormal rejected, extreme the accepted edges, boundary either side of each edge; every test has an expected result
- maintenance: corrective fixes, adaptive keeps up with the environment, perfective improves; amend small, update callers, regression test
Entendeu?
- erros de sintaxe param a tradução · erros de execução travam um programa em execução · erros de lógica rodam e dão saída errada, encontrados apenas por testes
- métodos: execução seca, revisão guiada, caixa branca (do código), caixa preta (da especificação), integração (interfaces, com stubs para módulos ausentes), alpha (interno), beta (usuários reais), aceitação (o cliente)
- dados de teste: normal aceito, anormal rejeitado, extremo as bordas aceitas, fronteira ambos os lados de cada borda; todo teste tem um resultado esperado
- manutenção: corretiva corrige, adaptativa se adapta ao ambiente, perfeccionadora melhora; altere pequeno, atualize chamadores, teste de regressão