Arquivo

Arquivo de julho, 2009

Ciclos: releases e iterações

31, julho, 2009

Uma das principais características da complexa tarefa de desenvolver produtos de software que funcionem corretamente e atendam as expectativas do cliente é a imprevisibilidade. Na tentativa de diminuir esta imprevisibilidade processos tradicionais de desenvolvimento confiam em planejamentos intensivos para longos períodos, tentando identificar e mitigar todos os riscos possíveis logo de início. Ao longo dos anos descobriu-se que esta estratégia não é eficaz devido à própria natureza incerta do desenvolvimento de software e dos negócios onde normalmente softwares são aplicados.
Através deste aprendizado, as metodologias ágeis propõem ciclos curtos de planejamento e entrega, nos quais uma parte do produto final é projetada, desenvolvida e testada dentro de um período curto, chamado iteração. Nota-se, neste ponto, que não se fala de protótipos, fala-se de uma parte do produto final que pode potencialmente ser utilizada em produção e será continuamente melhorada e incrementada, iteração após iteração, respondendo às mudanças impostas pelo mercado e pela tecnologia, até que atinja o escopo necessário. A figura abaixo demonstra os vários ciclos que ocorrem durante o desenvolvimento do software e quais aspectos são tratados em cada um deles:

Ciclos de desenvolvimento

Ciclos de desenvolvimento

Ciclos curtos de desenvolvimento proporcionam maior feedback e aprendizado para todos os envolvidos no processo de desenvolvimento. Com mais informações, as equipes passam a diminuir a incerteza e trabalhar ancoradas em um processo confiável de entregas de produto de alta qualidade e valor agregado. A figura abaixo demonstra o ganho de produtividade do time de desenvolvimento, no uso de ciclos curtos:

Ganho de produtividade em ciclos curtos

Ganho de produtividade em ciclos curtos

Com maior confiabilidade e previsibilidade é possível fazer um planejamento de releases para o projeto, sempre considerando as regras adequadas de priorização e a velocidade da equipe de desenvolvimento. Desta forma, os releases são entregas maiores que contemplam o que foi desenvolvido durante algumas iterações e, associado a um objetivo bem definido, o planejamento de releases passa a ser uma forma valiosa de satisfazer as necessidades de mercado do cliente. Como são priorizadas principalmente as funcionalidades que geram maior valor e tem maior risco para o projeto, os ciclos curtos propiciam um produto de alto valor agregado, diminuindo os riscos e o time-to-market. Consequentemente, a vantagem competitiva do cliente torna-se indiscutível.

Samuel Crescêncio Metodologia

Ruby a bola da vez?

6, julho, 2009

Quem acompanha o que acontece no mundo das linguagens de programação, com certeza já ouviu falar de Ruby e não de hoje.

Mas o que essa linguagem realmente tem de especial. Com certeza um post seria pouco para explicar uma linguagem de programação. Além disso, existe um grande número de tutoriais, livros e ebooks que podem dar mais detalhes da linguagem.

Aqui será somente uma breve introdução e um fato importante que podem justificar porque Ruby pode ganhar ainda mais espaço.

Portanto não é a intenção desse post sintaxe, configurações, etc.

Como surgiu?
Ruby surgiu no Japão nos anos 90 e foi desenvolvida por Yukihiro “Matz” Matsumoto.

Matz desejava uma linguagem mais poderosa que Perl e mais orientada a objetos que Python, a partir disso Matz decidiu desenhar a sua própria linguagem de programação.

Um dos conceitos filosóficos de Matz era o de proporcionar ao programador produtividade e diversão ao programar.

Com certeza uma excelente aspecto motivacional, seja para o programador ou para o cliente.
Afinal quem não quer produzir mais em menos tempo e mais feliz?

Influências
É baseada em Perl, Smalltalk, Eiffel, Ada, and Lisp.

Características
Ruby é uma linguagem dinâmica de forma que objetos e classes podem ser alterados em tempo de execução.

Além disso é totalmente orientada a objetos, ou seja, em Ruby tudo é um objeto.

Possui suporte nativo de expressões regulares, sobrecarga de operador e garbage collector.

Isso são somente algumas das características da linguagem que vem sendo muito comentada, não somente pela comunidade Ruby mas também por pessoas influentes da área de desenvolvimento de software.

Recentemente Martin Fowler publicou um artigo descrevendo a experiência da ThoughtWorks com Ruby.

Bom só o fato de saber que Martin Fowler está interessado em Ruby e em Rails já é deveria ser motivo de atenção por parte da comunidade de desenvolvimento de software.

Porém o que realmente chama a atenção são os comentários positivos que Fowler fez em relação a linguagem e ao framework Rails de acordo com utilização de ambos na ThougtWorks.

We have found that Rails makes much of the repetitive part of web application easier and quicker to do - but the more involved stuff remains.
All of these questions sum up into the key question for us: is Ruby (and Rails) a viable platform for us and our clients. The answer thus far is a resounding “yes”.

Segundo Fowler Ruby favorece o desenvolvimento de software utilizando metodologias ágeis:

Ruby also fits in with our preference for using agile software development processes. The agile philosophy is one of rapid feedback by building software and reviewing it regularly with the customer. The more productive an development environment, the more frequently you can review progress, and the better the agile “inspect and adapt” process works.

Vale ressaltar também alguns aspectos sobre a relação de Ruby com produtividade e com os desenvolvedores:

One thing we have seen is that you shouldn’t expect these productivity increases to turn up right away. I’ve heard several times that people were alarmed in early weeks about the slow progress of a new Ruby team - a consequence of what I call the Improvement Ravine. It does take time for a Ruby team to get the hang of how the platform works and during that time they’ll be slower than you expect.

Our experience selling Ruby work is that using a dynamic language like Ruby fits in well with our overall appeal. Our strength is that we hire highly talented people who are difficult to attract to the typical IT organization. Ruby has a philosophy of an environment that gives a talented developer more leverage, rather than trying to protect a less talented developer from errors. An environment like Ruby thus gives our developers more ability to produce their true value.

Somente alguns itens do artigo foram citados, alguns aspectos negativos da linguagem e problemas que a ThoghtWorks teve também estão presentes do artigo original.

Obviamente a leitura do artigo e um estudo maior da linguagem, assim como a  utilização de Ruby e Rails podem dizer se essas ferramentas são adequadadas para o desenvolvimento de uma solução especifíca.

Fontes:
http://en.wikipedia.org/wiki/Ruby_(programming_language)
http://martinfowler.com/articles/rubyAtThoughtWorks.html

Links:
http://www.ruby-lang.org/en/
http://rubyonrails.org/

André Branco Ferramentas