Testador de grandes e pequenos dados: tendências, teoria, minha história

Olá a todos, meu nome é Alexander e sou um engenheiro de qualidade de dados que verifica a qualidade dos dados. Este artigo falará sobre como cheguei a isso e por que em 2020 essa área de testes estava na crista de uma onda.

Testador de grandes e pequenos dados: tendências, teoria, minha história

Tendência global

O mundo de hoje está a viver outra revolução tecnológica, um dos aspectos da qual é a utilização de dados acumulados por todos os tipos de empresas para promover o seu próprio volante de vendas, lucros e relações públicas. Parece que a presença de dados de boa (qualidade), bem como de cérebros qualificados que podem ganhar dinheiro com eles (processar, visualizar, construir modelos de aprendizado de máquina corretamente, etc.), tornaram-se a chave do sucesso para muitos hoje. Se há 15-20 anos as grandes empresas estavam principalmente envolvidas em trabalho intensivo com acumulação e monetização de dados, hoje este é o destino de quase todas as pessoas sãs.

Nesse sentido, há vários anos, todos os portais dedicados à busca de emprego ao redor do mundo começaram a ser preenchidos com vagas para Cientistas de Dados, pois todos tinham a certeza de que, contratando tal especialista, seria possível construir um supermodelo de aprendizado de máquina , prever o futuro e dar um “salto quântico” para a empresa. Com o tempo, as pessoas perceberam que essa abordagem quase nunca funciona em lugar nenhum, pois nem todos os dados que caem nas mãos desses especialistas são adequados para modelos de treinamento.

E começaram os pedidos dos Cientistas de Dados: “Vamos comprar mais dados destes e daqueles...”, “Não temos dados suficientes...”, “Precisamos de mais alguns dados, de preferência de alta qualidade...” . A partir dessas solicitações, inúmeras interações começaram a ser construídas entre empresas proprietárias de um ou outro conjunto de dados. Naturalmente, isso exigiu a organização técnica desse processo - conectar-se à fonte de dados, baixá-lo, verificar se estava totalmente carregado, etc. O número desses processos começou a crescer e hoje temos uma grande necessidade de outro tipo de especialistas - engenheiros de qualidade de dados - aqueles que monitorariam o fluxo de dados no sistema (pipelines de dados), a qualidade dos dados na entrada e na saída, e tirariam conclusões sobre sua suficiência, integridade e outras características.

A tendência para engenheiros de qualidade de dados veio dos EUA, onde, em meio à era violenta do capitalismo, ninguém está pronto para perder a batalha pelos dados. Abaixo, forneci capturas de tela de dois dos sites de busca de empregos mais populares dos EUA: www.monstro.com и www.dice.com — que exibe dados de 17 de março de 2020 sobre a quantidade de vagas postadas recebidas utilizando as palavras-chave: Qualidade de Dados e Cientista de Dados.

www.monstro.com

Cientistas de Dados – 21416 vagas
Qualidade de Dados – 41104 vagas

Testador de grandes e pequenos dados: tendências, teoria, minha história
Testador de grandes e pequenos dados: tendências, teoria, minha história

www.dice.com

Cientistas de Dados – 404 vagas
Qualidade de Dados – vagas 2020

Testador de grandes e pequenos dados: tendências, teoria, minha história
Testador de grandes e pequenos dados: tendências, teoria, minha história

Obviamente, essas profissões não competem entre si. Com capturas de tela, eu só queria ilustrar a situação atual do mercado de trabalho em termos de solicitações de engenheiros de qualidade de dados, dos quais são necessários muito mais agora do que cientistas de dados.

Em junho de 2019, a EPAM, respondendo às necessidades do mercado moderno de TI, separou a Qualidade de Dados em uma prática separada. Os engenheiros de Data Quality, no decorrer do seu trabalho diário, gerem os dados, verificam o seu comportamento em novas condições e sistemas, monitorizam a relevância dos dados, a sua suficiência e relevância. Com tudo isso, no sentido prático, os engenheiros de qualidade de dados realmente dedicam pouco tempo aos testes funcionais clássicos, MAS isso depende muito do projeto (darei um exemplo abaixo).

As responsabilidades de um engenheiro de qualidade de dados não se limitam apenas às verificações manuais/automáticas de rotina de “nulos, contagens e somas” em tabelas de banco de dados, mas exigem um profundo entendimento das necessidades de negócios do cliente e, consequentemente, a capacidade de transformar os dados disponíveis em informações comerciais úteis.

Teoria da Qualidade de Dados

Testador de grandes e pequenos dados: tendências, teoria, minha história

