Você está na página 1de 43

16/08/2023, 20:40 Ead.

br

QUALIDADE E TESTE
DE SOFTWARE
Me. Roque Maitino Neto

INICIAR

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 1/43
16/08/2023, 20:40 Ead.br

introdução
Introdução
Depois de estudarmos na primeira Unidade os tópicos fundamentais de Qualidade de Software, os
processos que visam garanti-la, parâmetros e padrões, é normal que algumas questões venham à
tona: a aplicação de todas essas providências e ações é suficiente para nos garantir um produto livre
de erros? As funções da equipe da qualidade se resumem a seguir corretamente padrões e aplicar
métricas de forma rigorosa?

Na vida real, respondemos a essas questões com um “não”. Embora um processo de


desenvolvimento corretamente conduzido e aplicação de métodos relacionados à qualidade tendem
a gerar um bom produto, ainda assim este deverá passar por exames e provas que atestem sua
qualidade em funcionamento. Damos o nome de teste de software e sua abordagem será o tema
central deste nosso encontro.

Iniciamos, aqui, a segunda Unidade do curso de Qualidade e Teste de Software, desejando a você
um ótimo aproveitamento deste conteúdo que, certamente, despertará bastante interesse.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 2/43
16/08/2023, 20:40 Ead.br

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 3/43
16/08/2023, 20:40 Ead.br

Teste de Unidade

Mesmo se você não for um viciado em automóveis, ainda assim será capaz de imaginar que estes
são compostos por várias unidades distintas que, juntas, serão capazes de fazê-los rodarem com
segurança e conforto. O motor, a suspensão, os medidores e o sistema de ar condicionado são
exemplos de partes do todo e, para que estejam aptas a compor um carro, precisam ser testadas
uma a uma antes de serem colocadas à prova de modo integrado.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 4/43
16/08/2023, 20:40 Ead.br

Pois é assim mesmo que funciona o teste de um software: as partes planejadas durante o projeto,
que desde já chamaremos de unidades, deverão passar por testes isolados antes de serem avaliadas
em conjunto com todo o restante do sistema. Colocada de forma simples e objetiva, essa é essência
de um teste de unidade.

Antes de desenvolvermos essa ideia, no entanto, trataremos de conceitos básicos relacionados ao


teste de software. Vamos a eles.

Conceito de Teste
Um teste – ou um processo de teste – consiste em uma sequência de ações executadas com o
objetivo de encontrar problemas no software, o que aumenta a percepção de qualidade geral do
software e garante que o usuário final tenha um produto que atenda às suas necessidades
(PINHEIRO, 2015).

Nenhuma equipe de qualidade irá aplicar testes em um software (ou em uma unidade dele) com o
objetivo de garantir que o produto é livre de defeitos. A certeza de que um programa não possui
falhas, erros ou defeitos (logo saberemos a diferença entre eles) não é algo atingível no mundo real.
Se o processo de teste não revelar defeitos, há que se aprimorar os casos de teste e o processo
empregado. Não se pode acreditar que o sistema não possui problemas se o teste aplicado não for
capaz de revelá-los.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 5/43
16/08/2023, 20:40 Ead.br

Etapas do Processo de Teste


O processo de teste é normalmente separado em quatro grandes etapas:

1. Planejamento: nessa etapa deve ser definido quem executa os testes, em que período,
com quais recursos (ferramentas de teste e computadores, por exemplo) e qual será́ a
técnica utilizada (técnica estrutural ou técnica funcional, por exemplo).
2. Projeto de casos de teste: aqui são definidos os casos de teste que serão utilizados no
processo. No próximo item, esse conceito será́ detalhado.
3. Execução do programa com os casos de teste: nessa etapa, o teste é efetivamente
realizado.
4. Análise dos resultados: verifica-se se os testes retornaram resultados satisfatórios.

Casos de teste

Um caso de teste é o par formado por uma entrada no programa e a correspondente saída
esperada, de acordo com os requisitos do sistema (NETO, 2016). O conceito de entrada relaciona-se
com o conjunto de dados necessários para a execução do programa. Tomemos como exemplo um
programa que oferece ao usuário a possibilidade de inserir valores de produtos alimentícios de
varejo para emissão de nota fiscal. Esse conjunto de valores comporá os dados de entrada que, após
a validação, deverão ser gravados em banco.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 6/43
16/08/2023, 20:40 Ead.br

