DEV Community

Matheus de Camargo Marques
Matheus de Camargo Marques

Posted on

Elixir Enchiridium — Tomo VII: As Ferramentas

AVISO: esta série é uma fantasia satírica baseada em fatos reais sobre Elixir. Nada aqui deve ser levado ao pé da letra. Ao final de cada capítulo, os fatos por trás da lenda são revelados. Tags: #satire #humor #elixir #enchiridium


Elixir Enchiridium — Tomo VII: As Ferramentas

Prefácio do Tomo

No Tomo I, contamos a história de como Elixir nasceu. No Tomo II, abrimos a máquina. No Tomo III, abrimos o OTP. No Tomo IV, abrimos a sintaxe. No Tomo V, abrimos o ecossistema. No Tomo VI, abrimos a batalha.

Agora, no Tomo VII, vamos abrir as ferramentas.

Uma linguagem não vive só de código. Ela vive de ferramentas. Ferramentas que analisam, que formatam, que testam, que documentam, que observam, que medem. O Elixir tem um arsenal de ferramentas que tornam o desenvolvimento não apenas produtivo, mas seguro e divertido. Dialyzer, Credo, Benchee, Observer, ExDoc, mix format, ExUnit, StreamData, Wallaby, Mox, Faker, Telemetry, Logger, Ecto.Sandbox — cada uma tem uma história. Cada uma tem uma lenda.

Este tomo é sobre essas ferramentas. Cada capítulo parte de um fato verificável e o transforma em uma crônica fantástica. Porque a verdade sobre as ferramentas do Elixir já é fantástica o suficiente.

São cem capítulos. O sétimo tomo de dez.

Comecemos pelo começo: a ferramenta que chora com any().


Capítulo 1 — Dialyzer: O Detector de Mentiras que Chora com any()

A lenda diz que o Dialyzer é um detector de mentiras. Ele interroga seu código. Ele pergunta: "Qual é o seu tipo?" Se você responde any(), ele chora. Se você responde com um tipo concreto, ele sorri. Ele nunca mente. Ele nunca perdoa um any().

A verdade é que Dialyzer (DIscrepancy AnaLYZer for ERlang programs) é uma poderosa ferramenta de análise estática que ajuda desenvolvedores a identificar problemas potenciais no código Elixir sem executá-lo. Ele é excelente em encontrar incompatibilidades de tipo, código inalcançável e funções desnecessárias através de análise de fluxo sofisticada. O Dialyzer é baseado em success typing, uma abordagem que infere os tipos que podem levar a um sucesso em runtime. Ele é a ferramenta padrão de facto para verificação estática de tipos em programas Erlang. Para projetos Elixir, a maneira recomendada de usar o Dialyzer é através do Dialyxir, uma tarefa do Mix que simplifica seu uso.

A lenda diz que, na primeira vez que um programador rodou o Dialyzer, ele perguntou: "Por que está chorando?" O instrutor respondeu: "Porque você tem any() no código."

O fato por trás da lenda: Dialyzer é uma ferramenta de análise estática que identifica incompatibilidades de tipo, código inalcançável e funções desnecessárias sem executar o código. É baseada em success typing e é o padrão de facto para verificação estática em Erlang/Elixir. O Dialyxir é a forma recomendada de usá-lo em projetos Elixir.

Gancho: O detector chora. Mas há uma coisa que ensina: o Credo.


Capítulo 2 — Credo: O Professor que Corrige com Carinho

A lenda diz que o Credo é um professor. Ele corrige seu código. Mas ele não grita. Ele não humilha. Ele ensina. Ele mostra oportunidades de refatoração. Ele mostra código complexo. Ele mostra erros comuns. Ele mostra inconsistências de nomenclatura. Ele quer que você seja melhor.

A verdade é que Credo é uma ferramenta de análise estática de código para a linguagem Elixir com foco em ensino e consistência de código. Ele pode mostrar oportunidades de refatoração no seu código, fragmentos de código complexos, avisá-lo sobre erros comuns, mostrar inconsistências no seu esquema de nomenclatura e — se necessário — ajudar a impor um estilo de codificação desejado. Credo implementa seu próprio style guide e é comumente adicionado como dependência de desenvolvimento/teste no Mix, sendo executado com mix credo. Credo tem mais de 5.100 estrelas no GitHub.

A lenda diz que, na primeira vez que um programador rodou o Credo, ele perguntou: "O que é isso?" O instrutor respondeu: "É o professor. Ele só quer te ajudar."

