Análise de dados agile

Analisando dados em um mundo ágil

Neste artigo, eu descrevo técnicas e conjuntos de ferramentas que podem permitir que testadores e outros consumidores de dados de medição interpretem resultados de forma adaptável, o que deve tornar a análise de dados mais atraente.

Scott Snyder, Senior Performance Architect, IBM

Scott trabalha há 15 anos para melhorar o desempenho de tecnologias no lado do servidor. Usando várias técnicas de teste de carga e análise, ele conseguiu descobrir as causas-raiz de vários problemas de desempenho e escalabilidade.



28/Fev/2014

O propósito do teste é identificar problemas e defeitos em um produto. Alguns testes apenas determinam aprovação/reprovação, mas muitos exigem análise significativa de dados de medição para aprender algo sobre o sistema sendo testado. O desenvolvimento de software agile possibilita um conjunto de recursos mutável e dinâmico para avaliar recursos rapidamente. Os métodos atuais de análise de dados dependem principalmente de scripts estáticos escritos em linguagens de programação compiladas ou interpretadas (Perl, Python, etc). O uso de linguagens dinâmicas pode facilitar muito o processo de análise devido ao rápido ciclo de desenvolvimento, mas é possível que as pessoas que trabalham mais de perto com os testes não tenham acesso ao código-fonte do software de análise nem a aptidão para fazer as mudanças necessárias.

Análise estática em um mundo agile

Equipes de teste realizam testes em software durante o desenvolvimento para identificar problemas. Em um processo em cascata tradicional, os requisitos funcionais são conhecidos de antemão e implementados em um planejamento. Com o desenvolvimento agile, as funções de um aplicativo podem mudar ao longo do tempo de acordo com as mudanças nos requisitos do cliente. Para atender a esses novos requisitos dinâmicos de teste, houve uma explosão de novas metodologias de teste. Metodologias de desenvolvimento conduzido por comportamento e teste foram desenvolvidas para apoiar esses ciclos curtos de desenvolvimento, com novas ferramentas de configuração de ambiente dinâmico e declarativo, como Puppet e Chef, sendo usadas para implementar e configurar rapidamente ambientes de implementação.

Mas e quanto à investigação de requisitos não funcionais? Os testes de função aprovam ou desaprovam: ou a função específica está implementada corretamente, ou não está.

Muitos requisitos possuem natureza não funcional, e sucesso ou fracasso não pode ser reduzido à aprovação de um requisito funcional específico. Testes de carga e tensão, teste de desempenho e determinação de capacidade são exemplos de testes que não são binários, mas exigem uma investigação e análise ativas para determinar se um aplicativo atende ao requisito não funcional.

Os métodos atuais de análise de dados dependem principalmente de scripts estáticos escritos em linguagens de programação compiladas ou interpretadas (Perl, Python, Ruby, etc). Para análises que são executadas muitas vezes em um sistema majoritariamente estático ou com código base que muda lentamente, podemos justificar um investimento no desenvolvimento de conjunto de ferramentas e software de análise, pois essas ferramentas serão úteis por um longo período e podem ajudar a identificar a causa raiz de problemas de desempenho ou estabilidade, por exemplo. No entanto, para um código base cujo conteúdo e capacidade mudam rapidamente, o tempo gasto no desenvolvimento de conjunto de ferramentas customizado será em grande parte desperdiçado, pois a equipe de teste está perseguindo um alvo móvel.

O uso de linguagens dinâmicas pode facilitar muito o processo de análise devido ao rápido ciclo de desenvolvimento, mas é possível que as pessoas que trabalham mais de perto com os testes não tenham acesso ao código-fonte do software de análise nem a aptidão para fazer as mudanças inevitáveis, necessárias quando o aplicativo mudar.

Neste artigo, eu descrevo técnicas e conjuntos de ferramentas de análise de dados agile que podem permitir que testadores e outros consumidores de dados de medição interpretem resultados de uma maneira adaptável. Essas ferramentas e técnicas tornam a análise de dados mais interativa e minimizam a necessidade de reescrever scripts continuamente.


Por que análise de dados agile?

Com testes não funcionais, é preciso entender mais detalhadamente o sistema que está sendo medido, pois o sucesso ou falha é resultado de cumprir critérios especificados por uma característica operacional do sistema. Resposta lenta, ajuste de escala não linear em um cluster, consumo excessivo de memória (coleta de lixo) ou tráfego de rede excessivo são exemplos de comportamentos indesejáveis que podem ser descobertos em um sistema em operação. Para entender a origem desses indicadores, é necessário entender bem como o sistema funciona.