A saída esperada é o resultado de uma execução do programa ou função específica. Ainda


considerando o exemplo da inserção de valores de produtos, um caso de teste possível seria: (200;
válido). Ao receber a entrada 200, o programa de validação de valores deveria retornar “valor válido”.

A boa escolha dos casos de teste é fundamental para o sucesso do procedimento, já que um
conjunto de casos de teste de baixa qualidade pode não exercitar partes críticas do programa e não
será capaz de revelar defeitos no código. Se o responsável pelos testes usasse apenas valores
válidos como entradas, a parte do programa que trata dos valores inválidos não seria executada, o
que prejudicaria a confiabilidade do processo de teste e do produto testado. Observe estes casos de
teste:

t1= {(53,70;válido), (30/1/2004;inválido); (-6;inválido); (12,9;válido), (***;inválido), (0;inválido)}. Com


esse cenário, certamente a maior parte do código será́ coberta e a chance de detecção de defeitos
aumentará.

Fica claro que o sucesso no procedimento de testes está diretamente relacionado à correta escolha
dos casos de teste. Idealmente, cada conjunto de casos de teste deverá estar associado a um grande
requisito diferente a ser testado. Imagine que um produto tenha como duas de suas funções
principais a emissão de relatórios de produtos avariados no processo de fabricação e de validação
do peso do produto fabricado, tendo 0,01Kg como variação máxima permitida. É certo que a equipe
de teste deverá criar casos de teste para essas duas funções, cuidando para que atendam a maior
variedade possível de situações.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 7/43
16/08/2023, 20:40 Ead.br

Para que não se corra o risco de definir casos de teste incorretamente, é necessário planejamento e
o bom conhecimento da aplicação. Uma boa forma de se abordar o problema é a que segue
(PINHEIRO, 2015):

Definir o ambiente no qual o teste será́ realizado;


Definir a entrada desse caso de teste;
Definir a saída esperada para cada entrada;
Definir os passos a serem realizados para executar os testes.

Quando um caso de teste é executado, o seu resultado deve ser coletado. Podemos assumir
diferentes abordagens para definir o resultado da aplicação de um caso de teste específico. A mais
comum define as seguintes opções (PINHEIRO, 2015):

Passou: todos os passos do caso de teste foram executados com sucesso para todas as
entradas;
Falhou: nem todos os passos foram executados com sucesso para uma ou mais entradas;
Bloqueado: o teste não pôde ser executado, pois o seu ambiente não pôde ser
configurado.

Assim definimos os casos de teste. Há, no entanto, três conceitos especialmente importantes no
contexto de teste que merecem abordagem mais específica, até por serem confundidos entre si.
Vamos a eles.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 8/43
16/08/2023, 20:40 Ead.br

Defeito, Falha e Erro


Qual é a expressão que você usa quando um programa simplesmente trava ou não produz o
resultado que se espera? Nomes não faltam para o que acontece de incomum durante a execução
de um software: falta, incidente, problema, falha, anomalia e por aí vai. Genericamente podemos
resumir todos em um: bug . Pinheiro (2015) define que um bug ocorre quando:

O software não executa uma função que ele deveria executar, segundo sua especificação;
O software executa uma função que não deveria executar, segundo sua especificação;
O software executa uma função não prevista em sua especificação;
O software não executa uma função não prevista em sua especificação, mas que deveria
estar;
O software é difícil de ser usado ou entendido, além de passar a impressão ao usuário final
de não estar correto.

Parece que essa lista diverge um pouco do que entendemos como bug, não é mesmo? Esse
tratamento genérico, no entanto, não nos serve para identificar corretamente cada problema que
pode ocorrer em um programa durante sua execução. Observe os conceitos:

Defeito: trata-se de deficiência algorítmica que, se ativada, pode levar a uma falha. Vamos a um
exemplo. Observe o trecho que segue, escrito em pseudocódigo:

a = –1;

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 9/43
16/08/2023, 20:40 Ead.br

b = 0;

enquanto a < 0 faça

b = b + 1;

imprima (b);

imprima (a);

fim_enquanto;

Observe que em momento algum da execução o valor da variável a deixará de ser menor que zero, o
que fará com que a condição de parada do laço jamais seja satisfeita. Estamos diante de um defeito,
mais precisamente um laço infinito. Se o caso de teste escolhido for capaz de exercitar esse trecho
do código, o defeito se manifestará e, então, teremos uma falha observável.

Falha: é tida como um não funcionamento do software, provavelmente, provocado por um defeito.
Contudo, uma falha também pode estar relacionada a uma queda na comunicação ou a um erro na
leitura do disco, por exemplo.

Erro: ocorre quando o resultado obtido em um processamento e o que se esperava dele são
diferentes. Pode-se associar um erro, portanto, a um fato visível durante a execução de um
programa. Um erro também está associado a uma violação nas próprias especificações do software.
Como exemplo, tomemos um usuário que consegue acessar determinado módulo do programa

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 10/43
16/08/2023, 20:40 Ead.br

para o qual não está autorizado (esse é o resultado obtido), sendo que seu nível de privilégios não
deveria permitir que o fizesse (o não acesso era o resultado esperado).

Antes de abordarmos o teste de unidade em específico, a definição de mais um elemento básico dos
testes se faz necessária.

Depuração
Se testar significa executar o software para encontrar defeitos desconhecidos, a depuração é a
atividade que consiste em buscar no código a localização desses defeitos. Durante o processo de
teste, é comum que se descubra a existência de um defeito sem que se saiba, contudo, sua
localização no código-fonte. A depuração, portanto, tem a função de apontar o local exato do
defeito.

Os ambientes de programação atuais oferecem recursos para depuração do programa. Durante


esse processo, o valor assumido pelas variáveis sob inspeção em cada passo do algoritmo pode ser
observado. Além disso, alguns pontos de parada da execução do programa podem ser inseridos no
código.

O teste de Unidade

Colocados esses elementos básicos, nosso foco volta-se para a abordagem do teste de unidade. Um
software produzido com base em métodos consagrados será, necessariamente, dividido em
módulos. Embora sejam importantes, os critérios utilizados para essa divisão não fazem parte do

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 11/43
16/08/2023, 20:40 Ead.br

escopo desta Unidade. Contudo, é necessário registrar que cada módulo deve ser o mais coeso e o
menos funcionalmente dependente possível de outros módulos, sob pena de construirmos um
produto de difícil de ser testado e mantido.

Como é aplicado em um módulo do sistema, o teste de Unidade é feito durante o desenvolvimento


(ou codificação) de um software. Seu objetivo é isolar uma seção de código – que pode ser um
procedimento, uma função ou um conjunto delas quando tratamos de programação procedural – e
verificar sua corretude.

O objetivo de um teste de unidade, portanto, é isolar cada parte do programa e testá-las em


separado (RUNGTA, 2018). No entanto, se o teste de unidade deve ser seguido pelo teste de
integração (esse tipo será tratado logo na sequência), por que então não deixar para investir tanto
tempo e cuidado no próximo teste? Por um motivo muito simples: economizar nos testes de
unidade leva a custos mais altos de correção de defeitos nos testes posteriores, principalmente, no
teste de integração. Pular ou não dar a devida atenção a certas etapas nunca será uma boa ideia nos
procedimentos de teste.

A aplicação do teste de unidade pode ser feita de forma manual ou automatizada, com o uso de
aplicações específicas, que trataremos ainda neste item do conteúdo. Caso a aplicação do teste seja
manual, é de se esperar que a equipe conte com um passo a passo para a realização do
procedimento. Além disso, o documento de especificação dos requisitos deve estar à mão, já que
nele devem estar descritas as funções do sistema.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 12/43
16/08/2023, 20:40 Ead.br

Pela facilidade e conveniência que proporciona, o teste automatizado tem sido mais usado pelos
programadores. Pode-se usar uma aplicação de teste de unidade (que comumente chamamos de
Framework UnitTest) para desenvolver casos de teste automatizados. Nesse caso, o desenvolvedor
estabelece critérios no teste para verificar a corretude da unidade. Durante a execução dos casos de
teste, o framework registra aqueles que falham em qualquer critério estabelecido e relatam ao
testador. Testar de forma automatizada é, portanto, muitas vezes uma forma mais completa de
teste, pois pode revelar dependências desnecessárias entre o código que está sendo testado e
outras unidades. Para o bem da correta modularização, da manutenibilidade e da facilidade em se
testar o software, essas dependências desnecessárias podem e devem ser eliminadas.

Algumas das mais utilizadas ferramentas de testes automatizados incluem (RUNGTA, 2018):