O fato por trás da lenda: Credo é uma ferramenta de análise estática com foco em ensino e consistência de código. Mostra oportunidades de refatoração, código complexo, erros comuns e inconsistências de nomenclatura. Implementa seu próprio style guide. Mais de 5.100 estrelas no GitHub.

Gancho: O professor ensina. Mas há uma coisa que mede: o Benchee.


Capítulo 3 — Benchee: O Cronômetro que Mede Tudo

A lenda diz que o Benchee é um cronômetro. Ele mede o tempo. Ele mede a memória. Ele compara funções. Ele mostra estatísticas. Ele mostra gráficos. Ele nunca mente. Ele nunca exagera.

A verdade é que Benchee é uma biblioteca para benchmarking fácil e agradável em Elixir. Ela permite comparar a performance de diferentes pedaços de código rapidamente. Benchee executa cada uma das suas funções por um determinado período de tempo após um warmup inicial, medindo seu tempo de execução e, opcionalmente, consumo de memória. Ele fornece estatísticas como média, iterações por segundo, desvio padrão e mediana. Benchee tem cerca de 1.500 estrelas no GitHub e foi criado há quase nove anos.

A lenda diz que, na primeira vez que um programador rodou o Benchee, ele perguntou: "Qual função é mais rápida?" O instrutor respondeu: "O Benchee sabe. E ele te mostra."

O fato por trás da lenda: Benchee é uma biblioteca de benchmarking que compara performance de código, medindo tempo de execução e consumo de memória. Fornece média, iterações por segundo, desvio padrão e mediana. Cerca de 1.500 estrelas no GitHub.

Gancho: O cronômetro mede. Mas há uma coisa que observa: o Observer.


Capítulo 4 — Observer: A Janela para a Alma da BEAM

A lenda diz que o Observer é uma janela. Ele mostra a alma da BEAM. Ele mostra processos. Ele mostra memória. Ele mostra nós. Ele mostra tabelas ETS. Ele mostra tracing. Ele nunca dorme. Ele nunca esconde nada.

A verdade é que Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir em execução. Ele exibe informações do sistema, árvores de supervisão de aplicações, informações de processos, tabelas ETS, tabelas Mnesia e contém um frontend para tracing de Erlang. Ele fornece muitas ferramentas poderosas para monitorar e depurar sua aplicação, tanto em desenvolvimento quanto em produção. Você pode acessar o Observer GUI e depurar um projeto que vaza memória, tanto localmente quanto através de um nó remoto. Ele também inclui o etop (uma ferramenta para apresentar informações sobre processos Erlang) e o crashdump_viewer (uma ferramenta HTML para navegar em crashdumps).

A lenda diz que, na primeira vez que um programador abriu o Observer, ele perguntou: "O que é isso?" O instrutor respondeu: "É a alma da BEAM. E ela está viva."

O fato por trás da lenda: Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir em execução. Exibe informações do sistema, árvores de supervisão, processos, tabelas ETS e Mnesia, e contém um frontend para tracing. Inclui etop e crashdump_viewer.

Gancho: A janela mostra. Mas há uma coisa que documenta: o ExDoc.


Capítulo 5 — ExDoc: O Papagaio que Gera Documentação

A lenda diz que o ExDoc é um papagaio chamado Doc. Ele lê seus @doc e repete em voz alta. Se você não escrever nada, ele fica quieto e gera uma página em branco. O mix docs é o comando para alimentar o papagaio com sementes. Se você mentir na documentação, o papagaio voa embora e nunca mais volta.

A verdade é que ExDoc é uma ferramenta para gerar documentação para projetos Erlang e Elixir. Ele produz documentação em HTML, EPUB e Markdown a partir de documentação de API. Você pode usar ExDoc com Mix (recomendado para projetos Elixir), com Rebar (recomendado para projetos Erlang), ou via linha de comando. ExDoc é usado para gerar a documentação oficial do Elixir, disponível em hexdocs.pm/elixir.

A lenda diz que, na primeira vez que um programador rodou mix docs, ele perguntou: "Onde está a documentação?" O instrutor respondeu: "Na pasta doc. O papagaio fez."

O fato por trás da lenda: ExDoc gera documentação para projetos Erlang e Elixir em HTML, EPUB e Markdown. Funciona com Mix, Rebar ou linha de comando. Usado para gerar a documentação oficial do Elixir.