Realizamos análise de dados para extrair informações de várias fontes de dados disponíveis em um sistema em operação, para poder descobrir as origens desses comportamentos indesejáveis. Para um produto estabelecido com um conjunto fixo de requisitos, é possível criar ferramentas de análise que correlacionam as várias fontes de dados, de modo que seja possível monitorar o funcionamento do sistema. Mas, durante o desenvolvimento agile, o programa ou sistema que está sendo desenvolvido pode mudar drasticamente entre versões, à medida que o código base responde a mudanças nos requisitos funcionais ou na interface com o usuário. O conjunto de ferramentas para interpretar todas as fontes de dados também precisa ser agile.

Citando a Wikipédia,
"Um sistema com alta capacidade de composição fornece componentes recombinantes que podem ser selecionados e montados em várias combinações de acordo com requisitos específicos do usuário"

Mas o que significa dizer que um conjunto de ferramentas é agile? O exemplo clássico de ferramenta agile são as ferramentas e utilitários incluídos com o UNIX/Linux. Cada utilitário realiza uma tarefa bem definida, e essas tarefas podem ser encadeadas, na linha de comando ou em um shell script, para realizar inúmeras tarefas que seriam impossíveis de duplicar se cada uma exigisse um aplicativo dedicado. O usuário desses utilitários não precisa entender como cada um funciona. Precisa apenas entender como combinar sua funcionalidade para solucionar um programa em particular. Portanto, o primeiro requisito para análise de dados agile é capacidade de composição.


Formatos de dados agile

Exemplos de capacidade de composição incluem utilitários do UNIX, que passam arquivos de texto entre ferramentas. A ferramenta PowerShell da Microsoft também tem capacidade de composição, mas passa instâncias de objetos PowerShell que o sistema operacional conhece. Mas que tipo de formato de dados deve ser passado entre componentes em um sistema de análise de dados agile?

Dados obtidos de um sistema em execução podem ter origem em diversos locais e estar em diversos formatos. Alguns exemplos:

  • Arquivos de log não estruturados
  • Arquivos de log estruturados
  • Dados de ambiente do sistema
    • Porcentagem da CPU que está ocupada
    • Memória consumida
    • E/S de disco
  • Dados medidos
    • Planilhas
    • Relatórios em HTML

Esses exemplos são fontes de dados que precisam ser analisadas e interpretadas para fazer qualquer tipo de análise de dados. O desafio é reduzir todos esses dados, que estão em diversos formatos, a uma forma em que seja possível realizar comparações entre os vários tipos de dados.

Como exemplo, suponha que um teste de carga esteja sendo realizado em um servidor usando uma ferramenta que simula vários usuários de navegador. Várias ferramentas comerciais e de software livre podem realizar essa medição de carga. A ferramenta dá o tempo de resposta de cada solicitação, e você deseja saber quando o tempo de resposta do servidor excede o limite especificado. O tempo de resposta pode aumentar devido a muitos motivos: o número de usuários simultâneos, consumo excessivo de memória (o que pode atrasar a coleta de lixo), saturação da rede, etc.

Para determinar a origem do atraso na resposta, examine dados de todas as formas definidas acima: do sistema operacional, do servidor sendo testado e da ferramenta de carga.

Já houve tentativas de normatizar os formatos de dados, como XML ou JSON (principalmente para dados consumidos pelo navegador). Um formato como XML, que é relativamente fácil de analisar, é tão estruturado que pode ser necessário muito trabalho para converter os dados no arquivo para um formato que possa ser interpretado por outra ferramenta ou comparado com conteúdo que não esteja em XML. O formato de dados mais simples, com suporte quase universal, é a tabela retangular. Cada linha contém uma coleção de atributos associados a uma instância única de dados. Por exemplo, para a medição de carga, cada linha na tabela pode representar os dados relevantes disponíveis em um momento em particular durante o teste. É possível exportar dados tabulares diretamente para planilhas e bancos de dados através de formatos de disco, como comma separated value (CSV).


Analistas ou programadores?

À medida que aplicativos ficam maiores e mais complexos, testes automatizados tornam-se uma necessidade. Mesmo os especialistas em automatização de cenários complexos para fins de determinar a qualidade e a robustez de um sistema de software específico podem não entender o funcionamento interno do software que estão testando. Esse teste de caixa preta não exige programação, exceto, talvez, para a definição do cenário de teste.