JUnit: trata-se de uma ferramenta de teste gratuita criada para testes de unidades escritas
em Java. Ela fornece asserções para identificar o método de teste e, primeiramente, realiza
o teste dos dados para, então, inseri-los no código a ser testado.
NUnit : esse framework é amplamente usado para testes unitários de programas .net. É
uma ferramenta de código aberto que permite escrever scripts manualmente. Ele suporta
testes baseados em dados que podem ser executados em paralelo.

PHPUnit : ferramenta de teste de unidade para programadores PHP. Toma pequenas porções de
código que são chamadas de unidades e testa cada uma delas separadamente. A ferramenta
também permite que os desenvolvedores usem métodos de asserção pré-definidos para afirmar
que o sistema se comporta de uma certa maneira.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 13/43
16/08/2023, 20:40 Ead.br

Antes de terminarmos nossa abordagem sobre os testes de unidade, vale uma reflexão sobre os
pontos fortes e as fragilidades relacionadas a essa prática.

Devido a sua natureza modular, pode-se testar partes do projeto sem que se tenha de esperar
outros módulos para sua realização. Em contrapartida, não se pode esperar que o teste de unidade
revele todos os defeitos do código. Não é possível avaliar todos os caminhos passíveis de execução,
mesmo em programas mais triviais, já que falta ao testador o restante do sistema.

Outro ponto positivo relacionado aos testes de unidade é que um testador, que esteja procurando
conhecer as funcionalidades do sistema e como utilizá-las, pode olhar para cada unidade disponível
e obter as informações que deseja.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 14/43
16/08/2023, 20:40 Ead.br

atividade
Atividade
O uso repetitivo do mesmo pesticida para erradicar insetos na plantação irá, com o tempo, levar os insetos a
desenvolver resistência a ele. O mesmo se aplica ao teste de software: se o mesmo conjunto de testes
repetitivos for realizado, o método será inútil para descobrir novos defeitos.

RUNGTA, K. Learn Testing in 1 Day : Definitive Guide to Learn Software Testing for Beginners. Edição do
Kindle, 2018, p. 76.

Em relação aos conceitos básicos de teste de software e ao teste de unidade, analise as afirmações que
seguem.

I. Depuração é a técnica usada para corrigir o defeito encontrado no código.

II. O teste de unidade é aplicado no sistema todo, que passa a ser entendido como uma unidade.

III. Considera-se defeito uma deficiência em determinado trecho do algoritmo.

IV. Pode-se aplicar um teste sem que se execute o código, desde que se tenha conhecimento de suas
funções.

A partir das afirmativas apresentadas anteriormente, é correto o que se afirma em:

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 15/43
16/08/2023, 20:40 Ead.br

a) I, II e III, apenas.
b) I, II, III e IV.
c) II e III, apenas.
d) III, apenas.
e) I e III, apenas.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 16/43
16/08/2023, 20:40 Ead.br

Teste de Integração

O teste de unidade, por útil e indispensável que seja, não é capaz de exercitar os trechos de código e
utilizar dados que só existem para fins de conexão entre módulos. Essa lacuna é, entretanto,
preenchida pelo teste de integração, processo no qual os módulos do software são logicamente
integrados e testados como um conjunto de unidades.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 17/43
16/08/2023, 20:40 Ead.br

Conforme tratamos no item anterior, um projeto de software deve prever sua criação em módulos.
Com bastante frequência, os módulos são desenvolvidos por programadores diferentes, com lógicas
e entendimentos do problema distintos entre si. É compreensível e indispensável, portanto, que a
checagem do fluxo de dados entre esses módulos seja submetida a teste.

Outro forte argumento em favor da necessidade de realização do teste de integração é a


possibilidade (ou quase a certeza) de haver mudança nos requisitos provocada pelo cliente e a
consequente falta de tempo ou de oportunidade para se testar esses novos requisitos em uma
unidade.

No mesmo sentido, as interfaces dos módulos com o banco de dados e com outros módulos podem
ter sido codificadas incorretamente e só o teste de integração poderá apontar o defeito.

reflita
https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 18/43
16/08/2023, 20:40 Ead.br

reflita
Reflita
Por que testar software é importante?
Objetivamente falando, defeitos em programas
podem ser caros, perigosos e, até mesmo, custar
vidas. Conheça alguns fatos:

