Introdução: O objectivo da fase de Design no Ciclo de Vida do Desenvolvimento de Software é produzir uma solução para um problema dado no documento SRS(Software Requirement Specification). A saída da fase de desenho é Sofware Design Document (SDD).
Basicamente, o desenho é um processo iterativo em duas partes. A primeira parte é o Design Conceptual que diz ao cliente o que o sistema vai fazer. A segunda é o Desenho Técnico que permite aos construtores do sistema compreender o hardware e software reais necessários para resolver o problema do cliente.
Desenho conceptual do sistema:
- Escrito em linguagem simples ou seja, linguagem compreensível pelo cliente.
- Explicação detalhada sobre as características do sistema.
- Descreve a funcionalidade do sistema.
- Independentemente da implementação.
- Ligado com documento de requisitos.
Desenho técnico do sistema:
- Componente de hardware e desenho.
- Funcionalidade e hierarquia do componente de software.
- Arquitectura de software
- Arquitectura de rede
- Estrutura de dados e fluxo de dados.
- Componente I/O do sistema.
- Mostra interface.
>
>
>
>
>
>
Modularização: Modularização é o processo de dividir um sistema de software em vários módulos independentes onde cada módulo funciona independentemente. Há muitas vantagens da Modularização na engenharia de software. Algumas delas são dadas abaixo:
- Fácil de entender o sistema.
- Manutenção do sistema é fácil.
- Um módulo pode ser usado muitas vezes como suas necessidades. Não é necessário escrevê-lo repetidamente.
Acoplamento: Acoplamento é a medida do grau de interdependência entre os módulos. Um bom software terá baixo acoplamento.
Tipos de Acoplamento:
- Acoplamento de Dados: Se a dependência entre os módulos é baseada no fato de que eles se comunicam apenas passando dados, então os módulos são ditos como dados acoplados. No acoplamento de dados, os componentes são independentes entre si e se comunicam através dos dados. As comunicações entre os módulos não contêm dados de tramp. Exemplo de sistema de faturamento do cliente.
- Acoplamento de carimbo No acoplamento de carimbo, a estrutura de dados completa é passada de um módulo para outro módulo. Portanto, ela envolve dados de tramp. Pode ser necessário devido a fatores de eficiência – esta escolha foi feita pelo designer perspicaz e não por um programador preguiçoso.
- Acoplamento de controle: Se os módulos comunicam passando informação de controlo, então diz-se que estão acoplados ao controlo. Pode ser mau se os parâmetros indicarem um comportamento completamente diferente e bom se os parâmetros permitirem o factoring e a reutilização da funcionalidade. Exemplo – função de ordenação que toma a função de comparação como argumento.
- Acoplamento externo: No acoplamento externo, os módulos dependem de outros módulos, externos ao software que está sendo desenvolvido ou a um tipo particular de hardware. Ex- protocolo, arquivo externo, formato do dispositivo, etc.
- Acoplamento comum: Os módulos têm dados compartilhados, tais como estruturas de dados globais. As mudanças nos dados globais significam rastreamento de volta a todos os módulos que acessam esses dados para avaliar o efeito da mudança. Portanto, tem desvantagens como dificuldade em reutilizar módulos, capacidade reduzida para controlar os acessos aos dados e capacidade reduzida de manutenção.
- Acoplamento de conteúdo: Em um acoplamento de conteúdo, um módulo pode modificar os dados de outro módulo ou o fluxo de controle é passado de um módulo para o outro módulo. Esta é a pior forma de acoplamento e deve ser evitada.
Cohesion: A coesão é uma medida do grau em que os elementos do módulo estão funcionalmente relacionados. É o grau em que todos os elementos dirigidos para a realização de uma única tarefa estão contidos no componente. Basicamente, a coesão é a cola interna que mantém o módulo unido. Um bom desenho de software terá alta coesão.
Tipos de Coesão:
- Coesão Funcional: Cada elemento essencial para um único cálculo está contido no componente. Uma coesão funcional executa a tarefa e as funções. É uma situação ideal.
- Coesão Sequencial: Um elemento produz alguns dados que se tornam a entrada para outro elemento, ou seja, o fluxo de dados entre as partes. Ocorre naturalmente em linguagens de programação funcional.
- Coesão Comunicacional: Dois elementos operam com os mesmos dados de entrada ou contribuem para os mesmos dados de saída. Exemplo – atualização de registro na base de dados e envio para a impressora.
- Coesão de Procedimentos: Elementos de coesão procedimental asseguram a ordem de execução. As ações ainda estão fracamente conectadas e é pouco provável que sejam reutilizáveis. Ex- calcular a GPA do estudante, imprimir registro do estudante, calcular a GPA cumulativa, imprimir GPA cumulativa.
- Coesão Temporal: Os elementos estão relacionados pelo seu tempo envolvido. Um módulo conectado com a coesão temporal todas as tarefas devem ser executadas no mesmo intervalo de tempo. Esta coesão contém o código para inicializar todas as partes do sistema. Muitas atividades diferentes ocorrem, todas no init time.
- Coesão Lógica: Os elementos são relacionados logicamente e não funcionalmente. Ex- Um componente lê entradas a partir de fita, disco e rede. Todo o código para estas funções está no mesmo componente. As operações estão relacionadas, mas as funções são significativamente diferentes.
- Coesão Coincidental: Os elementos não estão relacionados(não relacionados). Os elementos não têm outra relação conceitual além da localização no código fonte. É acidental e a pior forma de coesão. Ex- imprima a próxima linha e inverta os caracteres de uma string em um único componente.
Leitor de presença! Não pare de aprender agora. Obtenha todos os conceitos importantes da Teoria CS para entrevistas SDE com o Curso de Teoria CS a um preço amigável para os alunos e fique pronto para a indústria.