Para imaginar melhor o papel de tal engenheiro, vamos descobrir o que é qualidade de dados em teoria.

Qualidade de dados — uma das etapas da Gestão de Dados (um mundo inteiro que deixaremos para você estudar por conta própria) e é responsável por analisar os dados de acordo com os seguintes critérios:

Testador de grandes e pequenos dados: tendências, teoria, minha história
Acho que não há necessidade de decifrar cada um dos pontos (em teoria são chamados de “dimensões de dados”), eles estão muito bem descritos na imagem. Mas o processo de teste em si não implica copiar estritamente esses recursos em casos de teste e verificá-los. Na Qualidade de Dados, como em qualquer outro tipo de teste, é necessário, antes de tudo, basear-se nos requisitos de qualidade de dados acordados com os participantes do projeto que tomam as decisões de negócios.

Dependendo do projeto de Qualidade de Dados, um engenheiro pode desempenhar diferentes funções: desde um testador de automação comum com uma avaliação superficial da qualidade dos dados, até uma pessoa que conduz um perfil profundo dos dados de acordo com os critérios acima.

Uma descrição muito detalhada do Gerenciamento de Dados, Qualidade de Dados e processos relacionados está bem descrita no livro chamado "DAMA-DMBOK: Conjunto de Conhecimento em Gerenciamento de Dados: 2ª Edição". Eu recomendo fortemente este livro como uma introdução a este tópico (você encontrará um link para ele no final do artigo).

Minha história

No setor de TI, passei de testador júnior em empresas de produtos a engenheiro líder de qualidade de dados na EPAM. Após cerca de dois anos trabalhando como testador, tive a firme convicção de que havia feito absolutamente todos os tipos de testes: regressão, funcional, estresse, estabilidade, segurança, UI, etc. trabalhou ao mesmo tempo em três linguagens de programação: Java, Scala, Python.

Olhando para trás, entendo por que meu conjunto de habilidades era tão diversificado: estive envolvido em projetos baseados em dados, grandes e pequenos. Foi isso que me trouxe a um mundo de muitas ferramentas e oportunidades de crescimento.

Para apreciar a variedade de ferramentas e oportunidades de adquirir novos conhecimentos e habilidades, basta olhar a imagem abaixo, que mostra as mais populares no mundo “Data & AI”.

Testador de grandes e pequenos dados: tendências, teoria, minha história
Esse tipo de ilustração é compilada anualmente por um dos famosos capitalistas de risco Matt Turck, que vem do desenvolvimento de software. Aqui link para seu blog e empresa de capital de risco, onde atua como sócio.

Cresci profissionalmente especialmente rápido quando fui o único testador do projeto, ou pelo menos no início do projeto. É nesse momento que você tem que ser responsável por todo o processo de teste, e não tem oportunidade de recuar, apenas avançar. No começo foi assustador, mas agora todas as vantagens desse teste são óbvias para mim:

  • Você começa a se comunicar com toda a equipe como nunca antes, já que não há proxy para comunicação: nem o gerente de teste nem os colegas testadores.
  • A imersão no projeto torna-se incrivelmente profunda, e você tem informações sobre todos os componentes, tanto em geral quanto detalhadamente.
  • Os desenvolvedores não olham para você como “aquele cara dos testes que não sabe o que está fazendo”, mas sim como um igual que produz benefícios incríveis para a equipe com seus testes automatizados e antecipação de bugs aparecendo em um componente específico do produtos.
  • Como resultado, você é mais eficaz, mais qualificado e mais procurado.

À medida que o projeto foi crescendo, em 100% dos casos me tornei mentor de novos testadores, ensinando-os e repassando o conhecimento que eu mesmo aprendi. Ao mesmo tempo, dependendo do projeto, nem sempre recebi da gestão especialistas em autotestes do mais alto nível e houve a necessidade de treiná-los em automação (para os interessados) ou criar ferramentas para uso nas atividades cotidianas (ferramentas para gerar dados e carregá-los no sistema, uma ferramenta para realizar testes de carga/testes de estabilidade “rapidamente”, etc.).

Exemplo de um projeto específico

Infelizmente, por obrigações de sigilo, não posso falar detalhadamente sobre os projetos em que trabalhei, mas darei exemplos de tarefas típicas de um Engenheiro de Qualidade de Dados em um dos projetos.

