Giter Club home page Giter Club logo

source-code-inspection's People

Contributors

calebepb avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

source-code-inspection's Issues

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.

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;
    }
    }

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.

[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).

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;
    }
    }

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

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.

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.

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

TicketMachine#01

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

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.

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();
     }
    

    }
    }

TicketMachine#05

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

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.

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.

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.

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]--;
    }

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++)

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#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.

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.