DEV Community

Belchior Oliveira
Belchior Oliveira

Posted on • Updated on

Diferenças e semelhanças entre Bugs e Features

grafíte de abelhas voando em bicicletas

Gostaria de tentar esclarecer dois conceitos próximos que geram algumas interpretações erradas no dia a dia que são as Diferenças e semelhanças entre Bugs e Features. Existe um senso comum sobre o que cada um desses termos significa, entretanto nós fazemos um uso tão frequente deles que acabamos caindo em armadilhas e nem percebemos.

Senso comum:

Uma feature é um recurso novo que está sendo adicionado ao software com o objetivo de complementar ou expandir as funcionalidades existentes.

Um bug geralmente é uma divergência entre o que se espera e o que se tem em um software, em outras palavras é quando o software se comporta de forma diferente do que se espera.

Baseado nessa premissa é bem difícil confundir um bug com uma feature dado que eles possuem significados diferentes e acontecem em momentos diferentes. É baseado nesse senso comum que surgem os problemas.

Vamos imaginar o cenário:

Uma Loja Física de camiseta decide vender seus produtos na web e para isso contrata uma Agência para construir o e-commerce de camisetas.

Ao longo do processo é definido que a página do produto deveria ter:

  • Foto da camiseta
  • Descrição da camiseta
  • Botão “comprar”
  • Campo para cálculo de frete

A Agência desenvolve a página de produto e entrega para o cliente, com o passar do tempo várias camisetas são cadastradas e disponibilizadas no e-commerce.

No decorrer do tempo e com feedbacks recebidos pelos usuários, a Loja Física decide que seria interessante adicionar uma foto da estampa da camiseta como alternativa para seus usuários terem mais clareza sobre o que eles estão comprando. A Agência desenvolve a feature e entrega para o cliente, novos produtos são cadastrados e a imagem alternativa está lá como esperado.

Mais alguns dias se passam e a Loja Física percebe que a imagem alternativa só aparece nos produtos novos e não nos antigos e decide reportar a situação como um bug. A Agência rebate dizendo que a feature foi implementada corretamente e caso seja do interesse da Loja Física ter a imagem alternativa nos produtos antigos ela deve fazer um novo contrato. É aqui que começa as divergências.


Afinal, adicionar a imagem alternativa nos produtos antigos é corrigir um bug ou adicionar uma feature?


Esse problema possui pelo menos duas dimensões, a falta de Critérios de Aceite e a forma como que a feature foi implementada originalmente. Analisando com um pouco mais de profundidade, começando pela forma com que a feature foi implementada.

Frequentemente e-commerces e portais de notícias adotam uma técnica de implementação chamada static site generator que consiste em a partir de dados brutos gerar um site estático em HTML, caso essa abordagem tenha sido adotada a afirmação da Agência está correta, dado que cada página de produto é independente umas das outras e será necessário um rebuild das páginas antigas para ter a feature nova, normalmente essa abordagem é motivada por performance. Caso o e-commerce tenha sido implementado usando um padrão REST que monta a página a cada request a Loja Física está correta em afirmar que é um bug.

Se analisarmos a partir dos Critérios de Aceite, se no momento em que a feature foi planejada e desenvolvida não foi especificado que ela deveria funcionar para páginas antigas e novas então a Agência está correta. Por sua vez a Loja Física poderia argumentar e com razão que, é óbvio que deveria funcionar para produtos antigos e novos e que esse critério de aceite já está subentendido. Entretanto o óbvio e o subentendido são a causa raiz de vários males, mas este é um assunto para outra conversa.


Outros aspectos que podemos identificar sobre bugs e features:

Bugs normalmente são impeditivos, em muitos casos demandam ações corretivas imediatas, bugs deveriam ter vida curta para identificá-los e corrigi-los.

Features não são impeditivas, demandam planejamento e critérios de aceite, features possuem vida longa e se tornam frágeis com o passar do tempo quando desenvolvidas com pressa ou sem reavaliação.

Conclusão

Nem sempre é fácil diferenciar um bug de uma feature e identificar de forma errada pode causar desentendimento entre as partes.

Uma feature que é tratada como um bug normalmente é desenvolvida com pressa, testes são negligenciados e a qualidade fica abaixo do que se espera. Um bug que é tratado como uma feature demora para ser corrigido, degrada a qualidade do software e gera impacto negativo nos usuários finais.

Nesse artigo foi adotado um exemplo de apenas duas dimensões, mas no mundo real problemas como esse podem ter muito mais, o importante aqui não é tentar identificar todas elas, mas entender que esses enganos acontecem. Ter um conhecimento mais aprofundado sobre o assunto nos ajuda a se organizar melhor, definir prioridades de forma mais assertiva e por fim diminuir o ruído na comunicação entre o time.

Photo credit: Matt Lively, 27 Beecycles. NEON District Mural. Commissioned by Virginia MOCA. Photograph by Glen McClure. October 2015

Top comments (0)