Se nos referirmos às exceções como bugs, por que não chamá-lo de bug em primeiro lugar, em vez de uma exceção?
Se no código é chamado de exceção e, assim que ocorre, é chamado de bug. Então, por que não chamar isso de bug em primeiro lugar?
Obrigado por qualquer resposta ou comentário.
Respostas:
Bem, é bem simples: nem todas as exceções são erros (e da mesma forma, nem todos os erros se manifestam como exceções).
Como exemplo de uma exceção que não é um bug, se você estiver lendo um arquivo de uma unidade USB e alguém arrancar a unidade do soquete. Isso gerará uma exceção (na maioria dos idiomas que oferecem suporte a exceções). Mas não é um bug no código.
Por outro lado, um bug pode se manifestar como um erro de cálculo ou algo assim. Você ainda recebe uma resposta, mas não é a correta.
Dito isto, uma exceção que chega até o topo da pilha provavelmente é um bug. No meu exemplo de USB acima, você deve conseguir capturar essa exceção e apresentar um bom erro ao usuário dizendo "Não foi possível ler o arquivo porque ele não está mais conectado". ou alguma coisa. Se você apenas lhes apresentar um
IOException
e algum código de erro descolado, isso é um bug. Mas a exceção em si não é.fonte
Pura e simples, uma exceção não é (sempre) um bug!
Uma exceção é lançada (ou deveria ser) quando algo excepcional acontece. Se houver um problema no meu disco rígido e um arquivo não puder ser gravado, isso não será um erro. Isso é uma falha do hardware.
Um bug geralmente é resultado de uma programação ruim. Se um aplicativo faz algo que não é esperado como resultado de um erro de programação, isso é um bug.
fonte
Eles não são a mesma coisa.
Um bug é um comportamento não intencional de um software: o software não faz o que deveria. Os bugs podem viver em todos os níveis de desenvolvimento de software, desde erros antigos simples até erros lógicos até especificações funcionais inadequadas.
Uma exceção , por outro lado, pode se referir a uma condição incomum de um programa, divergindo da operação normal, ou, mais especificamente, à construção de linguagem usada para sinalizar e manipular tais condições.
O fato de ocorrer uma exceção pode ser um sinal de um bug, mas geralmente não é. Por exemplo, um aplicativo que deve baixar um documento de uma URL e processá-lo localmente pode gerar uma exceção quando o servidor remoto estiver inoperante: o aplicativo está se afastando da operação normal (não pode baixar e processar o documento), mas se lida com a exceção corretamente e se recupera, então não há erro.
Por outro lado, a presença de um bug não se manifesta necessariamente como uma exceção. Um aplicativo pode descartar silenciosamente os dados inseridos, em vez de armazená-los em seu banco de dados; nenhuma exceção é lançada, mas ainda é um bug.
fonte
Exceções e bugs não têm relação alguma. Claro, às vezes você lança uma exceção e isso significa um bug. Mas às vezes significa apenas uma circunstância excepcional e incomum, que não é necessariamente um bug no programa. Especialmente em uma linguagem feliz como exceção, como Java, onde todas as operações padrão e seu cão lançam cerca de cinco exceções diferentes - por exemplo, falha na abertura do arquivo, falha na leitura do arquivo etc.
fonte
Exceções nem sempre são relacionadas a erros. Pense nisso como algo que pode dar errado com o que você está fazendo.
Um exemplo que vem à mente é InetAddress.getByName (), usado para resolver um nome de domínio. Se algo acontecer e uma UnknownHostException for lançada, não será realmente um problema de código.
fonte
Um bug de software é o termo comum usado para descrever um erro, falha, erro, falha ou falha em um programa ou sistema de computador que produz um resultado incorreto ou inesperado ou faz com que ele se comporte de maneiras não intencionais. Pode até ser um erro de ortografia em um rótulo.
Exceções são diferentes para bugs. Cada tipo de exceção (violação de acesso, excesso de pilha e assim por diante) pode ser aumentada para um depurador como uma exceção de "primeira chance" ou "segunda chance". As exceções de primeira chance são, por definição, não fatais, a menos que não sejam tratadas adequadamente com um manipulador de erros; nesse momento, elas são geradas novamente como uma exceção de segunda chance (que apenas um depurador pode manipular).
Se nenhum depurador manipular uma exceção de segunda chance, o aplicativo será encerrado.
fonte
Você pode legitimamente criar uma exceção, esperançosamente nunca introduziria um bug de propósito.
fonte
Todas as exceções não são erros. Pode ser um tópico de debate que todos os bugs sejam exceções ou não.
Podemos dizer que exceções são os eventos que não fazem parte do fluxo normal ou esperado do aplicativo. Esses eventos podem ser independentes de como o código é escrito, onde, como bug, é essencialmente resultado de código incorreto (como cálculo incorreto).
Aqui está um exemplo de como não lidar com uma exceção pode ser um bug.
Suponhamos que exista um programa que grave alguns dados em um dispositivo de armazenamento externo. Durante a gravação, o dispositivo de armazenamento externo foi desconectado, travou ou pode ser destruído (por qualquer motivo). Agora, este é um caso excepcional, agora, independentemente da linguagem de programação suportar manipulação excepcional ou não, se o programa travar ou se comportar mal devido a esse evento, é um bug (o usuário final pode não ter ideia do que aconteceu. Também é muito desagradável) . Mas se o programa interromper o processo normalmente, notifique o usuário (em outras palavras, lide com a exceção), isso claramente não é um bug.
As linguagens de programação try catch machanism são essencialmente uma ferramenta para facilitar nosso caminho para lidar com eventos inesperados.
fonte
Sinopse : Exceções são evidências de maus resultados, bugs são (algumas das) causas de maus resultados. O problema (a ser resolvido) não é a exceção, é o problema que causou a exceção.
Ressonância: Um bug é um defeito no design ou na implementação de um produto (não limitado ao software). Por exemplo, não usar um relé classificado adequadamente (tempo / sensibilidade / confiabilidade / capacidade) devido a especificações incorretas ou a um simples erro de construção. Uma exceção é um desvio no mundo real / tempo de execução do comportamento previsto (ouso dizer 'esperado'?), Por exemplo, a perda de controle de um veículo enquanto estiver dirigindo.
Claramente, um bug pode causar uma exceção, pois o exemplo em 1) pode levar ao exemplo em 2). Mas nem todas as exceções seriam causadas por bugs, por exemplo, perda de controle de um veículo porque o operador teve um acidente vascular cerebral.
fonte
Como essa pergunta foi reaberta para uma recompensa, deixe-me mencionar meu artigo do CUJ de 2003 intitulado "Uma exceção ou um bug?", Que parece abordar exatamente a pergunta do OP.
Basicamente, o artigo define os termos "bug" e "exceção" (dando exemplos) e propõe estratégias para lidar com cada um.
O artigo propõe não "manipular" os bugs, mas sinalizá-los com asserções. Por outro lado, exceções verdadeiras requerem manipulação através de código (possivelmente lançando / capturando exceções).
O ponto principal é que os bugs exigem a estratégia exatamente oposta às exceções.
O artigo acima mencionado já está disponível no Dr.Dobb's em: http://www.drdobbs.com/an-exception-or-a-bug/184401686
fonte