A montadora Nissan teve de fazer recall


de mais de um milhão de carros, devido a
um defeito do software dos sensores do
airbag, depois de serem reportados dois
acidentes por causa dessa falha.
A Starbucks foi obrigada a fechar
aproximadamente 60% das suas lojas no
Canadá e nos Estados Unidos, devido a
uma falha do software do seu ponto de
venda. Em um desses pontos de venda os
cafés foram servidos de graça, já que o

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 19/43
16/08/2023, 20:40 Ead.br

programa não era capaz de processar a


transação de venda.
Alguns varejistas associados da Amazon
viram os preços dos seus produtos
reduzidos acidentalmente por causa de
uma falha do software e acabaram
arcando com o prejuízo.
Em 26 de abril de 1994, o Airbus A300
caiu por causa de um bug em seu
software, matando 264 pessoas.

Fonte: Rungta (2015).

Casos de Teste no Teste de Integração


Pela própria natureza e finalidade do procedimento, os casos de teste aqui diferem de outros casos
de teste por serem projetados para exercitar interfaces e fluxo de dados entre os módulos.

As prioridades devem ser dadas aos pontos de integração, em detrimento das funções de unidade
que já foram testadas. Imagine o seguinte cenário como exemplo: nosso sistema possui três

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 20/43
16/08/2023, 20:40 Ead.br

módulos compostos pela página de login, pela caixa de correio e pelo módulo de excluir e-mails, e
cada um deles está integrado logicamente.

Nossa missão não é encontrar defeitos nos módulos individualmente, já que essa providência já foi
tomada no teste de unidade. A tarefa aqui se resume em checar as vinculações, por exemplo, entre
a página de login e a caixa de e-mail. Da mesma forma, a integração entre a caixa de correio e a
funcionalidade de exclusão de e-mails compõe nossa principal atividade.

O Quadro 2.1 exibe dois casos de teste possíveis para o processo proposto, com suas descrições e
seus resultados esperados. Observe que a apresentação desses casos difere ligeiramente daquela
oferecida no item anterior desta Unidade.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 21/43
16/08/2023, 20:40 Ead.br

ID do caso Descrição do caso de


Objetivo do caso de teste Resultado esperado
de teste teste

Checar o vínculo entre as


Entrar com as
interfaces da tela de login e Ir direto para a Caixa
1 credenciais e clicar no
do módulo de caixa de e- de entrada de e-mail.
botão de login .
mail.

A partir da Caixa de e- O e-mail selecionado


Checar a interface entre a
mails, selecione um e- deverá aparecer na
2 caixa de e-mail e o módulo
mail e acione o botão pasta de e-mails
de exclusão de e-mail.
de exclusão. excluídos.

Quadro 2.1 – Casos de teste para o sistema de e-mail


Fonte: Adaptado de Rungta (2018).

#PraCegoVer: Apresenta um quadro com fundo na cor cinza com quatro colunas, onde a primeira
linha está na cor azul escuro contendo o título de cada coluna. As demais linhas alternam em tons
de cinza claro e cinza escuro.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 22/43
16/08/2023, 20:40 Ead.br

A primeira coluna representa o identificador do caso de teste, a segunda coluna apresenta o objetivo
do caso de teste, a terceira coluna apresenta a descrição do caso de teste e a quarta coluna
apresenta o resultado esperado.

Na primeira linha, com fundo em tom cinza mais escuro, é apresentado o número um como
identificador do caso de teste, seguido do texto: Checar o vínculo entre as interfaces da tela de login
e do módulo de caixa de e-mail, que representa o objetivo do caso de teste. Logo em seguida temos
o texto: Entrar com as credenciais e clicar no botão de login, que representa a descrição do caso de
teste. O último texto da linha temos: Ir direto para a caixa de entrada de email, que representa o
resultado esperado.

Na segunda linha, com fundo em tom cinza mais claro, é apresentado o número dois como
identificador do caso de teste, seguido do texto: Checar a interface entre a caixa de e-mail e o
módulo de exclusão de e-mail. que representa o objetivo do caso de teste. Logo em seguida temos o
texto: A partir da Caixa de e-mails, selecione um e-mail e acione o botão de exclusão, que representa
a descrição do caso de teste. O último texto da linha temos: O e-mail selecionado deverá aparecer
na pasta de e-mails excluídos, que representa o resultado esperado.

