Giter VIP home page Giter VIP logo

t1-tecprog's Introduction

UnB - Universidade de Brasilia
FGA - Faculdade do Gama
TPPE - Técnicas de Programação para Plataformas Emergentes

Trabalho Prático 1 - Test-Driven Development

Alunos

Matrícula Aluno
17/0039668 Lucas Ganda Carvalho
17/0047326 Wictor Bastos Girardi
17/0056155 Andŕe Aben-Athar de Freitas
17/0039803 Lucas Medeiros

Utilização

Primeiro é necessário instalar a biblioteca de testes pytest utilizando o comando:

pip install pytest

Lembre de isolar o ambiente utilizando um ambiente virtual

Após finalizar a instalação basta rodar os testes presentes no arquivo src/test.py utilizando o comando:

pytest src/test.py

Enunciado do trabalho

Seja o seguinte cenário descrito a seguir:

De um modo bastante resumido, o Imposto de Renda de Pessoa Física (IRPF) de todo contribuinte é calculado mensalmente considerando os rendimentos tributáveis recebidos no mês corrente e as deduções legais. Da subtração desses valores (rendimentos - deduções) obtem-se a base de cálculo, sobre o qual será calculado o valor do imposto. Há 5 faixas de cálculo de imposto, cada qual com sua alíquota (definida em %) a ser aplicada sobre o valor que a base de cálculo ocupou da faixa. O valor do imposto final é a soma dos valores de impostos a serem pagos para cada faixa e a alíquota efetiva total (em %) é o resultado do valor do imposto dividido pelo total de rendimentos. Cada um desses passos está detalhado a seguir.

Como rendimentos tributáveis entende-se todos aqueles valores recebidos pelo contribuinte tais como salários, aluguéis, participação em lucros e rendimentos de empresas, dividendos, lucros de aplicações financeiras, dentre outros. O valor total desses rendimentos deve ser utilizado para efeitos do cálculo do IRPF.

O contribuinte tem direito a vários deduções no mês corrente. Como deduções integrais entende-se aquelas cujos valores totais serão abatidos do valor total de rendimentos. São exemplos de deduções integrais:

  • Contribuição previdenciária oficial (podendo ser mais de uma contribuição, por exemplo, no contracheque + contribuição via carnê INSS);
  • Pensão alimentícia;
  • Previdência privada ou Fundo de Previdência dos Servidores públicos (Funpresp);
  • Valores pagos via carnê-leão, dentre outros.

O contribuinte poderá ainda deduzir para cada dependente legal o valor de R$189,59 por mês.
Todas essas deduções deverão ser somadas para efeitos de cálculo do total de deduções a que o contribuinte tem direito.

A base de cálculo do IRPF é dada pela subtração do total de rendimentos pelo total de deduções.

Para o valor da base de cálculo, é calculado o valor de cada uma das 5 faixas de imposto. As faixas possuem as seguintes alíquotas:

Faixa Alíquota
1a. 0% (isenta)
2a. 7,5%
3a. 15%
4a. 22,5%
5a. 27,5%

Portanto, baseado na tabela acima, os valores da base de cálculo que atingiram as faixas serão multiplicados pelas respectivas alíquotas para cálculo do valor do imposto de cada uma das faixas. O valor total do imposto a ser pago naquele mês é a soma dos valores dos impostos de todas as faixas.

Por fim, a alíquota efetiva é calculada como sendo a taxa (%) do valor total do imposto pelo valor total de rendimentos.

Todo esses cálculos podem ser realizados através do Simulador de IRPF da Receita Federal Brasileira (RFB).

Com base na descrição do cálculo do IRPF acima, o trabalho a ser realizado pelo grupo consiste na criação de um simulador similar ao simulador disponibilizado pela RFB. Esse simulador deverá ser construído através do método de TDD utilizando, obrigatoriamente, as técnicas de falsificação, duplicação e triangulação de testes.

O projeto resultante do desenvolvimento através de TDD deverá ser capaz de:

  • Cadastro de rendimentos:

    • Cadastrar rendimentos com a descrição (salario, aluguel, etc...) e valor
    • Não permitir descrição em branco (nesse caso lançar uma exceção do tipo DescricaoEmBrancoException
    • Não permitir informar valores de rendimentos em branco ou inválidos (negativos por exemplo). Nesses casos lançar exceção do tipo ValorRendimentoInvalidoException
  • Cadastro de deduções:

    • Cadastrar deduções através de sua descrição (Previdencia privada, Funpresp, etc...) e valor:
      • Não permitir cadastro de deduções com descrição em branco. Nesse caso lançar DescricaoEmBrancoException.
      • Não permitir cadastro de valores em branco ou inválidos para as deduções. Nesses casos lançar uma exceção do tipo ValorDeducaoInvalidoException
    • Cadastrar uma ou mais contribuição previdenciária oficial, informando descrição e valores.
      • As restrições apresentadas no caso acima se aplicam integralmente para contribuições previdenciárias.
    • Cadastrar uma ou mais pensão alimentícia, informando valores.
      • As restrições apresentadas no caso acima se aplicam integralmente para contribuições previdenciárias.
    • Cadastrar dependentes (zero ou mais), informando o nome e a data de nascimento de cada dependente.
      • Não permitir o cadastro de um dependente com o nome em branco. Nesse caso deverá lançar uma exceção do tipo NomeEmBrancoException.
  • Calculo dos impostos das faixas de impostos:

    • Calcular o valor de faixa de base de cálculo de cada uma das faixas e o valor do imposto para cada uma das faixas.
    • Calcular o valor total das faixas de base de cálculo e o valor total do imposto de todas as faixas.
  • Calcular a alíquota efetiva.

O trabalho deverá apresentar o emprego das três técnicas de TDD (falsificação, duplicação e triangulação) em, pelo menos, nas três seguintes situações:

  • Calculo do total de deduções;
  • Cálculos da base de calculo e do valor de imposto da faixa 1;
  • Cálculo da aliquota efetiva.

Nesses três casos deverá, para efeito de evidência, ter a seguinte sequencia de commits:

  • falsificação;
  • duplicação;
  • triangulação.

❗❗❗ATENÇÃO: todos os testes finais deverão estar triangulados por parametrização, com exceção dos testes de exceções.


Grupos de alunos

Os trabalhos deverão ser executados por grupos de até 6 alunos. O grupo deverá criar um repositório público no GitHub, cujo arquivo README.md deverá conter os nomes e matrículas dos componentes.

Entrega do trabalho

Os trabalhos deverão ser entregues através de repositório no GitHub, até as 23:59:59hs do dia 25 de fevereiro de 2022, impreterivelmente.

Os grupos deverão informar ao professor o endereço do repositório do projeto antes da data final de entrega.

Valor do trabalho

30 pontos.

Forma de avaliação

Os trabalhos serão avaliados através:

  • da corretude dos cálculos realizados pelo simulador;
  • da utilização de testes parametrizados em todos os testes funcionais;
  • da utilização de testes de exceção e, por fim,
  • das seqüências de commits para os casos em que o emprego das técnicas de falsificação, duplicação e triangulação é obrigatório.

t1-tecprog's People

Contributors

andreabenf avatar lucasgandac avatar medeiroslucas avatar

Watchers

 avatar Wictor Girardi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.