Test-Driven Development (TDD)
TDD é uma técnica de programação muito utilizada em desenvolvimento de software, onde cada recurso do software é testado antes de sua implementação.
Unit Tests (UT) são trechos de código feitos com o objetivo de testar partes de um software. Os UT servem para garantir que cada trecho do software está funcionando de acordo com o objetivo esperado.
Normalmente adota-se a seguinte rotina:
Passo 1. escrita de um teste para um recurso do software;
Passo 2. execução e falha do teste, pois a funcionalidade testada ainda não foi implementada no sistema;
Passo 3. implementação da funcionalidade, da maneira mais simples possível, para fazer o teste passar;
Passo 4. depois que o teste passar, refatorar o código da funcionalidade, para ficar de acordo com o design/padrão adotado no projeto – e também elegante, afinal gostamos de códigos bonitos, correto?
Passo 5. retornar ao Passo 1 a cada novo recurso adicionado ao sistema.
Vantagens
Além de ajudar a garantir o funcionamento da aplicação, o uso de testes unitários colaboram com a adoção de algumas boas práticas do desenvolvimento de software, como:
- estruturação do código em funções e/ou métodos;
- métodos/funções com objetivos melhor definidos;
- práticas que facilitam na manutenção e interpretação;
- ganho de tempo nas etapas finais de projetos, uma vez que problemas (bugs) se tornam menos recorrentes;
Quando o TDD pode ajudar um Cientista de dados?
O dia a dia na ciência de dados pode ser bem diverso e não precisamos (e nem devemos), aplicar o TDD em todas as situações.
Análise exploratória de dados (Exploratory Data Analysis – EDA):
Normalmente realizadas quando queremos entender o comportamento dos dados, identificar padrões, levantar hipóteses, etc. Tudo a fim de nos guiar ao começar o desenvolvimento de um modelo de machine learning, por exemplo.
As EDAs não precisam de uma estrutura muito robusta para serem feitas, sendo viáveis através de jupyter notebooks (ou similares), e também em scripts. Usam conjuntos de dados menores ou uma amostra, quando o volume de dados é grande.
Como essa rotina é feita no início de um projeto ou apenas com o fim de conhecer melhor os dados, e o objetivo não é criar scripts e/ou um software que serão reusados, não é preciso, e nem vantajoso utilizar TDD.
Desenvolvimento de modelos de Inteligência Artificial
O desenvolvimento de modelos em ciência de dados é uma prática recorrente, e como um modelo nada mais é do que um software, podemos aplicar práticas e técnicas da área de desenvolvimento no dia a dia de cientistas. Para a aplicação do TDD vamos ponderar duas situações:
- Um modelo pode ser criado tendo como objetivo apoiar alguma decisão, responder perguntas ou sustentar um planejamento estratégico para o período futuro, não tendo a necessidade de integração com outro sistema ou, uso recorrente. Portanto, nesse caso, não aconselho a adoção de TDD, pois modelos desse tipo normalmente são feitos por uma pessoa, e não usam estruturas robustas de arquitetura, além de não precisarem de manutenção, por só serem usados uma vez.
- O modelo será colocado em produção, – isto é, acoplado a outros sistemas e com todas as suas rotinas automatizadas, situação bem similar com a de um software “tradicional”.
Nesse contexto, temos:
- disponibilização do software produzido para uso de outros sistemas e/ou plataformas;
- pipeline e rotinas robustas e frágeis, no sentido de não muito tolerável a falhas e erros inesperados;
- manutenção compartilhada ― projetos como esse são maiores e podem exigir mais de um par de mãos;
Esse caso é uma ótima oportunidade para aplicar o TDD, e levanto algumas razões para isso, como por exemplo: testar as etapas do pipeline, ter a certeza de que as funções estão realizando o que é preciso, e que isso se mantém após refatorações e mudanças no código, e verificar se todos os casos e condições satisfazem o esperado.
Te convido, então, a adotar práticas do desenvolvimento de software à rotina da ciência de dados e com isso ganhar muito mais qualidade do software produzido.