Mais sobre Testes de Software
Revisando Classes de Equivalência
Exemplo 5: números primos
from funções import é_primo
# testes com números primos
assert é_primo(2)
assert é_primo(3)
assert é_primo(11)
# testes com números não primos
assert not é_primo(1)
assert not é_primo(4)
assert not é_primo(81)
print('Todos os testes passando!')
Entrada | Saída |
x | é_primo |
2 | True |
3 | True |
11 | True |
1 | False |
4 | False |
81 | False |
Este código passa nos testes?
# arquivo funções.py
def é_primo(numero):
for divisor in range(2, numero//2 + 1):
if numero % divisor == 0:
return False
return True
E este aqui?
# arquivo funções.py
def é_primo(numero):
if numero == 1:
return False
else:
for divisor in range(2, numero//2 + 1):
if numero % divisor == 0:
return False
return True
E as classes inválidas?
Testando valores inválidos
from funções import é_primo
# testes com números primos
assert é_primo(2)
assert é_primo(3)
assert é_primo(11)
# testes com números não primos
assert not é_primo(1)
assert not é_primo(4)
assert not é_primo(81)
# que tipo de testes vem aqui?
...
print('Todos os testes passando!')
Entrada | Saída |
x | é_primo |
2 | True |
3 | True |
11 | True |
1 | False |
4 | False |
81 | False |
0 | Exceção |
-2 | Exceção |
2.35 | Exceção |
'abc' | Exceção |
Testando valores inválidos
...
# que tipo de testes vem aqui?
try:
é_primo(0)
raise Exception
except AssertionError: pass
...
try:
é_primo('abc')
raise Exception
except AssertionError: pass
...
print('Todos os testes passando!')
Entrada | Saída |
x | é_primo |
... | ... |
0 | Exceção |
-2 | Exceção |
2.35 | Exceção |
'abc' | Exceção |
Testando valores inválidos
from funções import é_primo
# testes com números primos
assert é_primo(2)
assert é_primo(3)
assert é_primo(11)
# testes com números não primos
assert not é_primo(1)
assert not é_primo(4)
assert not é_primo(81)
# testes com valores inválidos
try:
é_primo(0)
raise Exception
except AssertionError: pass
try:
é_primo(-2)
raise Exception
except AssertionError: pass
try:
é_primo(2.35)
raise Exception
except AssertionError: pass
try:
é_primo('abc')
raise Exception
except AssertionError: pass
print('Todos os testes passando!')
Entrada | Saída |
x | é_primo |
2 | True |
3 | True |
11 | True |
1 | False |
4 | False |
81 | False |
0 | Exceção |
-2 | Exceção |
2.35 | Exceção |
'abc' | Exceção |
Função com precondições
# arquivo funções.py
def é_primo(numero):
assert isinstance(numero, int) and numero >= 1
if numero == 1:
return False
else:
for divisor in range(2, numero//2 + 1):
if numero % divisor == 0:
return False
return True
Análise de Valor Limítrofe (1)
Análise de Valor Limítrofe (2)
Exemplo 6: Testando a idade
from funções import analisa
# valores não inteiros -inválida
try:
analisa(0.35)
raise Exception
except AssertionError: pass
try:
analisa('abc')
raise Exception
except AssertionError: pass
# inteiros negativos - inválida try:
analisa(-45)
raise Exception
except AssertionError: pass
try:
analisa(-1)
raise Exception
except AssertionError: pass
Entrada | Saída |
x | analisa |
0.35 | Exceção |
'abc' | Exceção |
-45 | Exceção |
-1 | Exceção |
0 | 'menor' |
8 | 'menor' |
17 | 'menor' |
18 | 'adulto' |
56 | 'adulto' |
64 | 'adulto' |
65 | 'idoso' |
80 | 'idoso' |
120 | 'idoso' |
121 | Exceção |
205 | Exceção |
# menor de idade - válida
assert analisa(0) == 'menor'
assert analisa(8) == 'menor'
assert analisa(17) == 'menor'
# adulto - válida
assert analisa(18) == 'adulto'
assert analisa(56) == 'adulto'
assert analisa(64) == 'adulto'
# idoso - válida
assert analisa(65) == 'idoso'
assert analisa(80) == 'idoso'
assert analisa(120) == 'idoso'
# improvável - inválida
try:
analisa(121)
raise Exception
except AssertionError: pass
try:
analisa(205)
raise Exception
except AssertionError: pass
print('Todos os testes passando!')
Exemplo 6: análise da idade
# arquivo funções.py
# ...
def analisa(idade):
assert isinstance(idade, int)
assert 0 <= idade <= 120
if idade < 18:
return 'menor'
elif idade < 65:
return 'adulto'
else:
return 'idoso'
Exercícios
(Resolva testando também com valores inválidos)
C = (F – 32) / 1.8
F = 1.8 C + 32