CSE 111: Programação com Funções

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.

Um diagrama de um sistema de distribuição de água da cidade que armazena água em um tanque  elevado
Um diagrama de um sistema de distribuição de água da cidade que armazena água em um tanque elevado

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.

  1. 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 +
    3w
    4
    Detalhes 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).
  2. 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 =
    ρgh
    1000
    Detalhes 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).
  3. 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ρv2
    2000d
    Detalhes 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).
  4. 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 ρv2n
    2000
    Detalhes 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).
  5. 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).
  6. 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 +
    50
    R
    ) ((
    D
    d
    )⁴ − 1)
    P =
    kρv2
    2000
    Detalhes 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.

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.

Erros:

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.

  1. Crie uma pasta para o projeto desta semana e dê a ela o nome que você quiser.
  2. Baixe o programa fluxo_de_agua.py e salve-o na pasta que você criou.
  3. Abra a pasta que você acabou de criar no VSCode.
  4. Crie um arquivo chamado test_fluxo_de_agua.py no diretório do seu projeto.
  5. Adicione as seguintes instruções de importação no topo do seu arquivo test_fluxo_de_agua.py .
    from pytest import approx
    import pytest
  6. 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__])
  7. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_altura_coluna_agua. Esta função de teste deve chamar calc_altura_coluna_agua pelo menos quatro vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Altura da
    Torre
    Altura da Parede do
    Tanque
    Altura Esperada da
    Coluna de Água
    0 0 0
    0 10 7.5
    25 0 25
    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.
  8. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_pressao_pela_altura. Esta função de teste deve chamar calc_pressao_pela_altura pelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Altura Pressão
    Esperada
    approx
    Tolerância
    Absoluta
    0 0 0.001
    30.2 295.628 0.001
    50 489.450 0.001
  9. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_perda_pressao_tubo. Esta função de teste deve chamar calc_perda_pressao_tubo pelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Diâmetro
    do Tubo
    Comprimento
    do Tubo
    Fator de
    Atrito
    Velocidade do
    Fluido
    Perda
    Esperada
    de Pressão
    Tolerância
    Absoluta
    approx
    0.048692 0 0.018 1.75 0 0.001
    0.048692 200 0 1.75 0 0.001
    0.048692 200 0.018 0 0 0.001
    0.048692 200 0.018 1.75 -113.008 0.001
    0.048692 200 0.018 1.65 -100.462 0.001
    0.28687 1000 0.013 1.65 -61.576 0.001
    0.28687 1800.75 0.013 1.65 -110.884 0.001
  10. Execute seu arquivo test_fluxo_de_agua.py e 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.

  1. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_perda_pressao_conexoes. Esta função de teste deve chamar calc_perda_pressao_conexoes pelo menos cinco vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Velocidade do
    Fluido
    Quantidade de
    Conexões
    Perda
    Esperada
    de Pressão
    Tolerância
    Absoluta
    approx
    0 3 0 0.001
    1.65 0 0 0.001
    1.65 2 -0.109 0.001
    1.75 2 -0.122 0.001
    1.75 5 -0.306 0.001
  2. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_num_reynolds. Esta função de teste deve chamar calc_num_reynolds pelo menos cinco vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Diâmetro
    Hidráulico
    Velocidade do
    Fluido
    Número de
    Reynolds
    Esperado
    Tolerância
    Absoluta
    approx
    0.048692 0 0 1
    0.048692 1.65 80069 1
    0.048692 1.75 84922 1
    0.28687 1.65 471729 1
    0.28687 1.75 500318 1
  3. No seu arquivo test_fluxo_de_agua.py, escreva uma função de teste chamada test_calc_perda_pressao_reducao_tubo. Esta função de teste deve chamar calc_perda_pressao_reducao_tubo pelo menos três vezes para verificar se está funcionando corretamente. Use os seguintes números na sua função de teste.
    Diâmetro
    Maior
    Velocidade do
    Fluido
    Número de
    Reynolds
    Diâmetro
    Menor
    Perda
    Esperada
    de Pressão
    Tolerância
    Absoluta
    approx
    0.28687 0 1 0.048692 0 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:

  1. Execute seu arquivo test_fluxo_de_agua.py e 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 de pytest, corrija o erro e execute o arquivo test_fluxo_de_agua.py novamente 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 ============================
  2. Execute seu programa fluxo_de_agua.py finalizado. 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).

Documente suas melhorias:

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.

Não tire zero!

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:

  1. Voltar para: Visão Geral da Semana | Página Inicial