Gancho: O papagaio documenta. Mas há uma coisa que formata: o mix format.


Capítulo 6 — Mix Format: O Cabeleireiro que Usa Pomada de Unicórnio

A lenda diz que o mix format arruma seu código com pomada de unicórnio. Se você não rodar, seu código fica com o cabelo bagunçado e o compilador zomba. O .formatter.exs é o manual de estilo do cabeleireiro. Se você discordar, ele te expulsa do salão.

A verdade é que mix format é uma maneira built-in de formatar seu código Elixir de acordo com o estilo consistente acordado pela comunidade. O formatador lê um arquivo .formatter.exs no diretório atual para configuração. Padrões são expandidos com Path.wildcard/2. É possível formatar código em todo o projeto passando uma lista de padrões e arquivos para mix format. Desde o Elixir 1.13, é possível usar plugins de formatador para estender o comportamento do formatador para outros tipos de arquivo.

A lenda diz que, na primeira vez que um programador rodou mix format, ele perguntou: "Posso escolher o estilo?" O instrutor respondeu: "Não. O estilo é opinativo."

O fato por trás da lenda: mix format formata código de acordo com o estilo consistente acordado pela comunidade. Lê .formatter.exs para configuração. Desde o Elixir 1.13, suporta plugins de formatador.

Gancho: O cabeleireiro formata. Mas há uma coisa que testa: o ExUnit.


Capítulo 7 — ExUnit: O Tribunal que Julga Seu Código

A lenda diz que o ExUnit é um tribunal. Cada teste é um julgamento. Cada assert é uma sentença. Se o código passa, ele é absolvido. Se falha, é condenado. O juiz é imparcial. O júri é o compilador. A sentença é executada imediatamente.

A verdade é que ExUnit é o framework de testes unitários do Elixir. Ele fornece assert, refute, assert_raise, assert_receive e outras macros para escrever testes. Testes são organizados em módulos que usam ExUnit.Case. ExUnit é integrado ao Mix, então você roda mix test para executar todos os testes. ExUnit também suporta describe e test para organizar testes, e setup para preparar o ambiente.

A lenda diz que, na primeira vez que um programador rodou mix test, ele perguntou: "Quantos testes eu preciso?" O instrutor respondeu: "Todos."

O fato por trás da lenda: ExUnit é o framework de testes unitários do Elixir. Fornece assert, refute, assert_raise, assert_receive. Testes usam ExUnit.Case. É executado com mix test.

Gancho: O tribunal julga. Mas há uma coisa que gera dados: o StreamData.


Capítulo 8 — StreamData: O Feiticeiro que Gera Dados Aleatórios

A lenda diz que o StreamData é um feiticeiro. Ele gera dados aleatórios. Ele gera listas. Ele gera mapas. Ele gera structs. Ele testa suas propriedades. Se a propriedade falhar, ele encolhe o caso até encontrar o menor exemplo que falha. O feiticeiro nunca erra. O feiticeiro nunca desiste.

A verdade é que StreamData é uma biblioteca de data generation e property-based testing para Elixir. Ela é feita de dois componentes principais: geração de dados e property-based testing. O módulo ExUnitProperties cuida da parte de testes. StreamData permite definir propriedades que devem ser verdadeiras para qualquer entrada válida, gerando milhares de casos de teste automaticamente. StreamData tem cerca de 877 estrelas no GitHub.

A lenda diz que, na primeira vez que um programador usou StreamData, ele perguntou: "O que eu testo?" O instrutor respondeu: "Propriedades."

O fato por trás da lenda: StreamData é uma biblioteca de property-based testing. Gera dados aleatórios e testa propriedades. Se falhar, encolhe o caso. Cerca de 877 estrelas no GitHub.

Gancho: O feiticeiro gera. Mas há uma coisa que testa navegadores: o Wallaby.


Capítulo 9 — Wallaby: O Fantoche que Testa Navegadores

A lenda diz que o Wallaby é um fantoche. Ele controla navegadores. Ele clica. Ele preenche formulários. Ele verifica textos. Ele testa aplicações Phoenix de ponta a ponta. O fantoche nunca erra. O fantoche nunca se cansa.

A verdade é que Wallaby é uma biblioteca de testes de aceitação para aplicações Phoenix. Ele ajuda você a testar suas aplicações web simulando interações realistas do usuário. Por padrão, ele roda cada caso de teste concurrentemente e gerencia os navegadores para você. Wallaby usa o ChromeDriver para controlar um navegador Chrome real ou headless. Ele tem cerca de 1.800 estrelas no GitHub.

