Mostrando postagens com marcador Dojo. Mostrar todas as postagens
Mostrando postagens com marcador Dojo. Mostrar todas as postagens

sábado, 24 de outubro de 2020

TDD no SQL com tSQLt

 

A utilização de teste é uma realidade muito comum no desenvolvimento de aplicativos, porém banco de dados é tratada como uma forma de exceção quando falamos da utilização do método desenvolvimento orientado a testes, principalmente pela falta de uma ferramenta integrada que possibilite a criação de testes, classes, além da metrificação dos resultados da execução dos testes.

O tSQLt é uma ferramenta que oferece uma estrutura de testes para ser aplicado em banco de dados SQL, o tSQLt permite implementar testes de unidade em T-SQL, também fornece recursos como: testes dentro das transações, agrupamento dos testes em classes, saída em texto simples ou XML e o principal de criar clonar de tables, views, functions e procedure para utilizar em simulação nos testes sem interferir nas estruturas reais.

O processo para utilização é bem simples e vamos demonstrar desde a instalação e criação de um teste e sua execução.

  1. Instalação do tSQLt

  • Baixe tSQLt do site tSQLt.ORG

  • Acesse ou crie um novo banco de dados

  • Execute o script tSQLtClass.SQL no banco de dados


Installed at 2020-10-24 18:23:21.390
+-----------------------------------------+
|                                         |
| Thank you for using tSQLt.              |
|                                         |
| tSQLt Version: 1.0.5873.27393           |
|                                         |
+-----------------------------------------+
  1. Efetuar a criação de “Classes” para agrupar o teste

EXEC tSQLt.NewTestClass 'UnitTestClass';

Esse comando irá criar uma classe que poderá ser utilizada para executar somente os testes que estiverem associadas à ela, na prática o SQL criará um “Schema” com esse nome.

  1. Criando um teste

CREATE OR ALTER PROC [UnitTestClass].[Test Exists Function CalculateBestQuote]
AS
BEGIN
  --Arrange
 
  --Act
  
  --Assert
   EXEC tSQLt.AssertObjectExists @ObjectName = N'fnCalculateBestQuote'
END
GO

Importante, toda procedure que representa um teste deve obrigatoriamente iniciar com a palavra “Test”, como o banco de dados podem conter estrutura que podem não existir, diferente de código estático, existe um Assert específico que efetua a validação da existência do objeto, no caso do exemplo, ele está verificando se a function “fnCalculateBestQuote” existe no banco de dados.

  1. Executando os testes

    EXEC tsqlt.RunTestClass 'UnitTestClass'

Através do comando, todos os testes que estão associados a classe referida, será executado exibindo as mensagens de erros, os resultados esperados e um resumo dos testes.

[UnitTestClass].[Test Exists Function CalculateBestQuote] failed: (Failure) 'fnCalculateBestQuote' does not exist
 
+----------------------+
|Test Execution Summary|
+----------------------+
 
|No|Test Case Name                                           |Dur(ms)|Result |
+--+---------------------------------------------------------+-------+-------+
|1 |[UnitTestClass].[Test Exists Function CalculateBestQuote]|    127|Failure|
-----------------------------------------------------------------------------
Msg 50000, Level 16, State 10, Line 1
Test Case Summary: 1 test case(s) executed, 0 succeeded, 1 failed, 0 errored.
-----------------------------------------------------------------------------

  1. Criando a function 

CREATE OR ALTER FUNCTION fnCalculateBestQuote
(
    @BaseValue decimal(10,2),
@Fator decimal(6,2)
)
RETURNS Decimal(15,2)
AS
BEGIN
    RETURN @BaseValue / @Fator * 2;
END
GO

Após a execução dos testes e da falha, devemos escrever o código que satisfaça a regra de negócio esperada.

  1. Executando o teste novamente

EXEC tsqlt.RunTestClass 'UnitTestClass'

O resultado dos testes será com sucesso

+----------------------+
|Test Execution Summary|
+----------------------+
 
|No|Test Case Name                                           |Dur(ms)|Result |
+--+---------------------------------------------------------+-------+-------+
|1 |[UnitTestClass].[Test Exists Function CalculateBestQuote]|      6|Success|
-----------------------------------------------------------------------------
Test Case Summary: 1 test case(s) executed, 1 succeeded, 0 failed, 0 errored.
-----------------------------------------------------------------------------

Portanto, agora ficará mais fácil detectar bugs antes mesmo de conectar com seu código de backend, simplesmente executando os testes no banco de dados.

Existem várias funções desenvolvidas para validações, além claro da parte de clonar tabelas e afins para criar massa de testes, existe uma vasta documentação em https://tsqlt.org/full-user-guide/

