domingo, 24 de fevereiro de 2013

VANTAGENS E DESVANTAGENS DO RUP

Vantagens:

    * Processo robusto e bem definido com a geração de artefatos importantes: O RUP tem como base os princípios de engenharia de software reflectidos na sua abordagem de desenvolvimento iterativa, incremental, orientada a requisitos e baseada em arquitectura

    * Os maiores riscos são atacados primeiro, diminuindo as chances de fracasso do projeto


   * O RUP captura muitas das melhores práticas do desenvolvimento de software moderno, de forma que possam ser adaptadas para uma grande variedade de projetos e de organizações:
  • Desenvolver iterativamente;
  • Gerenciar Requisitos;
  • Usa arquitetura baseada em componentes;
  • Modelagem Visual;
  • Qualidade de software; 
  • Produtividade no desenvolvimento, operação e manutenção de software; 
  • Controle sobre desenvolvimento dentro de custos, prazos e níveis de qualidade desejados; 
  • Estimativa de prazos e custos com maior precisão. 


Desvantagens:

    * Complexo e trabalhoso para projetos de pequeno porte: Sério investimento em ferramenta de suporte

    * Limitações:  Nas áreas de manutenção, gestão de métricas, gestão de pessoal, gestão de reutilização e testes. Exige experiência da equipe.


    Obs: Apesar dos benefícios, deve-se ter a consciência que os benefícios não virão de maneira imediata. É necessário adquirir treinamento adequado, adaptação da metodologia no contexto ao qual ela será utilizada, apoio especializado para as equipes de desenvolvimento e tempo para a absorção da metodologia.
   



terça-feira, 19 de fevereiro de 2013

Estudo de Caso PMBOK - Regional (Manaus - AM)

Aqui Apresentamos um Estudo de Caso na Utilização do Pmbok na Cidade de Manaus
O material foi colhido na internet e não é de autoria dos autores do Blog no entanto no documento apresentado é citado os autores do Estudo. 


Estudo de Caso - PMBOK na cidade de Manaus

segunda-feira, 18 de fevereiro de 2013

RUP - Princípios e Melhores Práticas - Uso de Arquitetura Baseada em Componentes


Um Breve Resumo e Contextualização:

A arquitetura baseada em componentes cria um sistema que pode ser facilmente extensível, promovendo a reutilização de software e um entendimento intuitivo. Um componente normalmente se relaciona com um objeto na programação orientada a objetos.
O RUP oferece uma forma sistemática para construir este tipo de sistema, focando-se em produzir uma arquitetura executável nas fases iniciais do projeto, ou seja, antes de comprometer recursos em larga escala.
Estes componentes são normalmente incluidos em infraestruturas existentes como o CORBA e o COM (Modelo de Componentes de Objectos).



O que significa Arquitetura de Componentes?

Os componentes são grupos de código coesos, na forma de código fonte ou executável, com interfaces bem definidas e comportamentos que fornecem forte encapsulamento do conteúdo e são, portanto, substituíveis. As arquiteturas baseadas em componentes tendem a reduzir o tamanho efetivo e a complexidade da solução e, portanto, são mais robustas e flexíveis.


Ênfase Arquitetural

Os casos de uso orientam o Rational Unified Process (RUP) durante todo o ciclo de vida, mas as atividades de design são centralizadas na noção da arquitetura do sistema e em sistemas intensivos de software, arquitetura de software. O foco principal das iterações iniciais do processo, principalmente na fase de elaboração, é produzir e validar uma arquitetura de software, que no ciclo de desenvolvimento inicial toma a forma de um protótipo arquitetural executável que gradualmente evolui até se tornar o sistema final em iterações posteriores.

Arquitetura executável significa uma implementação parcial do sistema criada para demonstrar funções e propriedades selecionadas do sistema, em particular aquelas que satisfazem requisitos não funcionais. A finalidade da arquitetura executável é diminuir os riscos relacionados a desempenho, taxa de transferência, capacidade, confiabilidade, etc. para que a capacidade funcional completa do sistema possa ser adicionada na fase de construção de uma forma segura, sem perigo de quebra.

Para obter uma introdução da noção de arquitetura, mais especificamente arquitetura de software, e para uma explicação de por que essa noção é crucial, consulte Conceitos: Arquitetura de Software.

