Buscar

Engenharia de Software - 08 - Qualidade de Software

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Aula 08
Engenharia de Software para Concursos - Curso Regular
Professor: Diego Carvalho
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 143 
 
AULA 08 
 
 
SUMÁRIO PÁGINA 
Apresentação 01 
- Qualidade de Software 03 
- Verificação & Validação 10 
- Erro, Falta, Falha e Defeito 18 
- Testes de Software 24 
Lista de Exercícios Comentados 111 
Gabarito 142 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 143 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Engenharia de Software. Conceitos Básicos ou Gerais. Ciclo de vida do software. Modelos, 
Metodologias ou Processos de Desenvolvimento de Software: Modelo em Cascata. Modelo Orientado 
a Reuso. Modelo em Prototipagem, Modelo Evolucionário, Modelo Espiral, Modelo Formal, RAD, Modelo 
Iterativo e Incremental. Processo Unificado: Conceitos Básicos, Dimensões Dinâmica, Estática e 
Prática, Gráfico das Baleias, Fases (Iniciação, Elaboração, Construção e Transição), Disciplinas ou 
Fluxo de Processos (Modelagem de Negócio, Requisitos, Análise e Projeto, Implementação, Teste, 
Implantação, Gestão de Configuração e Mudança, Gestão de Projetos, Ambiente), Artefatos, 
Atividades, Melhores Práticas, Principais Marcos, Princípios Chaves. Metodologias Ágeis de 
Desenvolvimento de Software: Scrum, eXtreme Programming (XP), Feature-driven Development 
(FDD), Test-driven Development (TDD), Acceptance Test-driven Development (ATDD), Kanban. 
Definição de Requisito, Classificação de Requisitos (Funcional, Não- Funcional, Domínio; Produto, 
Organizacional, Externo; Confiabilidade, Proteção, Desempenho, etc); Engenharia de Requisitos: 
Estudo de Viabilidade, Elicitação e Análise de Requisitos, Especificação de Requisitos, Validação de 
Requisitos, Gestão de Requisitos. Técnicas de Elicitação e Técnicas de Validação. Linguagem de 
Modelagem: Unified Modeling Language (UML) 2.x – Contexto Histórico, Conceitos Básicos, Tipos de 
Diagramas (Estruturais, Comportamentais, Interação). Diagramas de Classes, Componentes, 
Implantação, Perfil, Objetos, Estrutura Composta, Pacotes, Máquina de Estados, Casos de Uso, 
Atividades, Sequência, Comunicação, Interação Geral e Tempo. Conceitos Básicos do Paradigma 
Estruturado. Conceitos Básicos de Orientação a Objetos: Classes, Objetos, Atributos, Métodos, 
Mensagens, Abstração, Encapsulamento, Polimorfismo, Herança, Relacionamentos). Análise e 
Projeto: Conceitos Básicos, Diferenças, Modelos, Classes de Fronteira, Controle e Entidade. Análise 
de Pontos de Função: IFPUG – Definição e Contexto, Benefícios e Vantagens, Componentes de Dados 
(AIE, ALI) e Transação (EE, SE, CE), Etapas do Procedimento de Contagem: Determinar Tipo de 
Contagem, Determinar Escopo e Fronteira, Cálculo dos Pontos de Função Não-Ajustados, Cálculo do 
Fator de Ajuste, Cálculo dos Pontos de Função Ajustados. NESMA - Tipos de Contagem e Deflatores. 
Qualidade de Software: Garantia e Controle, Principais Características, Verificação & Validação, 
Erro, Falha, Falta e Defeito. Testes de Software: Conceitos Básicos, Processo de Testes, Técnicas de 
Testes (Teste Caixa Banca, Cinza e Preta), Níveis de Testes (Teste de Unidade, Módulo, Componente; 
Teste de Integração; Teste de Aceitação, Validação, Release; Teste de Sistema/Funcional). Tipos de 
Testes: Carga, Estresse, Volume, Desempenho, Usabilidade, Cenários, Regressão, Back-to-Back, 
Comparação, Recuperação, Alfa, Beta, Compatibilidade, Estático, Dinâmico). Arquitetura de 
Software. Arquitetura em Camadas (Cliente/Servidor). Arquitetura MVC. Arquitetura Distribuída. 
Arquitetura Hub. Arquitetura Microsserviços. Arquitetura Mainframe. Arquitetura Orientada a 
Serviços (SOA): Conceitos Básicos, SOAP, WSDL, UDDI. REST. WS-Security. Interoperabilidade de 
Sistemas. e- PING: Conceitos Básicos, Interoperabilidade, Escopo, Políticas Gerais, Segmentação, 
Gestão. Acessibilidade de Sistemas. e-MAG 3.1: Conceitos Básicos, Acessibilidade, Acesso, Passos 
para um Sítio Acessível, Segmentos, Recomendações. Engenharia de Usabilidade. Gerenciamento 
Eletrônico de Documentos (GED). Portais Corporativos e Colaborativos. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 143 
 QUALIDADE DE SOFTWARE 
 
A qualidade de software tem se aprimorado significativamente nos últimos 15 anos. 
Uma razão para isso é o fato de as empresas terem adotado novas técnicas e 
tecnologias. Além disso, contudo, tem havido uma conscientização maior da 
importância do gerenciamento de qualidade de software e da adoção de técnicas 
de gerenciamento de qualidade provenientes da manufatura de software. 
 
Entretanto, qualidade de software é um conceito complexo que não é diretamente 
comparável com a qualidade na manufatura. Na manufatura, a noção de qualidade 
tem sido aquela em que o produto desenvolvido deve atender às suas 
especificações. Em um mundo ideal essa definição deveria ser aplicada a todos os 
produtos, mas, para sistemas de software, existem diversos problemas! 
 
Algumas pessoas acham que a qualidade pode ser conseguida definindo-se 
padrões e procedimentos de qualidade organizacionais que verifiquem se esses 
padrões são seguidos pela equipe de desenvolvimento de software. Seu argumento 
é que os padrões devem englobar boas práticas; seguir essas boas práticas 
inevitavelmente conduz a produtos de alta qualidade. 
 
Na prática, entretanto, acredito que há muito mais gerenciamento de qualidade do 
que padrões e burocracia associada para assegurar que estes foram seguidos. O 
gerenciamento de qualidade de software para sistemas de grande porte pode ser 
estruturado em três atividades principais: 
 
1. Garantia de qualidade: estabelecimento de um framework de procedimentos 
organizacionais e padrões que conduzem a um software de alta qualidade. 
 
2. Planejamento de qualidade: seleção de procedimentos e padrões apropriados 
deste framework, adaptados para um projeto de software específico. 
 
3. Controle de qualidade: definição e aprovação de processos que assegurem que 
a equipe de desenvolvimento tenha seguido os procedimentos e os padrões. 
 
Mas, espera um pouco! Galera, o que é qualidade? A qualidade é algo pelo qual nos 
esforçamos para obter nos produtos, processos e serviços. O dicionário diz: 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 143 
Uma característica inerente ou diferenciada; uma propriedade. b. Um traço 
pessoal, especialmente um traço de caráter. 2. Caráter essencial; natureza. 3.a. 
Superioridade de natureza. b. Grau ou classificação de excelência. 
 
A qualidade não é um atributo ou uma característica singular. É multidimensional e 
pode ser possuída por um produto ou por um processo. A qualidade do produto 
está concentrada na criação do produto certo, enquanto a qualidade do processo 
está concentrada na criação correta do produto. A definição do dicionário é muito 
genérica, vamos ver a definição do processo unificado: 
 
Qualidade é a característica de ter demonstrado a realização da criação de um 
produto que atende ou excede os requisitos acordados, conforme avaliado por 
medidas e critérios acordados, e que é criado em um processo acordado. 
 
Obter qualidade não é só "atender a requisitos" ou produzir um produto que atendeàs necessidades e expectativas dos usuários. Pelo contrário, também inclui a 
identificação das medidas e dos critérios para demonstrar a obtenção da qualidade 
e a implementação de um processo para garantir que o produto por ele criado 
tenha atingido o grau desejado de qualidade e possa ser repetido e gerenciado. 
 
Vamos ver agora algumas características de qualidade: 
 
 Interoperabilidade: capacidade do produto de software de interagir com um 
ou mais sistemas especificados. Habilidade de dois ou mais sistemas 
(computadores, meios de comunicação, redes, software e outros 
componentes de TI) de interagir e de intercambiar dados de acordo com um 
método definido, de forma a obter os resultados esperados. 
 
 Conformidade: a capacidade do produto de software de estar de acordo com 
normas, convenções ou regulamentações previstas em leis e prescrições 
similares relacionadas à funcionalidade. Pode-se dizer que é o atendimento 
às especificações do produto ou processo, avaliada por meio de medições, 
testes ou auditorias. 
 
 Tolerância a Falhas: capacidade de um produto de software de manter um 
nível de desempenho especificado em casos de defeitos no software ou de 
violação de sua interface especificada. Pode-se dizer que é a habilidade de 
satisfazer requisitos apesar de suas falhas. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 143 
 Usabilidade: capacidade do produto de software de ser compreendido, 
