Gabriel / Ramos

⟨ pintor de pixel ⟩

  • Blog
  • Por trás das páginas: JavaScript Assertivo

Por trás das páginas: JavaScript Assertivo

Um pouco mais sobre o lançamento desse projeto especial, como foi todo o processo de escrita e uma ótima surpresa pra você no final

12 min. de leitura

Foto por Julia Kadel

Finalmente! Na última sexta-feira, depois de mais de um ano de desenvolvimento, escrita e revisão, esse trabalho feito com tanto carinho saiu do forno.

Esse é, muito provavelmente, o meu maior projeto até hoje!

#Beleza... Mas do que você tá falando?

O JavaScript Assertivo é um livro sobre testes com JavaScript e a ideia, desde o início, era facilitar o entendimento sobre as fundamentos necessários pra qualquer pessoa poder escrever seus testes, além de trazer exemplos realmente práticos e que pudessem abordar os mais variados cenários.

Meu pensamento era que esse livro seja uma espécie de "manual" sobre o assunto, mas que ao mesmo tempo também ajude quem lê a ter uma base sólida sobre e saiba aplicar os conceitos e ferramentas de maneira confiante.

Dessa forma, ele pode ser consumido por diversos tipos de pessoa, independente de ter ou não experiência com testes. Seu único "pré-requisito" é o entendimento sobre JavaScript.

Todo o conteúdo é 100% prático, então ao longo do livro, diversos tipos de aplicações são testadas, onde você pode baixar, clonar os projetos e aplicar o conteúdo do livro enquanto acompanha com a leitura!

#Trilha e jornada na leitura

Como o intuito é ter uma base e compreender testes em diversas camadas da aplicação, o conhecimento vai sendo construído ao longo das partes do livro.

Cada parte contém seu próprio projeto com seus conceitos e diversos tipos de testes envolvidos

Ao total, o livro é dividido em 5 partes:

  • Fundamentos: começamos com todos os conceitos, teoria e diversos termos que envolvem testes, eles são comentados junto com analogias e exemplos de mercado pra que os projetos possam fazer sentido pra todo mundo. Nessa etapa entenderemos as diferenças dos tipos de teste e também a famosa "pirâmide de teste" e o que isso significa. É aqui que as bases do conteúdo são criadas;
  • CLI: após entender e ter uma base teórica mais forte, o primeiro projeto que começará recebendo teste unitário é um projeto de linha de comando. Nessa parte do livro, uma CLI (interface de linha de comando ou command-line interface) que realiza operações CRUD (cadastro, leitura, atualização e deleção) será testada;
  • Back-end: nessa terceira parte, um serviço que realiza as operações de CRUD da CLI anterior através de sua API é que será a estrela. Agora os testes serão um pouco mais completos, envolvendo os testes de unidade, integração e também de carga;
  • Front-end: após a finalização dos testes anteriores, precisamos entender como testar aplicações visuais. Essa terceira parte contém uma aplicação que será cliente da API testada anteriormente, e também serão aplicados diversos tipos de testes como de unidade, integração e também de regressão visual;
  • End-to-end: a trilha não estaria completa se não testássemos as aplicações de ponta-a-ponta. Nessa parte, os testes irão garantir cenários envolvendo todas as camadas das aplicações envolvidas.

Mas, tudo isso você pode ver no próprio site do livro, o que eu gostaria de comentar por aqui é sobre como foi todo o processo de escrita até então.

#De onde essa ideia surgiu?

Testes foi sempre um assunto que me interessou.

É bem comum entrar na área de tecnologia por diversos meios. Além disso, quando o assunto é programar, nem todo mundo se preocupa em aprender (ou ensinar) sobre testes.

Então, como uma boa parte da galera, testes era uma área cinzenta e meio complicada pra mim. Isso mudou no momento que eu decidi entrar de cabeça e entender o assunto pra não ficar só corrigindo teste através de tentativa e erro.

Naturalmente fui estudando, pesquisando, entrando mais afundo no assunto (inclusive um material que me ajudou muito foi o Testing JavaScript, do Kent C. Dodds) e a realidade é que testes, por si só, é um assunto bem extenso que precisa ser estudado com a mesma dedicação que outros diversos tópicos na área de tecnologia. Não é à toa que existem pessoas com profissão dedicada somente a qualidade de software, né?

