Princípios e Conceitos de Desenho de Software Projeto de Sistemas de Software Prof. Rodrigo Ribeiro
Revisando... Processo Unificado PRAXIS Processo unificado: Dividido em fases e fluxos Fases Concepção, elaboração, construção e transição Enfoque na visão gerencial do processo. Fluxos Requisitos, análise, desenho, implementação e testes Enfoque na visão técnica
Revisando...
Revisando... Em análise de sistemas... Foco Coleta de requisitos Casos de uso ERSw Modelagem inicial do problema Desenho Diagrama de classes inicial MASw Define uma estrutura implementável do software Porquê? Um bom desenho implica em qualidade
Desenho de Software Basicamente o desenho pode ser divido em: Arquitetural Implementavel Desenho e qualidade O desenho deve... Levar em conta todos os requisitos Explícitos e implícitos. Deve ser compreensível para implementação E para manutenção, suporte, evolução... Mas como saber se o desenho está adequado?
Desenho de Software Existem alguns principios: Desenho nao deve ser bitolado. Considerar alternativas com base nos requisitos. Relacao com o modelo de analise Rastreabilidade Desenho nao deve reinventar a roda Uso de padroes de projeto e de arquitetura Desenho deve diminuir o semantical gap Na medida do possivel...
Desenho de Software Mais principios... O desenho deve ser uniforme e integravel Parece que uma so pessoa implementou? Regras de estilo Interfaces consistentes entre componentes Desenho nao e codificacao... Qualidade deve ser avaliada... durante o processo de elaboracao do desenho. Aplicacao destes principios leva a... Qualidade externa. Qualidade interna.
Desenho de Software Para obter qualidade interna, voce deve... Entender alguns conceitos de Desenho! Principais conceitos de desenho Abstracao Refinamento Modularidade Arquitetura Hierarquia de controle Particionamento estrutural Estruturas de dados Encapsulamento
Abstracao Uso gradual de modelos para uma solucao Modelos de nivel elevado com poucos detalhes Casos de uso Ate modelos proximos da solucao Diagramas UML Tipos de abstracao Abstracao procedimental Abstracao de dados Abstracao de controle
Refinamento Estrategia de desenho top down Detalhamento gradual de uma funcionalidade Ex. operacao de saque em cx. Eletronico Relacao com a abstracao Refinamento e abstracao sao complementares Abstracao: Elaborar desenho sem pensar nos detalhes Refinamento: revela detalhes gradualmente
Modularidade Decomposicao de um programa em modulos Objetivo: facilitar a compreensao e gerenciamento Para entender considere: C(x): complexidade do problema x E(x): esforco, em tempo, para o problema x. Sejam p1 e p2 dois problemas E evidente que se C(p1) > C(p2)... Entao E(p1) > E(p2). Intuitivamente obvio, nao? : )
Continuando... Mas e se p1 e p2 forem partes de p3? Isto e: p3 = p1 + p2 A operacao de + indica que p3 e formado por p1 e p2. O que podemos dizer sobre C(p3)? C(p3) = C(p1 + p2). Mas... C(p1 + p2) = C(p1) + C(p2) ou C(p1 + p2) > C(p1) + C(p2)?
Resolver problemas isolados e... Mais facil que resolve los e combinar! Portanto: C(p1 + p2) > C(p1) + C(p2). O que nos faz concluir que... E(p1 + p2) > E(p1) + E(p2). Conclusao: Dividir para conquistar e bom, mas possui um custo para integrar!
Modularidade Modulos de tamanho pequenho Muitos modulos => ruim Modulos de maior tamanho Codigo dificil de compreender e manter Como resolver isso? Escolhendo um bom metodo de desenho! Mas como escolher? Existem alguns criterios para ajudar...
Avaliando metodologias de desenho Criterios: Decomponibilidade modular Reducao da complexidade do problema como um todo Componibilidade modular Facilidade em compor modulos ou componentes Inteligibilidade modular O modulo pode ser entendido de maneira autonoma? Continuidade modular Modificacao de um modulo nao se alastra. Protecao modular Excecoes ou efeitos colaterais sao locais.
E possivel realizar o desenho modular... E o codigo ser monolitico? Sim! Sistemas de tempo real ou embutidos Procedimentos causam overhead Velocidade e memoria Isso pode ser inaceitavel para algumas aplicacoes.
Arquitetura Estrutura global do software e aos modos pelos quais essa estrutura fornece integridade conceitual para um sistema. Retirado de Software Architecture Shaw e Garlan Simplificando Estrutura hierarquica de modulos e componentes que compoe o programa.
Arquitetura de software e Desenho Desenho arquitetural Objetivo: Construir uma arquitetura para o software Desenho implementavel Objetivo: A partir da arquitetura, detalhar o modelo do sofware para que este seja implementado.
Hierarquia de Controle Mostra a dependencia entre modulos. Relacionamento Um modulo A controla um modulo B se O fluxo de execucao do programa alcanca B a partir de A. Como representar a hierarquia de controle? Grafos In degree : quantos modulos controlam? Out degree: quantos modulos controlados?
Particionamento Estrutural Basicamente de dois tipos Particionamento Horizontal Tres particoes entrada, processamento, saida Beneficios Facilidade de teste Facilidade de manutencao Menos propagacao de efeitos colaterais Facilidade de extensao Pontos negativos Ocasiona mais dados sejam passados entre procedimentos. Pode causar overhead
Particionamento Estrutural Particionamento Vertical Modulos superiores Tomadores de decisao Folhas realizam processamento real Beneficios Modulos que realizam trabalho podem ser modificados Nao ha efeitos colaterais
Estruturas de dados Tema da disciplina de AEDS. Encapsulamento Tema da disciplina POO. Tudo isso ajuda a ter desenho modular... Mas como saber se um desenho e bom? Conceito de independencia funcional.
Independencia Funcional Um bom desenho faz com que modulos... Possuam uma finalidade unica e bem definida Aversao a interacao excessiva com o resto do software. Isso leva a duas medidas qualitativas... Coesao Acoplamento
Coesao Um modulo e coeso se: Realiza uma unica tarefa dentro de um software. Acoplamento Medida entre a interconexao entre modulos. Qual a relacao entre estas duas medidas?