Visão geral
Bem vindo ao Guia de Desenvolvedores da Próxima Geração de Sistemas de Teste. Este guia é uma coleção de artigos elaborados para lhe ajudar a desenvolver sistemas de teste que diminuem custos, aumentam desempenho de seus testes, e podem se adaptar às necessidades futuras. Esse artigo mostra estratégias para maximizar o desempenho de sistemas. Para fazer o download do guia de completo (120 páginas), visite ni.com/automatedtest.
Índice
- Como melhorar o Desempenho de Sistemas de Teste
- Estratégia 1: Escolha o barramento com maior desempenho para sua aplicação
- Estratégia 2: Selecione o Software que tira vantagem completa da tecnologia mais recente de processadores
- Estratégia 3: Utilize Sincronização de Hardware
- Estratégia 4: Desenvolvendo uma arquitetura de sistema que suporta testes paralelos e recursos compartilhados.
- Resumo: Maximizando o Desempenho em um Sistema de Testes Automatizado
- Produtos e Artigos importantes
Como melhorar o Desempenho de Sistemas de Teste
"Como posso maximizar o desempenho do meu sistema automatizado?” É uma questão comum feita por muitos engenheiros e cientistas. Por anos, engenheiros empregaram inúmeras estratégias para obter maior velocidade em seus sistemas, tanto em laboratório de Pesquisa e Desenvolvimento quanto no chão de fábrica. Estas técnicas de otimização incluem geralmente procedimentos de grande esforço, como por exemplo, reduzir o número de testes e adquirir instrumentos redundantes. Este artigo descreve quatro estratégias para melhorar o desempenho sem a necessidade de fazer tais sacrifícios. Estas estratégias incluem:
Estratégia 1: Escolha o barramento com maior desempenho para sua aplicação
Analisando de maneira superficial, pode parecer simples escolher um barramento para a sua aplicação baseando-se somente na largura de banda. A largura de banda teórica pode fornecer uma indicação do desempenho mas, infelizmente, não é tão simples quanto parece. Na realidade existem quatro fatores principais que afetam o desempenho do barramento de instrumentação - largura de banda, latência, implementação e aplicação. Como a maioria dos barramentos de testes industriais é baseada em barramentos para PCs, eles seguem a tendência de tecnologia para PC onde barramentos de sistema, como PCI e PCI Express, têm um desempenho melhor quando comparados com barramentos de comunicação como USB e LAN.

Figura 1. Largura de Banda vs Latência para os principais barramentos utilizados em testes e medições.
Diversas comparações de desempenho de barramentos têm foco somente na largura de banda do barramento e ignoram outros componentes de software e hardware que influenciam no desempenho real do barramento. A largura de banda é a taxa de dados. Isso é medido, normalmente, em milhões de bytes por segundo (MB/s). A Latência é o tempo de transferência. Geralmente medido em microssegundos (µs). Por exemplo, na transferência via Ethernet, grandes blocos de dados são divididos em pequenos segmentos e enviados em múltiplos pacotes. A Latência é o tempo necessário para transferir um desses pacotes. A Figura 1 compara a largura de banda teórica versus a latência para os principais barramentos utilizados em sistemas de testes e medições.
A implementação de um software, firmware e hardware de barramento, afetam o desempenho. Nem todos os instrumentos são criados igualmente. Um PC contendo um processador rápido e mais memória RAM tem melhor desempenho que outro com um processador mais lento e menos memória RAM. O mesmo vale para instrumentos. As escolhas entre as implementações feitas pelo desenvolvedor de instrumentos influenciam no desempenho, seja trabalhando com os VI´s desenvolvidos pelo usuário ou instrumentos tradicionais desenvolvidos pelo fabricante. Um dos principais benefícios da instrumentação virtual é que o usuário final, como o desenvolvedor do instrumento, decide a melhor implementação.
Finalmente o fator principal que afeta o desempenho é a aplicação ou como o instrumento é utilizado. O hardware e firmware de um instrumento, combinação CPU/RAM, aplicação de software e a velocidade de medição implicam no desempenho do barramento. A mudança de qualquer um desses componentes pode resultar em alterações no desempenho do barramento, assim como mudar de um barramento para outro afeta todo o desempenho do sistema. Em alguns casos, o sistema de medição é o gargalo da aplicação, em outros, o gargalo é o processador. Compreendendo qual é o gargalo do sistema, sabemos qual é o caminho para melhorar o seu desempenho. Assim sendo, o ponto principal para que um dado barramento seja de alto desempenho ou apenas utilizável, é que o mesmo precisa exceder as necessidades da aplicação.
Esses fatores influenciam se um instrumento exceder as necessidades do desempenho ou não. Utilize técnicas de benchmarking (teste de desempenho) para verificar o desempenho atual entre instrumentos. Para mais detalhes ou escolha do barramento de instrumentação, veja o artigo What Makes a Bus High Performance?.
Estratégia 2: Selecione o Software que tira vantagem completa da tecnologia mais recente de processadores
Processadores Multicore (múltiplos núcleos de processamento) são a última inovação em PCs industriais. Esses primeiros processadores multicore contêm dois cores, ou núcleos de processamento, localizados fisicamente em um único processador - daí o nome processadores dual-core. Processadores com mais de dois cores também estarão disponíveis em breve. Processadores Dual-Core podem executar simultaneamente duas tarefas computacionais. Isso é muito vantajoso em ambientes de multi-tarefas, como Windows XP, no qual você roda mais de uma aplicação. Duas aplicações – o LabVIEW da National Instruments e o Microsoft Excel, por exemplo – cada uma pode acessar diferentes núcleos ao mesmo tempo, aumentando o desempenho nas aplicações, por exemplo, de armazenamento de dados.
Outra importante vantagem no desempenho de processadores dual-core é adquirida em aplicação multithreading (execução simultânea de diferentes partes de uma mesma aplicação). Esta aplicação proporciona uma maior flexibilidade para separar individualmente cada tarefa. Um processador dual-core pode executar simultaneamente duas dessas tarefas. PCs dual core demonstram aumentos significativos no desempenho especialmente em aplicações multithread. Benchmarks do NI LabVIEW 8 mostram uma melhoria de até 25% entre aplicações com apenas uma tarefa usando uma controladora dual-core embarcada PXI-8105 e uma controladora embarcada PXI-8196 que contém apenas um núcleo de processamento (2.0 GHz Intel Pentium M processor 760), sendo que elas têm as mesmas taxas de clock (velocidade) do processador. Esta melhoria é resultado de inúmeros acessórios no processador entre duas gerações de arquitetura da Intel. Você pode ver o resultado na melhoria do desempenho pelo fato de a controladora PXI-8105 conter processador dual core nas aplicações de multitarefas, no qual mostra uma melhoria de até 100% comparando com a controladora PXI-8196.
Multithreading pode significar melhoria no desempenho em um sistema de teste. Durante o teste de uma unidade (unit under test-UUT) algumas ações são independentes de suas funcionalidades e recursos utilizados. Por exemplo, quando testando um dispositivo, você pode precisar utilizar vários equipamentos. A inicialização de diferentes equipamentos é totalmente independente. Assim, você pode separar as tarefas em múltiplos threads (partes de uma tarefa) para aumentar o desempenho. Para tirar total vantagem desse recurso, você precisa escolher um software que permite utilizar a tecnologia multitarefa desde o nível dos drivers e aplicações até o nível executivo de testes. Por exemplo, você precisa escolher um dispositivo que contenha drivers para software que trabalha com multithread. Por essa razão, todos os equipamentos da National Instruments contêm drivers para software com suporte para multithread.
Você também deve considerar o nível de habilidade necessário para utilizar estes processadores multicore. Por exemplo, linguagens de programação baseadas em texto incluem bibliotecas multitarefas para gerenciamento das tarefas. Entretanto, estas linguagens, onde os códigos geralmente executam de maneira seqüencial, podem tornar complicado a visualização de como as seções do código executam em paralelo. Como a sintaxe da linguagem deve ser seqüencial, o código executa basicamente linha por linha. E devido às tarefas dentro de um único programa compartilharem dados, a comunicação entre as tarefas para manipular os dados e recursos são tão críticos que você deve elaborar o código cuidadosamente para evitar erros durante a execução do programa em paralelo. Você deve escrever um código extra para gerenciar tarefas. Assim, o processo de conversão de uma aplicação de uma única tarefa para outra aplicação de várias tarefas pode consumir muito tempo e tende a conter erros.
Linguagens de programação baseadas em texto podem incorporar funções especiais para sincronização para compartilhamento de recursos como memória, por exemplo. Se você não fizer uma implementação de multithreading apropriada para aplicação, você pode se deparar com um comportamento não esperado. Conflitos podem ocorrer quando várias tarefas tentam acessar o mesmo recurso simultaneamente ou compartilham o mesmo espaço em memória. Ferramentas atuais, como depuradores preparados para aplicações multithread, são mais eficientes, mas, na maioria dos casos, para prevenir conflitos será necessário adaptar o seu código de maneira a adequá-lo a uma programação paralela.
Por outro lado, ferramentas de programação gráfica como o LabVIEW podem facilmente representar processos em paralelo além de serem inerentemente multithread. Por exemplo, dois loops independentes são executados automaticamente em threads separados.

Figura 2. O paralelismo natural da programação gráfica implementa multithreads em processadores diferentes.
Em computadores com processadores dual-core, os VI´s multithreads do LabVIEW podem aumentar o desempenho sem nenhuma intervenção do usuário. As múltiplas tarefas são preparadas para executar em núcleos diferentes sem instruções externas. Para mais detalhes, veja o artigo Using LabVIEW to Create Multithreaded Applications for Maximum Performance and Reliability
Estratégia 3: Utilize Sincronização de Hardware
Quase todo sistema automatizado necessita de um especialista para sincronizar dois ou mais instrumentos ou switches. Por exemplo, em uma aplicação de teste de célula combustível, um engenheiro pode programar um multímetro digital para procurar por centenas de células individuais usando um switch (chaveadores). Existem dois tipos de sincronização: baseada em software ou baseada em hardware. A sincronização baseada em software usa trigger (disparo) gerado através de uma chamada do software, e a sincronização baseada em hardware utiliza triggers gerados por sinais conectados às linhas de trigger do hardware. Com a sincronização baseada em software, existe uma significante dependência do software devido ao fato de os sistemas necessitarem de uma intervenção do programa para continuar com o trigger a cada leitura. O tempo dessas buscas é o fator principal do desempenho do software porque o programa compartilha recursos com todas as outras aplicações que necessitam do processador.
O desempenho do teste é maximizado através da implementação de sincronização baseada em hardware, o que elimina a dependência do processador. A sincronização no hardware utiliza triggers de ambos os instrumentos que estão tentando se comunicar. Tomando como exemplo o DMM/switch acima, ao invés de adicionar um atraso de tempo no software para permitir que o switch fique definindo o tempo, o instrumento e o switch interagem enviando sinais de triggers um para o outro quando a leitura estiver completa ou pronta. O instrumento envia um sinal de trigger quando a leitura estiver completa, e o switch envia um trigger uma vez quando estiver pronto para a próxima medição. Toda interação dos triggers é controlada pelo hardware, que minimiza o tempo de espera entre as medições e garante o melhor desempenho. A sincronização feita através do hardware entre o switch e o instrumento é completamente independente do ambiente do software, sendo assim não afetada por ele.

Figura 3. Esquema de Sincronização por hardware para um multímetro e um switch
Um exemplo de sincronização por hardware é mostrado na figura 3. Nesse exemplo, a PXI-4070 FlexDMM da National Instruments se comunica com a PXI-2530 (switch multiplexadora com grande quantidade de canais). Após o fechamento do primeiro canal, um triger avisa o DMM para fazer a próxima medição. Quando a DMM completa a medição, a placa faz indicação ao switch através do trigger para mudar para o próximo canal, e o ciclo se repete sem intervenção do software. Devido ao determinismo, a atividade adicional que o software faz (como processamento de dados extras) não afeta os resultados do teste, diferente do que acontece quando é utilizada a sincronização baseada em software.
A melhoria no tempo de execução do teste pode ser visto na Tabela 1. Esses são resultados de benchmarking de 1,000 DMM utilizando um switch PXI-2501 FET e uma FlexDMM PXI-4070. A utilização da sincronização por hardware melhora no resultado em 46%. Note também que no caso, a utilização da sincronização é flexível para processamento de tarefas extra software, no qual rigorosamente diminui a execução de utilização do software.
|
Standard Run
|
With Extra Processing
|
% Change
|
|
|
Software Scanning
|
3021 ms
|
3840 ms
|
27
|
|
Hardware Handshaking
|
1640 ms
|
1655 ms
|
0.9
|
|
% Throughput Increase
Using Hardware Handshaking |
46
|
57
|
Tabela 1. Comparação de tempo de execução para 1,000 de DMM com Switch
O determinismo e desempenho de um sistema é maximizado com a sincronização por hardware. Além disso, se uma instrumentação PXI é utilizada, então todos os sinais de trigger são passados através da sincronização PXI, eliminando a necessidade de fiação externa e simplificando a inicialização do processo. Para mais detalhes, veja o artigo Optimize Manufacturing Test Throughput Using Measurement Hardware Synchronization.
Estratégia 4: Desenvolvendo uma arquitetura de sistema que suporta testes paralelos e recursos compartilhados.
Você pode ter explorado algumas maneiras de incrementar seus sistemas de testes através de testes paralelos. No entanto, as últimas ferramentas de gerenciamento de teste disponíveis no mercado facilitam a implementação de sistemas de teste em paralelo. Essas ferramentas aumentam a eficiência no resultado dos testes e reduzem os custos do sistema. Em geral, os testes em paralelo envolvem testes de múltiplos produtos ou subcomponentes simultaneamente. Uma estação de teste em paralelo geralmente compartilha uma etapa do teste do equipamento entre várias outras fases, mas, em alguns casos, isso pode ter uma etapa separada para cada UUT. A maioria dos sistemas de testes não paralelos testam apenas um produto ou subcomponente por vez, deixando equipamentos de teste de alto custo sem utilização durante mais de 50% do tempo. Assim, com testes em paralelo, você pode aumentar o desempenho de sistemas de teste de produção sem a necessidade de aplicar muito dinheiro para duplicar e distribuir sistemas de teste. As seções seguintes discutem maneiras de como os testes em paralelo podem reduzir os custos e descreve várias abordagens de como implementar testes em paralelo para seus sistemas.
Escolhendo uma Arquitetura para Teste Paralelo
Você pode implementar testes em paralelo na maioria dos sistemas existentes, porém arquiteturas de sistemas de teste modular produzem os melhores resultados quando utilizados em um ambiente de teste em paralelo. Ferramentas de software para gerenciamento de teste, como o NI TestStand, e componentes modulares como hardware PXI oferecem inúmeras características para obtenção do melhor desempenho fora de um sistema de teste em paralelo. No entanto, você pode implementar testes em paralelo aproveitando o máximo de seu hardware sem necessidade de mais investimentos no futuro. Uma vez que você escolheu sua arquitetura de teste, o próximo passo é escolher o modelo de processo (process model) mais adequado baseando-se no comportamento de seu teste UUT.
Módulos de Processo Paralelo
Quando estiver testando a completa montagem ou funcionalidade da UUT, existem inúmeras tarefas que influem no desempenho em qualquer sistema de teste. Essas tarefas incluem uma mistura de modelos ou uma específica família de teste como também muitos procedimentos que não trabalham diretamente testando a UUT. O modelo de processo separa as tarefas de nível do sistema desde os testes específicos da UUT até significantes reduções de esforços durante o desenvolvimento e aumenta a reutilização do código. Algumas das tarefas que um modelo de processo opera rastreiam a identificação do número da UUT, inicializando instrumentos, iniciando testes de execução, coletando resultados de teste, gerando relatórios e armazenando os dados em um banco de dados. O TestStand da National Instruments fornece dois modelos, o processo paralelo e o processo de “batelada”, que facilitam de maneira geral o fluxo de testes paralelos baseados nos requisitos de sua UUT.
Você pode utilizar um modelo de processo paralelo para testar independentemente múltiplos terminais de teste. Com esse modelo, você pode começar e parar o teste em qualquer UUT a qualquer momento. Por exemplo, você pode ter cinco terminais de teste para fazer análises em placas de rádios. Utilizando o modelo de processo paralelo, você pode inserir uma nova placa em um terminal de teste aberto enquanto os outros terminais testam as placas restantes. A Figura 4 mostra como o processo paralelo é executado

Figura 4. Modelo do fluxo de um processo paralelo
Como alternativa, você pode utilizar um modelo de processo de batelada para controlar um conjunto de terminais de teste de múltiplas UUTs. Por exemplo, você pode ter um conjunto de placas em uma mesma esteira. O modelo batelada assegura que você pode iniciar e finalizar o teste de todas as placas ao mesmo tempo. O modelo batelada também fornece recursos de sincronização. Por exemplo, você pode especificar que o passo pode executar uma vez por batelada se um determinado passo aceita a batelada como um todo. Com o modelo de processo batelada, você também pode especificar que certo passo ou grupo de passos não pode executar em mais de uma UUT em um momento ou certos passos devem executar em todas UUTs simultaneamente.
Compartilhando Instrumentos
Se você está tentando aumentar o desempenho do seu sistema de teste e ao mesmo tempo diminuir o custo, fornecer um conjunto de instrumentos a cada terminal de teste não será uma solução viável. Geralmente não é necessário nenhum hardware adicional para implementação de sistema de teste paralelo. Com testes em paralelo, você pode compartilhar instrumentação existente em seu sistema entre inúmeros terminais de teste. A redução do tempo de espera durante um ciclo de teste UUT fornece uma melhoria substancial no desempenho sem custos adicionais com hardware. Em muitos casos, você pode adicionar outro instrumentos de baixo custo para otimizar todo o desempenho do sistema enquanto compartilha o hardware mais caro com os terminais de teste.
Antes da existência de programas de gerenciamento de teste, a programação para gerenciar instrumentos compartilhados em diversos terminais de teste com execução paralela necessitava de uma grande quantidade de códigos de baixo nível para sincronização das tarefas de teste. Seções críticas e exclusões múltiplas geralmente estão entrelaçadas com o código atual, tornando isso complicado para o programa ou tarefas reutilizadas em sistema de teste futuros.
Implementando sistemas de teste que influenciam diversas característica internas do TestStand, podemos controlar o compartilhamento e sincronização dos instrumentos facilmente. Você pode criar passos de sincronização e configuração das propriedades do teste a um nível de teste individual para gerenciar os recursos compartilhados entre testes em uma seqüência. Os tipos de passos de sincronização usados em seqüências de teste geralmente incluem os tipos de passos lock, rendezvous, queue, notification, wait e batch synchronization. A figura 5 mostra como você pode usar um passo lock enquanto continua testando UUTs.

Figura 5. Este exemplo de seqüência de teste usa uma combinação de lock para prevenir que inúmeros testes tentem acessar o mesmo instrumento simultaneamente.
Para mais informações, veja o artigo Benefits of Parallel Testing.
Resumo: Maximizando o Desempenho em um Sistema de Testes Automatizado
No desenvolvimento de um sistema onde o desempenho é fundamental, você deve escolher o barramento com maior taxa de transmissão, usar sincronização de hardware, e desenvolver uma arquitetura que suporte teste paralelo e compartilhamento de recursos. O principal objetivo dessas quatro estratégias é escolher uma plataforma de hardware e software que tire o máximo de vantagens das últimas tecnologias em PC, como PCI e LabVIEW.
Produtos e Artigos importantes
A National Instruments, líder em teste automatizado, tem o compromisso de oferecer ferramentas de hardware e software essenciais para que engenheiros sejam capazes de desenvolver sistemas de teste de última geração.
Software:
Hardware:
Legal
This tutorial (this "tutorial") was developed by National Instruments ("NI"). Although technical support of this tutorial may be made available by National Instruments, the content in this tutorial may not be completely tested and verified, and NI does not guarantee its quality in any way or that NI will continue to support this content with each new revision of related products and drivers. THIS TUTORIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND AND SUBJECT TO CERTAIN RESTRICTIONS AS MORE SPECIFICALLY SET FORTH IN NI.COM'S TERMS OF USE (http://ni.com/legal/termsofuse/unitedstates/us/).