A lenda diz que, na primeira vez que um programador usou Wallaby, ele perguntou: "O que é isso?" O instrutor respondeu: "É o fantoche que testa."

O fato por trás da lenda: Wallaby é uma biblioteca de testes de aceitação para Phoenix. Simula um usuário real navegando. Roda testes concurrentemente. Usa ChromeDriver. Cerca de 1.800 estrelas no GitHub.

Gancho: O fantoche testa. Mas há uma coisa que mocka: o Mox.


Capítulo 10 — Mox: O Ator que Finge Ser Outro

A lenda diz que o Mox é um ator. Ele finge ser outro. Ele interpreta. Ele substitui. Ele mocka. Ele define comportamentos. Ele define expectativas. O ator nunca erra. O ator nunca sai do personagem.

A verdade é que Mox é uma biblioteca para definir mocks concorrentes em Elixir. A biblioteca segue os princípios de "Mocks and explicit contracts", que podem ser resumidos em: sem mocks ad-hoc (você só pode criar mocks baseados em behaviours), sem geração dinâmica de módulos durante os testes, suporte a concorrência, e dependência de pattern matching e cláusulas de função para assertions. O objetivo por trás do Mox é ajudar você a pensar e definir o contrato entre as diferentes partes da sua aplicação. Mox é mantido pela Dashbit e tem cerca de 1.385 estrelas no GitHub.

A lenda diz que, na primeira vez que um programador usou Mox, ele perguntou: "O que é um mock?" O instrutor respondeu: "É um ator que finge ser outro."

O fato por trás da lenda: Mox é uma biblioteca de mocking baseada em behaviours. Define mocks, expectativas e verificações. Mantida pela Dashbit. Cerca de 1.385 estrelas no GitHub.

Gancho: O ator finge. Mas há uma coisa que gera dados: o Faker.


Capítulo 11 — Faker: O Mago que Inventa Dados

A lenda diz que o Faker é um mago. Ele inventa dados. Ele cria nomes. Ele cria endereços. Ele cria emails. Ele cria tudo que você precisa para testar. O mago nunca erra. O mago nunca repete.

A verdade é que Faker é uma biblioteca pura em Elixir para gerar dados falsos. Ela pode ser usada para popular bancos de dados de teste, criar documentos XML, preencher sua persistência para stress test, ou anonimizar dados retirados de um serviço de produção. Faker é mantida pela comunidade e tem uma ampla variedade de geradores, incluindo endereços, avatares, códigos, comércio, empresas, internet e lorem ipsum.

A lenda diz que, na primeira vez que um programador usou Faker, ele perguntou: "O que é isso?" O instrutor respondeu: "É o mago que inventa dados."

O fato por trás da lenda: Faker é uma biblioteca pura em Elixir para gerar dados falsos. Usada para popular bancos de dados de teste, criar fixtures e anonimizar dados. Geradores incluem endereços, avatares, códigos, comércio, empresas, internet e lorem ipsum.

Gancho: O mago inventa. Mas há uma coisa que isola testes: o Ecto.Sandbox.


Capítulo 12 — Ecto.Sandbox: A Caixa de Areia que Isola os Testes

A lenda diz que o Ecto.Sandbox é uma caixa de areia. Cada teste entra na caixa. Cada teste tem seu próprio banco. Cada teste é isolado. Quando o teste termina, a caixa é limpa. O Sandbox nunca erra. O Sandbox nunca mistura.

A verdade é que Ecto.Sandbox é uma biblioteca para testar aplicações Ecto de forma isolada. Ele permite que cada teste rode em uma transação que é revertida ao final, garantindo que os testes não interfiram uns com os outros. O Sandbox suporta múltiplos modos, incluindo :manual e :shared, e é integrado com ExUnit. O Phoenix.Ecto.SQL.Sandbox é um plug que permite rodar testes de aceitação concurrentes com ferramentas como Wallaby.

A lenda diz que, na primeira vez que um programador usou Sandbox, ele perguntou: "O que é isso?" O instrutor respondeu: "É a caixa de areia."

O fato por trás da lenda: Ecto.Sandbox isola testes de Ecto. Cada teste roda em uma transação revertida ao final. Suporta modos :manual e :shared. O Phoenix.Ecto.SQL.Sandbox permite testes de aceitação concurrentes.

