domingo, 7 de julho de 2013

Conceitos de engenharia de software



Segundo Pressman, a engenharia de software possui três elementos fundamentais: métodos, ferramentas e procedimentos.
·         Métodos: descrevem os detalhes que definem como o software será construído. Envolvem as etapas de planejamento do projeto, análise de requisitos, projeto, codificação, teste e manutenção.
·         Ferramentas: são os recursos que dão suporte aos métodos. As ferramentas dão apoio automatizado aos métodos. Elas são chamadas de ferramentas CASE (Computer-Aided Software Engineering).
·         Procedimentos: interligam os métodos e as ferramentas. Definem a seqüência em que os métodos serão aplicados, os produtos que devem ser entregues (documentos, formulários, relatórios) e realizam o controle de mudanças.
Portanto, a engenharia de software é uma disciplina que integra métodos, ferramentas e procedimentos para o desenvolvimento de software de computadores.
Pressman define quatro paradigmas da engenharia de software:
1.       Ciclo de vida clássico (cascata): Engenharia de sistemas, Análise, Projeto, Codificação, Teste, Manutenção;
2.       Prototipação: protótipo descartável, protótipo evolutivo;
3.       Modelo Espiral: Planejamento, Análise de Riscos, Engenharia, Avaliação feita pelo cliente;
4.       Técnicas de quarta geração: A partir de uma especificação de alto nível do desenvolvedor, a ferramenta gera, automaticamente, o código-fonte, tendo como base a especificação do desenvolvedor.
Conceitos básicos
Termo
Definição
Software
Programas de computador e documentação associada (manuais, arquivos de configuração, documentação do sistema, etc.).
Engenharia de software
Disciplina de engenharia relacionada a todos os aspectos de produção de software.
Processo de software
Um conjunto de atividades cujo objetivo é o desenvolvimento ou a evolução de software.
Modelo de processo de software
Uma representação simplificada de um processo de software, apresentado sob perspectiva específica.
Modelo de ciclo de vida
É um encadeamento específico das fases (uma forma de organizar as fases) para a construção do sistema. As fases são: Levantamento de Requisitos, Análise de Requisitos, Projeto, Implementação, Testes, Implantação. Conforme Sommerville, as fases são: Definição de requisitos, Projeto de sistema e software, Implementação e teste de unidade, Integração e teste de sistema, Operação e manutenção.
Métodos de engenharia de software
Abordagens estruturadas para desenvolvimento do software que incluem modelos de sistema, notações, regras, recomendações de projeto e guias de processo.
CASE (Computer-Aided Software Engineering)
Sistemas de software que fornecem apoio automatizado para atividades de processo de software. Sistemas CASE são freqüentemente usados para apoio ao método.
Atributos de um bom software
O software deve fornecer a funcionalidade e o desempenho exigidos pelo usuário e deve ser fácil de manter, confiável e usável.

Frame Relay



Frame Relay é uma rede orientada a conexões sem controle de erros e nenhum controle de fluxo. Por se tratar de uma rede orientada a conexões, os pacotes são entregues em ordem (quando são entregues). Essas características tornam o Frame Relay semelhante a uma LAN de área externa. Sua principal aplicação é a interconexão de LANs instaladas em vários escritórios de uma empresa.
O Frame Relay se baseia em um conceito chamado circuito virtual, caminho bidirecional através da rede definido em software. Isso permite criar muitos caminhos virtuais por meio de uma única conexão física. Da camada 3 para cima, os circuitos virtuais são completamente transparentes de maneira que, do ponto de vista dos hosts, é como se realmente houvesse um circuito físico para cada conexão. O Frame Relay realiza essa tarefa utilizando Identificadores de Conexão de Enlace de Dados (DLCI – Data Link Connection Identifiers).
Cabeçalho Frame Relay
Campos:
·         A primeira parte do DLCI.
·         O bit de Comando/Resposta (CR – Command/Response) indica se esse é um comando ou uma resposta.
·         O Bit de Extensão (Ext. Bit – Extension Bit) permite um cabeçalho de três ou quatro bytes para expansão do espaço de endereços se requerido.
·         A segunda parte do DLCI.
·         O bit de Notificação Antecipada de Congestionamento Explícito (FENC – Forward Explicit Congestion Notification) indica ao dispositivo que está recebendo esse quadro a ocorrência de um congestionamento.
·         O bit de Notificação Retroativa de Congestionamento Explícito (BENC – Backward Explicit Congestion Notification) é fixado por um comutador na rede Frame Relay para fazer com que o dispositivo do receptor saiba que os quadros que o receptor está transmitindo estão causando congestionamento.
·         O bit Elegível para Descarte (DE – Discard Eligible) indica que esse quadro deveria ser descartado primeiro, no caso de um congestionamento.
·         O bit de Extensão (EA - Extesion) permite um cabeçalho de três ou quatro bytes.
Os circuitos virtuais são de dois tipos:
·         Circuito Virtual Permanente (PVC): é um circuito configurado manualmente.
·         Circuito Virtual Comutado (SVC): quando um nó tem dados a serem enviados, um SVC é criado para funcionar e depois os dados são transmitidos através dele. Após isso, depois de um período de inatividade, ele é desligado ou removido. Isso garante a flexibilidade da rede, pois os dispositivos podem ser movidos sem que os caminhos virtuais precisem ser reconfigurados manualmente.

