Given-When-Then-But – Uma maneira simples de documentar qualquer coisa
Você já teve alguma dificuldade para explicar algo para alguém? E na empresa que trabalha? Quando alguém (talvez até seu chefe) te pergunta: “E este problema aqui… o que é?”. Por mais bem articulado que você seja, dependendo da complexidade do problema, explicar com o nível de detalhamento adequado a situação não é trivial. Além da complexidade, a pessoa na qual você se dirige também deveria influenciar sua explicação: ela é um outro ABAPer? E se fosse um chefe, gerente, funcional, usuário ou um biólogo?
O problema é agravado quando você precisa explicar um evento por escrito. Mesmo que você seja um bom escritor, não saberá muito bem quem vai ler o que escreveu. Veja por exemplo a necessidade de documentar algo que é lido por muitas pessoas: um incidente/ ticket/ chamado/ requisição/ solicitação/ mudança/ problema.
Neste post explicaremos uma maneira demasiadamente simples de explicar o que precisa por escrito: seja uma especificação funcional, seja um chamado de ABAP, seja um problema que o usuário está tendo, seja sua resolução… enfim. Vale muito a pena conferir.
BDD
Para quem estava na minha palestra no SITSP, ouviu falar superficialmente sobre BDD. Pois bem, estamos também falando de BDD aqui. Sem se prender ao detalhe do que é isso, BDD usa uma técnica chamada Given-When-Then para documentar novos requisitos e testes. Mas na verdade, o conceito se aplica a qualquer coisa.
Se você tiver curiosidade de saber mais sobre BDD, recomendo a leitura da primeira metade do livro “The Cucumber Book: Behaviour-Driven Development for Testers and Developers (Pragmatic Programmers)” de Matt Wynne e Aslak Hellesoy.
Given-When-Then
O conceito Given-When-Then visa criar um “template” usado em todo e qualquer tipo de documentação escrita. Este template terá sempre 3 palavras já definidas e obviamente nem preciso falar quais são. Veja um exemplo de documentação de requisito escrito neste template:
Given User has authorization to run transaction MM01 AND User fill the input screen with material 123 AND Material 123 do not exist When User hits ENTER Then Popup should be displayed with different material views
Given
O Given é a parte que você define o cenário. Qual a situação atual? O que deve existir/acontecer de antemão para que o problema ou o requisito aconteça?
When
When é o “trigger” da situação. Quando o problema é percebido? Quando a nova funcionalidade é chamada?
Then
Obviamente, o Then descreve a consequência do problema ou o resultado esperado do novo requisito
But
Menos usado, o bug serve para descrever bugs. Nestes casos o Then toma a forma de “resultado esperado” enquanto o But do “que realmente ocorreu”. Veja um outro exemplo com o But.
Given User has authorization to run transaction MM01 AND User fill the input screen with material 123 AND Material 123 do not exist When User hits ENTER Then Popup should be displayed with different material views But Error message "Material not created" is displayed
Exemplo de BDD: Intalação do MiniSAP
Como prova que este conceito pode ser largamente aplicado, podemos usar o GWT até para descrever o procedimento de instalação do MiniSAP.
Given ABAP Wannabe has lots of free time AND ABAP Wannabe has MiniSAP setup AND ABAP Wannabe has a decent PC AND ABAP Wannabe is not lazy to read some stuff AND (ABAP Wannabe has seen ABAP101's video OR ABAP Wannabe follows ALL the technical prerequisites) When ABAP Wannabe tries to install MiniSAP Then MiniSAP should be installed successfully.
Um teste negativo
Given ABAP Wannabe has lots of free time AND ABAP Wannabe has MiniSAP setup AND ABAP Wannabe has a decent PC AND ABAP Wannabe is not lazy to read some stuff AND (ABAP Wannabe has not seen ABAP101's video OR ABAP Wannabe DOES NOT follow ONE technical prerequisites) When ABAP Wannabe tries to install MiniSAP Then MiniSAP won't be installed successfully.
Gostou do GWT?
Aplique o Given-When-Then no seu dia a dia (começando hoje) e não esqueça de comentar abaixo.
Pagoti comentar agora nunca foi tão simples , valew mano !!
Legal!! Bom saber disso! O conteúdo do blog não é só posts mas também os comentários. Gostaria de incentivar bastante os comentários do pessoal.
Abraços!
Opa. Utilizei isso uma vez. Queria aplicar TDD numa spec. Peguei a spec inteira e transformei em BDD(não conhecia por esse nome). Acho que foi o primeiro programa que fiz que foi aprovado de primeira 🙂
Legal!! Isso no mundo ABAP Fawcs?
BDD é bastante usado em C# e Ruby.
Farei um post aqui no ABAP101 em breve mostrando como aplicar BDD em testes unitários no ABAP.
Abraços!
Sim! tinha lido algo parecido na SCN e tava com os dedos coçando pra aplicar = ), vou ver se acho o link(e lembro do meu pw na scn..)
Legal! Se puder compartilhar por aqui o link seria fantástico!
Abraços!
Pelo que eu lembre, eram os blogs do Paul Hardy:
http://scn.sap.com/community/abap/blog/2013/07/04/abap-objects–i-want-to-believe
http://scn.sap.com/community/abap/blog/2012/10/27/crossing-the-great-divide–procedural-vs-oo-abap-programming
Eu acho os blogs desse cara muito bons! Como eu tento fazer sempre POO, eu tento ter parâmetros e esse cara é um deles!
Obrigado!
Realmente este cara é muito bom. O primeiro post já havia lido mas o segundo ainda não. Quando este cara começa a escrever ele não para nunca mais.
O ABAP2yUML usa muitos testes unitários com BDD.
Obrigado por compartilhar os links. Abraços!