Entender o quanto é importante a etapa de teste é fundamental. Nesse sentido, nesta unidade apresentaremos os conceitos básicos relacionados aos testes de software. Iremos descrever as principais fases, apresentar técnicas, critérios, características e limitações direcionados ao teste de sistemas.
No decorrer da unidade, iremos descrever fundamentos essenciais relacionados aos testes, explicando a necessidade de serem realizados e definindo conceitos de teste de software.
Sobre processos fundamentais, iremos entender a importância do planejamento, desenho de testes, execução, monitoramento e controle e avaliação dos resultados. Encerrando a unidade, conceituaremos, ainda, as definições de verificação e validação em testes de software.
Em se tratando de desenvolvimento de software, já temos em mente conceitos e características importantes de como desenvolver softwares adequados a determinados problemas. Dentro desses conceitos e características podemos citar a análise e obtenção dos requisitos e diagramas, essenciais e cuja boa análise é extremamente importante. Porém, não são somente esses conceitos e características que são importantes. As metodologias existentes para o desenvolvimento de software não dão a total garantia de uma ótima qualidade para o software
Dessa forma, temos também o quesito teste de software. Mas qual a finalidade de se realizar um teste de software em um software desenvolvido? Para responder a essa pergunta, podemos realizar uma analogia a diversos produtos que são criados pela indústria, os quais são analisados e testados no decorrer da fabricação para que, quando disponibilizados ao usuário final, não tragam problemas.
Por essa razão, para a obtenção de uma boa qualidade do software produzido, temos como etapa fundamental o procedimento de testes em diversas vertentes do código fonte, já que essa é uma das últimas etapas do projeto de codificação (PRESSMAN; MAXIM, 2016).
Esses testes, realizados de uma forma criteriosa, têm assumido uma grande importância, pois, além de evitarem problemas na realização de suas funções, vêm cada vez mais impactando em custo, podendo chegar de 3 a 5 vezes o valor gasto em relação a outras atividades do desenvolvimento (SOMMERVILLE, 2011).
Imagine você se, em determinados tipos de software, como sistemas de controle de vôo, reatores nucleares e outros (que são sistemas críticos dos quais vidas humanas dependem), as atividades de testes de software não fossem realizadas adequadamente. Sabemos que isso poderia causar diversos problemas, não é?
Por esse motivo, todo e qualquer tipo de software deve passar por tipos de testes que devem ser realizados adequadamente, para que, assim, o desenvolvimento do software possa ser concluído sem problemas maiores, dependendo da sua finalidade.
Mas, se os testes são essenciais para a finalização dos softwares, por que, em muitas vezes, não são realizados adequadamente? A resposta para essa pergunta não é tão difícil. Sabemos que cada vez mais os prazos são tratados como importantes na fabricação de softwares, e de fato são. Porém, esses prazos estão interferindo na entrega de um bom produto. Muitas vezes, a pressão que se instala na entrega de um software interfere na contemplação da realização dos testes de forma correta e adequada.
Devemos entender que o desenvolvimento de um software está sujeito a diversas influências. Sendo assim, os testes tornam-se fundamentais. Outro ponto fundamental é que softwares são desenvolvidos por humanos que, querendo ou não, podem cometer erros de programação. Erros assim sempre estarão presentes, e os testes devem ser realizados de forma sistemática.
No final das contas, o grande desafio das empresas e, consequentemente, dos desenvolvedores é produzir qualquer software com qualidade. E mais: agregar a qualidade a um baixo custo e realizar o desenvolvimento em curto espaço de tempo. Porém, isso ainda está um pouco longe de acontecer.
Para concluir nosso entendimento sobre a importância da realização dos testes, vimos que a finalidade é agregar qualidade ao software final que será entregue. Essa qualidade ainda pode ser medida de acordo com os possíveis defeitos encontrados. Um software com boa qualidade é, no final, um software mais confiável, que passou por diversos testes e que teve suas falhas corrigidas.
Falamos até agora sobre a importância dos testes de software, mas o que são eles? Os testes foram criados para revelarem erros que foram cometidos ao se construir ou planejar um projeto de software.
Mas como tratar desses erros? Para começarmos a entender, devemos aplicar estratégias de teste de software, que devem ser desenvolvidas por gerentes de projeto, engenheiros ou especialistas em testes.
O teste é um trabalho moroso e, muitas, vezes ocasiona mais trabalho do que a codificação do software. Devemos iniciar os testes por pequenos componentes, aplicando-os para descobrir erros em relação aos dados e à lógica programada. Conforme vão sendo realizados, passa-se a testar componentes maiores. À medida que os erros são descobertos, os mesmos devem ser corrigidos (PRESSMAN; MAXIM, 2016).
Devemos entender que testar um software não é somente executá-lo e começar a realizar operações de passos a fim de encontrar determinados erros. Há toda uma programação por trás dessa etapa, como planejar as escolhas de condições de testes a serem executados, modelar os casos de testes, checar todos os resultados encontrados, gerar relatórios, avaliar os testes realizados etc (RIOS; MOREIRA, 2013).
Dessa forma, o processo de teste de software visa averiguar se o programa desenvolvido realiza as atribuições a que foi proposto e se realiza de forma confiável. Sendo assim, ao inserirmos uma entrada de dados no programa, sua saída deve ser conforme esperado no momento de sua codificação.
Outro ponto importante é que devemos nos ater a alguns conceitos fundamentais que nos ajudarão no processo tanto de planejamento como de execução de testes. Para começar, podemos entender como erro algum procedimento incorreto cometido por um programador. Um defeito é a consequência de um erro, uma falha é um efeito de um ou mais defeitos e um bug é um erro na lógica de programação (MOLINARI, 2013).
Após entendermos conceitos e fundamentos dos testes de software, podemos citar alguns princípios desses testes, como a Lei de Pareto, que indica que 80% dos erros normalmente podem ser localizados em 20% do projeto e, comumente, em módulos principais do projeto (PRESSMAN; MAXIM, 2016).
Outro princípio importante é que bons casos de testes são aqueles que encontram erros que ainda não foram descobertos. Esses casos são projetados sempre analisando o que foi colocado como requisito do projeto. Assim, concluímos a importância de um bom levantamento de requisito.
Não é novidade a qualidade relacionada a testes de software. Todos os anos, podemos verificar que as indústrias cada vez mais vão dando uma atenção diferenciada a essa atividade. E o futuro está aí! Sabemos que diversas tecnologias estão surgindo, como a Inteligência Artificial e a tão esperada Internet das Coisas. Nesse sentido, o que esperar do futuro do teste de software? Podemos verificar um pouco mais sobre esse assunto no link a seguir: tecnisys.com.br.
Vimos que o objetivo da atividade de teste é identificar/verificar a presença de erros, sejam lógicos ou não e, no final, realizar a sua correção. A partir disso, podemos começar a entender um pouco mais sobre esse processo importante, como verificar as fases presentes na atividade de teste de software.
A atividade de teste é dividida em fases, cada uma com objetivos distintos. Podemos iniciar falando sobre o teste de unidade, que é a fase em que as unidades individuais de um sistema são testadas individualmente. Cada uma das unidades é validada e verifica-se se estão funcionando conforme o planejado.
Outra fase é o teste de integração, que tem por objetivo testar cada unidade de forma combinada, ou seja, as unidades são testadas como um grupo, de forma integrada, expondo-se, assim, possíveis falhas.
Temos, também, a fase de testes de sistema, na qual o sistema é testado completamente. Todas as funcionalidades são integradas e a conformidade do sistema com os requisitos especificados é avaliada.
Por fim, temos a fase de testes de aceitação, onde são testadas todas as funcionalidades que o cliente requereu durante todo o projeto do software. Essa fase, claramente, deve ser realizada pelo usuário que utilizará o sistema final.
Devemos ter em mente que a execução dessas fases da atividade de teste nas etapas do desenvolvimento irá detectar possíveis falhas em tempo de desenvolvimento e, consequentemente, produzirá maior qualidade, diminuindo o custo do software.
Nos próximos tópicos iremos nos aprofundar um pouco mais nessas fases da atividade de testes.
Há vários tipos de testes existentes para serem aplicados no desenvolvimento de software, o que pode tornar o processo demorado e exaustivo. Dessa forma, existem alguns critérios e técnicas para se executar os tipos de testes existentes.
O objetivo dessas técnicas e critérios é realizar testes de forma clara e objetiva, possibilitando, assim, determinar em quais situações o software irá falhar.
Podemos citar brevemente algumas técnicas, como a técnica funcional. Essa, também conhecida como caixa preta, baseia-se nos requisitos funcionais e se preocupa com a saída de dados gerada após a entrada das informações. Normalmente, essa técnica apresenta algumas dificuldades em testar todas as entradas de dados possíveis. No entanto, ela pode ser aplicada por todo o desenvolvimento do software (RIOS; MOREIRA, 2013).
Um critério importante dessa técnica é o particionamento em classes de equivalência, que agrupa e otimiza casos de testes a fim de realizar uma melhor cobertura do sistema. Seu funcionamento se dá propondo a separação de possíveis entradas de dados em categorias diferenciadas. Como critérios para as divisões das partições, temos que a divisão deve ser bem clara e definida. Assim, um elemento deve ser igual ao outro da mesma partição e não pode existir ora em uma partição e ora em outra. Se, quando particionada, a divisão não possuir membros, ela simplesmente não existe e todo valor inválido também deve ser levado em contato para a divisão (RIOS; MOREIRA, 2013).
Dentro da técnica funcional, temos diversos testes que auxiliam na prevenção de erros. Podemos citar o teste de requisitos, o teste de regressão, o teste de interconexão e outros, que serão abordados adiante com mais detalhes.
Outra técnica que podemos mencionar é a técnica estrutural, ou caixa branca, que realiza testes relacionados à lógica (estrutura) interna do software, verificando a precisão do funcionamento do sistema codificado. Essa técnica é muito utilizada em fase de teste de unidade e integração (MOLINARI, 2013).
Uma característica importante da técnica estrutural engloba critérios baseados em fluxo de dados que irão descobrir caminhos para se testar o código, selecionar as definições de testes e, por fim, o uso das variáveis relacionadas ao código em questão. Esse critério utiliza de conceitos de grafos para a localização de caminhos simples. A partir disso, o critério de fluxo de dados verifica o comportamento das variáveis, até, por algum motivo, encontrar determinados defeitos que passaram despercebidos (PRESSMAN; MAXIM, 2016).
Na técnica estrutural, estão presentes os seguintes testes: o teste de execução, teste de estresse, teste de recuperação, teste de segurança e outros. Alguns desses testes serão aprofundados mais adiante, no decorrer de nosso livro.
Outra técnica presente é a técnica baseada em erros, que visa verificar se o sistema está livre dos erros típicos que desenvolvedores cometem ao implementarem um sistema. Como critérios, temos a análise de mutantes e semeadura de erros. Na análise de mutantes, os programas são criados baseados no software que deverá ser testado. Seu objetivo é encontrar testes que revelam a existência de comportamentos diferentes entre o software original e o software mutado. Ao final, como resultado, temos os erros e os números de erros esperado. Já no critério de semeadura de erros, como o próprio nome diz, o programa é semeado (inserido) artificialmente com alguns erros. Após isso, erros encontrados são analisados e é identificado o percentual de prováveis, descartando-se ao final os erros artificiais (MOLINARI, 2013).
Procurar uma nova validação a cada linha do código produzido, identificar possíveis brechas e garantir o tratamento de erros encontrados. Mas como podemos realizar essas atividades? Pensar, pensar e pensar é fundamental, e a resposta para isso é ser extremamente detalhista.
Uma das principais características de um teste de software é atribuir uma maior qualidade ao sistema desenvolvido pelos programadores. Mas o que seria um software com qualidade?
De modo geral, a qualidade de um software está muito ligada ao que um stakeholder/cliente acredita ser o melhor, ou seja, suas expectativas. Dessa forma, quanto mais um produto atenta para o que o cliente necessita, maior será sua satisfação.
Basicamente, a qualidade aqui relacionada como característica proposta pelo teste de software deseja minimizar as incertezas, erros, e, ainda, sistematizar os critérios de aceitação do software por parte do usuário.
Realizar testes em determinado software não significa dizer que o mesmo terá necessariamente uma boa qualidade. Para isso, precisamos aplicar determinadas características aos testes como, por exemplo, realizar um planejamento adequado de um ciclo para testes, composto pelo desenvolvimento, sua execução e, claro, a manutenção. Esse planejamento deve ser executado com antecedência e, obviamente, executado sistematicamente. Por essa razão, um template, ou seja, um modelo com um conjunto de etapas com as técnicas específicas para o teste do projeto e seus métodos de execução, é realizado e proposto (SOMMERVILLE, 2011).
Devemos entender que a qualidade deve estar relacionada desde a criação até a manutenção de um software, ou seja, o ciclo de vida de nosso sistema.
Os testes normalmente ajudam a responder determinados questionamentos, como os relacionados às expectativas do cliente. O software realmente funciona como o cliente quer? Devemos imaginar essa característica como se fôssemos o cliente e, para isso, é importante averiguar as especificações dos requisitos e até mesmo consultar novamente os stakeholders. Isso lhe trará, podemos dizer, um amadurecimento final de todo o projeto (PRESSMAN; MAXIM, 2016).
Outra característica importante (e podemos dizer que é sempre desejada por todos) é “pegar” o possível defeito antes do cliente. Sabemos que é difícil testar todas as possibilidades em um software, porém devemos sempre nos perguntar: o software funciona como o desenvolvedor espera? Muitas vezes o desenvolvedor acredita ter realizado adequadamente o que foi proposto, porém a prática pode não demonstrar isso.
Detectar problemas de design da aplicação e manter o sistema estável também são características essenciais. Possuir uma estratégia prévia, ou seja, planejada, do que deve ser realizado, torna a verificação dos erros por meio dos testes bem mais estruturada, o que propicia a garantia do funcionamento adequado.
Mas é fácil manter e testar um software? É uma pergunta pertinente e que nos faz pensar muito sobre o que estamos realizando em nosso software. De uma forma geral, o teste ajuda os desenvolvedores a realizarem o certo e de forma correta. Mas como? É fácil ter essa resposta! Se você, como testador, realiza a refatoração de seu sistema, elimina erros e procura as melhores práticas para serem aplicadas, temos uma grande porcentagem de seu software ter uma boa manutenibilidade. Podemos concluir, assim, que o grau de manutenibilidade do seu software é reflexo de sua testabilidade (RIOS; MOREIRA, 2013).
Concluímos, dessa forma, que das características dos testes podemos obter qualidades em sistemas. Porém, nem só do bom vivem as definições. Esbarramos em diversas limitações quando nos deparamos com os testes.
Determinados testes são exaustivos, tornando-os impraticáveis. Imagine você testar todas as possibilidades e todos os elementos possíveis de entrada de dados no software. Isso geraria um custo alto e um tempo de trabalho que não se encaixa no disponível pelas empresas.
Os procedimentos de testes existentes não provam a corretude de um sistema, mas, mesmo não sendo possível, é por meio desses testes que provamos que determinado programa está correto ou sem a presença da maioria dos erros. Realizar essa provação contribui para, de uma forma ou de outra, aumentar a confiança de um software em realizar as funções para as quais foi programado.
Outra limitação que podemos citar diz respeito à incompletude dos testes, ou seja, pode ser que os testes aplicados não encontrem erros, o que é um problema na construção do software.
Muitas limitações também esbarram em conhecimentos específicos, o que pode ser adquirido somente por experts em determinados problemas. Provar determinadas propriedades pode ser um pouco mais difícil. Assim, alguns testes podem ser limitados a propriedades de verificação simples e programas simples (MOLINARI, 2013).
O teste de software vem crescendo imensamente nos últimos tempos e vem se tornando uma etapa fundamental até a entrega do software ao usuário final. Sendo assim, apresentamos duas técnicas relacionadas ao teste de software que auxiliam num resultado considerável. Sobre as definições anteriores, quais foram as técnicas abordadas?
Técnica Tradicional e Técnica Funcional.
Não existe uma técnica tradicional, somente a técnica funcional.
Técnica Funcional e Técnica Estrutural.
Correta. O objetivo dessas técnicas e critérios é realizar testes de forma clara e objetiva, conseguindo, assim, determinar em quais situações o software irá falhar.
Técnica Organizacional e Técnica de Verificação.
Incorreta. Não existem a Técnica Organizacional nem Técnica de Verificação.
Técnica Estrutural e Técnica Organizacional.
Incorreta. Não existe uma Técnica Organizacional, somente uma Técnica Estrutural.
Técnica Funcional e Técnica de Verificação.
Incorreta. Não existe uma Técnica de Verificação, somente uma Técnica Funcional.
A indústria de software cada vez mais vem investindo em testes de software e verificamos, com isso, mudanças no desenvolvimento. Assim, temos uma tendência clara na performance e segurança, o que gera uma determinada qualidade no sistema desenvolvido. Falando em tendência, podemos verificar no link a seguir algumas inclinações para o teste de software esperadas para este ano. Vamos ler? Disponível em: olisipolearning.pt.
Neste tópico, iremos dar uma introdução ao teste de software, conceituando um pouco mais sobre esse assunto e indicando o porquê de ser necessário realizar testes em softwares computacionais.
Alguns objetivos do teste de software foram introduzidos no tópico anterior, porém vale a pena relembrar. Eles podem ser expressos por meio de atividades de teste que descobrem erros, sendo que um bom caso de teste revela erros ainda não descobertos anteriormente. Dizemos que a etapa de teste de software deve encontrar o maior número de erros e com o menor tempo gasto possível, não havendo, assim, esforço desnecessário.
Você sabia que tudo que consumimos é testado antes de chegar às prateleiras e, consequentemente, à sua casa? Pois bem, isso é um fato! Televisores, roupas e tudo que se possa imaginar é testado para que não haja problemas.
Assim, se tudo é testado, programas de computadores também são testados. Porém, softwares não são palpáveis, ou seja, não conseguimos pegar para analisar e verificar possíveis problemas. Dessa forma, como são realizados esses testes? Isso iremos aprender no decorrer de nossa disciplina.
Mas antes, vamos entender a razão de testarmos nossos softwares. Sabemos que, atualmente, falhas podem causar sérios prejuízos a empresas, uma vez que, se softwares possuem brechas de segurança ou outros tipos de erros, podem causar desde a perda de dados até problemas financeiros.
Como dito, hoje existem softwares presentes em praticamente tudo que conhecemos. Agora, imagine você: o que ocorreria se um software destinado a ser controlador de voo desse pane devido a erros de execução? Isso seria um caos, não acha? Aviões começariam a pousar e decolar ao mesmo tempo e, consequentemente, teríamos sérios problemas de segurança.
Com dito antes, independe de sua qualificação, humanos podem cometer erros em especificações, codificação e outros. Um erro acontece por diversos motivos, como falhas de comunicação, complexidades, pressão por prazos etc. Os testes irão trazer uma confiabilidade maior, pois sabe-se que passaram por todo um processo de verificação (MOLINARI, 2013).
Essa confiabilidade indica que um software não causará determinadas falhas por um tempo, já que um software pode conter defeitos não previstos ou encontrados e mesmo assim ser confiável.
Concluímos que um software sempre terá defeitos, pois há partes de um software que são menos testadas que outras, e problemas podem passar despercebidos, muitas vezes, pelo fato do prazo de entrega. A confiabilidade de um software tende a aumentar de acordo com o tempo, dependendo de como são realizados os testes.
Testes também precisam ter níveis de satisfação ou, como podemos dizer, níveis de independência. Um nível mais baixo diz respeito a testes realizados pelo próprio programador, o que não é muito aconselhável. Um nível médio diz respeito a testes realizados por programadores que fazem parte da equipe, porém diferente daquela que fez a codificação. Já no nível alto, os testes são realizados por uma pessoa que é independente da equipe de programação. E, por fim, um nível ainda mais alto é aquele no qual testes são realizados por ferramentas de testes. Este último é mais difícil de ser alcançado. Dessa forma, o aconselhável é realizar os testes por meio de pessoas independentes da equipe de programação (PRESSMAN; MAXIM, 2016).
Outro ponto importante relacionado ao teste de software é o que já comentamos anteriormente sobre teste e qualidade. De forma geral, a qualidade de um software é o grau ao qual determinado software atende sobre o que foi proposto às necessidades do usuário, como segurança, acessibilidade, custo pequeno e outros.
Mas será que testes em software podem aumentar a sua qualidade? Como resposta, obtemos um sonoro não. O teste, na verdade, ajuda a medir em qual nível está a qualidade do sistema e, consequentemente, a reduzir o risco da existência de problemas, aumentando, dessa forma, a sua confiabilidade.
Concluímos, então, após tudo que vimos, que a execução de testes é essencial para o sistema desenvolvido. No entanto, não é uma atividade que qualquer pessoa possa realizar. Concluímos, também, que testar não garante que não haja mais erros no sistema desenvolvido.
Nos tópicos anteriores, debatemos sobre assuntos relacionados a testes. São diversos conceitos essenciais para o entendimento de como realizar um teste em um sistema. Devemos compreender que o teste é composto por algumas atividades: planejamento e controle; análise e modelagem; implementação e execução; avaliação de critérios relacionados à saída de dados e relatórios; e, por fim, atividades relacionadas ao encerramento dos testes realizados (PRESSMAN; MAXIM, 2016).
De forma geral, os testes podem ser definidos como testes dinâmicos ou estáticos. No teste dinâmico, o sistema precisa ser executado para sua verificação, sendo composto pelas atividades de planejamento de testes, execução e controle de testes. Já o teste estático é composto pelas atividades de revisão, inspeção e análise estática do código (SOMMERVILLE, 2011).
Com o teste, de uma forma ou de outra, podemos verificar se um sistema executa o que foi programado e, para isso, aplicamos testes com dados fictícios, para que, assim, possam ser verificados possíveis erros.
Quando falamos sobre testes de software, podemos dizer que eles demonstram, tanto ao desenvolvedor quanto ao cliente, que o sistema em questão atende ao que foi proposto e, também, encontram situações que são equivocadas, como panes e processamentos dos dados de forma incorreta (MOLINARI, 2013).
Mas devemos entender, também, que os testes não demonstram se o sistema está livre de problemas, ou ainda se ele executará o especificado, dependendo de uma determinada situação aplicada.
O processo de teste normalmente realiza uma mistura de testes manuais e automatizados. No manual, um testador irá executar o sistema com diversos tipos de dados e verifica se os resultados estão de acordo com sua expectativa. Já no teste automático, os tipos de testes são adicionados em um programa que, quando executado, realiza os testes no sistema (RIOS; MOREIRA, 2013).
Porém, apesar de seu aumento nos últimos anos, os testes automáticos não podem estar totalmente presentes em um sistema, pois o mesmo só realiza o que foi proposto no software de teste.
Podemos concluir que o teste de software faz parte de todo o processo de desenvolvimento do sistema e, conforme visto anteriormente, o principal objetivo é revelar possíveis erros para que seja possível a sua correção até atingir uma boa qualidade para a entrega deste produto ao usuário final.
Hoje, podemos entender que o profissional que trabalha com a realização dos testes é um dos mais importantes profissionais, possuindo, normalmente, um vasto ramo de atividades, como avaliação da especificação de requisitos e projeto técnico, verificação de documentos, testes de performance e capacidade, avaliação de interface, avaliação de módulos e diversas outras que são fundamentais (MOLINARI, 2013).
É importante lembrar que a realização de testes deve ser feita desde as fases iniciais da programação do software, o que pode gerar uma economia em seu custo final. Uma ideia é que os testes já sejam projetados desde o planejamento inicial do sistema. Dessa forma, para todas as suas funcionalidades, conforme vão sendo planejadas, vão sendo projetados possíveis testes que irão auxiliar na verificação de erros.
Temos diversos testes e técnicas que auxiliam e que podem ser feitos no decorrer da programação do software. Podemos verificar, no Quadro 1.1, um breve resumo de alguns tipos de testes existentes.
Quadro 1.1 - Tipos de Testes de Software
Fonte: Adaptado de Sommerville (2011).
Com o exposto anteriormente, começamos a entender um pouco mais sobre os motivos e importância de se realizar testes em softwares, e ter o entendimento é essencial para o prosseguimento de nossos estudos.
O teste de software faz parte de todo o processo de desenvolvimento e tem como objetivo revelar erros para possível correção. Ao realizar testes em software, o testador trabalha com algumas atividades. Sobre essas atividades, a alternativa que indica corretamente duas delas é:
Avaliação da equipe e avaliação de módulos.
Incorreta. Avaliação da equipe não é uma das atividades. Avaliação de módulos, sim.
Avaliação da especificação de requisitos e avaliação de interface.
Correta. O profissional que trabalha com a realização dos testes trabalha com um vasto ramo de atividades, como avaliação da especificação de requisitos e projeto técnico, verificação de documentos, testes de performance e capacidade, avaliação de interface, avaliação de módulos e diversas outras que são fundamentais.
Testes de performance e capacidade e avaliação de programadores.
Avaliação de programadores não faz parte das atividades. Testes de performance e capacidade, sim.
Avaliação de projeto técnico e avaliação de irregularidades.
Incorreta. Avaliação de irregularidades não é uma das atividades. Avaliação de projeto técnico, sim.
Avaliação de interface e teste dimensional.
Incorreta. Teste dimensional não faz parte das atividades. Avaliação de interface, sim.
Agora que começamos a entender um pouco mais sobre os testes de software, podemos nos perguntar: por que escolher a área de teste de software como carreira? Não precisamos de muito para responder a essa pergunta. Vimos em nosso texto que é algo crescente mundialmente. Para melhor entendermos, separamos o link a seguir, que demonstra um pouco mais sobre a área de testes de software. Vamos ver? Disponível em: blog.db1.com.br.
Ao tratarmos sobre os testes, entendemos que, para que os mesmos funcionem de forma correta, devem ser tratados como um processo fundamental.
Esse processo fundamental é composto por algumas características, como planejamento, desenho dos testes, execução, monitoramento e controle e, por fim, avaliação dos resultados.
A partir de agora, iremos entrar nas definições dessas características, como poderemos verificar adiante.
É uma atividade essencial no desenvolvimento do software. O planejamento auxilia o programador ou testador no conhecimento de seus objetivos. Perceber qual meta você deseja alcançar é de suma importância.
O planejamento na fase dos testes não é muito diferente de qualquer outra fase de planejamento em todos os projetos de software. Nesse caso, garantir o sucesso e a qualidade do sistema é essencial nesta fase, que engloba alguns documentos como plano de teste, caso de teste e roteiro de teste.
Podemos dizer que o plano de teste é a base de qualquer teste de software e é um dos documentos que auxilia na aplicação em um projeto. Aqui, são apresentadas atividades relacionadas a teste, critérios de validação e outros (MOLINARI, 2013).
Um plano de teste deve realizar a integração entre as atividades existentes e deve ser o mecanismo que realiza a comunicação com as partes interessadas no sistema. Nesse sentido, pode conter definições a respeito do escopo e objetivos, o conjunto de requisitos a serem testados, os tipos de testes que devem ser realizados e possíveis ferramentas que podem ser utilizadas, cronogramas de atividades e possíveis recursos que podem ser utilizados nos testes (RIOS; MOREIRA, 2013).
Dessa forma, percebemos que o planejamento pode antecipar problemas que podem ocorrer com o nosso software a ser desenvolvido. Assim, podemos listar alguns itens que precisam ser considerados em um plano de teste, trazidos a seguir (MOLINARI, 2013):
Um documento pertinente ao planejamento é o caso de testes, que descreve determinadas condições a serem testadas, como se fosse uma criação de um caso de testes que irá encontrar falhas e problemas não tratados como requisitos. Outro item importante refere-se os roteiros de testes, que descrevem como realizar a execução dos casos de testes citados anteriormente (RIOS; MOREIRA, 2013).
Ao final, o processo de teste torna-se mais produtivo.
O desenho de casos de testes é utilizado para testar o sistema, sempre criando testes eficazes na validação e na identificação de defeitos. Entre as técnicas de desenho de defeitos, podemos citar os testes de caixa-preta, caixa-branca, dedução de erros, exploratório e outros, como vimos no Quadro 1.1.
Os testes devem ter a responsabilidade de conseguir indicar aos nossos clientes o que foi e o que não foi testado. Assim, quando o software desenvolvido funciona ou falha, dizemos que ele se comporta corretamente ou não para alguns valores inseridos, e isso é designado por divisão de equivalência.
A divisão de equivalência demonstra alguns métodos que auxiliam na compreensão do porquê de o sistema agir corretamente ou não para alguns valores. Essa ideia de equivalência nos mostra que o programa irá lidar com valores que são da mesma forma, ou seja, equivalentes. Assim, deveremos realizar um conjunto de valores possíveis e outro de valores equivalentes (MOLINARI, 2013).
Para essa técnica podemos testar a lógica, tanto para valores verdadeiros ou falsos como para entradas conhecidas ou desconhecidas, dados corretos ou incorretos e diversos outros que irão auxiliar nessa fase.
Outro método que podemos citar é o que realiza testes com valores corretos ou incorretos. Por exemplo, para testes com entradas numéricas, comece testando os valores típicos, costumeiros de serem digitados, e para valores incorretos, teste incluindo números negativos, zero, ou ainda símbolos e letras, que não são valores usuais (RIOS; MOREIRA, 2013).
Ainda temos o método de teste de combinações lógicas que, como o próprio nome diz, irá testar as combinações lógicas dos sistemas, visando encontrar possíveis buracos na lógica programada. Porém, são combinações perigosas, dependendo do tamanho dos problemas propostos no sistema.
Nesta etapa iremos implementar e executar nossos testes. Para isso, serão criados roteiros de testes. Nesses roteiros, criaremos dados de testes e, de acordo com esses dados, executaremos os casos de testes até serem finalizados.
Como retorno, analisaremos os dados e verificaremos possíveis atualizações, realizando a rastreabilidade entre a base de testes e os casos de testes, comparando os resultados obtidos com os esperados para que o sistema seja entregue de forma adequada (SOMMERVILLE, 2011).
A monitoração e o controle dizem respeito a monitorar situações que podem ocorrer relacionadas a defeitos. Dessa forma, retornam indicadores da situação de nosso projeto, como situações de defeitos em nível de reincidência, quais tipos de defeitos apareceram, níveis de rejeição e outros.
A monitoração, de uma forma ou de outra, visa garantir que o nosso teste no software ocorra conforme planejamos lá no início do projeto. Caso ocorram alguns problemas, os gerentes de testes podem aplicar determinadas características que coloquem as atividades de teste “na linha” novamente, para que retornem para as características desejadas (MOLINARI, 2013).
Existem alguns indicadores que auxiliam no monitoramento e controle dos processos, como: a verificação de números de defeitos encontrados no desenvolvimento; número de defeitos encontrados na atividade de teste; em relação aos requisitos, a verificação do número de casos de teste por cada requisito; monitoramento do tempo previsto do projeto, como horas gastas para a realização e conclusão do projeto; monitoramento dos defeitos por casos de testes; e possíveis reincidências de defeitos pelos testes realizados (SOMMERVILLE, 2011).
Sabemos que, ao final do desenvolvimento de um sistema, programadores, empresas e até clientes querem um software com qualidade. Vimos que, para que isso aconteça, as atividades de testes são fundamentais na construção de um sistema mais sólido, assim, com maior confiabilidade e qualidade.
A avaliação dos resultados tem por objetivo verificar o desempenho dos processos de teste. Para isso, deve-se compreender o problema e o entendimento desse processo, estabelecer métricas, coleta e análise dos dados, mapeamento de processos etc.
A compreensão do problema é fundamental, pois corresponde aos estudos do processo de testes que devem ser analisados, como a identificação de funções para o teste, identificação de artefatos e outros, para, assim, ser possível a verificação de pontos de melhoria no sistema referente aos processos que foram adotados.
Em relação às métricas, elas são estabelecidas para a verificação dos resultados obtidos. São definidas métricas de interesse, como por exemplo a verificação da satisfação em relação aos métodos utilizados.
Outro tipo é a análise e coleta de dados, que compreende a definição e seleção de informações a serem analisadas. Essa fase corresponde à verificação de possíveis inconsistências nos dados e aplicação de melhorias a partir desses dados.
Assim, podemos verificar a importância da avaliação dos resultados, e que a partir de dados coletados observa-se possíveis melhorias no sistema.
Testes de software possuem determinados processos que são fundamentais para que um software possa ser entregue conforme o solicitado pelas empresas/usuários. Esses processos possuem algumas características que podemos encontrar em qual das alternativas a seguir?
Estratégias, Execução de Testes Automáticos, Controle e Avaliação dos Resultados.
Incorreta. Estratégias e Testes Automáticos não fazem partes das características dos processos fundamentais do software.
Planejamento, Desenho dos Testes, Execução, Monitoração e Controle e Avaliação dos Resultados.
Correta. Os processos fundamentais do software possuem características como: Planejamento; Desenho dos Testes; Execução; Monitoração e Controle; e Avaliação dos Resultados.
Execução de Testes Simples, Monitoração dos Resultados e Controle dos Erros Encontrados.
Incorreta. Execução de Testes não faz parte dos processos fundamentais.
Execução de Análise de Requisitos, Planejamento Estrutural e Controle e Avaliação dos Resultados.
Incorreta. Execução de Análise de Requisitos e Planejamento Estrutural não fazem parte dos processos fundamentais.
Desenho dos Testes, Controle e Monitoramento de Usuários, e Avaliação dos Erros Encontrados.
Incorreta. Controle e Monitoramento de Usuários e Avaliação dos Erros Encontrados não fazem parte dos processos fundamentais.
Você já ouviu falar em metodologias ágeis? Se ainda não, é importante que leia um pouco mais sobre esse assunto. Adicionar metodologias ágeis ao andamento do teste pode melhorar o processo fundamentalmente. Dessa forma, separamos para você um material sobre testes ágeis que lhe ajudará a entender um pouco mais sobre o assunto, que vem crescendo de forma a melhorar os processos existentes. Vamos ver um pouco mais sobre isso? Acesse: imasters.com.br.
Dentro de testes de software existem alguns conceitos fundamentais que devem ser compreendidos e que asseguram que o software a ser desenvolvido seja construído de forma adequada. Sendo assim, os conceitos são de validação e verificação, os quais iremos compreender um pouco mais a seguir.
O teste de software contempla conhecimentos essenciais sobre verificação e validação (V&V). A verificação refere-se, simplesmente, ao conjunto de tarefas que irão implementar corretamente uma determinada função do sistema. Já a validação engloba um conjunto de tarefas no qual verifica-se se o software que foi criado atende às especificações desejadas pelo cliente.
Temos outras definições relacionadas. Por exemplo, na verificação pergunta-se: “Fizemos o software corretamente?”; e na validação: “Estamos criando o produto certo?” (PRESSMAN; MAXIM, 2016).
As atividades de verificação se resumem em avaliar se o que foi planejado foi, devidamente, realizado, incluindo os requisitos, funcionalidades, documentação etc. As atividades da validação avaliam o que foi entregue. Assim, analisa-se se os requisitos atendem ao que foi proposto. Ao final, o cliente realiza sua validação.
A verificação e a validação incluem atividades relacionada à garantia de qualidade de software, ou software quality assurance (SQA), a exemplo das revisões técnicas, monitoramento de desempenho, simulações, estudo de viabilidade, análise de algoritmo, teste de usabilidade e alguns outros (PRESSMAN; MAXIM, 2016).
Os testes têm um papel muito importante na verificação e validação, pois os erros podem ser descobertos. Porém, os testes não podem ser tomados como aquilo que irá gerar a segurança. A qualidade gerada pelos testes é incorporada ao software por meio de processos de engenharia de software, e as aplicações corretas desses métodos conduzem a uma qualidade (SOMMERVILLE, 2011).
Pressman e Maxim (2016), em seu livro “Engenharia de Software: Uma Abordagem Profissional”, citam Miller (1977), relacionando o teste de software com a garantia de qualidade, dizendo que:
[...] a motivação que está por trás do teste de programas é a confirmação da qualidade de software com métodos que podem ser economicamente e efetivamente aplicados a todos os sistemas, de grande e pequena escala (MILLER, 1977, p. 1-3, apud PRESSMAN; MAXIM, 2016, p. 468).
Temos como padrão de verificação o padrão IEEE 1012, e seus processos são utilizados para ver se produtos de desenvolvimento de uma determinada atividade estão em conformidade e se o produto satisfaz ao que foi proposto, conforme a necessidade do usuário.
Os processos da Verificação e Validação possuem atividades como análise, avaliação, revisão, inspeção e teste de produtos, que têm como objetivos estabelecer uma estrutura de processos, atividades e tarefas e definir um plano de verificação e validação (PRESSMAN; MAXIM, 2016).
Para uma melhor compreensão de verificação e validação, podemos exemplificar com tampas de garrafas. Cada garrafa fabricada por uma empresa tem um tamanho específico, dependendo do tipo de garrafa. Uma empresa, por exemplo, com o molde de sua garrafa, produz a tampa que deve encaixar e fechar a mesma. Porém, o protótipo dessa tampa não garante que as tampas irão fechar as garrafas fabricadas. Se o fabricante tentar fechar suas garrafas com as tampas produzidas, significa que o mesmo está validando suas tampas, podendo, assim, verificar se elas funcionam e atendem às suas necessidades.
O teste de software possui alguns conceitos fundamentais que devem estar compreendidos pelos testadores de software. Sobre os conceitos fundamentais, a alternativa que apresenta corretamente o conceito de Verificação é:
A verificação refere-se a um conjunto de tarefas que verificam se o software que foi criado atende às especificações que o cliente deseja.
Incorreta. A definição anterior diz respeito a validação.
A verificação refere-se, simplesmente, ao conjunto de tarefas que irão implementar corretamente uma determinada função do sistema.
Correta. As atividades de verificação se resumem em avaliar se o que foi planejado foi, devidamente, realizado. Assim, estão incluídos os requisitos, funcionalidades, documentação etc.
A verificação é utilizada para testar o sistema, sempre criando testes eficazes na validação e na identificação de defeitos.
Incorreta. A definição anterior diz respeito a desenhos de testes, dos processos fundamentais do teste.
É na verificação que iremos implementar e executar nossos testes. Para isso, serão criados roteiros de testes.
Incorreta. A afirmação diz respeito à definição de execução, dos processos fundamentais do teste.
A verificação auxilia o programador ou testador a conhecer seus objetivos.
Incorreta. A afirmação diz respeito à definição de planejamento, dos processos fundamentais do teste.
Testar um software antes que ele seja entregue ao cliente é fundamental, já que queremos entregar nosso software sem problemas ou falhas. Essa fase é crucial para verificar se o que foi feito cumpre com o que foi solicitado. E, claro, a verificação e a validação auxiliam nessa etapa. Para que você não fique com dúvidas quanto às definições e diferenças entre essas atividades, separamos um link para leitura. Acesse: logicalminds.com.br.
Nome do livro: Engenharia de Software
Editora: Pearson
Autor: Ian Sommerville
ISBN: 978-8579361081
O livro “Engenharia de Software”, de Ian Sommerville, é um dos livros que devemos colocar na cabeceira da cama. É um dos principais livros sobre o assunto e tem o intuito de atender às necessidades de alunos e professores da área de tecnologia da informação. A obra conta agora com capítulos que focalizam o desenvolvimento do software desde seu início, com seus princípios básicos, até chegar ao desenvolvimento ágil de software e os sistemas embarcados.
Nome do filme: O Jogo da Imitação
Gênero: Drama
Ano: 2015
Elenco Principal: Benedict Cumberbatch, Keira Knightley, Matthew Goode, Charles Dance, Rory Kinnear e Mark Strong.
O filme conta a história de vida de Alan Turing, que foi adaptada para o cinema. O intuito principal foi mostrar a construção de uma máquina que interpretava códigos nazistas, incluindo o "Enigma", o qual criptógrafos acreditavam ser inquebrável na época. Após desvendar as codificações, Turing torna-se herói, pois a máquina consegue o seu objetivo, alterando, consequentemente, um pouco o destino da guerra naquele período. Porém, em 1952, autoridades revelam sua homossexualidade, transformando a vida de Turing em um pesadelo.