Resumo Engenharia de Software III
Tipos de Modelos de Desenvolvimento de Software
Modelo em Cascata:
● Explicação: Um modelo sequencial onde as fases do desenvolvimento são
realizadas em uma ordem linear, cada fase dependendo da conclusão da anterior.
● Melhor Ocasião: Projetos onde os requisitos são bem compreendidos e estáveis
desde o início.
Modelo Incremental:
● Explicação: Desenvolvimento é dividido em incrementos, com cada incremento
adicionando funcionalidade ao sistema.
● Melhor Ocasião: Projetos onde é importante obter feedback rapidamente e onde os
requisitos podem mudar ou evoluir ao longo do tempo.
Modelo Espiral:
● Explicação: Este modelo combina abordagens sequenciais e iterativas, organizando
o desenvolvimento em ciclos repetitivos focados em identificar e mitigar riscos,
enquanto adiciona funcionalidades ao sistema em cada iteração.
● Melhor Ocasião: Projetos de alto risco, complexos e de longa duração, onde é
crucial identificar e resolver riscos no início.
Metodologias Ágeis (como Scrum e Kanban):
● Explicação: Abordagens iterativas e colaborativas que valorizam a entrega contínua
de software funcional e a adaptação a mudanças.
● Melhor Ocasião: Projetos onde os requisitos são voláteis, a colaboração é
essencial e a priorização da entrega rápida de valor é fundamental.
No Silver Bullet
"No Silver Bullet" é um ensaio escrito por Fred Brooks em 1986. Brooks argumenta que não
há uma solução única ou técnica revolucionária que possa proporcionar uma melhoria
dramática na produtividade, confiabilidade ou simplicidade do desenvolvimento de software.
Ele defende que as dificuldades essenciais do software (complexidade, conformidade,
mutabilidade e invisibilidade) são intrínsecas e não podem ser eliminadas por nenhuma
tecnologia ou metodologia única.
Tipos de Dimensionamento
Os tipos de dimensionamento referem-se a diferentes abordagens para medir e estimar o
tamanho e a complexidade de um sistema ou projeto de software.
a) Baseadas em Problemas: Avalia a complexidade e quantidade dos problemas que o
software deve resolver.
b) Processos: Analisa os processos de negócio que o software deve suportar ou
automatizar.
c) Linhas de Código (LOC): Mede o tamanho do software contando o número de linhas de
código fonte.
d) Casos de Uso: Estima o tamanho do sistema baseado na quantidade e complexidade
dos casos de uso descritos.
e) Pontos por Função (FP): Calcula o tamanho funcional do software avaliando e
ponderando suas funcionalidades entregues ao usuário.
Estilos Arquiteturais
Estilos arquiteturais são padrões ou abordagens gerais para organizar sistemas de
software.
a) Camadas Lógicas (Layered): Divide o sistema em camadas que se comunicam de forma
hierárquica, cada uma responsável por um aspecto diferente da funcionalidade.
b) Cliente Servidor: Separa o sistema em clientes que solicitam serviços e servidores que
fornecem esses serviços.
c) Broker: Usa intermediários (brokers) para coordenar a comunicação entre componentes
distribuídos.
d) MVC (Model-View-Controller): Separa a lógica de negócio (Model), a interface do usuário
(View) e a entrada do usuário (Controller) para facilitar a gestão e evolução do software.
e) Pipes e Filtros:Organiza o processamento de dados em uma cadeia de componentes
(filtros) conectados por canais de comunicação (pipes).
f) Ponto a Ponto (Peer to Peer): Todos os nós do sistema são iguais e compartilham
recursos diretamente uns com os outros sem um servidor central.
g) SOA (Service-Oriented Architecture): Estrutura o sistema em serviços independentes que
se comunicam através de interfaces bem definidas.
h) Microserviços: Divide a aplicação em pequenos serviços independentes que podem ser
desenvolvidos, implantados e escalados separadamente.
i) Repositório: Componentes de software interagem através de um repositório central que
armazena dados compartilhados.
j) Camadas Físicas (Tiers): Divide a aplicação em camadas físicas distintas, como
apresentação, lógica de negócio e armazenamento de dados, geralmente em servidores
diferentes.
k) Message Bus: Usa um barramento de mensagens para permitir que diferentes partes do
sistema se comuniquem de maneira assíncrona e desacoplada.
Estudo de Viabilidade (Conceito)
O estudo de viabilidade avalia a viabilidade técnica, econômica, operacional e temporal de
um projeto. Ele ajuda a determinar se os recursos disponíveis e o tempo são suficientes
para atingir os objetivos do projeto e se ele é economicamente viável.
Projeto de Banco de Dados (Modelo Conceitual, Lógico e Físico)
Modelo Conceitual: O modelo conceitual é um diagrama que representa os dados de forma
abstrata, mostrando entidades (como clientes, pedidos), atributos (como nome, data) e os
relacionamentos entre essas entidades (como clientes fazem pedidos). Não envolve
detalhes técnicos de como os dados serão armazenados.
Modelo Lógico: O modelo lógico é uma versão detalhada do modelo conceitual que
organiza os dados em tabelas e define colunas, chaves primárias e chaves estrangeiras,
preparando o banco de dados para implementação em um Sistema de Gerenciamento de
Banco de Dados (SGBD).
Modelo Físico: O modelo físico descreve como o banco de dados será realmente
armazenado no SGBD, incluindo detalhes como índices, partições, tipos de armazenamento
e especificações de hardware para garantir desempenho e segurança
Diagrama de Sequência
Um diagrama de sequência mostra como objetos interagem em uma sequência de eventos
ao longo do tempo.
Exemplo: Imagine um sistema de reserva de ingressos online. Um diagrama de sequência
poderia mostrar como um cliente seleciona um filme, escolhe o horário da sessão e finaliza
a reserva, interagindo com o sistema de forma sequencial.
Exemplo com alguns diagramas usados no projeto:
Diagrama de Atividades
Um diagrama de atividades representa o fluxo de trabalho ou atividades em um sistema.
Exemplo: Considere um processo de compra em um site de comércio eletrônico. Um
diagrama de atividades pode ilustrar os passos que um cliente realiza, como adicionar itens
ao carrinho, inserir detalhes de entrega, revisar o pedido e fazer o pagamento.
Exemplo com alguns diagramas usados no projeto:
Diagrama de Máquina de Estados
Um diagrama de máquina de estados descreve os diferentes estados de um objeto e como
ele muda entre esses estados em resposta a eventos.
Exemplo: Pense em um sistema de controle de acesso onde um usuário pode estar nos
estados "autenticado" ou "não autenticado". O diagrama de máquina de estados mostraria
como o sistema transita entre esses estados quando o usuário faz login ou sai do sistema.
Exemplos:
Diagrama de Implantação
Um diagrama de implantação mostra a configuração física de um sistema, detalhando como
os componentes de software são distribuídos em hardware físico ou virtual.
Exemplo: Imagine um sistema de gerenciamento de biblioteca. O diagrama de implantação
pode representar que o servidor de banco de dados está hospedado em um servidor
dedicado na sede da biblioteca, enquanto o servidor de aplicação está em uma máquina
virtual na nuvem. Ele também pode mostrar que os clientes acessam o sistema através de
uma aplicação web implantada em um servidor web localizado em outro servidor físico na
sede da biblioteca. Essa representação física da arquitetura do sistema ajuda a entender
como os diferentes componentes estão distribuídos e como eles se comunicam entre si.
Exemplos:
Padrões de Projeto
a) Padrões Criacionais
Padrões que definem maneiras de criar objetos flexíveis e reutilizáveis durante a
instanciação de classes.
Padrão de Fábrica Abstrata: Define uma interface para criar famílias de objetos
relacionados sem especificar suas classes concretas.
Padrão Construtor: Separa a construção de um objeto complexo de sua representação,
permitindo a mesma construção processar diferentes representações.
Padrão de Métodos de Fábrica: Define uma interface para criar um objeto, mas permite
que as subclasses escolham a classe concreta a ser instanciada.
Padrão de Protótipo: Cria novos objetos clonando um protótipo existente.
Padrão Único: Garante que uma classe tenha apenas uma instância e fornece um ponto de
acesso global a ela.
b) Padrões Estruturais
Padrões que lidam com a composição de classes e objetos para formar estruturas mais
complexas.
Padrão Adaptador: Permite que objetos com interfaces incompatíveis trabalhem juntos.
Padrão de Agregação: Permite que objetos formem relacionamentos do tipo "todo-parte",
onde um objeto é composto de um ou mais objetos.
Padrão Ponte: Separa uma abstração de sua implementação, permitindo que ambas
variem independentemente.
Padrão de Composição: Permite que objetos sejam agrupados em estruturas de árvore
para representar hierarquias parte-todo.
Padrão Container: Define uma maneira de acessar e manipular elementos de uma coleção
de objetos.
Padrão Proxy:Fornece um substituto ou placeholder para outro objeto para controlar o
acesso a ele.
c) Padrões Comportamentais
Padrões que definem como objetos interagem e como as responsabilidades são distribuídas
entre eles.
Padrão TopLevelNavigation: Define a navegação de alto nível em um aplicativo ou site.
Padrão CardStack: Gerencia o empilhamento de cartões ou visualizações em um aplicativo
móvel.
Padrão Fill-in-the-Blanks: Guia o usuário para preencher lacunas em um formulário ou
questionário.
Padrão SortableTable: Permite que o usuário classifique as linhas de uma tabela de
acordo com diferentes critérios.
Padrão BreadCrumbs: Fornece uma navegação sequencial para indicar a localização atual
do usuário em um site.
Padrão EditInPlace: Permite que o usuário edite diretamente o conteúdo em sua
visualização original, sem abrir um formulário separado.
Padrão SimpleSearch: Oferece uma interface simples para os usuários realizarem
pesquisas básicas em um conjunto de dados.
Padrão Wizard: Orienta o usuário por meio de uma série de etapas sequenciais para
realizar uma tarefa complexa, como preencher um formulário longo.
Padrão ShoppingCart: Gerencia a seleção e o processamento de itens em um carrinho de
compras online.
d) Padrões de Projeto de Componentes
Padrões específicos para o design e interação de componentes de software, promovendo a
reutilização e modularidade.
AdvancedSearch: Oferece funcionalidades avançadas para busca em um sistema.
HelpWizard: Guia o usuário por meio de um conjunto de informações de ajuda ou tutoriais.
SearchArea: Define a área ou componente onde o usuário pode realizar pesquisas.
SearchTips: Fornece dicas ou sugestões úteis para melhorar a experiência de pesquisa do
usuário.
SearchResults: Apresenta os resultados da pesquisa ao usuário de forma clara e
organizada.
SearchBox: Fornece uma caixa de entrada para que o usuário insira os termos de
pesquisa.