Teste de software



Níveis de teste
O nível de teste define, de certa forma, a fase do processo de desenvolvimento do software na qual os testes são realizados.
Nível de Teste
Descrição
Testes de unidade (ou componentes)
Nesta fase são testadas as menores unidades de software desenvolvidas (por exemplo: métodos de uma classe).
Testes de integração
Nesta fase é testada a integração entre os componentes do sistema (por exemplo: classes, módulos, sub-sistemas, etc).
Testes de sistema
Nesta fase o sistema é testado como um todo com o objetivo de encontrar discordâncias entre o que foi implementado e o comportamento descrito nos requisitos.
Testes de aceitação (ou releases, ou funcional)
Nesta fase o sistema é testado como um todo com o objetivo de encontrar discordâncias entre o que foi implementado e o comportamento descrito nos requisitos, sob o ponto de vista das necessidades do usuário final.

Tipos de teste
Os tipos de teste normalmente são definidos em função das características ou dimensões da qualidade que serão avaliadas no software.
Tipos de teste
Descrição
Teste de Estresse
Avalia o desempenho do sistema com um volume de acesso/transações acima da média esperada e em condições extremas de uso.
Teste de Execução
Avalia se o sistema atende os requisitos de performance (proficiência) com o volume de acesso/transações dentro do esperado.
Teste de Contingência
Avalia se o sistema retorna a um status operacional após uma falha.
Teste de Operação
Avalia se o sistema (aplicação, pessoal, procedimentos e manuais) pode ser executado corretamente em ambiente de pré-produção.
Teste de Conformidade
Avalia se o sistema foi desenvolvido em consonância com os padrões e metodologia estabelecidos no projeto.
Teste de Segurança
Avalia se o sistema foi desenvolvido em consonância com os padrões de segurança da organização.
Teste de Regressão
Avalia por meio de re-teste se uma funcionalidade que estava funcionando ainda funciona após uma modificação no sistema.
Teste alfa
Realizado por um cliente nas instalações do desenvolvedor. Durante o teste, o desenvolvedor observa e registra erros e problemas de uso. Os testes alfa são conduzidos em um ambiente controlado.
Teste beta
Realizado em uma ou mais instalações do cliente pelo usuário final do software, em ambiente não controlado pelo desenvolvedor e sem a presença deste. O cliente registra os problemas e relata ao desenvolvedor para que as correções possam ser realizadas.
Teste de partições
Os dados de teste são agrupados em partições de equivalência ou domínios. Partições de equivalência são conjuntos de dados com características comuns (números inteiros positivos, números maiores que 10.000, números negativos, seleções de menu, etc.). Os casos de teste são projetados de modo que as entradas e as saídas se acomodem nessas partições. As partições podem ser usadas em testes de sistema e componentes.
Teste de interfaces
O teste de interfaces tenta descobrir defeitos nas interfaces dos componentes compostos.
Teste de caminho
Esse teste é mais usado durante o teste de componentes e objetiva garantir que cada caminho independente do programa seja executado pelo menos uma vez. Para auxiliar essa tarefa um fluxograma deve ser construído. O número de caminhos independentes é calculado pela complexidade ciclomática.

Técnicas de teste
Técnica de teste
Descrição
Caixa branca (ou estrutural)
Testa a estrutura interna do software, como funções ou métodos de um objeto, atributos de uma classe, etc.
Caixa preta (ou funcional)
Concentra-se na funcionalidade do software. Entradas são fornecidas e as saídas geradas são comparadas com as saídas previstas. Se houver divergência, o teste detectou um problema com o software.
Caixa cinza
Combinação dos testes de caixa branca e com os testes de caixa preta. Uma vantagem é que tanto a estrutura quanto a funcionalidade do software são analisadas de forma combinada, permitindo a detecção mais precisa das falhas de software.