Responsabilidade de reproduzir bugs


25

Estou desenvolvendo um programa usando uma biblioteca feita por outro programador (ele trabalha na mesma empresa). Recentemente, descobri um vazamento na biblioteca, que ocorre sob certas condições de rede após algumas horas de execução. Eu arquivei um bug com a descrição das condições para fazer esse vazamento acontecer. O desenvolvedor respondeu que "isso não é suficiente", "não é responsabilidade dele reproduzir bugs" e eu tenho que criar um teste de unidade para reproduzir esse bug, caso contrário ele não fará nada.

  1. Ele está certo?
  2. O que eu posso fazer nessa situação? Criar teste de unidade é impossível, porque depende de alguns tempos aleatórios da rede.

26
Se você for escrever o teste de unidade, poderá corrigir o erro e receber o crédito pela coisa toda.
Jeffo

3
@JeffO, ele está gerenciando essa biblioteca e não aceita correções. Porque "ele não está convencido de que o bug já existiu"
user626528


É possível que o mantenedor da biblioteca esteja em uma equipe cuja política é que os bugs não sejam aceitos sem testes automatizados? Também ouvi o termo teste de unidade sobre quando o que é realmente esperado pode ser qualquer forma de teste automatizado, especialmente para um teste de integração.
21713 Joshua Drake

Respostas:


30

Ele está certo? Provavelmente é uma pergunta que realmente não pode ser respondida sem conhecer sua empresa. No entanto, ele certamente não está sendo muito útil.

Eu levantaria o erro com ele (o que você fez), se estiver causando um problema em seu projeto, eu o elevaria como um bloqueador com seu gerente de projeto e deixaria bem claro que você levantou o bug com a devida pessoa, mas afetará seu projeto se não for corrigido imediatamente.

Eu também falava com o desenvolvedor e explicava por que é inviável criar testes de unidade, mas você ficaria feliz em mostrá-lo na sua máquina (supondo que isso seja viável?).


48

Ele está 100% certo de que você deve fornecer informações suficientes para tornar o bug reproduzível - caso contrário, não há chance de descobrir se alguma correção fornecida por ele realmente funcionará.

Mas - ele está IMHO 100% errado que isso deve estar na forma de um teste de unidade. Se você pode descrever um cenário de teste de uma maneira que ele possa reproduzir a falha (pelo menos com uma alta probabilidade em um período de tempo razoável ou por teste manual), você tem uma prova de que o problema existe - o que deve definir seu colega na responsabilidade de corrigi-lo. Obviamente, se você conseguir criar um cenário que reproduza o bug mais rapidamente, isso seria útil para ele. O ideal seria fazer um teste automatizado com isso, e isso depende da sua organização, que é responsável por isso.


11
Portanto, se um aplicativo trava "de vez em quando", sem padrão diferenciado para o usuário, o desenvolvedor não precisa corrigi-lo porque o usuário não pode reproduzi-lo sob comando? Eu discordo fortemente aqui ...
Heinzi

20
@ Heinzi: se eu receber um relatório de erro "o aplicativo trava de vez em quando", eu daria a essa questão uma prioridade muito baixa para trabalhar também. O mínimo que espero que o usuário anote com que frequência é "agora e depois", o que ele estava fazendo exatamente com o aplicativo no momento em que o aplicativo travou na última vez e a mensagem de erro exata.
Doc Brown

3
@ user626528: IMHO, o proprietário da biblioteca deve tentar seguir as etapas que você diz para reproduzir o bug - ele não deve tentar 500 cenários ligeiramente diferentes quando sua descrição não mostra nenhum bug.
Doc Brown

6
O repórter não deveria ter que fornecer etapas de reprodução; com bastante frequência, simplesmente anexamos um despejo do processo com falha, especialmente se ele ocorrer durante uma execução automatizada. É de responsabilidade do cessionário encontrar etapas de reprodução para que a correção possa ser verificada.
avakar

2
(Isso não significa que o repórter não deve tentar ser útil e fornecer as etapas caso os conheça. Para falhas esporádicas, no entanto, o repórter não tem obrigação de perder tempo pesquisando algo que o proprietário do componente provavelmente descobrirá mais rapidamente. )
avakar

9

Ambos os lados devem se esforçar.

O desenvolvedor da biblioteca deve fazer um esforço adicional, mesmo sem testes de unidade, porque alguns problemas não podem ser reproduzidos com testes de unidade. Às vezes é hardware, às vezes é uma sequência específica de ações corretas do restante do programa que faz com que a biblioteca produza resultados ruins.

Você deve fazer algum esforço adicional, porque depois de tudo isso não será um bug na biblioteca, mas resultado de ações incorretas do restante do programa (por exemplo, heap corrompido pode fazer com que qualquer biblioteca se comporte estranhamente). Portanto, faz sentido reduzir o máximo possível de códigos que não sejam da biblioteca envolvidos na reprodução de bugs. E você provavelmente fará isso mais rápido e limpo do que uma pessoa não familiarizada com o código do seu aplicativo.