E foi durante essas pesquisas que eu percebi que muitas das fontes de conteúdo sobre testes (e vários outros, né?) são de fora do Brasil.

Não me entenda errado, temos ótimos conteúdos de qualidade por aqui! Dois que eu sempre recomendo sempre são o JS com TDD na Prática (do Willian Justen) e Aprenda a testar Aplicações JavaScript (do Fábio Vedovelli). Mas ainda assim, se comparados com os conteúdos internacionais, com certeza estamos em menor número.

Isso fica ainda mais claro quando você pesquisa conteúdo para ler. Eu gosto bastante de leitura e, na época, não achei nenhum livro sobre testes em JavaScript que fosse escrito em português.

E foi aí que a primeira faísca aconteceu: por quê não ser o primeiro? Eu já adoro escrever aqui no Blog, seria um passo bem interessante e um desafio que me animou assim que me veio à cabeça!

Foi aí que eu comecei a montar e "desenhar" esse projeto.

#Como foi a definição do conteúdo?

Como comentei, a ideia sempre foi abordar os mais variados cenários de teste de forma que o livro pudesse ser um manual ou um guia sobre isso e também facilitar todas as bases teóricas necessárias. Mesmo assim, não adianta fazer um livro técnico, ainda mais sobre esse assunto, se não for possível ter exemplos práticos para quem acompanha a leitura, concorda?

Nesse ponto, eu percebi que esse desafio seria mais trabalhoso do que eu imaginei: se eu quisesse deixar os exemplos claros, eu precisaria ter projetos reais, usando tecnologias reais, pra que tudo pudesse ficar mais vívido. Foi aí que eu comecei a pensar nas aplicações e nos tipos de testes que poderiam ser aplicados em cada uma delas.

Com isso, comecei a dar os primeiros passos, escrever os primeiros capítulos mais introdutórios e a pensar mais afundo nos projetos. Foi enquanto esses pedaços iniciais foram sendo escritos que a própria robustez do projeto foi ficando clara pra mim. Eu não queria entregar um conteúdo falho ou que explicasse somente algo superficial, então o aviso já fica aqui: esse livro vai ser bem denso, ele vai te fazer pensar e colocar a mão na massa frequentemente.

Mas se você gosta do que eu escrevo por aqui, isso muito provavelmente não é nenhuma novidade pra você, não é mesmo? 🤣

#Como foi o processo de escrita?

Da mesma forma como quem lê tem a oportunidade de praticar, eu que escrevi o conteúdo preciso ter o material pronto, então todos os testes e projetos são acessíveis por qualquer pessoa que acesse o repositório. Então não foi questão de fazer apenas um ou dois projetos, mas sim 3 aplicações (CLI, Back-end e Front-end) pra que os exemplos ficassem claros e pudessem se encaixar nos cenários que eu queria.

Eu costumo ter um fluxo bem simples de escrita. Eu escrevo meus posts no Notion, exporto o conteúdo em markdown e crio o post aqui no blog, então foi bem fácil adaptar as coisas para o fluxo que a editora propõe.

Ao longo do desenvolvimento das aplicações, eu fui escrevendo os capítulos "lado a lado", escrevia uma camada ou parte da aplicação, escrevia alguns testes e elaborava os capítulos do livro.

Aqui já temos uma outra observação: não, eu não usei TDD (embora eu comente sobre ele no livro). Sendo bem sincero, em alguns cenários eu tenho muita dificuldade de aplicá-lo de uma forma efetiva e, como eu comentei, o livro foi feito pra que qualquer pessoa pudesse consumir com o mínimo de barreira possível. Então para quem quiser se aprofundar e começar a escrever código seguindo TDD, isso vai ser uma lição de casa após a leitura.

Não foi um trabalho fácil... Se "só" desenvolver e realizar testes em uma aplicação muitas vezes já dá trabalho, fazer um passo-a-passo escrito de maneira que facilitasse a compreensão de quem está lendo é algo bem desafiador.

