Aula 2 Verificação de Validação de Software

Conforme sabemos existem quatro atividades fundamentais no processo de engenharia de software. Estas atividades podem ser organizadas de diferentes maneiras dependendo do processo de desenvolvimento utilizado. A seguinte tabela resume as atividades do processo de software de acordo com Sommerville:
| Atividade do Processo de Software | Descrição |
|---|---|
| Especificação de Software | A funcionalidade do software e as restrições ao seu funcionamento devem ser definidas. |
| Projeto e Implementação de Software | O software deve ser produzido para atender às especificações. |
| Validação de Software | O software deve ser validado para garantir que atenda às demandas do cliente. |
| Evolução de Software | O software deve evoluir para atender às necessidades de mudança dos clientes. Alterações no software são uma parte inevitável. |
Hoje vamos explorar a terceira etapa, mas especificamente a Verificação e Validação de Software.

2.1 Verificação de Software:
Definição de Verificação de Software: Assegurar que o software implementa corretamente uma função específica. “Estamos criando o produto corretamente?”.
2.2 Validação de Software:
Definição de Validação de Software: Assegurar que o software foi criado e pode ser rastreado segundo os requisitos do cliente. “Estamos criando o produto certo?”. Validação tem sucesso quando o software funciona de uma maneira que pode ser razoavelmente esperada pelo cliente.
Quais os objetivos globais da etapa de Verificação e Validação de Software ?
| Objetivos Globais - Etapa de Verificação e Validação do Processo de Software |
|---|
|
|
|
|
2.3 Classificação das Técnicas de Verificação e Validação:
Para garantir a Qualidade do Software, a abordagem das técnicas de Verificação e Validação de software podem ser organizadas em dois grandes grupos principais:
Técnicas Estáticas de Verificação e Validação de software;
Técnicas Dinâmicas de Verificação e Validação de software;
Ambas sem complementam e o ideal é que ambas abordagens sejam aplicadas na avaliação do produto.
2.4 Verificação e Validação de software por Técnicas Estáticas
As Técnicas Estáticas são Inspeções e revisões que analisam os requisitos do sistema, modelos de projeto e o código-fonte do programa sem executá-lo. O objetivo dessas técnicas é identificar erros, inconsistências, ambiguidades e desvios de padrões e requisitos em um estágio inicial do ciclo de vida do desenvolvimento de software. Os 4 tipos de técnicas estáticas mais comuns são:
|
|
|
|
2.4.0.1 A) Revisões Técnicas
São atividades de controle de qualidade realizadas por engenheiros de software para descobrir erros na função, lógica ou implementação do software.
Podem ser Informais (sem a necessidade de agendamento ou declaração oficial ) ou formais ( com planilhas, documentação e acordos de compromisso).
2.4.0.2 Passeio (Walkthrough) ( caso especial de revisão técnica formal)
Existe uma revisão técnica formal chamada “Passeio” onde o produtor “repassa” o artefato de software, explicando o material, enquanto os revisores levantam questões com base em sua preparação prévia.
2.4.0.3 B) Inspeção do produto
Na Inspeção do Produto de software, uma pequena equipe verifica o código sistematicamente, procurando por possíveis erros e omissões. Tudo é executado e controlado minuciosamente com planilhas e documentos de formalização assinados pelos gestores das áreas.
2.4.0.4 C) Análise Estática
Inspeciona-se o código fonte do programa sem executa-lo, procurando erros de programação “na raça”.
2.4.0.5 D) Análise Estática Automatizada
Inspeciona-se o código fonte do programa com auxílio de um programa, como por exemplo o RATS (Rough Auditing Tool for Security) que significa “Ferramenta de auditoria bruta para segurança”.

