Atualmente, muito se fala sobre qualidade de software, os desenvolvedores por vezes não sabem se estão no caminho certo. Para esclarecer um pouco sobre este assunto, neste artigo vamos tratar alguns pontos principais sobre este tema.

Qualidade de Software

A história do teste de software começa há muito tempo, mas foi em 1957 que o conceito de teste se tornou o processo de detecção de erros e não de verificar se o software funciona, e foi em 1979 que Myers produziu os primeiros trabalhos complexos sobre o processo de teste. Nesta época já se dizia que o teste deveria ser a intenção de encontrar erros. Com o passar dos anos, os projetos foram tendo mais e mais problemas devido à complexidade dos sistemas, segundo Bartié “Mais de 30% dos projetos são cancelados antes de serem finalizados e mais de 70% dos projetos falham nas entregas de funcionalidade”. Estas falhas criaram um ambiente caótico e problemático para os gestores, desta forma, criou-se a necessidade de implementação de processos de qualidade, que busquem estabelecer procedimentos que sirvam de garantia e gerenciamento de qualidade. Assim surgiram modelos como o CMM (Capability Maturity Model), que foi definido pelo Instituto de Engenharia de Software (SEI), descrevendo uma estrutura de trabalho. Esta estrutura possui itens necessários para tornar o processo eficiente e controlado.

O modelo é dividido em cinco níveis do inicial ao otimizado, os níveis são sequenciais, desta forma, uma empresa para atingir o ultimo nível, deve ter passado por todos os níveis anteriores.

O nível dois do CMM já define o processo gerencial de qualidade de software, o que demanda processos de testagem.

Os testes devem provar que algo não funciona, e são essenciais para o sucesso do processo de qualidade de software.

“ Os testes unitários podem resolver entre 30% a 50% dos defeitos dos programas, os testes de sistemas podem remover entre 30% a 50% dos defeitos remanescentes, desse modo, os sistemas podem ir para produção ainda com aproximadamente 49% dos defeitos. Por último, as revisões de códigos podem reduzir entre 30% e 30% desses defeitos.” Myers in Bastos, 2002.

A realização de testes desde o início do desenvolvimento é algo aconselhado não só pelas metodologias ágeis, mas como pode ser visto em Myers, indicado para a garantia de qualidade, visto que os testes são realizados do início ao final do processo de desenvolvimento.

O processo de teste atua dentro de uma visão de qualidade como o PDCA no momento de check, mas em desenvolvimento, é possível realizar testes em todos os processos, do fazer (testes unitários) até o planejamento.

PDCA

A realização de testes de software pode ser feito de forma manual ou automatizada, esta última indica a utilização de ferramentas de teste. As ferramentas de teste permitem ao testador automatizar parte do processo de teste, facilitando a retestagem para validação dos testes.

“A atividade de teste, como a de desenvolvimento, gera grande número de informações e necessita de várias repetições, além de requerer coordenação e comunicação entre as equipes. As ferramentas de teste podem aliviar o fardo da produção e da execução de teste, da geração de informação e da comunicação.” Bastos, 2002.

Como exemplo temos:

Para os testes de caixa branca, de codificação, as ferramentas XUnit's como o JUnit, NUnit, PHPUnit entre outros. Estas ferramentas permitem ao desenvolvedor/testador criar testes de validação dos códigos, verificando as funcionalidades e retornos das unidades do sistema.

Mais sobre testes unitários em PHP pode ser visto em: Qualidade em desenvolvimento Web: PHP com teste unitário.

E sobre testes unitários em Java, pode ser visto em: Introdução ao desenvolvimento guiado por teste (TDD) com JUnit e Testes Unitários.

Outro teste essencial para garantia dos requisitos não funcionais é o teste de performance e stress, que tem como função validar o limite da aplicação, entre eles o limite de usuários simultâneos, limite de dados do sistema, etc. Existem diversas ferramentas que possibilitam os testes de performance, entre elas temos o JMeter, ferramenta livre, da fundação Apache que permite a criação de um conjunto de testes, além de poder ser integrado a IDE's e outras ferramentas de teste.

Para mais informações sobre JMeter, acesse: Usando o JMeter para teste de performance.

Também são necessários os testes funcionais, que garantem que certas funcionalidades estão de acordo com os requisitos do projeto. Os testes funcionais podem ser exploratórios, manuais e automatizados. Existe diversas ferramentas para automação de testes funcionais, e uma das ferramentas livres mais utilizadas para este fim é o Selenium.

Outro ponto fundamental nos dias atuais, principalmente depois que a Symantec apresentou o relatório que o Brasil é o 4º pais com pior segurança de informação, são os testes de segurança. Existem diversas formas de analisar a segurança de um programa, verificando estouro de buffer, analisando ataques de SQL, entre outros.

Este artigo é apenas uma explicação básica sobre as ferramentas e o teste de software, é indicado que vocês leiam o artigo Engenharia de Software - Introdução a Teste de Software que trata sobre introdução a teste de software e os artigos indicados no decorrer do artigo.

Referencial

  • MOLINARI, Leonardo. Testes de Performance, Florianopolis: Visual Books, 2009.
  • BARTIÉ, Alexandre. Garantia da Qualidade de Software, Rio de Janeiro: Campus, 2002.
  • BASTOS, Anderson; RIOS, Emerson; CRISTALLI, Ricardo; MOREIRA, Trayahú. Base de conhecimento em teste de software. São Paulo: Martins Fontes, 2007.