(e|in)stabilidade de pacotes

Em seu livro “Agile Software Development – Principles, Paterns, and Practices”, Robert C. Martin (também conhecido como Uncle Bob) dedica bastante atenção à um assunto que, muitas vezes não se dá a devida importância: design de pacotes.
Em meio à uma discusão sobre coesão e acoplamento dos pacotes surge o conceito de estável:

* “Something is stable if it is not easily moved”

Segundo Uncle Bob, a estabilidade de um pacote está relacionada não á frequencia em que este sofre alterações, mas sim no esforço necessário para a alteração.
Deste ponto de vista, um pacote do qual muitos outros dependem é considerado estável pois uma alteração fará com que todos os outros que dele dependam devam ser revisados. O esforço é grande. Seguindo esta linha, um pacote que depende de vários outros, porém não possui ninguem que dependa dele é considerado instável, pois é muito simples alterá-lo, o esforço é pequeno, ninguém mais será afetado.

Meio confuso não? Vamos tentar uma metáfora.

Cena 1
Imagine que você trabalhe em uma empresa quase perfeita, desenvolvendo software. Maravilhosamente quase nenhum projeto atrasa, são entregues no prazo e com qualidade.
Logo, seu gerente de projetos está sempre de bom humor, sorridente e fanfarrão.
Porém, como você trabalha nessa mesma empresa a 10 anos já o viu algumas vezes mudar de humor. Umas dez vezes mais ou menos. Média de 1 por ano. Fantástico pelo histórico da maioria dos projetos!
Quando isso acontece seu gerente muda completamente de temperamento, age como se fosse outra pessoa. Fica vermelho quando fala, aos berros, palavrões, ameaças de demissão, pressão total. Pede pra sair!
Apesar de ser uma ocasião muito rara em sua empresa dos sonhos, não precisa de muito para que seu gerente perca a paciência. Basta alguém pedir demissão, ou uma atividade atrasar 1 dia, ou um cliente reclamar de 1 funcionalidade, ou algumas outras coisas desse tipo.
Veja que basta que ocorra apenas 1 dessas situações para que ele mude de humor. Porém, como na maior parte do tempo tudo anda como esperado, é raro de se ver.
Pergunta: seu gerente é estável?
Apesar da baixa frequencia na mudança de estado, devemos concordar que é uma pessoa extremamante instável. É muito fácil provocar uma mudança.

Cena 2
Imagine que a empresa onde você trabalha esteja passando por uma nova fase. Muitas mudanças, readaptações, equipe nova, limitada, novos produtos.
Tudo ao mesmo tempo. Uma bagunça só.
Seu gerente de projetos está diariamente irritado. Sempre dando respostas curtas e grossas. Ordem atrás de ordem. Pressionando a equipe o tempo todo.
Como você trabalha nessa mesma empresa, com esse gerente a 10 anos sabe que essa situação não é normal.
Nesses 10 anos você viu o cara descer do salto uma meia duzia de vezes apenas. E mesmo assim nada muito agressivo. Normal.
Para que seu gerente perca a paciência é preciso que o projeto esteja atrasodo pelo menos 1 mês, as pessoas da sua equipe cheguem tarde todos os dias, passem horas no msn e orkut durante o expediente, não façam testes unitários e ainda torçam para o Corinthians. Tudo isso ao mesmo tempo. Como a empresa está passando por um momento difícil, nos ultimos meses isso anda acontecendo todos os dias. Logo, gerente extressado sempre.
Pergunta: seu gerente é instável?
Apesar da alta frequencia na mudança de seu comportamento, acho que não podemos considerá-lo uma pessoa instável. Basta ver como é difícil irritá-lo, mudar seu estado de espírito.

Concordo que é tentador pensar que algo que muda com pouca frequencia seja estável, enquanto que algo que muda constantemente seja instável. Mas tome cuidado!
E o que tudo isso me importa?

A organização de classes em pacotes e a dependência entre esses pacotes são extremamente importantes para a definição de um bom design de software, mas, ao contrário do que possa parecer não é uma tarefa simples.

Advertisements

One Response to “(e|in)stabilidade de pacotes”

  1. Pacotes, dependência, estabilidade and so for … « Mentalmorphosis Says:

    […] Mentalmorphosis « (e|in)stabilidade de pacotes […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: