quarta-feira, 8 de outubro de 2008

Métodos Ágeis

SCRUM
Scrum é um processo de desenvolvimento iterativo e incremental que pode ser aplicado a qualquer produto ou no gerenciamento de qualquer atividade complexa. Ken Schwaber e Mike Beedle desenvolveram a metodologia na década de 90 baseando-se em sua própria experiência no desenvolvimento de sistemas e processos.

Neste primeiro artigo será feita uma introdução ao processo e suas principais características. Nos artigos seguintes serão abordados aspectos mais específicos do processo em si.

Por quê Scrum é diferente?

A proposta do Scrum é radicalmente diferente. O Scrum contempla um visão empírica baseada na teoria de controle de processos.
Processo Definidos e Processos Empíricos.

Existem dois tipos de processos: definidos e empíricos. Processos definidos são aqueles que determinam o que deve ser feito, quando e como. Para um mesmo conjunto de variáveis de entrada, pode-se esperar o mesmo resultado sempre. Um exemplo bem conhecido de processo definido é o RUP da IBM (Rational). O RUP é um processo de desenvolvimento de software que estabelece quais as atividades necessárias para que o produto, ou software, seja construído de forma repetitível. Quem já trabalhou com o RUP sabe que a utilização de um processo definido não garante o sucesso do projeto. Os processos empíricos devem ser utilizados sempre que os processos definidos não forem adequados devido a complexidade do projeto. Ou seja, sempre que não se conheçam todas as variáveis de entrada para que possa estabelecer um processo repetitível (com a mesma saída sempre).

O Scrum, como um bom processo empírico, parte do princípio que nem todas as características do produto são conhecidas na análise e que provavelmente os requisitos mudarão com o passar do tempo. No Scrum existem duas atividades principais: inspeção e adaptação. Como o processo não é definido, o gerente[1] de projeto tem que inspecionar a execução diariamente, o que requer transparência, e fazer as adaptações necessárias com o passar do tempo.

A exemplo do XP[2], Scrum é como aprender a dirigir um carro: você não traça um destino inicialmente e chega em linha reta até o final. Aprender a dirigir está muito mais relacionado com pequenas correções de rota até a chegada final.
Desenvolvimento é uma atividade extremamente complexa que não se adapta a um processo definido. A única alternativa viável é a utilização de uma processo empírico baseado em inspeção e adaptação.

Características:

Entre as principais características do Scrum podemos citar:

Scrum é um processo ágil para gerenciar e controlar o desenvolvimento de projetos

Scrum é um "wrapper" para outras práticas de engenharia de software. Como XP por exemplo.

Scrum é um processo que controla o caos resultante de necessidades e interesses conflitantes.

Scrum é uma forma de aumentar a comunicação e maximizar a cooperação .

Scrum é uma forma de detectar e remover qualquer impedimento que atrapalhe o desenvolvimento de um produto.

Scrum é escalável desde projetos pequenos até grandes projetos em toda empresa.

sexta-feira, 12 de setembro de 2008

Modelo em Espiral

Um modelo de processo é uma representação abstrata de um processo. Os requisitos de um sistema sempre evoluem no decorrer de um projeto. Portanto iteração é parte fundamental no processo de desenvolvimento de sistemas de larga escala.


Podemos desenvolver o processo de desenvolvimento através de vários tipos de abordagens, entre as quais está o modelo em espiral.


O modelo em espiral foi proposto por Boehm em 1988 como forma de integrar os diversos modelos existentes à época, eliminando suas dificuldades e explorando seus pontos fortes. Este modelo foi desenvolvido para abranger as melhores características tanto do ciclo de vida clássico como da prototipação, acrescentando, ao mesmo tempo, um novo elemento
- a análise de riscos - que falta a esses paradigmas

Entretanto a integração não se dá através da simples incorporação de características dos modelos anteriores. O modelo em espiral assume que o processo de desenvolvimento ocorre em ciclos, cada um contendo fases de avaliação e planeamento, onde a opção de abordagem para a próxima fase (ou ciclo) é determinada. Estas opções podem acomodar características de outros modelos.

O modelo original em espiral organiza o desenvolvimento como um processo iterativo em que vários conjuntos de quatro fases se sucedem até se obter o sistema final. Um ciclo se inicia com a determinação de objectivos, alternativas e restrições (primeira tarefa)onde ocorre o comprometimento dos envolvidos e o estabelecimento de uma estratégia para alcançar os objectivos. Na segunda tarefa, avaliação de alternativas, identificação e solução de riscos, executa-se uma análise de risco. Prototipação é uma boa ferramenta para tratar riscos. Se o risco for considerado inaceitável, pode parar o projeto.


Na terceira tarefa ocorre o desenvolvimento do produto. Neste quadrante pode-se considerar o modelo cascata. Na quarta tarefa o produto é avaliado e se prepara para iniciar um novo ciclo.

Variações do modelo espiral consideram entre três e seis tarefas ou setores da espiral, que podem ser:


- comunicação com o cliente;
- planeamento;
- análise de risco;
- engenharia;
- construção e liberação;
- avaliação do cliente.

A dimensão radial representa o custo acumulado actualizado e a dimensão angular representa o progresso através da espiral. Cada sector da espiral corresponde a uma tarefa (fase)do desenvolvimento.


O modelo espiral é, actualmente a abordagem mais realística para desenvolvimento de software em grande escala, e usa uma abordagem que capacita a empresa que presta o serviço, e o cliente a entender e reagir aos riscos em cada etapa evolutiva.


Este tipo de modelo exige considerável experiência na determinação de riscos e depende dessa experiência para ter sucesso, pode ser difícil convencer os clientes que uma abordagem evolutiva é controlável.



Vantagens


O modelo em espiral permite que ao longo de cada iteração se obtenham versões do sistema cada vez mais completas, recorrendo à prototipagem para reduzir os riscos.


Este tipo de modelo permite a abordagem do refinamento seguido pelo modelo em cascata, mas que incorpora um enquadramento iterativo que reflete, de uma forma bastante realística, o processo de desenvolvimento.


Desvantagens


Pode ser difícil convencer grandes clientes ( particularmente em situações de contrato) de que a abordagem evolutiva é controlável.


A abordagem deste tipo de modelo exige considerável experiência na avaliação dos riscos e fia-se nessa experiência para o sucesso. Se um grande risco não for descoberto, poderão ocorrer problemas.

Este tipo de modelo é relativamente novo e não tem sido amplamente usado.


É importante ter em conta que podem existir diferenças entre o protótipo e o sistema final. O protótipo pode não cumprir os requisitos de desempenho, pode ser incompleto, e pode refletir somente algumas facetas do sistema a desenvolver.


O modelo em espiral pode levar ao desenvolvimento em paralelo de múltiplas partes do projeto, cada uma sendo abordada de modo diferenciado, por isso é necessário o uso de técnicas específicas para estimar e sincronizar cronogramas, bem como para determinar os indicadores de custo e progresso mais adequados.












Importância da Engenharia de Software

Durante as três primeiras décadas da era do computador, o principal desafio era desenvolver um hardware que reduzisse o custo de processamento e armazenagem de dados (PRESSMAN, 1995).

Hoje, o problema é diferente. O principal desafio desta década é melhorar a qualidade (e reduzir o custo) de soluções baseadas em computador, que são implementadas com software.
Na década de 70 e 80 destacaram-se software tipo batch, distribuição e uso limitado, multiusuários, em tempo real, banco de dados.

Atualmente, o software deve ser distribuído, com " inteligência" embutida, visuais, orientados aos clientes e/ou usuários, modulares e em redes complexas.

Modernamente, o software ou sistema de informação deve estar com o foco no negócio empresarial e com o objetivo de auxiliar os processos de tomada de decisões ( estratégicas, táticas ou gerenciais e operacionais).

Engenharia de software

Engenharia de software é uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de ciência da computação, gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade.

Atualmente, essas tecnologias e práticas englobam linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software.
Os fundamentos
científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um Sistema de Informação.

terça-feira, 26 de agosto de 2008

Primeira Postagem



Caro Leitores,


Meu nome é Leandro Teixeira, estou graduando em Sistema de Informação no 4° Semestre. Estou implementando um blogger onde estarei atualizando todos os dias até que se finalize o semestre 2008.2.

Abordagem deste blogger está diretamente relacionada à Engenharia de Software, como métodos de desenvolver um bom software para que um futuro próximo, os aplicatos tem um ciclo de vida de maior duração.