Gancho: A caixa de areia isola. Mas há uma coisa que mede: o Telemetry.


Capítulo 13 — Telemetry: O Olho que Tudo Vê

A lenda diz que o Telemetry é um olho. Ele mede tudo: requisições, queries, erros. E o LiveDashboard mostra tudo em tempo real. O olho nunca dorme. O olho nunca mente.

A verdade é que Telemetry é uma biblioteca de instrumentação para Elixir e Erlang. Ele fornece eventos que podem ser consumidos por bibliotecas como telemetry_metrics e visualizados pelo Phoenix LiveDashboard. O Phoenix integra a Telemetry para medir e reportar métricas padrão do Phoenix, Ecto e da VM Elixir. O LiveDashboard converte cada métrica do Telemetry.Metrics em um gráfico em tempo real bonito.

A lenda diz que, na primeira vez que um programador usou Telemetry, ele perguntou: "O que posso medir?" O instrutor respondeu: "Tudo."

O fato por trás da lenda: Telemetry é uma biblioteca de instrumentação para Elixir e Erlang. Fornece eventos que podem ser consumidos por telemetry_metrics e visualizados pelo Phoenix LiveDashboard. O Phoenix integra a Telemetry para medir métricas de Phoenix, Ecto e VM.

Gancho: O olho observa. Mas há uma coisa que registra: o Logger.


Capítulo 14 — Logger: O Diário Secreto que Só Conta Verdades

A lenda diz que o Logger é um diário secreto. Ele registra tudo. Cada mensagem. Cada erro. Cada aviso. Se você mentir no Logger.info, ele corrige automaticamente e escreve a verdade no Logger.error. O diário nunca mente. O diário nunca esquece.

A verdade é que Logger é o módulo de logging do Elixir. Ele foi introduzido no Elixir v0.15.0, lançado em agosto de 2014, como uma nova aplicação que fornece o módulo Logger como a principal API de logging para desenvolvedores. Ele fornece 4 níveis de log: debug, info, warn e error, e suporta múltiplos backends que são automaticamente supervisionados quando plugados no Logger. O Logger formata e trunca mensagens no cliente para evitar entupir os backends, e alterna entre modos síncronos e assíncronos para permanecer performático quando necessário.

A lenda diz que, na primeira vez que um programador usou Logger.info, ele perguntou: "Onde está o log?" O instrutor respondeu: "No diário."

O fato por trás da lenda: Logger é o módulo de logging do Elixir. Foi introduzido no Elixir v0.15.0 (agosto de 2014). Fornece Logger.debug/2, Logger.info/2, Logger.warn/2, Logger.error/2. Suporta múltiplos backends e alterna entre modos síncronos e assíncronos.

Gancho: O diário registra. Mas há uma coisa que documenta: o ExDoc.


Capítulo 15 — ExDoc (Parte 2): O Papagaio que Nunca se Cala

A lenda diz que o ExDoc é um papagaio. Ele lê seus @doc e repete em voz alta. Se você não escrever nada, ele fica quieto e gera uma página em branco. O mix docs é o comando para alimentar o papagaio com sementes.

A verdade é que ExDoc é a ferramenta oficial de geração de documentação do Elixir. Ela lê os atributos @doc e @moduledoc e gera documentação HTML navegável. ExDoc é usado por praticamente todos os projetos Elixir. Ele suporta Markdown, links, exemplos e agrupamento de funções. ExDoc também gera EPUB e Markdown além de HTML.

A lenda diz que, na primeira vez que um programador rodou mix docs, ele perguntou: "Onde está a documentação?" O instrutor respondeu: "Na pasta doc."

O fato por trás da lenda: ExDoc gera documentação para projetos Erlang e Elixir em HTML, EPUB e Markdown. Funciona com Mix, Rebar ou linha de comando.

Gancho: O papagaio documenta. Mas há uma coisa que analisa: o Dialyzer.


Capítulo 16 — Dialyzer (Parte 2): O Detector que Nunca se Cansa

A lenda diz que o Dialyzer é um detector de mentiras. Quando encontra um any(), ele chora copiosamente e se recusa a continuar.

A verdade é que Dialyzer é uma ferramenta de análise estática para bytecode da BEAM. Ele fornece avisos sobre tipos incompatíveis, código inalcançável e funções desnecessárias. O Dialyxir é uma tarefa do Mix que simplifica seu uso em projetos Elixir.

