Teste de software.pdf
-
Upload
renan-neto -
Category
Documents
-
view
392 -
download
1
Transcript of Teste de software.pdf
Teste de Software
Renan F. Neto1, Alex S. Chervenski
1, Arthur P. Pugliero
1, Leandro R. Abi
1,
Vinicius N. Machado1
1Engenharia de Software – Universidade Federal do Pampa (UNIPAMPA)
91.501-970 – Alegrete – RS – Brasil
{renan.netto,alex.chervenski,vini-machado}@hotmail.com,{ledz409, arthurpugliero}@gmail.com
Resumo. Este artigo descreve o contexto de teste de software feito através de
uma revisão bibliográfica de vários autores. É descrito a definição, aplicação,
ferramentas, benefícios e desafios de testes em software a fim de trazer
clareza para pessoas que não possuem experiência ou conhecimento deste
assunto, priorizando testes de unidade, sistema e integração.
1. Introdução
Os Softwares estão presentes em nossas vidas com inúmeras finalidades. Seja para
efetuar uma compra até fazer um simples cálculo. Mas para que funcionem de forma
plena, é preciso que suas funcionalidades não possuam erros.
Os testes de software têm o objetivo de encontrar os erros e corrigi-los. O
presente trabalho aborda o que são, as ferramentas e técnicas que auxiliam no
desempenho dos testes, beneficiando a qualidade do programa.
2. Definição
O teste é uma das etapas do desenvolvimento de software, na maioria das vezes esses
testes são feitos pelos próprios desenvolvedores e usuários do sistema, que serve apenas
para garantir que o que foi pedido no software foi realmente implantado [Mauro Pezze,
Michal Young].
Mas esse não é o principal objetivo de testar um software, esse processo todo
possui três objetivos:
Melhorar o processo de software (Prevenção, detecção e remoção de erros)
Avaliar a qualidade do produto (Metas de qualidade)
Melhorar a qualidade e rentabilidade do produto.
Esses três objetivos do teste sendo apenas feitos pelos desenvolvedores e
usuários não são suficientes, por mais que sejam desenvolvedores de software, muitas
vezes são necessários profissionais capacitados que utilizam métodos e processos de
testes claramente definidos.
O processo de teste deve começar junto com o desenvolvimento do software,
pois quanto antes é detectado um problema, mais barato será o custo para resolvê-lo, e o
custo total de um software se torna mais barato quando bem testado [Anderson Bastos].
2.1. Teste de Unidade
Esse teste focaliza em verificar a menor unidade do projeto do software, ele testa cada
componente e caminho para descobrir e mostrar cada erro do sistema. Esse teste pode
ser feito paralelamente para vários componentes e testes [Pressman].
2.2. Teste de integração
O teste de integração é uma técnica para construir a arquitetura do software ao mesmo
tempo em que ele conduz testes para descobrir erros nas interfaces. O objetivo deste
teste é construir uma estrutura do programa a partir dos testes feitos em unidade
[Pressman].
2.3. Teste de sistema
Ele irá avaliar e testar o software em busca de erros como se fosse o usuário final do
software, ele irá verificar se o produto está satisfazendo os seus requisitos [Arilo
Cláudio Dias Neto, Artigo científico].
2.4. Teste da caixa branca
Teste que têm como base o código fonte do sistema, com o objetivo de que suas linhas
tenham sido executadas ao menos uma vez, garantindo seu bom funcionamento [Pezzé
M. , Young M. , Teste e análise de Software, 2007].
2.5. Teste da caixa preta
Têm como base as entradas e saídas do programa, concentrando-se nos requisitos
funcionais do Software, deixando de lado detalhes internos do sistema. É mais eficaz
em encontrar falhas que escapam do teste da caixa branca [Pezzé M. , Young M. , Teste
e análise de Software, 2007].
3. Aplicação
Nesta seção falaremos sobre algumas técnicas e estratégias que atuam na melhora de software.
3.1 Teste de Unidade
Processo feito na fase de desenvolvimento, em que se testam as menores unidades ou
trechos de código do software, sendo preciso que essas unidades estejam prontas em
algum estágio. Existe uma ferramenta de automação, conhecido como J.UNIT, que
facilita este teste [Molinari L., Testes de Software, 2011].
Esse teste traz alguns benefícios [Molinari, 2010, p.62]:
Encontrar problemas mais cedo no processo de desenvolvimento, evitando perda
de tempo e gastos além do previsto.
O teste na unidade pode ser reaproveitado em outro software.
3.2. Teste de integração
Tem inicio após o término do teste unitário. Seu objetivo é garantir que um ou mais
componentes que já passaram pelo teste de unidade de forma individual estejam
cumprindo com suas finalidades de forma integrada [Bastos L., Emerson R., Base de
conhecimento em testes de Software, 2007].
3.3. Teste de Sistema
Deve ter início logo após o teste de integração. Seu objetivo é verificar o
comportamento do sistema, se suas funcionalidades realmente estão de acordo com o
desejado pelo usuário. Esse teste possibilita a liberação da aplicação para produção, no
caso de ter sido aprovada [Bastos L. , Emerson R., Base de conhecimento em testes de
Software, 2007].
Para que esse teste seja executado com sucesso deve ser seguido alguns passos:
O ambiente do teste deve estar configurado de forma próxima ao de produção;
Avaliar os resultados e averiguar se os problemas são realmente defeitos;
Executar o teste novamente no caso de o defeito ser corrigido.
Os tipos de testes são variados, cada um contribuindo para a melhoria das
aplicações. Seria difícil utilizar todos, então se deve analisar cada caso:
Se o enfoque da aplicação é o negócio, usa-se o teste da caixa preta[ Molinari L.
, Testes de Software, 2011].
Se é a interface, usa-se Caixa preta [Molinari L. , Testes de Software, 2011].
Se for um componente, utiliza-se Caixa branca [Molinari L., Testes de Software,
2011].
Teste funcional, geralmente são mais baratas de projetar e executar do que casos
de teste estrutural [Pezzé M. , Young M. , Teste e análise de Software, 2007].
4. Ferramentas
A aplicação de critérios de teste sem apoio de ferramentas automatizadas tende a ser
uma atividade propensa a erros e limitada a programas muito simples. Tal aspecto
motiva o desenvolvimento de ferramentas automatizadas para auxiliar na condução de
testes efetivos e na análise dos resultados obtidos.
O teste é uma fase dispendiosa do processo de software. Sendo Assim, as
ferramentas de teste estão entre as primeiras ferramentas de software a serem
desenvolvidas, oferecendo uma variedade de recursos e seu uso podendo reduzir
significativamente os custos de testes [Sommerville].
Duas razões básicas para a importância da automação de testes de software:
Crescimento dos sistemas e aplicações (Cada Vez Maiores)
Aumento da complexidade dos sistemas (Cada vez maiores) [Molinari L. 2008].
Tabela 1. Ferramentas e aplicações
Quando usados para teste de sistemas de grande porte, as ferramentas devem ser
configuradas e adaptadas para o sistema específico a ser testado. Por exemplo:
Novas ferramentas podem ser adicionadas para testar características específicas
da aplicação e algumas ferramentas de teste existentes podem não ser
necessárias.
Podem ser escritos scripts para simuladores de interface como o usuário e
padrões definidos para os geradores de dados de teste. Formatos de relatório
podem também ser definidos.
Conjuntos de resultados esperados de teste podem ser preparados manualmente
caso as versões anteriores do programa não estejam disponíveis para
funcionarem como um oráculo.
Podem ser escritos comparadores de arquivos com propósitos específicos e que
incluam o conhecimento da estrutura dos resultados do teste no arquivo
[Molinari 2008].
4.1. Problema das ferramentas
A escolha das ferramentas foi mal conduzida de modo que a ferramenta mais
adequada não foi escolhida.
A implantação foi mal feita: instalações, licenças com problemas etc.
Pensou que a ferramenta seria a solução para tudo, mas não é.
A ferramenta possui muitos defeitos que não foram corrigidos.
5. Benefícios
A maior vantagem em realizar testes de software é obter menor custo com reparos e
economizar tempo com técnicas durante o processo.
O software com testes realizados, durante o programa, estará com maior
qualidade de software, sua margem de orçamento estará mais perto do previsto ao final
do processo de engenhar um programa [Mauro Pezzé,Michael Young,2008].
Quanto mais cedo os testes são implementados, maiores são os benefícios,
evita que bugs se espalhem pela aplicação e os tornam mais fáceis de serem corrigidos;
o teste deve ser feito em todo o processo de realização do software para maior
segurança de que erros não sejam repetidos durante a programação [Leonardo
Molinari,2008]
Teste de Software procura provar que o programa não funciona, e a Depuração
deve localizar as causas que levaram o software a falha e indicar como deve ser
corrigido. Existem pessoas encarregadas para depurar os erros, mas recentemente têm
sido feito muitos esforços, visando a técnica para melhorar a qualidade e a
produtividade nessa atividade, como por exemplo ter uma melhor aplicação de testes em
cima do programa, recolhendo informações mais precisas de onde ocorreram falhas,
deixará com um campo mais específico de onde deve-se depurar erros; o que é um
grande benefício pois depurar mais rapidamente e com segurança os erros nos testes, é
ter garantia de maior confiabilidade no programa, o que é a maior meta existente na
equipe desenvolvedora de um software [Márcio Eduardo Delamaro, José
Carlos Maldonado, Mario Jino,2007].
5.1. Teste de Integração
Benefício em integração se ocorre no fato de que o teste pode-se unir subsistemas, e
poder controlar uma coleção de módulos e assistir as interações, essas que várias vezes,
por serem complexas, escondem falhas quando sozinhas, otimizando-se o tempo
[Mauro Pezzé,Michael Young,2008].
5.2. Teste de Sistema
Nesse teste, por ser um teste onde exigirá todo o complexo do programa, indicará se o
mesmo está com seus subsistemas em perfeitas condições, onde o benefício se encontra
em ver se o programa funciona perfeito como um todo, podendo-se obter um software
com maior qualidade, segurança e maior poder de manutenção
[Mauro Pezzé,Michael Young,2008].
5.3. Teste de Unidade
Esse teste por ser um teste muito detalhista ,devido ao fato de testar o sistema por suas
menores unidades, ele consegue obter maior êxito entre os testes gerando um grande
benefício de com relação a tempo estimado para melhor aproveitá-lo e também gerando
uma maio qualidade em certeza de estar compilando os erros com maior confiança
[Mauro Pezzé,Michael Young,2008].
6. Desafios
6.1. Fator humano
Hoje em dia softwares estão em todo lugar, de brinquedos a armas, do sistema de micro
empresas ao sistema bancário, entretanto são escritos por seres humanos que podem
errar.
E não há como negar, pois os bugs sempre existem. Mas então, o que fazer a
respeito? Testar. Não há como deixar uma aplicação livre de falhas, o que se faz na
verdade é diminuir o risco das tais acontecerem.
Para isso deve se ter em conta que o fator humano é um grande desafio a ser
superado e, portanto, um bom gerenciamento é necessário [Molinari L., 2011].
6.2. Gerenciamento
Em algumas organizações o trabalho de testar fica com os próprios programadores, o
que na verdade é errado, pela alta sobrecarga de tarefas que acarreta ao profissional. Já
outras têm uma equipe específica de testadores, o que também gera certo “relaxamento”
na equipe de desenvolvedores, que por vezes deixa passar bugs que poderiam ser
corrigidos no momento da programação, delegando aos testadores uma função a mais.
Também há casos de inimizade entre programadores e testadores, pois estes
apontam as falhas que ocorrem na programação. Mas cabe ao gerente de produção
resolver estes problemas, pois não há como trabalhar em equipe se essas situações
ocorrem [Molinari L., 2011].
6.3. Tempo disponível para testar
Algo que interfere muito no desempenho dos testes é o tempo delegado a estes. Muitos
gerentes preferem gastar a maioria do tempo desenvolvendo, e o tempo que sobra
deixam para testar, quando na verdade, as tarefas deveriam ser conjuntas, já que o testes
devem ser realizados o quanto antes afim de diminuir custos com correções e riscos
mais adiante. Achar que os testes são superficiais é um grande erro, pois o bom
desempenho destes é vital para a qualidade da aplicação. Para conseguir realizar os teste
de maneira adequada mesmo com pouco tempo disponível deve-se seguir algumas
etapas como:
Definir o que deve ser testado na aplicação.
Em que ordem de prioridade deve se testar.
Elaborar um cronograma de testes.
Gerar análises de resultados para comparação e determinação de status dos testes
[Molinari L., 2011].
6.4 Saber quando o teste termina
Muitas vezes implica em dúvidas, pois na maioria das vezes os testadores se deparam
com o esgotamento do prazo de testes, e decidem que esse seria o momento de termina-
lo.
Mas deve se levar em conta que há meios de contornar essa dificuldade, usando
por exemplo, métodos para determinar se o software foi testado suficientemente, por
exemplo:
tempo médio entre os defeitos encontrados.
A porcentagem que o teste cobriu o código da aplicação.
Ver o número de defeitos encontrados que não foram corrigidos.
Avaliar os riscos entre liberar a aplicação ainda com correções faltando e não
liberá-la [Bastos L., et al, 2007].
6.5 Custos na correção de defeitos
Os riscos de se liberar uma aplicação sem ter testado exaustivamente, já que os prazos
para a entrega são apertados, devem ser melhor compreendidos segundo uma regra¹
descrita por Glenford Myers, em que ele afirma que quanto mais cedo descobrirmos
falhas, menores serão os custos de correção.
Figura 1. Regra de 10 de Myers
6.6. Teste é para sempre
Compreendido isto, devemos lembrar que um software produzido hoje, poderá estar
ativo daqui a dez ou quinze anos, quando novos sistemas e tecnologias estarão em
vigor. Nessa visão, como é possível calcular os defeitos que surgirão com o tempo, em
que talvez até as próprias ferramentas de programação e testes estejam em desuso?
Assim é praticamente impossível definir a ocorrência e os custos com os defeitos ao
longo dos anos [Bastos L., et al, 2007].
7. Conclusão
Ao decorrer do artigo, foi mostrada a importância de se testar um software,
apresentando ferramentas, aplicações e também os benefícios e desafios que os testes de
software oferecem. O artigo mostra de maneira simples, mas objetiva, algumas ações e
métodos que devem ser adotados para se deixar uma aplicação o mais livre possível de
erros, evidenciando os processos que envolvem testar um software.
8. Referências
Pressman .R.S. (2011) Engenharia de Software Uma Abordagem Profissional. McGraw
Hill Brasil.
Molinari L. (2008) Testes Funcionais de Software. Visual Books.
Sommerville I.(2007) Engenharia de Software. Pearson Education.
Molinari L. (2011) Testes de Software, 4ª edição, Editora Érica.
Molinari L. (2010) Inovação e Automoção de testes de Software, Editora Érica, 1ª
edição.
Molinari, L. (2011), Teste de software, produzindo sistemas melhores e mais confiáveis,
editora Erica.
Bastos, A. and Rios, E. and Cristalli, R. and Moreira, T. (2012), Base de conhecimento
em teste de sostware, editora Martins.
Delamaro, M. E. and Maldonado, J. C. and Jino, M. (2007), Introdução ao teste de
software, editora Campus.
Pezzè, M. and Young, M. (2008), Teste e análize de software, processos, princípios e
técnicas, editora Artmed.
Arilo C., Introdução a teste de software, http://www.comp.ita.br/~mluisa/TesteSw.pdf