A essência do projeto é implementar uma plataforma de preparação de dados para treinamento de modelos de aprendizado de máquina baseados nela. O cliente era uma grande empresa farmacêutica dos EUA. Tecnicamente, era um cluster Kubernetes, subindo para AWSEC2 instâncias, com vários microsserviços e o projeto Open Source subjacente do EPAM - Legião, adaptado às necessidades de um cliente específico (agora o projeto renasceu em odahu). Os processos ETL foram organizados usando Fluxo de ar Apache e moveu dados de Força de vendas sistemas do cliente em AWS S3 Baldes. Em seguida, foi implantada na plataforma uma imagem Docker de um modelo de aprendizado de máquina, que foi treinada com dados novos e, por meio da interface da API REST, produziu previsões de interesse do negócio e resolveu problemas específicos.

Visualmente, tudo parecia mais ou menos assim:

Testador de grandes e pequenos dados: tendências, teoria, minha história
Houve muitos testes funcionais neste projeto, e dada a velocidade de desenvolvimento de funcionalidades e a necessidade de manter o ritmo do ciclo de lançamento (sprints de duas semanas), foi necessário pensar imediatamente em automatizar os testes dos componentes mais críticos do o sistema. A maior parte da plataforma baseada em Kubernetes foi coberta por autotestes implementados em Estrutura do robô + Python, mas também foi necessário apoiá-los e expandi-los. Além disso, para comodidade do cliente, foi criada uma GUI para gerenciar modelos de aprendizado de máquina implantados no cluster, bem como a capacidade de especificar onde e para onde os dados precisam ser transferidos para treinamento dos modelos. Essa extensa adição implicou uma expansão dos testes funcionais automatizados, que foram feitos principalmente por meio de chamadas de API REST e um pequeno número de testes de UI ponta a ponta. No equador de todo esse movimento, um testador manual se juntou a nós que fez um excelente trabalho com testes de aceitação de versões de produtos e comunicação com o cliente sobre a aceitação do próximo lançamento. Além disso, devido à chegada de um novo especialista, conseguimos documentar o nosso trabalho e adicionar várias verificações manuais muito importantes e difíceis de automatizar de imediato.

E, finalmente, depois de alcançarmos a estabilidade da plataforma e do complemento GUI sobre ela, começamos a construir pipelines ETL usando DAGs Apache Airflow. A verificação automatizada da qualidade dos dados foi realizada escrevendo DAGs Airflow especiais que verificaram os dados com base nos resultados do processo ETL. Como parte deste projeto, tivemos sorte e o cliente nos deu acesso a conjuntos de dados anônimos que testamos. Verificamos os dados linha por linha quanto à conformidade com os tipos, presença de dados quebrados, número total de registros antes e depois, comparação das transformações feitas pelo processo ETL para agregação, alteração de nomes de colunas e outras coisas. Além disso, essas verificações foram dimensionadas para diferentes fontes de dados, por exemplo, além do SalesForce, também para MySQL.

As verificações finais da qualidade dos dados foram realizadas já no nível S3, onde foram armazenados e prontos para uso no treinamento de modelos de aprendizado de máquina. Para obter os dados do arquivo CSV final localizado no Bucket S3 e validá-los, o código foi escrito usando clientes boto3.

Também havia a exigência do cliente de armazenar parte dos dados em um S3 Bucket e parte em outro. Isso também exigiu a elaboração de verificações adicionais para verificar a confiabilidade dessa classificação.

Experiência generalizada de outros projetos

Um exemplo da lista mais geral de atividades de um engenheiro de qualidade de dados:

  • Prepare dados de teste (válidos inválidos grandes pequenos) por meio de uma ferramenta automatizada.
  • Carregue o conjunto de dados preparado na fonte original e verifique se ele está pronto para uso.
  • Inicie processos ETL para processar um conjunto de dados do armazenamento de origem até o armazenamento final ou intermediário usando um determinado conjunto de configurações (se possível, defina parâmetros configuráveis ​​para a tarefa ETL).
  • Verifique a qualidade e a conformidade dos dados processados ​​pelo processo ETL com os requisitos de negócios.

Ao mesmo tempo, o foco principal das verificações não deve ser apenas o facto de o fluxo de dados no sistema ter, em princípio, funcionado e chegado à conclusão (o que faz parte dos testes funcionais), mas principalmente na verificação e validação de dados para atendimento aos requisitos esperados, identificação de anomalias e outros.

Ferramentas

Uma das técnicas para esse controle de dados pode ser a organização de verificações em cadeia em cada etapa do processamento dos dados, a chamada “cadeia de dados” na literatura - controle dos dados desde a fonte até o ponto de uso final. Esses tipos de verificações são geralmente implementados escrevendo consultas SQL de verificação. É claro que tais consultas devem ser tão leves quanto possível e verificar a qualidade dos dados individuais (metadados de tabelas, linhas em branco, NULLs, erros de sintaxe - outros atributos necessários para verificação).

