Eu trabalho para uma empresa de produtos de software. Temos grandes clientes corporativos que implementam nosso produto e fornecemos suporte a eles. Por exemplo, se houver um defeito, fornecemos patches, etc. Em outras palavras, é uma configuração bastante típica.
Recentemente, um ticket foi emitido e atribuído a mim referente a uma exceção encontrada por um cliente em um arquivo de log relacionado ao acesso simultâneo ao banco de dados em uma implementação em cluster de nosso produto. Portanto, a configuração específica desse cliente pode muito bem ser crítica na ocorrência desse bug. Tudo o que recebemos do cliente foi o arquivo de log.
A abordagem que propus à minha equipe foi tentar reproduzir o bug em uma configuração semelhante à do cliente e obter um log comparável. No entanto, eles discordam da minha abordagem, dizendo que não preciso reproduzir o bug, pois consome muito tempo e exigirá a simulação de um cluster de servidores nas VMs. Minha equipe sugere que eu simplesmente "siga o código" para ver onde está o código inseguro de thread e / ou transação e coloque a mudança em funcionamento em um desenvolvimento local simples, que não é uma implementação de cluster como o ambiente no qual a ocorrência do bug se origina.
Para mim, elaborar um plano abstrato (código do programa) em vez de uma manifestação visível e tangível (reprodução em tempo de execução) parece difícil, então eu queria fazer uma pergunta geral:
É razoável insistir em reproduzir todos os defeitos e depurá-los antes de diagnosticá-los e corrigi-los?
Ou:
Se eu sou um desenvolvedor sênior, devo ler um código multithread e criar uma imagem mental do que ele faz em todos os cenários de casos de uso, em vez de exigir a execução do aplicativo, testar diferentes cenários de casos de uso de maneira prática e percorrer as código linha por linha? Ou sou um desenvolvedor ruim por exigir esse tipo de ambiente de trabalho?
A depuração para mariquinhas?
Na minha opinião, qualquer correção enviada em resposta a um ticket de incidente deve ser testada em um ambiente simulado para estar o mais próximo possível do ambiente original. De que outra forma você pode saber que isso realmente solucionará o problema? É como lançar um novo modelo de veículo sem colidir com um manequim para demonstrar que os airbags realmente funcionam.
Por último, mas não menos importante, se você concorda comigo:
Como devo conversar com minha equipe para convencê-los de que minha abordagem é razoável, conservadora e mais à prova de balas?
new
. E esses erros não são garantidos para ser confiável reproduzível, de acordo com o Modelo de Memória Java especificação