aprendido, operado e atraente ao usuário, quando usado sob condições 
especificadas. O software precisa ser fácil de aprender e de usar, permitir 
maior produtividade do usuário, flexibilidade de utilização, flexibilidade de 
aplicação e proporcionar satisfação de uso. 
 
 
 
Galera, vamos falar um pouco sobre a diferença entre Garantia de Qualidade e 
Controle de Qualidade. A Garantia de Qualidade está focada no processo de 
desenvolvimento de software e prevenção de defeitos, já o Controle de Qualidade 
está focado no produto entregue ao usuário e a detecção e correção de defeitos. 
Essa é a diferença fundamental que vocês têm de decorar! 
 
A Garantia de Qualidade é orientada ao processo e busca analisá-lo para descobrir 
problemas e oportunidades de melhoria com foco na monitoração do processo – 
geralmente ocorre no início das fases do ciclo de vida de software. Já o Controle de 
Qualidade é orientado ao produto e busca detectar problemas nesse produto 
entregue ao usuário – geralmente ocorre no final das fases do ciclo de vida. 
 
Professor, o que seria um exemplo de Garantia de Qualidade? Seria uma mudança 
na metodologia de desenvolvimento de software ou definição de métricas e 
medição. Professor, o que seria um exemplo de Controle de Qualidade? Seria verificar 
se os requisitos que foram definidos são os requisitos corretos ou realizar inspeções 
e testes de software. 
 
O Controle de Qualidade engloba um conjunto de ações de engenharia de software 
que ajudam a garantir que cada produto resultante atinja suas metas de qualidade, 
permitindo a uma equipe de software ajustar o processo quando qualquer um 
desses produtos resultantes deixe de atender às metas estabelecidas para a 
qualidade. Entenderam melhor? 
 
A Garantia de Qualidade estabelece a infraestrutura que suporta métodos sólidos 
de engenharia de software, gerenciamento racional de projeto e ações de controle 
de qualidade. Ela consiste em um conjunto de funções de auditoria e de relatórios 
que possibilita uma avaliação da efetividade e da completude das ações de controle 
de qualidade. Em outras palavras, ela vem antes e após o controle de qualidade. 
 
Tenho outra pergunta para vocês: Controle de Qualidade estaria mais associado à 
Verificação ou Validação? Pressman nos responde essa pergunta: "In this chapter, I 
GARANTIA E CONTROLE DE QUALIDADE 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 143 
use the term ‘quality assurance’ to include Verification and Validation and the 
processes of checking that quality procedures have been properly applied". Logo, o 
Controle de Qualidade engloba ambos: Verificação e Validação. 
 
Vamos ver um quadro com as principais diferenças entre Garantia de Qualidade e 
Controle de Qualidade: 
 
 
GARANTIA DA QUALIDADE 
 
CONTROLE DE QUALIDADE 
 
Garantia da qualidade garante que o processo 
é definido e apropriado. 
 
As atividades de controle da qualidade focam 
na descoberta de defeitos em i específicos. 
Metodologia e padrões de desenvolvimento 
são exemplos de garantia da qualidade. 
Um exemplo de controle da qualidade poderia 
ser: "Os requisitos definidos são os requisitos 
certos?" 
Garantia da qualidade é orientada a processo. Controle da qualidade é orientado a produto. 
 
 
Garantia da qualidade é orientada a 
prevenção. 
 
Controle da qualidade é orientado a detecção. 
 
Foco em monitoração e melhoria de processo. 
 
 
Inspeções e garantia de que o produto de 
trabalho atenda aos requisitos especificados. 
As atividades são focadas no início das fases 
no ciclo de vida de desenvolvimento de 
software. 
As atividades são focadas no final das fases 
no ciclo de vida de desenvolvimento de 
software. 
Garantia da qualidade garante que você está 
fazendo certo as coisas e da maneira correta. 
Controle da qualidade garante que os 
resultados do seu trabalho são os esperados 
conforme requisitos. 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 143 
 
 
 (FCC – 2014 – TRT/1 – Analista de Sistemas) A qualidade de software constitui-se 
em um fator de grande importância no seu desenvolvimento. Dentre as 
propriedades utilizadas para determinar a qualidade de software, 
 
a) mede-se, exclusivamente, a qualidade da documentação produzida para o 
software. 
 
b) verifica-se a satisfação de requisitos estabelecidos, incluindo o desempenho. 
 
c) não se abrange questões relativas à interface do software. 
 
d) não há preocupação com a facilidade de manutenção do software. 
 
e) não se inclui a confiabilidade esperada do software. 
 
Comentários: 
 
(a) Apenas a documentação? Não, inclusive a documentação – mas mede-se 
diversos aspectos do software; 
 
(b) Perfeito, verifica se os requisitos estabelecidos forem satisfeitos pelo software 
desenvolvimento – tanto funcionais como não-funcionais (ex: desempenho); 
 
(c) Abrange, sim! Na verdade, abrange-se tanto requisitos funcionais como não-
funcionais (ex: interface); 
 
(d) Há preocupação, sim! Facilidade de manutenção de software é um requisito não-
funcional que deve ter preocupação com a qualidade; 
 
(e) Inclui, sim! Esse também é um requisito não-funcional que deve ser incluído na 
preocupação com a qualidade de um software. 
 
Gabarito: B 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 143 
 (FCC – – AFR/SP – Analista de Sistemas Na prática de garantia de 
qualidade de software, contrapondo com o controle de qualidade de software, 
se aplica a atividade: 
 
a) Definir planos de desenvolvimento de teste. 
b) Executar teste de software. 
c) Desenvolver casos de teste. 
d) Definir métricas e medição. 
e) Definir estratégias de testes. 
 
Comentários: 
 
A Garantia de Qualidade é orientada ao processo e busca analisá-lo para descobrir 
problemas e oportunidades de melhoria com foco na monitoração do processo – 
geralmenteocorre no início das fases do ciclo de vida de software. Já o Controle de 
Qualidade é orientado ao produto e busca detectar problemas nesse produto 
entregue ao usuário – geralmente ocorre no final das fases do ciclo de vida. 
 
Para responder essa pergunta, devemos buscar o item que se foca no processo de 
desenvolvimento de software e, não, no produto. Observem que todos os itens 
falam de testes, que se referem em geral ao Controle de Qualidade. Já o quarto 
item se refere à definição de métricas e medição, que tem função de melhorar o 
processo de software. 
 
