Introdução
A produção de novos softwares é sempre um desafio para os programadores, pois exigem uma concepção muito grande em linguagem de programação e essa deve ser escrita de forma coesa e coerente, para que se evite futuros erros e constrangimento para os usuários desse programa. Por esse motivo existe o teste em softwares, onde o programa é analisado de varias formas, testado para somente depois ser implementado no mercado. Sua importância é tão grande que existem empresas de softwares que gastam cerca de 30% a 40% de seus investimentos em testes. Em casos de produções de software para situações críticas, como voos de aeronovaes ou reatores nucleares, os investimentos em testes é equivalente em três a cinco vezes o gasto total de todas as outras etapas na elaboração do software[Pressman]. Assim o teste é essencial para a qualidade dos softwares, o que é indispensável para o consumidor.
Tópicos em Teste de Software
O guia SWEBOK(Guide to the Software Engineering Body of Knowledge) [SWEBOK] define que o “Teste de Software consiste na verificação dinâmica do comportamento do programa em um conjunto finito de casos de teste, apropriadamente escolhidos em um domínio usualmente infinito de execuções, contra o comportamento esperado.” Ele delimitou em certos tópicos o Teste de Software que facilitam o estudo do engenheiro de software. São seis:
Fundamentos em Teste de Software
O primeiro passo para o Teste de Software é conhecer os termos e definir o que deve ser feito. Escolhe-se o melhor critério de teste e os objetivos de teste, observam-se as limitações e utiliza-se da Testabilidade. Além disso, é usado o chamado “Problema de Oráculo”, onde um agente, seja humano, seja mecânico, decide se um programa comportou-se de forma correta ou se houve falhas.
Níveis de Teste
Este é um dos tópicos mais importantes e trata-se das estratégias do engenheiro de software sobre os testes que serão feitos. Podemos dividir os testes em três estágios principais:
-O teste de unidade, no qual o software é analisado por partes separadas. Genericamente, este teste é feito sobre o código do programa e podem estar envolvidos os próprios programadores.
-O teste de integração é uma técnica para verificar o funcionamento em conjunto dos componentes do software. É necessário observá-lo como um todo, analisando, por exemplo, se há problemas entre interface e código.
-O teste de sistema é o último estágio e se concentra no teste da ligação entre o software e componentes externos, como o hardware, o local de operação, ferramentas, etc. Além disso, este estágio verifica os requisitos não-funcionais tais como a segurança, a velocidade, etc.
Neste tópico ainda são destacados os objetivos do teste. São várias as formas de se testar um software e apresentaremos aqui apenas as que são mais citadas na literatura sem grandes explicações sobre cada uma. Algumas delas são:
-Teste de aceitação ou qualificação: Feito para verificar se o software condiz com o desejo do cliente. -Teste de instalação: Como o nome sugere. São testados os procedimentos de instalação, além dos requisitos para tal. -Teste Alpha e Beta: Os famosos testes Alpha e Beta são distribuições do software antes de seu lançamento para pequenos grupo, seja internamente à empresa(teste Alpha) ou externamente à empresa(teste Beta).
A lista é extensa, porém todos os títulos de testes são auto-explicativos, como: Teste de Performance, Teste de Segurança, Teste de Estresse(software em máxima operação), Teste de Recuperação, Teste de Configuração, Teste de Interatividade, etc.
Técnicas de Teste
Outro tópico importantíssimo, as técnicas de teste tentam encontrar os erros do programa. Existem várias maneiras de se alcançar estes objetivos. No entanto, não existe uma classificação exata, não são homogêneas na literatura. De qualquer forma, existem algumas técnicas que são padrões e serão explicados mais detalhadamente na seção “Casos de teste”. A base pode vir desde a intuição do engenheiro a técnicas de código.
Medidas de Teste
Enquanto todos os testes são feitos é necessário criar-se uma base de dados quantitativos e qualitativos do processo. O programa está sendo corrigido? O planejamento para o teste está funcionando? Quais são os defeitos e erros da plataforma? A técnica usada está funcionando ou deve-se escolher uma nova? Estas perguntas são todas respondidas com as Medidas de Teste. Análises são feitas para monitorar os testes de acordo com a aceitação do cliente, o tempo disponível de produção e também sobre o investimento.
Processo de Teste
Seguindo as palavras do último tópico, os testes devem ser organizados corretamente e bem planejados para que os investimentos, sejam de tempo, sejam financeiros, tenham sido compridos. Para isso, o Processo de Teste é feito. Nele são feitos guias de teste, documentação dos testes e da produção, gerenciamento de testes, custos e lucros, planejamento, etc. Enfim, o Processo de Teste é a parte empreendedora do teste de software.
Ferramentas de Teste
Como os testes demandam tempo e grande trabalho, devem ser escolhidas ferramentas que auxiliem os engenheiros no desenvolvimento. A escolha destas afeta diretamente na eficiência e na efetividade dos testes. Existem algumas mais conhecidas como geradores de teste, ferramentas de repetição, Oráculo, traços, regressões, etc.
Testabilidade
Apesar de estranho, diz-se que o melhor teste é aquele que encontra um erro ainda não descoberto. É comum imaginarmos que o melhor seria não encontrar qualquer defeito. No entanto, o ser humano não consegue ser um programador perfeito e softwares caem facilmente em erros. Então, um dos caminhos para o teste é desmembrar a plataforma; tentar produzir erros e assim corrigi-los. É importante também que os testes sejam adequados. Ou seja, os testadores devem conseguir fazê-los em um tempo possível à desenvolvedora e com os recursos disponíveis. Para conseguir alcançar o máximo de desempenho no Teste de Software definiu-se a testabilidade de software, que nada é mais é que a facilidade que ele poderá ser testado. Para isso, James Bach divide a testabilidade em sete atributos que facilitam a configuração do software para testes: Operabilidade, Observabilidade, Controlabilidade, Decomponibilidade, Simplicidade, Estabilidade e Compreensibilidade. É bom lembrarmos que, quando criando o software, o engenheiro já deve imaginar o que pode ser testado para que se encontrem erros. Além disso, é mais adequado que não seja esta mesma pessoa quem teste o programa.
Casos de Teste
Para se definir os casos de Teste de Software foram definidas duas maneiras básicas: Teste caixa-preta e Teste caixa-branca. O último tipo é feito através da lógica do software. Tomam-se os caminhos a serem percorridos na execução e tenta-se encontrar erros. Já o primeiro é feito na interface. São verificados se as funções funcionam corretamente. Se as entradas são enviadas de maneira correta, se não há falhas entre software e fonte externa e se a saída é produzida como se desejava. Para os casos de Teste caixa-branca podemos citar o Teste de caminho básico, no qual se usa a Teoria dos Grafos para se encontrar o melhor caminho dentro do código para se encontrar erros e não cair em testes repetitivos. Já para o Teste caixa-preta podemos citar a análise de valor-limite que se baseia em testes que exercem valores limítrofes e pode ser usado tanto em casos para entrada quanto para saída.
Bibliografia
PRESSMAN, Roger S. Engenharia de Software. 5. ed. Rio de Janeiro: Mcgraw Hill, 2002.