Detalhes sobre o tipo Feature.



CONTEUDO

Definição

O tipo Feature é:

Uma ação específica sobre um objeto que entregue valor ao usuário.

Uma outra forma rápida de imaginar uma feature é pensar em um VERBO sobre um objeto.

Cada verbo é uma feature. Talvez a forma mais fácil de entender isso é considerar um objeto qualquer, por exemplo, uma "Nota Fiscal". Que coisas você pode fazer com uma nota fiscal? Vejamos:

  • Preencher Cabeçalho da Nota Fiscal
  • Imprimir a Nota Fiscal
  • Emitira 2a Via da Nota Fiscal
  • Cancelar a Nota Fiscal
  • Emitir a Nota Fiscal
  • Alterar Item na Nota Fiscal
  • Alterar Itens na Nota Fiscal
  • Remover Item da Nota Fiscal
  • Remover Itens da Nota Fiscal
  • Pesquisar por Número uma Nota Fiscal
  • Pesquisar por Cliente uma Nota Fiscal
  • Etc.

Observe os inúmeros verbos associados à Nota Fiscal, como Preencher, Imprimir, Emitir, Alterar, etc. Cada um desses verbos representa uma ação que traz valor para o usuário. Ou seja, o sistema, a coisa acontece apenas se as features existirem. Só faz sentido existir uma Nota Fiscal se o usuário puder realizar ações (features) sobre ela.

E a Nota Fiscal neste exemplo? A Nota Fiscal é justamente o objeto, ou seja, o Épico !

Olhando de uma forma estruturada, o Épico é a coisa, o objeto, e a Feature é a ação sobre este objeto.

É por este motivo que se diz que as features existem dentro do épico. E o épico é composto de features.

Quanto mais features existirem sobre um épico, maior ele é. E possivelmente, quanto mais features existirem sobre o épico, mais crítico e complexo ele se torna, justamente devido a interação entre estas features dentro do épico.

Para que se possam definir boas features, é importante homogenizar algumas regras sobre elas. Vejamos isso abaixo.

Princípios das Features

Algumas considerações são importantes para que as features sejam algo útil, algo controlado, algo que realmente permita a construção de sistemas e projetos de forma organizada.

Esta seção destaca algumas regras para isso.

 Utilize verbos específicos

Você só deve utilizar verbos muito específicos e assertivos para nomear uma feature.

Por exemplo, a palavra "incluir" é diferente de "criar". O verbo incluir parte do princípio que existe algo (a ser incluído) e este algo será adicionado em outra coisa. Isso é diferente de "criar", que parte do princípio que aquela coisa ainda não existe, e por isso será criada. Assim, "incluir" e "criar" são features diferentes.

É fundamental ter este cuidado, caso contrário, o sistema se deforma, com features que não representam exatamente o que a ação se propõe a fazer.

 Prefira ser detalhista do que xx

Mantenha a divisão entre o unitário e o coletivo

Mantenha a coerência de nomenclatura ao longo do sistema


Evite Verbos Genéricos

Esta recomendação é o complemento sobre a lógica dos verbos específicos.

Verbos genéricos não devem ser utilizados para features. Mas o que é um verbo genérico? É todo verbo que representa, dentro dele, uma série de possibilidades.

Exemplos comuns de verbos genéricos são: Cadastrar, Manter, Gerir, Controlar, Pesquisar, Buscar, etc.

O que estes verbos significam? Verbos genéricos significam que dentro deles uma série de outros verbos existe. Vamos explorar o verbo genérico "Cadastrar". O que é cadastrar? Cadatrar pode ser criar um novo registro, incluir um novo registro, editar um registro existente ou qualquer outra coisa relativa ao conceito de "cadastro". Logo, "cadastrar" não é algo específico.


Por exemplo, o uso de verbos genéricos ou abertos não é correto para criar features. S

Linkar/relacionar, por exemplo, o PowerShell que inclusive padronizada os nomes de metodos https://learn.microsoft.com/en-us/powershell/scripting/learn/ps101/09-functions?view=powershell-7.4#naming

Um épico é um processo de negócio, contendo o ciclo de vida e regras completas de um objeto do sistema.

Em outras palavras, um épico também pode ser visto como uma funcionalidade, ou seja, um conjunto de funções (conjunto de features) que se interrelacionam fortemente, formando o ciclo de vida de um objeto.

Outra forma de pensar em épicos é pensar em um objeto e todas as coisas (verbos, ações) que você pode fazer com ele. Isso é um épico.

Por exemplo, uma reunião de pessoas; ela é um épico. Isso porque você pode (ações) solicitar a reunião, agendar a reunião, convidar participantes para reunião, confirmar a reunião, realizar a reunião, documentar a reunião, etc. A reunião então, é o épico, e as ações sobre ela serão suas features.

Fazendo uma analogia ao mundo do desenvolvimento Java EE, cada épico (ou processo de negócio) pode ser implementado por um EJB de Negócio. E, se estendendo essa definição, se percebe que isso está em concordância com a JSR 299. Isso porque (conforme a JSR), os WebBeans possuem um ciclo de vida: o ciclo de vida de um objeto, ou seja, o seu processo.

Falando em metodologias, os épicos (funcionalidades) possuem relação um-para-um com os épicos do Scrum ou as FeatureSets da FDD.

Em nível de gerenciamento de projeto, os épicos (funcionalidades) são pontos perfeitos para trabalharmos a questão do Earned Value do PMBOK para se fazer a gestão de custos e andamento de cronograma. Pense bem: de que adianta entregar ao cliente meio processo de negócio, ou seja, meia funcionalidade? Assim, ao se pensar em gerenciamento de entregáveis e controle de progresso, as funcionalidades (épicos) são o denominador comum e lógico para o gerenciamento de entregas. Mas claro, essas entregas são evolutivas, e assim, cada ciclo (sprint?!) você vai entregando mais e mais features (verbos) ao seu objeto (o épico).

Outra forma de visualizar um épico (funcionalidade) é pensar no conjunto de features operando em grupo. Por exemplo, o conjunto das features "incluir", "editar", "deletar", "pesquisar", "exportar" (...) de uma Nota Fiscal formam o épico "Manter Notas Fiscais". Bom, já falamos da "reunião", acima. Começa a fazer sentido para você?

Finalmente, fazendo uma analogia a um banco de dados, cada tabela no banco de dados pode ser representada como um épico, como Tabela "Cliente" → Épico "Manter Clientes".

Quer saber uma forma fácil de reconhecer um épico ? Use este algoritmo:

  1. Pense em um objeto do seu dia-a-dia (uma reunião, um fluxo de trabalho, um documento) ou parte de um sistema (uma tela, um relatório, etc.). Por exemplo: Relatório de Vendas Mensais.
  2. Esse objeto pode ser decomposto em outros? Se sim, para cada objeto dentro dele, volte ao passo #1, pois talvez ele seja então um Tema ou um Set. Agora, se ele for um objeto final, avance para #3.
  3. Agora, coloque um verbo genérico na frente, como "Manter". Por exemplo: Manter Relatório de Vendas Mensais.
  4. Pronto. você tem um épico. E dentro dele você terá as features com seus verbos específicos (descritas no padrão AARON* na seção 2.1.3, item "0 - Desejada" da página Features):
    1. Filtrar vendas de licença por dia do mês no Relatório de Vendas Mensais.
    2. Filtrar vendas de consultoria por dia da semana no Relatório de Vendas Mensais.
    3. Filtrar vendas de licença do tipo Atlassian por semana no Relatório de Vendas Mensais.
    4. Filtrar vendas de gestão compartilhada por intervalo de dias no Relatório de Vendas Mensais.
    5. Imprimir listagem de registros em PDF no Relatório de Vendas Mensais.
    6. Imprimir listagem de vendas em PDF no Relatório de Vendas Mensais.
    7. Exportar listagem de registros em CSV no Relatório de Vendas Mensais.
    8. Etc, etc, etc.

Para mais detalhes, vide o post https://goo.gl/nPyHW que carateriza toda a relação estrutural de temas, sets, épicos e features em um sistema.

* Nos exemplos do item #4 acima, optamos por suprimir o ator (o primeiro "A") e o objetivo de negócio ("N") a fim de torná-los de mais fácil leitura aqui. Assim, o item #4.a, no padrão AARON completo deveria ser: Vendedor filtrar vendas de licença por dia da semana no relatório de vendas para obter dados diários de vendas de licenciamento.