No caso de testes de regressão, que usam conjuntos de dados prontos (inalteráveis, ligeiramente alteráveis), o código de autoteste pode armazenar modelos prontos para verificar a conformidade dos dados com a qualidade (descrições dos metadados esperados da tabela; objetos de amostra de linha que podem ser selecionado aleatoriamente durante o teste, etc.).

Além disso, durante o teste, você deve escrever processos de teste ETL usando estruturas como Apache Airflow, Apache Spark ou até mesmo uma ferramenta do tipo nuvem caixa preta Preparação de dados do GCP, Fluxo de dados do GCP E assim por diante. Esta circunstância obriga o engenheiro de teste a mergulhar nos princípios de operação das ferramentas acima e, de forma ainda mais eficaz, a realizar testes funcionais (por exemplo, processos ETL existentes em um projeto) e a usá-los para verificar dados. Em particular, o Apache Airflow possui operadores prontos para trabalhar com bancos de dados analíticos populares, por exemplo Google Cloud BigQuery. O exemplo mais básico de seu uso já foi descrito aqui, então não vou me repetir.

Além das soluções prontas, ninguém proíbe implementar suas próprias técnicas e ferramentas. Isto não será benéfico apenas para o projeto, mas também para o próprio Engenheiro de Qualidade de Dados, que irá assim melhorar os seus horizontes técnicos e competências de codificação.

Como funciona em um projeto real

Uma boa ilustração dos últimos parágrafos sobre a “cadeia de dados”, ETL e verificações onipresentes é o seguinte processo de um dos projetos reais:

Testador de grandes e pequenos dados: tendências, teoria, minha história

Aqui, vários dados (naturalmente, preparados por nós) entram no “funil” de entrada do nosso sistema: válidos, inválidos, mistos, etc., depois são filtrados e vão para um armazenamento intermediário, depois passam novamente por uma série de transformações e são colocados no armazenamento final, a partir do qual, por sua vez, serão realizadas análises, construção de data marts e busca de insights de negócios. Nesse sistema, sem verificar funcionalmente o funcionamento dos processos ETL, focamos na qualidade dos dados antes e depois das transformações, bem como na saída para análises.

Para resumir o acima exposto, independentemente dos locais onde trabalhei, em todos os lugares estive envolvido em projetos de Dados que partilhavam as seguintes características:

  • Somente por meio da automação é possível testar alguns casos e atingir um ciclo de release aceitável para o negócio.
  • Um testador nesse projeto é um dos membros mais respeitados da equipe, pois traz grandes benefícios para cada um dos participantes (aceleração dos testes, bons dados do Cientista de Dados, identificação de defeitos nos estágios iniciais).
  • Não importa se você trabalha em seu próprio hardware ou nas nuvens - todos os recursos são abstraídos em um cluster como Hortonworks, Cloudera, Mesos, Kubernetes, etc.
  • Os projetos são construídos em uma abordagem de microsserviços, predominando a computação distribuída e paralela.

Gostaria de ressaltar que ao fazer testes na área de Qualidade de Dados, um especialista em testes muda seu foco profissional para o código do produto e as ferramentas utilizadas.

Características distintivas dos testes de qualidade de dados

Além disso, identifiquei para mim as seguintes (farei imediatamente uma ressalva que são MUITO generalizadas e exclusivamente subjetivas) características distintivas de testes em projetos (sistemas) de Dados (Big Data) e outras áreas:

Testador de grandes e pequenos dados: tendências, teoria, minha história

Links úteis

  1. Teoria: DAMA-DMBOK: Conjunto de Conhecimento em Gerenciamento de Dados: 2ª Edição.
  2. Centro de treinamento EPAM 
  3. Materiais recomendados para um engenheiro iniciante de qualidade de dados:
    1. Curso gratuito sobre Stepik: Introdução aos bancos de dados
    2. Curso sobre LinkedIn Learning: Fundamentos da Ciência de Dados: Engenharia de Dados.
    3. Artigo:
    4. Vídeo:

Conclusão

Qualidade de dados é uma direção muito jovem e promissora, fazer parte da qual significa fazer parte de uma startup. Uma vez em Data Quality, você estará imerso em um grande número de tecnologias modernas e demandadas, mas o mais importante: enormes oportunidades se abrirão para você gerar e implementar suas ideias. Você poderá utilizar a abordagem de melhoria contínua não só no projeto, mas também em si mesmo, desenvolvendo-se continuamente como especialista.

Fonte: habr.com

Adicionar um comentário