O RUP fornece uma maneira metódica e sistemática de projetar, desenvolver e validar uma arquitetura. Oferecemos templates para descrição da arquitetura, com os conceitos de várias visões arquiteturais, e para a captura de estilo de arquitetura, regras de design e restrições. A disciplina Análise e Design contém atividades específicas orientadas para identificar restrições arquiteturais e para elementos significativos na arquitetura, além de diretrizes sobre como fazer escolhas arquiteturais. O processo de gerenciamento mostra como o planejamento das iterações iniciais considera o design de uma arquitetura e a resolução dos principais riscos técnicos. Consulte a disciplina Gerenciamento de Projeto e todas as atividades associadas ao Papel: Arquiteto de Software para obter mais informações.

A arquitetura é importante por vários motivos:

    Ela permite obter e manter controle intelectual do projeto, gerenciar sua complexidade e manter a integridade do sistema.

    Um sistema complexo é mais que a soma de suas partes; mais que uma sucessão de pequenas decisões táticas independentes. Ele precisa ter uma estrutura unificadora e coerente para organizar essas partes de modo sistemático e fornecer regras precisas sobre como pode ser aumentado, sem que sua complexidade cresça além da compreensão humana.

    A arquitetura determina os meios para se obter melhor comunicação e entendimento em todo o projeto, estabelecendo um conjunto de referências e um vocabulário comuns, com os quais se discutem questões de design.

    É uma base efetiva para reutilização em larga escala.

    Ao articular claramente os principais componentes e as interfaces críticas entre eles, uma arquitetura permite que você raciocine sobre a reutilização, tanto a reutilização interna que é a identificação das partes comuns, como a reutilização externa que é a incorporação de componentes desenvolvidos internamente e adquiridos prontos para serem usados. No entanto, também permite a reutilização em uma escala maior: a reutilização da própria arquitetura, no contexto de uma linha de produtos que aborda funcionalidades diferentes em um domínio comum.

    Ela fornece uma base para gerenciamento de projeto.

    Planejamento e formação de equipe estão organizados de acordo com os principais componentes. Decisões estruturais fundamentais são tomadas por uma equipe pequena e coesa de arquitetura. Elas não são distribuídas. O desenvolvimento é dividido entre um conjunto de equipes pequenas, cada uma sendo responsável por uma ou várias partes do sistema.


Desenvolvimento Baseado em Componentes


Um componente de software pode ser definido como um pedaço não-trivial de software, um módulo, um pacote ou um subsistema, sendo que todos desempenham uma função clara, possuem uma fronteira clara e podem ser integrados em uma arquitetura bem definida. É a realização física de uma abstração do design.

Os componentes vêm de diferentes lugares:

    Ao definir uma arquitetura muito modular, você identifica, isola, projeta, desenvolve e testa componentes bem formados. Esses componentes podem ser testados individualmente e gradualmente integrados para formar o sistema inteiro.
    Além disso, alguns desses componentes podem ser desenvolvidos para serem reutilizáveis, especialmente os componentes que fornecem soluções comuns para uma ampla variedade de problemas comuns. Esses componentes reutilizáveis, que podem ser maiores que apenas conjuntos de utilitários ou de bibliotecas de classes, formam a base de reutilização dentro de uma organização, aumentando a produtividade e a qualidade geral do software.
    Mais recentemente, o advento das infra-estruturas de componentes comercialmente bem-sucedidas, como CORBA, a Internet, ActiveX e JavaBeans, desencadeou uma indústria completa de componentes desenvolvidos internamente e adquiridos prontos para serem usados para vários domínios, permitindo comprar e integrar componentes, em vez de desenvolvê-los internamente.

O primeiro ponto na lista precedente explora os conceitos antigos de modularidade e de encapsulamento, tornando ainda mais importantes os conceitos subjacentes à tecnologia orientada a objetos. Os últimos dois pontos da lista alteram o desenvolvimento de software da programação: de uma linha por vez para a composição do software através da montagem de componentes.

O RUP suporta desenvolvimento baseado em componentes destas maneiras:

    A abordagem iterativa permite identificar componentes progressivamente e decidir quais desenvolver, quais reutilizar e quais comprar.
    O foco na arquitetura de software permite montar a estrutura, os componentes e como eles se integram, incluindo os padrões e os mecanismos fundamentais através dos quais eles interagem.
    Conceitos como pacotes, subsistemas e camadas são utilizados durante a disciplina Análise e Design para organizar componentes e especificar interfaces.
    Os testes são primeiramente organizados em componentes e, em seguida, em conjuntos maiores de componentes integrados.

Referências para a Elaboração do Post:

