Anda di halaman 1dari 25

Princpios e Conceitos de Software(v2)

Compreender os fundamentos de projeto de software

Agenda
Conceitos de Projetos. Projeto Modular Efetivo. Heursticas de Projeto para Modularidade efetiva.

Conceitos de Projetos
Abstrao Refinamento Modularidade Arquitetura de Software Hierarquia de Controle Particionamento estrutural Estrutura de dados Procedimento de Software Ocultamento da informao

Abstrao
Quando consideramos uma soluo modular para qualquer problema, muitos nveis de abstrao pode ser levantados. No nvel mais alto de abstrao, uma soluo enunciada em termos amplos usando a linguagem de ambiente do problema. Nos nveis mais baixos de abstrao, uma orientao procedimental adotada.

Refinamento
Um programa desenvolvimento pelo refinamento sucessivo de nveis de detalhes procedimentais. Refinamento na verdade um processo de elaborao. Comeamos com um enunciado da funo(ou descrio da informao) que definida em alto nvel de abstrao. Isto , o enunciado descreve a funo ou informao conceitualmente, mas no fornece qualquer informao sobre o funcionamento interno da funo ou a estrutura interna da informao. O refinamento leva o projetista a elaborar o enunciado original, fornecendo mais e mais detalhes medida que cada refinamento(elaborao) ocorre.

Abstrao e Refinamento
Abstrao e refinamento so conceitos complementares. A abstrao permite ao projetista especificar procedimentos e dados e ainda suprimir detalhes de baixo nvel. O refinamento ajuda o projetista a revelar detalhes de baixo nvel proporo que o projeto progride. Ambos os conceitos ajudam o projetista a criar um modelo completo de projeto medida que o projeto evolui.

Modularidade
Isto o software dividido em partes nomeados separadamente e endereaveis, frequentemento chamados de mdulos, que so integrados para satisfazer os requisitos do problema.

Hierarquia de Controle
Hierarquia de controle, tambm chamada estrutura de programa, representa a organizao dos componentes de programa(mdulos) e implica uma hierarquia de controle.

Particionamento estrutural
Se o estilo arquitetural de um sistema hierrquico, as estruturas do programas podem ser particionadas tanto horizontalmente quanto verticalmente. Particionamento horizontal, define ramos separados da hierarquia modular para cada funo principal do programa Particionamento vertical, sugere que o controle(tomada de deciso) e o trabalho sejam distribudos de maneira descendente na estrutura do programa. Os mdulos de nvel alto devem desempenhar funes de controle e fazer pouco trabalho de processamento real. Mdulos que se situam abaixo na estrutura devem ser os trabalhadores, realizando todas as tarefas de entrada, de computao e de sada.

Estrutura de Dados
Estrutura de Dados uma representao do relacionamento lgico entre elementos de dados individuais. Como a estrutura da informao vai invariavelmente afetar o projeto procedimental final, a estrutura de dados to importante quanto a estrutura do programa para a representao da arquitetura de software. A estrutura de dados determina a organizao, os mtodos de acesso, o grau de associatividade e as alternativas de processamento da informao.

Procedimento de Software
O procedimento de software focaliza os detalhes de processamento de cada mdulo individualmente. O procedimento deve fornecer uma especificao precisa do processamento, incluindo sequencia de eventos, pontos exatos de deciso, operaes repetitivas e at organizao e estrutura de dados.

Ocultamento da Informao
Ocultamento implica que efetiva modularidade pode ser conseguida pela definio de um conjunto de mdulos independentes que informam uns aos outros apenas o necessrio para realizar uma funo do software.

Abstrao X Ocultamento
Abstrao ajuda a definir as entidades procedimentais(ou informacionais) que constituem o software. Ocultamento define e impe restries de acesso, tanto a detalhes de processamento dentro de um mdulo quanto a qualquer estrutura de dados local usada pelo mdulo.

Projeto Modular Efetivo