Gabarito: D 
 
 (CESPE – 2010 – SERPRO - Analista de Sistemas A garantia de qualidade tem 
como objetivo testar os produtos de software de modo a identificar, relatar e 
remover os defeitos encontrados, enquanto o controle da qualidade provê a 
gerência sênior da organização com a visibilidade apropriada sobre o processo 
de desenvolvimento. 
 
Comentários: 
 
Fácil, não?! A questão apenas inverteu os conceitos de garantia e controle de 
qualidade. 
 
Gabarito: E 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 143 
 (CESPE – 2010 – SERPRO - Analista de Sistemas Um processo de gerenciamento 
da qualidade do projeto tipicamente visa garantir e controlar a qualidade. No 
controle da qualidade, são executadas atividades planejadas e sistemáticas 
visando garantir que o projeto empregará os processos necessários para atender 
aos requisitos. Por sua vez, a garantia da qualidade, diferentemente do controle 
de qualidade, monitora resultados do projeto a fim de determinar se eles estão 
de acordo com os padrões relevantes de qualidade e procura identificar meios 
para eliminar as causas de resultados que sejam insatisfatórios. 
 
Comentários: 
 
A questão inverteu os conceitos de garantia e controle de qualidade. 
 
Gabarito: E 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 143 
 VERIFICAÇÃO & VALIDAÇÃO 
 
Em seu livro, Pressman diz: 
 
Durante e depois do processo de implementação, o programa em 
desenvolvimento deve ser verificado para certificar-se de que ele atende a sua 
especificação e entrega a funcionalidade esperada pelas pessoas que pagam 
pelo software. Verificação e Validação (V&V) é a denominação dada a esses 
processos de verificação e análise. Atividades de verificação e validação 
ocorrem em cada estágio do processo de software. V&V começa com revisões 
de requisitos e continua ao longo das revisões de projeto e das inspeções de 
código até o teste de produto. 
 
Percebam que Validação e Verificação são coisas diferentes! E qual a diferença? Ora, 
Boehm descreveu de uma maneira simples e genial, por meio de duas perguntas: 
 
 Verificação: Estamos construindo o produto corretamente? 
 Validação: Estamos construindo o produto correto? 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 143 
A Verificação ocorre em ambiente de desenvolvimento e envolve a certificação de 
que o software construído esteja de acordo com as especificações de requisitos 
(funcionais e não-funcionais)! Já a Validação ocorre em ambiente de produção e se 
certifica de que o software construído está de acordo com as expectativas do cliente. 
Produto está de acordo com as especificações? Ele satisfaz os anseios dos usuários? 
 
Eu peço a vocês! Não, na verdade eu imploro que vocês memorizem a diferença 
entre esses dois conceitos! É muito simples, mas eu já me cansei das incontáveis 
vezes que eu vi questões de prova tentando confundir os candidatos e obtendo 
êxito. Como você decorou, professor? Muito simples! Verificação ocorre em relação 
à Especificação de Requisitos! 
 
 
 
Há dois tipos de Verificação: Estática e Dinâmica! A Estática (também chamada 
Inspeção de Software) trata da análise de documento de requisitos, análise de 
diagramas de projetos, análise de código-fonte, etc. Ela ocorre sem a necessidade 
de executar o software e pode ocorrer de forma automatizada, antes mesmo da 
implementação do sistema. 
 
Já a Verificação Dinâmica (também chamada de Teste) envolve executar o software/ 
protótipo, i.e., a partir dos dados de entrada, examina-se o comportamento por 
meios das saídas, de modo que se verifique se o desempenho obtido está de acordo 
com o esperado. Grosso modo, a Estática trata da documentação e a Dinâmica trata 
da execução em si. 
 
Calma, nem tudo são flores! Para fazer uma boa Verificação Estática, é necessário 
que as especificações dos artefatos sejam precisas e confiáveis – ademais, não é fácil 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 143 
nem barato! Quanto à Verificação Dinâmica, nós falaremos mais adiante sobre cada 
tipo de teste que pode ser feito. Galera, Verificação Estática e Dinâmica são 
complementares e, não, opostas! 
 
Cabe salientar também que a V&V não garante que o software seja completamente 
livre de defeitos ou que ele se comportará conforme especificado em todas as 
circunstâncias – é sempre possível que um teste ignorado possa descobrir mais 
problemas no sistema. Ele tem que ser suficientemente confiável para a utilização 
pretendida. 
 
Espera aí... e quem diz o que é um software suficientemente confiável? Bem, isso 
depende da criticidade do sistema, das expectativas do utilizador, do ambiente de 
marketing, etc! Imaginemos um sistema de catálogo de filmes de uma locadora e 
um sistema de controle de tráfego aéreo: qual desses necessita de um grau de 
confiança mais alto? ¬¬ 
 
Imaginemos, agora, um sistema de caixa de padaria ou o sistema de estoque de um 
mercadinho, o utilizador pode ter baixas expectativas sobre o sistema e, assim, ter 
um grau de confiança menor sem prejudicar seu funcionamento. Nesses casos, é 
comum aceitar falhas de sistema quando os benefícios do uso ultrapassam as 
desvantagens. 
 
Por fim, algumas vezes um software precisa ser lançado no mercado rapidamente 
como resposta à concorrência ou a um ambiente de marketing favorável. Por 
exemplo: quando uma empresa tem poucos concorrentes, ela pode liberar um 
programa antes que ele tenha sido inteiramente testado e depurado porque 
querem ser os primeiros do mercado. 
 
Galera, muita gente acha que as Inspeções de Software não têm importância. Ora, 
têm sim! Elas ocorrem, inclusive, em todos os estágios do processo de 
desenvolvimento de software – qualquer representação legível do software pode 
ser inspecionada. Evidentemente, não é possível usar técnicas estáticas para verificar 
requisitos não-funcionais (desempenho, etc). 
 
Outra confusão bastante frequente ocorre entre Teste e Depuração! No entanto, 
essa é diferença é bastante simples: dentre outras, testes estabelecem a existência 
de defeitos e geralmente são feitos por uma equipe de testes. Já a depuração 
localiza e conserta esses defeitos e geralmente é feita por uma equipe de 
desenvolvimento. Ficou fácil de entender agora, né?! 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 143 
 
 
 (Instituto Cidades – 2012 - CEMIG - Agente de Gestão Administrativa - Analista 
de Sistemas - A) O teste é uma atividade de verificaçãoe validação do software 
e consiste na análise dinâmica do mesmo, isto é, na execução do produto de 
software com o objetivo de verificar a presença de defeitos no produto e 
aumentar a confiança de que o mesmo está correto. 
 
Comentários: 
 
Perfeito, é exatamente isso! 
 
Gabarito: C 
 
 (CESPE - – Anatel – Analista Administrativo – Arquitetura de Soluções) 
Considere as informações abaixo em relação ao desenvolvimento de sistemas: 
 
I. executar um software com o objetivo de revelar falhas, mas que não prova a 
exatidão do software. 
II. correta construção do produto. 
III. Construção do produto certo. 
 
Correspondem corretamente a I, II e III, respectivamente, 
 
a) Validação, verificação e teste. 
b) Verificação, teste e validação. 
c) Teste, verificação e validação. 
d) Validação, teste e verificação. 
e) Teste, validação e verificação. 
 
Comentários: 
 
Questão estranha, na medida em que Teste é um dos tipos de Verificação: (I) Teste 
– por conta da execução do software; (II) Verificação – é semelhante a “Estamos 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 143 
construindo o produto corretamente?”; (III) Validação – é semelhante a “Estamos 
construindo o produto correto?”. 
 
Gabarito: C 
 
 (CESPE - 2010 – TJ/ES – Analista Judiciário – Analista de Sistemas) Verificação e 
validação são atividades da análise de software, necessárias para se identificar o 
que o software precisa executar, seguida de uma avaliação do usuário quanto às 
atividades definidas. 
 
Comentários: 
 
É isso mesmo! Verificação é em relação à especificação de requisitos e a Validação 
é em relação aos usuários. 
 
Gabarito: C 
 
 (CESPE - – TRT 5ª – alista Judiciário – Analista de Sistemas) A diferença 
entre verificação e validação reside no fato de que a primeira se refere ao 
conjunto de atividades que garante que o software realiza corretamente uma 
função específica, enquanto a segunda refere-se a um conjunto diferente de 
atividades que garante que o software que foi construído é rastreável às 
exigências do cliente. 
 
Comentários: 
 
Perfeita definição – é isso mesmo! 
 
Gabarito: C 
 
 (ESAF - – MPOG – Analista de Planejamento – Analista de Sistemas - B) 
Demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos 
é uma meta de validação do software. 
 
Comentários: 
 
Conforme vimos em aula, isso é a meta da validação do software. 
 
Gabarito: C 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 143 
 (CESPE - 2008 – IPEA – Analista de Sistemas) A verificação assegura que o 
produto, como fornecido, irá atender o seu uso pretendido, ou seja, que se está 
construindo o produto certo. E a validação confirma que os produtos de trabalho 
refletem de forma apropriada os requisitos que foram especificados, ou seja, que 
se está construindo o produto corretamente. 
 
Comentários: 
 
Nã-não! É o contrário! 
 
Gabarito: E 
 
 (FCC - 2009 – AFR/SP - Analista de Sistemas) O processo de confirmação que 
um software vai ao encontro das especificações de software se trata de um 
conceito-chave de qualidade denominado: 
 
a) Confiabilidade. 
b) Validação. 
c) Verificação. 
d) Precisão. 
e) Acurácia. 
 
Comentários: 
 
 
 
Conforme vimos em aula, trata-se claramente da Verificação. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 143 
Gabarito: C 
 
 
 (CESPE - 2010 – TRE/ES - Analista de Sistemas) O teste de validação tem por 
finalidade encontrar defeitos e inconsistências no programa com relação a sua 
especificação. 
 
Comentários: 
 
Na verdade, quem faz isso é o Teste de Verificação. 
 
Gabarito: E 
 
 (FCC - 2013 – ALERN - Analista de Sistemas) O teste de software é destinado a 
mostrar que um programa faz o que é proposto a fazer e a descobrir seus 
defeitos antes do uso. O processo de teste tem dois objetivos distintos: 
 
1. Demonstrar ao desenvolvedor e ao cliente que o software atende a seus 
requisitos. 
2. Descobrir situações em que o software se comporta de maneira incorreta, 
indesejável ou de forma diferente das especificações. 
 
Desse modo, é correto afirmar que: 
 
a) não é objetivo final dos processos de verificação validar os requisitos de 
especificação que não reflitam os desejos ou necessidades dos clientes. 
b) os testes podem mostrar a presença de erros e sua ausência. 
c) o objetivo de todo teste é verificar se ele atende apenas aos requisitos 
funcionais. 
d) verificação e validação não são a mesma coisa em relação a testes de sistema. 
e) os testes podem demonstrar que um determinado software está livre de 
defeitos. 
 
Comentários: 
 
(a) Errado, o objetivo final de verificar se um software está de acordo com sua 
especificação é verificar também se está de acordo com os requisitos do cliente, i.e., 
a verificação é um meio para a validação. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 143 
(b) Errado, testes não demonstram ausência de erros, apenas sua presença – isso 
tem que ficar concretado na cabeça de vocês! 
 
(c) Errado, nós vimos em aula que são os requisitos funcionais e não-funcionais – 
essa veio fácil! 
 
(d) Correto, a verificação ocorre em ambiente de desenvolvimento em relação às 
especificações de software; a validação ocorre em ambiente de produção em 
relação às expectativas do cliente. 
 