A lenda diz que, na primeira vez que um programador rodou o Dialyzer, ele perguntou: "Por que está chorando?" O instrutor respondeu: "Porque você tem any() no código."

O fato por trás da lenda: Dialyzer é uma ferramenta de análise estática que identifica incompatibilidades de tipo, código inalcançável e funções desnecessárias. O Dialyxir é a forma recomendada de usá-lo em projetos Elixir.

Gancho: O detector analisa. Mas há uma coisa que ensina: o Credo.


Capítulo 17 — Credo (Parte 2): O Professor que Nunca Desiste

A lenda diz que o Credo é um professor que nunca desiste de você.

A verdade é que Credo é uma ferramenta de análise estática com foco em ensino e consistência de código. Ele pode mostrar oportunidades de refatoração, código complexo, erros comuns e inconsistências de nomenclatura. Credo implementa seu próprio style guide e pode ser configurado com checks personalizadas.

A lenda diz que, na primeira vez que um programador viu todas as checks do Credo, ele perguntou: "Preciso seguir todas?" O instrutor respondeu: "Não. Mas o professor vai reclamar."

O fato por trás da lenda: Credo implementa um style guide com muitas regras verificáveis. Checks são configuradas com parâmetros no arquivo de configuração.

Gancho: O professor ensina. Mas há uma coisa que mede: o Benchee.


Capítulo 18 — Benchee (Parte 2): O Cronômetro que Nunca Para

A lenda diz que o Benchee é um cronômetro que nunca para.

A verdade é que Benchee é uma biblioteca de benchmarking que permite comparar a performance de diferentes pedaços de código. Ele executa cada função por um determinado período de tempo após um warmup inicial, medindo tempo de execução e consumo de memória. Ele fornece estatísticas como média, iterações por segundo, desvio padrão e mediana.

A lenda diz que, na primeira vez que um programador usou Benchee, ele perguntou: "Qual função é mais rápida?" O instrutor respondeu: "O Benchee sabe."

O fato por trás da lenda: Benchee é uma biblioteca de benchmarking que compara performance de código, medindo tempo de execução e consumo de memória.

Gancho: O cronômetro mede. Mas há uma coisa que observa: o Observer.


Capítulo 19 — Observer (Parte 2): A Janela que Nunca Fecha

A lenda diz que o Observer é uma janela que nunca fecha.

A verdade é que Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir em execução. Ele exibe informações do sistema, árvores de supervisão, processos, tabelas ETS e Mnesia, e contém um frontend para tracing. Ele pode ser usado tanto localmente quanto através de um nó remoto.

A lenda diz que, na primeira vez que um programador abriu o Observer, ele perguntou: "O que é isso?" O instrutor respondeu: "A alma da BEAM."

O fato por trás da lenda: Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir. Inclui etop e crashdump_viewer.

Gancho: A janela mostra. Mas há uma coisa que documenta: o ExDoc.


Capítulo 20 — ExDoc (Parte 3): O Papagaio que Gera EPUB

A lenda diz que o ExDoc é um papagaio que gera EPUB.

A verdade é que ExDoc gera documentação em HTML, EPUB e Markdown. Ele pode ser usado com Mix, Rebar ou linha de comando. ExDoc é usado para gerar a documentação oficial do Elixir.

A lenda diz que, na primeira vez que um programador gerou um EPUB, ele perguntou: "Isso é um livro?" O instrutor respondeu: "É a sua documentação, em formato de livro."

O fato por trás da lenda: ExDoc gera documentação em HTML, EPUB e Markdown. Funciona com Mix, Rebar ou linha de comando.

Gancho: O papagaio documenta. Mas há uma coisa que formata: o mix format.


Capítulo 21 — Mix Format (Parte 2): O Cabeleireiro que Nunca Erra

A lenda diz que o mix format é um cabeleireiro que nunca erra.

A verdade é que mix format formata código de acordo com o estilo consistente acordado pela comunidade. Ele lê um arquivo .formatter.exs para configuração. Desde o Elixir 1.13, plugins podem ser usados para formatar outros tipos de arquivo.

A lenda diz que, na primeira vez que um programador rodou mix format, ele perguntou: "Posso escolher o estilo?" O instrutor respondeu: "Não. O estilo é opinativo."

O fato por trás da lenda: mix format formata código de acordo com o estilo consistente acordado pela comunidade. Lê .formatter.exs para configuração. Suporta plugins desde o Elixir 1.13.