2.4.0.6 E) Verificação Formal do Produto e Métodos Formais
Utiliza-se métodos matemáticos e estatísticos para avaliar o programa. Usado em software de missão crítica como software supervisório de usinas nucleares, cirurgia robótica e software de navegação de aviação.
2.5 Verificação e Validação de software por Técnicas Dinâmicas
As Técnicas Dinâmicas são testes de software, nos quais o sistema é executado com dados de testes simulados.
| Tipo de Teste | Descrição |
|---|---|
| Teste de Unidade | Concentra-se em testar componentes individuais do software, como módulos, classes ou funções, de forma isolada. O objetivo é verificar se cada unidade funciona corretamente em relação à sua especificação. Em um contexto orientado a objetos, isso inclui o teste de métodos dentro de uma classe. |
| Teste de Integração | Após o teste de unidade, os componentes são combinados e testados em conjunto para verificar as interações entre eles. O teste de integração visa descobrir erros nas interfaces e na colaboração entre os módulos. |
| Teste de Validação | Tem como objetivo garantir que o software construído atende às expectativas e aos requisitos do cliente. Os critérios de teste de validação são estabelecidos durante a análise de requisitos. |
| Teste de Sistema | Testa o software como um sistema completo, após a integração de todos os componentes. |
O teste de sistema pode ser separado em 6 subtestes:
| Teste de Recuperação | Verifica a capacidade do sistema de se recuperar de falhas (software ou hardware) e continuar operando corretamente. |
| Teste de Segurança | Avalia se o sistema protege dados e funcionalidades contra acessos não autorizados e se cumpre os requisitos de privacidade e segurança. |
| Teste por Esforço | Examina o comportamento do sistema sob condições de carga anormal (volume de dados, número de usuários, etc.) para identificar seus limites e possíveis pontos de falha. |
| Teste de Desempenho | Avalia os aspectos de desempenho do sistema, como tempo de resposta, vazão e utilização de recursos, sob condições normais e de carga. |
| Teste de Disponibilização (Implantação/Configuração) | Verifica se o software opera corretamente em todos os ambientes (plataformas, sistemas operacionais) para os quais foi projetado. Inclui também a avaliação dos procedimentos de instalação e da documentação associada. |
| Teste de Regressão | É realizado após alterações no software (correção de erros, adição de novas funcionalidades) para garantir que as modificações não introduziram novos defeitos ou afetaram adversamente as partes existentes do sistema. |
A escolha das técnicas dinâmicas e dos tipos de testes a serem utilizados depende do tipo de software a ser desenvolvido, dos requisitos do projeto, dos recursos disponíveis e dos riscos envolvidos. O objetivo final é encontrar o maior número possível de erros com o mínimo de esforço e garantir a entrega de software de alta qualidade que atenda às necessidades dos usuários.
2.6 Exercícios
2.6.1 Testes Sobre Verificação e Validação I
| TESTE 1 |
|---|
| Qual das seguintes afirmações melhor descreve o conceito de verificação de software? |
|
|
|
|
|
| TESTE 2 |
|---|
| Qual das seguintes afirmações melhor descreve o conceito de validação de software? |
|
|
|
|
|
| TESTE 3 |
|---|
| Qual das seguintes afirmações descreve melhor a técnica de “Walkthrough” (passeio) no contexto de Verificação e Validação de software? |
|
|
|
|
|
| TESTE 4 |
|---|
| Qual das seguintes opções lista os tipos mais comuns de técnicas estáticas utilizadas em Verificação e Validação de software? |
|
|
|
|
|
| TESTE 5 |
|---|
| Quem geralmente participa de uma inspeção formal de software (revisão técnica formal)? |
|
|
|
|
|
| TESTE 6 |
|---|
| Qual a principal característica que distingue a verificação formal de outras técnicas de verificação e validação de software? |
|
|
|
|
|
| TESTE 7 |
|---|
| Qual o principal objetivo da aplicação de métodos formais na verificação de um produto de software? |
|
|
|
|
|
| TESTE 8 |
|---|
| Qual das seguintes atividades é a principal característica das técnicas dinâmicas de verificação e validação de software? |
|
|
|
|
|
| TESTE 9 |
|---|
| Qual o principal objetivo do teste de software como uma técnica dinâmica de verificação e validação? |
|
|
|
|
|
| TESTE 10 |
|---|
| Qual dos seguintes níveis de teste é considerado uma técnica dinâmica de verificação e validação que foca em exercitar a menor unidade testável do software? |
|
|
|
|
|