Mas com certeza, valeu muito a pena!

#Um livro não é um livro se não tiver uma dedicatória

Quem me conhece sabe que eu sou uma manteiga derretida e eu não poderia ter um projeto desses sem a dedicatória adequada e nada mais justo do que agradecer as pessoas que me apoiam e sempre me apoiaram, seja profissional ou pessoalmente.

Me marcou muito esse momento já que foi como uma espécie de "encerramento" (embora ajustes sempre apareçam no conteúdo). Foi como desbloquear uma nova conquista onde a dedicatória fosse um marco talhado em pedra dizendo: eu consegui.

Posso dizer facilmente que foi a parte que mais encheu meu coração de felicidade ao escrever. Lembro claramente de escrever os agradecimentos com os olhos marejados pensando em cada uma das pessoas que caminharam e caminham comigo e que fizeram, com certeza, parte dessa realização.

#Hora do prefácio

Sempre achei muito bonito as introduções e prefácios de livros que li por aí e geralmente prefácios são escritos por pessoas que possuem certa autoridade no assunto que é abordado ao longo da leitura.

Foi aí que me veio à cabeça em conversar com o Willian e ver se ele topava escrever o prefácio e bom, preciso dizer que ficou sensacional.

Não vou dar mais nenhum spoiler, mas adianto que é uma introdução perfeita pra todo o conteúdo que você vai encontrar nas quase 400 páginas desse livro, dividido em 5 partes principais.

#JesTip

Conforme fomos chegando ao processo de finalização, eu já não me aguentava mais de ansiedade e tive uma outra ideia.

É muito comum (pelo menos na comunidade de tecnologia) se deparar com postagens que explicam pequenas doses de conteúdo de forma fácil e direta de ser aplicada. Algumas pessoas, inclusive, chamam isso de "pílulas" de conhecimento.

Com isso em mente que surgiu o JesTip (inclusive você pode encontrar essa "coleção" aqui no blog).

Preparei uma série de 10 pequenas dicas de testes que foram publicadas no twitter de forma rápida e que pudesse servir de apoio prático pra alguns assuntos e detalhes comuns que encontramos em aplicações que são testadas por aí.

#Revisões, apoio editorial, finalizações e claro, a capa!

Talvez não tenha ficado claro, mas eu prezo muito pela comunicação e aprendizagem de conteúdo de qualidade de forma acessível. Então com certeza eu precisava de uma editora que se alinhasse com esses valores pessoais.

Levando isso em consideração e, sendo bem sincero, minha opção de editora estava praticamente feita desde o início.

Por já ter lido alguns livros e, principalmente, saber que o conteúdo possui um preço mais acessível se comparado à outras editoras e com um bom nível de qualidade, minha escolha foi fácil e decidi entrar em contato com a Casa do Código.

A parceria iniciou antes de começar a parte mais extensa do projeto. Apresentei alguns capítulos introdutórios que já estavam prontos e tive a ótima resposta de que poderíamos seguir adiante com o conteúdo, então foi hora de arregaçar as mangas e começar a escrever (e desenvolver) pra valer.

Ao longo de todo o processo a editora sempre exerceu um papel fundamental me apoiando como autor e ajudando em praticamente toda a burocracia de contrato e ISBN (número de identificação do livro). Foram feitas pelo menos 3 revisões de todo o conteúdo que eu escrevi, sendo elas da parte didática e da parte gramática.

O contato com as pessoas responsáveis foi sempre simples e muito rápido. Em momento algum eu me senti pressionado à escrever, mesmo tendo terminado o conteúdo relativamente rápido, tudo fluiu muito, muito bem.

Pra você ter uma ideia, até os cupons do livro eu pude escolher! Já deixo aqui mais um spoiler: tem referências de teste até nos cupons que vou comentar logo logo (a surpresa vem aí).

Até a capa foi desenhada pela equipe da editora!

Quando chegamos nessa etapa de finalização, a equipe colheu algumas ideias que eu gostaria de trazer pra arte do livro e eu precisava de algo que retratasse as diversas "camadas" de aplicações e de testes que são abordadas no livro.

