escola superior aberta do brasil – esab pós
Transcrição
escola superior aberta do brasil – esab pós
ESCOLA SUPERIOR ABERTA DO BRASIL – ESAB PÓS-GRADUAÇÃO EM ENGENHARIA DE SISTEMAS PERON REZENDE DE SOUSA AUTOMAÇÃO DE TESTES EM SOFTWARES E SITES WEB VILA VELHA – ES 2008 PERON REZENDE DE SOUSA AUTOMAÇÃO DE TESTES EM SOFTWARES E SITES WEB Monografia apresentada à ESAB – Escola Superior Aberta do Brasil, sob orientação do Dr. Jaime Roy Doxsey e da Me. Beatriz Christo Gobbi. VILA VELHA – ES 2008 PERON REZENDE DE SOUSA AUTOMAÇÃO DE TESTES EM SOFTWARES E SITES WEB Aprovada em ....... de .................. de 2008 VILA VELHA – ES 2008 Dedico este trabalho à DEUS por me proteger em todos os meus caminhos; À minha adorável esposa por sua paciência, compreensão e amor; À minha mãe por me orientar e motivar desde a infância; E à minha tia por ter possibilitado, há 16 anos atrás, o inicio dos meus estudos na área da informática. AGRADECIMENTOS À minha esposa, pela revisão ortográfica e gramatical deste trabalho. Aos meus orientadores, Dr. Jaime Roy Doxsey e Me. Beatriz Christo Gobbi; aos colaboradores Bruno Otero, Alvaro Mendes, Cláudio Carvalho e Mario Calleri, da REDEA/RJ, e a Helio Leão, da RSI Informática. “Somos o que repetidamente fazemos. A excelência, portanto, não é um feito, mas um hábito.” (Aristóteles) RESUMO Este trabalho faz uma breve apresentação da disciplina de testes, citando os tipos, comentando o processo e o vinculo de testes com a qualidade, passando por questões relacionadas ao ambiente, controle de versionamento e diversas questões envolvendo o equilíbrio entre custos, prazos e qualidade, chegando a um roteiro para aquisição de ferramentas destinadas a automação, que evita equívocos gerados pela grande variedade de contratos de venda. Também apresenta os tipos e técnicas de automatização e uma grande variedade de ferramentas comerciais, livres e orientação sobre a construção de uma ferramenta própria. Evidencia a importância das ferramentas para geração automática de casos, massa e para os testes de stress. Conclui que, para obter a máxima eficiência no processo é necessário combinar as técnicas de automação; em alguns casos pode ser preferível o teste manual; e que os custos do processo automatizado podem estar concentrados em fatores diversos, como a montagem e manutenção de um ambiente, e não nas ferramentas. LISTA DE FIGURAS Figura 1 – Gestão de ambientes ..........................................................................23 Figura 2 – Ambientes ...........................................................................................23 Figura 3 – Baseline ..............................................................................................26 Figura 4 – Possíveis níveis de maturidade previstos no modelo CMM ...............31 Figura 5 – Exemplo de script ...............................................................................34 Figura 6 – Aplicação da técnica keyword-driven .................................................60 Figura 7 – Estratégia de testes caixa-branca e caixa-preta .................................78 Figura 8 – Visão do modelo de processo de qualidade de software em “U” ........81 Figura 9 – Funcionamento de uma ferramenta de testes ....................................83 LISTA DE GRÁFICOS Gráfico 1 – Custo hipotético (em horas) para diferentes processos de teste ........36 Gráfico 2 – Teste manual x teste automatizado do módulo de Promoções ..........37 Gráfico 3 – Teste manual x teste automatizado do módulo de Atend. a Clientes ..38 Gráfico 4 – Esforço dedicado à correção de defeitos ............................................41 Gráfico 5 – Esforço gerencial para alcançar níveis maiores de maturidade .........42 Gráfico 6 – Regra de 10 de Myers ........................................................................43 Gráfico 7 – Custo de correção de defeitos ............................................................44 Gráfico 8 – Risco de teste numa aplicação de TI tradicional ................................46 Gráfico 9 – Risco de teste numa aplicação web ...................................................47 Gráfico 10 – Tempo de resposta x nº de usuários (como descobrir gargalos) ........61 LISTA DE TABELAS Tabela 1 – Métricas coletadas para o módulo de Promoções .............................36 Tabela 2 – Linha ilustrativa de “Ganho” ...............................................................37 Tabela 3 – Métricas coletadas para o módulo de Atendimento a Clientes ...........38 Tabela 4 – Comparativo entre testes manuais e automatizados .........................45 Tabela 5 – Distribuição do esforço em testes .......................................................48 Tabela 6 – Distribuição do esforço em legados (implantação) .............................48 Tabela 7 – Custos das atividades de uma revisão ...............................................50 Tabela 8 – Teste por palavras-chave ...................................................................59 Tabela 9 – Custo/esforço em projetos novos .......................................................84 Tabela 10 – Custo/esforço na manutenção de sistemas ........................................85 Tabela 11 – Custo/esforço na montagem em ambiente de homologação .............86 Tabela 12 – Exemplo de requerimento num quadro comparativo ..........................87 Tabela 13 – Cadastro de clientes ...........................................................................89 Tabela 14 – Transferência ......................................................................................89 Tabela 15 – Verificação de saldo ...........................................................................89 LISTA DE QUADROS Quadro 1 – Histórico dos testes de software .........................................................16 Quadro 2 – Evolução dos conceitos de qualidade .................................................16 Quadro 3 – Evolução do processo de qualidade e de testes de software .............17 Quadro 4 – Exemplo de priorização das categorias de testes ...............................20 Quadro 5 – Características para um software de qualidade ..................................21 Quadro 6 – Normas de qualidade em desenvolvimento de software .....................30 Quadro 7 – Automação x teste manual .................................................................35 Quadro 8 – Alternativas na execução dos testes ..................................................46 Quadro 9 – Alternativas na conferência dos testes ...............................................51 Quadro 10 – Tipos de automação ...........................................................................53 Quadro 11 – Ferramentas de teste/depuração para programas concorrentes ........71 Quadro 12 – O que automatizar? .............................................................................82 Quadro 13 – Visão Comercial ..................................................................................88 Quadro 14 – Visão Acadêmica ................................................................................88 Quadro 15 – Novas Tendências ..............................................................................88 Quadro 16 – Ferramentas da Borland para a automação de testes de software .....90 Quadro 17 – Ferramentas da IBM para a automação de testes de software ...........90 Quadro 18 – Ferramentas comerciais .....................................................................91 Quadro 19 – Características apresentadas pelas ferramentas de teste OO ...........92 Quadro 20 – Melhores ferramentas Open Source para gestão e automação .........93 LISTA DE SIGLAS ANSI American National Standards Institute BSTQB Brazilian Software Testing Qualifications Board CAST Computer-Aided Software Testing CLI Command Line Interface CMM Capability Maturity Model CMMi Modelo integrado que poderá substituir o CMM no futuro DLL Dynamic Link Library DoD Departamento de Defesa Norte-Americano EPD Evolução do Processo de Desenvolvimento FSW Fábrica de Software FTS Fábrica de Testes GE Grava/Executa GUI Graphical User Interface HP Hewlett-Packard IEEE Institute of Electrical and Electronics Engineers ISO International Standards Organization MDS Metodologia de Desenvolvimento de Sistemas MFC Microsoft Foundation Class Library MPI Message Passing Interface OLE Object Linking and Embedding POO Programação Orientada a Objetos OSI Open Source Initiative PF Pontos de função PQS Processo de Qualidade de Software PSM Pratical Software Measurement PVM Parallel Virtual Machine QA Quality Assurance QAI Quality Assurance International RAD Rapid Application Development REDEA/RJ Representação de desenvolvimento de aplicativos do Rio de Janeiro ROI Returno of Investiment SBQS Simpósio Brasileiro de Qualidade de Software SDLC Software Development Life Cycle SEI Software Engineering Institute SLA Service Level Agreement SPICE Software Process Improvement and Capability dEtermination SWEBOK Software Engineering Body of Knowledge TSL Test Script Language UAT User Acceptance Test UML Unified Modeling Language XML eXtensible Markup Language XP eXtreme Programming SUMÁRIO INTRUDUÇÃO .......................................................................................14 CAPÍTULO I – CONCEITOS BÁSICOS DE TESTES .......................15 1.1 HISTÓRICO ..............................................................................15 1.2 ESTRATÉGIAS .........................................................................18 1.3 PROGRESSIVIDADE E REGRESSIVIDADE ...........................18 1.4 CATEGORIAS ..........................................................................19 1.5 TIPOS .......................................................................................21 1.6 AMBIENTES ............................................................................22 1.7 MASSA ....................................................................................24 1.8 VERSIONAMENTO ..................................................................25 CAPÍTULO II – O PROCESSO DE TESTES ......................................28 2.1 PADRÕES DE QUALIDADE ....................................................29 CAPÍTULO III – AUTOMAÇÃO DE TESTES ......................................33 3.1 CUSTOS E PRAZOS ................................................................39 3.1.1 Adquirindo uma ferramenta ..................................................51 3.2 TIPOS DE AUTOMAÇÃO .........................................................53 3.2.1 Capture/Playback (Captura e executa) ................................56 3.2.2 Scripts estruturados ..............................................................58 3.2.3 Data-Driven (Técnica orientada a dados) ............................58 3.2.4 Keyword-Driven (Técnica orientada a palavras-chave) …..59 3.2.5 Teste de estresse ...................................................................61 3.3 FERRAMENTAS ......................................................................62 3.3.1 Suites .......................................................................................62 3.3.2 Software ..................................................................................63 3.3.3 Sites web .................................................................................65 3.3.4 Estrutural .................................................................................66 3.3.5 Mutação ...................................................................................67 3.3.6 Orientados a objetos e de componentes .............................68 3.3.7 Orientados a aspectos ..........................................................70 3.3.8 Concorrentes............................................................................70 3.3.9 Open Source ...........................................................................71 3.3.10 Faça você mesmo ..................................................................72 CONSIDERAÇÕES FINAIS ..................................................................73 REFERÊNCIAS BIBLIOGRÁFICAS .....................................................74 GLOSSÁRIO...........................................................................................76 ANEXOS ................................................................................................78 14 INTRODUÇÃO Palavras-chave: automação, testes, software. Em 2008, o mercado tem consolidado o “ideal de qualidade” seja por força da competitividade ou até pela necessidade de redução de custos. Porém, o desenvolvimento e a manutenção de aplicações corretas, confiáveis e seguras têm enfrentado a escassez de profissionais qualificados em testes, de publicações na área e a falta de divulgação das ferramentas de automação. A maioria das suites de linguagens de programação não traz em seus pacotes ferramentas para automatizar os testes e o fornecedor, talvez por falha no treinamento da equipe de vendas, não costuma divulgar a existência delas aos compradores da suite e não patrocinam a divulgação junto aos autores que escrevem sobre suas linguagens. O resultado desse quadro é uma grande quantidade de informações dispersas em vários lugares, obrigando o desenvolvedor a um verdadeiro “garimpo” para achar as ferramentas que possam atender as suas necessidades e não ter que “reinventar a roda”. Isso quando o desenvolvedor já ouviu falar sobre o assunto, pois muitos nem tem conhecimento sobre a existência das ferramentas para automatizar testes. Por essas razões escolhemos este tema. Desejamos examinar as técnicas atuais de automação de testes em software e sites web, além de fazer um levantamento das aplicações disponíveis no mercado. Queremos conhecer as dificuldades encontradas no processo e as vantagens da automação de testes quanto a redução de custos, prazos e aumento de qualidade do produto final. Apresentaremos um breve resumo sobre a disciplina de testes, sobre todas as implicações financeiras envolvidas no processo, as principais técnicas e uma rápida referência sobre o que é oferecido pelo mercado. Este trabalho foi elaborado com base nas metodologias de pesquisa exploratória e bibliográfica. 15 CAPÍTULO I – CONCEITOS BÁSICOS DE TESTES Abordaremos neste capitulo a disciplina de testes e sua evolução, mas sem maiores detalhes, antes de entrarmos no tema central deste trabalho. Também apresentaremos algumas “boas práticas” que são válidas tanto para a execução manual dos testes quanto na automação e veremos o que considerar durante o processo, para a garantia da qualidade no desenvolvimento de software e sites web. 1.1 HISTÓRICO Podemos definir os testes como uma atividade, que tem como objetivo verificar se o software construído está de acordo com sua especificação e se satisfaz as expectativas do cliente e/ou utilizador do sistema. Testes é parte integrante do processo de Validação e Verificação (V & V) da Engenharia de Software (Anexo D), sendo considerada a técnica dinâmica que exercita a implementação, Sommerville (apud CORREIA, 2004, p.1). Para complementar a definição acima, vejamos o que um dos guias de “boas praticas”, na área de engenharia de software, o SWEBOK (http://www.swebok.org/), define como teste: Teste de software consiste na verificação dinâmica do comportamento de um programa, através de um conjunto finito de casos de teste, adequadamente selecionado a partir de um conjunto infinito de possibilidades, contra um comportamento esperado especificado. SWEBOK (apud ARGOLLO, 2008). Esse guia traz diversas orientações sobre a organização de todo o processo de desenvolvimento, inclusive sobre testes e qualidade. É interessante ressaltar que às vezes os termos teste e qualidade se confundem e nesse guia podemos identificar facilmente que existe diferença entre qualidade de software e teste de software. 16 Tanto a qualidade quanto os testes devem estar presente em todo o processo de construção da aplicação, mas a qualidade se estende por todas as outras disciplinas, sendo seu escopo mais abrangente em diversos aspectos se comparado ao de testes. O estudo da qualidade se aperfeiçoava por meio dos processos industriais (qua.2) antes mesmo de se imaginar o conceito de software. O estudo dos testes de software tem pouco mais de 50 anos, mas só começou a ganhar uma maior atenção do mercado nos últimos 10 anos. Veja o quadro a seguir: Quadro 1 – Histórico dos testes de software O teste de software torna-se um processo Com a engenharia de software aumenta a importância da disciplina de testes Ocorre a primeira conferência sobre testes na Universidade da Carolina do Norte Myers produz um dos primeiros trabalhos sobre o processo de testes Primeiros conceitos de qualidade de software, criação dos padrões: • IEEE (Institute of Electrical and Electronics Engineers) 1980 • ANSI (American National Standards Institute) • ISO (International Standards Organization) 1990 Começam a ser desenvolvidas as ferramentas de teste Fonte: Bartié (2002, p.3-4) 1957 1970 1972 1979 O interesse pela qualidade só começou a se intensificar devido ao crescimento exponencial dos programas em linhas de código e também pelos níveis de complexidade que estavam sendo alcançados a cada dia. Quadro 2 – Evolução dos conceitos de qualidade 1900 Inspeção pós-produção Avalia o produto final, depois de pronto 1940 Controle estatístico da produção Avalia os subprodutos das etapas de produção 1950 Procedimento de produção Avalia todo o procedimento de produção 1960 Educação das pessoas Avalia as pessoas envolvidas no processo 1970 Otimização dos processos Avalia e otimiza cada processo 1980 Projeto robusto Avalia o projeto de produção 1990 Engenharia simultânea Avalia a própria concepção do produto Fonte: Oshiro (2007, p.148-149) A principio, técnicas foram utilizadas para separar os códigos em módulos menores, mas em pouco tempo os analistas estavam se vendo envolvidos com centenas, algumas vezes até milhares, de módulos que dificultavam a “visão do todo” (qua.3). Com o tempo ficou difícil prever se uma simples alteração na funcionalidade de um dos módulos, causaria problemas em cascata em outras. 17 Quadro 3 - Evolução do processo de qualidade e de testes de software Características 1960 1980 2000 Tamanho do software Pequeno Médio Muito grande Complexidade do software Baixa Média Alta Tamanho da equipe de desenvolvimento Pequeno Médio Grande Padrões e metodologias de Interno Moderado Sofisticado desenvolvimento Padrões e metodologias de qualidade e Interno Moderado Sofisticado testes Organizações de qualidade e testes Bem poucas Algumas Muitas Reconhecimento da importância da Pequeno Algum Significante qualidade Tamanho da equipe de qualidade e testes Pequeno Pequeno Grande Fonte: Bartié (2002, p.5) Depois se seguiram às incompatibilidades decorrentes de sistemas operacionais, versões de DLL, erros no uso do polimorfismo, hardware, etc. Atualmente muitas empresas ainda não amadureceram a idéia de que é necessário investir na disciplina de testes, apesar de todas essas questões. Algumas só investem nos testes manuais, alegando que testes automatizados é um luxo desnecessário, pois conhecem casos em que a automação não representou ganho para o processo de desenvolvimento. Certamente o problema se encontra mais na definição dos processos do que na automação em si. [...] as empresas acabam atuando na automação de teste sem a definição de objetivos e expectativas claros e reais e sem a aplicação de técnicas apropriadas. Por conseqüência, têm-se constatado um grande número de insucessos nos esforços para a automação de teste [...] (FANTINATO, 2004, p.2) Independente da forma como os testes devem ser feitos, insistir em considerá-los uma atividade que não agrega valor e que é cara, só ira comprometer a sobrevivência da empresa em um mercado que se apresenta cada vez mais competitivo. Quanto ao dilema de automatizar ou não, voltaremos a esse assunto mais a frente. 18 1.2 ESTRATÉGIAS A estratégia de testes caixa-branca (testes estruturais) verifica o software internamente, seu código fonte, estrutura de banco de dados, seqüência lógica de execução de tarefas, etc. Trata-se, portanto de um procedimento complexo que exige do testador um bom conhecimento sobre as tecnologias usadas no desenvolvimento do sistema, Bartié (2002, p.104-106). Na estratégia de caixa-preta (testes funcionais) trabalha somente com os dados de entradas e os resultados produzidos pelo sistema (Anexo A), sem se preocupar em como o programa chegou àqueles resultados. Nesse caso o testador não precisa saber como o sistema foi construído. Essa estratégia é utilizada pelos testes baseados em requisitos e é responsável pela maioria das ferramentas de automação disponíveis no mercado. Antes de se falar em automação podemos concluir que os testes caixa-branca são realizados pelo desenvolvedor e que os testes caixa-preta podem ser realizados por qualquer pessoa, pois trata se apenas do uso da aplicação. Atualmente, a automação que trabalha com o conceito de caixa-preta pode exigir que o testador tenha conhecimentos em programação. O testador comum deve continuar existindo, só que fora do ambiente de desenvolvimento. As maiorias das MDS enxergam esse testador na fase de homologação, na figura do cliente e/ou do usuário final. 1.3 PROGRESSIVIDADE E REGRESSIVIDADE Progressividade consiste em avaliar um sistema novo ou apenas a parte nova de um sistema antigo. Todos os programas novos passam por testes de progressão, somente quando algo é modificado que podemos realizar um teste de progressão ou de regressão. 19 O teste de regressão consiste em avaliar todo o sistema após uma modificação de código e/ou configuração de ambiente, podendo ser uma nova versão ou release, pois aplicar somente o teste de progressão pode ocultar problemas gerados em outras partes do sistema em decorrência da ultima alteração. A automação de testes mostra-se com maior eficiência quando utilizada nos testes de regressão. Principalmente, quando pouco esforço é necessário na adaptação dos scripts antigos, para rodar novamente todos os casos de testes antigos e novos. Com testes manuais o tempo para realizá-los seria muito maior e ainda estaríamos expostos às falhas de um processo moroso e cansativo, Bartié (2002, p.107-108). Em resumo, seu principal objetivo é verificar que o sistema continua a realizar as mesmas funções e da mesma maneira que na versão anterior, Pfleeger (apud CORREIA, 2004, p.2). 1.4 CATEGORIAS A separação dos testes em categorias, descrita por Bartié (2002, p.109-110), não se trata apenas de uma conceituação acadêmica. Essa separação realmente ajuda na elaboração de casos mais abrangentes. Evitando com isso que, no momento do levantamento sobre “o que” testar, alguns itens acabem esquecidos. A importância de cada categoria (qua.4) varia de um projeto para o outro. Por exemplo, não temos uma preocupação acentuada no quesito “Carga e Concorrência” para um projeto de editor de texto, onde somente um usuário usa o editor por vez. Até podemos nos preocupar com “Volume” relacionando-o ao trabalho com textos extensos. Apesar das possíveis divergências, a importância definida por Bartié adequa-se perfeitamente a grande maioria dos sistemas. 20 Quadro 4 – Exemplo de priorização das categorias de testes Importância Descrição da categoria Visa garantir que não haverá diferença entre os requisitos Funcional Essencial funcionais e o software desenvolvido. Checa o desempenho do programa, ou seja, verifica se ele Performance Médio impacto mantém um tempo de resposta aceitável mesmo em condições extremas. Monitora o programa por um tempo para identificar Confiabilidade e Alto impacto interrupções (confiabilidade) e mensurar o tempo para Disponibilidade solucionar o problema (disponibilidade). Simula invasões com o intuito de obter informações sigilosas ao que possam prejudicar o funcionamento do Segurança Essencial sistema. Também conhecido como teste de stress ele funciona Carga e simulando situações atípicas no sistema, como aumento no Alto impacto Concorrência tráfego da rede, transações sucessivas e simultâneas, entre outras. Verifica a navegação nas telas, clareza das mensagens, Usabilidade Médio impacto facilidade para obter ajuda, entre outros itens relacionados à interação com o usuário. Testa o comportamento em função de alterações no Compatibilidade Essencial versionamento de componentes de hardware e software. Também conhecido como teste de portabilidade, testa o Configuração Baixo impacto comportamento do programa em ambientes diferentes, tanto de hardware quanto de software. Analisa os procedimentos que a equipe deve adotar em Contingência Alto impacto caso de falhas. Analisa o comportamento do sistema, durante o processo de instalação, nas mais diversas possibilidades, por exemplo: Instalação Médio impacto nova instalação, reinstalação, variação de alternativas para instalação. É semelhante ao teste de carga, porém esse não trabalha com oscilações e sim com o crescimento contínuo da base Volume Alto impacto até o limite suportado e com isso verificar o funcionamento do programa nessas condições. Alguns autores chamam esse teste de teste de distribuição. Avalia a capacidade do sistema em poder voltar a operar Recuperação Alto impacto normalmente após a ocorrência de um erro. Fonte: Bartié (2002, p.120) Tipo Verificando o conteúdo da NBR 13596 (qua.5), que é a versão brasileira da ISSO/IEC 9126, vimos que esse padrão de qualidade relaciona itens a serem observados no desenvolvimento de aplicações, para a obtenção de um produto de qualidade, que são muito semelhantes às categorias descritas por Bartié. Entre as diferenças vale observar o item “Testabilidade”, da característica “Manutenibilidade”, pois aumenta nossa visão do produto final para além da percepção do usuário. 21 Quadro 5 - Características para um software de qualidade Sub-característica Pergunta chave para a sub-característica Adequação Propõe-se a fazer o que é apropriado? Acurácia Faz o que foi proposto de forma correta? Funcionalidade (satisfaz as Interoperabilidade Interage com os sistemas especificados? necessidades?) Conformidade Está de acordo com as normas, leis, etc.? Segurança de acesso Evita acesso não autorizado aos dados? Maturidade Com que freqüência apresenta falhas? Confiabilidade Tolerância à falhas Ocorrendo falhas, como ele reage? (é imune a falhas?) Recuperabilidade É capaz de recuperar dados em caso de falha? Inteligibilidade É fácil entender o conceito e a aplicação? Usabilidade Apreensibilidade É fácil aprender a usar? (é fácil de usar?) Operacionalidade É fácil de operar e controlar? Qual é o tempo de resposta, a velocidade de Eficiência Tempo execução? (é rápido e "enxuto"?) Recursos Quanto recurso usa? Durante quanto tempo? Analisabilidade É fácil de encontrar uma falha, quando ocorre? Manutenibilidade Modificabilidade É fácil modificar e adaptar? (é fácil de Estabilidade Há grande risco quando se faz alterações? modificar?) Testabilidade É fácil testar quando se faz alterações? Adaptabilidade É fácil adaptar a outros ambientes? Capac. para ser Portabilidade É fácil instalar em outros ambientes? instalado (é fácil de usar em outro ambiente?) Conformidade Está de acordo com padrões de portabilidade? Capac. para substituir É fácil usar para substituir outro? Fonte: NBR 13596 (apud OSHIRO, 2007, p.152-153) Característica 1.5 TIPOS Existe uma infinidade de tipos de testes, cada um com suas respectivas técnicas. Alguns se misturam, outros são apenas sinônimos. Cada autor costuma ter sua lista particular “dos mais importantes”, mas os principais conjuntos de teste são os de unidade, integração, sistema e validação. Não é o objetivo desse trabalho discorrer sobre todos os tipos possíveis de testes. Apenas apresentaremos alguns conceitos, durante a apresentação de alguns temas, conforme sua relevância para o contexto desse estudo. Como podemos ver nos Anexos B e C, a muito para considerar quando da elaboração de um plano de testes. 22 Com a crescente complexidade da disciplina de testes o mercado já começa a exigir “especialistas” para essa tarefa. Os cursos que se propõe a capacitação profissional e as certificações começam a se proliferar. Algumas pesquisas argumentam que esta será uma das áreas com maior demanda de emprego num futuro próximo e, conseqüentemente, maior valorização salarial. A Computer World dedicou um post para falar das 6 áreas de TI que são a prova de recessão, com base em uma pesquisa, da JobFox, realizada em julho deste ano. O documento faz uma ressalva na área de testes: “Especially good for those with automated testing expertise”, ou seja, especialmente bom para aqueles com conhecimento em automação de testes, Eudescosta (2008). 1.6 AMBIENTES O ambiente de testes pode ser do tipo ativo ou por demanda. Quando construímos um ambiente e o mantemos, mesmo depois do término do projeto que o originou (sempre disponível para simular a produção, através de rotinas eventuais, diárias, quinzenais, mensais, anuais), estamos utilizando o tipo ativo. Esse tipo também é o melhor para testes de interfaces por parte do homologador1, pois não o colocamos em contato com o ambiente de desenvolvimento (fig.1) e não corremos o risco de comprometer o ambiente de produção. Outra vantagem é que ele promove a integração entre plataformas sem que se tenha o trabalho de reinstalar todos os sistemas envolvidos e reproduzir as massas de testes de cada um a cada novo projeto ou evolução de aplicação. Esse ambiente também nos possibilita aperfeiçoar um controle rígido de acessos. Uma vez preparado, o ambiente ativo proporciona uma redução nos custos a médio e longo prazo, além de possibilitar uma melhora na performance do processo. O ambiente por demanda é construído de acordo com os pedidos e conforme a necessidade. Em termos de hardware, a disponibilidade dos equipamentos pode 1 Cliente e/ou usuário final. 23 tornar esse custo tão alto quanto o do ambiente ativo, mas é comum apenas a requisição de espaço em disco em máquinas já existente, tanto do ambiente de desenvolvimento quanto do ambiente de produção, para a realização dos testes. Em alguns casos não chega nem a ser um ambiente, apenas um “quebra-galho”. Figura 1 – Gestão de ambientes Fonte: Bartié (2002, p.165) Na construção de um ambiente de testes separado do ambiente de produção e de desenvolvimento devemos ter em mente o seguinte: quando implantamos um sistema nesse ambiente devemos nos questionar se existe algum tipo de integração com outros sistemas (seja ela do tipo real-time, on-line e/ou batch) e se eles também estão implantados nesse mesmo ambiente. A realização dos testes no ambiente de homologação é conhecida como teste alpha (fig.2). Quando os testes ocorrem no ambiente de produção recebem o nome de teste beta. Ambiente de desenvolvimento Desenvolvimento Teste: Unidade Integração Fontes Estrutura interna Categoria: Funcional Usabilidade Em Em teste desenvolvimento Figura 2 – Ambientes Fonte: Bartié (2002, p.166-167) Ambiente de teste e homologação Teste: Teste: Sistema Aceitação Categoria: Funcional Carga Categoria: Performace Aceite formal Instalação Alpha-teste Segurança Ambiente de produção Teste: Aceitação Produção Categoria: Beta-teste Em homologação Em produção 24 Bartié (2002, p.159) também lembra que, outra característica do teste alpha é realização em ambiente simulado da empresa desenvolvedora da aplicação, fisicamente separado do ambiente de desenvolvimento. A equipe encarregada da preparação também deve observar todas as questões relativas à compatibilidade entre o ambiente de homologação e o de produção, para evitar o funcionamento incorreto da aplicação devido a problemas de versionamento, portabilidade, recursos de hardware, etc. 1.7 MASSA Em algumas livrarias virtuais, quando informamos nossos dados para realizar uma compra, após digitarmos o CEP, a aplicação web se encarrega de preencher automaticamente no endereço o nome da rua, bairro, município e UF. As informações que constam no banco de dados da aplicação antes de qualquer pessoa te-la utilizado são conhecidas como carga inicial. Muitas vezes, para testar uma aplicação em todo o seu potencial, é necessário que o sistema já contenha dados que vão além da carga inicial e que simulem o uso por parte do usuário, ao longo de algum tempo. Esses dados são chamados de massa de testes. Incluir manualmente esses dados, além de ser uma tarefa demorada, é muito monótono para qualquer pessoa. Já existem diversas ferramentas que se encarregam de gerar a massa de testes e que utilizam técnicas de redução, para uso de um registro de cada tipo (file-aid rdx), e descaracterização, para proteger dados pessoais e evitar que, em caso de algum acidente, esses dados sejam revelados (data solution). Em qualquer um dos casos é recomendável que utilizem apenas dados fictícios ou de domínio público para compor essas massas. 25 Com relação ao uso de ferramentas para automação do processo testes, tenha preferência pelas que possibilitem o retorno da massa ao “momento zero”, ou seja, quando terminamos de testar a aplicação pode ser interessante fazer a massa de testes retornar ao seu estado inicial, para poder reproduzir os mesmos testes com a garantia de obter os mesmos resultados. 1.8 VERSIONAMENTO Quando as aplicações começaram a “conversar” entre si, principalmente na interação entre aplicações via automação OLE, começaram a ocorrer problemas decorrentes da incompatibilidade de versões, devido às muitas variações de rotinas, que em tese deveriam atender tanto as chamadas que utilizam as novas características quanto as antigas. Esses problemas também se estenderam aos sistemas operacionais, as DLL de uso geral, sobre recursos da própria aplicação, polimorfismo de POO, hardware, etc. Já os browsers (navegadores para internet) são um caso a parte, pois sofrem com a variabilidade dos padrões e das interpretações dadas aos mesmos. Todos esses fatores obrigam os desenvolvedores a atentar para um rigoroso controle de configuração em caso de mudanças, seja pela simples instalação em computadores diferentes ou pelo upgrade da aplicação. A utilização de um processo automatizado de testes pode garantir uma considerável economia de recursos, quando é necessário testar o produto em diversos tipos de configuração. Na atualização também podemos ter uma boa economia, quando pouca coisa é modificada ao nível da interface, mas convêm avaliar todo o software novamente (teste de regressão). Quem já adquiriu um software e checou antes a “configuração mínima” percebe a importância desses procedimentos. 26 Mesmo quando é utilizado ferramentas para automação dos testes, muito tempo pode ser perdido quando não se tem o cuidado de guardar a baseline, como veremos a seguir. As idéias defendidas pelas categorias “Compatibilidade” e “Configuração” (qua.4) devem ser adotadas e seus registros acompanhados e controlados. Tanto projetos novos quanto as mudanças corretivas e/ou evolutivas devem possuir registros da configuração do ambiente, artefatos, hardware, etc. Decorrente do controle do versionamento surgiu à expressão baseline. Baseline é “[...] o resultado do esforço de criação de um ambiente inicial pronto para sofrer o processamento dos testes planejados.” (BARTIÉ, 2002, p.169). A IBM desenvolveu uma ferramenta chamada ClearCase, que faz parte da suite do Rational. Ela trabalha com o seguinte entendimento sobre baseline: imagine quatro artefatos sendo desenvolvidos paralelamente, que foram evoluindo e recebendo cada um versões particulares. Neste caso, baseline seria o conjunto de artefatos, com versões especificas, para que uma aplicação maior pudesse funcionar a contento. A figura a seguir ilustra melhor essa definição: Figura 3 – Baseline 27 Para implantar o projeto e documentá-lo devemos considerar o Pacote 1 V.2, Pacote 2 V.1, Pacote 3 V.3 e Pacote 4 V.2, conforme determina a baseline. O objetivo do baseline é “[...] validar a cópia dos componentes do ambiente de produção para o ambiente de homologação.” (BRITO, 2000, p.43). No exemplo anterior citamos artefatos, mas o conceito de baseline também é utilizado em outros casos, como ambiente e hardware. O baseline torna-se muito útil quando precisamos restabelecer um sistema para testes corretivos e/ou evolutivos. Pensando nisso, Ungarelli (2007) definiu baseline como sendo a configuração tomada em um momento estratégico do projeto com o objetivo de servir como referência para as atividades posteriores identificadas conforme o plano de gestão de configuração. Quanto às modificações ele também lembra que, quando uma ocorrência é resolvida, o teste que deu origem à mesma deverá ser novamente executado sendo que, para isso, deve ser gerado um novo baseline com a versão corrigida do documento ou sistema. O controle do versionamento também ajuda a evitar problemas derivados da falta de equalização entre ambientes. Essa falta de equalização geralmente ocorre quando uma solicitação emergencial provoca uma mudança diretamente no ambiente de produção, e por falta de acompanhamento, não se efetua o acerto nos ambientes de desenvolvimento e homologação. 28 CAPÍTULO II – O PROCESSO DE TESTES O processo de testes deve ser iniciado junto com o projeto e deve acompanhá-lo no decorrer das demais etapas do desenvolvimento, isso garante uma redução nos custos em virtude da prevenção de problemas já no inicio do desenvolvimento. Plano, estratégia, cenário, roteiro, casos, massa e evidências de testes são os principais artefatos elaborados e revistos ao longo do processo de avaliação (Anexo D). Nesse processo também encontramos as atividades de inspeção e auditoria de código-fonte, que, inclusive, podem utilizar ferramentas de automatização. Quanto aos artefatos, a automação tem sido mais utilizada junto aos casos e a massa de testes. Como já falamos sobre a massa de testes, vejamos os casos. Segundo Ungarelli (2007) os casos de teste especificam entradas, resultados esperados e condições de execução estabelecendo o que será testado. Para Correia (2004, p.2) a qualidade de um caso de teste é descrita através de quatro atributos: 1. Capacidade de encontrar defeitos; 2. Capacidade em exercitar mais de um aspecto reduzindo assim a quantidade de casos de teste requeridos; 3. Baixo custo necessário para a realização do caso de teste incluindo o esforço de desenho, execução e análise dos resultados de teste; 4. Baixo esforço de manutenção necessário sobre o caso de teste a cada alteração do sistema. Estes quatro atributos devem ser balanceados de forma a ter casos de testes com boa qualidade. Os dois primeiros atributos independem da forma de teste (automática ou manual). Quanto aos dois últimos veremos mais a frente diversas situações que demonstram em que casos uma forma é melhor que a outra. O esforço de construção e de 29 manutenção requerido para um teste automático é normalmente maior do que para um teste manual equivalente, mas uma vez construído, o automático tende a ser mais econômico que o manual. O esforço de execução e de verificação de resultados será uma pequena fração do esforço de construção e consideravelmente menores que a forma manual. 2.1 PADRÕES DE QUALIDADE Igualmente ao que ocorre na indústria, o segmento de TI vem sendo contemplado com diversos tipos de certificações para quem se propõe a garantir ao mercado a qualidade dos processos usados no desenvolvimento de suas aplicações. Adotar um padrão de qualidade não é uma tarefa simples, mas é possível colher bons frutos. Veja a seguir alguns comentários sobre os problemas e benefícios referentes a implantação de uma cultura de qualidade, segundo Bartié (2002, p.5064): Problemas enfrentados: • Ausência de gerência de qualidade independente • Ausência de procedimentos de testes automatizados • Qualidade é sempre aplicada tardiamente no desenvolvimento • Ausência de profissionais capacitados em qualidade de software • Falta de um modelo corporativo de qualidade • Foco em testes progressivos aumenta os riscos • Deficiência no planejamento dos testes • Sob pressão, os testes são sacrificados • Ausência de um ambiente de testes isolado • Transferir o planejamento ao analista de sistemas • Dificultar o acesso do analista de testes ao software Benefícios alcançados: • Torna o ciclo de desenvolvimento confiável 30 • Garante ações corretivas no ciclo de desenvolvimento • Evita a ingerência do projeto de software • Amplia as chances de sucesso do projeto de software • Amplia a produtividade do desenvolvimento o Fator desorganização o Fator retrabalho • Evitam a propagação de erros • Automação de testes reduz custos do projeto Citamos abaixo os principais órgãos certificadores de qualidade no desenvolvimento de software: • IEEE (Institute of Eletrical and Electronics Engineers) • ANSI (American National Stantards Institute) • ISO (International Stantards Organization) Na seqüência veja um quadro com algumas das normas definidas por estas instituições: Quadro 6 – Normas de qualidade em desenvolvimento de software Comentário Características da qualidade de produtos de software. Versão brasileira da ISO 9126 Guias para a avaliação de produtos de software, baseados na utilização prática ISO 14598 da norma ISO 9126 Características de qualidade de pacotes de software (software de prateleira, ISO 12119 vendido com um produto embalado) Standard for Software Quality Metrics Methodology (produto de software) IEEE P1061 Software Life Cycle Process. Norma para a qualidade do processo de ISO 12207 desenvolvimento de software. Sistemas de qualidade - Modelo para garantia de qualidade em Projeto, NBR ISO 9001 Desenvolvimento, Instalação e Assistência Técnica (processo) Gestão de qualidade e garantia de qualidade. Aplicação da norma ISO 9000 para NBR ISO 9000-3 o processo de desenvolvimento de software. NBR ISO 10011 Auditoria de Sistemas de Qualidade (processo) Norma ISO 9126 NBR 13596 CMM Capability Maturity Model. Modelo da SEI (Instituto de Engenharia de Software do Departamento de Defesa dos EEUU) para avaliação da qualidade do processo de desenvolvimento de software. Não é uma norma ISO, mas é muito bem aceita no mercado. Projeto da ISO/IEC para avaliação de processo de desenvolvimento de software. SPICE ISO 15504 Ainda não é uma norma oficial ISO, mas o processo está em andamento. Fonte: Oshiro (2007, p.151) 31 O CMM (Capability Maturity Model) da Software Engineering Institute esta se tornando o padrão no mercado, sua classificação em níveis possibilita ao mercado um visão sobre o que esperar de determinada empresa. Por exemplo, a SEI (Software Engineering Institute) estima que as empresas que se encontram no Nível 1 (fig.4) do modelo CMM gastam cerca de 55% (gra.4) dos esforços em correção de defeitos oriundos do projeto de desenvolvimento. NÍVEL 5 OTIMIZADO OTIMIZADO FOCO NO APERFEIÇOAMENTO DO PROCESSO NÍVEL 4 GERENCIADO MENSURÁVEL PROCESSO MEDIDO E CONTROLADO NÍVEL 3 DEFINIDO PADRONIZADO PROCESSO CARACTERIZADO E BEM ENTENDIDO NÍVEL 2 REPETITIVO CULTURAL TAREFAS "MESTRAS" PODEM SER REPETIDAS CONTINUAMENTE NÍVEL 1 INICIAL ANÁRQUICO PROCESSO IMPREVISÍVEL E POUCO CONTROLADO Figura 4 – Possíveis níveis de maturidade previstos no modelo CMM Fonte: Bartié (2002, p.9) Existem outros dois modelos de qualidade em software que ainda não atingiram uma maior popularidade: O PSM e o SPICE. O PSM (Pratical Software Measurement) é um modelo para mensuração de projetos de software. Criado em 1994 sob o patrocínio do DoD (Departamento de Defesa Norte-Americano), o PSM foi publicado pela primeira vez 1997. O modelo vem sendo atualizado por profissionais da área de Software Process Improvement e foi utilizado como base para a elaboração da Process Area Measurement and Analysis do CMMi (modelo integrado que poderá substituir o CMM no futuro), Calleri (2005, p.20). 32 O SPICE (Software Process Improvement and Capability dEtermination) teve desenvolvimento iniciado em 1993 e sua primeira versão foi liberada em 1995. Ele não foi proposto como modelo de qualidade ou de implementação, e sim como meio adequado à avaliação do processo de desenvolvimento de software, Spice Project (apud CALLERI, 2005, p.30). Seu projeto visava o desenvolvimento de uma norma internacional para avaliação de software; coordenação e análise de sua utilização; aprimoramento e sua consolidação como norma. Como resultado, foi criada a norma internacional ISO/IEC (International Electrotechnical Commision) 15504, Sepin (apud CALLERI, 2005, p.30). 33 CAPÍTULO III – AUTOMAÇÃO DE TESTES A crescente complexidade nos sistemas informáticos juntamente com os métodos de desenvolvimento rápido e incremental – como por exemplo, Rapid Application Development e Extreme Programming, que prometem intervalos de entrega mais freqüentes – requerem testes de qualidade que possam ser rapidamente executados sempre que necessário. Em tal cenário os testes manuais são pouco vantajosos, visto que muitos testes são re-executados a cada release do sistema. (CORREIA, 2004, p.1). Podemos até falar em qualidade utilizando testes manuais, mas só o uso de ferramentas de automação pode fazer com que alta produtividade e qualidade andem juntas. As funcionalidades mais propícias à automação são aquelas que envolvem a execução de tarefas repetitivas e cansativas, facilmente suscetíveis a erros, ou impossíveis de serem realizadas manualmente, Fantinato (2004, p.14). Segundo Argollo (2008), a automação de testes tem como principais características: • Diminuição do esforço; • O foco não é repetir um teste bem sucedido, mas melhorá-lo; • Repetir quando algo é alterado (software e/ou ambiente). Não é possível automatizar tudo, mas podemos atingir um bom nível de automação quando utilizamos as ferramentas basicamente para controlar a execução dos testes e comparar os resultados obtidos com os resultados esperados, além de relatar os resultados obtidos. Como veremos mais adiante algumas ferramentas podem oferecer suporte às linguagens que manipulam scripts, com o objetivo de apoiar o processo de automação. Esses scripts servem, principalmente, para simular ações, alterar valores e verificar o conteúdo dos objetos da interface gráfica. Eles também contam com recursos similares aos oferecidos pelas linguagens de programação como C, Java e Delphi. Um desses recursos é a possibilidade de incluir comandos para 34 controle de fluxo (if, while, case) e com isso diminuir o tamanho do código de controle. Veja a seguir um exemplo de script e seu resultado na tela: Window.Localizar.ProcurarPor.TypeText(“automação”); Window.Localizar.Diferenciar.Click(); Window.Localizar.Localizar.Click(); MainWindows.Document.ChechSelText(“automação”); Figura 5 – Exemplo de script Fonte: Argollo (2008) Para Argollo (2008), os scripts também apresentam algumas limitações, como por exemplo: • Scripts são dependentes dos elementos da interface gráfica: Se a interface mudar, o script para de funcionar; • As linguagens de testes normalmente reconhecem somente os elementos básicos da interface gráfica. Algumas ferramentas ainda apresentam um terceiro fator negativo que é a impossibilidade de reaproveitamento do código em outro caso de teste. Voltaremos a falar de scripts e como superar essas limitações mais adiante. Já mencionamos que nem tudo pode ser automatizado, no entanto podem ocorrer casos em que determinada ferramenta de automação existe, mas não deve ser utilizada, ou seja, não devemos apenas atentar para “o que pode ser automatizado?”, mas também para “o que deve ser automatizado?”. Essa decisão deve envolver os desenvolvedores e os gerentes de projeto. No Anexo E, segue um roteiro com questões que podem orientar a decisão. Tanto as questões do Anexo E, quanto os apontamentos a seguir, tratam sobre a escolha entre os testes manuais e os automatizados, e servem apenas para orientar, 35 pois ainda que se tenha a consciência de que um determinado procedimento de teste automatizado deva ser adotado o equilíbrio com os custos e os prazos acabam se tornando o ponto crucial de toda a questão. O próximo tópico tem como foco justamente isto e vai apresentar diversos fatores que muitas vezes fazem com que algumas palavras diferentes pareçam sinônimas, como custo, investimento e economia. Quadro 7 – Automação x teste manual Quando a automação de testes faz sentido? Quando focar em teste manual? Para valer a pena, devemos observar as Para valer a pena focar em testes manuais, seguintes questões: devemos observar as questões seguintes: • Os testes que usarem técnicas de regressão • Quando se faz uso de testes de instalação, setup, operações muito específicas, como, ou de confirmação. Quando precisa constanpor exemplo, que envolvam hardware (ex.: temente do trabalho de repetir. instalação de componentes de equipamen• Quando se faz uso de testes aleatórios tos). Isto inclui manutenções em geral. (random ou monkeys testes) que utilizam caminhos aleatórios gravados por dentro da • Faz uso de testes de configuração e de comaplicação e de grande quantidade de dados patibilidade. Este tipo de teste geralmente de testes. requer muita intervenção humana. • Testes de carga, volume, capacidade. Como • O mesmo vale para testes de error handing responder se o sistema funcionará com 50 (tratamento de erros) e de recuperação. Nomil usuários simultâneos? vamente este tipo de teste trabalha com erros forçados de maneira que repeti-los pode • Performance e confiabilidade. Com a “chegaficar caro. da” dos sistemas web, cada vez mais vemos este tipo de sistema fazer uso de ferramen- • Testes de usabilidade. Mais um caso em que tas de performance. é preciso intervenção humana para o devido julgamento e validação dos testes. • Quando se faz teste de componentes (unidade) os quais devem ser retestados várias • O mesmo anterior vale para documentação e help. vezes. Fonte: Molinari (2003, p.105) No gráfico a seguir (gra.1) podemos ver que os testes manuais tornam-se mais dispendiosos que os diversos tipos de automação, porém a opção pelo teste manual pode ser determinada pelo tempo disponível e pela complexidade do teste, Molinari (2003, p.105). Aconselhamos aos que irão implantar a automação de testes, que busquem definir estratégias de coleta e análises métricas relacionadas ao processo de teste de software, isso ajudará a justificar o investimento aplicado e a otimizar cada etapa, Fantinato (2004, p.8). Vejamos um caso prático, o uso do framework AutoTest que foi desenvolvido sobre a plataforma IBM Rational Functional Tester for Java and Web. 36 O processo foi utilizado em um sistema desenvolvido pela empresa CPqD Telecom & IT Solutions, por meio da DSB – Diretoria de Soluções em Billing. A equipe de desenvolvimento era formada por cerca de 160 pessoas, das quais 25 trabalhavam na atividade de teste. 700 600 500 Manual CaptureReplay 400 Scripts 300 ActionWord ModelBased 200 100 10 Re le as e le Re as e 9 8 7 Re le as e 6 as e Re le as e 5 le as e Re le Re Re le as e as e 4 3 2 le as e Re Re le as e le Re De sig n Ph as e 1 0 Gráfico 1 – Custo hipotético (em horas) para diferentes processos de teste Fonte: Mark Utting (apud ARGOLLO, 2008) Analisaremos apenas os dados colhidos nos módulos “Promoções” e “Atendimento a Clientes”. Do total de casos de teste projetados, primeiramente foram executados apenas os casos de teste mais críticos de forma manual. Tabela 1 – Métricas coletadas para o módulo de Promoções Tipo de métrica Teste manual Teste automatizado Número de casos de teste executados 930 1644 1 Cobertura funcional dos casos de teste 65% 88% Erros detectados 174 + 33 Tempo de projeto de teste 101 h 101 h Tempo de uma execução completa dos casos de teste 123 h 14 h Análise dos resultados e registro de erros 34 h 28 h Fonte: Fantinato (2004, p.10) 37 7.200,00 6.000,00 4.800,00 Manual Automático 3.600,00 Ganho 2.400,00 1.200,00 Ev ol Re uç -e ão xe Re cu ç ão -e xe 1 Re cu ç ão -e xe 2 Re cu ç ão -e xe 3 Re cu ç ão -e xe 4 Re cu ç ão -e xe 5 Re cu ç ão -e xe 6 Re cu ç ão -e xe 7 c uç Re ão -e xe 8 cu Re çã -e o xe 9 cu çã o 10 - Gráfico 2 – Teste manual x teste automatizado do módulo de Promoções Fonte: Fantinato (2004, p.11) Analisando primeiramente os resultados do módulo “Promoções” e comparando as formas (tab.1), vemos que o aumento na identificação de erros (+33) pode estar relacionado ao aumento do escopo, mas não há como ignorar o fato de que o teste automatizado é realizado 15 vezes mais rápido que o manual. Essa diferença se torna mais evidente quando consideramos a repetição dos testes (gra.2). Tabela 2 – Linha ilustrativa de “Ganho” Gráfico 7 Gráfico 6 Serviço Ganho Serviço Ganho Projeto 0% Evolução -68% Execução inicial -131% Re-execução 1 2% Re-execução 1 -61% Re-execução 2 30% Re-execução 2 -28% Re-execução 3 45% Re-execução 3 -9% Re-execução 4 55% Re-execução 4 4% Re-execução 5 62% Re-execução 5 13% Re-execução 6 66% Re-execução 6 20% Re-execução 7 70% Re-execução 7 25% Re-execução 8 73% Re-execução 8 29% Re-execução 9 75% Re-execução 9 32% Re-execução 10 77% Re-execução 10 35% Fonte: Fantinato (2004, p.11-12) A linha que representa o “Ganho” (gra.2 e gra.3) é apenas ilustrativa (tab.2), serve para mostrar o desempenho do teste automatizado em relação ao teste manual. 38 Tabela 3 – Métricas coletadas para o módulo de Atendimento a Clientes Tipo de métrica Teste manual Teste automatizado Número de casos de teste executados 246 Cobertura funcional dos casos de teste 71% Erros detectados 18 Tempo de projeto de teste 718 h 525 h Tempo de uma execução completa dos casos de teste 4h (estimado) 100 h Análise dos resultados e registro de erros 62 h (estimado) Fonte: Fantinato (2004, p.12) Quanto ao módulo “Atendimento a Clientes”, por se tratar de um módulo em evolução (tab.3), as planilhas de teste não foram criadas durante a atividade de projeto de teste, mas apenas adaptadas a partir do projeto anterior para cobrir as funcionalidades adicionadas ou alteradas. 1.800,00 1.600,00 1.400,00 1.200,00 1.000,00 800,00 Manual Automático Ganho 600,00 400,00 200,00 Ex Pr ec oj et uç o ão Re in ici -e al xe c uç Re ão -e xe 1 Re cu ç ão -e xe 2 Re cu ç ão -e xe 3 Re cu ç ão -e xe 4 Re cu ç ão -e xe 5 Re cu ç ão -e xe 6 c uç Re ão -e xe 7 Re cu ç ão -e xe 8 cu Re ç ão -e xe 9 cu çã o 10 - Gráfico 3 – Teste manual x teste automatizado do módulo de Atendimento a Clientes Fonte: Fantinato (2004, p.12) A diferença de 525 horas para 4, no tempo de execução, é justificada por se tratar de um módulo com uma grande quantidade de operações, que demandam muitos acessos ao banco de dados, via SQL, tanto para preparar os testes quanto para analisar resultados. 39 Não houve teste manual para este módulo, por isso que apenas foram estimados os valores para efeito de comparação. Outros autores também realizaram comparações entre os testes manuais e os automatizados, para Linz e Daigl (apud CORREIA, 2004, p.2), após investimentos iniciais de criação de infra-estrutura, o gasto em testes automáticos representa 40% do gasto com testes manuais. 3.1 CUSTOS E PRAZOS “Não pense em automação como um mecanismo para diminuir o prazo da realização dos testes, mas como uma forma de aproveitar melhor o tempo para obter um produto mais confiável.” (ARGOLLO, 2008). As palavras de Argollo nos lembrar da filosofia Kaizen, que prega a melhora continua dos processos. Também encontramos esse ideal nas empresas de nível 5 do CMM (fig.4). Todas as pessoas envolvidas com testes devem ter esse “horizonte” como meta, pois a simples repetição dos mesmos de forma automática não é suficiente para extrair um verdadeiro ganho econômico nas atividades de teste, é necessário uma melhoria contínua, para que possam ser executadas rotinas que não foram consideradas anteriormente. Por isso é importante adquirir ferramentas que possibilitem a reutilização de casos de testes, seja por meio de scripts ou por outra técnica qualquer. Devemos buscar a reutilização, porque esse é um dos grandes benefícios da automação. Ela possibilita a execução de um teste de regressão completo em todo o programa com um mínimo de esforço e o máximo em qualidade. As empresas que fazem uso dos testes manuais tendem a fazer apenas testes de progressão, devido ao alto custo dos testes de regressão quando realizados manualmente. Como 40 podemos ver a seguir Bartié (2002, p.45 e 193) reconhece o custo, mas é um dos que enfatizam a importância dos testes de regressão: O risco de que as novas alterações tenham comprometido as funcionalidades anteriores tende a aumentar ainda mais à medida que o software vai se tornando mais complexo. ... Os custos relativos à execução dos testes de progressão não são importantes. São importantes os custos de execução dos testes de regressão, pois estes devem ser continuamente executados ao longo da vida do software. Por outro lado, não investir na qualidade do software pode gerar prejuízos de diversas ordens. Conforme estudos apresentados por Bartié (2002, p.6): • Mais de 30% dos projetos são cancelados antes de serem finalizados. • Mais de 70% dos projetos falham nas entregas das funcionalidades esperadas. • Os custos extrapolam em mais de 180% os valores originalmente previstos. • Os prazos excedem em mais de 200% os cronogramas originais. Não podemos generalizar, considerando que todos esses problemas têm sua origem na deficiência do processo de testes. Requisitos mal elaborados, falhas no acompanhamento do cronograma ou sub-estimativas de prazos e custos, também são fatores que causam problemas ao projeto, mas o processo de verificar antes para depois validar (Anexo D) ajuda a minimizar esses efeitos além de toda uma cultura de qualidade. Também não podemos ignorar o fato de que a atividade de teste é cara e repetitiva. Dependendo do risco e da complexidade da aplicação, a parcela do esforço de desenvolvimento alocada ao teste varia entre 30% e 50%. O custo do teste na maioria dos sistemas comerciais varia entre 40% e 50% do custo total de desenvolvimento, Argollo (2008). Até o processo de obtenção de uma certificação, em um órgão internacional de qualidade, costuma ser bem caro. O CMM (Capability Maturity Model) é um desses padrões de qualidade. Para defender a tese de que vale a pena investir em um padrão de qualidade a SEI 41 (Software Engineering Institute) realizou uma pesquisa, com base nos dados e em sua experiência ela estimou alguns valores para as empresas que adotam o CMM. Inclusive já citamos essa pesquisa, quando mencionamos que as empresas que se encontram no Nível 1, do modelo CMM, gastam cerca de 55% dos esforços em correção de defeitos oriundos do projeto de desenvolvimento. Veja agora o gráfico completo: 60% 55% Esforço de correção 50% 40% 35% 30% 20% 20% 10% 10% 5% 0% 1 2 3 4 5 Nível de maturidade Gráfico 4 – Esforço dedicado à correção de defeitos Fonte: Bartié (2002, p.14) “Muitos gerentes vêem o processo de automação de testes de software como algo que pouco agrega valor.” (MOLINARI, 2003, p.102). Por que será que, mesmo diante do gráfico anterior, os gerentes continuam tendenciosos a dispensar investimentos em testes? Provavelmente esse fato esta relacionado ao alto grau de investimentos e esforços necessários no inicio da implantação de um programa de qualidade. Veja o próximo gráfico com mais alguns dados levantados pelo SEI: 42 30% 25% Esforço gerencial 25% 20% 15% 15% 10% 10% 5% 5% 0% 0% 1 2 3 4 5 Nível de maturidade Gráfico 5 – Esforço gerencial para alcançar níveis maiores de maturidade Fonte: Bartié (2002, p.15) Não há gerente que não se pergunte “A empresa está preparada para receber uma nova cultura? Será que isso vai dar resultado?”. Podemos considerar que o gerente deve observar os seguintes custos, associados à implantação de um processo de testes automatizado: • Aquisição da tecnologia, hardware gasto na instalação das ferramentas; • Recursos necessários à escolha dos tipos de ferramentas (planejamento, performance, teste de regressão, funcional, de monitoração, etc); • Recursos necessários à compra e instalação das ferramentas; • Treinamento; • Custos de uso da tecnologia. Licenças / quantidade de usuários das mesmas ferramentas; • Recursos necessários à automação (desenvolvimento de scripts); • Recursos necessários à manutenção dos scripts; • Suporte do fornecedor. 43 Para piorar o quadro a experiência mostra que o esforço necessário para criar, verificar e documentar um teste automático é de 3 a 10 vezes maior do que o necessário para criar e executar o teste manualmente, Argollo (2008). Seja o teste manual ou automatizado, o custo associado à definição, documentação e execução de um processo de teste é recuperado ao permitir a detecção e correção dos defeitos nas fases iniciais do desenvolvimento de um sistema, diminuindo os ciclos de desenvolvimento. Seguindo o modelo de PQS em “U” (Anexo D), identificamos as atividades de verificação no inicio do ciclo. Essas verificações são importantes na redução dos custos ao longo do processo, tanto que resultaram na regra de 10, formulada por Myers (gra.6). Segundo Myers um erro não identificado nas fases iniciais do desenvolvimento ocasiona prejuízos exponenciais à medida que o projeto avança. 10000 1000 100 10 1 Requisitos Análise e modelagem Código Teste de software Produção Gráfico 6 – Regra de 10 de Myers Fonte: Bartié (2002, p.31) Veja a seguir um gráfico que apresenta levantamento feito por Argollo, sobre os custos da propagação dos defeitos e quanto foi gasto nas correções em cada fase do projeto. 44 16.000,00 14.000,00 12.000,00 10.000,00 8.000,00 6.000,00 4.000,00 2.000,00 Requisitos Projetos Codificação Teste Manutenção Fases de desenvolvimento Gráfico 7 – Custo de correção de defeitos Fonte: Argollo (2008) Não chega a ser igual ao idealizado por Myers, mas podemos notar que ele se aproximou muito da realidade. Esses gráficos mostram a importância da qualidade e que ela não se aplica apenas a fase de testes. Ela deve existir em todas as etapas, verificando a conformidade dos trabalhos realizados. Quanto à opção por um teste manual ou automatizado, vamos ver a seguir um caso apresentado por Argollo na SBQS 2008. O relato envolve o desenvolvimento de um sistema da área de seguros, a gerência teve que decidir entre qual esforço empregar no processo de testes, veja os dados disponibilizados a gerência: • Execução dos testes manuais: 5 p/m (5 pessoas x 4 semanas) • Automação dos testes: 18 p/m (3 pessoas x 6 meses) Podemos ver que o esforço para os testes automáticos é bem maior que a realização dos testes manuais, porém devemos perceber que esse esforço só será 45 feito uma única vez e o tempo necessário à execução automatizada dos mesmos é de apenas uma semana, exigindo um esforço de 1,25 p/m. Os gerentes também consideraram a possibilidade de repetir a avaliação, nesse caso o investimento seria recuperado em cinco ciclos e a diferença poderia ser reinvestida no aprimoramento dos testes. A escolha foi pela automação e o resultado foi o seguinte: • O número de incidentes no sistema em produção caiu de 80% a 90%; • A economia para empresa ao término de um ano foi superior ao orçamento anual do departamento de teste. Continuaremos a comparar os testes manuais e os automatizados. Veja a próxima tabela, ela apresenta os custos de testes referentes à preparação do ambiente, de execução e de conferência: Tabela 4 – Comparativo entre testes manuais e automatizados Teste Etapas dos testes Teste manual automatizado Planejamento 32 40 Definição dos casos de testes 262 117 Execução dos testes 466 23 Conferência dos testes 117 58 Gerenciamento do erro 117 23 Relatórios finais 96 16 Duração total (em horas) 1.090 277 Fonte: The Newsletter of the Quality Assurance (apud BARTIÉ, 2002, p.64) Melhoria (%) -25% 55% 95% 50% 80% 83% 75% Esta tabela demonstra um estudo que envolveu 1.750 casos de testes e 700 defeitos existentes. À medida que re-executamos os testes, o ganho de tempo, controle e confiabilidade fica claro. A mera repetição não deve ser o único fator para a opção pelos testes automatizados e a adoção destes sem aplicá-los em testes de regressão total também é algo que deixa a desejar. 46 Podemos ver no quadro a seguir que a regressão parcial usando testes automatizados não reduz o risco de não cobertura, apenas reduz o custo e em alguns casos nem isso. Quadro 8 – Alternativas na execução dos testes Regressão Total Regressão Parcial • Baixo risco de não-cobertura • Alto risco de não cobertura • Alto custo de execução • Custo de execução menor Teste Manual • Execução lenta • Execução lenta • Reutilização zero • Reutilização zero • Interferências humanas • Interferências humanas • Baixo risco de não-cobertura • Alto risco de não cobertura • Baixo custo de execução • Menor custo de execução possível Teste • Execução rápida • Execução mais rápida possível Automatizado • Reutilização total • Reutilização total • Sem interferências humanas • Sem interferências humanas Fonte: Bartié (2002, p.196) A equipe responsável pelos testes deve ter a preocupação de reduzir os riscos ao máximo e em cada uma das categorias (qua.4). 25 20 15 10 5 ad e O pe ra bi lid ad e lid Di sp on ib i Us ab ilid ad e nç a gu ra Se an ce Pe rfo rm Fu nc io na lid ad e 0 Gráfico 8 – Risco de teste numa aplicação de TI tradicional Fonte: Molinari (2003, p.180) Como já mencionamos anteriormente, o nível de importância de cada categoria pode mudar em função do projeto e dos riscos envolvidos. 47 Essas diferenças podem estar no formato da aplicação em si, ou seja, se é um projeto de software ou site web. Mesmo na escolha do titulo deste trabalho tivemos a preocupação de enfatizar essa diferença. Molinari (2003, p.180) realça essa diferença ao apresentar uma maior distribuição dos riscos nos projetos web (gra.8 e gra.9). Quando comparamos uma aplicação web com uma aplicação que funciona sobre uma estrutura cliente/servidor as diferenças na distribuição dos riscos diminuem. 14 12 10 8 6 4 2 de ns Ite tu ra Us ab ilid Di ad sp e Lo on ca ib ilid liz aç ad ão e Pó sen tre ga -e st ru gr aç ão In fra In te do Si te nç a ac e rm Pe rfo ce an Pe rfo rm gu ra Se es id R da Fu nc io na lid ad e ên cia 0 Gráfico 9 – Risco de teste numa aplicação web Fonte: Molinari (2003, p.181) Uma “boa pratica” em testes é separar a equipe que testa da equipe que desenvolve. Pensando nisso muitas empresas contratam uma FSW (fábrica de software) para desenvolver e uma FTS (fábrica de testes) para testar. Isso não significa que a FSW não vai fazer testes, ela inclusive se preocupa bem mais com os erros em uma situação assim, pois, caso a FTS ache erros, a FSW, além de ter o custo de consertá-los, arca com o custo de reenvio a FTS para o re-teste. 48 A FSW é responsável, principalmente, pelos testes de unidade, integrado e de sistemas. Esses testes não são feitos pela FTS, mas podem passar pela inspeção desta. Segue abaixo um quadro com um exemplo de distribuição de esforço para as atividades da FTS: Tabela 5 – Distribuição do esforço em testes PROJETO Atividade Percentual de Esforço Auditoria de Código-Fonte --Inspeção de artefatos de teste 5% Planejamento de Teste 32% Execução e Evidenciação de Teste sobre uma 28% entrega parcial de software Execução e evidenciação de teste de Aceite de um Serviço de Desenvolvimento e/ou Manutenção de 22% Software Publicação de Ocorrências de Teste 3% Automatização de teste 10% Fonte: Carvalho (2008, s.16) MANUTENÇÕES Percentual de Esforço --5% 15% 30% 35% 5% 10% Quando a empresa contratante resolve adotar um ambiente ativo para homologação, a FTS pode ser contratada para a tarefa de montar nesse ambiente os mesmos sistemas que se encontram em produção. A distribuição de esforço para essa tarefa pode ser visto a seguir: Tabela 6 – Distribuição do esforço em legados (implantação) Atividade Percentual de Esforço Planejamento de Teste 20% Acompanhamento da montagem do sistema no 30% ambiente de homologação Execução e evidenciação de teste sobre sistema 40% legado Automatização de teste 10% Fonte: Carvalho (2008, s.17) Consideremos o seguinte exemplo: A FSW vai desenvolver um projeto 700 PF (pontos de função). Considerando que a FTS cobra R$ 50,002 para uma produtividade de 3 pf/h (pontos de função por hora) em caso de projetos novos, teremos um custo total, com um processo automatizado de testes, de R$ 93.340,00, veja o Anexo G. No Anexo H e I, apresentamos exemplos de cálculos sobre serviços 2 Os valores são fictícios, mas muito próximos do que é cobrado no mercado atualmente (Set/08). 49 de manutenção e preparação de ambiente, respectivamente. Os valores calculados em horas podem ser utilizados facilmente na montagem de cronogramas em programas como o MS Project da Microsoft. Vimos até aqui diversas razões para optar pelo processo de testes automatizado, mas quando nos deparamos com um custo de quase cem mil reais é natural ter certo receio. Afinal sabemos agora quanto custa, mas não sabemos quanto dinheiro economizamos ao adotar essa prática. Molinari (2003, p.40) propôs a seguinte fórmula para medir o custo de um defeito encontrado: Custo médio do defeito = (nº de pessoas envolvidas * nº de dias gastos) * custo por pessoa-dia (nº de defeitos resolvidos) Esta fórmula pode ajudar a complementar as avaliações de custos futuros com base em dados históricos e estimar uma produtividade em pontos de função, mas não chega a dizer quanto economizamos com o uso dos testes. Isso não significa que este tipo de informação não deva ser registrada, podemos inclusive usar ferramentas bug tracking para esse trabalho, conforme aconselha Ungarelli (2007): É desejável, para o acompanhamento e controle dos bugs registrados, a utilização de uma ferramenta de bug tracking assim, características importantes de um registro poderão ser facilmente resgatadas. Seguem algumas características importantes: gravidade do bug, prioridade do bug, status, versão do software ou artefato, a fase que bug ocorreu, histórico, relator e responsável pela resolução, etc. Da mesma forma que acreditamos que não é possível automatizar tudo também acreditamos que não é preciso medir tudo, para não tornar essa tarefa burocrática e cara demais. Todo o esforço para encontrar, mensurar, quantificar e analisar falhas em uma aplicação só vai fazer sentido se o erro for corrigido, Molinari (2003, p.52) lembra bem o caso do processador Pentium da Intel que apresentou um Bug em 1994. A Intel havia descoberto o problema através de seus engenheiros de teste, antes do chip ser lançado, porém, por decisão gerencial, houve o lançamento do produto, pois 50 havia o entendimento que o problema não era severo. Por exemplo, ao tentar fazer o cálculo: (4.195.835 / 3.145.727) * 3.145.727 / 4.195.835 Se a resposta fosse zero3, o computador funcionava; caso contrário, aparecia um “bug” no chip que travava a máquina. No dia 30 de outubro de 1994, Dr. Thomas R. Nicely do Lynchburg College (Virginia - EUA) rastreou um resultado inesperado devido a problemas de divisão. O problema foi jogado na internet, mas a Intel não considerava um “bug” de fato e ela tentou vender isso a imprensa, mas acabou amargando um prejuízo de mais de US$ 400 milhões com reposição de chips. Queremos ilustrar com essa história que os testes feitos pelos engenheiros da Intel, certamente, custaram bem menos que os milhões gastos na substituição dos processadores. O custo dos testes pode ter sido mais baixo do que se imagina, caso a falha tenha sido identificada no inicio do processo, conforme principio de Myers (gra.6), pois não ficou claro em que momento o erro foi encontrado nos laboratórios da Intel. Brito (2000, p.47), chama a atenção para o simples ato de fazer uma conferência do que foi realizado em determinada etapa. Ela cita um caso em que uma revisão de requisitos foi efetuada com a participação do seguinte quadro de funcionários: Tabela 7 – Custos das atividades de uma revisão Profissional Quantidade Custo/Hora Tempo Estimado Analista Pleno 3 28,11 04:30 Programador 1 21,48 04:30 Líder de Projeto 1 36,28 06:00 Total Fonte: Brito (2000, p.47) 3 O cálculo dessa equação retorna 1 nos processadores atuais Total 379,49 96,66 217,68 693,83 51 Essa tabela tem o objetivo de fornecer rapidamente a informação sobre os custos despendidos com uma revisão. Ainda que fossem realizadas 5 revisões, um número exagerado, para uma única especificação de requisitos, o custo de R$ 3.469,05 é aceitável se comparado ao valor do projeto que estava em questão (R$ 827.608,20), pois as revisões evitam que, no momento da homologação, sejam descobertos erros de requisitos funcionais que inviabilizam sua implantação. Causando assim um prejuízo maior na forma de retrabalho, caso o cliente ainda deseje o produto e concorde em aguardar sua correção. Brito não cita como essa verificação foi feita, pois ainda podemos encontrar diferenciais entre a forma manual e automática nessa questão. Veja o quadro a seguir: Quadro 9 – Alternativas na conferência dos testes Conferências Manuais Conferências Automatizadas • Planejamento mais simples • Planejamento mais complexo • Maior custo de re-execução • Menor custo de re-execução • Execução mais lenta • Execução mais rápida • Reutilização zero • Reutilização total • Sem interpretações humanas • Com interpretações humanas Fonte: Bartié (2002, p.198) Nas fases iniciais pode ser preferível adotar conferências manuais, como a revisão de requisitos. Principalmente quando não temos a intenção de fazer uma nova verificação. 3.1.1 Adquirindo uma ferramenta Existem opções para empresa de qualquer porte, desde caríssimos “elefantes brancos” até as chamadas Open Source. Quando a dúvida aparece Molinari (p.109114) sugere fazer o seguinte: • Definir requerimentos iniciais (Quais problemas a ferramenta deve resolver? Que recursos a ferramenta precisa ter para ser efetiva no seu ambiente? Quais são suas regras de utilização, custo, etc?) 52 o Itens de compatibilidade (sistema operacional, linguagem de programação, outros softwares) o Audiência com a ferramenta (Solicitar uma apresentação da ferramenta; Quem usará a ferramenta no dia-a-dia? Quanto é necessário em tempo e energia para treinamento? Como se espera que a automação de testes seja paga?) o Regra financeira (Determinar o budget (orçamento) antes de ir as compras; Inclui quantas licenças, treinamento, manutenção e implementação?; Necessidade de aquisição de máquinas exclusivas para testes; Quais os benefícios esperados, são quantificáveis e mensuráveis? Qual o ROI (returno of investiment)) o Requerimento de negócio (veja Anexo J) • Investigar as opiniões (Internet, NewsGroups, literatura disponível, veja o que outras pessoas adotaram, em que a ferramenta é melhor ou pior que a concorrência?) • Refinar os seus requerimentos (discuta com quem vai usar) • Refinar a lista (selecione as três melhores com base na lista de requerimentos) • Avaliar os finalistas (ver os softwares de demonstrações ou hands-on) • Implantação da ferramenta escolhida (treinamento, piloto, inicie medições, acompanhe o processo, comunicação clara) As ferramentas Open Source tem como positivo o preço, mas as soluções comerciais4 se defendem argumentando que as ferramentas gratuitas não oferecem integração. Entre as ferramentas Open Source o OpenSta da Cyrano tem oferecido alguma integração, mas ainda é limitado. Apesar dessas limitações o Watir (Web Application Testing in Ruby) e o Selenium tëm ganhado força no mercado. Entre os grandes fornecedores de soluções comerciais temos a integração como ponto positivo e negativo o preço e adequação. Outras ferramentas serão mencionadas mais adiante. 4 Vamos chamar de solução comercial as ferramentas que não são gratuitas. 53 3.2 TIPOS DE AUTOMAÇÃO Da mesma forma que não há um consenso entre os autores sobre os tipos de testes, suas classificações e inter-relações, o mesmo ocorre com os tipos de automação, mas concordamos em dizer que “As principais técnicas de automação de teste apresentadas na literatura são: record & playback, programação de scripts, data-driven e keyword-driven.” (FANTINATO, 2004, p.2). Vamos apresentar também a visão de outros autores. Caetano (2007) agrupou os tipos de automação em dois paradigmas, os testes baseados na interface gráfica e os baseados na lógica de negócio. Veja o quadro a seguir que apresenta as vantagens e desvantagens de cada um: Quadro 10 – Tipos de automação Vantagens Desvantagens Não requer modificações na aplicação Existe uma forte dependência da para criar os testes automatizados. estabilidade da interface gráfica. Se a Também não é necessário tornar a interface gráfica mudar, os testes aplicação mais fácil de testar falham. Baixo desempenho para testes (testabilidade) porque os testes se automatizados que exigem centenas de baseiam na mesma interface utilizada milhares de repetições, testes de pelos usuários. funcionalidades que realizam cálculos complexos, integração entre sistemas diferentes e assim por diante. Baseado na Foco na camada onde existe maior Requer grandes modificações na Lógica de probabilidade de existir erros. aplicação para expor as Negócio Independência das mudanças da funcionalidades ao mundo exterior. interface gráfica. Alto desempenho para Exige profissionais especializados em testes automatizados que exigem programação para criar os testes centenas de milhares de repetições, automatizados. Existem poucas testes de funcionalidades que realizam ferramentas/frameworks que suportam cálculos complexos, integração entre essa abordagem (normalmente é sistemas diferentes e assim por diante. necessário criar soluções caseiras). Fonte: Caetano (2007) Paradigma Baseado na Interface Gráfica Molinari (2003, p.107-108) reconhece que não há uma unanimidade no mercado em relação aos tipos de ferramentas de teste existentes e que não existe uma classificação “mínima”, mas ele defende a existência de duas correntes. Uma comercial, que foca as funcionalidades, e outra acadêmica, que foca a forma básica de concepção (Anexo K). 54 Segundo Bartié (2002, p.181) a automação, que é desenvolvida em paralelo ao desenvolvimento da aplicação principal, pode ser classificada em dois tipos de componentes de testes fundamentais: controladores e simuladores. Os controladores de testes (Test-drivers) servem para testar uma unidade de software, disparando chamadas com os mais variados cenários existentes. Já os simuladores (Stubs) testam tanto software quanto hardware, criando artificialmente “respostas simuladas” que imitam conversas entre aplicativos, como, por exemplo, o teste de uma máquina que faz cálculos com base na velocidade do vento, ao invés de produzir o vento é melhor alimentar a máquina com as mais variadas velocidades do ar para concluir os testes mais rapidamente e de forma mais completa, pois poderemos simular todas as possibilidades. Bartié (2002, p.185-192) separa componentes de ferramentas de testes (que ele também chama de CAST, Computer-Aided Software Testing), para ele as ferramentas de testes podem ser classificadas em cinco categorias, com suas respectivas características: • Planejamento de testes o Análise de criticidade – prioriza testes, estima tempo, custo e equipes; o Gerador de documentos – gestão de versão, organiza work-flow de preparação, elaboração, inspeção e aceite de documentos. • Revisões e inspeções o Análise de complexidade – auxiliam na identificação de áreas complexas, a experiência diz que em 20% está 80% dos problemas; o Compreensão de código – auxilia a inspeção de código-fonte; o Análise sintática e de semântica – localiza erros de sintaxe que o compilador não detecta. • Modelagem e automação o Modelagem de testes – planeja e constrói os testes identificando os cenários de teste; o Gerador de massa de dados; o Automatizador de scripts. • Execução e conferência 55 o Executor de scripts; o Análise de cobertura – usado nos testes caixa branca para identificar áreas do código não cobertas pelos testes em execução; o Testadores de memória – detecta problemas de uso e alocação de memória; o Simuladores e medidores de performance – destinam-se aos testes de carga, volume e performance. • Suporte aos testes o Gerenciamento de defeitos – produz indicadores diversos de qualidade; o Gerenciamento de configurações – controla mudanças em documentação, fontes e ambientes físicos. Carvalho e Filho (2005) fazem distinção entre ferramentas usadas em plataforma alta (mainframe) e plataforma baixa (Windows e Sun). Ambas são semelhantes na automação que executa as mesmas ações de um usuário on-line e na necessidade de programação. Quanto às diferenças, podemos citar que o teste automatizado na plataforma alta pode ser executado em batch, ou seja, não há necessidade de uma estação dedicada ao teste e os objetos a serem automatizados na plataforma alta obedecem a padrões rígidos, característicos dessa plataforma, enquanto que os da plataforma baixa estão em constante processo de evolução. Caetano (2007) também faz referência à filosofia apresentada pelo "Guide to the CSTE Common Body of Knowledge" do QAI que diz: apesar de não existir uma categorização amplamente difundida das ferramentas de teste, a experiência tem mostrado que elas são normalmente agrupadas em 8 áreas distintas: 1. Ferramentas de automação de testes de regressão; 2. Ferramentas para gestão de defeitos; 3. Ferramentas para testes de performance/stress; 4. Ferramentas manuais; 5. Ferramentas de rastreabilidade; 6. Ferramentas de cobertura de código; 7. Ferramentas para gestão de testes; 8. Ferramentas de apoio à execução dos testes. 56 Argollo (2008) defende ainda os testes baseados em modelos. Neste tipo os casos são derivados de um modelo que descreve as propriedades e características do sistema em teste. Este modelo fornece uma descrição do comportamento do sistema em avaliação. Conforme estimativa da Mark Utting, apresentada por Argollo, os testes baseados em modelos podem ser mais eficientes que as outras técnicas (gra.1) e no futuro ela pode se tornar uma das principais técnicas utilizadas pelo mercado. Caetano (2007) cita ainda os testes do tipo Interface de Linha de Comando (Command Line Interface - CLI) onde a interação ocorre através de um prompt ou shell do sistema operacional. A lógica de negócio da aplicação pode ser exercitada por meio da execução de um conjunto de comandos e parâmetros pré-determinados. Talvez você esteja pensando nos arquivos BAT do DOS, mas não é esse o caso. O objetivo da CLI é fornecer uma interface para o mundo exterior que não seja dependente da interface gráfica da aplicação, controlar a execução dos testes e apresentar os resultados. 3.2.1 Capture/Playback (Captura e executa) Quem já utilizou “macros” no Word ou Excel, tem uma boa idéia de como a técnica de Capture/Playback funciona. Ao acionar o recurso de gravação/captura (Record/Playback ou Capture/Playback) a ferramenta passa a fazer o registro de todos os passos do usuário, nesse momento devemos executar os casos de testes e interromper o processo de gravação quando desejarmos incluir verificações. Internamente a ferramenta terá criado um script com essas ações. 57 Da mesma forma que ocorre com as macros no Word e no Excel, podemos repetir todas as ações gravadas bastando executar o script criado. Podemos ver que a geração dos scripts é feita de forma rápida e fácil. Possibilitando que o automatizador não detenha conhecimento de programação e não onere a primeira execução dos testes trabalhando horas em scripts complexos (gra.3). Porém com o decorrer do tempo essa técnica não se mostra tão eficiente (gra.1). Quando optamos por um testador que não vai manipular os scripts ou até pelo fato da ferramenta não permitir essa manipulação, estamos condicionando a criação de novos scripts toda vez que precisarmos de novos testes ou quando algo for mudado na interface. Devido à falta de comandos de controle de fluxo e pela impossibilidade do uso de tabelas, um testador, que conhece programação, pode se deparar com uma quantidade muito grande de scripts para manipular. Segundo Correia (2004, p.6), a maioria das ferramentas que utilizam essa técnica interage com o standard Microsoft Foundation Class Library (MFC), ou seja, caso o sistema a ser testado esteja usando uma tecnologia diferente como, por exemplo, a Java Foundation Class Library, a ferramenta pode não funcionar. Por isso que algumas ferramentas também trabalham com o reconhecimento dos objetos através das coordenadas espaciais do ecrã. Correia também lembra que é possível usar essas ferramentas para testar stored procedures PL-SQL, a WebServices, aplicações servidoras ou um componente através de uma DLL, a solução passa pela criação de uma camada de interface gráfica standard simples, que possibilita a invocação dos serviços a serem testados. Através deste recurso, podemos dizer que essa técnica permite a execução e comparação automática de testes em todos os níveis: unidade, módulo, integração, sistema ou aceitação. 58 3.2.2 Scripts estruturados A técnica dos scripts estruturados permite a redução do código e sua reutilização, como também a possibilidade de organizar seu funcionamento em um framework que forneça funções básicas de automação. Necessita-se de um maior esforço do automatizador no início para a criação dos scripts, a compensação vem com a manutenção que é simples em caso de mudança na interface ou na adição de novos casos. O automatizador deve ter conhecimento de programação. Algumas ferramentas não possibilitam o uso de tabelas, ou seja, o conteúdo da ação do usuário deve estar no script (hard-coded). 3.2.3 Data-Driven (Técnica orientada a dados) Nesta técnica os casos de teste são armazenados em tabelas (Anexo L). A ferramenta usa scripts para ler os dados dessas tabelas e processar os casos de teste de acordo com o cenário definido (Anexo F). A grande vantagem desta técnica está em usar o mesmo script, sem alteração, para executar novos casos de teste semelhantes. Dependendo de como o script é escrito, as alterações na interface não causam grandes problemas, pois as ferramentas costumam usar “mapas de interface”. Segundo Fantinato (2004, p.7) esse mapa é um arquivo que contém nomes fictícios dos componentes da interface gráfica (GUI) da aplicação e as propriedades que os identificam unicamente. Este mapa é utilizado para que todo componente da GUI seja referenciado nos scripts e nas planilhas de teste por um nome que independa de mudanças da aplicação, com o objetivo de que as alterações introduzidas na 59 interface gráfica da aplicação impliquem, apenas, em atualizações no mapa de interface, preservando e tornando o teste mais robusto. O esforço necessário para desenvolvimento dos scripts aumenta devido a maior complexidade dos mesmos. 3.2.4 Keyword-Driven (Técnica orientada a palavras-chave) Essa técnica usa tabelas para armazenar os casos de teste e os scripts para ler as informações da tabela e processar os casos de teste. Cada tabela também contém dados de diversos cenários de teste. O diferencial está no uso de palavras-chave para referenciar scripts específicos (tab.8), isso possibilita uma maior flexibilidade para a definição de novos cenários de teste. Os testes também são definidos em termos de processos de negócios. Exige-se do testador um pouco mais de conhecimento em desenvolvimento de software do que a técnica anterior, data-driven, pois os scripts desenvolvidos são mais complexos. Cadastro Cadastro Transferência VerificaSaldo VerificaSaldo Fonte: Argollo (2008) Tabela 8 - Teste por palavras-chave Silva José 30.123-A Moraes Carlos 40.456-B 30.123-A 40.456-B 30.123-A 12.200,00 40.456-B 8.700,00 12.700,00 8.200,00 500,00 Na tabela keyword-driven anterior, à primeira coluna possui as palavras que fazem referência aos procedimentos (scripts, também conhecidos como scripts de suporte) previamente construídos para executar determinada rotina de teste. As colunas seguintes possuem os “parâmetros” que serão usados pela rotina (script). Por exemplo, “Transferência” é uma rotina encarregada de passar dinheiro de uma conta para outra e, para realizar essa tarefa, ela recebe como parâmetro a conta de origem (30.123-A), a conta de destino (40.456-B) e o valor a ser transferido (500,00). 60 Figura 6 - Aplicação da técnica keyword-driven Fonte: Adaptada de Fewster e Grahm (apud Correia, 2004, p.6) Na técnica keyword-driven temos portanto três estruturas básicas que são: o script de controle, os ficheiros de teste e os scripts de suporte (fig.6). Dentre as técnicas para a construção de testes automáticos as mais evoluídas são as data-driven e keyword-driven, que permitem reutilização (inclusive em sistemas diferentes) e flexíbilidade. Como mencionamos no tópico scripts estruturados é possível, a partir dos scripts, elaborar frameworks. Fantinato apresentou em seu trabalho o AutoTest, que usa uma técnica mista de automação de teste, chamada de técnica keyword-data-driven, definida a partir de duas outras técnicas de automação conhecidas, dessa forma ele aproveita o que há de melhor em cada uma delas. Neste framework também foi necessário usar o IBM Rational Test Manager, que é uma ferramenta de gerenciamento de projeto de teste que possibilita a integração com as demais ferramentas da suite de desenvolvimento da IBM Rational. Seu uso 61 possibilitou um melhor gerenciamento dos resultados e a obtenção de relatórios mais específicos e detalhados. O framework AutoTest foi desenvolvido sobre a plataforma IBM Rational Functional Tester for Java and Web, uma ferramenta de automação de teste que oferece suporte somente à programação e a execução de scripts de teste. Apesar de dar suporte nativo à técnica “record & playback” de automação de testes, o Functional Tester usa Java como linguagem dos scripts de teste, permitindo a aplicação de técnicas mais avançadas de programação de scripts – como a técnica keyword-data-driven. (FANTINATO, 2004, p.6). 3.2.5 Teste de estresse Podemos dizer que atualmente é impensável realizar um teste de stress de forma manual. Mas como funciona? Como é possível “imitar” o comportamento de centenas ou até milhares de usuários? 16 Tempo de resposta (segundos) 14 12 10 8 6 Gargalo 4 2 0 1 2 3 4 5 6 7 8 9 Número de usuários Gráfico 10 – Tempo de resposta x nº de usuários (como descobrir gargalos) Fonte: Molinari (2003, p.188) 10 62 Molinari (2003, p.187) afirma que no teste automatizado de stress a ferramenta cria usuários virtuais (Vu ou Vusers – Virtual User) e as situações de testes passam a ser cenários (Scenarios). Nos cenários de teste simula-se, por exemplo, uma carga de 10 usuários virtuais a cada 30 segundos até 1000 usuários e com o teste durando no máximo uma hora. Enquanto a avaliação ocorre a ferramenta registra diversas informações que podem indicar a presença de problemas durante a execução do teste, como por exemplo o aparecimento de gargalos (gra.10). Pode ser necessário um investimento adicional em hardware, dependendo da “potência” que se deseja atingir com o teste. Mas atenção para não confundir o desempenho do programa testado com o do servidor onde ele se encontra instalado. 3.3 FERRAMENTAS Neste tópico citaremos as ferramentas de teste e apresentaremos informações adicionais em alguns casos. 3.3.1 Suites JProbe Suite (http://www.quest.com/jprobe/) é um conjunto de três ferramentas, composto por: JProbe Profiler and Memory Debugger que ajuda a eliminar gargalos de execução causados por algoritmos ineficientes em códigos Java e aponta as causas de perdas de memória nessas aplicações, rastreando quais objetos seguram referências para outros; JProbe Threadalyzer, que monitora interações entre threads e avisa o testador quando essa interação representar perigo, bem como identifica potenciais perigos de concorrências e deadlocks; e JProbe Coverage, que localiza códigos não testados e mede quanto do código está sendo exercitado, permitindo ao testador estimar a confiança dos testes executados. Delamaro et al (2007, p.170). As principais suites são: • SilkTest: pertence a Segue, mas a empresa é controlada pela Borland (qua.16); 63 • Rational: IBM (qua.17); • QADirector: Compuware; • JProbe Suite: Quest Software; 3.3.2 Software Comentaremos agora as ferramentas de automação. Algumas, além de automatizar testes em software também trabalham com sites web. Começaremos por uma que apresenta essa característica. A WinRunner é desenvolvida pela Mercury Interactive, mas a empresa é controlada pela HP (Hewlett-Packard). Essa ferramenta cria uma lista com as propriedades físicas juntamente com os respectivos valores de atribuição, usados para identificação de cada objeto gráfico, formando o que é chamado de “descrição física” do objeto. A relação entre a descrição física e o nome lógico é mantida em arquivos chamados de GuiMap (veja a razão para a criação desses mapas no item 3.2.3 Data-Driven). A WinRunner utiliza a técnica Capture/Playback, mas as limitações referentes ao uso da MFC são resolvidas através de add-ins, isso é que possibilita o uso do WinRunner em aplicações Java, PowerBuilder, Visual Basic e aplicações Web. A ferramenta WinRunner também faz uso da técnica de script estruturado, ela possui uma linguagem estruturada, semelhante a C, chamada TSL (Test Script Language), Correia (2004, p.4). O HiperStation grava telas em seqüência num arquivo PDS que recebe um tratamento com uma linguagem de programação Rex. Ele é usado em plataforma alta e funciona com o EXTRA! Enterprise, da Attachmate Corporation. Os scripts criados no HiperStation são cadastrados no Control–M. 64 O Control-M é responsável por iniciar e controlar todo o fluxo de jobs (processos) que serão executados dentro da periodicidade e dependências que foram cadastradas dentro dele. Carvalho (2005). A QA-Teste, desenvolvida pela empresa brasileira RSI Informática, é utilizada em plataforma baixa, para auxiliar os processos de planejamento, criação, documentação e manutenção de massa de testes. Essa ferramenta é focada no planejamento e arquitetura de teste. Ela se integra as ferramentas de automação, em particular a QA-Run, da Compuware. O uso em conjunto dessas ferramentas ocorre da seguinte forma: • Geração de Massas de Dados e “Scripts Padrões” (QA-Teste); • “Filmagem” e Automatização (QA-Run); Dois scripts são gerados pelo QA-Teste. No primeiro estão as definições das variáveis conforme definidas na massa de testes e o caminho do arquivo de massa de testes gerado pelo QA-Teste. Nesse arquivo também existe um loop para executar cada caso. No segundo estão às referências das variáveis definidas no primeiro. Esse é o script usado para filmagem, e posteriormente para a automatização. As ferramentas QA Wizard e e-Test podem ser utilizadas exclusivamente com a técnica Record/Playback. Já as ferramentas Functional Tester, Robot, WinRunner, QuickTestPro, TestSmith5, QA-Run e SilkTest, além da funcionalidade de gravação de scripts de teste, oferecem uma linguagem de programação permitindo que a técnica de programação de scripts seja utilizada. Nenhuma delas oferecem suporte nativo às técnicas de automação de teste data-driven e keyword-driven, não trabalham diretamente com o conceito de mapa de interface. Apesar disso, algumas dessas ferramentas oferecem certa facilidade, em diferentes níveis, no uso da técnica data-driven, Fantinato (2004, p.6). 5 http://qualityforge.com/testsmith/index.html 65 Vale lembrar que Fantinato usou as técnicas data-driven e keyword-driven com a ferramenta IBM Rational Functional Tester for Java and Web através do framework AutoTest. TestMentor6 e JFunc7 (uma extensão funcional da ferramenta JUnit8 usada para a automação do teste de unidade) são ferramentas de suporte a automação de teste, ambas oferecem suporte por meio da criação de classes de teste que devem interagir diretamente com as classes do sistema, sendo compiladas e ligadas juntas, Fantinato (2004, p.14). O Visual Studio Team System, da Microsoft, permite automatizar a gerência da qualidade e o SDLC (Software Development Life Cycle). Ele “profissionaliza” o processo de testes com um pacote de ferramentas integradas de testes unitários, cobertura de código, análise estática de código e carga, além dos recursos de gerenciamento, Microsoft (2008). 3.3.3 Sites web O Watir tem se destacado entre as ferramentas para automação de testes em sites web. Existem vários fóruns na internet com milhares de participantes que interagem entre si tirando dúvidas e trocando dicas sobre a operação da ferramenta e da linguagem Ruby (linguagem de scripts utilizada pelo Watir). Esta popularização é um fator a mais para as empresas escolherem essa ferramenta, pois se torna mais fácil encontrar profissionais qualificados no mercado, dispensando assim o custo com treinamento. O Watir pode ser melhorado com o add-on Test-Report e a extensão WET, ambos servem para gerar relatórios dos testes. Diferente de frameworks Java, como o HttpUnit e o JWebUnit, o Watir realmente abre um browser Internet Explorer e vai 6 http://www.javatesting.com/Product/java/stm/index.html JUnit Functional Testing Extension (http://jfunc.sourceforge.net/) 8 Ferramenta para execução de testes unitários e integrados em JAVA 7 66 realizando ações, ele ainda não funciona com outros browsers. O Firefox, da Mozilla, possui uma extensão chamada Web Developer que ajuda a implementar os testes funcionais, Papo (2005). A ferramenta ReWeb é usada para obter e analisar as páginas da aplicação web, gerando a instância do metamodelo UML. O TestWeb gera e executa o conjunto de casos de teste, conforme a instância do metamodelo UML gerado pela ReWeb e o critério de teste que será empregado. Após a execução dos casos de teste, o testador avalia os resultados obtidos, isto é, verifica se a saída obtida está correta para determinada entrada. A ferramenta também fornece uma saída numérica especificando o nível de cobertura alcançado pelo conjunto de teste. A ferramenta denominada WAT (Web Application Testing), implementa as funções necessárias à geração de casos de teste, execução do conjunto gerado e avaliação dos resultados obtidos com o processamento. A WAT utiliza a análise estática de uma aplicação web resultante da execução da ferramenta WARE, que realiza engenharia reversa da aplicação. Delamaro et al (2007, p.227-228). O Fitnesse liga uma página web de um wiki ao seu sistema sob teste, através de classes de negócio ou da interface do usuário. Esse modo de trabalho aumenta a colaboração entre clientes e os desenvolvedores do sistema. Um projeto que possui a filosofia data-driven e não a record/playback é o da ferramenta Canoo WebTest. Ela utiliza como fundamento o HtmlUnit e os testes são escritos através de arquivos XML, Papo (2005). 3.3.4 Estrutural “A aplicação de critérios de teste sem o apoio de ferramentas automatizadas tende a ser uma atividade propensa a erros e limitada a programas muito simples.” (DELAMARO ET AL, 2007, p.65). 67 A RXVP80 e a TCAT, apóiam a aplicação de critérios estruturais baseados somente no Grafo de Fluxo de Controle. A ferramenta RXVP80, distribuída pela General Research Corporation, é um sistema que realiza basicamente a análise de cobertura do teste de arcos em programas escritos em Fortran. A ferramenta TCAT (Test-Coverage Analysis Tool), distribuída pela Software Research Corporation, realiza o teste de unidades segundo o critério Teste de Ramos Lógicos (arcos). A ferramenta SCORE apóia o teste de arcos de programas escritos em Pascal, tendo sido desenvolvida na Hitachi. A POKE-TOOL (Potential Uses Criteria Tool for Program Testing) apóia a aplicação de critérios no teste de unidade de programas escritos na linguagem C e encontrase disponível em ambiente UNIX. A versão mais recente está disponível na Incubadora Virtual da FAPESP (http://incubadora.fapesp.br/projects/poketool/), Delamaro et al (2007, p.65-69). 3.3.5 Mutação Para apoiar o teste de mutação em POO, Alexander et al (apud DELAMARO ET AL, 2007, p.172), propuseram a arquitetura de uma ferramenta, denominada Object Mutation Engine – OME, que implementa um subconjunto dos operadores de mutação no teste de classes Java. A Mutation Testing System implementa parte do conjunto de operadores de mutação. A ferramenta utiliza o framework JUnit para documentar e executar de forma automática os casos de teste, determinando o número de mutantes mortos e o escore de mutação obtido, Delamaro et al (2007, p.173). 68 A ferramenta Mothra foi desenvolvida por pesquisadores da Purdue University e do Georgia Institute of Technology e é utilizada em programas Fortran 77, Delamaro et al (2007, p.97). A Proteum é similar à Mothra, porém destina-se a linguagem C e possui algumas facilidades para processamento bacth, Delamaro et al (2007, p.98-99). 3.3.6 Orientados a objetos e de componentes A seguir será apresentada uma breve descrição, parcialmente extraída do trabalho de Domingues (apud DELAMARO, 2007, p.169-173), é uma série de ferramentas comerciais e não comerciais que se encontram disponíveis para o teste de POO e algumas também destinadas ao teste de componentes, principalmente para o teste de programas escritos em C++ e Java. A ferramenta de teste PiSCES (Coverage Tracker for Java) é utilizada em teste de applets Java. PiSCES é uma ferramenta de medida de cobertura (comandos e decisões) que identifica quais partes do código-fonte já foram exercitadas durante a avaliação e quais ainda precisam ser. TCAT/Java e JCover servem para cobertura de comandos e decisões para applets Java. Parasoft C++ Test é utilizada em teste de unidade para códigos C/C++. Parasoft Insure++ trabalha na detecção de defeitos em tempo de execução para códigos C/C++ e acelera as tarefas de depuração. ProLint Advanced Graphical Lint verifica os módulos de uma aplicação com o objetivo de encontrar defeitos e inconsistências para mais de 600 tipos de problemas, proporcionando maior confiabilidade e portabilidade de códigos C/C++. 69 Rational PureCoverage faz análise de cobertura (comandos e decisões) para códigos C++ e Java. Rational Purify detecta defeitos em tempo de execução para códigos C/C++. Como a Rational PureCoverage, essa ferramenta permite ao testador escolher o nível de verificação por módulos. JaBUTi seu diferencial é a não-exigência da disponibilidade do código-fonte para a realização dos testes. A ferramenta trabalha diretamente com bytecode Java e apóia a aplicação dos critérios Todos-Nós, Todas-Arestas, Todos-Usos e TodosPotenciais-Usos no teste intramétodos. Component Test Bench (CTB), pode ser utilizada no teste de componentes de software. A ferramenta fornece um padrão genérico que permite ao desenvolvedor do componente especificar o conjunto de teste utilizado na avaliação de um dado componente. O conjunto de teste é armazenado em um arquivo XML (eXtensible Markup Language) e executado por meio de uma ferramenta que compõe o CTB, denominada IRTB (Instrumented runtime system), ou eles podem ser executados invocando-se a execução de uma máquina virtual Java, ou ainda, compilando e executando programas em C ou C++. Parasoft JTest testa classes para códigos Java. A principal diferença entre JTest e CTB é que JTest utiliza o framework JUnit para armazenar e executar os casos de teste automaticamente, enquanto CTB armazena os casos em arquivos XML. Glass JAR Toolkit (GJTK) é uma ferramenta de teste de cobertura que opera diretamente no bytecode Java e não requer o código-fonte para aplicar critérios de fluxo de controle (cobertura de comandos e decisões) em bytecode Java. Nas ferramentas que permitem avaliação de cobertura de código por meio de critérios estruturais, todas apóiam somente o teste de fluxo de controle (cobertura de comandos e decisão) em POO. Nenhuma delas apóia a aplicação de algum critério de fluxo de dados, seja para o teste de unidade, integração ou sistema. Com exceção da ferramenta GlassJAR e as que apóiam o teste funcional, todas as 70 demais necessitam do código-fonte para a aplicação dos critérios, dificultando sua utilização no teste estrutural de componentes de software por parte dos clientes, que em geral, não têm acesso ao código-fonte. 3.3.7 Orientados a aspectos A ferramenta JaBUTi/AJ é uma extensão da ferramenta Java Bytecode Understanding and Testing (JaBUTi) proposta para o teste de POO escritos em Java. JaBUTi/AJ foi estendida para testar a estrutura das unidades de programas OA (orientados a aspectos) escritos em AspectJ, utilizando os modelos e critérios descritos na seção anterior, Delamaro et al (2007, p.198). 3.3.8 Concorrentes Segundo Delamaro et al (2007, p.246-249), a maioria das ferramentas existentes auxilia a análise, a visualização, o monitoramento e a depuração de um programa concorrente. Exemplos dessas ferramentas são: TDCAda que apóia a depuração de programas na linguagem ADA, utilizando execução determinística; ConAn (ConcurrencyAnalyser), que gera drivers para o teste de unidade de classes de programas concorrentes Java; e Xab, MDB e Paragraph para programas escritos em ambiente de passagem de mensagens. Xab e Paragraph objetivam o monitoramento de programas PVM e MPI, respectivamente. A ferramenta Della Pasta (Delaware Parallel Software Testing Aid) permite o teste de programas concorrentes com memória compartilhada. STEPS e Astral são ferramentas que apóiam a visualização e a depuração de programas PVM. Ambas geram caminhos para cobrir elementos requeridos por critérios estruturais baseados em fluxo de controle. 71 ValiPar permite que programas em diferentes ambientes de passagem de mensagens sejam testados. Atualmente, a ferramenta encontra-se configurada para PVM e MPI. Quadro 11 – Ferramentas de teste/depuração para programas concorrentes Fluxo de Fluxo de Execução Ferramenta Depuração dados controle controlada TDC Adaa ConAnb Della Pastac d Xab Visitd MDBd STEPSd Astrald e XMPI Umpiree ValiPard, e a b c d e Ada, Java, Shmem, PVM, MPI Fonte: Delamaro et al (2007, p.249) O quadro 17 sintetiza as principais características das ferramentas existentes para apoiar a atividade de teste de programas concorrentes. 3.3.9 Open Source Nos tópicos anteriores também foram citadas ferramentas gratuitas para automação de testes. Citaremos mais algumas, adicionando comentários as já citadas. PMD é utilizada para auditoria de código fonte Java; Selenium é uma ferramenta GE para sites web; Fitnesse e o Watir, trabalham respectivamente com tabelas e palavras-chave; Jmeter faz avaliação de desempenho. JUnit é um framework de teste que vem sendo muito utilizado e viabiliza a documentação e a execução automática de casos de teste. Quando se analisa o Anexo O observa-se que o framework JUnit é uma das ferramentas que pode ser utilizada tanto para o programa quanto para o teste de componentes de software 72 desenvolvidos em Java, mas tal ferramenta apóia apenas a execução automática de casos de teste e realização de testes funcionais, sem apoio de nenhum critério de teste específico e não fornecendo informação sobre a cobertura de código obtida por determinado conjunto de teste. Outra ferramenta que também apóia somente o teste funcional é a CTB, Delamaro et al (2007, p.171 e 173). 3.3.10 Faça você mesmo Não existindo a intenção de produzir um produto melhor para o mercado, não há motivo para “reinventar a roda”. Além dos custos com o desenvolvimento da aplicação outros gastos irão surgir, como por exemplo, os gastos com treinamento, pois não há conhecimento no mercado sobre a ferramenta e também não haverá fóruns na internet com dicas sobre o produto. Caso a empresa decida optar pelo desenvolvimento de uma nova ferramenta, ela pode começar pelo estudo da API (Application Programming Interface ou Interface de Programação de Aplicativos) que representa um conjunto de operações expostas por uma aplicação, a fim de permitir que outras aplicações possam acessar ou consumir as suas funcionalidades, esse recurso será útil na criação de ferramentas captura/executa. A técnica de automação OLE também pode ser usada, porém esse recurso necessita que o desenvolvedor especifique com qual aplicação a ferramenta deve estabelecer um vínculo. O objetivo de uma API é fornecer uma interface para o mundo exterior que não seja dependente da interface gráfica da aplicação. A automação de testes baseada na API faz uso dessa característica para orquestrar a execução dos testes. Uma das vantagens advindas do uso de uma API é que a aplicação externa que consome as operações expostas, não precisa conhecer em detalhes como essas operações são implementadas. (CAETANO, 2007). Caso a ferramenta seja desenvolvida para avaliar sites web é mais adequado analisar o resultado do conteúdo do arquivo e não o que é apresentado na tela. Por exemplo, um GIF pode ficar mudando sua aparência, mas uma instrução <IMG SCR=”arquivo.gif”> será sempre a mesma. 73 CONSIDERAÇÕES FINAIS Com o resultado dessa pesquisa passamos a conhecer os problemas da imprecisão e morosidade dos testes manuais em contra ponto ao aumento do tamanho e da complexidade dos programas. Conhecemos também os vários tipos de testes e examinamos as principais técnicas utilizadas na automação. Identificamos que a muito a se considerar em um processo de testes e que devemos planejá-los desde o início do projeto de desenvolvimento, como também a necessidade de uma prévia estruturação de todo o processo (técnicas, frameworks, ambientes, baselines, etc). Esperamos que essa pesquisa tenha contribuído para orientação daqueles que estão iniciando seu caminho em testes e que ela possa poupar seus esforços na busca pela informação. Fizemos um levantamento sobre ferramentas para todos os bolsos, mas esperamos tê-lo conscientizado de que nem sempre esse é o principal custo de toda a operação e a busca pelo equilíbrio entre os pilares custo, prazo e qualidade irá acompanhá-lo em seu dia-a-dia na área de testes. Vimos que a oferta das ferramentas, sob a estratégia caixa-branca, é determinada pela linguagem usada no desenvolvimento e que a estratégia caixa-preta pode oferecer soluções conjuntas para software e sites web. Também recomendamos a escolha de ferramentas que possam combinar as técnicas de capture/playback, data-driven, keyword-driven e scripts, seja com ou sem o uso de frameworks, além de chamar a atenção para o refinamento e reutilização dos scripts e dos casos de testes, como também para o futuro da técnica “modelo de dados”. Identificamos a importância das ferramentas para geração automática de casos e massa de teste e para os testes de stress. Por último, sugerimos uma visita ao BSTQB (http://www.bstqb.org.br/), este órgão apresenta em seu site o material necessário à certificação de profissionais de teste, e leitura dos artigos sobre testes da Java Magazine e da recém lançada revista Testing Experience (http://www.testingexperience.com/). 74 REFERÊNCIAS BIBLIOGRÁFICAS ARGOLLO, Miguel. Automação de testes: Características, vantagens e limitações. Trabalho apresentado durante o SBQS 2008 – VII SIMPÓSIO BRASILEIRO DE QUALIDADE DE SOFTWARE, Florianópolis, jun. 2008. BARTIÉ, Alexandre. Garantia da qualidade de software: Adquirindo maturidade organizacional. Rio de Janeiro: Elsevier, 2002. BORLAND. Automação de testes de software. [S.l.]: Borland, 2008. Disponível em: <http://www.borland.com/br/solutions/lifecycle-quality-management/test-automati on.html>. Acesso em: 10 ago. 2008, 12:13:40. ______. Gerenciamento da qualidade do ciclo de vida. [S.l.]: Borland, 2008. Disponível em: <http://info.borland.com.br/silk/>. Acesso em: 31 ago. 2008, 11:50:45. BRITO, Rosane Deganeli de. Do ambiente de desenvolvimento ao ambiente de produção: Os testes de software como garantia da qualidade. Osasco: Universidade Cândido Mendes, 2000. CAETANO, Cristiano. Automação e gerenciamento de testes: Aumentando a produtividade com as principais soluções Open Source e gratuitas (2a edição). [S.l.]: Linha de Código, 2007. Disponível em: <http://www.linhadecodigo.com.br/Artigo.asp x?id=1566>. Acesso em: 10 ago. 2008, 12:12:24. ______. Introdução à automação de testes funcionais. [S.l.]: TestExpert, 2007. Disponível em: <http://www.testexpert.com.br/?q=node/178>. Acesso em: 10 ago. 2008, 12:02:26. CALLERI, Mário. Qualidade de software no desenvolvimento de sistemas corporativos. Rio de Janeiro: Centro Educacional de Realengo, 2005. CARVALHO, Cláudio et al. Apresentação EPD: Disciplina de teste. Rio de Janeiro: REDEA/RJ, 31 mar. 2008. CARVALHO, Cláudio; FILHO, Francisco de J.R. Automação dos processos de testes. Rio de Janeiro: REDEA/RJ, 16 nov. 2005. CORREIA, Simone; SILVA, Alberto. Técnicas para construção de testes funcionais automáticos. [S.l.]: Instituto Português de Qualidade, 2004. Disponível em: <http://isg.inesc-id.pt/alb/static/papers/2004/n12-sc-Quatic2004.pdf>. Acesso em: 13 set. 2008, 14:58:32. DELAMARO, Márcio Eduardo; MALDONADO, José Carlos; JINO, Mario. Introdução ao teste de software. Rio de Janeiro: Elsevier, 2007. EUDESCOSTA. Automação de testes, uma tendência. [S.l.]: TestExpert, 2008. Disponível em: <http://www.testexpert.com.br/?q=node/990>. Acesso em: 14 set. 2008, 21:52:12. 75 FANTINATO, Marcelo et al. AutoTest – Um framework reutilizável para a automação de teste funcional de software. [S.l.]: SBC – Sociedade Brasileira de Computação, 2004. Disponível em: <http://www.sbc.org.br/bibliotecadigital/download.php?paper=2 55>. Acesso em: 10 ago. 2008, 12:03:26. HETZEL, William. Guia completo ao teste de software. Rio de Janeiro: Campus, 1987. IBM. Gerenciamento de qualidade de software. [S.l.]: IBM, 2008. Disponível em: <http://www-142.ibm.com/software/dre/ecatalog/list.wss?locale=pt_BR&subcatego ry=J107030V33347X46>. Acesso em: 31 ago. 2008, 11:56:30. MENDES, Alvaro. Novo ASC [mensagem pessoal]. Mensagem recebida por <[email protected]> em 25 ago. 2008. MICROSOFT. Test Edition. [S.l.]: Microsoft, 2008. Disponível em: <http://msdn.mi crosoft.com/pt-br/library/ms182409.aspx>. Acesso em: 31 ago. 2008, 11:54:30. ______. Usando automação de interface do usuário para testes automatizados. [S.l.]: Microsoft, 2008. Disponível em: <http://msdn.microsoft.com /ptbr/library/aa348551.aspx>. Acesso em: 16 ago. 2008, 19:57:40. MOLINARI, Leonardo. Testes de software: Produzindo sistemas melhores e mais confiáveis. São Paulo: Érica, 2003. OSHIRO, Ângela dos Santos. Gerência de projetos. Vila Velha: Escola Superior Aberta do Brasil, 2007. PAPO, José Paulo. Ferramentas para automação de testes. [S.l.]: José Papo Weblog, 2005. Disponível em: <http://josepaulopapo.blogspot.com/2005/11/ferramen tas-para-automao-de-testes.html>. Acesso em: 10 ago. 2008, 11:59:28. RSI Informática. Uso da ferramenta QA-Teste para controlar massas de teste. Rio de Janeiro: REDEA/RJ, dez. 2005. UNGARELLI, Adriano. Teste de software como controle de qualidade. [S.l.]: Via6, 2007. Disponível em: <http://www.via6.com/topico.php?tid=90539&cid=6042>. Acesso em: 31 ago. 2008, 12:00:20. WIKIPÉDIA. Código aberto. [S.l.]: Wikipédia, 2008. Disponível em: <http://pt.wikipedia.org/wiki/Open_source>. Acesso em: 17 ago. 2008, 13:56:44. 76 GLOSSÁRIO Varias das definições a seguir foram extraídas do site Wikipédia (http://pt.wikipedia.org/). Add-On ou Add-In – é o nome que se dá a um recurso ou acessório que melhora ou aperfeiçoa a coisa à qual ele é acrescentado em utensílios eletrônicos. A expressão é usada para softwares e hardwares em geral, mas é bastante típica de jogos para computador (ou videogames) e consolas para videojogos. Análise estática – a idéia é a mesma da auditoria de código, trata-se de uma verificação da estrutura do código e das nomenclaturas de variáveis, funções, objetos, entre outras atividades. Bug – Defeito, falha no software ou site. Engenharia reversa – elaborar a documentação de um sistema a partir dele próprio (da operação do programa concluído). Framework – captura a funcionalidade comum a várias aplicações. Elas devem pertencer ao mesmo domínio de problema. Grafo de Fluxo de Controle – é a representação usual para a relação de fluxo de controle de um programa. Essas relações de dependências determinam a seqüência necessária entre operações. Hands-On - usar o programa propriamente dito. Hard-Coded – é a inserção de dados diretamente pelo usuário em um programa. Kaizen - significa de melhoria contínua, gradual, na vida em geral (pessoal, familiar, social e no trabalho). 77 NewsGroups – são grupos de discussão on-line, o mesmo que fóruns, onde os internautas com interesses em comum se juntam para falar de tudo, desde software até política. Open Source – Código Aberto. Software gratuito. O termo código aberto, ou open source em inglês, foi cunhado pela OSI (Open Source Initiative) e se refere ao mesmo software também chamado de software livre, ou seja, aquele que respeita as quatro liberdades definidas pela Free Software Foundation. Polimorfismo – permite que métodos apresentem várias formas, de acordo com seu contexto. Por exemplo, quando podemos usar sorvete.cobertura(caldadechocolate) no lugar do comando sorvete.cobertura(caldadechocolate, granulados) e vice-versa. Post - essa palavra aparece no texto com o mesmo sentido de blog, Blog é uma página web atualizada freqüentemente, composta por pequenos parágrafos apresentados de forma cronológica. REDEA/RJ – Uma das divisões da Caixa Econômica Federal responsável por desenvolver e manter as soluções tecnológicas da instituição financeira. Release – pequena atualização do programa. Wiki – são utilizados para identificar um tipo específico de coleção de documentos em hipertexto ou o software colaborativo usado para criá-lo. 78 ANEXO A – ESTRATÉGIAS DE TESTE CAIXA-BRANCA Figura 7 – Estratégias de testes caixa-branca e caixa-preta CAIXA-PRETA 79 ANEXO B – TIPOS DE TESTES (MOLINARI) Segundo Molinari (2003, p.160-162) os tipos de teste são: • Teste de unidade • Teste de integração • Teste de sistema • Teste operacional • Teste negativo-positivo • Teste de regressão • Teste de caixa-preta (Black-Box Test) • Teste de caixa-branca (White-Box Test) • Teste beta • Teste de verificação de versão • Teste funcional • Teste de performance • Teste de carga • Teste de aceitação do usuário ou UAT • Teste de estresse (user acceptance test) • Teste de volume • Teste de instalação • Teste de configuração • Teste de integridade • Teste de documentação • Teste de aplicações Mainframe • Teste de segurança • Teste de aplicações Server • Teste de aplicações Client • Teste de aplicações Web • Teste de aplicações Network • Teste de ameaça ou Thread • Teste de monitoração • Teste de módulo • Monkey Test 80 ANEXO C – COMPLEMENTO DE TIPOS (BRITO) A seguir apresentamos parte da lista de Rosane Brito, apenas com tipos não citados anteriormente no Anexo B. Classificando alguns tipos de teste dentro das estratégias de testes (caixa-branca e caixa-preta) temos o seguinte, Brito (2000, p.23-34): • Caixa-preta • Caixa-branca o Teste de partição de equivalência o Teste de caminhos básicos o Teste dos valores limites o Testes de condição o Teste baseado em probabilidade de o Técnicas de testes de condição erro o Teste de comparação Teste de ramos Teste de domínio Teste de ramos e operadores relacionais Teste de laço simples Teste de laço aninhado Teste de laços concatenados Teste de laços não estruturados 81 ANEXO D – PROCESSO DE TESTES Figura 8 – Visão do modelo de processo de qualidade de software em “U”. Fonte: Bartié (2002, p.36) 82 ANEXO E – AQUISIÇÃO DE FERRAMENTAS Quadro 12 – O que automatizar? Razões para o desenvolvedor 1. Quantas vezes você repete o teste de uma mesma funcionalidade até retirar todos os “bugs” existentes? 2. E quanto tempo isto representa em relação ao tempo de escrita de código e compilação? Você concordaria em dizer que pelo menos 50% do tempo em que você está na frente do computador, está re-testando alguma coisa que não funcionou na primeira compilação como deveria, ou que estava funcionando e parou de funcionar? 3. Quando você corrige um “bug”, garante que não introduziu outro? 4. Para garantir que tudo está funcionando em uma aplicação, após cada compilação, é preciso repetir todos os testes? 5. Como você faria para testar o comportamento da sua aplicação quando dois ou mais usuários executassem, exatamente no mesmo instante, funcionalidades que podem influenciar uma na outra? E se fossem 50 usuários? A sua aplicação vai perder performance? Vai funcionar errado? 6. Já aconteceu de você atender a reclamações de seu usuário dizendo que uma funcionalidade não está funcionando e ela estava perfeita na versão anterior? 7. Imagine que, quando você testou uma parte da aplicação pela primeira vez, uma “câmera de vídeo inteligente” estava atrás de você e decorou exatamente como repetir esse teste mais tarde e apenas lhe diz o que funcionou da mesma forma e o que mudou de comportamento. Imagine agora que sempre que recompilar sua aplicação esse robô pode repetir todos os testes que você já fez enquanto toma um café? Razões para o gerente 8. Quanto você gastou no último projeto entre a aparente conclusão da aplicação e a efetiva conclusão de toda a fase de testes e ajustes? Quanto isso representou de tempo no seu cronograma? E de dinheiro? 9. Sua equipe de programação certamente não trabalhava 24 horas por dia. O desenvolvedor precisa descansar. Enquanto isto, como aproveitar da melhor forma possível a máquina parada? Não seria útil que ela ficasse executando sozinha alguma atividade mecânica em vez de ficar desligada? Que tal se enquanto seu desenvolvedor dorme, um robô executasse todos os testes que precisam ser executados para verificar se a aplicação está funcionando corretamente? 10. E que tal se no dia seguinte cada desenvolvedor tivesse em cima de sua mesa, ou na sua caixa postal eletrônica, uma lista de todas as mudanças de comportamento da aplicação em relação a uma versão anterior? Não seria bom também que ao registrar, o defeito tivesse sido corrigido, o usuário fosse imediatamente avisado através de caixa postal? 11. O que você acha de poder deixar o desenvolvedor só desenvolvendo e retirar dele a responsabilidade de testar a aplicação? E se a “câmera de vídeo inteligente” que havia gravado seus testes, além de na manhã do dia seguinte distribuir todos os possíveis defeitos identificados para os desenvolvedores responsáveis, que tal se lhe entregasse periodicamente estatísticas como, tipos de defeito mais encontrados, número de defeitos encontrados no período de responsabilidade do desenvolvedor, tempo médio de solução dos defeitos, etc. 12. E sua equipe de suporte é sempre igual à que desenvolveu o sistema? Quando um desenvolvedor assume o suporte de um módulo desenvolvido por outro, quanto tempo em média ele leva para conhecer todos os detalhes sobre as funcionalidades da aplicação? Em algum lugar existe um script detalhado sobre todos os testes que devem ser feitos no aplicativo para garantir que a nova versão está livre de problemas? Fonte: Molinari (2003, p.103-104) 83 ANEXO F – FUNCIONAMENTO DA FERRAMENTA DE TESTE Dados de teste Scripts Interface Gráfica Dados Ferramenta Resultados esperados Scripts Resultados Relatórios Figura 9 – Funcionamento de uma ferramenta de testes Fonte: Argollo (2008) Programa em Teste 84 ANEXO G – DISTRIBUIÇÃO DO ESFORÇO - PROJETOS NOVOS Tabela 9 – Custo/esforço em projetos novos Fonte: REDEA/RJ 85 ANEXO H – DISTRIBUIÇÃO DO ESFORÇO - MANUTENÇÃO Tabela 10 – Custo/esforço na manutenção de sistemas Fonte: REDEA/RJ 86 ANEXO I – DISTRIBUIÇÃO DO ESFORÇO - AMBIENTE Tabela 11 – Custo/esforço na montagem em ambiente de homologação Fonte: REDEA/RJ 87 ANEXO J – COMPARANDO FERRAMENTAS Neste quadro foram usados notas de 1 a 10. Os pesos escolhidos foram 1, 3 e 9, pois eles são de base cúbica (3x). Este tipo de técnica reflete mais facilmente os pesos de itens que serão avaliados. Tabela 12 – Exemplo de requerimento num quadro comparativo Fornecedor Empr A Ferramenta Soft A Critérios Peso/Notas Ideal Nota Facilidade de Uso 1 10 9 Produtividade 1 10 9 Confiabilidade 1 10 9 Recursos de monitoração em geral 1 10 9 Recursos de gráficos em geral 1 10 9 Recursos de relatórios em geral 1 10 9 Recursos de customização 3 10 9 Suporte a gráficos atuais 3 10 8 Monitoração local (ex: REP em prod.) 3 10 8 Documentação disponível 1 10 8 Monitoração app Web 3 10 8 Monitoração app Client Server 3 10 10 Monitoração app Siebel 3 10 8 Monitoração app Magellan 3 10 7 Integração com BD Oracle 3 10 7 Integração com outros BD 1 10 8 Integração horizontal/vertical 1 10 9 Política de licença 3 10 10 Força do fabricante 1 10 8 Popularidade HOJE 1 10 10 Representação no Brasil 1 10 10 Representação no RJ 3 10 7 Serviços de suporte 3 10 8 TCO (avaliado inversamente) 1 10 7 Suporte - Profissionais disponíveis 1 10 5 Suporte - Custo (avaliado inversamente) 9 10 9 Custo - Produto (avaliado inversamente) 9 10 8 TOTAL 650 542 Percentual relativo ao ideal 0,83384615 Fonte: Molinari (2003, p.111-112) Empr B Soft B Nota 7 7 8 7 7 7 7 5 7 5 7 5 10 5 8 7 5 10 7 9 8 5 10 7 8 6 9 471 0,72461538 88 ANEXO K – TIPOS DE FERRAMENTAS SEGUNDO MOLINARI Quadro 13 - Visão Comercial Ajuda na decisão da escolha do teste que precisa ser executado. Ajudam na execução de testes que façam uso de uma GUI (graphical GUI Test Drivers & user interface), independente se a aplicação é Web, Client-Server, Java, Capture/Replay etc. Ferramentas especializadas em dar “uma carga pesada de dados” ao Load & Performance sistema. Também conhecido como ferramentas do “test-driver”. Non-GUI Test Drivers Ferramentas de automação de execução dos testes com uma interface & Test Managers gráfica. Podem trabalhar com grandes suites de testes. Ferramentas que ajudam na implementação dos testes. Um exemplo Test Implementation típico seria a geração automática de sub-rotinas para tratamento de falhas óbvias no programa. Ferramenta que ajuda a avaliar a qualidade dos seus testes A ferramenta Test Evaluation de análise de cobertura de código (“code coverage”) seria um exemplo. Ferramentas que analisam o programa sem executá-lo. Ferramentas de Static Analysis métricas pertencem a esta categoria. Ferramentas que ajudam a gerenciar um “banco de dados” com os Defect Tracking defeitos encontrados. Fonte: Molinari (2003, p.107) Test Design Capture/Replay Code Auditors Debuggers Standards Checkers Structural Analyzers Quadro 14 - Visão Acadêmica Captura os comandos executados por usuários e os executam. Análise e auditoria de código que está sendo testado. Ferramentas típicas dos programadores, que visam retirar erros básicos do código desenvolvido. Ferramentas que permitem verificar padrões de interface. Ferramentas que permitem analisar a estrutura de aplicação-alvo de teste. Test Coverage Análises de cobertura de código. Analyzers Test Data Extraction Ferramentas de extração e verificação de dados para teste. Test Data Generators Ferramentas de geração de massas de dados para teste. Test Management Ferramenta de gerenciamento de teste. Fonte: Molinari (2003, p.107-108) Quadro 15 – Novas Tendências Ferramenta de testes funcional e regressão (caixa-preta) Ferramenta de teste de performance e carga Ferramenta de planejamento de testes Ferramenta de testes de monitoração Ferramentas de testes estrutural (caixa-branca) Fonte: Molinari (2003, p.108) Captura os comandos executados por usuários e os executam. Testar performance e carga de um sistema torna-se cada vez necessário. Planejar testes torna-se cada vez mais necessário. Testes em tempo real da aplicação em produção, verificando sua disponibilidade. O seu SLA se tornou necessário. Testar o código quando ele está em sua concepção tem se tornado extremamente útil para melhorar a qualidade do código em si. 89 ANEXO L – EXEMPLOS DE TABELAS DATA-DRIVEN Sobrenome Silva Moraes Fonte: Argollo (2008) Conta 30.123-A Fonte: Argollo (2008) Conta 30.123-A 40.456-B Fonte: Argollo (2008) Nome José Carlos Tabela 13 - Cadastro de clientes Conta 30.123-A 40.456-B Tabela 14 - Transferência Conta 40.456-B Tabela 15 - Verificação de saldo Saldo 12.200,00 8.700,00 Depósito 12.700,00 8.200,00 Valor 500,00 90 ANEXO M – SUITES SEGUE (BORLAND) E IBM Quadro 16 - Ferramentas da Borland para a automação de testes de software Borland Gauntlet Integração contínua e cobertura de código para desenvolvimento ágil Automação de teste de performance e carga para software Borland SilkPerformer Borland SilkTest Automação de teste funcional e de regressão Gerenciamento de qualidade por meio do alinhamento entre requisitos SilkCentral Test Manager e objetivos de negócios Fonte: Borland (2008) Quadro 17 - Ferramentas da IBM para a automação de testes de software Testes funcionais automatizados avançados de aplicativos Java, da Rational Functional Tester Web e VS.NET baseados em WinForm. Rational Functional Tester Estende o Rational Functional Tester para suportar o teste de Extension for Terminalaplicativos baseados em terminal. based Applications Aprimora os esforços de autoria e execução de testes manuais Rational Manual Tester utilizando novas técnicas de design de testes. Rational Purify for Linux Fornece detecção de fuga de memória e de corrupção de memória and UNIX para Linux e UNIX. Rational Purify for Fornece detecção de fuga de memória e de corrupção de memória Windows para Windows. Rational PurifyPlus Fornece análise de tempo de execução para Windows, Linux e UNIX. Enterprise Edition Rational PurifyPlus for Conjunto de ferramentas de análise de tempo de execução para Linux and UNIX desenvolvimento em Java e C/C++ baseado em Linux e UNIX. Rational PurifyPlus for Análise do tempo de execução para desenvolvimento em Java, C/C++, Windows Visual Basic e .NET gerenciado baseado em Windows. Rational Robot Rational Ferramenta de automatização de testes de uso geral para aplicativos Robot cliente/servidor. Permite o teste de componentes e a análise em tempo de execução Rational Test RealTime para software integrado e de tempo real de plataformas cruzadas. Fonte: IBM (2008) 91 ANEXO N – SOLUÇÕES COMERCIAIS Quadro 18 – Ferramentas comerciais Ferramenta Informações WinRunner Automação de software e sites web, desenvolvida pela Mercury Interactive (http://www.mercuryinteractive.com/) QuickTest Pro Mercury Interactive (http://www.mercuryinteractive.com/) TestComplete AutomatedQA (http://www.automatedqa.com/) Ap Test Manager ApTest (http://www.aptest.com/resources.html) e-Test Empirix (http://www.empirix.com/) TestArchitect LogiGear (http://www.logigear.com/) Eccox Auditoria de código fonte (Cobol/DB2), Eccox (http://www.eccox.com.br/) XPediter Compuware (http://www.compuware.com/) QA-Load Ferramenta usada para teste de stress, Compuware (http://www.compuware.com/) QA-Run Automatização de plataforma baixa, Compuware (http://www.compuware.com/) HiperStation Automatização de plataforma alta (on-line), Compuware (http://www.compuware.com/) Devpartner Auditoria de código fonte (JAVA), Compuware (http://www.compuware.com/) Família File-Aid Controle de confiabilidade, Compuware (http://www.compuware.com/) QA-Teste Estruturação e controle dos casos e da massa de teste, RSI Informática (http://www.rsinet.com.br/) Control-M Controle de produtividade, BMC Software (http://www.bmc.com/) QA-Wizard Seapine (http://www.seapine.com/qawizard.html) IPL Para as linguagens AdaTEST, Cantata, Cantata++, geração automática dos casos de teste baseadas em código fonte, IPL (http://www.iplbath.com/) LDRA Ltd Geração automática dos casos de teste baseadas em código fonte, LDRA Testbed (http://www.ldra.com/) Testwell Para C, C++ e Java, geração automática dos casos de teste baseadas em código fonte, Testwell (http://www.testwell.sci.fi/homepage.html) ADL Translation System Geração automática dos casos de teste baseadas em especificação formal 92 ANEXO O – SOLUÇÕES COMERCIAIS Teste de regressão Atividade de depuração Java Java C/C++ Java Java Java C/C++ C/C++ C/C++ C++/Java C/C++ Java Java Java Java/C/C++ Java Java Java Java Java Java Exigências de código-fonte Linguagem suportada Critérios baseados em mutação Critérios de fluxo de dados Critérios de fluxo de controle Teste de sistema Critérios funcionais PiSCES SunTest xSuds Toolsuite JProbe Developer Suite TCAT/Java JCover Parasoft C++ Test Parasoft Insure++ ProLint Rational PureCoverage Rational Purify JUnit Cobertura JaBUTi CTB Parasoft JTest Glass JAR Toolkit Object Mutation Engine Ferramenta de Chevalley Ferramenta de Ma et al Mutation Testing System Fonte: Delamaro et al (2007, p.174) Teste de integração Ferramentas de teste de software Teste de unidade Quadro 19 – Características apresentadas pelas ferramentas de teste OO 93 ANEXO P – FERRAMENTAS DE TESTE GRATUITAS Quadro 20 - Melhores ferramentas Open Source para gestão e automação Categoria Ferramenta Gestão de projetos ProjectKoach - http://www.projectkoach.com/ PHP-Collab - http://www.php-collab.org/ GanttProject - http://ganttproject.biz/ Project-Open - http://www.project-open.com/ OpenWorkbench - http://www.openworkbench.org/ XPlanner - http://www.xplanner.org/ WebCollab - http://webcollab.sourceforge.net/ Mindquarry - http://www.mindquarry.com/ Testes de performance OpenSTA - http://www.opensta.org/ JMeter - http://jakarta.apache.org/jmeter/index.html Microsoft WEB Application Stress Tool http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439ea67d-75a89aa36495&DisplayLang=en Webload - http://www.webload.org/ The Grinder - http://grinder.sourceforge.net/ Gestão de testes TestLink - http://www.teamst.org/ QaManager - http://qamanager.sourceforge.net/ RTH - http://www.rth-is-quality.com/ TestMaster - http://testmaster.sourceforge.net/ Testitool - http://majordojo.com/testitool/ Test Case Web (TCW) - http://tcw.sourceforge.net/ Testopia - http://www.mozilla.org/projects/testopia/ Gestão de defeitos Mantis - http://www.mantisbt.org/ Bugzilla - http://www.bugzilla.org/ Scarab - http://scarab.tigris.org/ BugNET - http://www.bugnetproject.com/ TRAC - http://trac.edgewall.org/ Gestão de requisitos OSRMT - http://www.osrmt.com/ Tiger PRO - http://www.seecforum.unisa.edu.au/seectools.html Xuse - http://xuse.sourceforge.net/ REM (REquisite Management) http://www.lsi.us.es/descargas/descarga_programas.php?id=3 94 TRUC - http://sourceforge.net/projects/truc Plandora - http://plandora.sourceforge.net/ Jeremia - http://jeremia.sourceforge.net/ Testes funcionais Selenium (WEB) - http://www.openqa.org/selenium/ actiWATE (WEB) - http://www.actiwate.com/ Marathon (Java Swing) - http://www.marathontesting.com/marathon/ Watir (WEB) - http://wtr.rubyforge.org/ Canoo WEBTest (WEB) - http://webtest.canoo.com/ Apodora (WEB) - http://www.apodora.org/ Abbot (Java Swing) - http://abbot.sourceforge.net/ SoapUI (WEBServices) - http://www.soapui.org/ SOAPSonar Personal Edition (WEBServices) - http://www.crosschecknet.com/ LISA WS-Testing (WEBServices) http://www.itko.com/site/products/lisa/ws_testing.jsp Squish for KDE (Linux) - http://www.froglogic.com/ SharpRobo (WinForm .NET) http://confluence.public.thoughtworks.org/display/SHRO/Home FitNesse - http://fitnesse.org/ Estimativas Construx Estimate - http://www.construx.com/Page.aspx?nid=68 Controle de versões TortoiseCVS http://www.tortoisecvs.org/ WinCVS - http://www.wincvs.org/ Subversion - http://subversion.tigris.org/ Darcs - http://darcs.net/ Fonte: Caetano (2007)