Na GFT praticamos TDD em sessão de Coding Dojo que ocorrem a cada 15 dias em sessões online, elas são abertas para todos participarem, basta acessar //meetup.com/GFTBrasil, escolher o melhor dia e horário para você praticar.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


sábado, 5 de setembro de 2020

Aprendendo com Coding Dojo



Todo aquele que precisa executar uma prática que exige conhecimento de movimentos específicos para alcançar resultados esperados, tem que ter um espaço seguro e confiável para treinar e aplicar cada movimento, seja novo ou conhecido e além de ter um ou mais mestres para orientar e também avaliar a performance da aplicação do aprendizado. Tá, mas o que isso tem há ver com tecnologia? Tudo meu pequeno padawan, os desenvolvedores também precisam ter um espaço seguro e confiável para treinar e melhorar suas habilidades, esse local é Coding Dojo.

A palavra Condig é o termo em inglês para “programando” ou “gerando código”, já a palavra Dojo, (pronuncia-se Dojô) é uma palavra de origem japonesa e significa “local de treinamento”. Logo, o Coding Dojo nada mais é que do um “local de treinamento de código”.

Esse espaço tem como suas principais características ser um ambiente colaborativo, que estimula o aprendizado de forma divertida e principalmente sem nenhum tipo de competitividade entre os participantes. Existem três modalidades:

Randori

Esse é o formato mais “tradicional” por que todos participação, no início o mestre da sessão propõem um desafio a ser resolvido e todos os participantes deverão resolvê-lo utilizando uma única máquina, utilizando o sistema de rodízio de pares. Neste par existirá um piloto que irá operar a máquina e o copiloto que irá auxiliá-lo, a plateia neste momento só acompanha, a cada tempo de minutos pré-definidos previamente, o copiloto virá piloto e alguém da plateia se torna o co-piloto. Se utilizado o TDD a plateia somente poderá efetuar interrupções quando todos os testes estiverem verde. Importante, o mestre pode servir como um consultor da tecnologia e não dá solução do problema. Ao final todos devem entender a solução, pois durante toda a sessão o piloto e copiloto devem estar sempre narrando seus pensamentos.

Kata

Aqui o mestre assume a postura de palestrante, ele irá demonstrar o problema e já partir para aplicação da solução, que pode estar parte pré desenvolvida e ser complementa durante a sessão. Todos os participantes podem a qualquer momento efetuar interrupções para expor dúvidas. O resultado final é que todos ao final devem ser capazes de efetuar a implementação da solução. 

Kake

Muito parecido ao Randori, a principalmente diferença é que não existe um rodízio de pessoas, e sim de duplas, cada dupla trabalha em sua máquina e ao fim do turno as duplas trocam de máquinas e continuam o desenvolvimento da dupla anterior, esse ambiente exige mais conhecimento avançado da tecnologia ensinada.

Benefícios

A utilização do Coding Dojo em um ambiente corporativo aumenta o engajamento do time de desenvolvimento, estimula a aquisição de novos conhecimentos e principalmente desenvolve os valores dos profissionais participantes:

  • Participação: Exemplifica a importância da participação de todos na resolução do problema, porque todos podem opinar.

  • Cooperação: O problema tente a ter uma solução melhor e mais rápida com a colaboração entre todos, pois vários aspectos são levados em conta por conta da experiência pessoal de cada participante.

  • Coragem: Estimula a coragem de enfrentar novos desafios, pois o ambiente sendo seguro até o mais tímidos ganham espaço e oportunidade para praticar a interlocução de suas ideias, sem o julgamento do dia a dia.

  • Simplicidade: Como existem vários níveis de experiências entre os participantes, a simplicidade é importante ser mantida para que todos estejam avançado em conjunto, porque é vital que ao final todos estejam treinados para implementação a solução.

  • Respeito: Esse valor é muito praticado, porque todos os participante devem respeitar a proposta de solução de um problema, porque todos acabamos aprendendo que existem várias formas de resolver um problema.

Sempre ao final do Coding Dojo é importantíssimo a execução de uma breve retrospectiva pelo responsável para verificar se os principais objetivos foram alcançados, porque além de ser ambiente de ensinamento seguro, é também altamente adaptável ao público, ou seja, caso os resultados não estejam sendo satisfatório, podemos adaptar o formato para facilitar a aplicação do conhecimento.

Onde Treinar?

Aqui na GFT praticamos a cada 15 dias em sessões online, elas são abertas para todos participarem, basta acessar o atalho abaixo, escolher o melhor dia e horário para você praticar conosco.

https://www.meetup.com/GFTBrasil

Oss

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br