Pensando nisso, a primeira coisa que me veio à cabeça foi uma "matriosca" (ou matryoshka): aquela boneca russa que vai abrindo dando origem a outras bonecas menores no mesmo formato, onde você pode ir tirando uma de dentro da outra.

Acabou sendo uma ótima ligação, afinal, os projetos e testes do livro são construídos exatamente assim, em diversas camadas, da menor até a maior, todas interconectadas.

Do processo de escrita e criação, acho que é isso. Agora chega de enrolação...


#Toda essa história não termina por aqui

#Cadê a surpresa? 🎁

Pra comemorar esse lançamento tão importante, você que acompanha, gosta do meu conteúdo e está lendo esse post, vai poder participar de um sorteio e ganhar uma cópia digital do livro!

#Opa, sorteio?! Como vai funcionar?

Vai ser muito simples: até o fim do dia de hoje (quarta-feira, 13/10/2021), qualquer pessoa que se cadastrar na newsletter aqui pelo blog ou pelo site do livro, já estará concorrendo.

Exatamente, sem pegadinha, sem letra miúda, simples assim!

Assim que essa "data de corte" finalizar, eu vou exportar a lista de todo mundo que tá na newsletter e realizar o sorteio.

O único ponto importante é que você precisa apenas preencher seu nome de forma clara e utilizar um e-mail que você acesse regularmente, ok?

Caso você já tenha seu email cadastrado e não queira participar do sorteio é só me avisar através de qualquer um dos contatos e redes sociais disponíveis no cabeçalho do site, combinado?

#Que ferramenta será usada pra sortear?

Pra deixar todo o processo o mais transparente possível e evitar usar plataformas externas onde não sabemos como um sorteio é realizado, eu fiz uma ferramenta especialmente pra essas ocasiões.

Assim como todo o código do livro, você pode ver como essa ferramenta funciona olhando diretamente no código fonte do sorteador. Seu README está bem detalhado e já conta bastante coisa.

O sorteio é feito com base em um array que contém dados de participantes. Sua lógica é bem simples: um número aleatório vai ser gerado, entre 0 e a quantidade total de participantes. Esse número será usado como índice no array de entrada para encontrar quem ganhou.

Isso é feito, literalmente, em uma linha de código e você pode ver aqui.

Vamos pensar em um cenário e imaginar que estamos realizando esse sorteio com 10 pessoas participando. Nesse caso, teríamos os dados dessas pessoas em um lista com os índices variando de 0 até 9. Um número entre essa faixa de valores (0 até 9) será gerado aleatoriamente, correspondendo à posição de quem foi sorteado na lista de participantes.

Simples assim, sem mistério nenhum!

#Como o resultado vai ser ser divulgado?

Assim que o sorteio for realizado eu pretendo divulgar quem ganhou o livro, além de usar esse e-mail cadastrado pra entrar em contato.

Todos os sorteios vão ficar registrados em um histórico, onde vou colocar suas informações (como evento e data) e o nome de quem ganhou (somente o primeiro nome, pra evitar qualquer exposição). Qualquer detalhe mais pessoal como sobrenome e email de contato não serão divulgados.

Caso a pessoa sorteada já tenha comprado o livro, não tem problema. Ela vai receber um cupom e eu entrarei em contato mesmo assim. Assim quem ganhar pode escolher uma outra pessoa conhecida que queira presentear.

Se isso não for possível, caso eu não consiga entrar em contato ou ter uma resposta de quem ganhou dentro de 24h, realizo um novo sorteio e seguimos adiante.

Espero que todo o processo tenha ficado claro pra você. Minha ideia é abrir o jogo sobre como isso vai funcionar pra que não possa ter ficado nenhuma dúvida e todo mundo possa ter a mesa chance de ganhar.

De qualquer forma, também fico à disposição pra responder qualquer dúvida que possa ter ficado. Se precisar é só entrar em contato através das mesmas redes sociais que comentei anteriormente (alí cabeçalho do site).

Então é isso, bora lá, não perde tempo!

Se inscreve na newsletter abaixo (ou pelo site do livro) e boa sorte! 🤞


Compartilhe