Testes não funcionais também podem ser conduzidos em um conjunto de testes automatizados, mas os resultados não podem ser tratados como uma caixa preta. Para que nossa análise de dados seja agile, interpretar os resultados de uma medição automatizada não funcional exigiria programação mínima ou nenhuma, apenas uma ferramenta para combinar e correlacionar as várias fontes de dados.

Analítica de dados é um conjunto de aptidões diferente de programação e exige entender melhor a arquitetura do programa e as informações de diagnóstico disponibilizadas pelos vários componentes do programa e seu ambiente de implementação. Dependendo do volume de dados adquiridos e da sua complexidade, podem ser necessárias técnicas de mineração de dados e análise estatística para interpretar os dados, para determinar a origem do defeito não funcional.

Para acomodar a possibilidade de que os testadores e analistas que interpretam uma medição automatizada de um aplicativo de software em evolução não tenham aptidões de programação, nossa análise de dados agile deve exigir o mínimo de programação para ser útil.


Resumo de requisitos para análise de dados agile

Em resumo, para realizar análise de dados flexível para um projeto de software agile, o conjunto de ferramentas deve atender a estes três critérios principais:

  • A funcionalidade deve ter capacidade de composição, usando componentes funcionais existentes
  • Troca de dados entre componentes deve aparecer para o usuário como uma tabela
  • A composição dos componentes deve ser feita com o mínimo de programação.

Conjuntos de ferramentas de análise existentes, como mineração de dados e conjuntos de ferramentas de analítica de negócios, atendem a esses requisitos. Esses conjuntos de ferramentas fornecem recursos de mineração e análise de dados para pessoas que não são programadores.

Confira o IBM SPSS Modeler

IBM SPSS Modeler é um ambiente de trabalho de mineração de dados que ajuda a criar modelos preditivos de forma rápida e intuitiva, sem programação. Use-o para mergulhar fundo nos dados e obter respostas esclarecedoras e rentáveis. Use estes demos e vídeos para saber mais.

IBM SPSS Modeler possui recursos muito sofisticados de modelagem estatística para analisar conjuntos de dados grandes e complexos. Embora seja capaz de realizar análise de dados para teste de aplicativo de software, é provavelmente mais útil para conjuntos de dados muito grandes, com requisitos complexos de análise estatística.

Produtos de software livre que podem ser usados para tarefas de análise mais modesta provavelmente aplicam-se melhor ao tipo de análise de dados agile que descrevo aqui. Uma das mais populares ferramentas de software livre disponível chama-se KNIME (consulte o link em Recursos).

KNIME (the Konstanz Information Miner)

De acordo com o website do KNIME,
"KNIME [naim] é um ambiente de trabalho gráfico fácil de usar para todo o processo de análise: acesso de dados, transformação de dados, investigação inicial, analítica preditiva eficiente, visualização e relatórios. A plataforma de integração aberta oferece mais de 1.000 módulos (nós), incluindo aqueles da comunidade KNIME e sua extensa rede de parceiros."

KNIME é uma estrutura baseada em Eclipse que foi desenvolvida inicialmente em 2006 para realizar análise de dados para o segmento de mercado farmacêutico. Desde então, tornou-se uma plataforma geral de analítica de dados, relatórios e integração. É a base ideal para uma plataforma de análise de dados para investigar os recursos não funcionais de software desenvolvido usando metodologia agile. Atende aos requisitos especificados acima através do uso de fluxos de trabalho que são exibidos graficamente, como um conjunto de nós ligados por setas que indicam a direção dos fluxos de dados.

Ao ligar esses nós, é possível implementar uma tarefa de análise de dados com pouca ou nenhuma programação. Toda a lógica de análise reside nos nós, que são usados para consumir fontes externas de dados (através dos nós "leitores"); transformar os dados internalizados; ou combiná-los com outros recursos de dados. Em cada nó, o estado atual dos dados manipulados pode ser examinado em uma visualização semelhante à planilha, para poder verificar se os dados foram transformados corretamente para uma certa tarefa de análise em particular.

Figura 1. Desktop KNIME de amostra

Conclusão

No próximo artigo nesta série, mostrarei como criar um fluxo de trabalho simples, como importar dados no fluxo de trabalho e como executar lógica que é realizada geralmente na análise de dados baseados em tempo.

Recursos

Aprender

Obter produtos e tecnologias

  • Faça download do software KNIME a partir do site KNIME principal.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=964367
ArticleTitle=Análise de dados agile
publish-date=02282014