Gancho: O cabeleireiro formata. Mas há uma coisa que testa: o ExUnit.


Capítulo 22 — ExUnit (Parte 2): O Tribunal que Nunca Dorme

A lenda diz que o ExUnit é um tribunal que nunca dorme.

A verdade é que ExUnit é o framework de testes unitários do Elixir. Ele fornece assert, refute, assert_raise, assert_receive e outras macros. Testes são organizados em módulos que usam ExUnit.Case. mix test executa todos os testes.

A lenda diz que, na primeira vez que um programador rodou mix test, ele perguntou: "Quantos testes eu preciso?" O instrutor respondeu: "Todos."

O fato por trás da lenda: ExUnit é o framework de testes unitários do Elixir. Fornece assert, refute, assert_raise, assert_receive. Testes usam ExUnit.Case.

Gancho: O tribunal julga. Mas há uma coisa que gera dados: o StreamData.


Capítulo 23 — StreamData (Parte 2): O Feiticeiro que Nunca Desiste

A lenda diz que o StreamData é um feiticeiro que nunca desiste.

A verdade é que StreamData é uma biblioteca de data generation e property-based testing. Ela gera dados aleatórios e testa propriedades que devem ser verdadeiras para todos eles. Se uma propriedade falhar, o StreamData encolhe o caso para encontrar o menor contra-exemplo.

A lenda diz que, na primeira vez que um programador usou StreamData, ele perguntou: "O que eu testo?" O instrutor respondeu: "Propriedades."

O fato por trás da lenda: StreamData é uma biblioteca de property-based testing. Gera dados aleatórios e testa propriedades. Se falhar, encolhe o caso.

Gancho: O feiticeiro gera. Mas há uma coisa que testa navegadores: o Wallaby.


Capítulo 24 — Wallaby (Parte 2): O Fantoche que Nunca se Cansa

A lenda diz que o Wallaby é um fantoche que nunca se cansa.

A verdade é que Wallaby é uma biblioteca de testes de aceitação para Phoenix. Ele simula interações realistas do usuário e roda testes concurrentemente. Wallaby usa o ChromeDriver para controlar um navegador Chrome real ou headless.

A lenda diz que, na primeira vez que um programador usou Wallaby, ele perguntou: "O que é isso?" O instrutor respondeu: "É o fantoche que testa."

O fato por trás da lenda: Wallaby é uma biblioteca de testes de aceitação para Phoenix. Simula um usuário real navegando. Roda testes concurrentemente.

Gancho: O fantoche testa. Mas há uma coisa que mocka: o Mox.


Capítulo 25 — Mox (Parte 2): O Ator que Nunca Sai do Personagem

A lenda diz que o Mox é um ator que nunca sai do personagem.

A verdade é que Mox é uma biblioteca para definir mocks concorrentes em Elixir. Ele segue os princípios de "Mocks and explicit contracts": sem mocks ad-hoc, sem geração dinâmica de módulos, suporte a concorrência, e pattern matching para assertions. Mox é mantido pela Dashbit.

A lenda diz que, na primeira vez que um programador usou Mox, ele perguntou: "O que é um mock?" O instrutor respondeu: "É um ator que finge ser outro."

O fato por trás da lenda: Mox é uma biblioteca de mocking baseada em behaviours. Define mocks, expectativas e verificações. Mantida pela Dashbit.

Gancho: O ator finge. Mas há uma coisa que gera dados: o Faker.


Capítulo 26 — Faker (Parte 2): O Mago que Nunca Repete

A lenda diz que o Faker é um mago que nunca repete.

A verdade é que Faker é uma biblioteca pura em Elixir para gerar dados falsos. Ela pode ser usada para popular bancos de dados, criar fixtures e anonimizar dados. Faker tem geradores para endereços, avatares, códigos, comércio, empresas, internet e lorem ipsum.

A lenda diz que, na primeira vez que um programador usou Faker, ele perguntou: "O que é isso?" O instrutor respondeu: "É o mago que inventa dados."

O fato por trás da lenda: Faker é uma biblioteca pura em Elixir para gerar dados falsos. Usada para testes, seeds e anonimização.

Gancho: O mago inventa. Mas há uma coisa que isola testes: o Ecto.Sandbox.


Capítulo 27 — Ecto.Sandbox (Parte 2): A Caixa de Areia que Nunca Mistura

