Continua me surpreendendo que, atualmente, produtos com anos de uso, criados por equipes de profissionais, ainda hoje - falhem em fornecer mensagens de erro úteis ao usuário. Em alguns casos, a adição de apenas um pequeno pedaço de informação extra pode economizar horas de problemas para o usuário.
Um programa que gera um erro, gerou por um motivo. Ele tem tudo a sua disposição para informar ao usuário o máximo possível, por que algo falhou. E, no entanto, parece que fornecer informações para ajudar o usuário é de baixa prioridade. Eu acho que isso é uma falha enorme.
Um exemplo é do SQL Server. Quando você tenta restaurar um banco de dados que está em uso, ele não o deixa com razão. O SQL Server sabe quais processos e aplicativos estão acessando. Por que não pode incluir informações sobre os processos que estão usando o banco de dados? Eu sei que nem todo mundo passa um Applicatio_Name
atributo em sua cadeia de conexão, mas mesmo uma dica sobre a máquina em questão pode ser útil.
Outro candidato, também o SQL Server (e o mySQL), é a adorável string or binary data would be truncated
mensagem de erro e equivalentes. Muitas vezes, uma simples leitura da instrução SQL que foi gerada e a tabela mostra qual coluna é a culpada. Isso nem sempre é o caso, e se o mecanismo de banco de dados detectou o erro, por que ele não pode nos poupar esse tempo e apenas nos diz qual coluna danificada era? Neste exemplo, você pode argumentar que pode haver um impacto no desempenho ao verificá-lo e que isso impediria o escritor. Tudo bem, eu vou comprar isso. Que tal, uma vez que o mecanismo do banco de dados saiba que há um erro, ele faz uma rápida comparação após o fato, entre os valores que seriam armazenados, e os comprimentos das colunas. Em seguida, exiba isso para o usuário.
Os horríveis adaptadores de tabela do ASP.NET também são culpados. As consultas podem ser executadas e uma mensagem de erro pode ser informada que uma restrição em algum lugar está sendo violada. Obrigado por isso. Hora de comparar meu modelo de dados com o banco de dados, porque os desenvolvedores estão com preguiça de fornecer até um número de linha ou dados de exemplo. (Para o registro, eu nunca usaria esse método de acesso a dados por opção , é apenas um projeto que herdei!).
Sempre que eu lançar uma exceção do meu código C # ou C ++, forneço tudo o que tenho em mãos para o usuário. Foi tomada a decisão de lançá-lo, para que quanto mais informações eu possa fornecer, melhor. Por que minha função lançou uma exceção? O que foi repassado e o que era esperado? Demoro um pouco mais para colocar algo significativo no corpo de uma mensagem de exceção. Inferno, isso não ajuda em nada enquanto eu desenvolvo, porque eu sei que meu código lança coisas que são significativas.
Pode-se argumentar que mensagens de exceção complicadas não devem ser exibidas ao usuário. Embora eu discorde disso, é um argumento que pode ser facilmente aplacado por se ter um nível de verbosidade diferente, dependendo da sua compilação. Mesmo assim, os usuários do ASP.NET e do SQL Server não são seus usuários comuns e preferem algo cheio de informações detalhadas e deliciosas, porque podem rastrear seus problemas mais rapidamente.
Por que os desenvolvedores acham que é bom, atualmente, fornecer a quantidade mínima de informações quando ocorre um erro?
É 2011 pessoal, vamos lá .