S03 - Projeto: Pressão da Água
Finalidade
Provar que você pode escrever e executar funções de teste para ajudar a encontrar e corrigir erros em um programa Python.
Projeto
Não use IA para gerar o código deste programa.
Usar IA para gerar este programa é uma violação da política de IA do curso e pode resultar em nota zero na atividade, reprovação na disciplina ou até remoção do programa.
Se você precisar de ajuda com a atividade ou tiver dúvidas sobre o uso de IA, por favor pergunte ao seu instrutor.
Sua cidade precisa de um voluntário para terminar de escrever e testar um programa de computador que será usado para ajudar a projetar um novo sistema de água potável.
Contexto
A pequena cidade onde você mora recebeu uma verba para construir e instalar um sistema de abastecimento de água potável para a comunidade. Isso trará grande benefício, fornecendo água limpa para todos. A verba cobrirá o custo dos materiais, mas não a mão de obra necessária para realizar o trabalho. A prefeitura reuniu voluntários para ajudar a projetar e instalar esse novo sistema hídrico.
A equipe decidiu construir um tanque elevado e instalar uma bomba que empurra a água para o reservatório, onde ela é armazenada. Quando alguém abre uma torneira, a água corre do tanque através de tubos até a torneira. A gravidade da Terra, agindo sobre a água no tanque elevado, gera a pressão necessária para que ela escoe naturalmente pelos tubos de abastecimento até a torneira.
A equipe é responsável por projetar o sistema e assegurar que a água alcance todas as edificações. Para isso, o projetista deve determinar a altura da torre, o tipo e o diâmetro dos tubos, bem como o percurso que eles seguirão.
Um voluntário desenvolveu um programa para auxiliar nesse processo, mas, quando a equipe começou a utilizá-lo, percebeu que os resultados não estavam corretos. Como o programador não está disponível para ajustar o código, solicitaram a sua ajuda. Sua missão é descobrir por que o programa não está funcionando adequadamente, corrigir o problema e comprovar que a correção foi realizada.
Você precisará criar testes que confirmem se cada função do programa está funcionando como deveria. Esse processo é chamado de teste de unidade.
Requisitos
As seguintes funções precisam ser corrigidas e validadas. Cada uma realiza um cálculo físico fundamental para determinar a pressão e o comportamento da água no sistema.
-
Altura da Coluna de Água
Calcula a altura efetiva da coluna de água somando a altura da torre com três quartos da altura do tanque.
def calc_altura_coluna_agua(altura_torre, altura_tanque):
h = t +3w4Detalhes da fórmula:
- h é a altura da coluna de água.
- t é a altura da torre (
altura_torre). - w é a altura das paredes do tanque (
altura_tanque).
-
Ganho de Pressão pela Altura
Calcula a pressão exercida pela coluna de água multiplicando a densidade da água, a aceleração da gravidade e a altura da coluna, e dividindo o resultado por 1000.
def calc_pressao_pela_altura(altura):
P =ρgh1000Detalhes da fórmula:
- P: pressão em quilopascal (kPa).
- ρ: densidade da água (998.2 kg/m³).
- g: aceleração da gravidade (9.80665 m/s²).
- h: altura da coluna de água em metros (
altura).
-
Perda de Pressão no Tubo
Calcula a perda de pressão ao longo de um tubo devido ao atrito, considerando o fator de atrito, o comprimento do tubo, a densidade da água e a velocidade do fluido.
def calc_perda_pressao_tubo(diametro_tubo, comprimento_tubo, fator_atrito, velocidade_fluido):
P =− fLρv22000dDetalhes da fórmula:
- P: perda de pressão em kPa.
- f: fator de atrito do tubo (
fator_atrito). - L: comprimento do tubo em metros (
comprimento_tubo). - ρ: densidade da água (998.2 kg/m³).
- v: velocidade do fluido em m/s (
velocidade_fluido). - d: diâmetro interno do tubo (
diametro_tubo).
-
Perda de Pressão nas Conexões
Calcula a perda de pressão causada pelas conexões do sistema, considerando o número de curvas e a velocidade do fluido.
def calc_perda_pressao_conexoes(velocidade_fluido, quantidade_conexoes):
P =−0.04 ρv2n2000Detalhes da fórmula:
- P: perda de pressão em kPa.
- ρ: densidade da água (998.2 kg/m³).
- v: velocidade do fluido (
velocidade_fluido). - n: número de conexões (
quantidade_conexoes).
-
Número de Reynolds
Calcula o número de Reynolds, que indica se o escoamento do fluido é laminar ou turbulento, com base na densidade, diâmetro, velocidade e viscosidade do fluido.
def calc_num_reynolds(diametro_hidraulico, velocidade_fluido):
R =ρdvμDetalhes da fórmula:
- R: número de Reynolds
- ρ: densidade da água (998.2 kg/m³).
- d: diâmetro hidráulico em metros (
diametro_hidraulico). - v: velocidade em que a água que flui através do tubo em m/s (
velocidade_fluido). - μ: viscosidade dinâmica da água (0.0010016 Pa·s).
-
Perda de Pressão por Redução do Tubo
Calcula a perda de pressão que ocorre quando o fluido passa de um tubo de maior diâmetro para outro menor, considerando a relação entre os diâmetros e o número de Reynolds.
def calc_perda_pressao_reducao_tubo(diametro_maior, velocidade_fluido, calc_num_reynolds, diametro_menor):
k = (0.1 +) ((50R)⁴ − 1)DdP =− kρv22000Detalhes da fórmula:
- k: coeficiente de perda calculado pela primeira fórmula.
- R: número de Reynolds (
calc_num_reynolds). - D: diâmetro do tubo maior (
diametro_maior). - d: diâmetro do tubo menor (
diametro_menor). - P: perda de pressão em kPa.
- ρ: densidade da água (998.2 kg/m³).
- v: velocidade do fluido no tubo de diâmetro maior em metros/segundo (
velocidade_fluido)
Informações úteis.
-
O conteúdo de preparação para esta aula explica como usar
pytest,asserteapproxpara verificar automaticamente se as funções estão corretas. Ele também contém um exemplo de função de teste e links para documentação adicional sobrepytest. -
A função
approx do pytest(conteúdo em inglês) aceita argumentos nomeados opcionais. Um desses argumentos nomeados é abs. O argumento abs faz com que a funçãoapproxcompare os valores reais e esperados até um dígito específico após o ponto decimal e ignore os dígitos seguintes. Por exemplo, as duas linhas de código a seguir fazem com que o pytest compare o número real retornado decalc_perda_pressao_conexoespara −0.306 apenas com o terceiro dígito após o ponto decimal e ignore todos os dígitos no número real após o 6.assert calc_perda_pressao_conexoes(1.75, 5) == approx(-0.306, abs=0.001)Observe no exemplo anterior que o valor de abs é 0.001, o que faz com que a função
approxignore todos os dígitos após o terceiro dígito depois da vírgula decimal. -
O vídeo Introdução a Testes Automatizados com Pytest mostra a criação de duas funções de teste e o uso do
pytestpara executá-las.
Etapa
Comece corrigindo e testando o programa fluxo_de_agua.py que foi criado por outra pessoa. Para esta etapa, você escreverá funções de teste para testar três das funções em fluxo_de_agua.py. Você usará os resultados dos testes para identificar problemas que você precisará corrigir.
Você encontrará um código que contém erros. Algumas funções já funcionam, outras apresentam problemas e algumas ainda não foram implementadas. Quando um teste falhar, isso pode ocorrer por dois motivos: ou a função está implementada de forma incorreta, ou o próprio teste foi escrito de maneira errada. Sua tarefa será identificar a causa e corrigir o que for necessário.
- Crie uma pasta para o projeto desta semana e dê a ela o nome que você quiser.
- Baixe o programa fluxo_de_agua.py e salve-o na pasta que você criou.
- Abra a pasta que você acabou de criar no VSCode.
- Crie um arquivo chamado
test_fluxo_de_agua.pyno diretório do seu projeto. - Adicione as seguintes instruções de importação no topo do seu arquivo test_fluxo_de_agua.py .
from pytest import approx import pytest - Copie e cole o código a seguir na parte inferior do seu arquivo
test_fluxo_de_agua.py .# Chama a função main que faz parte do pytest para que o # o computador execute as funções de teste neste arquivo. pytest.main(["-v", "--tb=line", "-rN", __file__]) -
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_altura_coluna_agua. Esta função de teste deve chamarcalc_altura_coluna_aguapelo menos quatro vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Altura da
TorreAltura da Parede do
TanqueAltura Esperada da
Coluna de Água0.0 0.0 0.0 0.0 10.0 7.5 25.0 0.0 25.0 48.3 12.8 57.9 Dicas:- Não se esqueça de importar a função de
fluxo_de_agua.py - Escreva um teste de cada vez, teste-o e então siga em frente.
- Não se esqueça de importar a função de
-
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_pressao_pela_altura. Esta função de teste deve chamarcalc_pressao_pela_alturapelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Altura Pressão
Esperadaapprox
Tolerância
Absoluta0.0 0.000 0.001 30.2 295.628 0.001 50.0 489.450 0.001 -
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_perda_pressao_tubo. Esta função de teste deve chamarcalc_perda_pressao_tubopelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Diâmetro
do TuboComprimento
do TuboFator de
AtritoVelocidade do
FluidoPerda
Esperada
de PressãoTolerância
Absoluta
approx0.048692 0.00 0.018 1.75 0.000 0.001 0.048692 200.00 0.000 1.75 0.000 0.001 0.048692 200.00 0.018 0.00 0.000 0.001 0.048692 200.00 0.018 1.75 -113.008 0.001 0.048692 200.00 0.018 1.65 -100.462 0.001 0.286870 1000.00 0.013 1.65 -61.576 0.001 0.286870 1800.75 0.013 1.65 -110.884 0.001 - Execute seu arquivo
test_fluxo_de_agua.pye certifique-se de que todas as três funções de teste sejam aprovadas.
Envio de Etapa
Na data de entrega ou antes dela, retorne ao Canvas e reporte seu progresso nesta etapa.
Conclusão do Projeto
Conclua seu projeto completando as funções de teste restantes e corrigindo quaisquer erros descobertos.
-
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_perda_pressao_conexoes. Esta função de teste deve chamarcalc_perda_pressao_conexoespelo menos cinco vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Velocidade do
FluidoQuantidade de
ConexõesPerda
Esperada
de PressãoTolerância
Absoluta
approx0.00 3 0.000 0.001 1.65 0 0.000 0.001 1.65 2 -0.109 0.001 1.75 2 -0.122 0.001 1.75 5 -0.306 0.001 -
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_num_reynolds. Esta função de teste deve chamarcalc_num_reynoldspelo menos cinco vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Diâmetro
HidráulicoVelocidade do
FluidoNúmero de
Reynolds
EsperadoTolerância
Absoluta
approx0.048692 0.00 0 1 0.048692 1.65 80069 1 0.048692 1.75 84922 1 0.286870 1.65 471729 1 0.286870 1.75 500318 1 -
No seu arquivo
test_fluxo_de_agua.py, escreva uma função de teste chamadatest_calc_perda_pressao_reducao_tubo. Esta função de teste deve chamarcalc_perda_pressao_reducao_tubopelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.Diâmetro
MaiorVelocidade do
FluidoNúmero de
ReynoldsDiâmetro
MenorPerda
Esperada
de PressãoTolerância
Absoluta
approx0.28687 0.00 1 0.048692 0.000 0.001 0.28687 1.65 471729 0.048692 -163.744 0.001 0.28687 1.75 500318 0.048692 -184.182 0.001
Procedimento de Teste
Verifique se seu programa de teste funciona corretamente seguindo cada etapa deste procedimento:
-
Execute seu arquivo
test_fluxo_de_agua.pye certifique-se de que todas as seis funções de teste sejam aprovadas. Se alguma das funções de teste não for aprovada, há um erro na função de programa que você escreveu ou na função de teste que você escreveu. Leia a saída depytest, corrija o erro e execute o arquivotest_fluxo_de_agua.pynovamente até que todas as funções de teste sejam aprovadas.> python test_fluxo_de_agua.py ========================== test session starts========================== platform win32--Python 3.8.6, pytest-6.1.2. py-1.9.0. pluggy rootdir: C:\Users\cse111\week03 collected 3 itens test_fluxo_de_agua.py ::test_calc_altura_coluna_agua PASSED [ 16%] test_fluxo_de_agua.py ::test_calc_pressao_pela_altura PASSED [ 33%] test_fluxo_de_agua.py ::test_calc_perda_pressao_tubo PASSED [ 50%] test_fluxo_de_agua.py ::test_calc_perda_pressao_conexoes PASSED [ 66%] test_fluxo_de_agua.py ::test_calc_num_reynolds PASSED [ 83%] test_fluxo_de_agua.py ::test_calc_perda_pressao_reducao_tubo PASSED [100%] ============================ 3 passed in 0.08s ============================
-
Execute seu programa
fluxo_de_agua.pyfinalizado. Insira a entrada mostrada abaixo e certifique-se de que seu programa imprima a saída mostrada abaixo.Altura da torre de água (metros): 36.6 Altura das paredes do tanque de água (metros): 9.1 Comprimento do tubo de abastecimento, do tanque até o terreno (metros): 1524.0 Número de ângulos de 90° no tubo de abastecimento: 3 Comprimento do tubo de abastecimento até a casa (metros): 15.2 Pressão na casa: 158.7 quilopascal
Desafios Adicionais
Se o seu programa atender aos requisitos para esta atividade, conforme descrito acima, você receberá 93% dos pontos possíveis. Para ganhar os 7% de pontos restantes, você precisará adicionar um ou mais recursos ao seu programa. Use sua criatividade. Adicione um comentário no topo do seu código que explique a(s) melhoria(s).
-
Dentro das funções do seu programa
fluxo_de_agua.py, você pode ter digitado números para a aceleração da gravidade da Terra, a densidade da água e a viscosidade dinâmica da água. Em vez de usar os números dentro de suas funções, defina as seguintes constantes fora de suas funções. Então, use os nomes constantes no lugar dos números dentro de suas funções.Nome Valor ACELERACAO_DA_GRAVIDADE_TERRA 9.8066500 DENSIDADE_AGUA 998.2000000 VISCOSIDADE_DINAMICA_AGUA 0.0010016 -
As funções que você escreveu para esta tarefa calculam a pressão da água em quilopascal (kPa). No Brasil, a pressão da água é geralmente expressa em Metros de Coluna d'Água (MCA). Escreva uma função no seu programa
fluxo_de_agua.pyque converta kPa em MCA. Então, na parte inferior da sua funçãomain, adicione o código que chama sua função de conversão e exibe o valor final da pressão em kPa e MCA. -
Adicione uma função de teste ao seu arquivo
test_fluxo_de_agua.pyque verifique se sua função de conversão de kPa para MCA funciona corretamente. Na sua função de teste, chame sua função de conversão várias vezes, para que sua função de teste seja um teste rigoroso.
Se você escolher adicionar recursos ao seu código, coloque um comentário no topo do seu arquivo descrevendo o que você fez para melhorar seu programa.
Envio do Projeto
Retorne ao Canvas e envie seus arquivos fluxo_de_agua.py e test_fluxo_de_agua.py para que seu programa seja avaliado.
Se o seu programa contiver um erro que o impeça de ser executado até o fim, a tarefa receberá nota zero e você precisará corrigir e reenviar o código. Em outras palavras, evite enviar um programa que não funciona. Em vez disso, peça ajuda para entender o erro e corrigi-lo antes do envio.
Links Úteis:
- Voltar para: Visão Geral da Semana | Página Inicial