Teste de Software
Prof. Elmano Ramalho Cavalcanti
https://sites.google.com/site/elmano
Aula 01 - Motivação
1
"Errar é humano, mas para realmente
estragar tudo, você precisa de um
computador."Paul R. Ehrlich
2
Motivação
Quanto custa um bug?
10 Famous Software Disasters
3
1. Lançamento do Mariner 1 (1962)
https://en.wikipedia.org/wiki/Mariner_1 4
Lançamento do Mariner 1 (1962)
Custo: $18 milhões (equiv. a $150 milhões em 2019)
Desastre: O foguete Mariner 1 com uma sonda espacial para
Venus foi desviado de sua rota de vôo pretendida logo após o
lançamento. O Controle da Missão destruiu o foguete 293
segundos após o lançamento.
Causa: Um programador transcreveu incorretamente uma
fórmula manuscrita em código de computador,
desconsiderando uma barra sobrescrita.
5
2. Hartford Coliseum Collapse (1978)
https://connecticuthistory.org/almost-a-tragedy-the-collapse-of-the-hartford-civic-center/ 6
2. Hartford Coliseum Collapse (1978)
Custo: $90 milhões (equiv. a $346 milhões em 2019)
Desastre: Apenas algumas horas depois de milhares de fãs
terem saído do Hartford Coliseum, o teto de treliça de aço
desmoronou sob o peso da neve molhada.
Causa: O programador do software CAD assumiu
incorretamente que os suportes do telhado enfrentariam
apenas uma compressão pura. Quando um dos suportes se
soltou da neve, desencadeou uma reação em cadeia.
7
3. Soviet nuclear false alarm incident
8
3. Soviet nuclear false alarm incident
Custo: Quase a 3ª Guerra Mundial !!!
Desastre: O sistema soviético de alerta indicou falsamente
que os EUA haviam lançado cinco mísseis balísticos.
Felizmente, o oficial de serviço soviético raciocinou que se os
EUA estivessem realmente atacando teriam lançado mais de
cinco mísseis, e considerou falso alarme.
Causa: Um bug no software soviético não conseguiu filtrar
falsas detecções de mísseis causadas pela luz do sol
refletindo nas nuvens. 9
"o homem que
sozinho salvou o
mundo da guerra
nuclear" 10
4. Wall Street Crash (1987) “Black Monday”
11
4. Wall Street Crash (1987)
Custo: $500 bilhões em um dia!
Desastre: “Black Monday” (19 de outubro de 1987), o Dow
Jones despencou 508 pontos, perdendo 22,6% de seu valor.
Causa: Os computadores compram e vendem ações
automaticamente com base em algoritmos definidos por
empresas de negociação de ações. Quando o clima de um
mercado muda, esses programas de computador reagem de
acordo com um conjunto de equações matemáticas. Porém,
uma saída planejada resultou em um excesso de vendas. 12
5. Falha nas linhas telefônicas da AT&T (1990)
http://users.csc.calpoly.edu/~jdalbey/SWE/Papers/att_collapse 13
5. Falha nas linhas telefônicas da AT&T (1990)
Custo: 75M de chamadas e 200K reservas de voos perdidas.
Desastre: Um único switch em um dos 114 centros de
comutação da AT&T sofreu um pequeno problema mecânico e
desligou o centro. Após retornar, ele enviou uma mensagem
para outros centros de comutação, o que fez com que eles
desligassem e derrubassem toda a rede da AT&T por 9 horas.
Causa: Uma única linha de código com bug, após uma
atualização de software implementada para acelerar as
chamadas causou um efeito cascata que desligou a rede. 14
5. Falha nas linhas telefônicas da AT&T (1990)
Um mês antes do colapso, os técnicos atualizaram o software
para acelerar o processamento de certos tipos de mensagens.
Embora o código atualizado tenha sido rigorosamente
testado, um bug de uma linha foi adicionado inadvertidamente
ao software de recuperação de cada um dos 114 switches da
rede.
Quer tentar achar o erro no código?
15
1 while (ring receive buffer not empty
and side buffer not empty) DO
2 Initialize pointer to first message in side buffer
or ring receive buffer
3 get copy of buffer
4 switch (message)
5 case (incoming_message):
6 if (sending switch is out of service) DO
7 if (ring write buffer is empty) DO
8 send "in service" to status map
9 else
10 break
END IF
11 process incoming message, set up pointers to
optional parameters
12 break
END SWITCH
13 do optional parameter work
Custou $60 milhões!
16
Explicação do erro
Quando a chave de destino recebeu a segunda das duas mensagens com tempo
aproximado enquanto ainda estava ocupada com a primeira (buffer não vazio, linha
7), o programa deveria ter saído da cláusula if (linha 7), processado a mensagem
recebida, e configure os ponteiros para o banco de dados (linha 11). Em vez disso,
devido à instrução break na cláusula else (linha 10), o programa abandonou
completamente a instrução case e começou a fazer o trabalho de parâmetro
opcional que substituiu os dados (linha 13). O software de correção de erros
detectou a sobregravação e desligou o interruptor enquanto ele reinicia. Como
todos os switches continham o mesmo software, as redefinições se espalharam
pela rede, incapacitando o sistema.
17
6. Patriot Fails Soldiers (1991)
http://www-users.math.umn.edu/~arnold//disasters/patriot.html 18
6. Patriot Fails Soldiers (1991)
Custo: 28 soldados mortos e 100 feridos
Desastre: Durante a primeira Guerra do Golfo, um sistema
americano de mísseis Patriot na Arábia Saudita não conseguiu
interceptar um novo míssil Scud iraquiano. O míssil destruiu
um quartel do exército americano.
Causa: Um erro de arredondamento de software calculou
incorretamente o tempo, fazendo com que o sistema Patriot
ignorasse o míssil Scud de entrada.
19
7. Pentium Fails Long Division (1993)
http://www.willamette.edu/~mjaneba/pentprob.html 20
7. Pentium Fails Long Division (1993)
Custo: $475 milhões + queda na credibilidade da corporação
Desastre: O famoso chip Pentium da Intel ocasionalmente
cometeu erros ao dividir números de ponto flutuante em um
intervalo específico. Ex: dividir 4195835.0 / 3145727.0 produziu
1,33374 em vez de 1,33382, um erro de 0,006%. Estimativa de
5 milhões de chips defeituosos em circulação.
Causa: O divisor na unidade de ponto flutuante Pentium tinha
uma tabela de divisão defeituosa, faltando cerca de cinco
entre mil entradas, resultando nesses erros de
arredondamento. 21
7. Pentium Fails Long Division (1993)
Qual o valor de A - (( A / B) X B) ?
http://www.trnicely.net/pentbug/pentbug.zip
Se A = 4.195.835 e B = 3.145.727, o processador retornaria o
valor 256!
Defeito de ponto flutuante!
22
8. Ariane Rocket Goes Boom (1996)
https://around.com/ariane.html 23
8. Ariane Rocket Goes Boom (1996)
Custo: $500 milhões
Desastre: O Ariane 5, o mais novo foguete não-tripulado da
Europa, foi intencionalmente destruído segundos após o
lançamento em seu primeiro voo. Também foi destruída a
carga de quatro satélites científicos para estudar como o
campo magnético da Terra interage com os ventos solares.
24
8. Ariane Rocket Goes Boom (1996)
Causa: O desligamento ocorreu quando o computador de
orientação tentou converter a velocidade de foguete lateral
de 64 bits para um formato de 16 bits. O número era muito
grande e ocorreu um erro de estouro. Quando o sistema de
orientação foi desligado, o controle passou para uma unidade
redundante idêntica, que também falhou porque estava
executando o mesmo algoritmo.
25
9. Mars Climate Crasher (1998)
26
9. Mars Climate Crasher (1998)
Custo: $125 milhões
Desastre: Depois de uma jornada de 286 dias da Terra, o
Mars Climate Orbiter disparou seus motores para entrar em
órbita ao redor de Marte. Os motores dispararam, mas a
espaçonave caiu muito na atmosfera do planeta,
provavelmente causando a colisão em Marte.
Causa: O software que controlava os propulsores da Orbiter
usava unidades imperiais (libras de força), em vez de unidades
métricas (Newtons), conforme especificado pela NASA. 27
10. Bug do milênio (1999)
Custo: $500 bilhões
Desastre: O desastre de um homem é a fortuna de outro
homem, como demonstrado pelo infame bug do ano 2000. As
empresas gastaram bilhões em programadores para consertar
uma falha no software legado. Embora não tenham ocorrido
falhas significativas no computador, a preparação para o bug
Y2K teve um impacto significativo em termos de custo e
tempo em todas as indústrias que usavam computadores.
28
10. Bug do milênio (1999)
Causa: Para economizar espaço de armazenamento do
computador, o software legado geralmente utilizava o ano em
apenas dois dígitos, como “99” para 1999. O software também
interpretou “00” como 1900 em vez de 2000, então com a
chegada do ano 2000, temia-se um colapso geral.
29
10. Bug do milênio (1999)
30
Bugs encontrados no dia-a-dia pelo
professor
31
Falhas em sistemas encontradas no dia-a-dia...
32
33
Outro bug da
Um bug ridículo:
- Um usuário tenta pagar um boleto, mas erra a senha;
- Ao tentar novamente (se for poucos segundos depois),
mesmo acertando a senha o sistema nega o pagamento,
indicando que já há uma transação de pagamento para tal
boleto!
34
35
36
Senha errada!
37
38
Senha certa!
Após essa mensagem, o sistema
retorna à tela inicial! O usuário terá
que preencher tudo novamente!
39
- Erro: a indicação de que houve uma tentativa válida de pagar
um boleto (seq. numérica de código de barras) deveria ser
confirmada apenas se realmente ocorreu o pagamento.
40
Falhas em sistemas encontradas no dia-a-dia...
41
42
Falhas em sistemas encontradas no dia-a-dia...
43
44
Falhas em sistemas encontradas no dia-a-dia...
45
46
47
Falhas em sistemas encontradas no dia-a-dia...
48
49
Falhas em sistemas encontradas no dia-a-dia...
50
51
Falhas em sistemas encontradas no dia-a-dia...
52
53
Falhas em sistemas encontradas no dia-a-dia...
54
55
Falhas em sistemas encontradas no dia-a-dia...
56
57
Defeitos chatos do Q-Acadêmico que poderiam ser
consertados em menos de um minuto.
1) Na hora de inserir notas, deveria haver uma máscara, para
adicionar a vírgula automaticamente;
2) O calendário popup pode aparecer cortado.
3) Lista de presença de avaliação não mostra a data!
58
Falhas em sistemas encontradas no dia-a-dia...
59
60
Exceções mais frequentes em aplicações Java
https://blog.overops.com/the-top-10-exceptions-types-in-production-java-a
pplications-based-on-1b-events/
https://blog.overops.com/we-crunched-1-billion-java-logged-errors-heres-
what-causes-97-of-them/
61
62
NullPointerException
63
“Eu chamo isso de meu erro de bilhões
de dólares. Foi a invenção da
referência nula em 1965 ... Isso levou a
inúmeros erros, vulnerabilidades e
falhas no sistema, que provavelmente
causaram um bilhão de dólares de dor e
danos nos últimos quarenta anos ”.
(Charles Antony Richard Hoare, 2009)
https://pt.wikipedia.org/wiki/Charles_Antony_Richard_Hoare
Não é à toa que a linguagem Kotlin é Null Safety
Leia a postagem desse link:
http://www.pedromendes.com.br/2017/05/31/kotlin-null-safety/
64
Exercício
Escrever programas que contenham bugs referentes a pelo
menos cinco das exceções que mais ocorrem em aplicação java:
1. NullPointerException
2. NumberFormatException
3. IllegalArgumentException
4. RuntimeException
5. IllegalStateException
6. NoSuchMethodException
65
7. ClassCastException
8. Exception
9. ParseException
10. InvocationTargetException
66