Abordagens de Teste

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 23/43
16/08/2023, 20:40 Ead.br

Em sua essência, esse procedimento irá checar as ligações entre os módulos do sistema. No
entanto, há diferentes estratégias para aplicação do teste e, pelo critério de interesse e de
importância, abordaremos três delas, resumidamente:

Estratégia Big Bang: todos os componentes são integrados juntos de uma vez e depois
testados. Essa abordagem pode ser bem conveniente para sistemas pequenos, mas a
aplicação pode ser difícil em sistemas com muitos módulos.
Estratégia Top Down : na abordagem top down (de cima para baixo), os testes ocorrem de
cima para baixo seguindo o fluxo de controle do sistema de software. Aqui, os módulos
mais importantes ou críticos são testados prioritariamente e, via de regra, grandes falhas
de projeto podem ser encontradas e corrigidas primeiro.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 24/43
16/08/2023, 20:40 Ead.br

saiba mais
Saiba mais
Stubs e drivers são dois elementos importantes no contexto
dos testes. Tratam-se de trechos de código criados pelo
testador que apenas simulam a comunicação de dados
entre módulos. Um stub é o código chamado pelo módulo
em teste. Já o driver é o código que chama o módulo a ser
testado em um teste de integração.

ACESSAR

Estratégia Bottom Up : na estratégia de baixo para cima, cada módulo em níveis mais
baixos é testado com módulos mais altos até que todos os módulos sejam testados.

As estratégias top down e bottom up são exibidas esquematicamente na Figura 2.1.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 25/43
16/08/2023, 20:40 Ead.br

Figura 2.1 – Duas abordagens de teste de integração


Fonte: Adaptada de Rungta (2018).
#PraCegoVer: Apresenta um organograma ao centro contendo seis blocos retangulares, dispostos
de cima para baixo. À sua esquerda uma seta apontando para baixo com a descrição Top Down e à
sua direita uma seta apontando para cima com a descrição Bottom Up.

O primeiro módulo, ao topo do organograma possui fundo na cor azul claro com o texto: módulo
um. Mais abaixo, no nível inferior o organograma possui dois outros blocos na cor azul claro. O bloco
da esquerda com o texto: Módulo 2. O bloco da direita no mesmo nível, possui o texto: Módulo 3.

No nível mais abaixo, ao lado esquerdo, ramificado a partir do módulo 2, são apresentados outros
dois módulos com fundo na cor azul claro: à esquerda com o texto: Módulo quatro e à direita com o

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 26/43
16/08/2023, 20:40 Ead.br

texto: Módulo cinco. Nesse mesmo nível, ramificado a partir do módulo 3, temos um bloco com o
texto: Módulo 6

Esse é o conteúdo que preparamos para Teste de Integração. Sigamos adiante com nossa atividade
do tópico.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 27/43
16/08/2023, 20:40 Ead.br

atividade
Atividade
Considerando o conteúdo relacionado ao Teste de Integração, assinale a alternativa que contém os termos
que completam corretamente as lacunas da sentença que segue:

Para que o Teste de Integração seja possível, é necessário que o testador promova a ligação entre os
___________ disponíveis e faça a checagem das _________ entre módulos, incluindo chamadas, interações e
fluxos de dados. Ao contrário do teste de _________, o Teste de Integração não visa a busca por defeitos no
módulo.

A partir do trecho apresentado anteriormente, assinale a alternativa que apresenta respectivamente as


palavras que completam a lacunas:

a) Módulos, interfaces e unidade.


b) Módulos, entidades e depuração.
c) Métodos, interfaces e big bang .
d) Módulos, semelhanças e depuração.
e) Métodos, interfaces e depuração.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 28/43
16/08/2023, 20:40 Ead.br

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 29/43
16/08/2023, 20:40 Ead.br

Teste de Regressão

Imagine a seguinte situação: sua equipe recebeu um produto a ser testado, aplicou o procedimento
determinado no rigor da forma e obteve sucesso em encontrar e corrigir defeitos no código. No
entanto, pouco tempo depois, uma nova funcionalidade ou ligeira alteração precisou ser incluída no
sistema e lá se foi a confiança no produto.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 30/43
16/08/2023, 20:40 Ead.br

Esse cenário é comum o bastante para contar com uma modalidade de teste específica para sua
ocorrência. Denominado Teste de Regressão, justifica sua existência por considerar que o sistema
experimentou regressão ao ter novos componentes incluídos ou componentes já existentes
alterados.