http://www.guiafar.com.br/portal/index.php/pt/artigos/tecnologia-da-informacao/108-rup

http://www.wthreex.com/rup/manuals/intro/im_bp3.htm

http://pt.wikipedia.org/wiki/IBM_Rational_Unified_Process#Uso_de_arquitetura_baseada_em_componentes_2
 

Melhores Práticas: Desenvolvimento Iterativo


O que é o Desenvolvimento Iterativo

Um projeto que usa o desenvolvimento iterativo tem um ciclo de vida que consiste em várias iterações. Uma iteração incorpora um conjunto quase sequencial de atividades em modelagem de negócios, requisitos, análise e design, implementação, teste e implantação, em várias proporções, dependendo do local em que ela está localizada no ciclo de desenvolvimento. 
As iterações nas fases de iniciação e de elaboração se concentram nas atividades de gerenciamento, requisitos e design. As iterações na fase de construção se concentram no design, na implementação e no teste. E as iterações na fase de transição e concentram no teste e na implantação. A programação de uma iteração deve ser considerada fixa e o escopo do conteúdo da iteração gerenciado ativamente para atender a essa programação.

Por que Desenvolver Iterativamente

Todos os projetos têm um conjunto de riscos envolvidos. Quanto mais cedo você puder verificar que evitou um risco no ciclo de vida, mais precisos serão seus planos. Muitos riscos nem são descobertos até que você tente integrar o sistema. É impossível prever todos eles, por mais experiente que seja a equipe de desenvolvimento.


Em um ciclo de vida iterativo, a seleção do incremento a ser desenvolvido em uma iteração é feita com base em uma lista dos principais riscos. Como a iteração produz um executável testado, você poderá verificar os riscos diminuiram.

Vantagens de uma Abordagem Iterativa 

Geralmente, uma abordagem iterativa é superior a uma abordagem linear ou em cascata, por vários motivos.
  • Os riscos são reduzidos mais cedo, pois os elementos são integrados progressivamente.
  • As táticas e os requisitos variáveis são acomodados. 
  • A melhoria e o refinamento do produto são facilitados, resultando em um produto mais robusto.
  • As organizações podem aprender a partir dessa abordagem e melhorar seus processos. 
  • A capacidade de reutilização aumenta.
Uma vez, um cliente disse: "Com a abordagem em cascata, tudo parece bem até quase no final do projeto; às vezes, até a metade da integração. Aí, tudo desmorona. Com a abordagem iterativa, é muito difícil esconder a verdade durante muito tempo."
Geralmente, os gerentes de projeto resistem à abordagem iterativa, pois consideram-na um infindável refinamento. No Rational Unified Process (RUP), a abordagem interativa é muito controlada; o número, a duração e o objetivo das iterações são planejados. As tarefas e as responsabilidades dos participantes são definidas. São capturadas medidas de progresso objetivas. Ocorre algum retrabalho de uma iteração para a outra, mas isso também é cuidadosamente controlado.

Diminuição de riscos

Uma abordagem iterativa permite que você diminua os riscos mais cedo, pois muitos deles são descobertos somente durante a integração. Durante a iteração inicial, você verifica todas as  disciplinas, considerando muitos aspectos do projeto: ferramentas, softwares desenvolvidos internamente e adquiridos prontos para serem usados, habilidades das pessoas e assim por diante. Pode ser que riscos aparentes demonstrem que não são riscos, e riscos novos e inesperados aparecerão.

Acomodação de mudanças
A abordagem iterativa permite que você considere os requisitos variáveis, já que eles normalmente serão alterados durante o processo.
Forçar os usuários a aceitarem o sistema como o imaginaram originalmente está errado. Eles mudam de idéia porque o contexto está sendo alterado; eles aprendem mais sobre o ambiente e a tecnologia e enxergam uma demonstração intermediária do produto durante o seu desenvolvimento.

Busca de melhor qualidade 

Uma abordagem iterativa resulta em uma arquitetura mais robusta, pois os erros são corrigidos após várias iterações. As falhas iniciais são detectadas conforme o produto amadurece, durante as iterações iniciais. Os gargalos de desempenho são descobertos e podem ser reduzidos, em vez de aparecerem na véspera da liberação.

Aumento de reutilização 

O uso de uma abordagem iterativa facilita o aproveitamento dos produtos desenvolvidos internamente e adquiridos prontos para serem usados. Você terá várias iterações para selecioná-los, integrá-los e confirmar que eles são adequados à arquitetura.

Referência Ao Post: