Ao escrever especificações no estilo BDD, você deve usar “should” ou não? [fechadas]


12

Sei que isso é um pouco subjetivo, mas não consigo encontrar um bom argumento para um ou outro:

"deve fazer alguma coisa"
faz "alguma coisa"

Os defensores do estilo devem mencionar que isso obriga a realmente questionar o que você está tentando alcançar, enquanto os detratores o consideram redundante.

Existe um consenso sobre isso, ou é puramente uma questão de estilo?

Respostas:


3

Bem-vindo ao inglês jurídico.

O uso de "obrigação" == "deve" == obrigação contratual. É um legalismo. Não leva a "questionamentos". Marca a sentença como uma obrigação contratual formal.

Usar "seria" == "irá" == boa ideia. Marca a frase como um recurso opcional.

O questionamento faz parte da facilitação, organização, ajuda e construção de confiança. Não é uma conseqüência da escolha de palavras.

Usar um verbo simples sem o modificador torna a frase um pouco mais difícil de destacar como um requisito formal. E no caso de verbos supercomplexos, pode ser um pouco arriscado descobrir como conjugá-lo.

Fácil - verbos como "notificar" ou "criar".

  • O sistema notifica por email. (O verbo "notificar" é conjugado "notifica" para "o sistema" - seja o que for.)

  • O sistema deve notificar por e-mail. ("notificar" se torna "notificará" - sem conjugação. Muito simples.)

Frases verbais difíceis como "entrar" ou frases verbais específicas de domínio como "extrair, limpar, transformar, desduplicar e carregar" ou um substantivo como "perspectiva" que foi verificado. A frase mais longa, com vários verbos enterrados, é difícil de conjugar: conjugar cada verbo? Ou tente conjugar a frase longa como se fosse uma única palavra? Como qualquer substantivo pode ser verbado em inglês, é difícil saber como conjugar esses verbos inventados.

  • O sistema extrai, limpa, transforma, deduplica e carrega quando o usuário clica em Enter. (O inglês verbaliza trivialmente qualquer frase substantiva.) Ou é extrai, limpa, transforma, deduplica e carrega?

  • O sistema deve extrair, limpar, transformar, desduplicar e carregar quando o usuário clicar em entrar. (A frase hedionda é deixada intacta, não há mistério sobre a conjugação verbal.)

["O que?" você diz: "qualquer substantivo pode ser verbado em inglês?". Sim. Qualquer substantivo. Eu vou impedir isso. Eu sempre parei nisso. Até as especificações devem impedir isso.]


5
Você diz que usar "deveria" não leva a "questionar"; minha experiência é que sim, especialmente com pessoas novas em testes / TDD. Também tem o efeito de diferenciar resultados de contexto e eventos. "E o pedido chega ao armazém" não me diz se estou fazendo com que o pedido chegue pressionando um botão ou se deve acontecer automaticamente, enquanto "E o pedido deve chegar ao armazém" me diz que isso é algo que eu deveria estar verificando. O BDD é sobre conversação, não legal, inglês (ou idioma natural de escolha).
21411 Lunivore

3
Compreendo que você tenha um idioma diferente por aí. BDD começou em Londres embora ... com a palavra "deve";) O OP perguntou se havia um consenso sobre isso, e tem havido desde 2004 -> dannorth.net/introducing-bdd
Lunivore

1
É a ideia de que você deve usar "deveria" de uma maneira legal e sem questionamentos que eu não acho útil. É o oposto da mentalidade de descoberta deliberada com a qual o BDD começou. Passo minha vida tentando ajudar as pessoas que começaram com "spec" e depois sinto que não podem questionar.
Lunivore 14/03

1
Se você editasse sua resposta para incluir algo como "Algumas pessoas gostam de 'deveriam' porque isso leva ao questionamento", em vez do que atualmente diz, que é "não leva ao questionamento", eu ficaria muito feliz. O aspecto questionador do BDD é um dos mais importantes, para mim, e a maneira como você expressou isso elimina esse aspecto em vez de fornecer contexto adicional. Obrigado por esta conversa, independentemente de editar ou não a resposta; Eu realmente aprecio o diálogo respeitoso.
Lunivore 15/03/11

11
O padrão IETF para escrever RFCs especifica especificamente que 'DEVE' e 'DEVE' ser 'NECESSÁRIO', 'DEVE' ser 'RECOMENDADO' e 'PODE' é 'OPCIONAL'.
Oosterwal

4

Puramente uma questão de preferência estilística. Tudo se resume a perguntar: você / seus clientes preferem pensar no sistema no presente ou no futuro?

Qualificadores como "should" ou "will" implicam no tempo futuro, mas isso é suave e lê bem o suficiente quando se pensa no tempo presente. A falta de um qualificador indica definitivamente o tempo presente (ou seja, neste exato momento).

Eu prefiro usar um qualificador porque ele lê muito bem nos dois casos, enquanto a falta de qualificador lê um pouco estranhamente durante o desenvolvimento quando tudo está no futuro.

De qualquer forma, se você decidir usar um qualificador, recomendo usar "must" em vez de "should" . "Dever" pode ser interpretado como opcional (apesar da afirmação de S.Lott em contrário), mas "deve" remove completamente qualquer ambiguidade - deve claramente significar "não opcional".


E como ainda não posso comentar (restrições de carma), esta é uma resposta a S.Lott sobre Deveria / Deveria versus Deveria / Vontade: há muita ambiguidade sobre dever e vontade, mesmo na elaboração de contratos legais. Veja este artigo para uma explicação .


"a falta de qualificador lê um pouco estranhamente durante o desenvolvimento quando tudo está no futuro" - bem, se você faz TDD e escreveu um teste, mas ainda não escreveu o código, seu teste falha agora. Embora a semântica de "deva passar no futuro" significaria que pode passar AGORA. Portanto, o tempo presente traz mais clareza, pelo menos no caso do TDD: não é uma promessa sobre o futuro que falha, é o comportamento esperado AGORA que não se mantém.
Mikhail Vasin

2

Sou a favor do uso de terceira pessoa, tempo presente sem qualificador.

Meu argumento principal é o seguinte: Um teste é uma história.

Uma história consiste em cenas. Cada cena descreve:

  • sujeito
  • contexto
  • açao

Exemplo:

DESCRIBE : getReceiptfunction

CONTEXTO : existe recibo

IT : retorna o recibo

Assim como uma boa história, é fácil ler um bom teste.

Uma história mostra o que o programa faz, por exemplo

  • inicia uma transação
  • faz um pedido
  • normaliza a resposta
  • finaliza a transação
  • retorna o recibo

Por outro lado, o uso de um qualificador (não importa se é "deveria" ou "deve") transforma o teste em uma lista de asserções, por exemplo:

  • deve começar uma transação
  • deve fazer um pedido
  • deve normalizar a resposta
  • deve terminar a transação
  • deve devolver o recibo

Não há história contínua: sua mente está avaliando uma lista de afirmações.

Isso é subjetivo, mas ler uma linguagem natural (uma história) é mais simples do que ler uma lista de afirmações.


1

Na minha opinião, você sempre deve usar 'should'.

Raciocínio - com BDD, quando você está escrevendo o teste, o software não ainda fazer o que você quer fazer, então dizendo que "faz algo" é falsa. "Deve fazer alguma coisa", e os testes serão aprovados enquanto continuar a fazer alguma coisa.


1
"Ainda não existe" parece ser mais um motivo para usar o tempo presente em vez de "deveria". O BDD é para teste de aceitação e, se um sistema ainda não faz algo, deve falhar imediatamente. Parece haver uma divisão entre os BDDers quanto ao uso de "should" ou não.
Brenden

1

De behaviour-driven.org intitulado "GettingTheWordsRight" :

Em resumo, as palavras que usamos para descrever as coisas influenciam a maneira como nós (e outros) pensamos sobre essas coisas. Também não se trata apenas de ser mesquinho em relação à semântica, pois certas palavras trazem nuances que afetam a maneira como interpretamos o significado de uma frase, tanto no nível intelectual quanto no emocional. Nossa linguagem é rica em palavras e frases descritivas, portanto, parece razoável usar palavras que transmitam claramente a intenção dos elementos que desejamos descrever no código.

No caso do BDD, estou pessoalmente que quase sempre usa a palavra deve ao nomear testes, porque seu uso implica que, embora a intenção é para um teste para fornecer um determinado resultado, outras consequências inesperadas podem surgir que terá de ser tratada com se um resultado do teste deve ser considerado válido. Talvez você possa usar as palavras esperar ou deveda mesma forma, no entanto, essas palavras implicam um ponto de vista mais imperativo, de modo que o nome do teste pode ser confundido com "não há nada de errado com o teste, assuma que a implementação está estragada", enquanto * deveria "implica que o teste provavelmente estar correto, mas pode precisar ser verificado novamente quanto a erros, se os resultados do teste não parecerem satisfatórios.Eu gosto disso, porque influencia o seu pensamento, de modo que você é incentivado a manter a mente aberta enquanto codifica, o que é muito É importante quando você deseja evitar um travamento enquanto tenta depurar seu código e se vê procurando erros no local errado devido a uma suposição.

No entanto, vi que a aplicação quase "religiosa" da palavra deveria falhar quando foi aplicada como um prefixo para os nomes dos testes, pois forçou os programadores envolvidos a passar por certas ginástica mental e linguística para fornecer um nome de teste que era significativo e, nesses casos, significa que a intenção de acertar as palavras não atende às suas expectativas, e os próprios testes se tornam difíceis de decifrar como resultado. Quando esse tipo de situação surge, eu usaria a palavra deveriaem qualquer local do nome do método de teste, para garantir que o nome transmita seu método de forma simples e clara. Certamente, eu não aplicaria um uso específico de palavras se outras fossem igualmente apropriadas dentro de um determinado contexto. O truque, no entanto, é escolher palavras que não deixem margem para discussões sobre o que algo representa no código, e que o levem a pensar nas coisas que seu código deve fazer sem depender de mera implicação.

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.