Uma outra justificativa plausível para esse teste é o inevitável efeito modificador de qualquer tipo de
manutenção aplicada ao produto, que incluem correções de defeitos, exclusão de funcionalidades e
qualquer outra modificação no código.

Rungta (2018) afirma que o Teste de Regressão é definido como um tipo de teste aplicado para
confirmar que um programa recente ou alteração de código não afetou adversamente os recursos
existentes. Em relação a sua aplicação, o procedimento prevê a seleção total ou parcial de casos de
teste já executados e a sua reexecução, com a finalidade de garantir que as funcionalidades estejam
intactas.

Como todo procedimento, o Teste de Regressão também conta com melhores práticas para sua
aplicação. A primeira prevê que tudo seja testado novamente, o que implica que todos os casos de
teste sejam aplicados novamente, tornando o processo, muitas vezes, dispendioso e moroso.

A segunda prática, conhecida como seleção de Teste de Regressão, prevê que os casos de teste
sejam reaplicados de forma seletiva, de acordo com a conveniência de sua reutilização. A equipe
deve escolher, então, casos de testes reutilizáveis e casos de teste obsoletos, descartando estes
últimos.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 31/43
16/08/2023, 20:40 Ead.br

Por fim, a terceira prática prevê que os casos de teste sejam selecionados de acordo com seu
impacto nos negócios e com base em sua capacidade de exercitar as funcionalidades críticas do
sistema. É natural que, nesse caso, a equipe deverá conhecer muito bem o sistema para não
cometer erros na seleção.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 32/43
16/08/2023, 20:40 Ead.br

atividade
Atividade
O Teste de Regressão é definido como um tipo de teste aplicado para confirmar que um programa recente
ou alteração de código não afetou adversamente os recursos existentes.

RUNGTA, K. Learn Testing in 1 Day : Definitive Guide to Learn Software Testing for Beginners. Edição do
Kindle, 2018,

Considerando o conteúdo relacionado à justificativa para aplicação de Teste de Regressão, analise as


afirmações que seguem.

I. Modificação do código por causa de novo requisito implementado.

II. Nova funcionalidade adicionada ao software.

III. Descoberta de um defeito na unidade durante o Teste de Integração.

A partir das afirmativas apresentadas anteriormente, é correto o que se afirma em:

a) I, apenas.
b) II, apenas.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 33/43
16/08/2023, 20:40 Ead.br

c) III, apenas.
d) I e II, apenas.
e) I, II e III.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 34/43
16/08/2023, 20:40 Ead.br

Desenvolvimento
Voltado a Testes

Nossa última modalidade de teste abordada nesta Unidade constitui um formato de teste muito
parecido com o “codificar e testar”, modelo de desenvolvimento no qual não se dá ênfase a outras
etapas, senão as de codificar e testar. Outra característica relevante dessa modalidade é que foi
concebida no âmbito da metodologia XP ( Extreme Programming ), criada para desenvolvimento ágil
de software .

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 35/43
16/08/2023, 20:40 Ead.br

saiba mais
Saiba mais
O formato “codificar e testar” é conhecido como
metodologia codifica-corrige. Acesso em: 19. mar. 2019.

ACESSAR

Para a realização dos testes no formato TDD (Test-Driven Development ou Desenvolvimento Voltado
a Testes), a equipe apoia-se no fato de que a descrição dos requisitos – ou as estórias escritas pelo
cliente – não constitui documento com excessiva formalidade e detalhamento de funções e que, por
esse motivo, o cliente deve acompanhar o processo de codificação e teste. Em tempos passados, o
teste era realizado tomando como base o código completo, ou quase completo, já que as linguagens
de programação dificultavam a execução de apenas partes do programa. Hoje em dia, tecnologias
que suportam linguagens orientadas a objeto (como o Java) permitem não só́ a automatização dos

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 36/43
16/08/2023, 20:40 Ead.br

testes – ação tão importante no âmbito do TDD – como também a execução de partes autônomas de
um programa, como uma classe, por exemplo (NETO, 2016).

O teste de parte do código segue a sua criação, ou seja, o teste e a integração são feitos logo após
sua codificação.

Os passos do desenvolvimento guiado pelos testes incluem:

A seleção de um conjunto de casos de teste;


