Skip to content

Instantly share code, notes, and snippets.

@mauricioaniche
Created June 30, 2012 15:55
Show Gist options
  • Save mauricioaniche/3024328 to your computer and use it in GitHub Desktop.
Save mauricioaniche/3024328 to your computer and use it in GitHub Desktop.
Exercícios utilizados no estudo sobre TDD (SBES2012)
\chapter{Exercícios}
\label{ape:exercicios}
Os exercícios são os mesmos para todos os grupos. O participante, em caso de dúvidas, poderá perguntar ao pesquisador.
\section{Lembrete ao participante}
Caro participante,
Lembre-se que os problemas aqui propostos simulam complicações do mundo real.
Ao resolvê-los, tenha em mente que esses códigos serão futuramente mantidos
por você ou até por uma equipe maior.
Tente criar o projeto de classes mais elegante possível em todas as soluções. Por serem problemas
recorrentes, imagine que amanhã esse mesmo problema se repetirá.
Escreva um código flexível o suficiente para que novas mudanças sejam fáceis de serem
implementadas.
Você tem 50 minutos por exercício. Mas lembre-se de focar na qualidade. Um exercício de
qualidade pela metade é mais importante do que um exercício completo, sem qualidade.
Lembre-se: dê o melhor de si em ambos os exercícios!
\section{Exercício 1 - Calculadora de Salário}
O participante deve implementar uma calculadora de salário de funcionários. Um
funcionário contém nome, e-mail, salário-base e cargo. De acordo com seu cargo,
a regra para cálculo do salário líquido é diferente:
\begin{enumerate}
\item Caso o cargo seja DESENVOLVEDOR, o funcionário terá desconto de 20\%
caso o salário seja maior ou igual que 3.000,00, ou apenas 10\% caso o salário seja menor
que isso.
\item Caso o cargo seja DBA, o funcionário terá desconto de 25\%
caso o salário seja maior ou igual que 2.000,00, ou apenas 15\% caso o salário seja menor
que isso.
\item Caso o cargo seja TESTADOR, o funcionário terá desconto de 25\%
caso o salário seja maior ou igual que 2.000,00, ou apenas 15\% caso o salário seja menor
que isso.
\item Caso o cargo seja GERENTE, o funcionário terá desconto de 30\%
caso o salário seja maior ou igual que 5.000,00, ou apenas 20\% caso o salário seja menor
que isso.
\end{enumerate}
Exemplos de cálculo do salário:
\begin{itemize}
\item DESENVOLVEDOR com salário-base 5,000.00. Salário final = 4.000,00
\item GERENTE com salário-base de 2.500,00. Salário final: 2.000,00
\item TESTADOR com salário de 550.00. Salário final: 467,50
\end{itemize}
O participante deve criar todo o código responsável para esse cálculo. Uma classe com
o método "main()" deverá ser entregue ao final, com exemplo de uso das classes criadas.
\section{Exercício 2 - Gerador de Nota Fiscal}
O participante deve implementar um sistema de geração de nota fiscal a partir de uma fatura.
Uma fatura contém o nome e endereço do cliente, tipo do serviço e valor da fatura. O gerador de
nota fiscal deverá gerar uma nota fiscal que contém nome do cliente, valor da nota e valor
do imposto a ser pago.
O valor da nota é o mesmo do valor da fatura. Já o cálculo do imposto a ser pago deve seguir
as seguintes regras:
\begin{enumerate}
\item Caso o serviço seja do tipo "CONSULTORIA", o valor do imposto é de 25%;
\item Caso o serviço seja do tipo "TREINAMENTO", o valor do imposto é 15%;
\item Qualquer outro, o valor do imposto é 6%.
\end{enumerate}
Ao final da geração da nota fiscal, o sistema ainda deve enviar essa nota por e-mail,
para o SAP, e persistir na base de dados. Por simplicidade, o desenvolvedor pode usar
os códigos abaixo, que simulam o comportamento do SMTP, SAP e banco de dados:
\begin{lstlisting}
class NotaFiscalDao {
public void salva(NotaFiscal nf) {
System.out.println("salvando no banco");
}
}
class SAP {
public void envia(NotaFiscal nf) {
System.out.println("enviando pro sap");
}
}
class Smtp {
public void envia(NotaFiscal nf) {
System.out.println("enviando por email");
}
}
\end{lstlisting}
O participante é livre para alterar os métodos, parâmetros recebidos ou qualquer outra coisa das classes acima.
Ao final, o participante deve entregar todo o código responsável por geração e encaminhamento da nota fiscal
para os processos acima citados. Uma classe com o método "main()" deverá ser entregue ao final, com
exemplo de uso das classes criadas.
\section{Exercício 3 - Processador de Boletos}
Nesse exercício, o participante deverá implementar um processador de boletos. O objetivo desse processador
é verificar todos os boletos e, caso o valor da soma de todos os boletos seja maior que o valor
da fatura, então essa fatura deverá ser considerada como paga.
Uma fatura contém data, valor total e nome do cliente. Um boleto cóntem código do boleto, data, e valor pago.
O processador de boletos, ao receber uma lista de boletos, deve então, para cada boleto, criar um
"pagamento" associado a essa fatura. Esse pagamento contém o valor pago, a data, e o tipo do pagamento efetuado
(que nesse caso é "BOLETO").
Como dito anteriormente, caso a soma de todos os boletos ultrapasse o valor da fatura, a mesma deve
ser marcada como "PAGA".
O participante deve criar todo o código responsável pelo processador de boletos. Uma classe com
o método "main()" deverá ser entregue ao final, com exemplo de uso das classes criadas.
Exemplos de processamento:
\begin{itemize}
\item Fatura de 1.500,00 com 3 boletos no valor de 500,00, 400,00 e 600,00: fatura marcada como PAGA, e três pagamentos do tipo BOLETO criados
\item Fatura de 1.500,00 com 3 boletos no valor de 1000,00, 500,00 e 250,00: fatura marcada como PAGA, e três pagamento do tipo BOLETO criados
\item Fatura de 2.000,00 com 2 boletos no valor de 500,00 e 400,00: fatura não marcada como PAGA, e dois pagamentos do tipo BOLETO criados
\end{itemize}
\section{Exercício 4 - Filtro de Faturas}
O participante deverá implementar um filtro de faturas. Uma fatura contém um código, um valor, uma data,
e pertence a um cliente. Um cliente tem um nome, data de inclusão e um estado.
O filtro deverá então, dado uma lista de faturas, remover as que se encaixam em algum dos critérios
abaixo:
\begin{itemize}
\item Se o valor da fatura for menor que 2000;
\item Se o valor da fatura estiver entre 2000 e 2500 e a data for menor ou igual a de um mês atrás;
\item Se o valor da fatura estiver entre 2500 e 3000 e a data de inclusão do cliente for menor ou igual a 2 meses atrás;
\item Se o valor da fatura for maior que 4000 e pertencer a algum estado da região Sul do Brasil.
\end{itemize}
O participante deve criar todo o código responsável pelo filtro de faturas.
Uma classe com o método "main()" deverá ser entregue ao final, com exemplo
de uso das classes criadas.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment