escola superior aberta do brasil – esab pÓs … · escola superior aberta do brasil – esab...
Post on 15-Dec-2018
219 Views
Preview:
TRANSCRIPT
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
1957 O teste de software torna-se um processo 1970 Com a engenharia de software aumenta a importância da disciplina de testes 1972 Ocorre a primeira conferência sobre testes na Universidade da Carolina do Norte 1979 Myers produz um dos primeiros trabalhos sobre o processo de testes
1980
Primeiros conceitos de qualidade de software, criação dos padrões: • IEEE (Institute of Electrical and Electronics Engineers) • 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)
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 t estes 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 desenvolvimento Interno Moderado Sofisticado
Padrões e metodologias de qualidade e testes
Interno Moderado Sofisticado
Organizações de qualidade e testes Bem poucas Algumas Muitas Reconhecimento da importância da qualidade
Pequeno Algum Significante
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 Tipo Importância Descrição da categoria
Funcional Essencial Visa garantir que não haverá diferença entre os requisitos funcionais e o software desenvolvido.
Performance Médio impacto Checa o desempenho do programa, ou seja, verifica se ele mantém um tempo de resposta aceitável mesmo em condições extremas.
Confiabilidade e Disponibilidade
Alto impacto Monitora o programa por um tempo para identificar interrupções (confiabilidade) e mensurar o tempo para solucionar o problema (disponibilidade).
Segurança Essencial Simula invasões com o intuito de obter informações sigilosas ao que possam prejudicar o funcionamento do sistema.
Carga e Concorrência
Alto impacto
Também conhecido como teste de stress ele funciona simulando situações atípicas no sistema, como aumento no tráfego da rede, transações sucessivas e simultâneas, entre outras.
Usabilidade Médio impacto Verifica a navegação nas telas, clareza das mensagens, facilidade para obter ajuda, entre outros itens relacionados à interação com o usuário.
Compatibilidade Essencial Testa o comportamento em função de alterações no versionamento de componentes de hardware e software.
Configuração Baixo impacto Também conhecido como teste de portabilidade, testa o comportamento do programa em ambientes diferentes, tanto de hardware quanto de software.
Contingência Alto impacto Analisa os procedimentos que a equipe deve adotar em caso de falhas.
Instalação Médio impacto
Analisa o comportamento do sistema, durante o processo de instalação, nas mais diversas possibilidades, por exemplo: nova instalação, reinstalação, variação de alternativas para instalação.
Volume Alto impacto
É semelhante ao teste de carga, porém esse não trabalha com oscilações e sim com o crescimento contínuo da base 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.
Recuperação Alto impacto Avalia a capacidade do sistema em poder voltar a operar normalmente após a ocorrência de um erro.
Fonte: Bartié (2002, p.120)
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 Característica 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? Interoperabilidade Interage com os sistemas especificados? Conformidade Está de acordo com as normas, leis, etc.?
Funcionalidade (satisfaz as necessidades?)
Segurança de acesso Evita acesso não autorizado aos dados? Maturidade Com que freqüência apresenta falhas? Tolerância à falhas Ocorrendo falhas, como ele reage?
Confiabilidade (é imune a falhas?)
Recuperabilidade É capaz de recuperar dados em caso de falha? Inteligibilidade É fácil entender o conceito e a aplicação? Apreensibilidade É fácil aprender a usar?
Usabilidade (é fácil de usar?)
Operacionalidade É fácil de operar e controlar?
Tempo Qual é o tempo de resposta, a velocidade de execução?
Eficiência (é rápido e "enxuto"?) Recursos Quanto recurso usa? Durante quanto tempo?
Analisabilidade É fácil de encontrar uma falha, quando ocorre? Modificabilidade É fácil modificar e adaptar? Estabilidade Há grande risco quando se faz alterações?
Manutenibilidade (é fácil de modificar?)
Testabilidade É fácil testar quando se faz alterações? Adaptabilidade É fácil adaptar a outros ambientes? Capac. para ser instalado
É fácil instalar em outros ambientes?
Conformidade Está de acordo com padrões de portabilidade?
Portabilidade (é fácil de usar em outro ambiente?)
Capac. para substituir É fácil usar para substituir outro? Fonte: NBR 13596 (apud OSHIRO, 2007, p.152-153)
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.
Teste:Sistema Teste:
Categoria: AceitaçãoFuncional
CargaPerformace Categoria:Instalação Beta-testeSegurança
Em desenvolvimento
Em produção
Ambiente de desenvolvimentoAmbiente de teste e
homologaçãoAmbiente de produção
Em teste Em homologação
Desenvolvimento
FontesEstrutura interna
Teste: Unidade
Integração
Categoria: Funcional
Usabilidade
Teste: Aceitação
Categoria: Aceite formal Alpha-teste
Produção
Figura 2 – Ambientes Fonte: Bartié (2002, p.166-167)
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.50-
64):
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 d e software Norma Comentário ISO 9126 Características da qualidade de produtos de software. NBR 13596 Versão brasileira da ISO 9126
ISO 14598 Guias para a avaliação de produtos de software, baseados na utilização prática da norma ISO 9126
ISO 12119 Características de qualidade de pacotes de software (software de prateleira, vendido com um produto embalado)
IEEE P1061 Standard for Software Quality Metrics Methodology (produto de software)
ISO 12207 Software Life Cycle Process. Norma para a qualidade do processo de desenvolvimento de software.
NBR ISO 9001 Sistemas de qualidade - Modelo para garantia de qualidade em Projeto, Desenvolvimento, Instalação e Assistência Técnica (processo)
NBR ISO 9000-3 Gestão de qualidade e garantia de qualidade. Aplicação da norma ISO 9000 para o processo de desenvolvimento de software.
NBR ISO 10011 Auditoria de Sistemas de Qualidade (processo)
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.
SPICE ISO 15504
Projeto da ISO/IEC para avaliação de processo de desenvolvimento de software. 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 FOCO NO APERFEIÇOAMENTOOTIMIZADO DO PROCESSO
NÍVEL 4 PROCESSO MEDIDO EGERENCIADO CONTROLADO
NÍVEL 3 PROCESSO CARACTERIZADO EDEFINIDO BEM ENTENDIDO
NÍVEL 2 TAREFAS "MESTRAS" PODEM SERREPETITIVO REPETIDAS CONTINUAMENTE
NÍVEL 1 PROCESSO IMPREVISÍVEL EINICIAL POUCO CONTROLADO
ANÁRQUICO
OTIMIZADO
MENSURÁVEL
PADRONIZADO
CULTURAL
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 fo car em teste manual? Para valer a pena, devemos observar as seguintes questões: • Os testes que usarem técnicas de regressão
ou de confirmação. Quando precisa constan-temente do trabalho de repetir.
• Quando se faz uso de testes aleatórios (random ou monkeys testes) que utilizam caminhos aleatórios gravados por dentro da aplicação e de grande quantidade de dados de testes.
• Testes de carga, volume, capacidade. Como responder se o sistema funcionará com 50 mil usuários simultâneos?
• Performance e confiabilidade. Com a “chega-da” dos sistemas web, cada vez mais vemos este tipo de sistema fazer uso de ferramen-tas de performance.
• Quando se faz teste de componentes (unida-de) os quais devem ser retestados várias vezes.
Para valer a pena focar em testes manuais, devemos observar as questões seguintes: • Quando se faz uso de testes de instalação,
setup, operações muito específicas, como, por exemplo, que envolvam hardware (ex.: instalação de componentes de equipamen-tos). Isto inclui manutenções em geral.
• Faz uso de testes de configuração e de com-patibilidade. Este tipo de teste geralmente requer muita intervenção humana.
• O mesmo vale para testes de error handing (tratamento de erros) e de recuperação. No-vamente este tipo de teste trabalha com er-ros forçados de maneira que repeti-los pode ficar caro.
• Testes de usabilidade. Mais um caso em que é preciso intervenção humana para o devido julgamento e validação dos testes.
• O mesmo anterior vale para documentação e help.
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.
0
100
200
300
400
500
600
700
Design P
hase
Release
1
Release
2
Release
3
Release
4
Release
5
Release
6
Release
7
Release
8
Release
9
Release
10
Manual
CaptureReplay
Scripts
ActionWord
ModelBased
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 Prom oções Tipo de métrica Teste manual Teste automatizado Número de casos de teste executados 930 1644
Cobertura funcional dos casos de teste1 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
-
1.200,00
2.400,00
3.600,00
4.800,00
6.000,00
7.200,00
Evolu
ção
Re-exe
cuçã
o 1
Re-exe
cuçã
o 2
Re-exe
cuçã
o 3
Re-exe
cuçã
o 4
Re-exe
cuçã
o 5
Re-exe
cuçã
o 6
Re-exe
cuçã
o 7
Re-exe
cuçã
o 8
Re-exe
cuçã
o 9
Re-exe
cuçã
o 10
Manual
Automático
Ganho
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 Aten dimento 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
Tempo de uma execução completa dos casos de teste 525 h
(estimado) 4 h
Análise dos resultados e registro de erros 100 h
(estimado) 62 h
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.
-
200,00
400,00
600,00
800,00
1.000,00
1.200,00
1.400,00
1.600,00
1.800,00
Projet
o
Execu
ção
inicia
l
Re-exe
cuçã
o 1
Re-exe
cuçã
o 2
Re-exe
cuçã
o 3
Re-exe
cuçã
o 4
Re-exe
cuçã
o 5
Re-exe
cuçã
o 6
Re-exe
cuçã
o 7
Re-exe
cuçã
o 8
Re-exe
cuçã
o 9
Re-exe
cuçã
o 10
Manual
Automático
Ganho
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 funcionalida-des 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:
55%
35%
20%
10%
5%
0%
10%
20%
30%
40%
50%
60%
1 2 3 4 5
Nível de maturidade
Esf
orço
de
corr
eção
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
0%
25%
15%
10%
5%
0%
5%
10%
15%
20%
25%
30%
1 2 3 4 5
Nível de maturidade
Esf
orço
ger
enci
al
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.
1
10
100
1000
10000
Requisitos Análise emodelagem
Código Teste desoftware
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
-
2.000,00
4.000,00
6.000,00
8.000,00
10.000,00
12.000,00
14.000,00
16.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 autom atizados
Etapas dos testes Teste manual Teste automatizado
Melhoria (%)
Planejamento 32 40 -25% Definição dos casos de testes 262 117 55% Execução dos testes 466 23 95% Conferência dos testes 117 58 50% Gerenciamento do erro 117 23 80% Relatórios finais 96 16 83% Duração total (em horas) 1.090 277 75%
Fonte: The Newsletter of the Quality Assurance (apud BARTIÉ, 2002, p.64)
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
Teste Manual
• Baixo risco de não-cobertura • Alto custo de execução • Execução lenta • Reutilização zero • Interferências humanas
• Alto risco de não cobertura • Custo de execução menor • Execução lenta • Reutilização zero • Interferências humanas
Teste Automatizado
• Baixo risco de não-cobertura • Baixo custo de execução • Execução rápida • Reutilização total • Sem interferências humanas
• Alto risco de não cobertura • Menor custo de execução possível • Execução mais rápida possível • Reutilização total • 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).
0
5
10
15
20
25
Funcio
nalid
ade
Perfo
rmanc
e
Segur
ança
Usabil
idade
Dispon
ibilidad
e
Opera
bilida
de
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.
0
2
4
6
8
10
12
14
Funcio
nalid
ade
Perfo
rmanc
e da R
esid
ência
Segur
ança
Itens
de
Perfo
rmace
do
Site
Inte
graçã
o
Infra
-estr
utur
a
Usabil
idade
Loca
lizaç
ão
Dispon
ibilidad
e Pós
-ent
rega
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 MANUTENÇÕES
Percentual de Esforço
Percentual de Esforço
Auditoria de Código-Fonte --- ---Inspeção de artefatos de teste 5% 5%Planejamento de Teste 32% 15%Execução e Evidenciação de Teste sobre uma entrega parcial de software
28% 30%
Execução e evidenciação de teste de Aceite de um Serviço de Desenvolvimento e/ou Manutenção de Software
22% 35%
Publicação de Ocorrências de Teste 3% 5%Automatização de teste 10% 10%Fonte: Carvalho (2008, s.16)
Atividade
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 (impl antação) Atividade Percentual de Esforço
Planejamento de Teste 20%Acompanhamento da montagem do sistema no ambiente de homologação
30%
Execução e evidenciação de teste sobre sistema legado
40%
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:
(nº de pessoas envolvidas * nº de dias gastos) * custo por pessoa-dia Custo médio do defeito =
(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 Total
Analista Pleno 3 28,11 04:30 379,49 Programador 1 21,48 04:30 96,66 Líder de Projeto 1 36,28 06:00 217,68 Total 693,83 Fonte: Brito (2000, p.47)
3 O cálculo dessa equação retorna 1 nos processadores atuais
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 • Maior custo de re-execução • Execução mais lenta • Reutilização zero • Com interpretações humanas
• Planejamento mais complexo • Menor custo de re-execução • Execução mais rápida • Reutilização total • Sem 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.109-
114) 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 Paradigma Vantagens Desvantagens Baseado na Interface Gráfica
Não requer modificações na aplicação para criar os testes automatizados. Também não é necessário tornar a aplicação mais fácil de testar (testabilidade) porque os testes se baseiam na mesma interface utilizada pelos usuários.
Existe uma forte dependência da estabilidade da interface gráfica. Se a interface gráfica mudar, os testes falham. Baixo desempenho para testes automatizados que exigem centenas de milhares de repetições, testes de funcionalidades que realizam cálculos complexos, integração entre sistemas diferentes e assim por diante.
Baseado na Lógica de Negócio
Foco na camada onde existe maior probabilidade de existir erros. Independência das mudanças da interface gráfica. Alto desempenho para testes automatizados que exigem centenas de milhares de repetições, testes de funcionalidades que realizam cálculos complexos, integração entre sistemas diferentes e assim por diante.
Requer grandes modificações na aplicação para expor as funcionalidades ao mundo exterior. Exige profissionais especializados em programação para criar os testes automatizados. Existem poucas ferramentas/frameworks que suportam essa abordagem (normalmente é necessário criar soluções caseiras).
Fonte: Caetano (2007)
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, fon-
tes 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.
Tabela 8 - Teste por palavras-chave Cadastro Silva José 30.123-A 12.700,00 Cadastro Moraes Carlos 40.456-B 8.200,00 Transferência 30.123-A 40.456-B 500,00 VerificaSaldo 30.123-A 12.200,00 VerificaSaldo 40.456-B 8.700,00
Fonte: Argollo (2008)
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?
0
2
4
6
8
10
12
14
16
1 2 3 4 5 6 7 8 9 10
Número de usuários
Tem
po d
e re
spos
ta (
segu
ndos
)
Gráfico 10 – Tempo de resposta x nº de usuários (como descobrir gargalos) Fonte: Molinari (2003, p.188)
Gargalo
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 , TestSmith 5, 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 .
TestMentor 6 e JFunc 7 (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 7 JUnit Functional Testing Extension (http://jfunc.sourceforge.net/) 8 Ferramenta para execução de testes unitários e integrados em JAVA
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 encontra-
se 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 Todos-
Potenciais-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 pro gramas concorrentes
FerramentaFluxo de
dadosFluxo de controle
Execução controlada
Depuração
TDC Adaa �ConAnb �Della Pastac � � �Xabd �Visitd �MDBd � �STEPSd � � �Astrald � �XMPIe �Umpiree �ValiPard, e � � � �aAda, bJava, cShmem, dPVM, eMPI 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 sistema s 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 <redearj114@mail.caixa> 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 test es automatizados . [S.l.]: Microsoft, 2008. Disponível em: <http://msdn.microsoft.com /pt-br/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 d e 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 CAIXA-PRETA
Figura 7 – Estratégias de testes caixa-branca e 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 estresse
• Teste de aceitação do usuário ou UAT
(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 Técnicas de testes de condição o Teste baseado em probabilidade de
erro � Teste de ramos
o Teste de comparação � 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
Resultadosesperados
Scripts
Ferramenta
Scripts
Programa emTeste
Inte
rfac
e G
ráfic
a
Relatórios
Dados
Resultados
Figura 9 – Funcionamento de uma ferramenta de testes Fonte: Argollo (2008)
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 d e 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 comp arativo Fornecedor Empr A Empr B Ferramenta Soft A Soft B Critérios Peso/Notas Ideal Nota Nota Facilidade de Uso 1 10 9 7 Produtividade 1 10 9 7 Confiabilidade 1 10 9 8 Recursos de monitoração em geral 1 10 9 7 Recursos de gráficos em geral 1 10 9 7 Recursos de relatórios em geral 1 10 9 7 Recursos de customização 3 10 9 7 Suporte a gráficos atuais 3 10 8 5 Monitoração local (ex: REP em prod.) 3 10 8 7 Documentação disponível 1 10 8 5 Monitoração app Web 3 10 8 7 Monitoração app Client Server 3 10 10 5 Monitoração app Siebel 3 10 8 10 Monitoração app Magellan 3 10 7 5 Integração com BD Oracle 3 10 7 8 Integração com outros BD 1 10 8 7 Integração horizontal/vertical 1 10 9 5 Política de licença 3 10 10 10 Força do fabricante 1 10 8 7 Popularidade HOJE 1 10 10 9 Representação no Brasil 1 10 10 8 Representação no RJ 3 10 7 5 Serviços de suporte 3 10 8 10 TCO (avaliado inversamente) 1 10 7 7 Suporte - Profissionais disponíveis 1 10 5 8 Suporte - Custo (avaliado inversamente) 9 10 9 6 Custo - Produto (avaliado inversamente) 9 10 8 9 TOTAL 650 542 471 Percentual relativo ao ideal 0,83384615 0,72461538
Fonte: Molinari (2003, p.111-112)
88
ANEXO K – TIPOS DE FERRAMENTAS SEGUNDO MOLINARI
Quadro 13 - Visão Comercial Test Design Ajuda na decisão da escolha do teste que precisa ser executado.
GUI Test Drivers & Capture/Replay
Ajudam na execução de testes que façam uso de uma GUI (graphical user interface), independente se a aplicação é Web, Client-Server, Java, etc.
Load & Performance Ferramentas especializadas em dar “uma carga pesada de dados” ao sistema. Também conhecido como ferramentas do “test-driver”.
Non-GUI Test Drivers & Test Managers
Ferramentas de automação de execução dos testes com uma interface gráfica. Podem trabalhar com grandes suites de testes.
Test Implementation Ferramentas que ajudam na implementação dos testes. Um exemplo típico seria a geração automática de sub-rotinas para tratamento de falhas óbvias no programa.
Test Evaluation Ferramenta que ajuda a avaliar a qualidade dos seus testes A ferramenta de análise de cobertura de código (“code coverage”) seria um exemplo.
Static Analysis Ferramentas que analisam o programa sem executá-lo. Ferramentas de métricas pertencem a esta categoria.
Defect Tracking Ferramentas que ajudam a gerenciar um “banco de dados” com os defeitos encontrados.
Fonte: Molinari (2003, p.107)
Quadro 14 - Visão Acadêmica Capture/Replay Captura os comandos executados por usuários e os executam. Code Auditors Análise e auditoria de código que está sendo testado.
Debuggers Ferramentas típicas dos programadores, que visam retirar erros básicos do código desenvolvido.
Standards Checkers Ferramentas que permitem verificar padrões de interface.
Structural Analyzers Ferramentas que permitem analisar a estrutura de aplicação-alvo de teste.
Test Coverage Analyzers Análises de cobertura de código.
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)
Captura os comandos executados por usuários e os executam.
Ferramenta de teste de performance e carga
Testar performance e carga de um sistema torna-se cada vez necessário.
Ferramenta de planejamento de testes
Planejar testes torna-se cada vez mais necessário.
Ferramenta de testes de monitoração
Testes em tempo real da aplicação em produção, verificando sua disponibilidade. O seu SLA se tornou necessário.
Ferramentas de testes estrutural (caixa-branca)
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.
Fonte: Molinari (2003, p.108)
89
ANEXO L – EXEMPLOS DE TABELAS DATA-DRIVEN
Tabela 13 - Cadastro de clientes Sobrenome Nome Conta Depósito Silva José 30.123-A 12.700,00 Moraes Carlos 40.456-B 8.200,00
Fonte: Argollo (2008)
Tabela 14 - Transferência Conta Conta Valor 30.123-A 40.456-B 500,00
Fonte: Argollo (2008)
Tabela 15 - Verificação de saldo Conta Saldo 30.123-A 12.200,00 40.456-B 8.700,00
Fonte: Argollo (2008)
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 Borland SilkPerformer Automação de teste de performance e carga para software Borland SilkTest Automação de teste funcional e de regressão
SilkCentral Test Manager Gerenciamento de qualidade por meio do alinhamento entre requisitos e objetivos de negócios
Fonte: Borland (2008)
Quadro 17 - Ferramentas da IBM para a automação de testes de software
Rational Functional Tester Testes funcionais automatizados avançados de aplicativos Java, da Web e VS.NET baseados em WinForm.
Rational Functional Tester Extension for Terminal-based Applications
Estende o Rational Functional Tester para suportar o teste de aplicativos baseados em terminal.
Rational Manual Tester Aprimora os esforços de autoria e execução de testes manuais utilizando novas técnicas de design de testes.
Rational Purify for Linux and UNIX
Fornece detecção de fuga de memória e de corrupção de memória para Linux e UNIX.
Rational Purify for Windows
Fornece detecção de fuga de memória e de corrupção de memória para Windows.
Rational PurifyPlus Enterprise Edition
Fornece análise de tempo de execução para Windows, Linux e UNIX.
Rational PurifyPlus for Linux and UNIX
Conjunto de ferramentas de análise de tempo de execução para desenvolvimento em Java e C/C++ baseado em Linux e UNIX.
Rational PurifyPlus for Windows
Análise do tempo de execução para desenvolvimento em Java, C/C++, Visual Basic e .NET gerenciado baseado em Windows.
Rational Robot Rational Robot
Ferramenta de automatização de testes de uso geral para aplicativos cliente/servidor.
Rational Test RealTime Permite o teste de componentes e a análise em tempo de execução 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
Quadro 19 – Características apresentadas pelas ferr amentas de teste OO
Ferramentas de teste de software
Tes
te d
e un
idad
e
Tes
te d
e in
tegr
ação
Tes
te d
e si
stem
a
Crit
ério
s fu
ncio
nais
Crit
ério
s de
flux
o de
con
trol
e
Crit
ério
s de
flux
o de
dad
os
Crit
ério
s ba
sead
os e
m m
utaç
ão
Ling
uage
m s
upor
tada
Exi
gênc
ias
de c
ódig
o-fo
nte
Ativ
idad
e de
dep
uraç
ão
Tes
te d
e re
gres
são
PiSCES � � Java �SunTest � � � Java �xSuds Toolsuite � � � � C/C++ � � �JProbe Developer Suite � � � Java � �TCAT/Java � � Java �JCover � � Java �Parasoft C++ Test � � � � C/C++ � �Parasoft Insure++ C/C++ � �ProLint C/C++ �Rational PureCoverage � � � C++/Java �Rational Purify � C/C++ � �JUnit � � JavaCobertura � � JavaJaBUTi � � � � Java �CTB � � � Java/C/C++Parasoft JTest � � � � Java � �Glass JAR Toolkit � � � � JavaObject Mutation Engine � � Java �Ferramenta de Chevalley � � Java �Ferramenta de Ma et al � � Java �Mutation Testing System � � Java � Fonte: Delamaro et al (2007, p.174)
93
ANEXO P – FERRAMENTAS DE TESTE GRATUITAS
Quadro 20 - Melhores ferramentas Open Source para g estão e automação
Categoria Ferramenta
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/
Gestão de projetos
Mindquarry - http://www.mindquarry.com/
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-439e-a67d-75a89aa36495&DisplayLang=en
Webload - http://www.webload.org/
Testes de performance
The Grinder - http://grinder.sourceforge.net/
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/
Gestão de testes
Testopia - http://www.mozilla.org/projects/testopia/
Mantis - http://www.mantisbt.org/
Bugzilla - http://www.bugzilla.org/
Scarab - http://scarab.tigris.org/
BugNET - http://www.bugnetproject.com/
Gestão de defeitos
TRAC - http://trac.edgewall.org/
OSRMT - http://www.osrmt.com/
Tiger PRO - http://www.seecforum.unisa.edu.au/seectools.html
Xuse - http://xuse.sourceforge.net/
Gestão de requisitos
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/
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
Testes funcionais
FitNesse - http://fitnesse.org/
Estimativas Construx Estimate - http://www.construx.com/Page.aspx?nid=68
TortoiseCVS http://www.tortoisecvs.org/
WinCVS - http://www.wincvs.org/
Subversion - http://subversion.tigris.org/
Controle de versões
Darcs - http://darcs.net/
Fonte: Caetano (2007)
top related