A execução do caso de teste. Encontrando-se o defeito, o código deverá ser ajustado. Caso
não se encontre defeito, um novo conjunto de casos de teste deve ser selecionado e o
processo deve ser reiniciado (PINHEIRO, 2015)

Este foi o conteúdo de teste que preparamos. A variedade de assuntos relacionados ao tema, no
entanto, ultrapassa os limites desta Unidade e deve ser alcançada pela leitura de outras fontes,
como a indicada a seguir. Mantenha-se firme nas atividades e até a próxima!

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 37/43
16/08/2023, 20:40 Ead.br

atividade
Atividade
Para a realização dos testes no formato TDD, a equipe apoia-se no fato de que a descrição dos requisitos –
ou as estórias escritas pelo cliente – não constitui documento com excessiva formalidade e detalhamento de
funções e que, por esse motivo, o cliente deve acompanhar o processo de codificação.

Assinale a alternativa que contém a correta justificativa para a presença do cliente no processo de
desenvolvimento orientado a testes.

a) Cliente pode ordenar trocas de elementos na equipe de teste.


b) Cliente dar sugestões para otimização do código, o que pode torná-lo mais eficiente.
c) Cliente pode ajudar na refatoração do código, de modo que sua formatação fique de acordo com
o que deseja.
d) Cliente pode ajudar no processo de depuração do código.
e) Cliente ajuda na elaboração de casos de teste com base em seu conhecimento das regras de
negócio implementadas.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 38/43
16/08/2023, 20:40 Ead.br

indicações
Material
Complementar

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 39/43
16/08/2023, 20:40 Ead.br

LIVRO

Introdução ao Teste de Software


Márcio Eduardo Delamaro; José Carlos Maldonado; Mário Jino.
Editora: Elsevier
ISBN: 8535283528
Comentário: escrito por três das maiores autoridades brasileiras em
Engenharia de Software e Teste de Software, essa edição atualizada do
livro é abrangente o suficiente para introduzir novos assuntos aos
iniciados e, ainda assim, simples na medida para iniciantes. Vale a
leitura.

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 40/43
16/08/2023, 20:40 Ead.br

FILME

Estrelas além do Tempo


Ano: 2016
Comentário: o filme mostra a contribuição de três mulheres na corrida
espacial travada entre Estados Unidos e União Soviética, em plena
guerra fria. Envoltas em uma circunstância social peculiar, as três amigas
promovem verdadeira revolução em um ambiente dominado por
homens.

TRAILER

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 41/43
16/08/2023, 20:40 Ead.br

conclusão
Conclusão
É provável que alguém pense ser desnecessário e lugar comum mencionar coisas relacionadas a
importância do teste de software. Mas não é. A aplicação de testes nos produtos de software
transcende a mera formalidade procedimental e alcança níveis de atividade crítica no processo de
construção do sistema. Sem ele, não teríamos garantia de que o produto funciona como se espera e
nada além da sorte protegeria o cliente de paradas súbitas no programa, manifestação de defeitos
até então ocultos e, em casos mais extremos, de prejuízo financeiro e em vidas.

Pela complexidade e criticidade envolvida na atividade é que foram criadas várias modalidades e
estratégias de teste e essa diversidade se manifesta também na escolha do momento para aplicação
do teste: após se testar a unidade, depois da integração, após a inclusão de uma nova
funcionalidade etc.

Esperamos que você se torne uma boa referência no assunto e que seja capaz de produzir e
transmitir conhecimento em teste de software. Até a próxima!

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 42/43
16/08/2023, 20:40 Ead.br

referências
Referências
Bibliográficas
NETO, R. M. Engenharia de software . Londrina: Editora e Distribuidora Educacional S.A., 2016.

PINHEIRO, A. F. Fundamentos da Engenharia de Software . 1 ed. Recife: Amazon Publishing, 2015.

RUNGTA, K. Learn Testing in 1 Day : Definitive Guide to Learn Software Testing for Beginners.
Edição do Kindle, 2015.

____. Learn Testing in 1 Day : Definitive Guide to Learn Software Testing for Beginners. Edição do
Kindle, 2018.

IMPRIMIR

https://codely-fmu-content.s3.amazonaws.com/Moodle/EAD/Conteudo/CTI_QUTESO_19/unidade_2/ebook/index.html 43/43

Você também pode gostar