Este programa tem qualidade de software correta?

Olá, escrevi um pequeno programa em que se tem uma calculadora simples com as quatro operações aritméticas. Mas preciso saber se este programa tem qualidade de software boa ( e quando digo isto, se ele tem acessibilidade, código limpo, etc).

Meu código ;

public static void main(String[] args) {
	//Initializing the variables because otherwise they can give compile-time error
	int num1 = 0; 
	int num2 = 0;
	int res = 0;
	String op;
	
	try {
	num1 = Integer.parseInt(JOptionPane.showInputDialog("Type a number  "));
	num2 = Integer.parseInt(JOptionPane.showInputDialog("Type another number : "));
	
	op = JOptionPane.showInputDialog(
		  "[+] - Addition" + 
		"\n[-] - Subtraction" + 
		"\n[*] - Multiplication" +
		"\n[/] - Division");
	
	switch(op) {
	
	case "+" : 
	res = num1+num2;
	break;
	
	case "-":
	res = num1-num2;
	break;
	
	case "*" :
	res = num1*num2;
	break;
	
	case "/" :
	res = num1/num2;
	break;
	
	default : JOptionPane.showMessageDialog(null, "Error. You typed something wrong!","Error",JOptionPane.WARNING_MESSAGE);
	

	}
}
	
	catch(Exception er) {
		JOptionPane.showMessageDialog(null,"Something is wrong!" + "\nLog of the error : " + er,"Error",JOptionPane.WARNING_MESSAGE); //Show the error log
		System.exit(1); //Some error that I know could happen, happened, returning the parameter as that went bad.
	}
	
	JOptionPane.showMessageDialog(null, "Result : " + res);
	

}

}

Qualidade nao é uma coisa binária (tem ou nao tem), é mais uma escala.
Se quiser código com qualidade, o caminho mais simples é use teste automatizados. Aprenda a usar o junit. Código fácil de testar geralmente é considerado um código mais limpo.

Para obter código limpo geralmente você separa seu código em diferentes classes/métodos/funcoes cada uma fazendo uma coisa específica, assim fica mais fácil entender o que tá acontecendo.

No seu caso o código é pequeno o suficiente para entender, entao nao faz diferença. Mas na realidade, que você tem código muito maiores, fazer tudo dentro do main() é inviável.

2 curtidas

O codigo até tá limpo, mas a calculadora esta muito amadora. Se for mesmo fazer uma calculadora com ares de profissionalismo, e’ preciso pensar em usar metodos outros que não main. E tambem nem sempre programa limpo e pequeno e’ eficiente. E’ preciso sempre procurar buscar o equilibrio entre codigo limpo e eficiência profissional.

Na verdade a questão aqui era fazer uma pequena e simples calculadora simples, não profissional. Se fosse para fazer profissional eu teria criado métodos para cada ação/operação e chamado no main, ou criado um único método para fazer todas as operações.

Até que o código parece “limpo”, se com limpo queremos dizer que ele não é confuso e/ou obscuro. Mas eu não diria que tem qualidade, por dois motivos:

  • “O Principio da Responsabilidade Única” foi violado, pois, num mesmo método você está fazendo várias coisas (receber entradas, processá-las, e ainda exibir o resultado).
  • int res = 0; você está colocando o resultado (até mesmo de divisões) em um int, sempre perdendo as casas decimais. Sua calculadora não lida com ponto-flutuante, e eu imagino que essa é uma limitação que você não desejou.

Ainda há o problema de não ser fácil testá-lo, que é a questão que o @AbelBueno levantou, se você colocasse o processamento do cálculo em um método à parte já daria pra criar um teste automatizado sobre ele.

Fazendo uma ressalva sobre o que o Abel falou, não pense que ao usar Testes você irá simplesmente conseguir fazer um bom código, se você não souber o que está fazendo (e principalmente porque está fazendo de um jeito ao invés de outro) pode acabar com muito código ruim coberto por testes.

2 curtidas