Respostas:
Simplicidade. Se for muito complicado ou muito longo para inserir ou classificar erros, ninguém vai querer usá-lo.
Integração com o SCM, para que qualquer correção possa ser rastreada até o código, e as alterações no código possam ser rastreadas para um problema. Isso exige vigilância para fazer o check-in apenas do código relacionado ao problema que está sendo promovido / verificado. ou seja, não "Adicionado recurso xyz e corrigidos erros aleatórios em 4 locais diferentes e um refator rápido do recurso zyx".
Outro bom recurso é o gerenciamento de fluxo de trabalho, para que o processo de negócios seja seguido com o código. Por exemplo, pode ter um caminho de fluxo de trabalho semelhante ao seguinte: Bug reportado -> Triaged for priority and validity -> atribuído a dev -> trabalhado -> atribuído ao controle de qualidade -> aprovado no teste -> marcado como fechado.
Propriedade forçada de bugs. Não deve ser possível ter um problema em aberto que não seja de responsabilidade de alguém. Fora isso, simples é melhor.
Eu acho muito importante poder vincular problemas (e especificar um tipo de link, por exemplo, Depende). Além dos suspeitos habituais da versão em que o bug foi encontrado, em qual versão pretendemos corrigi-lo (para que possamos orientar os roteiros), um campo de estimativa é bom para o planejamento do projeto / ágil.
É bom ter votos para o público, a capacidade de notificar os usuários sobre alterações no problema e ter um sistema bastante flexível de categorizar os problemas.
De fato, praticamente tudo o que o JIRA suporta fora da caixa :)
Qualquer recurso que executa uma tarefa para o programador. Não deveria realmente fazer parte do IDE? Há a lista de bugs. Escolha uma para trabalhar e todos os status e carimbos de hora serão atendidos. As alterações de código estão vinculadas. Testes necessários estão associados. Verifique como corrigido, atualize o status e informe a todos.
Consulta poderosa
O software de rastreamento de erros deve ajudar a gerenciar os projetos, aplicando rigoroso processo de desenvolvimento em cada estágio da resolução de problemas.