(e) Errado, nós já vimos que isso deve ficar memorizado – testes jamais demonstram 
ausência de defeitos, apenas presença de defeitos. 
 
Gabarito: D 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 143 
 ERRO, FALTA, FALHA E DEFEITO 
 
Vamos falar brevemente sobre esses conceitos? Para tal, vamos utilizar as definições 
de diversos autores e instituições! Antes de tudo, vamos começar pelo mais fácil: 
Defeito e Falta podem ser considerados sinônimos – não há qualquer diferença 
entre esses conceitos. Ademais, os nomes em inglês podem ser úteis: Erro/Error, 
Falha/Failure, Falta/Fault e Defeito/Defect. 
 
DE ACORDO COM IEEE 610 
 
DEFEITO 
Ato inconsistente cometido por um indivíduo ao tentar entender uma 
informação, resolver um problema ou utilizar um método ou uma ferramenta. 
Pode ocasionar a manifestação de erros em um produto. 
 
ERRO 
Manifestação concreta de um defeito. Diferença entre valor obtido e valor 
esperado, i.e., estado intermediário incorreto ou resultado inesperado 
durante a execução de um programa constitui um erro. 
 
FALHA 
Comportamento operacional do software diferente do esperado pelo usuário. 
Pode ter sido causada por diversos erros e alguns erros podem nunca causar 
uma falha. Afetam diretamente o usuário final. 
 
DE ACORDO COM MALDONADO 
 
DEFEITO 
Incapacidade de algum componente em realizar a função à qual foi projetado. 
 
 
 
ERRO 
Manifestação de uma falha no sistema, causando diferenças das respostas 
apresentadas com as esperadas – nem todas as falhas causarão erros no 
programa. 
 
FALHA 
Incapacidade de o sistema executar suas funções requeridas dentro das 
exigências especificadas – não existe falha se o programa não tem defeito. 
 
 
DE ACORDO COM PRESSMANDEFEITO 
Problema de qualidade descoberto após o software ser lançado aos usuários 
finais ou após outra atividade de um processo de software. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 143 
 
ERRO 
Problema de qualidade descoberto antes de o software ser lançado aos 
usuários finais ou após outra atividade de um processo de software. 
 
 
FALHA 
Incapacidade de o sistema executar suas funções requeridas dentro das 
exigências especificadas – não existe falha se o programa não tem defeito. 
 
 
DE ACORDO COM SOMMERVILLE 
 
DEFEITO 
Uma característica do sistema de software que pode levar a um erro de 
sistema. Por exemplo, a falha em iniciar uma variável pode levar a um valor 
errado quando esta for usada. 
 
ERRO 
Um estado errôneo de sistema que pode levá-lo a um comportamento 
inesperado pelos seus usuários. 
 
 
FALHA 
Um evento que ocorre em algum momento, quando o sistema não fornece um 
serviço conforme esperado por seus usuários. 
 
 
Defeitos fazem parte do universo físico, i.e., a aplicação propriamente dita. Ademais, 
são causados por pessoas. Defeitos podem ocasionar a manifestação de erros, i.e., 
a construção de um software diferente do especificado – fazem parte do universo 
de informação. Por fim, erros podem gerar falhas como comportamentos 
inesperados de um software – fazem parte do universo do usuário. 
 
 
 
Vamos ver um exemplo? Imaginem que Steve Jobs (R.I.P.) se enganou na construção 
da lógica do software do iPod, provocando um loop infinito e causando, por fim, o 
travamento do dispositivo. Ora, qual a causa raiz de tudo isso? O defeito na lógica! 
Qual foi a consequência? O algoritmo entrou em loop infinito! E o que o usuário 
percebeu? O travamento do dispositivo! 
UNIVERSO DO USUÁRIO 
UNIVERSO DA INFORMAÇÃO 
UNIVERSO FÍSICO 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 143 
 
Vamos ver outro exemplo? Imaginem que um cabo de rede de uma impressora se 
desconectou (aqui está o defeito!), provocando um problema de comunicação entre 
estações de trabalho e servidor de rede (aqui está o Erro!) e causando, por fim, a 
não impressão de arquivos desejados pelo usuário (aqui está a Falha!). Ficou mais 
fácil de entender agora? 
 
Galera, percebam que defeitos são observados sob uma perspectiva interna, i.e., 
código está incorreto, lógica está inconsistente, funções estão ausentes, há 
problemas de hardware, etc. Em contrapartida, falhas são observadas sob uma 
perspectiva externa, i.e., sob o ponto de vista da percepção do usuário – travamento 
do sistema, terminação anormal, tela azul, etc. 
 
No meio, nós temos a perspectiva intermediária. 
Aí, eu pergunto: erros sempre causarão falhas? 
Não! No primeiro exemplo, se o usuário não 
utilizou a parte da lógica defeituosa, não haverá 
consequência observável. Do mesmo modo, 
caso o usuário não tente imprimir nada enquanto 
o cabo estiver desconectado, nenhuma falha se 
manifestará! Percebam, então, que Defeitos 
causam Erros que podem causar Falhas. 
 
Atentem-se para um detalhe importante: quando há uma diferença entre o 
resultado observado e o resultado esperado, temos um erro; quando há uma 
diferença entre o comportamento observado e o comportamento esperado, temos 
uma falha! É muito fácil cair em pegadinhas com conceitos tão parecidos – por 
favor, tentem não cai – eu já rodei várias vezes nisso! 
 