A lenda diz que o Ecto.Sandbox é uma caixa de areia que nunca mistura.

A verdade é que Ecto.Sandbox isola testes de Ecto, revertendo transações ao final de cada teste. O Phoenix.Ecto.SQL.Sandbox permite testes de aceitação concurrentes com Wallaby.

A lenda diz que, na primeira vez que um programador usou Sandbox, ele perguntou: "O que é isso?" O instrutor respondeu: "É a caixa de areia."

O fato por trás da lenda: Ecto.Sandbox isola testes de Ecto. Cada teste roda em uma transação revertida ao final. O Phoenix.Ecto.SQL.Sandbox permite testes de aceitação concurrentes.

Gancho: A caixa de areia isola. Mas há uma coisa que mede: o Telemetry.


Capítulo 28 — Telemetry (Parte 2): O Olho que Nunca Fecha

A lenda diz que o Telemetry é um olho que nunca fecha.

A verdade é que Telemetry é uma biblioteca de instrumentação para Elixir e Erlang. Ele fornece eventos que podem ser consumidos por telemetry_metrics e visualizados pelo Phoenix LiveDashboard. O LiveDashboard converte cada métrica em um gráfico em tempo real.

A lenda diz que, na primeira vez que um programador usou Telemetry, ele perguntou: "O que posso medir?" O instrutor respondeu: "Tudo."

O fato por trás da lenda: Telemetry é uma biblioteca de instrumentação. Fornece eventos para telemetry_metrics e LiveDashboard. O Phoenix integra a Telemetry para medir métricas.

Gancho: O olho observa. Mas há uma coisa que registra: o Logger.


Capítulo 29 — Logger (Parte 2): O Diário que Nunca Esquece

A lenda diz que o Logger é um diário que nunca esquece.

A verdade é que Logger é o módulo de logging do Elixir, introduzido no Elixir v0.15.0. Ele fornece 4 níveis de log: debug, info, warn e error. Suporta múltiplos backends supervisionados.

A lenda diz que, na primeira vez que um programador usou Logger.info, ele perguntou: "Onde está o log?" O instrutor respondeu: "No diário."

O fato por trás da lenda: Logger é o módulo de logging do Elixir. Foi introduzido no Elixir v0.15.0 (agosto de 2014). Fornece 4 níveis de log e suporta múltiplos backends.

Gancho: O diário registra. Mas há uma coisa que conecta nós: o Libcluster.


Capítulo 30 — Libcluster: O Feitiço que Junta os Nós

A lenda diz que, para formar um cluster Elixir, você precisa de magia. Você roda libcluster e, de repente, todos os nós se encontram, se cumprimentam e começam a trabalhar juntos.

A verdade é que Libcluster fornece um mecanismo para formar automaticamente clusters de nós Erlang, com adesão estática ou dinâmica. Ele suporta várias estratégias: EPMD, Kubernetes, Gossip, DNS, Rancher.

A lenda diz que, na primeira vez que um programador usou Libcluster, ele perguntou: "Como isso funciona?" O instrutor respondeu: "Magia com estratégia."

O fato por trás da lenda: Libcluster forma clusters de nós Erlang automaticamente, com adesão estática ou dinâmica. Suporta EPMD, Kubernetes, Gossip, DNS, Rancher.

Gancho: O feitiço junta. Mas há uma coisa que explica os limites: o Teorema CAP.


Epílogo Parcial do Tomo VII

Trinta capítulos. Ferramentas. Mil processos. E um brasileiro que ouviu um sussurro.

Este foi o começo do Tomo VII — As Ferramentas, com fatos verificados. Ainda faltam 70 capítulos para completar este tomo. Nos próximos, vamos explorar: mais ferramentas de análise, profiling, tracing, debugging, deployment, e muitos outros tópicos.

Até lá.


Agora, sério: O ecossistema de ferramentas do Elixir é vasto. Dialyzer analisa tipos. Credo ensina. Benchee mede. Observer observa. ExDoc documenta. Mix format formata. ExUnit testa. StreamData gera dados. Wallaby testa navegadores. Mox mocka. Faker inventa dados. Ecto.Sandbox isola testes. Telemetry observa. Logger registra. Libcluster conecta. As capivaras quânticas não são reais — mas deveriam ser. Este artigo é uma fantasia satírica baseada em fatos. Mantenha o aviso para não enganar ninguém.

Top comments (0)