Pergunta

Nosso produto ganhou má reputação em termos de desempenho. Bem, é um aplicativo corporativo grande, 13 anos de idade, que precisa de um tratamento refresco e, especificamente, um impulso no seu desempenho.

Nós decidimos abordar o problema de desempenho estrategicamente nesta versão. Estamos avaliando algumas opções sobre como fazer isso.

Nós temos um experiente engenheiros de teste de carga equipados com as melhores ferramentas no mercado, mas normalmente eles ficam uma versão estável no final do ciclo de vida de desenvolvimento de versão, portanto, nos últimos versões desenvolvedores não têm tempo suficiente para corrigir todos suas descobertas. (Sim, eu sei que precisamos para entregar mais cedo um versões estáveis, estamos trabalhando sobre este processo, bem como, mas não é na minha área)

Uma das direções que eu estou empurrando é a criação de um ambiente de laboratório instalado com o nightly build para que os desenvolvedores podem testar o impacto do seu código de desempenho. Eu gostaria neste ambiente a ser constantemente carregado pelos scripts que simulam experiência real do usuário. Nesta ambiente carregado cada desenvolvedor terá que escrever um script específico que testa seu código (ou seja, a experiência do usuário individual em um ambiente do mundo real). Eu gostaria de gerar um relatório que mostra cada impacto iteração sobre os recursos existentes, bem como o desempenho dos novos recursos.

Estou um pouco preocupado que eu estou com o objetivo muito alto, e ele vai vir a tornar-se demasiado complicado.

O que você acha de tal idéia? Alguém tem uma experiência com a criação de um ambiente como esse? você pode compartilhar sua experiência?

Foi útil?

Solução

Parece uma boa idéia, mas com toda a honestidade, se sua organização não pode obter uma compilação para a equipe de teste de carga caro ele tem empregado apenas para esta finalidade, então ele nunca irá obter a sua ideia de trabalho.

Ir para os frutos mais baixos primeiro. Obter uma nightly build disponível para o desempenho do teste da equipe no início do processo.

Na verdade, se esta versão é toda sobre o desempenho, porque não têm a equipe apenas tomar esta versão para resolver todos os problemas de desempenho que vieram no final da iteração para a última versão.

EDIT: "Não os desenvolvedores têm a responsabilidade de código de teste de desempenho" foi um comentário. Sim, verdade. Eu, pessoalmente, gostaria que cada colaborador tem uma cópia do YourKit java profiler (é barato e eficaz) e saber como usá-lo. No entanto, infelizmente ajuste de desempenho é um muito, muito divertido atividade técnica e é possível gastar muito tempo fazendo isso quando você seria características melhor desenvolvimento.

Se a sua equipe de desenvolvedores são repetidamente desenvolvimento de código visivelmente lento, em seguida, a educação sobre o desempenho ou melhores programadores é a única resposta, não processo mais caro.

Outras dicas

Um dos maiores impulso na produtividade é um sistema de compilação automatizada que corre durante a noite (isso é chamado de Integração Contínua). Os erros cometidos ontem são capturados hoje no início da manhã, quando eu ainda sou novo e quando eu ainda pode lembrar o que fiz ontem (em vez de várias semanas / meses mais tarde).

Por isso, sugiro para que isso aconteça primeiro, porque é o próprio fundamento para qualquer outra coisa. Se você não pode construir de forma confiável seu produto, você vai achar que é muito difícil de estabilizar o processo de desenvolvimento.

Depois de ter feito isso, você terá todo o conhecimento necessário para criar testes de desempenho.

Um conselho embora: não tente conseguir tudo de uma vez. etapa um trabalho de cada vez, correção de um problema após o outro. Se alguém surge com "devemos fazer isso também", você deve fazer o mesmo triagem como você faz com qualquer outro pedido de recurso: Quão importante é isso? Como perigoso? Quanto tempo vai demorar para implementar? Quanto é que vamos ganhar?

Adiar tarefas difíceis, mas importantes até que tenha resolvido o básico.

Por noite compilações são a abordagem certa para testes de desempenho. Sugiro que requerem scripts que são executados automaticamente cada noite. Em seguida, gravar os resultados em um banco de dados e apresentar relatórios periódicos. Você realmente precisa de dois tipos de relatórios:

  • Um gráfico de cada vez sobre métrica. Isso ajudará você a ver as suas tendências
  • A comparação de cada métrica contra uma linha de base. Você precisa saber quando algo cai drasticamente em um dia ou quando cruza um limite de desempenho.

Algumas outras sugestões:

  • Certifique-se de suas máquinas variam de forma semelhante ao seu ambiente pretendido. Têm máquinas de gama baixa e alta na piscina.
  • Uma vez que você começar a medir, nunca mudam as máquinas. Você precisa comparar como a gostar. Você pode adicionar novas máquinas, mas você não pode modificar nenhum dos já existentes.

Nós construímos uma cama de teste pequeno, para fazer testes de sanidade - ou seja, fez o fogo aplicativo para cima e funciona como esperado quando os botões foram empurrados, fez o trabalho de validação etc. O nosso foi uma aplicação web e usamos Watir um kit de ferramentas de rubi base para dirigir o browser. A saída dessas corridas são criados como documentos XML, ea nossa ferramenta de CI (controle de cruzeiro) poderia saída os resultados, erros e desempenho como parte de cada log de compilação. A coisa toda funcionou bem, e poderia ter sido escalado para vários PCs para teste de carga adequada.

No entanto, nós fizemos tudo isso porque tivemos mais corpos do que as ferramentas. Há algumas grandes equipamentos de teste de estresse final que vai fazer tudo o que precisa. Eles custam, mas que será menor do que o tempo gasto para rolo de mão. Outro problema que teve foi ficando nossos Devs escrever testes Ruby / Watir, no final, que caiu para uma pessoa e o esforço de teste foi praticamente um gargalo por causa disso.

Por noite compilações são excelentes ambientes, laboratório são excelentes, mas você está em perigo de atrapalhação testes de desempenho com bug para cima testar eu acho.

garantam suas condições de laboratório são isolados e estável (ou seja, você variar apenas um fator de cada vez, se esse é o seu aplicativo ou uma atualização do Windows) e o hardware é o reflexo do seu alvo. Lembre-se que suas comparações de benchmark só será à prova de balas internamente para o laboratório.

Os scripts de teste escrito pelos desenvolvedores que escreveram o código tende a ser uma coisa tóxica que fazer. Não ajudá-lo a expulsar equívocos na aplicação (desde o mesmo mal-entendido será no script de teste), e não há motivação limitada para realmente encontrar problemas. Muito melhor é tomar uma abordagem TDD e escrever os testes primeiro como um grupo (ou um grupo separado), mas não que você ainda pode melhorar o processo de escrever os scripts de forma colaborativa. Esperamos que você tenha alguns usuários-histórias da sua fase de concepção, e isso pode ser possível reproduzir registos de experiência no mundo real (app variável).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top