quarta-feira, 14 de abril de 2010

O que é um Arquiteto de Teste de Software

Update: não deixe de ler o post Como aprender a programar para teste de software que é um dos pontos que um Arquiteto de Teste deve conhecer.


Bom pessoal, faz tempo que eu estava querendo escrever este post. Acho ainda que ele está muito resumido, mas é bom compartilhar com vocês a minha visão desse profissional que está aparecendo timidamente no mercado de Teste de Software.

Se você tem qualquer coisa para complementar, por favor faça! Faço questão de atualizar o post e referenciar cada complemento.
Então, vamos lá!


O que é um Arquiteto de Teste de Software
Para ser um Arquiteto de Teste obviamente é mandatório ter sido um Testador. Para ocupar uma posição como esta o profissional de teste precisa ter um perfil sênior, conhecendo muitas linhas dentro do Teste de Software. Geralmente um Arquiteto de Teste tem que estar apto a executar quase que qualquer tarefa dentro do Teste de Software. Ele deve ser o líder técnico das soluções em teste e pode possuir uma linha de especialização específica dentro do Teste de Software: Automação, Performance, Segurança, etc..
Um Arquiteto deve trazer a inovação para a Área de Teste, sempre ligado nas tendências, tecnologias e abordagens dentro da área, internalizando todo esse conhecimento e analisando a aplicabilidade dentro da organização. Ele deve conhecer não somente da disciplina de Teste de Software dentro da Engenharia de Software, mas de outras disciplinas.

Eu, particularmente, acredito que a possível comparação de Engenheiro de Teste e Arquiteto de Teste é quase a mesma, mas com uma pequena diferença que pode ser entendida pela comparação abaixo:
"Um Arquiteto na Engenharia Civil é aquela capaz de criar toda uma estrutura/solução a partir de uma desejo do seu cliente. O Engenheiro, por sua vez, é aquele que irá colocar o plano de Arquiteto em prática, acompanhando todo o trabalho dos operários na obra."

Qual o dia-a-dia de um Arquiteto de Teste?
As atividades mais comuns são a de criação de ambientes de teste (hardware e software), criação de Casos de Teste mais complexos, aplicação das Técnicas de Teste corretas em todos os Casos de Teste.
Dentro da Automação de Teste, ele vai entender um problema de um cliente e criar uma solução de automação, utilizando alguma ferramenta existente no mercado ou até mesmo. Apóia e ensina a equipe a crescer tecnicamente na área e ajuda a melhorar todos os processos existentes na área de Teste de Software.

Quais os conhecimentos necessários para um Arquiteto de Teste?
Abaixo seguem alguns dos conhecimentos necessários do Arquiteto de Teste com um foco técnico voltado para a Automação de Teste:
  • Linguagem de programação (se puder mais que uma)
  • Sistemas Operacionais
  • Conhecimentos avançados sobre Técnicas de Teste
  • Ferramentas de Automação de Teste (em todos os níveis de teste)
  • Linguagem SQL intermediária
  • Arquitetura de Software e Design Patterns
  • Configuração de Ambientes
  • Execução de Testes Funcionais e Não Funcionais
  • Habilidade de Comunicação com pessoas técnicas

Podemos dar duas razões para que o Arquiteto precise conhecer uma linguagem de programação:
  • As ferramentas de automação de teste funcional será ou em uma linguagem padrão de mercado (VBScript ou Java) ou uma linguagem própria, o que necessita de conhecimento de programação
  • Quando não existe uma ferramenta de automação para determinada tarefa, o Arquiteto precisa criar uma, e isso é feito através de uma linguagem de programação
O conhecimento de Sistemas Operacionais é importante, pois além de utiliza-os para efetuar os testes também pode ser necessária a criação de máquinas virtuais para montar o ambiente de teste e, conseqüentemente conhecer sobre como configurar estes ambientes (no caso aqui, de hardware e software).
Conhecer a fundo as técnicas de teste também é obrigatório. Um Arquiteto que não conheça uma determinada técnica de teste pode não fazer o trabalho da melhor forma possível. Também é extremamente necessário que o arquiteto conheça as técnicas para a automação de teste funcional (data drive, keyword driven, decomposição funcional, baseado em modelos, etc...)

Saber como trabalhar com a linguagem SQL as vezes é básico para um testador, que precisa aplicar certas queries no banco para garantir que os resultados passados para o sistema estão contidos lá e estão íntegros. O conhecimento do Arquiteto deve ir mais além: ele deve ser capaz de conhecer mais a fundo o SQL e também aspectos específicos do SGDB utilizado (Oracle, MySQL, PostgreSQL, DB2, etc...)
Saber criar e executar testes não funcionais também é desejável, pois podemos nos deparar com alguma situação em que tenhamos que medir o tempo de resposta de uma aplicação, ou mesmo efetuar um teste de portabilidade ou recuperação da aplicação.

E falar 'grego' como o pessoal do desenvolvimento fala também é importante. Imaginem que tu vai conversar com um desenvolvedor ou Arquiteto Java e ele diz: "o problema ocorreu na ESB, onde um parâmetro da Inversão de Controle no Spring não foi colocado corretamente, o que fez o a camada DAO gerar uma NullPointerExepction dentro do Bean."

E é claro que o Arquiteto precisa conhecer de Ferramentas de Teste em todos os níveis: unitário, integração, sistema e aceitação. Conhecer uma Ferramenta de Automação de Teste Funcional é obrigatório, e também é muito desejável que ele conheça as diversas ferramentas para cada parte do Processo de Teste. Por exemplo: como fazer um teste de integração para validar e o pagamento por cartão de crédito está OK? E se eu disser que a aplicação se comunica com um WebServices para isso? O Arquiteto tem que ser capaz ou de criar ou de ajudar na criação de um driver para essa comunicação e depois efetuar o teste de integração com o WebService com o SoapUI, por exemplo.


Algumas empresas que tem um cargo definido para Arquiteto/Engenheiro de Teste:
Google Testing Engineer: http://www.google.com/intl/en/jobs/uslocations/mountain-view/swe/test-engineer-mountain-view/index.html

ThoughtWorks Test Architect: http://www.thoughtworker.com/jobs/test-architect

Microsoft Testing Engineer: https://careers.microsoft.com/Search.aspx#&&p4=all&p0=&p5=all&p1=20&p2=all&p3=all

Não deixem de colocar os seus comentários e visões sobre esse perfil...
Abraços!

3 comentários:

  1. Ele deve ser o líder técnico das soluções em teste e pode possuir uma linha de especialização específica dentro do Teste de Software: Automação, Performance, Segurança, etc..

    Na minha visão, o Arquiteto de Testes deve ter um perfil mais generalista nesse ponto, deve estar apto a preparar um ambiente qualquer que este seja. Por causa disso deve, essencialmente, ter conhecimentos em banco de dados, algumas rotinas de programação para setar algumas variáveis do ambiente, etc.

    Qual o dia-a-dia de um Arquiteto de Teste?
    As atividades mais comuns são a de criação de ambientes de teste (hardware e software), criação de Casos de Teste mais complexos, aplicação das Técnicas de Teste corretas em todos os Casos de Teste.

    Na minha visão, a aplicação das Técnicas de Testes corretas em todos os casos de teste deve ser tarefa do Analista de Testes, e não do Arquiteto. Até concordo que este possa eventualmente criar os casos de teste mais complexos, mesmo porque este deve ter atividades no decorrer de todo o projeto de testes, e não só na fase de implantação (preparação do ambiente & afins).

    No mais, a descrição está perfeita. Ótimo post!

    ResponderExcluir
  2. Excelente post Elias!

    A visão que tenho é bem próxima da sua. As empresas é que têm se confundido um pouco sobre o que buscam nesse profissional.

    Acho que faltou apenas um item que tenho vivido na prática: o Arquiteto precisa também exercer uma liderança. Vestir a camisa de líder, ou botar no braço a faixa de capitão para que consiga trazer a equipe pra sua peregrinação.

    Abraço.

    ResponderExcluir
  3. No decorrer ou no planejamento, quando existe uma equipe bem equilibrada...as posições das "peças" deve ser bem definidas:
    Líder Tester - Coordenador de testes;
    Analista Tester - Analisa requisitos e especifica;
    Tester - Executor;
    Automatizador - Responsável pela automatização de testes;
    Arquiteto de testes - Especialista na preparação, atualização e manutenção dos ambientes para execução dos testes

    ResponderExcluir