De acordo com a IEEE 610, Testes de Software revelam falhas e a Depuração de 
Software descobre defeitos – percebam que são diferentes. Já de acordo com 
Pressman, Testes de Software revelam defeitos e a Depuração de Software descobre 
erros. Infelizmente, vocês terão que conviver com esses conceitos muitas vezes 
contraditórios em sua vida de concurso! =[ 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 143 
 
 
 (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Segundo o 
IEEE, defeito é um ato inconsistente cometido por um indivíduo ao tentar 
entender determinada informação, resolver um problema ou utilizar um método 
ou uma ferramenta; erro é o comportamento operacional do software diferente 
do esperado pelo usuário, e que pode ter sido causado por diversas falhas; e 
falha é uma manifestação concreta de um defeito em um artefato de software, 
ou seja, é qualquer estado intermediário incorreto ou resultado inesperado na 
execução de um programa. 
 
Comentários: 
 
DE ACORDO COM IEEE 610 
 
DEFEITO 
Ato inconsistente cometido por um indivíduo ao tentar entender uma 
informação, resolver um problema ou utilizar um método ou uma ferramenta. 
Pode ocasionar a manifestação de erros em um produto. 
 
ERRO 
Manifestação concreta de um defeito. Diferença entre valor obtido e valor 
esperado, i.e., estado intermediário incorreto ou resultado inesperado 
durante a execução de um programa constitui um erro. 
 
FALHA 
Comportamento operacional do software diferente do esperado pelo usuário. 
Pode ter sido causada por diversos erros e alguns erros podem nunca causar 
uma falha. Afetam diretamente o usuário final. 
 
Conforme vimos em aula, a questão troca os conceitos de Erro e Falha. 
 
Gabarito: E 
 
 (CESPE - 2010 – INMETRO - Analista de Sistemas - D) Na terminologia de testes, 
uma falta ou defeito é a causa de um mau funcionamento de um software; uma 
falha é o resultado incorreto de uma falta ou defeito; um erro é a diferença entre 
um resultado computado e um resultado esperado. As falhas são descobertas 
por meio de testes, mas é a correção da falta ou do defeito que eliminará a falha. 
 
Comentários: 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 143 
 
Atentem-se para um detalhe importante: quando há uma diferença entre o resultado 
observado e o resultado esperado, temos um erro; quando há uma diferença entre o 
comportamento observado e o comportamento esperado, temos uma falha! É muito 
fácil cair em pegadinhas com conceitos tão parecidos – por favor, tentem não cair – 
eu já rodei várias vezes nisso! 
 
De acordo com a IEEE 610, Testes de Software revelam falhas e a Depuração de 
Software descobre defeitos – percebam que são diferentes. Já de acordo com 
Pressman, Testes de Software revelam defeitos e a Depuração de Software descobre 
erros. Infelizmente, vocês terão que conviver com esses conceitos muitas vezes 
contraditórios em sua vida de concurso! =[ 
 
Conforme vimos em aula, está de acordo com a IEEE 610. 
 
Gabarito: C 
 
 (CESPE - 2013 - TCE-RO - Analista de Informática) No teste de software, defeitos 
em um produto podem provocar falhas, gerando erros, que são 
comportamentos inesperados em um software. 
 
Comentários: 
 
No meio, nós temos a perspectiva intermediária. 
Aí, eu pergunto: erros sempre causarão falhas? 
Não! No primeiro exemplo, se o usuário não 
utilizou a parte da lógica defeituosa, não haverá 
consequência observável. Do mesmo modo, caso 
o usuário não tente imprimir nada enquanto o 
cabo estiver desconectado, nenhuma falha se 
manifestará! Percebam, então, que Defeitos 
causam Erros que podem causar Falhas. 
 
Conforme vimos em aula, Defeitos provocam Erros, que podem gerar Falhas, que 
são comportamentos inesperados em um software. 
 
Gabarito: E 
 
 (IADES - 2012 - EBSERH- Analista de Informática) Segundo Pressman (2011), a 
definição de defeito de softwareé um problema de qualidade encontrado, 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 143 
 
(a) Somente após a liberação de uso do software para os usuários finais. 
(b) Antes de o software ser liberado aos usuários finais. 
(c) Na fase de revisão. 
(d) Na fase de levantamento de requisitos. 
(e) Na fase de prototipação. 
 
Comentários: 
 
DE ACORDO COM PRESSMAN 
 
DEFEITO 
Problema de qualidade descoberto após o software ser lançado aos usuários 
finais ou após outra atividade de um processo de software. 
 
 
ERRO 
Problema de qualidade descoberto antes de o software ser lançado aos 
usuários finais ou após outra atividade de um processo de software. 
 
 
FALHA 
Incapacidade de o sistema executar suas funções requeridas dentro das 
exigências especificadas – não existe falha se o programa não tem defeito. 
 
 
Conforme vimos em aula, é somente após a liberação de uso do software. 
 
Gabarito: A 
 
ACERTEI ERREI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 143 
 TESTES DE SOFTWARE 
 
O Teste de Software é o processo de executar um software com dois objetivos 
principais: primeiro, demonstrar ao desenvolvedor e ao cliente que o software 
atende aos requisitos especificados; segundo, descobrir falhas ou defeitos no 
software que apresente comportamento incorreto, não desejável ou em não 
conformidade com sua especificação. 
 
A primeira meta conduz ao Teste de Validação, no qual você espera que o sistema 
seja executado corretamente em um dado conjunto de casos de teste que refletem 
o uso esperado do sistema. A segunda meta conduz ao teste de defeitos, no qual 
são projetados casos de teste para expor defeitos. Os casos de teste podem ser 
obscuros e não precisam refletir como o sistema é usado normalmente. 
 
Os testes de software não podem demonstrar que um software é livre de defeitos 
ou que ele se comportará conforme especificado em todas as circunstâncias 
existentes. É sempre possível que um teste ignorado possa descobrir mais 
problemas no sistema. Já dizia Edsger Dijkstra: “Os testes podem somente mostrar 
a presença de erros, não sua ausência”. Captaram? 
 
A meta é convencer os desenvolvedores e clientes do sistema de que o software é 
bom o suficiente para o uso operacional. O teste é um processo voltado a atingir a 
confiabilidade do software. Para o Teste de Validação, um teste bem-sucedido é 
aquele em que o sistema funciona corretamente. Para o Teste de Defeitos, um teste 
bem-sucedido é o que expõe um defeito que causa o funcionamento incorreto. 
 
O que é um Teste de Software? Como é possível de prever, há diversas definições 
diferentes de diversos autores. Myers, por exemplo, diz que é o processo de 
executar um determinado software com a intenção de encontrar defeitos. Já a IEEE 
729 define como o processo formal de avaliar um sistema ou componente por meios 
manuais ou automáticos para verificar se ele satisfaz os requisitos especificados. 
 
O Glossário International Software Testing Qualifications Board (ISTQB) conceitua 
atividades do ciclo de vida, estáticas ou dinâmicas, voltadas para o planejamento, 
preparação e avaliação de produtos de software e produtos de trabalho 
relacionados a fim de determinar se eles satisfazem os requisitos especificados e 
demonstrar que estão aptos para sua finalidade e detecção de defeitos. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 143 
Pessoal, um bom teste é aquele que tem alta probabilidade de encontrar um erro; 
é aquele que não é redundante; e é aquele não deve ser nem muito simples e nem 
muito complexo. Ao longo de diversos anos, Engenharia de Software evoluiu 
bastante, de modo a sugerir alguns princípios que guiam os Testes de Software. 
Vejamos alguns abaixo: 
 
TESTES DEMONSTRAM A PRESENÇA DE DEFEITOS! 
 
Um teste pode demonstrar a presença de defeitos, mas não pode provar que eles não 
existem. Ele reduz a probabilidade de que os defeitos permaneçam, mas mesmo se 
nenhum defeito for encontrado não quer dizer que ele não os tenha. 
 
 
TESTES EXAUSTIVOS SÃO IMPOSSÍVEIS! 
 
Testar todas as combinações de entradas e pré-condições é inviável, exceto para casos 
triviais. Em vez de realizar testes exaustivos, os riscos e prioridades são levados em 
consideração para dar foco aos esforços de teste. 
 
 
TESTE O MAIS BREVE POSSÍVEL! 
 
Os defeitos encontrados nas fases iniciais do processo de desenvolvimento de software 
são mais baratos de serem corrigidos do que aqueles encontrados já em fase produção. 
Há, inclusive, técnicas de testes antes mesmo da implementação. 
 
 
AGRUPEM OS DEFEITOS MAIS SENSÍVEIS! 
 
Seguindo o Princípio de Pareto, 80% dos defeitos são causados por 20% do código. Ao 
identificar essas áreas sensíveis, os testes podem priorizá-las, de forma a ter alta 
probabilidade de encontrar defeitos. 
 
 
PARADOXO DO PESTICIDA! 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 143 
Caso os mesmos testes sejam aplicados repetidamente, em determinado momento eles 
deixam de ser úteis, ou seja, não conseguem encontrar nenhum novo defeito. Por isso, 
os testes precisam ser revisitados com frequência. 
 
 
TESTES DEPENDEM DO CONTEXTO! 
 
Os testes devem ser elaborados de acordo com o contexto de utilização do software. Ex: 
um sistema bancário deve ser testado de maneira diferente de uma rede social. Assim 
como testes de aplicação web têm foco diferente do desktop. 
 
 
AUSÊNCIA DE DEFEITOS É UMA ILUSÃO! 
 
Identificar e corrigir os problemas de um software não garantem que ele está pronto. 
Os testes foram elaborados para identificar todas as possíveis falhas? O sistema atende 
às necessidades e expectativas dos usuários? I.e., há outros fatores! 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 143 
 
 
O Processo de Software pode ser visto como na espiral ilustrada na imagem abaixo! 
Inicialmente, a Engenharia de Sistemas define o papel do software e passa à análise 
dos requisitos de software, em que são estabelecidos o domínio da informação, 
função, comportamento, desempenho, restrições e critérios de validação para o 
software. Entendido? 
 
Descolando-se para o interior da espiral, chega-se ao projeto e finalmente à 
codificação. Para desenvolver softwares de computador, percorre-se a espiral para 
o interior (sentido anti-horário) ao longo de linhas que indicam a diminuição do 
nível de abstração em cada volta. Uma Estratégia de Teste de software também 
pode ser vista no conceito da espiral, mas esse não é nosso foco no momento. 
 
 
 
O processo de teste de software pode produzir diversos artefatos, dois muito 
importantes: plano de testes e casos de teste. O primeiro apresenta o planejamento 
para execução do teste, incluindo a abrangência, abordagem, recursos e 
cronograma das atividades de teste, etc. Identifica os itens e as funcionalidades a 
serem testados, as tarefas realizadas e os riscos associados com a atividade de teste. 
 
Ele, em geral, possui os seguintes campos: identificador; referências; introdução; 
itens de teste (funções); riscos de software;características a serem (ou não) testadas; 
abordagem (estratégia)1; critérios de aceite e falha; critérios de suspenção e 
requisitos de retomada; entregáveis de teste; tarefas de teste; necessidades de 
ambiente; responsabilidades; entre vários outros. 
 
1 Inclui os responsáveis; tipos de teste; ferramentas; restrições; indicadores; entre outros. 
PROCESSO DE TESTE 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 143 
 
De acordo com o RUP, ele busca definir e comunicar a intenção do esforço de teste 
em determinada programação. Como em outros documentos de planejamento, o 
principal objetivo é ganhar a aceitação e aprovação dos envolvidos no esforço de 
teste. Para isso, o documento deve evitar informações que não serão 
compreendidas ou que serão consideradas irrelevantes pelos envolvidos. 
 
Ele também determina o framework no qual os papéis de teste funcionarão em 
determinada programação. Ele direciona, orienta e restringe o esforço de teste, 
priorizando os produtos liberados úteis e necessários. Em culturas ou domínios nos 
quais os planos de teste não são reconhecidos como artefatos formais, é importante 
considerar os diversos aspectos representados pelo plano de teste. 
 
Já o Caso de Teste é um artefato que contém um conjunto de condições/entradas 
usadas para testar um software, podendo ser elaborado para identificar defeitos na 
estrutura interna do software por meio de situações que exercitem adequadamente 
todas as estruturas utilizadas na a codificação; ou ainda, garantir que os requisitos 
do software que foi construído sejam plenamente atendidos. 
 
Ele, em geral, possui os seguintes campos: descrição, pré-condições, entradas, 
ações; pontos de observação, pontos de controle, resultados esperados e pós-
condições. De acordo com o RUP, ele busca identificar e comunicar formalmente as 
condições específicas detalhadas que serão validadas para permitir a avaliação de 
determinados aspectos dos itens de teste-alvo. Entenderam direitinho? 
 
Casos de Teste podem ser motivados por vários fatores, mas normalmente incluirão 
um subconjunto dos requisitos e dos riscos envolvidos no projeto. Galera, agora 
voltando um pouco! O RUP apresenta diversos artefatos desenvolvidos como 
produtos das atividades de teste. Esses dois são os mais importantes, mas existem 
outros caras importantes. Captaram? 
 
Por fim, uma observação importante que eventualmente é cobrada em provas (eu 
detesto questões assim!). É importante salientar que o Plano de Teste é um artefato 
de responsabilidade do Gerente de Testes e o Caso de Testes é um artefato de 
responsabilidade do Analista de Testes. Por fim, há também o Testador, que é um 
cara que desenha os scripts e faz o trabalho mais operacional. 
 
O ciclo de vida de testes é composto de cinco fases, como apresenta a imagem 
abaixo! Na etapa de Planejamento, elaboram-se o Projeto de Testes e o Plano de 
Testes, e também é responsável por fazer a análise de riscos dos projetos de testes. 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 143 
Na etapa de Preparação, organiza-se o ambiente de testes, com infraestrutura 
adequada e pessoal capacitado, registrando e controlando as versões do produto. 
 
Na etapa de Especificação, elaboram-se e revisam-se os Casos de Teste e os 
Roteiros (Scripts) de Teste. Na etapa de Execução, preparam-se os dados de testes, 
executam-nos, solucionam-se ocorrências, acompanha-se a execução dos casos de 
teste e elabora-se um relatório final. Por fim, na Entrega, avalia-se e arquiva-se a 
documentação, gerando um relatório com as conformidades e não-conformidades. 
 
 
 
 
 
 
 
 
 
 
 
 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 143 
 
 
Teste é um conjunto de atividades que podem ser planejadas com antecedência e 
executadas sistematicamente. Por essa razão, deverá ser definido para o processo 
de software um modelo (template) para o teste – um conjunto de etapas no qual 
pode-se colocar técnicas específicas de projeto de caso de teste e métodos de teste. 
Muitas estratégias de teste de software já foram propostas na literatura. 
 
Todas elas fornecem um modelo para o teste e todas têm as seguintes 
características genéricas: 
 
 Para executar um teste eficaz, proceder a revisões técnicas eficazes. Fazendo 
isso, muitos erros serão eliminados antes do começo do teste. 
 
 O teste começa no nível de componente e progride em direção à integração do 
sistema computacional como um todo. 
 
 Diferentes técnicas de teste são apropriadas para diferentes abordagens de 
engenharia de software e em diferentes pontos no tempo. 
 
 O teste é feito pelo desenvolvedor do software e (para grandes projetos) por um 
grupo independente de teste. 
 
 O teste e a depuração são atividades diferentes, mas a depuração deve ser 
associada com alguma estratégia de teste. 
 
Uma estratégia de teste de software deve acomodar testes de baixo nível, 
necessários para verificar se um pequeno segmento de código fonte foi 
implementado corretamente, bem como testes de alto nível, que validam as funções 
principais do sistema de acordo com os requisitos do cliente. Uma estratégia deverá 
fornecer diretrizes para o profissional e uma série de metas para o gerente. 
 
Devido ao fato de os passos da estratégia de teste ocorrerem no instante em que 
as pressões pelo prazo começam a aumentar, deve ser possível medir o progresso 
no desenvolvimento e os problemas devem ser revelados o mais cedo possível. A 
Estratégia de Teste (Estágios/ Níveis de Teste) são agrupados de acordo com o 
momento em que eles são executados ou pelo nível de especificidade do teste. 
 
Há muitas estratégias que podem ser utilizadas para testar um software. Em um dos 
extremos, pode-se esperar até que o sistema esteja totalmente construído e, então, 
ESTRATÉGIA DE TESTES 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 143 
executar os testes no sistema completo esperando encontrar os erros. Essa 
abordagem, embora atraente, simplesmente não funciona; resultará em um 
software defeituoso que desagrada todos os que investiram nele. 
 
No outro extremo, você pode executar testes diariamente, sempre que uma parte 
do sistema seja construída. Essa abordagem, embora menos atraente, pode ser 
muito eficaz. Uma estratégia que é preferida pela maioria das equipes de software 
está entre os dois extremos. Ela assume uma visão incremental do teste, conforme 
é apresentado na espiral. 
 
 
 
A imagem acima mostra que a espiral se inicia em sentido horário pelo Teste de 
Unidade, que é responsável por analisar o código em si; em seguida realiza o Teste 
de Integração, que é responsável por analisar o projeto; depois o Teste de 
Validação/Aceitação, que é responsável por analisar os requisitos do usuário; e, por 
fim, o Teste de Sistema, é responsável por analisar o sistema como um todo. 
 
Testes de Software podem se dividir em Baixo Nível (1º Nível) e Alto Nível (2º Nível)! 
Nos Testes de Baixo Nível, o profissional deve ter um profundo conhecimento da 
estrutura interna do software. Por esse motivo, é natural nas empresas que as fases 
desse nível de teste sejam transferidas para o próprio desenvolvedor, pois ele possui 
toda a carga de conhecimento que é necessáriapara realizar essas atividades. 
 
Galera, pode-se notar que o primeiro nível é composto pelos Testes Unitários e 
Testes de Integração. Já nos Testes de Alto Nível, não é necessário conhecimento 
da estrutura interna do software. Os testes são guiados pelas especificações de 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 143 
negócio e pela lista de requisitos do software. O segundo nível é composto pelos 
Testes de Validação e Testes de Sistema. 
 
O Teste de Unidade começa no centro da espiral e se concentra em cada unidade 
(Ex: componente, classe, objeto, entre outros) do software conforme implementado 
no código-fonte. O teste prossegue movendo-se em direção ao exterior da espiral, 
passando pelo Teste de Integração, em que o foco está no projeto e construção da 
arquitetura de software. 
 
Continuando na mesma direção da espiral, encontramos o Teste de Validação, em 
que requisitos estabelecidos como parte dos requisitos de modelagem são 
validados em relação ao software criado. Finalmente, chegamos ao Teste de 
Sistema, no qual o software e outros elementos são testados como um todo e, não, 
em partes separadas. 
 
Para testar um software de computador, percorre-se a espiral em direção ao seu 
exterior, no sentido horário, ao longo de linhas que indicam o escopo do teste a 
cada volta. Considerando o processo de um ponto de vista procedimental, o teste 
dentro do contexto de engenharia de software é na realidade uma série de quatro 
etapas que são implementadas sequencialmente. 
 
Inicialmente, os testes focalizam cada componente individualmente, garantindo que 
ele funcione adequadamente como uma unidade, daí o nome Teste de Unidade. O 
Teste de Unidade usa intensamente técnicas de teste com caminhos específicos na 
estrutura de controle de um componente para garantir a cobertura completa e a 
máxima detecção de erros. 
 
Em seguida, o componente deve ser montado ou integrado para formar o pacote 
completo de software. O Teste de Integração cuida de problemas associados com 
aspectos de verificação e construção do programa, ainda em um ambiente de 
desenvolvimento (e, não, produção). Técnicas de projeto de casos de teste que 
focalizam em entradas e saídas são mais predominantes durante a integração. 
 
Apesar disso, técnicas que usam caminhos específicos de programa podem ser 
utilizadas para segurança dos principais caminhos de controle. Depois que o 
software foi integrado (construído), é executada uma série de testes de ordem 
superior (como mostra a imagem abaixo da pirâmide). Os critérios de validação 
devem ser avaliados. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 143 
 
 
O Teste de Validação proporciona a garantia final de que o software satisfaz a todos 
os requisitos informativos, funcionais, comportamentais e de desempenho. A última 
etapa de teste extrapola os limites de engenharia de software, entrando em um 
contexto mais amplo de engenharia de sistemas de computadores, combinando 
elementos do sistema (por exemplo, hardware, pessoas, base de dados). 
 
O Teste de Sistema verifica se todos os elementos se combinam corretamente e se 
a função ou desempenho global do sistema foi conseguida com êxito. Pessoal, essa 
é a visão do Pressman! Já Sommerville possui uma visão diferente sobre Estágios de 
Teste, dividindo-o em Teste de Componente, Teste de Sistema e Teste de Aceitação. 
Vamos ver isso em detalhes... 
 
De acordo com essa visão, os componentes do sistema são testados, depois é 
testado o sistema integrado e, finalmente, o sistema é testado com os dados do 
cliente. De maneira ideal, os defeitos de componentes são descobertos no início do 
ocesso e os problemas de interface, quando o sistema for integrado. No entanto, 
à medida que os defeitos são descobertos, o programa deve ser depurado. 
 
Isso pode requerer que outros estágios no processo de teste sejam repetidos. Os 
erros nos componentes de programa podem aparecer durante o teste de sistema. 
O processo é, portanto, iterativo, com as informações sendo realimentadas dos 
estágios posteriores para as partes iniciais do processo. O Processo de Teste (de 
Sommerville) é apresentado na imagem a seguir. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 143 
 
 
Chegou a hora de ver cada estágio com mais detalhes. Vamos falar sobre o Teste 
de Unidade, Teste de Integração, Teste de Sistema e Teste de Validação: 
 
 
 
Esse teste focaliza o esforço de verificação na menor unidade de projeto do software 
– o componente ou módulo de software. Usando como guia a descrição de projeto 
no nível de componente, caminhos de controle importantes são testados para 
descobrir erros dentro dos limites do módulo. A complexidade relativa dos testes e 
os erros que revelam são limitados pelo escopo restrito estabelecido para esse teste. 
 
Ele enfoca a lógica interna de processamento e as estruturas de dados dentro dos 
limites de um componente. Esse tipo de teste pode ser conduzido em paralelo para 
diversos componentes. A interface de um módulo é testada para assegurar que as 
informações fluam corretamente para dentro a para fora da unidade de programa 
que está sendo testada. 
 
A estrutura de dado local é examinada para garantir que os dados armazenados 
temporariamente mantenham sua integridade durante todos os passos na execução 
de um algoritmo. Todos os caminhos independentes da estrutura de controle são 
usados para assegurar que todas as instruções em um módulo tenham sido 
executadas pelo menos uma vez. 
 
TESTE DE UNIDADE (COMPONENTE OU MÓDULO) 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 143 
As condições-limite são testadas para garantir que o módulo opere adequadamente 
nas fronteiras estabelecidas para limitar ou restringir o processamento. Finalmente, 
são testados todos os caminhos de manipulação de erro. Para Sommerville, é o 
processo de teste de componentes individuais do sistema. Este é um processo de 
teste de defeitos e, portanto, sua meta é expor defeitos nesses componentes. 
 
Existem diferentes tipos de componentes que podem ser testados nesse estágio: 
Funções ou métodos individuais de um objeto; classes de objeto com vários 
atributos e métodos; componentes compostos que constituem diferentes objetos 
ou funções. Esses componentes compostos têm uma interface definida usada para 
acessar sua funcionalidade. 
 
As funções ou métodos individuais são os tipos mais simples de componentes e 
seus testes são um conjunto de chamadas dessas rotinas com diferentes parâmetros 
de entrada. Eles verificam o funcionamento de um pedaço do sistema ou software 
isoladamente ou que possam ser testados separadamente, e são considerados um 
apêndice ao passo de codificação. 
 
O projeto de Teste de Unidade pode ser realizado antes que o código seja iniciado 
ou depois de o código-fonte ter sido gerado. Geralmente são feitos pelos próprios 
desenvolvedores e, não, por especialistas em testes. Por meio de Testes de Unidade, 
é possível encontrar problemas mais cedo; facilita mudanças; simplifica integrações; 
auxilia a documentação; melhora o projeto do software; entre outros. 
 
 
 
Um novato no mundo do software pode levantar uma questão aparentemente 
gítima quando todos os módulos tiverem passado pelo teste de unidade: Se todos 
funcionam individualmente,porque você duvida que eles funcionem quando 
estiverem juntos? O problema, naturalmente, é “colocá-los todos juntos” – aqui nós 
estamos falando de interfaces. 
 
Dados podem ser perdidos através de uma interface; um componente pode ter um 
efeito inesperado ou adverso sobre outro, subfunções, quando combinadas, podem 
não produzir a função principal desejada; imprecisão aceitável individualmente 
pode ser amplificada em níveis não aceitáveis; estruturas de dados globais podem 
apresentar problemas. Infelizmente, essa lista não tem fim! 
 
Teste de Integração é uma técnica sistemática para construir a arquitetura de 
software ao mesmo tempo que conduz testes para descobrir erros associados com 
TESTE DE INTEGRAÇÃO 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 143 
as interfaces. O objetivo é construir uma estrutura de programa determinada pelo 
projeto a partir de componentes testados em unidade. Muitas vezes, há uma 
tendência de tentar integração não incremental. 
 
Ou seja, construir o programa usando uma abordagem big bang. Todos os 
componentes são combinados com antecedência. O programa inteiro é testado 
como um todo. E, usualmente, o resultado é o caos, porque muitos erros podem 
ser encontrados de uma só vez e a sua correção fica difícil, visto que há muito 
espaço para procurar e isolar a causa do erro. 
 
Uma vez corrigidos esses erros, novos erros aparecem e o processo parece não ter 
fim. A integração incremental é o oposto da abordagem big bang. O programa é 
construído e testado em pequenos incrementos, em que os erros são mais fáceis de 
isolar e corrigir; as interfaces têm maior probabilidade de serem testadas 
completamente; e uma abordagem sistemática de teste pode ser aplicada. 
 
Para Sommerville, Testes de Integração e Testes de Release – são componentes d
Teste de Sistema (em sistemas complexos). O Teste de Integração trata do esforço 
de verificação em uma combinação de componentes para checar se eles funcionam 
corretamente juntos, conforme as especificações. Busca encontrar defeitos nas 
interfaces e nas interações entre componentes ou sistemas integrados. 
 
 
 
O Teste de Validação começa quando termina o teste de integração, quando os 
componentes individuais já foram exercitados, o software está completamente 
montado como um pacote e os erros de interface já foram descobertos e corrigidos. 
O teste focaliza simplesmente ações visíveis ao usuário e saídas do sistema 
reconhecíveis pelo usuário. 
 
A validação pode ser definida de várias maneiras, mas uma definição simples 
(embora rigorosa) é que a validação tem sucesso quando o software funciona de 
uma maneira que pode ser razoavelmente esperada pelo cliente. Nesse ponto, um 
desenvolvedor de software veterano pode dizer: Quem ou o que é o árbitro para 
decidir o que são expectativas razoáveis? 
 
Se foi desenvolvida uma Especificação de Requisitos de Software, ela descreve todos 
os atributos do software visíveis ao usuário e contém uma seção denominada 
Critérios de Validação, que forma a base para uma abordagem de Teste de 
TESTE DE VALIDAÇÃO (ACEITAÇÃO) 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 143 
Validação. Para tal, existem os Testes Alfa e Testes Beta, que serão vistos agora com 
mais detalhes. 
 
É praticamente impossível para um desenvolvedor de software prever como o 
cliente usará um programa. As instruções de uso podem ser mal interpretadas, 
combinações estranhas de dados podem ser usadas regularmente; resultados que 
pareciam claros para o testador podem ser confusos para um usuário no campo de 
utilização. Entendido? 
 
Quando é construído um software personalizado para um cliente, são feitos Testes 
de Aceitação para permitir ao cliente validar todos os requisitos e decidir se ele é 
bom o suficiente para ser implantado. Conduzido pelo usuário final e não por 
engenheiros de software, um Teste de Aceitação pode variar de um informal test 
driver até uma série de testes planejados e sistematicamente executados. 
 
Na verdade, um teste de aceitação pode ser executado por um período de semanas 
ou meses, descobrindo assim erros cumulativos que poderiam degradar o sistema 
ao longo do tempo. Se um software é desenvolvido como um produto para ser 
usado por muitos clientes, é impraticável executar testes formais de aceitação para 
cada cliente. 
 
Muitos construtores de software usam um processo chamado de Teste Alfa e Teste 
Beta para descobrir erros que somente o usuário final parece ser capaz de 
encontrar. O Teste Alfa é conduzido na instalação do desenvolvedor por um grupo 
representativo de usuários finais. O software é usado em um cenário natural com o 
desenvolvedor “espiando em cima dos ombros” do usuário. 
 
Dessa forma, ele registra os erros e os problemas de uso. Os Testes Alfa são 
conduzidos em um ambiente controlado. Já o Teste Beta é conduzido nas 
instalações de um ou mais usuários finais. Diferentemente do Teste Alfa, o 
desenvolvedor geralmente não está presente. Portanto, o Teste Beta é uma 
aplicação “ao vivo” do software em um ambiente que não pode ser controlado. 
 
O cliente registra todos os problemas (reais ou imaginários) encontrados durante o 
Teste Beta e relata esses problemas para o desenvolvedor em intervalos regulares. 
Como resultado dos problemas relatados durante o Teste Beta, os engenheiros de 
software fazem modificações e então preparam a liberação do software para todos 
os clientes. 
 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 143 
Uma variação do Teste Beta, chamada de Teste de Aceitação do Cliente, às vezes 
executada quando é fornecido software personalizado a um cliente sob contrato. O 
cliente executa uma série de testes específicos na tentativa de descobrir erros antes 
de aceitar o software do desenvolvedor. Em alguns casos (por exemplo, um grande 
sistema corporativo ou governamental) o Teste de Aceitação pode ser muito formal. 
 
 
 
Galera, um software é apenas um elemento de um grande sistema de computador. 
No final, o software é incorporado com outros elementos do sistema (por exemplo, 
hardware, pessoas, informações), e é executada uma série de testes de integração 
de sistema e validação. Esses testes estão fora do escopo do processo de software 
e não são executados somente por engenheiros de software. 
 
No entanto, as etapas executadas durante o projeto de software e o teste podem 
aumentar muito a probabilidade de uma integração de software bem-sucedida em 
um sistema maior. Um problema clássico de teste de sistema é a “procura do 
culpado”. Isso ocorre quando é descoberto um erro e os desenvolvedores de 
diversos elementos do sistema começam a acusar um ao outro pelo problema. 
 
Em vez de adotar essa postura sem sentido, você deve se antecipar aos problemas 
potenciais de interface e (1) criar caminhos de manipulação de erro que testem todas 
as informações vindas de outros elementos do sistema; (2) executar uma série de 
testes que simulem dados incorretos ou outros erros potenciais na interface de 
software. 
 
(3) Deve registrar os resultados dos testes para usar como evidência se ocorrer a 
caça ao culpado; e (4) participar do planejamento e projeto de testes do sistema 
para assegurar que o software seja testado adequadamente. O Teste de Sistema é 
na realidade uma série de diferentes testes cuja finalidade primária é exercitar 
totalmente o sistema. 
 
Embora cada um dos testes tenha uma finalidade diferente, todos funcionam no 
sentido de verificarse os elementos do sistema foram integrados adequadamente 
e executam as funções a eles alocadas. Como eu disse anteriormente, Sommerville 
divide Testes de Sistema em duas fas (para sistemas complexos): Testes de 
Integração e Testes de Releases. É bom saber essa diferença! 
 
O Teste de Sistema envolve a integração de dois ou mais componentes que 
implementam funções ou características do sistema e depois o teste desse sistema 
TESTE DE SISTEMA 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 143 
integrado. Em um processo de desenvolvimento iterativo, o teste de sistema 
concentra-se no teste de um incremento que será entregue ao cliente; em um 
processo em cascata, o teste de sistema concentra-se no teste de todo o sistema. 
 
Segundo Sommerville, no Teste de Integração: a equipe de testes deve acessar o 
código-fonte do sistema. Quando um problema é descoberto, a equipe de 
integração tenta encontrar a origem do problema e identificar os componentes que 
devem ser depurados. Os Testes de Integração geralmente estão relacionados à 
descoberta de defeitos no sistema. 
 
O Teste de Integração verifica se esses componentes funcionam em conjunto, se 
são chamados corretamente e se transferem dados corretos no tempo correto por 
meio de suas interfaces. A integração envolve a identificação de componentes que 
realizam alguma funcionalidade, e a integração desses componentes ao adicionar 
códigos que fazem com que eles trabalhem em conjunto. 
 
Segundo Sommerville, no Teste de Release: uma versão do sistema, que poderia ser 
liberada aos usuários, é testada. Aqui, a equipe de testes concentra-se em validar 
se o sistema atende aos requisitos e em assegurar que o sistema é confiável. O Teste 
de Releases é normalmente um Teste Caixa-Preta no qual a equipe de testes 
concentra-se em demonstrar se o sistema funciona adequadamente ou não. 
 
Os problemas são reportados à equipe de desenvolvimento, cujo trabalho é depurar 
o programa. Os clientes são envolvidos no Teste de Releases que, algumas vezes, é 
chamado de Teste de Aceitação. Se o release for bom o suficiente, o cliente poderá 
aceitá-lo para seu uso. Como vocês devem ter percebido, eu não gosto muito do 
Sommerville para esse assunto! Ele é extremamente confuso e desorganizado. 
 
 
PRESSMAN (7ª Edição) 
 
Teste de Unidade 
Teste de Integração 
Teste de Validação 
Teste de Sistema 
 
O Pressman divide em quatro estágios bem definidos. Você testa as unidades 
separadamente; depois você as integra e testa se funcionam em conjunto; depois 
você testa com os usuários em um ambiente controlado e em um ambiente real; e, 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 143 
por fim, você testa se o software funciona harmonicamente no sistema em que será 
inserido, i.e., com outros hardwares, pessoas, informações, etc. 
 
 
SOMMERVILLE (8ª EDIÇÃO) – SISTEMAS DE GRANDE PORTE 
 
Teste de Componente/Unidade 
Teste de Integração 
Teste de Sistema 
Teste de Release 
Teste de Aceitação 
 
 
SOMMERVILLE (8ª EDIÇÃO) – SISTEMAS DE PEQUENO PORTE 
 
Teste de Componente/Unidade 
Teste de Sistema 
Teste de Aceitação 
 
Sommerville divide em três estágios pouco definidos. Você testa os componentes 
separadamente; depois – caso seja um sistema complexo – você os integra e testa 
se funcionam em conjunto; depois você testa uma versão com os usuários. Essas 
duas últimas fases são chamadas de Teste de Sistema, no entanto temos alguns 
problemas na organização dessas ideias. 
 
Ele afirma que são três estágios: Componente > Sistema > Aceitação. Em sistemas 
de grande porte, o Teste de Sistema é composto de um Teste de Integração e um 
Teste de Release. No entanto, depois ele afirma que Teste de Release é também um 
Teste de Aceitação. E, por fim, ele afirma que um Teste de Aceitação é um Teste 
Alfa. Acompanharam essa maluquice? Sommervile! 
 
Em outras palavras, é possível até concluir que Teste de Integração é sinônimo de 
Teste de Sistema. Ele afirma: “Fundamentalmente, você pode pensar no teste de 
integração como o teste de sistemas incompletos compostos de clusters e 
agrupamentos de componentes de sistema”. Vocês perceberam como é confuso? 
Pois é, acho que ele mesmo percebeu e resolveu mudar na última edição (2011). 
 
Eu tenho que falar das duas, porque as duas vocês podem eventualmente resolver 
uma questão antiga. Bem, na última edição, ele afirma que – tipicamente – um 
sistema de software comercial deve passar por três estágios de testes: Teste de 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 143 
Desenvolvimento, Teste de Release e Teste de Usuário (percebam que mudou 
bastante em relação à versão anterior). Vamos ver cada uma delas em detalhes. 
 
 
SOMMERVILLE (9ª EDIÇÃO) 
 
Teste de 
Desenvolvimento 
Teste de Unidade 
Teste de Componente 
Teste de Sistema 
Teste de Release 
Teste de Usuário 
 
Os Testes de Desenvolvimento são aqueles em que a equipe de desenvolvimento 
testa o sistema durante o desenvolvimento para descobrir bugs e defeitos. 
Projetistas e programadores serão os prováveis envolvidos no processo de testes. 
Os Testes de Release são aqueles em que uma equipe de testes separada testa uma 
versão completa do sistema antes de ele ser liberado para os usuários. 
 
O objeto do Teste de Release é verificar se o sistema está de acordo com os 
requisitos das partes interessadas do sistema. Por fim, os Testes de Usuário são 
aqueles em que usuários ou potenciais usuários de um sistema testam o sistema em 
seu próprio ambiente. O Teste de Aceitação é um tipo de Teste de Usuário em que 
o cliente formalmente testa o sistema para decidir se deve ser aceito ou não. 
 
Percebam que o discurso mudou nessa nova versão. Ele afirma, por exemplo, que 
existem três níveis de granularidade para Testes de Desenvolvimento: Testes de 
Unidade, Testes de Componente e Testes de Sistema. O primeiro testa unidades 
individuais, com foco na funcionalidade de objetos ou métodos. O segundo testa 
componentes (que são um conjunto de unidades individuais). 
 
Esse teste deve se concentrar em testar a interface de componentes. r fim, o 
último testa a interação de componentes que trabalham como um todo. Professor, 
qual a diferença entre um Teste de Sistema e um Teste de Release? A diferença é que 
Teste de Sistema busca defeitos no sistema como um todo e é realizado pela equipe 
de desenvolvimento. 
 
O Teste de Release é feito por uma equipe não envolvida no desenvolvimento e 
não busca defeitos. Na verdade, ele checa se o sistema está de acordo com seus 
requisitos e está suficientemente bom para uso externo (semelhante a um Teste de 
16712855225
Curso Regular de Engenharia de Software 
Curso de Teoria e Exercícios - 2016 
Prof. Diego Carvalho – Aula 08 
 
 
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 143 
Validação). Deve-se convencer o cliente de que o sistema entrega o que foi 
especificado funcionalmente e não-funcionalmente. 
 
Vamos fazer um resumão? Você testa as unidades (Teste de Unidade); junta as 
unidades em componentes compostos e testa suas interfaces (Teste de 
Componente); junta os componentes e testa suas interações (Teste de Sistema); 
manda para outra equipe verificar se está de acordo com a especificação (Teste de 
Release); por fim, os clientes testam em Testes Alfa, Beta e de Aceitação. 
 
Professor, espera um pouco! Cadê o Teste de Integração? Pois é, ele sumiu nessas 
últimas edições.

Continue navegando