• Bibliotecas Python para Testes Automatizados — Parte 2 da série de posts do Guia Herez

    Testes Automatizados em Python — Guia Herez (Parte 2)

    Testes Automatizados em Python — Parte 2 da série Herez

    Visão geral: esta é a segunda publicação da série Herez sobre bibliotecas Python. Aqui abordamos ferramentas para testes automatizados: Splinter, Robot Framework, Behave, PyUnit (unittest) e PyTest. O objetivo é oferecer descrições práticas, comandos de instalação e cenários de uso para escolher a ferramenta certa para seu projeto.

    Publicado por em

    Como usar este post

    Cada seção descreve a biblioteca, por que usá‑la, comando de instalação e exemplos de casos de uso. Use este guia para comparar ferramentas e montar um fluxo de testes automatizados adequado ao seu time e produto.


    Resumo rápido

    Biblioteca Tipo Quando usar
    SplinterAutomação de navegador (wrapper)Testes de UI simples; alternativa a Selenium
    Robot FrameworkFramework de automação baseado em palavras-chaveTestes de aceitação, RPA e automação de alto nível
    BehaveBDD (Behavior Driven Development)Especificações executáveis em Gherkin
    PyUnit / unittestFramework de testes padrãoTestes unitários com estilo xUnit
    PyTestFramework de testes modernoTestes unitários, integração e parametrizados; extensível

    Bibliotecas detalhadas

    Splinter

    O que é: biblioteca que simplifica a automação de navegadores, oferecendo uma API de alto nível que pode usar drivers como Selenium, zope.testbrowser ou outros backends.

    Por que usar: ideal para escrever testes de interface web com menos boilerplate que o Selenium puro; facilita ações comuns (clicar, preencher formulários, navegar) em testes de aceitação.

    # Instalação
    pip install splinter
    

    Casos de uso: testes de fluxo de usuário em aplicações web, validação de formulários, smoke tests de UI e automação de tarefas simples no navegador.

    Robot Framework

    O que é: framework de automação baseado em palavras‑chave, orientado a testes de aceitação e automação de processos (RPA). Fornece sintaxe legível por humanos e integrações com bibliotecas externas.

    Por que usar: excelente para equipes que preferem escrever casos de teste em formato tabular/keyword-driven; facilita colaboração entre desenvolvedores, QA e stakeholders não técnicos.

    # Instalação
    pip install robotframework
    

    Casos de uso: testes de aceitação, automação de processos repetitivos, integração com Selenium para testes de UI e cenários de RPA.

    Behave

    O que é: framework para BDD (Behavior Driven Development) que usa a linguagem Gherkin para descrever comportamentos em cenários legíveis (Given/When/Then).

    Por que usar: quando você quer alinhar requisitos e testes com stakeholders, transformando especificações em cenários executáveis que servem como documentação viva.

    # Instalação
    pip install behave
    

    Casos de uso: especificação e validação de requisitos, testes de aceitação automatizados e colaboração entre times de produto e QA.

    PyUnit / unittest

    O que é: implementação em Python do estilo xUnit, incluída na biblioteca padrão como unittest (historicamente conhecida como PyUnit).

    Por que usar: disponível por padrão, com estrutura familiar (TestCase, setUp, tearDown) e compatibilidade com muitas ferramentas e runners.

    # Uso básico (não requer instalação)
    python -m unittest discover
    

    Casos de uso: testes unitários clássicos, integração com CI e projetos que preferem dependências mínimas e API xUnit tradicional.

    PyTest

    O que é: framework de testes moderno e amplamente adotado, conhecido por sintaxe simples, fixtures poderosas e ecossistema de plugins.

    Por que usar: reduz boilerplate, suporta parametrização, fixtures reutilizáveis e integrações com ferramentas de cobertura e mocks; é frequentemente recomendado como primeira escolha para novos projetos Python.

    # Instalação
    pip install pytest
    

    Casos de uso: testes unitários, testes de integração, testes parametrizados, TDD e pipelines de CI. PyTest é frequentemente escolhido por sua simplicidade e extensibilidade.


    Comparação rápida

    Critério Splinter Robot Framework Behave unittest (PyUnit) PyTest
    FocoAutomação de navegadorKeyword-driven / RPABDDUnitário (xUnit)Unitário/Integração
    Curva de aprendizadoBaixaMédiaMédiaBaixaBaixa
    Ideal paraQA de UITimes multidisciplinaresAlinhamento com produtoProjetos padrãoProjetos modernos e TDD
    ExtensibilidadeMédiaAltaMédiaMédiaAlta (plugins)

    Boas práticas para testes automatizados

    • Separe testes por camadas: unitários, integração e aceitação.
    • Use ambientes isolados e dados de teste controlados; evite dependências externas nos testes unitários.
    • Automatize execução em CI e gere relatórios de cobertura e falhas.
    • Prefira PyTest para novos projetos, mantendo compatibilidade com unittest quando necessário.
    • Use Robot ou Behave quando stakeholders não técnicos precisarem ler ou escrever cenários de teste.
    Dica Herez: comece com PyTest para criar uma base sólida; adicione Robot ou Behave apenas quando houver necessidade clara de testes de aceitação legíveis por não desenvolvedores.

    Próximo post da série

    No próximo artigo cobriremos bibliotecas Python para Processamento de Imagens (Pillow, OpenCV, scikit-image), com exemplos práticos de pipelines de pré‑processamento e análise.

    Excerpt: Parte 2 da série Herez — guia prático de bibliotecas Python para testes automatizados: Splinter, Robot Framework, Behave, PyUnit e PyTest.

    Tags: Testes; Python; PyTest; Robot Framework

  • Bibliotecas Python para Aprendizado de Máquina — Parte 1 da série de posts do Guia Herez

    Bibliotecas Python para Aprendizado de Máquina — Guia Herez

    Bibliotecas Python para Aprendizado de Máquina — Parte 1 da série de posts do Guia Herez

    Visão geral: existem muitas bibliotecas Python úteis para diferentes etapas do fluxo de trabalho de Machine Learning. Por isso esta publicação faz parte de uma série que agrupa bibliotecas por área: Aprendizado de Máquina, Desenvolvimento Web, Testes Automatizados, Processamento de Imagens, Web Scraping e Desenvolvimento de Jogos. Este é o primeiro post da série e foca nas bibliotecas essenciais para aprendizado de máquina.

    Publicado por em

    Como usar este post

    Este artigo apresenta cada biblioteca com uma breve descrição, motivos para usar, comandos de instalação e exemplos de casos de uso. Use-o como referência rápida ao montar ambientes, escolher ferramentas para prototipagem ou planejar pipelines de ML.


    Resumo rápido

    Biblioteca Função principal Quando usar
    NumPyArrays N‑dimensionais e operações numéricasBase para cálculos e outras bibliotecas
    PandasManipulação de dados tabularesETL, análise exploratória, feature engineering
    MatplotlibPlotagem 2DGráficos personalizados e publicação
    SeabornVisualização estatística de alto nívelExploração de dados e relatórios
    SciPyRotinas científicas avançadasOtimização, integração, álgebra avançada
    scikit-learnAlgoritmos clássicos de MLModelos de baseline e pipelines
    TensorFlowFramework de deep learning escalávelProdução, treinamento em larga escala
    KerasAPI de alto nível para redes neuraisPrototipagem rápida de modelos
    PyTorchFramework de deep learning com execução dinâmicaPesquisa e modelos customizados
    TheanoCompilador de expressões matemáticas (histórico)Legado e compreensão histórica

    Bibliotecas detalhadas

    NumPy

    O que é: biblioteca fundamental para computação numérica em Python. Fornece o tipo ndarray e operações vetorizadas de alto desempenho.

    Por que usar: base para Pandas, SciPy e muitos frameworks de ML; substitui loops Python por operações vetorizadas, acelerando cálculos.

    # Instalação
    pip install numpy
    

    Casos de uso: álgebra linear, manipulação de tensores simples, geração de dados sintéticos e operações matriciais em pipelines de pré‑processamento.

    Pandas

    O que é: biblioteca para manipulação e análise de dados tabulares com estruturas DataFrame e Series.

    # Instalação
    pip install pandas
    

    Casos de uso: ETL, análise exploratória (EDA), tratamento de valores ausentes, criação de features e integração com scikit‑learn.

    Matplotlib

    O que é: biblioteca clássica de plotagem 2D; altamente configurável e a base para muitas outras bibliotecas de visualização.

    # Instalação
    pip install matplotlib
    

    Seaborn

    O que é: camada de alto nível sobre Matplotlib para visualizações estatísticas com estética pronta.

    # Instalação
    pip install seaborn
    

    SciPy

    O que é: conjunto de algoritmos científicos construído sobre NumPy, incluindo otimização, integração, interpolação, álgebra linear avançada e estatística.

    # Instalação
    pip install scipy
    

    scikit-learn

    O que é: biblioteca padrão para algoritmos clássicos de machine learning: regressão, classificação, clustering, redução de dimensionalidade e pipelines.

    # Instalação
    pip install scikit-learn
    

    TensorFlow

    O que é: framework de deep learning escalável, com suporte a CPU, GPU e TPU, e um ecossistema para produção.

    # Instalação
    pip install tensorflow
    

    Keras

    O que é: API de alto nível para construção e treino de redes neurais; atualmente integrada ao TensorFlow como tf.keras.

    # Instalação (opcional se usar tf.keras)
    pip install keras
    

    PyTorch

    O que é: framework de deep learning com execução dinâmica (eager execution), muito usado em pesquisa e com forte comunidade.

    # Instalação
    pip install torch torchvision
    

    Theano

    O que é: biblioteca histórica para definição e otimização de expressões matemáticas que geram código eficiente para CPU/GPU.

    # Instalação
    pip install Theano
    

    Como escolher a combinação certa

    • Preparação de dados: NumPy + Pandas + SciPy.
    • Visualização: Matplotlib para controle fino; Seaborn para análises estatísticas rápidas.
    • Modelos clássicos: scikit‑learn para protótipos e pipelines.
    • Deep learning: TensorFlow/Keras para produção; PyTorch para pesquisa e experimentação.

    Boas práticas

    • Use ambientes virtuais (venv, conda) para isolar dependências.
    • Documente versões das bibliotecas (arquivo requirements.txt ou environment.yml) para reprodutibilidade.
    • Ao usar GPU, verifique compatibilidade entre versões de CUDA/cuDNN e as bibliotecas (TensorFlow/PyTorch).
    • Combine bibliotecas: Pandas para ETL, scikit‑learn para baseline, e TensorFlow/PyTorch para modelos complexos.
    Dica Herez: comece com um pipeline simples (Pandas → scikit‑learn) para validar hipóteses antes de migrar para deep learning.

    Próximo post da série

    No próximo artigo cobriremos bibliotecas Python para Testes Automatizados (Splinter, Robot, Behave, PyUnit e PyTest), com comparações práticas e cenários de uso. .

    Excerpt: Primeiro post da série Herez sobre bibliotecas Python para aprendizado de máquina — guia prático para NumPy, Pandas, Matplotlib, Seaborn, SciPy, scikit‑learn, TensorFlow, Keras, PyTorch e Theano.

    Tags: Python; aprendizado de máquina; NumPy; Pandas; TensorFlow

  • Guia prático Herez sobre os diretórios essenciais do Linux com explicações e exemplos

    Diretórios essenciais do Linux: /home /etc /var /usr /bin /sbin /boot /lib /dev /proc

    Diretórios essenciais do Linux

    Resumo: este post explica por que o Linux é um sistema operacional baseado em arquivos e detalha a função, o conteúdo típico e as melhores práticas para os diretórios /home, /etc, /var, /usr, /bin, /sbin, /boot, /lib, /dev e /proc.

    Importância da hierarquia de arquivos no Linux

    Linux é um sistema operacional baseado em arquivos: tudo — desde dispositivos e processos até configurações e dados — é representado por arquivos organizados em uma hierarquia que começa na raiz /. Essa padronização facilita administração, segurança, backup e interoperabilidade entre distribuições, seguindo convenções como o Filesystem Hierarchy Standard.


    Visão geral rápida

    Diretório Finalidade Conteúdo típico Quem usa
    /Ponto de montagem raizEstrutura do sistemaSistema
    /homeDiretórios pessoaisArquivos e configurações do usuárioUsuários
    /etcConfigurações do sistemaArquivos de configuração em textoAdministradores
    /varDados variáveisLogs; spool; cacheServiços
    /usrProgramas e dados de usuário/usr/bin; /usr/lib; /usr/shareUsuários e sistema
    /binBinários essenciaisComandos básicos como ls, cpTodos
    /sbinBinários administrativosFerramentas de manutençãoRoot
    /bootArquivos de inicializaçãoKernel; initramfs; bootloaderSistema/bootloader
    /libBibliotecas essenciaisBibliotecas compartilhadasSistema
    /devArquivos de dispositivoDiscos; terminais; interfacesKernel e processos
    /procInformações do kernel/proc/cpuinfo; /proc/<pid>Ferramentas e administradores

    Descrição detalhada dos diretórios

    /

    Descrição: raiz do sistema; ponto de montagem principal onde todos os outros diretórios residem. Montagens adicionais (discos, partições) são anexadas sob a hierarquia a partir daqui.

    /home

    Finalidade: armazenar os diretórios pessoais dos usuários. Cada usuário normalmente tem um diretório como /home/usuario com documentos, configurações de aplicações e dados pessoais. Manter /home em partição separada facilita reinstalações sem perda de dados.

    /etc

    Finalidade: contém arquivos de configuração do sistema e dos serviços instalados. São arquivos de texto que definem comportamento de rede, contas, serviços e scripts de inicialização; alterações aqui afetam o sistema globalmente.

    /var

    Finalidade: destinado a dados que mudam com o tempo, como logs, filas de impressão, caches e spools de e-mail. Serviços escrevem continuamente em /var, por isso é comum monitorar e rotacionar logs para evitar esgotamento de disco.

    /usr

    Finalidade: abriga programas, bibliotecas e documentação que não são essenciais para a inicialização mínima do sistema. Subdiretórios comuns incluem /usr/bin, /usr/lib e /usr/share. Em ambientes gerenciados, /usr pode ser montado como somente leitura para segurança e consistência.

    /bin

    Finalidade: contém binários essenciais necessários para todos os usuários e para recuperação do sistema, como ls, cp e bash. Esses comandos devem estar disponíveis mesmo em modo de manutenção.

    /sbin

    Finalidade: contém binários administrativos usados para manutenção e administração do sistema, como fsck, reboot e utilitários de rede. Normalmente requer privilégios de root.

    /boot

    Finalidade: armazena arquivos necessários para a inicialização do sistema, incluindo imagens do kernel, initramfs e arquivos do bootloader (por exemplo, GRUB). Problemas em /boot podem impedir a inicialização do sistema.

    /lib

    Finalidade: contém bibliotecas compartilhadas usadas por binários em /bin e /sbin, como a libc. Em sistemas 64 bits existe também /lib64. Sem essas bibliotecas, executáveis essenciais não funcionam.

    /dev

    Finalidade: diretório de dispositivos que expõe hardware e interfaces do kernel como arquivos especiais de bloco e caractere. Exemplos incluem discos (/dev/sda) e terminais (/dev/tty). A maioria dos arquivos em /dev é gerada dinamicamente pelo kernel ou por udev.

    /proc

    Finalidade: sistema de arquivos virtual que fornece informações em tempo real sobre o kernel e processos, como /proc/cpuinfo e /proc/<pid>. Não contém dados persistentes em disco; é uma interface para consultar e, em alguns casos, ajustar parâmetros do kernel.


    Boas práticas e recomendações

    • Particionamento: separar /home, /var e /boot em partições distintas melhora recuperação e segurança.
    • Rotação de logs: configure logrotate para evitar que /var encha com logs.
    • Gerenciamento de pacotes: evite editar diretamente arquivos em /bin e /lib; use o gerenciador de pacotes da distribuição para manter consistência.
    • Monitoramento: monitore uso de disco e integridade de /boot e /var para prevenir falhas de inicialização e interrupções de serviço.
    Dica rápida: antes de reinstalar o sistema, faça backup de /home e dos arquivos de configuração em /etc para preservar dados e personalizações.

    Dicas

    Conhecer a função de cada diretório torna a administração do Linux mais eficiente: procure configurações em /etc, dados variáveis em /var, binários essenciais em /bin e /sbin, e informações do kernel em /proc. A hierarquia baseada em arquivos torna o sistema previsível, modular e mais fácil de manter.

    Excerpt: Guia prático dos diretórios essenciais do Linux com explicações, exemplos e boas práticas para administradores e usuários.

    Tags: Linux, diretórios, FHS, administração, sysadmin

    Diretórios essenciais do Linux — Guia Herez completo e prático

    Aprofundando o conhecimento sobre a hierarquia de Diretórios do Linux

    Resumo: Guia Herez com explicações, exemplos práticos, comandos úteis e boas práticas para os diretórios essenciais do Linux. Ideal para administradores, desenvolvedores e profissionais de infraestrutura.

    Por que a hierarquia importa

    Organizar arquivos em diretórios padronizados torna sistemas previsíveis, facilita automação, backups e segurança. Seguir convenções internas da equipe e padrões de mercado reduz tempo de investigação quando algo falha.

    Piada curta: se o Linux fosse uma casa, /etc seria o manual, /home os quartos e /proc a câmera que conta quantas vezes você abriu a geladeira.

    Visão geral rápida

    Diretório Finalidade Exemplo de uso prático
    /Raiz do sistemaMontagens e pontos de recuperação
    /homeDados pessoaisPerfis, chaves SSH, dotfiles
    /etcConfigurações do sistemasystemd, rede, serviços
    /varDados variáveislogs, caches, bancos locais
    /usrProgramas e dados não essenciais/usr/bin, /usr/share
    /binBinários essenciaisls, cp, bash
    /sbinBinários administrativosfsck, reboot
    /bootArquivos de inicializaçãokernel, initramfs, grub
    /libBibliotecas essenciaislibc, módulos compartilhados
    /devArquivos de dispositivodiscos, terminais, /dev/null
    /procInformações do kernel/proc/cpuinfo, /proc/<pid>

    Descrição detalhada e exemplos de finalidade

    /

    Finalidade: raiz do sistema; ponto de montagem principal. Mantenha a raiz enxuta para facilitar snapshots e restaurações.

    • Usar partições separadas para /home, /var e /boot.
    • Evitar armazenar grandes dados temporários diretamente em /.

    /home

    Finalidade: diretórios pessoais dos usuários.

    • Armazenar dotfiles e chaves: ~/.ssh, ~/.config.
    • Aplicar quotas para controlar uso de disco em ambientes multiusuário.
    • Montar /home em partição separada para preservar dados em reinstalações.

    /etc

    Finalidade: arquivos de configuração do sistema e serviços.

    • Versionar arquivos críticos do /etc em repositório interno para auditoria e rollback.
    • Exemplos: /etc/ssh/sshd_config, /etc/fstab, /etc/systemd/system.

    /var

    Finalidade: dados que mudam com o tempo.

    • Logs: /var/log — configure logrotate.
    • Dados de serviços: /var/lib/mysql, /var/lib/docker.
    • Cache: /var/cache — limpar periodicamente para liberar espaço.

    /usr

    Finalidade: programas, bibliotecas e documentação que não são essenciais para a inicialização mínima.

    • Instalar software compilado em /usr/local para evitar conflitos com o gerenciador de pacotes.
    • Montar /usr como somente leitura em ambientes imutáveis para segurança.

    /bin e /sbin

    Finalidade: binários essenciais e administrativos.

    • /bin: comandos usados por todos os usuários e scripts de inicialização.
    • /sbin: ferramentas de administração que normalmente requerem root.

    /boot

    Finalidade: arquivos necessários para inicialização do sistema.

    • Gerenciar kernels e initramfs; remover kernels antigos com cuidado.
    • Verificar espaço em /boot antes de atualizações de kernel.

    /lib e /lib64

    Finalidade: bibliotecas compartilhadas essenciais.

    • Não remova arquivos manualmente; use o gerenciador de pacotes.

    /dev

    Finalidade: arquivos de dispositivo que representam hardware e interfaces do kernel.

    • Discos: /dev/sda, /dev/nvme0n1.
    • Dispositivos especiais: /dev/null, /dev/loop0.

    /proc

    Finalidade: sistema de arquivos virtual que expõe informações do kernel e processos em tempo real.

    • Consultar status do sistema: /proc/cpuinfo, /proc/meminfo.
    • Ajustar parâmetros do kernel temporariamente via /proc/sys ou sysctl.

    Exemplos práticos com comandos

    Trechos de comandos que ilustram operações comuns relacionadas aos diretórios.

    Montar /home em partição separada

    sudo mkfs.ext4 /dev/sdb1
    sudo mkdir -p /mnt/newhome
    sudo mount /dev/sdb1 /mnt/newhome
    sudo rsync -a /home/ /mnt/newhome/
    # editar /etc/fstab com UUID para montar em /home no boot

    Ver uso de disco e localizar arquivos grandes

    df -h /
    du -sh /var/log/*
    sudo find / -type f -size +100M -exec ls -lh {} \;

    Rotacionar logs manualmente

    sudo logrotate -f /etc/logrotate.conf
    journalctl --vacuum-size=200M

    Consultar informações do kernel via /proc

    cat /proc/cpuinfo
    cat /proc/meminfo
    sudo sysctl -w net.ipv4.ip_forward=1

    Recuperação com chroot

    sudo mount /dev/sda1 /mnt
    for d in dev proc sys; do sudo mount --bind /$d /mnt/$d; done
    sudo chroot /mnt /bin/bash
    # executar fsck, atualizar initramfs, reinstalar bootloader

    Boas práticas Herez

    • Particione conforme carga: /home, /var, /boot em discos separados quando necessário.
    • Automatize backups de /home e /etc e teste restaurações regularmente.
    • Use logrotate e monitore métricas de disco com alertas.
    • Evite editar binários e bibliotecas manualmente; prefira pacotes e repositórios internos.
    • Documente políticas de montagem e permissões no repositório de operações da equipe.
    Checklist Herez: backup de /home e /etc; limpar kernels antigos; configurar logrotate; monitorar /var e /boot.

    Perguntas frequentes

    Onde devo instalar software compilado manualmente

    Coloque em /usr/local para evitar conflitos com o gerenciador de pacotes da distribuição.

    Devo montar /usr como somente leitura

    Em ambientes imutáveis e de produção, montar /usr como somente leitura aumenta segurança e previsibilidade, desde que atualizações sejam gerenciadas por processos controlados.

    Como evitar que /var encha

    Configure rotação de logs, limpe caches antigos e monitore uso com alertas. Para serviços que geram muitos dados, use partições dedicadas ou armazenamento em rede.

    Conclusão

    Conhecer a finalidade de cada diretório torna a administração do Linux mais eficiente e segura. Siga as práticas recomendadas, documente decisões de particionamento e automatize backups e monitoramento. Quando algo misterioso aparecer no sistema, antes de culpar o kernel, verifique se alguém não deixou as meias no /.

    Excerpt: Guia Herez dos diretórios essenciais do Linux com explicações, exemplos práticos, comandos e boas práticas para administradores e desenvolvedores.

    Tags: Linux; diretórios; FHS; administração; sysadmin; Herez

Biografia do autor: Doutor Herez possui Bacharelado em Análise de Sistemas, Mestrado em Engenharia de Computação/Software, Doutorado em Ciência da Computação e seu primeiro diploma acadêmico em Processamento de Dados em 1996. Início profissional na carreira em T.I. em 1993 com o primeiro certificado de programação de computadores em 1986 e início da participação em curso de programação em 1985. Microsoft Certified Professional desde 2000, entre outros títulos oficiais de diversos grandes fabricantes internacionais de software, também criou cursos e provas oficiais voltados à programação de computadores. Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: análise e desenvolvimento de sistemas, engenharia de software, métodos de pesquisa e métodos ágeis.