5

Se o autor da biblioteca não conseguir reproduzir o bug com base no seu relatório, não é razoável esperar que ele gaste muito tempo nele, muito menos corrigi-lo.

Mas você também tem uma quantidade limitada de tempo trabalhando em um produto que é periférico ao seu interesse. Infelizmente, isso pode significar que o bug continua a existir e não é feito nenhum trabalho para resolvê-lo.

Felizmente, isso não é necessariamente um desastre - enquanto em um mundo ideal, todos os softwares seriam livres de bugs, não é esse o caso, e, portanto, precisamos priorizar com base nos problemas que isso causa nos EUA.

Isso significa que é realmente de sua responsabilidade desenvolver um caso de teste reproduzível SE VOCÊ QUER FIXAR. Você pode não se importar se isso é corrigido e, nesse caso, você fez tudo o que pode e deve ser esperado de você. Você pode querer consertá-lo, mas não o suficiente para dedicar tempo para torná-lo reproduzível neste momento. Isso é perfeitamente aceitável.

Relatar um bug da melhor maneira possível, no momento em que você tiver que lidar com isso, é simplesmente uma boa cidadania; você não precisa ir além, a menos que seja necessário para o seu programa. E você pode não querer fazê-lo, mesmo assim, pode haver outra biblioteca que você possa usar ou pode ser possível criar sua própria em um período de tempo razoável. Basicamente, cabe a você decidir o que e que tipo de esforço vale a pena para você.


1
Você responde parece muito estranho para mim. Estou consertando meus bugs sozinho e não espere que alguém faça um trabalho sujo em vez de mim. Eu diria que é responsabilidade principal do autor do código fazer o possível para corrigir seu código.
user626528

1
Como VOCÊ é o único que deseja consertá-lo agora, é sua responsabilidade convencê-lo de que vale a pena CONSEGUIR consertá-lo agora, em vez de daqui a 10 ou 12 anos, quando ele não tiver mais nada importante para consertar. theregister.co.uk/2013/01/21/kde_bug_quashed . Dado um erro não reproduzível, com significado X, e um erro reproduzível com o mesmo significado, trabalharei sempre no erro reproduzível.
jmoreno

muito ego. Ele é pago para trabalhar nessa maldita biblioteca.
user626528

1
@ user626528: Não se trata de ego, trata-se de prioridades - incapacidade de reproduzir um bug menor do que é prioridade. Dado dois bugs de EOI (Executar operador imediatamente), um reproduzível e outro não, eu trabalharia no que pode ser reproduzido primeiro e diria a qualquer outro desenvolvedor que fizesse o mesmo. E se a biblioteca não for muito usada, eu poderia trabalhar em outro projeto completamente - mesmo que os erros nela não sejam tão significativos. Se ele está sendo pago apenas para trabalhar nesta biblioteca E não há solicitações de recursos pendentes ou bugs além deste, então sim, ele deve fazê-lo.
jmoreno

2

Eu estaria inclinado a deixar os cachorros dormirem por enquanto - você levantou a questão e ela é atribuída a ele. Presumivelmente, existem processos para rastrear erros pendentes e persegui-los?

Se você deseja progredir ativamente ainda mais, sugiro conversar com seu gerente para verificar se existem ferramentas de teste disponíveis que possam reproduzir o problema de maneira confiável.

Do lado do desenvolvedor - seria seriamente inerte da parte deles não fazer nada, desde que você tenha fornecido as informações necessárias. Pode ser possível, no entanto, que eles tenham uma enorme carga de trabalho, portanto, não podem dedicar o tempo necessário para acompanhar o problema.


2

Você encontrou um bug, denunciou e ele está sendo um idiota por causa disso.

Se vocês fossem amigos íntimos, ele teria feito algo para ajudar, mas preferiria apenas empurrar a questão de volta.

Você pode fazer mais relatando mais detalhes e tentando apoiar suas alegações de que está vazando memória. Ainda assim, você tem suas próprias responsabilidades e precisa terminar seu próprio trabalho.

Faça o máximo possível de informações no rastreador de erros e siga em frente.

Se você vir essa pessoa novamente no futuro. Seja amigável, tente falar sobre interesses comuns e entenda que os bons relacionamentos são uma maneira muito mais eficaz de consertar as coisas e, em seguida, qualquer quantidade de fatos que você possa fornecer para apoiar uma reivindicação.


Tenho alguma simpatia pelo desenvolvedor da biblioteca. Talvez o ponto de vista deles seja o de que o desenvolvedor do aplicativo está tentando usar a biblioteca e causou uma falha no código. Ele não está sendo relatado na natureza ou por qualquer outro desenvolvedor, portanto, para eles, é um bug de prioridade relativamente baixa (ou espúria).
Robbie Dee

