A fase de análise de requisitos, no contexto do desenvolvimento
de um sistema, é aquela na qual são construídos modelos para
representar o sistema a ser construído.
Principais Diagramas
Modelos baseados em cenários
São os casos de usos e histórias de usuários, já
detalhados na Engenharia de Requisitos.
Modelos de Fluxo
A modelagem orientada a fluxos considera os dados e os processos que os
transformam entidades distintas. É a representação da análise estruturada, e
seu principal diagrama é o Diagrama de Fluxo de Dados, ou DFD.
Modelos de Comportamento
Os modelos comportamentais indicam como o software irá
responder a estímulos ou eventos externos. Os diagramas de
estado e de sequência representam este tipo de modelo.
Modelos de classe
A modelagem baseada em classes representa os objetos que o sistema irá
manipular, as operações (também denominada métodos ou serviços) que serão
aplicados aos objetos para efetuar a manipulação, alguns relacionamentos entre
os objetos e as colaborações que ocorrem entre as classes definidas.
Projeto de sistema e software
A atividade de projeto engloba o conjunto de princípios,
conceitos e práticas que conduzem ao desenvolvimento
de um sistema ou produto com alta qualidade.
Características de um Projeto
O projeto deve implementar todos os requisitos
O projeto deve ser um guia legível
O projeto deve dar uma visão completa do software
Elaboração de um Projeto
Abstração
À medida que o nível de abstração migra de um nível mais alto para um nível mais baixo, a solução deixa de ser
expressa na linguagem do domínio do problema para ser expressa em uma terminologia técnica.
Arquitetura
Uma meta do projeto de software é derivar um quadro da arquitetura de um sistema, que representará a
organização a partir da qual atividades mais detalhadas do projeto são conduzidas.
Padrões
Os padrões de projeto são soluções comprovadamente eficazes que podem ser aproveitados em projetos de
problemática recorrente.
Separação por interesses (por afinidades)
Esse conceito afirma que qualquer problema complexo pode ser tratado mais facilmente se decomposto em
trechos a ser resolvidos e ou otimizados independentemente.
Modularidade
O desafio do projeto é modularizar o problema da melhor forma possível,
minimizando custos.
Encapsulamento de informações
O princípio do encapsulamento diz que os módulos devem ser capazes de ocultar suas características uns
dos outros, disponibilizando apenas os itens que interessam aos outros módulos.
Independência funcional
A independência funcional é atingida desenvolvendo-se módulos com função única e que pouco interagem
com outros módulos. É medida qualitativamente pela coesão e pelo acoplamento.
Refinamento
O refinamento gradual é uma estratégia top-down. Um programa é desenvolvido refinando-se níveis
procedurais sucessivamente.
Refatoração
Técnica de reorganização que simplifica o projeto ou código, sem mudar sua função ou comportamento. Em
projetos de refabricação de software, deve-se examinar o projeto antigo, eliminar redundâncias, corrigir
algoritmos eficientes ou desnecessários.
O Projeto Produz:
Projeto de dados/classes
O projeto de dados/classes transforma os modelos de classes em realizações de classes de projeto e
nas estruturas de dados dos requisitos necessários para implementar o software.
Projeto de arquitetura
O projeto arquitetural define os relacionamentos entre os principais elementos estruturais do software, os
estilos arquiteturais e os padrões de projeto que podem ser usados para satisfazer os requisitos definidos para
o sistema e as restrições que o afetam.
Projeto de componentes
O projeto de componentes destrincha elementos estruturais da arquitetura, em uma descrição procedural dos
componentes de software.
Projeto de interface de usuário
Conjunto de desenhos detalhados que representa fluxos de informação que entram em saem do sistema, como
o sistema de comunica com sistemas externos e com as pessoas que o utilizam.
Implementação e teste de unidade
Reuso de Software
O reuso de software pode trazer vários benefícios, como ganho de tempo (o código já está escrito),
confiança, redução de risco (o código já foi utilizado com sucesso anteriormente), dentre outros fatores.
Na implementação, o sistema é codificado, ou seja, ocorre a tradução da
descrição computacional obtida na fase de projeto em código executável,
mediante o uso de uma ou mais linguagens de programação.
Teste de Unidade
O teste de unidade é o teste pontual, realizado pelo programador, que verifica que aquele componente ou
módulo que ele desenvolveu realmente faz o que deveria fazer, atendendo às especificações do projeto.
Integração e testes de sistema
Teste de software é uma atividade realizada para
descobrir erros que foram produzidos
inadvertidamente no momento em que o software
foi projetado e construído. Pode ser planejado
antecipadamente e conduzido sistematicamente.
Estratégias de Teste de Software
Teste de unidade
Se concentra em cada unidade: componente, classe ou módulo. Usa intensamente técnicas de teste
com caminhos distintos, com o objetivo de descobrir erros dentro do módulo testado.
Teste de integração
Técnica sistemática para construir a arquitetura do software ao mesmo tempo que conduz testes para descobrir erros
associados com as interfaces (comunicação entre os módulos, não confundir com interface com o usuário).
Teste de validação
A validação de software é
conseguida por meio de uma
série de testes que demonstram
conformidade com os requisitos.
Em software para ser usado por muitos clientes:
Teste Alfa
É conduzido na instalação do desenvolvedor por um grupo representativo
de usuários finais. Nele, o desenvolvedor monitora os usuários,
registrando os erros e os problemas de uso.
Teste Beta
É conduzido nas instalações dos usuários finais. Via de regra, o
desenvolvedor não está presente, e os erros e problemas
encontrados são reportados pelos usuários.
Teste de sistema
Teste de recuperação
Força o sistema a falhar de várias formas e verifica se a
recuperação é executada corretamente;
Teste de segurança
Verifica se os mecanismos de proteção incorporados ao sistema
protegem contra acesso indevido;
Teste de esforço
Coloca o programa em condições anormais. “Até onde
podemos forçar o sistema até que ele falhe?”
Teste de desempenho
Testa o desempenho, em tempo de execução, do software em um contexto de
sistema integrado. Pode ser feito em conjunto com testes de esforço;
Teste de disponibilização
Executa o software em cada ambiente no qual ele deve operar, como em vários
sistemas operacionais, vários navegadores web, ou várias plataformas.
Técnicas de Teste de Software
Atributos Desejáveis em um Teste:
Alta probabilidade de encontrar erros
Não ser redundante
O melhor de uma categoria
Nem muito simples, nem muito complexo.
Técnicas de Teste
Caixa Branca
Também chamada de teste estrutural ou orientado à lógica, a técnica de caixa-branca avalia
o comportamento interno do componente de software. Essa técnica trabalha diretamente
sobre o código fonte do componente de software para avaliar aspectos tais como: teste de
condição, teste de fluxo de dados, teste de caminho básico, teste de ciclos, teste de
caminhos lógicos, códigos nunca executados, teste de estrutura de controle.
Caixa Preta
Também chamada de teste funcional, teste comportamental, orientado a dado ou orientado a
entrada e saída, a técnica de caixa-preta avalia o comportamento externo do componente de
software, sem se considerar o comportamento interno do mesmo. Dados de entrada são
fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado
previamente conhecido.
Operação e manutenção
Na implantação, o sistema é empacotado, distribuído e instalado no ambiente
do usuário. Os manuais do sistema são escritos, os arquivos são carregados,
os dados são importados para o sistema, e os usuários são treinados para
utilizar o sistema corretamente. Dependendo da situação, pode ocorrer
também a migração de sistemas de do software e de dados preexistentes.