Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Modular - ECSRV Página 1 SUMÁRIO 1. INTRODUÇÃO 1.1. PRINCÍPIOS DE MODULAR IDADE 1.1.1. MÓDULO 1.1.2. ELEMENTOS DE PRO GR AMA 1.1.3. INT ERFACE 1.1.4. PRO CES SO DE DES ENVO LV I MENTO 1.1.5. T IPO ABST RAT O DE DADO S 1.1.6. ART EFATO E CO NS TR UT O 1.1.7. ENCAP SULAMENTO 1.1.8. ACOP LAMEN TO 1.1.9. CO ES ÃO 1.1.10. EXER CÍ CIOS 2. MODELAGEM DE ESTRUTURAS 2.1. NOTAÇÃO 2.2. VETOR 2.3. LISTA DUPLAMENT E ENCADEADA COM NÓ C ABEÇA 2.4. ÁRVORE BINÁRIA COM NÓ CABEÇA 3. ASSERTIVAS ESTRUTURAIS 3.1. LISTA 3.2. GRAFO 4. ESPECIFICAÇÃO DE REQUISITOS 4.1. DEFINIÇÃO 4.2. NÍVEIS DE ESPECIFICAÇ ÃO 4.3. REQUISITOS 4.4. HIPÓTESES 4.5. RESTRIÇÕES 4.6. TIPOS DE REQUISITO 4.7. CRITÉRIOS DE QUALIDAD E DE ESPECIFICAÇÃO 4.8. EXEMPLO DE REQUISITOS 5. ASSERTIVAS 5.1. DEFINIÇÃO 5.2. EXEMPLO DE ASSERTIVAS 5.3. QUALIDADE DE ARTEFATO S 5.4. ASSERTIVAS DE ENTRADA E SAÍDA 5.5. ASSERTIVAS ESTRUTURAIS Programação Modular - ECSRV Página 2 6. IMPLEMENTAÇÕES DA PROGRAMAÇÃO 6.1. ESPAÇO DE DADOS 6.2. TIPOS DE DADOS 6.3. DECLARAÇÃO E DEFINIÇÃ O DE ELEMENTOS 6.3.1. DECLAR AR 6.3.2. DEFINI R 6.3.3. IMP LEMENT AÇÃO EM C E C++ 6.4. PRÉ – PROCESSAMENTO 6.5. EXERCÍCIOS 7. ESTRUTURA DE FUNÇÕES 7.1. PARADIGMA 7.2. EXEMPLO DE ESTRUTURA DE FUNÇÕES 7.3. EXEMPLO DE ESTRUTURA DE CHAMADAS 7.4. FUNÇÃO 7.5. ESPECIFICAÇÃO DE FUNÇ ÃO 7.6. HOUSE KEEPING 7.7. REPETIÇÕES 7.8. RECURSÃO 7.9. ESTADO 7.10. ESQUEMA DE ALGORITMO 7.11. VALORES DO TIPO FUNÇÃO 7.12. PARÂMETROS DO TIPO PO NTEIRO PARA FUNÇÃO 8. DECOMPOSIÇÃO SUCESSIVA 8.1. CONCEITOS 8.2. NÍVEIS DE ABSTRAÇÃO 8.3. PROJETO ESTRUTURADO 8.4. PASSOS DE PROJETO 8.4.1. D IR EÇÃO DE PRO JETO 8.5. ELEMENTOS DE UM PASSO DE PROJETO 8.6. COMPONENTE DA ESTRUTURA 8.6.1. DEFINI ÇÃO 8.6.2. ADEQ UAÇÃO 8.6.3. NECESSI DADE 8.6.4. SUFI CI ÊN CI A 8.6.5. ORT OGON ALI DADE Programação Modular - ECSRV Página 3 9. ARGUMENTAÇÃO DE CORRETUDE 9.1. ARGUMENTAÇÃO DE SEQUE NCIA 9.2. ARGUMENTAÇÃO DE SELEÇ ÃO 9.3. ARGUMENTAÇÃO DE REPET IÇÃO 10. INSTRUMENTAÇÃO 10.1. PROBLEMAS AO EXECUTAR TESTES 10.2. O QUE É INSTRUMENTAÇÃO 10.3. OBJETIVO 10.4. CONCEITOS 10.4.1. PROGR AMA RO BUS TO 10.4.2. PROGR AMA TO LER AN TE A FALHAS 10.4.3. DET ERIO RAÇÃO CONT R OLADA 10.5. INCLUSÃO DE INSTRUMENTOS NO CÓDIGO (C++) 10.6. ASSERTIVAS EXECUTÁVEI S 10.7. DETURPADORES 10.8. TRACES 10.9. CONTROLADORES DE COBERTURA 10.10. DETURPADOR DE ESTRUTURAS DE DADOS 10.11. VALIDADOR DE ESTRUTUR AS DE DADOS 11. TESTES 11.1. CENÁRIOS DE TESTE 11.2. REGISTRO DE FALHAS 11.3. CRITÉRIOS DE SELEÇÃO D E CASOS DE TESTE 11.4. PROCESSOS DE GERAÇÃO DE CASOS DE TESTE 11.5. CRITÉRIOS DE COBERTURA 11.6. COBERTURA DE REPETIÇÕES 11.7. TESTE CAIXA FECHADA 12. QUALIDADE DE SOFTWARE 12.1. OBJETIVO 12.2. QUALIDADE POR CONSTRUÇÃO 12.3. QUALIDADE X CONTROLE DE QUALIDADE 12.4. TIPOS DE QUALIDADE 12.4.1. QUALI DADE R EQ UERI DA 12.4.2. QUALI DADE ASS EGUR ADA 12.4.3. QUALI DADE OBS ERV ADA 12.4.4. QUALI DADE EFETIV A Programação Modular - ECSRV Página 4 1. INTRODUÇÃO 1.1. PRINCÍPIOS DE MODULARIDADE 1.1.1. MÓDULO Modularidade, por definição lógica significa: um único conceito. Já a definição física, diz que modularidade é uma unidade de compilação independente. 1.1.2. ELEMENTOS DE PROGRAMA 1.1.3. INTERFACE É um mecanismo de troca de dados, comandos, estados entre elementos e estados entre elementos de programa (mesmo nível). Existem cinco tipos de interface: arquivo, banco de dados, parâmetros, variáveis globais e interface fornecida por terceiros. Exemplos de sintaxe (regra): Condição da representação de valores (int, float) Como organizar determinado tipo (CPF) Programação Modular - ECSRV Página 5 Exemplos de semântica (significado): tpDadosAluno * ObterAluno (int idAluno) a. Interface esperada pelo servidor a.1. idAluno a.2. Acesso à base de dados b. Interface esperada pelo cliente b.1. Ponteiro para os dados do aluno solicitado c. Interface esperada por ambos c.1. tpDadosAluno Observações: Ocorre a troca de papéis quando o servidor precisa de uma informação que só o cliente possui. (call-back) Protocolo de uso: forma de utilizar os itens que compõem uma interface para que esta possa ser operada corretamente A validação de dados na interface é feita na documentação ou na especificação (embutido no código). Exemplo: raiz quadrada (dados maiores ou iguais a zero) Programação Modular - ECSRV Página 6 1.1.4. PROCESSO DE DESENVOLVIMENTO O arquivo .c é o módulo de desenvolvimento, enquanto o arquivo .h é o módulo de definição. Observação: A .lib ocupa memória enquanto a .dll é só em tempo de execução. Reuso de código sem precisar fazer alguma alteração 1.1.5. TIPO ABSTRATO DE DADOS 1.1.6. ARTEFATO E CONSTRUTO Artefato é qualquer coisa criada no processo de desenvolvimento que tenha entidade própria. Exemplo: módulo, documentação, ata. Construto (build) é o resultado mesmo que parcial do que está sendo desenvolvido. Programação Modular - ECSRV Página 7 1.1.7. ENCAPSULAMENTO Encapsulamento garante a proteção, facilita a manutenção e permite várias implementações para um mesmo módulo sem precisar recompilar tudo. Existem dois tipos de encapsulamento: a. ENCAPSULAMENTO DE DOCUMENTAÇÃO a.1. Documentação interna é voltada para o programador do módulo servidor a.2. Documentação externa é voltada para o programador do módulo cliente a.3. Documentação de uso é voltada para o usuário b. ENCAPSULAMENTO DE CÓDIGO b.1. Variável local é encapsulada no bloco de código b.2. Private é encapsulada no objeto b.3. Static é encapsulada na classe b.4. Global static é encapsulada no módulo b.5. Global não é encapsulada b.6. Public não é encapsulada b.7. Protected é encapsulada na estrutura de herança 1.1.8. ACOPLAMENTO É uma propriedade relacionada com os itens de uma interface, além de ser um conector. A qualidade de acoplamento possui três critérios: Número de conectores (criação de uma struct para produzir o número de conectores) Complexidade de conectores Tamanho do construtor (quanto menos, melhor) Programação Modular - ECSRV Página 8 1.1.9. COESÃO É uma propriedade relacionada com o grau de interdependência dos elementos pertencentes ao módulo. Tipos de coesão: a.1. INCIDENTAL É a mais fraca, quando escolhemos sem distinção os elementos de um módulo, não havendo interdependência entre eles. a.2. LÓGICA Não é tão ruim quando à incidental. Exemplo: guardar tudo que cadastra em um mesmo módulo. a.3. TEMPORAL Execução de funções, ao mesmo tempo, com significados diferentes. a.4. PROCEDURAL Execução de funções, uma seguida da outra, com significados diferentes. a.5. FUNCIONAL Funções com funcionalidades parecidas com tipos de dados diferentes. a.6. ABSTRAÇÃO DE DADOS A melhor. Agrupa assuntos semelhantes e abstrai/ ignora o que não é necessário, considerando somente o que é importante. Programação Modular - ECSRV Página 9 1.1.10. EXERCÍCIOS 1. Crie uma arquitetura de um programa modularizado que utiliza uma estrutura de lista para implementaruma matriz genérica utilizada na criação de um tabuleiro de xadrez. Programação Modular - ECSRV Página 10 2. Explique e dê exemplo de uma interface fornecida por terceiros. Uma interface fornecida por terceiros é utilizada quando um módulo não consegue se comunicar com outro diretamente, ou seja, um tipo não conhece o outro. Para não inserir o tipo em cada módulo, insere em um terceiro módulo e inclui nos dois módulos. Exemplo: struct Peca não “conversa” com struct Casa Programação Modular - ECSRV Página 11 2. MODELAGEM DE ESTRUTURAS 2.1. NOTAÇÃO Um artefato tem que representar todos os exemplos possíveis. Notação parecida com a UML. 2.2. VETOR 2.3. LISTA DUPLAMENTE ENCADEADA COM NÓ CABEÇA Programação Modular - ECSRV Página 12 2.4. ÁRVORE BINÁRIA COM NÓ CABEÇA Programação Modular - ECSRV Página 13 3. ASSERTIVAS ESTRUTURAIS 3.1. LISTA Se o ponteiro prox de um nó corrente é diferente de nulo, então o ponteiro ant do prox aponta para o nó corrente. 3.2. GRAFO Cria-se uma lista para cada vértice que mostre as relações entre os vértices (arestas). Programação Modular - ECSRV Página 14 4. ESPECIFICAÇÃO DE REQUISITOS 4.1. DEFINIÇÃO Requisitos são funções, condições, atributos e propriedades a serem satisfeitos por um artefato. Observação: Falha na especificação x falha na implementação (especificação serve como um contrato). Na especificação deve ser dito o que deve ser feito e não como deve ser feito. 4.2. NÍVEIS DE ESPECIFICAÇÃO Existem dois níveis de especificação: o mais baixo e mais alto. Observação: A análise de domínio (descobrir as regras que existem no sistema) consiste em identificar o que é genérico para todos os sistemas que atuam no domínio de aplicação e o que é específico para o sistema que atua nesse domínio 4.3. REQUISITOS São reduzidos em: documento próprio e no comentário do código (requisito de implementação). Observação: Requisito é feito em linguagem natural 4.4. HIPÓTESES Já está garantida antes de começar a especificação. São consideradas válidas antes de se desenvolver o artefato. Exemplo: validação de CPF. Se o seu sistema recebe o CPF através de outro sistema, será preciso validar o CPF? Não necessariamente, o sistema que enviou o CPF já pode ter feito a validação. Programação Modular - ECSRV Página 15 4.5. RESTRIÇÕES São condições que restringem a liberdade de escolha de alternativa na construção de um artefato. Exemplo: ler trilhões de dados. Há a opção de filtros, porém nem sempre é eficaz. Contar dia por dia em um script e registrar o resultado das informações, não teria como recuperar tudo de uma vez. 4.6. TIPOS DE REQUISITO Os requisitos podem ser funcionais (funcionalidades do sistema), não funcionais (características que não estão atreladas às funcionalidades do sistema) e inversos (o que o sistema não deve fazer). 4.7. CRITÉRIOS DE QUALIDADE DE ESPECIFICAÇÃO Devem reduzir o escopo de efeito. Para tal, deve-se verificar: Não ambiguidade Nivelamento (não misturar requisitos de alto nível com requisitos de baixo nível) Exatidão (conformidade com o mundo real) 4.8. EXEMPLO DE REQUISITOS Exemplo1: o tempo de resposta deve ser menor que dez segundos. (bem formulado) Exemplo2: o sistema deve mostrar ao usuário os seus dados mais importantes. (mal formulado) Exemplo3: o programa deve fornecer resultados confiáveis. (mal formulado) Exemplo4: a interface deve ser adequada ao usuário. (mal formulado) Programação Modular - ECSRV Página 16 5. ASSERTIVAS 5.1. DEFINIÇÃO São relações envolvendo os dados e os estados manipulados que devem estar satisfeitas em determinados pontos do algoritmo. São utilizadas em algoritmos corretos por construção. Instrumentação é a capacidade de o código conseguir reconhecer por ele mesmo se está correto. 5.2. EXEMPLO DE ASSERTIVAS ∀ elemento: elemento ∈ à lista, se elementopAnt != NULL => elementopAntprox == elemento. ∀ registros i e j: i e j ∈ arquivo A se i antecede j => i . chave < j . chave Um aluno “a” está matriculado se e somente se: “a” ∈ AlunosRegistrados e ∃d: d ∈ à DisciplinasOferecidas => matriculados (a,d). 5.3. QUALIDADE DE ARTEFATOS Para garantir a qualidade, o programa depende de requisitos satisfeitos, hipóteses satisfeitas e assertivas satisfeitas. Programação Modular - ECSRV Página 17 5.4. ASSERTIVAS DE ENTRADA E SAÍDA Delimitam fragmentos de código. Exemplo: retirar nó corrente de uma lista duplamente encadeada. A.E.1 valem as assertivas estruturais da lista duplamente encadeada. A.E.2 ponteiro corrente aponta para o nó a ser retirado. A.S.1 valem as assertivas estruturais da lista duplamente encadeada. A.S.2 nó foi excluído A.S.3 ponteiro corrente foi excluído 5.5. ASSERTIVAS ESTRUTURAIS São condições satisfeitas pelos elementos de uma estrutura de dados em repouso. Cada função de acesso deve garantir a satisfação dessas assertivas antes e depois da execução. Programação Modular - ECSRV Página 18 6. IMPLEMENTAÇÕES DA PROGRAMAÇÃO 6.1. ESPAÇO DE DADOS São áreas de armazenamento alocadas em um meio que possuem um tamanho e podem estar associadas a um ou mais nomes de referência. Exemplo1: A[j], onde j é o j – ésimo elemento do vetor A. Exemplo2: *pAux é o espaço de dados apontado por pAux. Exemplo3: pAux é o espaço de dados que contém um espaço de memória. pElemTabSimb * ObterElemSimb (char * pSimbolo) (* ObterElemTabSimb (char * pSimbolo) . Id é o subcampo da estrutura apontada pelo retorno da função ObterElemTabSimb (char * pSimbolo)Id 6.2. TIPOS DE DADOS Determina a organização, codificação, tamanho em byte e conjunto de valores permitidos. Observação: Um espaço de dados precisa estar associado a um tipo para que possa ser interpretado pelo programa desenvolvido em linguagem tipada São tipos computacionais: int, float, char*, entre outros. Tipos básicos de usuários: enum, union, typedef e struct. Tipo abstrato de dados: Programação Modular - ECSRV Página 19 6.3. DECLARAÇÃO E DEFINIÇÃO DE ELEMENTOS 6.3.1. DECLARAR O nome existe. Corresponde ao valor de um determinado tipo. Exemplo: struct tpNo. 6.3.2. DEFINIR Aloca espaço de dados. Amarra um espaço ao nome. Exemplo: malloc. Observação: Tipo computacional declara e define. Exemplo: int x. 6.3.3. IMPLEMENTAÇÃO EM C E C++ Exemplo de declaração e definições de nomes globais exportados pelo módulo servidor: int A; int F (int B); Exemplo de declarações externas contidas no módulo cliente e que somente declaram o nome sem associá-lo a um espaço de dados: extern int A; extern F (int B); Exemplo de declarações e definições de nomes globais encapsulados no módulo: static int A; static F (int B); Programação Modular - ECSRV Página 20 6.4. PRÉ – PROCESSAMENTO Programação Modular - ECSRV Página 21 Programação Modular - ECSRV Página 22 6.5. EXERCÍCIOS 1. Como é possível definir uma variável sem declará-la?Alocando espaço na memória de tamanho igual ao tipo da estrutura. 2. Necessito criar uma interface compartilhada por terceiros apenas por alguns módulos. Apresente um exemplo mostrando como isso é possível se a mesma está definida em um módulo de definição incluído em todos os módulos de implementação do projeto. Observação: A interface fornecida por terceiros só pode ser vista pelo módulo que a utiliza. Programação Modular - ECSRV Página 23 7. ESTRUTURA DE FUNÇÕES 7.1. PARADIGMA É a forma de programar. Um paradigma pode ser orientado a objetos (programação modular) ou procedural. 7.2. EXEMPLO DE ESTRUTURA DE FUNÇÕES 7.3. EXEMPLO DE ESTRUTURA DE CHAMADAS Programação Modular - ECSRV Página 24 F1 origem F2 F8 F3 F5 F9 chamada recursiva indireta F10 função morta F8 F3 F5 F6 F7 dependência circular entre métodos F4 F4 chamada recursiva direta 7.4. FUNÇÃO É uma porção autocontida de código. Possui nome, assinatura composta de retorno, nome, parâmetro e corpo da função (um ou mais). 7.5. ESPECIFICAÇÃO DE FUNÇÃO Possui um objetivo (pode ser igual ao nome), acoplamento (itens da interface), condições de acoplamento (assertivas de entrada e saída), interface com o usuário (em um input pedindo ao usuário), requisitos (todos os requisitos que são elicitados têm que ser armazenados em alguma documentação ou parte do código), hipóteses (consideradas válidas antes do desenvolvimento da função) e restrições (limitações do desenvolvimento da função). 7.6. HOUSE KEEPING É o módulo responsável por liberar recursos alocados a programas, componentes ou funções ao terminar a execução. 7.7. REPETIÇÕES Programação Modular - ECSRV Página 25 7.8. RECURSÃO 7.9. ESTADO É a fotografia da situação atual. Conjunto de dados ou condições. Descritor de estados é variável que define o estado. Programação Modular - ECSRV Página 26 7.10. ESQUEMA DE ALGORITMO É a parte mais genérica mais a parte específica do código. Permite encapsular a estrutura de dados utilizada. É correto, independente da estrutura, e incompleto, logo precisa ser instanciado. Observação: Hotspot são funções de interface (parte específica) Se o esquema está correto e o hotspot possui assertivas válidas, então o programa está correto 7.11. VALORES DO TIPO FUNÇÃO Programação Modular - ECSRV Página 27 7.12. PARÂMETROS DO TIPO PONTEIRO PARA FUNÇÃO Programação Modular - ECSRV Página 28 8. DECOMPOSIÇÃO SUCESSIVA 8.1. CONCEITOS Tem por objetivo vencer a barreira de complexidade (top down) e reduzir a ocorrência de erros em virtude da melhor compreensão de problemas elementares. 8.2. NÍVEIS DE ABSTRAÇÃO Cada patamar da estrutura de decomposição. Abstrair é concentrar em determinado grau de detalhe a partir de um dado ponto de vista ignorando detalhes mais finos e outros pontos de vista. Exemplos de ponto de vista: Estático (estrutura de dados e modelos de dados) Funcional (serviços disponibilizados para o usuário) Dinâmico (comportamento do tempo) 8.3. PROJETO ESTRUTURADO Gera a estrutura de decomposição. A ideia é ter uma estrutura boa, ou seja, resolver o problema com eficiência, fácil manutenção e fácil implementação. Programação Modular - ECSRV Página 29 8.4. PASSOS DE PROJETO Direção de projeto pode ser top down (começa um problema de cima para baixo), bottom up (integração de um problema menor em um problema maior). 8.5. ELEMENTOS DE UM PASSO DE PROJETO Programação Modular - ECSRV Página 30 8.6. COMPONENTE DA ESTRUTURA 8.6.1. DEFINIÇÃO A intenção do componente deve estar atrelada. 8.6.2. ADEQUAÇÃO Conjunto solução satisfaz usuário. 8.6.3. NECESSIDADE Cada elemento do conjunto contribui para a solução. 8.6.4. SUFICIÊNCIA Todos os componentes juntos satisfazem a solução. 8.6.5. ORTOGONALIDADE Cada elemento resolve uma parte de abstração em que não é resolvida por qualquer outro elemento. Programação Modular - ECSRV Página 31 9. ARGUMENTAÇÃO DE CORRETUDE 9.1. ARGUMENTAÇÃO DE SEQUENCIA Programação Modular - ECSRV Página 32 Programação Modular - ECSRV Página 33 9.2. ARGUMENTAÇÃO DE SELEÇÃO Programação Modular - ECSRV Página 34 Programação Modular - ECSRV Página 35 9.3. ARGUMENTAÇÃO DE REPETIÇÃO Programação Modular - ECSRV Página 36 Programação Modular - ECSRV Página 37 Programação Modular - ECSRV Página 38 Programação Modular - ECSRV Página 39 10. INSTRUMENTAÇÃO 10.1. PROBLEMAS AO EXECUTAR TESTES Esforço de diagnose (origem do problema, grande e muito sujeito a erros). Contribuem para esta dificuldade: Dificuldade de estabelecer com exatidão a causa a partir dos problemas observados Tempo decorrido entre o instante da falha e o observado Falhas intermitentes Causa externa ao código (ponteiros loucos, comportamento inesperado do hardware) 10.2. O QUE É INSTRUMENTAÇÃO São fragmentos inseridos no módulo (código e dados). Não contribui para o objetivo do programa, monitora o programa ao longo de sua execução, consome recursos de execução e custa para ser desenvolvido. 10.3. OBJETIVO Detectar falhas de funcionamento do programa o mais cedo possível de forma automática e impedir que falhas se propaguem. 10.4. CONCEITOS 10.4.1. PROGRAMA ROBUSTO Interpreta a execução quando observa o problema e mantém o dano confinado. 10.4.2. PROGRAMA TOLERANTE A FALHAS É robusto e possui mecanismos de recuperação. Programação Modular - ECSRV Página 40 10.4.3. DETERIORAÇÃO CONTROLADA Habilidade de continuar operando corretamente, embora com alguma perda de funcionalidade. 10.5. INCLUSÃO DE INSTRUMENTOS NO CÓDIGO (C++) 10.6. ASSERTIVAS EXECUTÁVEIS São assertivas que foram criadas (texto) e transformadas em código. Possui as seguintes vantagens: Informam o problema quase imediatamente após ter sido gerado (controle de integridade feito pela máquina) Reduz o risco de falha humana Precisam ser corretas e completas 10.7. DETURPADORES Os deturpadores acompanham interativamente o programa em execução, incluem pontos de interrupção (breakpoints), executa o programa comando a comando, apresenta conteúdo de usuários e é utilizado somente como último recurso. Programação Modular - ECSRV Página 41 10.8. TRACES São sequencias de impressões ou exibições de conteúdo de variáveis produzidas no decorrer da execução do programa. Exemplo: printf. Sempre que a execução passa por um ponto ocorre trace de instrução. Sempre que o valor de uma variável muda, ocorre trace de evolução. 10.9. CONTROLADORES DE COBERTURA Obtém estatísticas relativas à execução do programa através da contagem do númerode vezes que a execução passou por um determinado ponto do programa. Os contadores estarão armazenados num vetor global estático manipulado por funções de acesso. 10.10. DETURPADOR DE ESTRUTURAS DE DADOS Instrumento projetado para adulterar estruturas de dados sob controle do testador. Permite enxergar até o ponto onde se deseja corromper, selecionando o item e as formas de corrupção. Programação Modular - ECSRV Página 42 10.11. VALIDADOR DE ESTRUTURAS DE DADOS Verifica se as estruturas de dados satisfazem suas assertivas estruturais. Observação: É possível determinar o tipo de elemento referenciado por valor? (Inserção de campo “tipo” para identificar o tipo do espaço de dado) É possível caminhar por todos os campos adjacentes da estrutura? (Ponteiro para nó pai) É possível determinar a ocupação do espaço? (Totalizador do número de nós na cabeça da árvore, número de bytes no nó da árvore e número de bytes no espaço apontado) É possível determinar todos os elementos ativos e se todos os elementos alocados são ativos? (Utilizando uma lista de espaço alocado) Programação Modular - ECSRV Página 43 11. TESTES 11.1. CENÁRIOS DE TESTE A partir dos cenários de teste é possível defini-los, definir a massa de teste, o ambiente de teste, a organização necessária, as ferramentas que serão usadas e as pessoas que estarão envolvidas. “Testes podem ser utilizados para detectar a presença de erros e nunca ausência” (teste orientado à destruição). Observação (teste x objetivo): Maior rigor (serviço com elevado valor e risco grande) Menor rigor (serviço de baixo valor e risco pequeno) 11.2. REGISTRO DE FALHAS Data Identificação do teste Sintoma Data da correção Artefatos alterados Classe da falta (conjunto de problema = erro de especificação, de máquina) Correção realizada 11.3. CRIÉTERIOS DE SELEÇÃO DE CASOS DE TESTE O critério é válido quando apresenta falha se existe falha no artefato, completo quando cobre todas as condições estabelecidas por um padrão de completeza, confiável quando não mascara erros, eficaz quanto mais falhas encontrarem e eficiente quanto menos recurso gastar. O teste caixa fechada, caixa preta, é aquele que abre (caso de teste gerado a partir da especificação). O teste caixa aberta, caixa branca, é o caso de teste gerado a partir da estrutura do código. Já o teste de estrutura de dados é aquele que é gerado a partir do modelo das estruturas de dados utilizadas. Programação Modular - ECSRV Página 44 11.4. PROCESSOS DE GERAÇÃO DE CASOS DE TESTE Quando o caso de teste é abstrato devemos descobrir o que tem que ser testado. Exemplo: deve ser retirado um nó da lista. Quando o caso de teste é semântico devemos descobrir como deve ser testado. Exemplo: para retirar um nó intermediário da lista é preciso criar a lista, inserir três nós, ir ao nó intermediário e exclui-lo. Quando o caso de teste é valorado devemos colocar o valor no que deve ser testado. Exemplo: excluir nó intermediário. Recomendações básicas para criação de caso de teste, com o objetivo de maximizar a probabilidade de resolver o problema: Ao testar a <= b tem que testar a < b, a = b e a > b. Valores de entrada de tamanhos variáveis Valores pertencentes a conjuntos criados dinamicamente (conjunto vazio, conjunto com um elemento, conjunto com três ou mais elementos) Programação Modular - ECSRV Página 45 11.5. CRITÉRIOS DE COBERTURA Programação Modular - ECSRV Página 46 Programação Modular - ECSRV Página 47 11.6. COBERTURA DE REPETIÇÕES Arrasto é o menor número de iterações necessárias para que todas as variáveis ou estados inicializados antes e modificados durante a repetição passem a depender exclusivamente de valores computados. Programação Modular - ECSRV Página 48 11.7. TESTE CAIXA FECHADA Serve para definir elementos, casos de teste (neste caso, criados a partir das especificações) e scripts de teste. Quando cada caso exercita pelo menos uma condição não tratada em qualquer outro teste do conjunto é chamado de partição em classes de equivalência. Programação Modular - ECSRV Página 49 12. QUALIDADE DE SOFTWARE 12.1. OBJETIVO Diferenciar elevada qualidade (produto) da qualidade satisfatória (usuário). 12.2. QUALIDADE POR CONSTRUÇÃO Atingida em virtude do trabalho disciplinado, utilizando padrões, ferramentas adequadas, qualidade requerida, identificando falhas o mais cedo possível. 12.3. QUALIDADE X CONTROLE DE QUALIDADE Qualidade não pode ser assegurada através do controle (errado ou incompleto) de qualidade. Controle é o indicador do grau de qualidade que artefato possui e não do que deveria possuir. 12.4. TIPOS DE QUALIDADE 12.4.1. QUALIDADE REQUERIDA É especificada para o artefato de acordo com o que o cliente solicitou. 12.4.2. QUALIDADE ASSEGURADA Técnicas de ferramentas, métodos e processos conseguem assegurar por construção. 12.4.3. QUALIDADE OBSERVADA Observada através do controle de qualidade. 12.4.4. QUALIDADE EFETIVA É a que o artefato efetivamente possui.
Compartilhar