Todos os conceitos fundamentais de projeto descrito anteriormente servem para induzir projetos modulares. Um projeto modular reduz a complexidade, facilita a modificao(um aspecto critico da manutenibilidade de software) e resulta em implementao mais fcil pelo incentivo ao desenvolvimento paralelo de diferentes partes de um sistema. Alguns conceitos usados em Projeto Modular. Independncia Funcional Coeso Acoplamento

Independncia funcional
O conceito de independncia funcional uma decorrncia direta da modularidade dos conceitos de abstrao e ocultamento funcional A independncia funcional conseguida pelo desenvolvimento de mdulos com funo de finalidade nica e uma averso a interao excessiva com outros mdulos.

Independncia funcional
Dito de outro modo, queremos projetar software de maneira que cada mdulo cuide de uma subfuno especfica dos requisitos e tenha uma interface simples quando visto de outras partes da estrutura do programa. Mdulos independentes so mais fceis de manter(e testar) porque os efeitos secundrios causados por modificao de projeto ou cdigo so limitados, a propagao de erros reduzida e os mdulos reusveis so possveis.

Independncia funcional
Para resumir, independncia funcional a chave para um bom projeto, e o projeto a chave da qualidade de software. Independncia medida usando dois critrios qualitativos: coeso e acoplamento.

Coeso
Um modulo coeso realiza uma nica tarefa dentro de um procedimento de software, requerendo pouca interao com procedimentos que esto sendo realizados em outras partes de um programa. Um mdulo coeso deveria (idealmente) fazer apenas uma coisa. Altamente coeso: Excelente. Baixa coeso: Problemas

Acoplamento
Acoplamento uma medida da interconexo entre mdulos numa estrutura de software. O acoplamento depende da complexidade da interface entre mdulos, do ponto em que feita entrada ou referncia a um mdulo e que dados passam atravs da interface. Em projeto de software, lutamos por acoplamento mais baixo possvel. Conectividade simples entre mdulos resulta em software bem mais fcil de entender e menos propenso a efeito de propagao que acontece quando erros que ocorrem em um lugar se propagam por todo o sistema.

Heursticas de Projeto para Modularidade efetiva


A estrutura do programa pode ser manipulada de acordo com o seguinte conjunto de heursticas: (Heurstica, popularmente falando, trata-se de um mtodo no comprovado cientificamente, ou seja, no tem confirmao matemtica. Portanto, uma deciso tomada por experincia na funo, intuio, bom senso ou outra forma que no seja confirmada por um mtodo matemtico, trata-se de confirmao heurstica)

Heursticas de Projeto para Modularidade efetiva


1. Avalie a primeira iterao da estrutura do programa para reduzir o acoplamento e melhorar a coeso: Uma vez desenvolvida a estrutura do programa, os mdulos podem ser explodidos ou implodidos com o objetivo de melhorar a independncia modular. Um mdulo explodido transforma-se em dois ou mais mdulos na estrutura final do programa. Um mdulo implodido o resultado da combinao do processamento implcito em dois ou mais mdulos.

Heursticas de Projeto para Modularidade efetiva


2. Avalie as interfaces do mdulo para reduzir a complexidade e redundncia e aperfeioar a consistncia: A complexidade de interface de um mdulo uma causa importante de erros de software. Interfaces devem ser projetadas para passar informao de modo simples e devem ser consistentes com a funo do mdulo.

Heursticas de Projeto para Modularidade efetiva


3. Defina mdulos cuja funo seja previsvel, mas evite mdulos que so excessivamente restritivos. Um mdulo que restringe o processamento a uma nica subfuno exibe alta coeso e visto favoravelmente por um projetista.

Heursticas de Projeto para Modularidade efetiva


4. Procure obter mdulos de entrada controlada evitando conexes patolgicas. Um software mais fcil de entender e consequentemente mais fcil de manter quando as interfaces de mdulos so restritas e controladas. Conexo patolgica refere-se a desvios ou referncias no meio de um mdulo.

Bibliografia
Pressman Capitulo 10.

Anda mungkin juga menyukai