Teste de software - aula 01 (motivação)

  • 1.
    Teste de Software Prof.Elmano Ramalho Cavalcanti https://sites.google.com/site/elmano Aula 01 - Motivação 1
  • 2.
    "Errar é humano,mas para realmente estragar tudo, você precisa de um computador."Paul R. Ehrlich 2
  • 3.
    Motivação Quanto custa umbug? 10 Famous Software Disasters 3
  • 4.
    1. Lançamento doMariner 1 (1962) https://en.wikipedia.org/wiki/Mariner_1 4
  • 5.
    Lançamento do Mariner1 (1962) Custo: $18 milhões (equiv. a $150 milhões em 2019) Desastre: O foguete Mariner 1 com uma sonda espacial para Venus foi desviado de sua rota de vôo pretendida logo após o lançamento. O Controle da Missão destruiu o foguete 293 segundos após o lançamento. Causa: Um programador transcreveu incorretamente uma fórmula manuscrita em código de computador, desconsiderando uma barra sobrescrita. 5
  • 6.
    2. Hartford ColiseumCollapse (1978) https://connecticuthistory.org/almost-a-tragedy-the-collapse-of-the-hartford-civic-center/ 6
  • 7.
    2. Hartford ColiseumCollapse (1978) Custo: $90 milhões (equiv. a $346 milhões em 2019) Desastre: Apenas algumas horas depois de milhares de fãs terem saído do Hartford Coliseum, o teto de treliça de aço desmoronou sob o peso da neve molhada. Causa: O programador do software CAD assumiu incorretamente que os suportes do telhado enfrentariam apenas uma compressão pura. Quando um dos suportes se soltou da neve, desencadeou uma reação em cadeia. 7
  • 8.
    3. Soviet nuclearfalse alarm incident 8
  • 9.
    3. Soviet nuclearfalse alarm incident Custo: Quase a 3ª Guerra Mundial !!! Desastre: O sistema soviético de alerta indicou falsamente que os EUA haviam lançado cinco mísseis balísticos. Felizmente, o oficial de serviço soviético raciocinou que se os EUA estivessem realmente atacando teriam lançado mais de cinco mísseis, e considerou falso alarme. Causa: Um bug no software soviético não conseguiu filtrar falsas detecções de mísseis causadas pela luz do sol refletindo nas nuvens. 9
  • 10.
    "o homem que sozinhosalvou o mundo da guerra nuclear" 10
  • 11.
    4. Wall StreetCrash (1987) “Black Monday” 11
  • 12.
    4. Wall StreetCrash (1987) Custo: $500 bilhões em um dia! Desastre: “Black Monday” (19 de outubro de 1987), o Dow Jones despencou 508 pontos, perdendo 22,6% de seu valor. Causa: Os computadores compram e vendem ações automaticamente com base em algoritmos definidos por empresas de negociação de ações. Quando o clima de um mercado muda, esses programas de computador reagem de acordo com um conjunto de equações matemáticas. Porém, uma saída planejada resultou em um excesso de vendas. 12
  • 13.
    5. Falha naslinhas telefônicas da AT&T (1990) http://users.csc.calpoly.edu/~jdalbey/SWE/Papers/att_collapse 13
  • 14.
    5. Falha naslinhas telefônicas da AT&T (1990) Custo: 75M de chamadas e 200K reservas de voos perdidas. Desastre: Um único switch em um dos 114 centros de comutação da AT&T sofreu um pequeno problema mecânico e desligou o centro. Após retornar, ele enviou uma mensagem para outros centros de comutação, o que fez com que eles desligassem e derrubassem toda a rede da AT&T por 9 horas. Causa: Uma única linha de código com bug, após uma atualização de software implementada para acelerar as chamadas causou um efeito cascata que desligou a rede. 14
  • 15.
    5. Falha naslinhas telefônicas da AT&T (1990) Um mês antes do colapso, os técnicos atualizaram o software para acelerar o processamento de certos tipos de mensagens. Embora o código atualizado tenha sido rigorosamente testado, um bug de uma linha foi adicionado inadvertidamente ao software de recuperação de cada um dos 114 switches da rede. Quer tentar achar o erro no código? 15
  • 16.
    1 while (ringreceive buffer not empty and side buffer not empty) DO 2 Initialize pointer to first message in side buffer or ring receive buffer 3 get copy of buffer 4 switch (message) 5 case (incoming_message): 6 if (sending switch is out of service) DO 7 if (ring write buffer is empty) DO 8 send "in service" to status map 9 else 10 break END IF 11 process incoming message, set up pointers to optional parameters 12 break END SWITCH 13 do optional parameter work Custou $60 milhões! 16
  • 17.
    Explicação do erro Quandoa chave de destino recebeu a segunda das duas mensagens com tempo aproximado enquanto ainda estava ocupada com a primeira (buffer não vazio, linha 7), o programa deveria ter saído da cláusula if (linha 7), processado a mensagem recebida, e configure os ponteiros para o banco de dados (linha 11). Em vez disso, devido à instrução break na cláusula else (linha 10), o programa abandonou completamente a instrução case e começou a fazer o trabalho de parâmetro opcional que substituiu os dados (linha 13). O software de correção de erros detectou a sobregravação e desligou o interruptor enquanto ele reinicia. Como todos os switches continham o mesmo software, as redefinições se espalharam pela rede, incapacitando o sistema. 17
  • 18.
    6. Patriot FailsSoldiers (1991) http://www-users.math.umn.edu/~arnold//disasters/patriot.html 18
  • 19.
    6. Patriot FailsSoldiers (1991) Custo: 28 soldados mortos e 100 feridos Desastre: Durante a primeira Guerra do Golfo, um sistema americano de mísseis Patriot na Arábia Saudita não conseguiu interceptar um novo míssil Scud iraquiano. O míssil destruiu um quartel do exército americano. Causa: Um erro de arredondamento de software calculou incorretamente o tempo, fazendo com que o sistema Patriot ignorasse o míssil Scud de entrada. 19
  • 20.
    7. Pentium FailsLong Division (1993) http://www.willamette.edu/~mjaneba/pentprob.html 20
  • 21.
    7. Pentium FailsLong Division (1993) Custo: $475 milhões + queda na credibilidade da corporação Desastre: O famoso chip Pentium da Intel ocasionalmente cometeu erros ao dividir números de ponto flutuante em um intervalo específico. Ex: dividir 4195835.0 / 3145727.0 produziu 1,33374 em vez de 1,33382, um erro de 0,006%. Estimativa de 5 milhões de chips defeituosos em circulação. Causa: O divisor na unidade de ponto flutuante Pentium tinha uma tabela de divisão defeituosa, faltando cerca de cinco entre mil entradas, resultando nesses erros de arredondamento. 21
  • 22.
    7. Pentium FailsLong Division (1993) Qual o valor de A - (( A / B) X B) ? http://www.trnicely.net/pentbug/pentbug.zip Se A = 4.195.835 e B = 3.145.727, o processador retornaria o valor 256! Defeito de ponto flutuante! 22
  • 23.
    8. Ariane RocketGoes Boom (1996) https://around.com/ariane.html 23
  • 24.
    8. Ariane RocketGoes Boom (1996) Custo: $500 milhões Desastre: O Ariane 5, o mais novo foguete não-tripulado da Europa, foi intencionalmente destruído segundos após o lançamento em seu primeiro voo. Também foi destruída a carga de quatro satélites científicos para estudar como o campo magnético da Terra interage com os ventos solares. 24
  • 25.
    8. Ariane RocketGoes Boom (1996) Causa: O desligamento ocorreu quando o computador de orientação tentou converter a velocidade de foguete lateral de 64 bits para um formato de 16 bits. O número era muito grande e ocorreu um erro de estouro. Quando o sistema de orientação foi desligado, o controle passou para uma unidade redundante idêntica, que também falhou porque estava executando o mesmo algoritmo. 25
  • 26.
    9. Mars ClimateCrasher (1998) 26
  • 27.
    9. Mars ClimateCrasher (1998) Custo: $125 milhões Desastre: Depois de uma jornada de 286 dias da Terra, o Mars Climate Orbiter disparou seus motores para entrar em órbita ao redor de Marte. Os motores dispararam, mas a espaçonave caiu muito na atmosfera do planeta, provavelmente causando a colisão em Marte. Causa: O software que controlava os propulsores da Orbiter usava unidades imperiais (libras de força), em vez de unidades métricas (Newtons), conforme especificado pela NASA. 27
  • 28.
    10. Bug domilênio (1999) Custo: $500 bilhões Desastre: O desastre de um homem é a fortuna de outro homem, como demonstrado pelo infame bug do ano 2000. As empresas gastaram bilhões em programadores para consertar uma falha no software legado. Embora não tenham ocorrido falhas significativas no computador, a preparação para o bug Y2K teve um impacto significativo em termos de custo e tempo em todas as indústrias que usavam computadores. 28
  • 29.
    10. Bug domilênio (1999) Causa: Para economizar espaço de armazenamento do computador, o software legado geralmente utilizava o ano em apenas dois dígitos, como “99” para 1999. O software também interpretou “00” como 1900 em vez de 2000, então com a chegada do ano 2000, temia-se um colapso geral. 29
  • 30.
    10. Bug domilênio (1999) 30
  • 31.
    Bugs encontrados nodia-a-dia pelo professor 31
  • 32.
    Falhas em sistemasencontradas no dia-a-dia... 32
  • 33.
  • 34.
    Outro bug da Umbug ridículo: - Um usuário tenta pagar um boleto, mas erra a senha; - Ao tentar novamente (se for poucos segundos depois), mesmo acertando a senha o sistema nega o pagamento, indicando que já há uma transação de pagamento para tal boleto! 34
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
    Após essa mensagem,o sistema retorna à tela inicial! O usuário terá que preencher tudo novamente! 39
  • 40.
    - Erro: aindicação de que houve uma tentativa válida de pagar um boleto (seq. numérica de código de barras) deveria ser confirmada apenas se realmente ocorreu o pagamento. 40
  • 41.
    Falhas em sistemasencontradas no dia-a-dia... 41
  • 42.
  • 43.
    Falhas em sistemasencontradas no dia-a-dia... 43
  • 44.
  • 45.
    Falhas em sistemasencontradas no dia-a-dia... 45
  • 46.
  • 47.
  • 48.
    Falhas em sistemasencontradas no dia-a-dia... 48
  • 49.
  • 50.
    Falhas em sistemasencontradas no dia-a-dia... 50
  • 51.
  • 52.
    Falhas em sistemasencontradas no dia-a-dia... 52
  • 53.
  • 54.
    Falhas em sistemasencontradas no dia-a-dia... 54
  • 55.
  • 56.
    Falhas em sistemasencontradas no dia-a-dia... 56
  • 57.
  • 58.
    Defeitos chatos doQ-Acadêmico que poderiam ser consertados em menos de um minuto. 1) Na hora de inserir notas, deveria haver uma máscara, para adicionar a vírgula automaticamente; 2) O calendário popup pode aparecer cortado. 3) Lista de presença de avaliação não mostra a data! 58
  • 59.
    Falhas em sistemasencontradas no dia-a-dia... 59
  • 60.
  • 61.
    Exceções mais frequentesem aplicações Java https://blog.overops.com/the-top-10-exceptions-types-in-production-java-a pplications-based-on-1b-events/ https://blog.overops.com/we-crunched-1-billion-java-logged-errors-heres- what-causes-97-of-them/ 61
  • 62.
  • 63.
    NullPointerException 63 “Eu chamo issode meu erro de bilhões de dólares. Foi a invenção da referência nula em 1965 ... Isso levou a inúmeros erros, vulnerabilidades e falhas no sistema, que provavelmente causaram um bilhão de dólares de dor e danos nos últimos quarenta anos ”. (Charles Antony Richard Hoare, 2009) https://pt.wikipedia.org/wiki/Charles_Antony_Richard_Hoare
  • 64.
    Não é àtoa que a linguagem Kotlin é Null Safety Leia a postagem desse link: http://www.pedromendes.com.br/2017/05/31/kotlin-null-safety/ 64
  • 65.
    Exercício Escrever programas quecontenham bugs referentes a pelo menos cinco das exceções que mais ocorrem em aplicação java: 1. NullPointerException 2. NumberFormatException 3. IllegalArgumentException 4. RuntimeException 5. IllegalStateException 6. NoSuchMethodException 65 7. ClassCastException 8. Exception 9. ParseException 10. InvocationTargetException
  • 66.