Giter Club home page Giter Club logo

source-code-inspection's Issues

TICKET MACHINE - INSPEÇÃO

1-) Engenharia de Requisitos

As estações de trem freqüentemente fornecem máquinas de vender bilhetes que imprimem um bilhete quando um cliente insere a quantia correta para pagar a passagem. As máquinas mantêm uma soma total da quantidade de dinheiro que coletou durante toda sua operação.

Tipo de Defeito: Ambiguidade
As máquinas que vendem bilhete são atendidas por atendentes. Voce ate pode ter fazer recarga de bihete sozinho numa licenciada, mas vc nunca compra o cartão (bilhete )neste tipo de maquina.

1.2-) Diagrama dos Casos de Uso
Tipo de Defeito: Fato Incorreto
Primeiro insiro o bilhete, depois solicito a quantia, a opção de pagamento e após pago, recebo uma autenticação confirmando o processo. A opção troco teria que ser confirmada no inicio do processo se existe, porque se o processo é concluído e não há troco e o cliente fica sem.

1.3.1-) CSU01 – Inserir dinheiro

Uma quantia de dinheiro é inserida na máquina. É importante ressaltar que essa quantia sempre é representada por uma única nota de papel-moeda.

Tipo de Defeito: Fato Incorreto
O sistema tem que deixar claro se há no troco, se ele só da a opção de dinheiro em uma nota ele tem que me garantir que vou ter meu troco se precisar. Outra opção que seria ideal ter e não há, é o pagamento em cartão de débito, funciona como dinheiro à vista.

  1. O Cliente insere uma nota de papel- moeda.

Tipo de Defeito: Fato Incorreto
A primeira opção deveria ser validar o bilhete e assim pedir a forma de pagamento. Feito esse processo voce paga e valida o pagamento.

  1. O Sistema adiciona o valor ao saldo disponível.
  2. O Sistema informa que a nota de papel- moeda foi aceita.

Tipo de Defeito: Fato Incorreto
Voce paga, depois o sistema deve validar esse pagamento. Confirmado, ai sim o sistema adiciona o valor ao saldo disponível e informa ele, assim finalizar a operação.

  1. O Sistema devolve a nota de papel- moeda.

Tipo de Defeito: Fato Incorreto
O sistema teria que validar primeiramente se a nota é verdadeira ou falsa.

1.4 Protótipos > 1.4.1 Tela principal

Tipo de Defeito: Fato Incorreto
Deveria ter a opção de corrigir caso haja necessidade.

2 Projeto Orientado a Objetos > 2.1 Diagrama de Classes Principal

Tipo de Defeito: Ambiguidade
Qual a real necessidade do Iterator no diagrama, possivelmente seria para caso o troco seja numa nota que não exista.

logica do FOR incorreta

classe troco linha 61, o loop do for sera executado apenas uma vez por causa da condição, ou a variavel I deveria sofre decremento ou o valor inicial de I deveria ser alterado.

for (int i = 0; i <= 5; i++)

Source-Code-Inspection

Classe > TicketMachine
Sistema não informa se saldo é insuficiente.
Categoria: Comissão > Severidade: Alta

Correção:

public String imprimir() throws SaldoInsuficienteException {
        if (saldo < valor) {
            System.out.println("O saldo é insuficiente!");
            throw new SaldoInsuficienteException();
        }
        String result = "**************\n";
        result += " R$ " + saldo + ",00 *\n";
        result += "**************\n";
        return result;
    }

Classe > TicketMachine
Sistema não valida se a nota devolvida foi retirada.
Categoria: Comissão > Severidade: Alta

Correção:

public void inserir(int amount) throws PapelMoedaInvalidaException {
        boolean found = false;
        int note = -1;
        System.out.println("Aguarde. O sistema está validando as notas.");
        for (int i = 0; i < papelMoeda.length && !found; i++) {
            if (papelMoeda[i] == amount) {
                found = true;
            }
            note = i;
        }
        if (!found) {
            while (!found) {
                refund(note);
                System.out.println("Retire a nota não aceita");
                if (note == -1) {
                    found = true;
                } else {
                    note = -1;
                }
            }
            throw new PapelMoedaInvalidaException();
        } else {
            System.out.println("A nota de papel moeda $" + papelMoeda[note] + " foi aceita");
            this.saldo += amount;
            System.out.println("O saldo atual é: " + saldo);
        }
    }
   .
   .
   .
void refund(int indice){
        papelMoeda[indice]--;
    }

return incorreto

classe troco, linha 63 e 66, os returns estão com logica incorreta juntamente com o IF.

@OverRide
public boolean hasNext() {
for (int i = 0; i <= 5; i++) {
if (troco.papeisMoeda[i] = null) {
return false;
}
}
return true;
}

posição incorreta do vetor

na classe troco linha 44, deveria ter sido utilizado o índice [0].

papeisMoeda[0] = new PapelMoeda(2, count);

TicketMachine#03

linha 25: O if inicia na posição 1, enquanto o vetor inicia na posição 0, com isso, a primeira posição do vetor é ignorada.

TicketMachine#01

linha 25: No lugar do número 1, deveria estar a variável i.

Documentação | Atividade de Inspeção

No parágrafo a frase “As máquinas mantem uma soma total da quantidade de dinheiro” não sabemos se essas informações se trata da soma total das máquinas ou do usuário.

[DOCUMENTAÇÃO] Ator não é representado no Caso de Uso

• Severidade: Alta
• Tipo do problema: Omissão
• Descrição: Não é mostrado um dos atores do sistema, para ver a soma total da quantidade de dinheiro que coletou durante toda a sua operação (no caso um administrador).

TICKET MACHINE

package br.calebe.ticketmachine.core;

import br.calebe.ticketmachine.exception.PapelMoedaInvalidaException;
import br.calebe.ticketmachine.exception.SaldoInsuficienteException;
import java.util.Iterator;

/**
*Alunos: Guilherme Maoli e Leonardo Portella

  • @author Calebe de Paula Bianchini
    */
    public class TicketMachine {

    protected int valor;
    //Desempenho:nao foi criado saldo ALTO
    protected int saldo;
    //Comissao: nao foi criado a classe papelMoeda ALTO
    protected int[] papelMoeda = {2, 5, 10, 20, 50, 100};

    public TicketMachine(int valor) {
    this.valor = valor;
    //Desempenho:nao foi criado saldo ALTO
    //Comissão: deveria ser classe construtor, pois esta chamando o saldo MEDIO
    this.saldo = 0;
    }

    public void inserir(int quantia) throws PapelMoedaInvalidaException {
    boolean achou = false;
    for (int i = 0; i < papelMoeda.length && !achou; i++) {
    //DADOS:valor de papelmoeda deve ser i ALTO
    if (papelMoeda[1] == quantia) {
    achou = true;
    }
    }
    if (!achou) {
    throw new PapelMoedaInvalidaException();
    }
    //Desempenho:nao foi criado saldo ALTO
    this.saldo += quantia;
    }
    //Desempenho:nao foi criado saldo ALTO

    public int getSaldo() {
    return saldo;
    }
    //Excesso: nao foi criado Iterator ALTO
    //A função "getTroco()" sempre retorna "null" portanto não é necessaria BAIXO
    public Iterator getTroco() {
    return null;
    }
    //Comissão: desnecessario a consulta de saldo nesse caso BAIXO
    public String imprimir() throws SaldoInsuficienteException {
    //Desempenho:nao foi criado saldo ALTO
    if (saldo < valor) {
    throw new SaldoInsuficienteException();
    }
    String result = "\n";
    result += "
    R$ " + saldo + ",00 ****\n";
    result += "
    ***\n";
    return result;
    }
    }

TicketMachine #02

linha 25: Não é atribuído valor a variável “quantia”, com isso, não da para ser compara a uma posição x do vetor

Relatório de Inspeção de Código

Comissão – No código temos uma função “saldoInsuficiente” quanto o cliente tenta retirar o seu bilhete após solicita-lo. Na documentação dos casos de uso não temos a solicitação de saldo insuficiente.

TicketMachine#06

linha 43: Neste método o if não funcionará, pois o saldo foi somado à quantia anteriormente, no qual saldo tinha um valor inteiro e quantia era null.

TicketMachine#04

linha 32: Já que não foi atribuído um valor à variável “quantia”, a variável “saldo” também não poderá receber o valor da mesma.

Engenharia de Requisitos - Quantidade de dinheiro coletada

Tipo: Omissão.
Severidade: Alta.
Durante toda sua operação no dia ela vai manter a soma total da quantidade de dinheiro que coletou? Então, depois da primeira venda no dia as pessoas seguintes vão poder imprimir o bilhete sem pagar, porque a soma total da quantidade de dinheiro está coletada

TROCO

package br.calebe.ticketmachine.core;

import java.util.Iterator;

/**
*Alunos: Guilherme Maoli e Leonardo Portella

  • @author Calebe de Paula Bianchini
    */
    class Troco {

    protected PapelMoeda[] papeisMoeda;

    public Troco(int valor) {
    papeisMoeda = new PapelMoeda[6];
    int count = 0;
    //O loop em questão é infinito pois a variavel que o define não é alterada dentro do proprio laço ALTO
    while (valor % 100 != 0) {
    count++;
    }
    papeisMoeda[5] = new PapelMoeda(100, count);
    count = 0;
    //O loop em questão é infinito pois a variavel que o define não é alterada dentro do proprio laço ALTO
    while (valor % 50 != 0) {
    count++;
    }
    papeisMoeda[4] = new PapelMoeda(50, count);
    count = 0;
    //O loop em questão é infinito pois a variavel que o define não é alterada dentro do proprio laço ALTO
    while (valor % 20 != 0) {
    count++;
    }
    papeisMoeda[3] = new PapelMoeda(20, count);
    count = 0;
    //O loop em questão é infinito pois a variavel que o define não é alterada dentro do proprio laço ALTO
    while (valor % 10 != 0) {
    count++;
    }
    papeisMoeda[2] = new PapelMoeda(10, count);
    count = 0;
    //O loop em questão é infinito pois a variavel que o define não é alterada dentro do proprio laço ALTO
    while (valor % 5 != 0) {
    count++;
    }
    papeisMoeda[1] = new PapelMoeda(5, count);
    count = 0;
    while (valor % 2 != 0) {
    count++;
    }
    papeisMoeda[1] = new PapelMoeda(2, count);
    }

    public Iterator getIterator() {
    return new TrocoIterator(this);
    }

    class TrocoIterator implements Iterator {

     protected Troco troco;
    
     public TrocoIterator(Troco troco) {
         this.troco = troco;
     }
    
     @Override
     public boolean hasNext() {
         for (int i = 6; i >= 0; i++) {
             **//O codigo nunca entrara no laço for pois a variavel RET sempre sera NULL ALTO**
             if (troco.papeisMoeda[i] != null) {
                 return true;
             }
         }
         return false;
     }
    
     @Override
     public PapelMoeda next() {
         PapelMoeda ret = null;
         for (int i = 6; i >= 0 && ret != null; i++) {
             if (troco.papeisMoeda[i] != null) {
                 ret = troco.papeisMoeda[i];
                 troco.papeisMoeda[i] = null;
             }
         }
         return ret;
     }
    
     @Override
     **//O metodo "remove()" não é necessário pois apenas chama um outro metodo BAIXO**
     public void remove() {
         next();
     }
    

    }
    }

método incorreto

classe troco, linha 70, método sem proposito e implementado de maneira incorreta.
o método deveria ser apagado.

Documentação | Atividade de Inspeção

Ambiguidade – Na primeira linha as informações “As estações de trem frequentemente fornecem maquinas” essa informação não há necessidade pois as maquinas já são para as estações de trem.

TicketMachine#05

linha 40: O método retorna nulo independente de ter troco ou não.

Relatório de Inspeção de Código

Desempenho – Na class troco o laço while que realizado a devolução do troco está com a divisão erra, pois ele apresenta a divisão por 100% !=0 ele conta caso a divisão for 0 ele vai ficar infinitamente no laço.

PAPEL MOEDA

package br.calebe.ticketmachine.core;

/**
*Alunos: Guilherme Maoli e Leonardo Portella

  • @author Calebe de Paula Bianchini
    */
    public class PapelMoeda {
    //Comissao: no lugar do protected deveria ser public - BAIXO
    protected int valor;
    protected int quantidade;
    //Construtor - BAIXO
    public PapelMoeda(int valor, int quantidade) {
    this.valor = valor;
    this.quantidade = quantidade;
    }
    //Comissao: não foi criado setValor - ALTO
    public int getValor() {
    return valor;
    }
    //Comissao: não foi criado setQuantidade - ALTO
    public int getQuantidade() {
    return quantidade;
    }
    }

metodo com erro de logica

classe troco linha 82, o método chama o Next() porem a logica do next faz com que ele sempre retorne null, e não realizando nada não importa a situação.

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.