Por que não usar a palavra bug em vez de exceção? [fechadas]


18

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.


Espero que os detalhes técnicos mencionados ajudem a esclarecer a distinção entre uma exceção e um bug. Grande questionário BTW, +1
Jeremy Thompson


1
Na verdade, não sei como você pode confundi-los, pois são coisas muito diferentes. Exceções são casos tratados pelo código, que indicam algum tipo de erro. Normalmente, erros de um tipo vago, não exatamente explicáveis, e tal. - Enquanto erros ... um erro é, por definição, não tratado pelo próprio código. Eles nem são erros, indicam falta de lógica onde não deveria estar.
TvCa

1
@NiklasRtz: Por que a enorme recompensa? Toneladas de pessoas teriam respondido independentemente.
ThePopMachine

@ThePopMachine Porque eu gosto de recompensas enormes para perguntas que outras pessoas possam achar interessantes. Estou solicitando minhas perguntas "populares" e respondo o máximo que posso. Eu tive muita ajuda das perguntas e respostas boas e divertidas. Também estou preparando uma nova pergunta sobre tratamento de erros e códigos de erro para esses programadores. Que não é específico sobre como escrever código, mas sobre como lidar com erros de maneira limitada e esperançosamente padronizada, por exemplo, para aplicativos da web que podem retornar um número limitado de códigos de erro, quão bons são os problemas e nomeação de partes do código.
Niklas

Respostas:


93

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 IOExceptione algum código de erro descolado, isso é um bug. Mas a exceção em si não é.


1
Você está correto, mesmo quando observo como o faço: se um método falha ao obter o nome da cidade mais próxima (Los Angeles), ele captura uma exceção e retorna o nome da área administrativa maior (por exemplo, Califórnia), mas como se aplica para qualquer coordenada, um lugar sem cidade próxima não é um bug, é uma exceção. Você concorda?
Niklas #

1
@ Nicke: Sim, eu concordo com isso.
Dean Harding

1
Apresentar uma IOException e um código de erro nem sempre é um bug. É um diagnóstico. Costumo fazer isso para scripts pessoais, onde falha significa apenas colocar argumentos incorretos.
Thomas Eding

23

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.


1
Heh, que respondeu quase ao mesmo tempo, e com basicamente o mesmo exemplo bem :-)
Dean Harding

5
@DeanHarding Grandes mentes pensam da mesma forma, sim? : D

1
Enquanto eu concordo com a sua primeira frase, devo discordar da sua última frase. O primeiro bug do computador (embora apócrifo) foi, de fato, uma mariposa presa entre os pontos de um revezamento. Como um disco rígido com defeito é diferente?
Scott Whitlock

1
@ ScottWhitlock Acho que "bug" tem mais de uma definição. Eu sempre assumi que isso significa erros causados ​​por seres humanos: en.wikipedia.org/wiki/Software_bug

1
@ ScottWhitlock: e supostamente os programadores diriam "não é minha culpa, deve ser um bug", que saiu pela culatra como "bug" passou a significar uma falha de software. Hoje, uma falha de hardware não seria chamada de bug, embora um bug possa resultar em falha de hardware.
jmoreno

20

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.


+1 para definir seus termos. Em geral, as pessoas devem fazer isso com mais frequência!
precisa saber é o seguinte

Esta é definitivamente a resposta mais clara. muito claro e conciso. Bom trabalho!
Locke

5

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.


3

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.


2

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.


2

Você pode legitimamente criar uma exceção, esperançosamente nunca introduziria um bug de propósito.


isto parece mais um comentário, consulte Como responder
gnat

1
Brevidade não significa que não seja uma resposta que destaque a diferença entre as duas coisas.
Alan B

1

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.


1

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.


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.