Introdução
A complexidade é uma questão central no desenvolvimento de software. Elevando o nível de abstração
ajuda a reduzir a complexidades, assim como a quantidade de documentação necessária ao projeto. Isso
pode ser obtido através de reutilização, o uso de ferramentas de modelagem de alto nível, e
estabilizando a arquitetura inicialmente.
|
|
Benefícios
|
-
Produtividade
-
Complexidade Reduzida.
|
Padrão
|
-
Reutilizar ativos existentes
-
Utilizar ferramentas de nível mais alto e linguagens para reduzir a quantidade de
documentação produzida.
-
Focalizar primeiro a arquitetura
-
Arquitetar para obter controles da elasticidade, qualidade, instabilidade e
complexidade.
|
Antipadrões
|
-
Ir diretamente dos requisitos vagos, de alto nível, para o código customizado.
-
Como algumas abstrações são utilizadas, surgem muitas discussões sobre o
nível de código versus um nível mais conceitual, o que faz perder muitas
oportunidades de reutilização, entre outras coisas.
-
Os requisitos informalmente capturados e outras informações requerem a
revisão de decisões e especificações repetidàs vezes.
-
Ênfase limitada sobre a arquitetura resulta em atraso de retrabalho no
projeto.
|
|
Discussão
Um dos principais problemas que enfrentamos no desenvolvimento de software e a complexidade. Sabemos que reduzir a
complexidade apresenta maior impacto sobre a produtividade. Trabalhar em um nível maior de abstração reduz a
complexidade e facilita a comunicação.
Uma abordagem efetiva de se reduzir a complexidade é reutilizar ativos existentes, como componentes
reutilizáveis, sistemas legados, processo de negócios existente, padrões ou software de código aberto. Dois grandes
exemplos de reutilização que apresentaram o maior impacto sobre a indústria de software na última década são:
-
A reutilização de middleware, como bancos de dados, servidores de Web e portais, e mais recentemente,
-
Software de código aberto que oferecem muitos componentes menores e maiores que podem ser alavancados.
Avançando, os serviços da Web provavelmente terão maior impacto na reutilização, já que oferecem formas simples de
reutilizar as principais parte da funcionalidade através de plataformas diferentes e com acoplamentos soltos entre o
consumidor e o provedor de um serviço. Isso significa que podemos elevar mais facilmente diferentes combinações de
serviços para atender às necessidades comerciais. A reutilização também é facilitada pelos padrões abertos, como RAS,
UDDI, SOAP, WSDL, XML e UML.
Reutilizar ativos existentes através de arquiteturas orientados para o serviço.
Um dos problemas com a reutilização é que dois componentes precisam conhecer a experiência um do outro no momento
do desenvolvimento. As arquiteturas orientados para o serviço minimizam esse problemas fornecendo o que chamam de
consumidor solto: O consumidor de um serviço pode encontrar dinamicamente um provedor de um serviço. Podemos,
portanto, agrupar os componentes existentes ou sistemas legados dentro dos serviços, permitindo que outros componentes
ou aplicativos obtenham acesso dinamicamente a suas capacidades através de uma interface baseada em padrões,
independentemente da plataforma e da tecnologia de implementação.
Outra abordagem para reduzir a complexidade e melhorar a comunicação consiste emalavancar ferramentas, estruturas e
linguagens de níveis mais altos:
-
Linguagens padrões com a UML (Unified Modeling Language) e linguagem de aplicativos rápidos como
EGL fornecem a capacidade de expressar constructos de alto nível, como processo de negócios e componentes de
serviços, que facilitam a colaboração entre constructos de alto nível enquanto ocultam detalhes
desnecessários.
-
Design e ferramentas de construção podem automatizar o movimento de constructos de alto nível para
código de trabalho:
-
-
Eles fornecem assistentes que automatizam o design, a construção e testam tarefas gerando códigos
e ativando o uso de trechos de código.
-
Eles convertem integração e teste em tarefas de desenvolvimento perfeitas através de desenvolvimento
integrado, construção e ambientes de teste.
-
Ferramentas de gerenciamento de portifólio, que ativam o gerenciamento financeiro e outros
aspectos de vários projetos como uma entidade versus um conjunto separado de entidades.
Em resumo, ferramentas de alto nível capturam graficamente informações de modelagem, o que é uma forma atrativa de
resumir e apresentar essa informação. Os benefícios da modelagem visual são explorados mais detalhadamente em Material de Suporte: Modelagem Visual.
Uma terceira abordagem para gerenciar a complexidade é focalizar na arquitetura, tanto para definir um negócio
como para desenvolver um sistema ou aplicativo. Em desenvolvimento de software, procuramos obter uma arquitetura
projetada, implementada e testada antes do projeto. Isso significa que, antes de um projeto, focalizamos os seguintes
objetivos:
-
Definir blocos de construção de alto nível e os componentes mais importantes, suas responsabilidades e suas
interfaces.
-
Projetar e implementar os mecanismos arquiteturais, ou seja, soluções prontas para problemas comuns, como por
exemplo, como lidar com a persistência ou a coleção de lixo.
Obtendo a arquitetura logo de início, fornecemos uma estrutura de esqueleto para nosso sistema, tornando-o mais fácil
de gerenciar a complexidade na medida em que incluímos mais pessoas, componentes, capacidades e código ao projeto.
Também identificamos quais ativos reutilizáveis podemos alavancar e quais aspectos do sistemas precisam ser
customizados.
|