@RobbieDee sim verdade, esta não foi uma das minhas melhores respostas. Eu apenas pensei que era estranho que os dois não pudessem trabalhar juntos, considerando que trabalham para a mesma empresa. Quero dizer, se o proprietário da empresa ouviu que um funcionário tinha que vir aqui para obter apoio. Eu me pergunto o que ele pensaria disso. Não é assim que eu gostaria que algo acontecesse no meu lugar.
Reactgular

0

Muitas vezes, o que eu encontrei em situações semelhantes é uma suposição de que todos os bugs devem ser corrigidos e, embora seja admirável, é definitivamente um grande objetivo a ter (vamos admitir que nunca pretendemos escrever bugs!) qualquer projeto de tamanho decente para corrigir um erro apenas porque é um erro (se você pode encontrá-lo!) É por isso que temos metodologias, padrões e práticas de gerenciamento e codificação de projetos, etc.

Então, uma coisa que eu diria em defesa do proprietário da biblioteca (e foi o caso quando trabalhei em alguns grandes projetos) é que o tempo de desenvolvimento custa dinheiro e é um recurso finito, e a decisão sobre como o relatório é tratado , que investiga, quais testes são produzidos / necessários e, finalmente, se (e se sim, quando) uma correção é implementada se baseia puramente no impacto nos negócios. Qual é o impacto de reiniciar seu processo de longa execução de vez em quando, se ele falhar e você pode automatizá-lo facilmente (e talvez você não deva já ser uma medida defensiva de programação?), É apenas hora ou há mais? ?

Observe também, do ponto de vista deles, um relatório de bug de um usuário sobre um problema imprevisível em um pedaço de código que acontece muito raramente, apenas em conjunto com o código, possivelmente apenas em uma máquina e apenas com um tempo incomum. As condições simplesmente não terão uma justificativa forte para que um grande período de tempo de desenvolvimento encontre e corrija - se for possível. Mas se for um caso de negócios suficientemente forte para que o usuário deseje / precise dedicar um tempo para investigar mais detalhadamente e fornecer um caso / aplicativo de teste confiável ou uma descrição de problema radicalmente mais detalhada que a inicial, então pode ser outro jogo. .

Talvez essa seja uma questão de comunicação que o proprietário da biblioteca não considerou colocar dessa maneira e se você tem um caso comercial sólido (como seu código é caro para a empresa, tem um requisito de conformidade legal, falha de segurança ou tem algum outro grande efeito indireto), então é hora de contatá-lo com a gerência e deixá-los lutar.


1
Tenho minha simpatia por alguém estar considerando sua resposta (que é uma possibilidade prática) ruim e votar mal. O mesmo aconteceu com a minha resposta.
isntn

-3

Você mencionou que 'arquivei um bug com a descrição das condições para fazer esse vazamento acontecer'.

Se você tem certeza de que a descrição é realmente suficiente para reproduzir o bug, já conhece as condições exatas. Agora, se você não pode escrever um teste de unidade após conhecer as condições, isso significa claramente que você não pode zombar de alguns dos componentes envolvidos ou de algumas partes do código estarem muito acopladas para permitir a criação de um teste de unidade prático.

Você deve pedir ao proprietário da biblioteca para refatorar o código para permitir a criação de teste de unidade. Você terá que explicar claramente o que está na biblioteca que está impedindo você de criar um teste de unidade. Ele terá que refatorar o código, caso contrário, conceda que o teste de unidade não é possível com o código atual. Nos dois sentidos, você vence.

Se isso não funcionar, a seguir estão as opções que você possui:

  • Você pode reproduzir o erro com mais evidências.
  • Tente envolver uma autoridade superior e peça que ele avalie suas evidências.
  • Tente usar a biblioteca no aplicativo protótipo com ambiente simulado para ser codificado apenas para reproduzir o erro. Dessa forma, você poderá provar pelo menos que o bug existe.

3
Não é responsabilidade do OP criar o teste de unidade para o mantenedor da biblioteca.
Andy

6
Se o outro desenvolvedor estiver ignorando os relatórios de erros de alguém, há praticamente nenhuma chance dele responder favoravelmente a uma solicitação de uma grande refatoração. Além disso, nem todos os tipos de problema são facilmente reproduzíveis através de testes de unidade: programmers.stackexchange.com/questions/196105/...
Dan Neely

1
@ DanNeely: Ele não está ignorando, ele está alegando que o repórter tem que fazer algo mais - o que não é possível fazer para o repórter. E repórter tem que se comunicar de volta! Também sugeri envolver autoridade, pois isso pode se resumir a isso.
isntn

1
@ Andy Em algumas posições, é política corporativa que erros não sejam aceitos sem um teste automatizado.
21713 Joshua Drake

5
Você parece confuso sobre o uso adequado da votação, e é pouco provável que reclamar sobre isso ajude seu caso. Votos negativos são a maneira aceita de dizer "Acho que essa é uma resposta ruim". O idioma ofensivo deve ser tratado não (somente) por meio da votação negativa, mas editando-o ou sinalizando-o, dependendo se o restante da resposta é útil. Uma resposta fora do contexto pode ser tratada de qualquer maneira, dependendo de como é notória.
Dan Neely
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.