Buscar

A_Nova_Metodologia

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Este artigo é uma tradução do artigo original, The New Methodology, escrito por Martin 
Fowler. A tradução poderá ter alguns erros e partes que não capturem da melhor forma 
as palavras do autor. No processo de revisão tentarei optimizar a tradução. Agradeço a 
quem encontrar algumas falhas que me avise, de modo a oferecer melhor qualidade. O 
artigo ainda não se encontra totalmente traduzido. Irei actualizando esta mensagem 
também para acrescentar o que falta.
A Nova Metodologia
Martin Fowler
A Nova Metodologia ......................................................................................................... 1 
Martin Fowler ................................................................................................................ 1 
Do Nada, para o Monumental, para o Ágil ........................................................................ 1 
Previsível contra Adaptável ............................................................................................... 3 
Separação de Desenho e Construção ............................................................................. 3 
A Imprevisibilidade dos Requisitos ............................................................................... 4 
A previsibilidade é impossível? ..................................................................................... 5 
Controlando um Processo Imprevisível – Iterações ...................................................... 6 
O Cliente Adaptável ...................................................................................................... 7 
Colocando as Pessoas Primeiro ......................................................................................... 8 
Unidades de Programação Compatíveis e Uníveis ........................................................ 8 
Os programadores são profissionais responsáveis ......................................................... 9 
Gerir um Processo Orientado pelas Pessoas ................................................................ 10 
A Dificuldade da Medição ........................................................................................... 11 
O Papel da Liderança do Negócio ............................................................................... 11 
O Processo Auto-Adaptável ............................................................................................ 12 
As Metodologias .............................................................................................................. 13 
XP (Extreme Programming) ........................................................................................ 13 
Família Crystal do Cockburn ....................................................................................... 14 
Open Source ................................................................................................................ 15 
Desenvolvimento Adaptável de Software do Highsmith ............................................ 16 
Nos últimos anos tem havido um interesse crescente nas metodologias ágeis. 
Alternativamente caracterizadas como um antídoto à burocracia ou uma licença para 
hackar, elas suscitaram o interesse em todo o campo do software. Neste ensaio eu 
exploro os motivos dos métodos ágeis, focando não tanto no seu peso mas na sua 
natureza adaptativa e na sua orientação às pessoas. Dou também um sumário e 
referências aos processos nesta escola e considero os factores que devem influenciar a 
tua escolha sobre se deves percorrer este novo caminho.
Do Nada, para o Monumental, para o Ágil
A maior parte do desenvolvimento de software é uma actividade caótica, 
frequentemente caracterizada pela frase "codifica e corrige". O software é escrito sem 
grande planeamento, e o desenho do sistema é remendado com muitas decisões de curto 
prazo. Isto efectivamente funciona bem quando o sistema é pequeno, mas quando este 
começa a crescer começa a ser cada vez mais difícil acrescentar novas funcionalidades. 
Além disso, os erros começam a ser mais frequentes e mais difíceis de corrigir. Um 
sinal típico de um sistema destes é uma longa fase de testes após a "conclusão de uma 
funcionalidade". Uma longa fase de testes como esta destroi quaisquer calendarizações, 
dado que o teste e o debug são impossíveis de calendarizar.
Vivemos com este estilo de desenvolvimento há bastante tempo, mas também temos 
uma alternativa há bastante tempo: Metodologia. As metodologias impõem um processo 
disciplinado sobre o desenvolvimento de software com o objectivo de tornar o 
desenvolvimento de software mais previsível e mais eficiente. É conseguido isto 
desenvolvendo um processo detalhado com um forte ênfase no planeamento inspirado 
pelas outras disciplinas de engenharia - é por isso que eu tenho tendência a referir-me a 
elas como metodologias de engenharia.
As metodologias de engenharia estão connosco há muito tempo. Elas não se têm 
evidenciado por serem extremamente bem sucedidas. Ainda se notam menos por serem 
populares. A crítica mais frequente a estas metodologias é que são burocráticas. 
Existem tantas tarefas a realizar para seguir a metodologia que todo o ritmo de 
desenvolvimento diminui.
Como reacção a estas metodologias, um novo grupo de metodologias apareceram nos 
últimos anos. Durante algum tempo estas foram conhecidas como metodologias leves, 
mas agora é aceite o termo metodologias ágeis. Para muitas pessoas o interesse nas 
metodologias ágeis é a sua reacção à burocracia das metodologias monumentais. Estes 
novos métodos tentar atingir um compromisso útil entre nenhum processo e demasiado 
processo, oferecendo um processo suficiente para obter um compromisso razoável.
O resultado disto tudo é que os método ágeis têm algumas diferenças significativas na 
ênfase relativamente aos métodos de engenharia. A diferença mais notável é que eles 
são menos orientados à documentação, tipicamente enfatizando uma menor quantidade 
de documentação para uma dada tarefa. Em muitos sentidos são mais orientados ao 
código: seguindo um caminho quediz que a parte chave da documentação é o código 
fonte.
No entanto eu não penso que este é o ponto chave acerca dos métodos ágeis. A falta de 
documentação é um sintoma de duas diferenças ainda mais profundas:
- Os métodos ágeis são adaptáveis em vez de preditivos. Os métodos de 
engenharia tendem a tentar planear uma grande parte do processo de software 
em grande detalhe para um grande intervalo de tempo. Isto funciona bem até que 
as coisas mudam. Assim sendo, a sua natureza é resistir à mudança. Para 
os métodos ágeis, por sua vez, as mudanças são bem-vindas. Eles tentam ser 
processos que se adaptam e prosperam na mudança, chegando ao pondo de se 
mudarem a si próprios.
- Os métodos ágeis são orientados à pessoa em vez de serem orientados ao 
processo. O objectivo dos métodos de engenharia é definir um processo que 
funciona bem independentemente de quem o usar. Os métodos ágeis partem do 
pressuposto que nenhum processo irá alguma vez substituir as capacidades de 
uma equipa de desenvolvimento, logo o papel de um processo é suportar a 
equipa de desenvolvimento no seu trabalho.
Nas secções seguintes eu vou explorar estas diferenças em maior detalhe, para que 
possam entender como é um processo adaptável e centrado nas pessoas, os seus 
benefícios e as suas desvantagens e quando é algo que deves usar: tanto como um 
projectista ou como um cliente de software.
Previsível contra Adaptável
Separação de Desenho e Construção
A inspiração habitual das metodologias são as disciplinas de engenharia como a 
engenharia civil ou mecânica. Estas disciplinas colocam um grande ênfase no 
planeamento antes da construção. Estes engenheiros trabalham num conjunto de 
esquemas que indicam com precisão o que necessita de ser construído e como é que as 
várias partes se irão reunir. Muitas decisões de desenho, como saber como gerir a carga 
numa ponte, são efectuadas à medida que os esquemas são produzidos. Os esquemas 
são então entregues a um grupo diferente, frequentemente de uma empresa diferente, 
para serem construídos. Assume-se que o processo de construção irá seguir os 
esquemas. Na prática, os construtores encontram alguns problemas, mas estes são 
tipicamente pequenos.
Sendo que os esquemas especificam as peças e como é que elas se irão juntar, estes 
funcionam como a base de um plano de construção detalhado. Um plano desses 
consegue determinar quais as tarefas que necessitam de ser realizadas e que 
dependências existem entre elas. Isto permite um planeamento e um orçamento para a 
construção razoavelmente previsíveis. Também se diz em detalhe como é que as 
pessoas que realizam a construção devem realizar o seu trabalho. Permite-se assim que a 
construção tenha menos capacidade intelectual, tendo no entanto com frequência grande 
capacidade manual.
Assim sendo, o que vemos aqui são duas actividades fundamentalmente diferentes. 
Desenho que é difícil de prever e requer pessoas caras e criativas, e construção que é 
mais fácil de prever. Assim que se tem o desenho, podemos planear a construção. Assim 
que tivermos o plano para a construção, podemos então lidar com a construção de uma 
forma muito mais previsível. Na engenharia civil construção é muito maior que o 
desenho e planeamento em termos de custo e de tempo.
Então a abordagem para a metodologias de engenharia em software assemelham-se a 
isto: queremos um planeamento previsível que é capaz de utilizar pessoas com poucas 
capacidades. Para fazer isto temos de separar o desenho e a construção. Assim sendo 
necessitamos de determinar como realizar o desenho para o software de forma a que a 
construção seja linear assim que o planeamento esteja realizado.
Então que forma este planeamento pode tomar? Para muitos, este é o papel de notações 
de desenho como o UML. Se conseguirmos realizar todas as decisões significativas 
utilizando o UML, conseguimos desenvolver um plano de construção e entregar estes 
desenhos a programadores como actividade de construção.
Mas aqui está a questão crucial. Consegues ter um desenho que é capaz de tornar a 
programação numa actividade previsível de construção? E se sim, o custo de realizar 
isto é suficientemente pequeno para justificar esta abordagem?
Todas estas coisas trazem algumas questões. A primeira relaciona-se com a dificuldade 
de ter um desenho ao estilo de UML num estado que possa ser dado aos programadores. 
O problema com um desenho ao estilo de UML é que pode parecer muito bem no papel, 
mas ainda assim com sérias falhas quando se efectivamente tem que se programar. Os 
modelos que os engenheiros civis utilizam baseiam-se em muitos anos de prática que 
estão enraizados nos códigos de engenharia. Além disso os pontos essenciais, como a 
forma (...). A única verificação que podemos realizar em diagramas ao estilo de UML é 
a verificação com os pares. Enquanto isto pode ajudar, leva a erros no desenho que 
frequentemente só são descobertos durante a codificação e teste. Mesmo os desenhoers 
mais capacitados, como eu considero ser, são frequentemente surpreendidos quando se 
torna um dado desenho em software.
Outro problema é o do custo comparativo. Quando se constrói uma ponte, o custo do 
esforço de desenho é cerca de 10% do trabalho, sendo o resto da construção. Em 
software a quantidade de tempo despendida na codificação é muito, muito menor que o 
McConnell sugere para um projecto grande, somente 15% do projecto é código e testes, 
uma razão quase perfeitamente inversa da construção de pontes. Mesmo que se 
considere todos os testes como parte da construção, então o desenho é ainda assim 50% 
de todo o trabalho. Isto levanta uma questão importante sobre a natureza do desenho em 
software comparando com o seu papel nos outros ramos de engenharia.
Estes tipos de questões levaram o Jack Reeves a sugerir que efectivamente o código 
fonte é um documento de desenho e que a fase de construção é a utilização do 
compilador e do linker. Efectivamente tudo o que seja construção pode e deve ser 
automatizado.
Isto leva a algumas conclusões importantes:
- Em software: construção é tão barata que é grátis.
- Em software todo o esforço é em desenho, e assim necessita de pessoas 
talentosas e criativas.
- O processo criativo não pode ser planeado facilmente, e assim a previsibilidade 
pode ser um objectivo impossível.
- Devemos ser bastante atenciosos à metáfora da engenharia tradicional para 
construir software. É um tipo diferente de actividade e requer processos 
diferentes.
A Imprevisibilidade dos Requisitos
Existe uma frase recorrente que oiço em todos os problemas dos projectos em que 
participei. Os projectistas vêm até mim e dizem "o problema com este projecto é que os 
requisitos estão sempre a mudar". O que eu acho surpreendente acerca desta situação é 
que as pessoas se surpreendem com isto. No processo de construção de software as 
mudanças de requisitos são a norma, a questão é o que vamos fazer sobre isso.
Um caminho é tratar as mudanças de requisitos como resultado de uma fraca engenharia 
de requisitos. A ideia por detrás da engenharia de requisitos é obter uma imagem 
completamente compreendida dos requisitos antes de se começar a desenvolver 
software, levar o cliente a aceitar esses requisitos e depois montar os procedimentos que 
limitam as mudanças de requisitos após a aceitação.
Um problema com isto é que simplesmente tentar perceber as opções para os requisitos 
é complicado. É ainda mais complicado porque a organização de desenvolvimento 
tipicamente não oferece informação de custo sobre os requisitos. Acaba-se na situação 
em que podes pretender um tecto de abrir para o carro, mas o responsável pelas vendas 
não consegue dizer se isso vai adicionar $10 ao preço do carroou $10,000. Sem grande 
ideia do custo, como é que se pode decidir se aceitamos o custo do tecto de abrir?
A estimação é complicada por muitos motivos. Parte disso é que o desenvolvimento de 
software é uma actividade de desenho, e consequentemente difícil de planear e custear. 
Parte disso é que os materiais básicos mudam rapidamente. Parte disso é que depende 
muito em cada pessoa que está envolvida e as pessoas são difíceis e prever e quantificar.
A natureza intangível do software também conta. É muito difícil ver qual o valor de 
uma funcionalidade de software antes de esta ser efectivamente utilizada. Somente 
quando se começa a utilizar uma versão inicial de algum software é que se começa 
realmente a perceber quais são as funcionalidades que têm valor e as que não.
Isto leva a um ponto irónico em que as pessoas esperam que os requisitos devam ser 
alteráveis. Afinal de contas o software é suposto ser maleável. Então os requisitos não 
só são maleáveis, como devem ser maleáveis. É necessário um grande esforço para que 
os clientes do software corrijam os requisitos. É ainda pior se eles já tiverem trabalhado 
em desenvolvimento de software porque eles sabem que o software é facilmente 
alterável.
Mas se conseguisses isso tudo e obter um conjunto de requisitos preciso e estável ainda 
assim provavelmente estarias condenado. Na economia de hoje as forças fundamentais 
de negócio estão a mudar o valor das funcionalidades de software muito rapidamente. O 
que pode ser um bom conjunto de funcionalidades agora, não será um bom conjunto 
daqui a seis meses. Mesmo que os clientes consigam corrigir os seus requisitos, o 
mundo do negócio não vai esperar por eles. E muitas das mudanças no mundo do 
negócio são completamente imprevisíveis: quem disser o contrário está a mentir, ou já 
conseguiu um bilião no mercado das acções.
Tudo o resto no desenvolvimento de software depende nos requisitos. Se não 
conseguires requisitos estáveis não conseguirás um bom planeamento.
A previsibilidade é impossível?
Na generalidade, não. Existem alguns desenvolvimentos de software onde a 
previsibilidade é possível. Organizações como o grupo de software do vaivém espacial 
da NASA são um exemplo de onde o desenvolvimento de software pode ser previsível. 
Requer muita cerimónia, bastante tempo, uma equipa grande, e requisitos estáveis. 
Existem por aí projectos que são vaivéns espaciais. No entanto, não acho que muito do 
negócio de software se encontre nesta categoria. Para isto, é necessário um tipo de 
processo diferente.
Um dos grandes perigos é fingir que se consegue seguir um processo previsível quando 
não se consegue. Pessoas que trabalham numa metodologia não são muito boas a 
identificar situações fronteira: os pontos onde a metodologia passa de apropriada a 
inapropriada. Muitos metodologistas querem que as suas metodologias sejam utilizáveis 
por todos, logo não entendem nem publicitam as suas condições de fronteira. Isto leva a 
que as pessoas utilizem uma metodologia nas circunstâncias erradas, como utilizar uma 
metodologia previsível numa situação imprevisível.
Existe uma forte tentação para fazer isso. Previsibilidade é uma propriedade muito 
desejável. No entanto, se se acredita que se pode ser previsível quando não se pode, isso 
leva a situações onde as pessoas constróem um plano cedo e depois não gerem 
apropriadamente a situação quando o plano não resulta. Vê-se o plano e a realidade 
lentamente a afastar-se. Por um grande período pode-se fingir que o plano ainda é 
válido. Mas em algum ponto a distância torna-se bastante elevada e o plano vai abaixo. 
Tipicamente esta queda é dolorosa.
Então se estás numa situação não previsível então não se pode utilizar uma metodologia 
previsível. (...) Significa que muitos dos modelos para controlar projectos, muitos dos 
modelos para toda a relação com o cliente, já não são válidos. Os benefícios da 
previsibilidade são tão grandes, é difícil deixá-los ir. Tal como muitos problemas a parte 
mais difícil é perceber que o problema existe.
No entanto deixar ir a previsibilidade não significa que se tenha de entrar num caos 
incontrolável. Em vez disso é necessário um processo que ofereça controlo sobre a 
imprevisibilidade. É isso que é a adaptividade trata.
Controlando um Processo Imprevisível – Iterações
Então como é que nos podemos controlar num mundo imprevisível? A parte mais 
importante, e também a mais difícil, é perceber exactamente onde nos encontramos. 
Necessitamos de um mecanismo de retorno honesto onde podemos dizer com precisão a 
situação em intervalos frequentes.
A chave para este retorno é um desenvolvimento iterativo. Esta ideia não é nova. O 
desenvolvimento iterativo está por aqui sob muitos nomes: incremental, evolucionário, 
faseado, em espiral... muitos nomes. A chave para o desenvolvimento iterativo é 
produzir frequentes versões funcionais do sistema final onde se possui um subconjunto 
das funcionalidades requeridas. Estes sistemas funcionais são limitados em 
funcionalidade, mas devem ser fieis aos objectivos do sistema final. Devem ser 
totalmente integrados e testados cuidadosamente como uma entrega final.
O objectivo disto é que não existe nada como um sistema integrado e testado para 
oferecer uma dose de realidade ao projecto. Os documentos podem esconder muitos 
tipos de falhas. Código não testado pode esconder muitas falhas. Mas quando as pessoas 
realmente se sentam em frente ao sistema e trabalham com ele, aí as falhas se tornam 
verdadeiramente aparentes: tanto em termos de bugs como em termos de requisitos mal 
entendidos.
Desenvolvimento iterativo faz sentido em processos previsíveis também. Mas é 
essencial em processos adaptáveis porque estes necessitam de lidar com um grande 
número de mudanças nas funcionalidades requeridas. Isto leva a um estilo de 
planeamento onde os planos a longo prazo são muito fluidos, e os únicos planos estáveis 
são os planos a curto prazo que são feitos para uma única iteração. O desenvolvimento 
iterativo oferece uma base firme em cada iteração sobre a qual se podem desenvolver os 
planos futuros.
A questão chave para isto é qual deve ser a duração de uma iteração. Pessoas diferentes 
dão respostas diferentes. XP sugere que as iterações sejam entre uma a três semanas. 
SCRUM sugere uma duração de um mês. Crystal estica um pouco mais. A tendência, no 
entanto, é realizar cada iteração no tempo mais curto possível. Isto oferece um retorno 
frequente, para que se possa saber onde nos encontramos com mais frequência.
O Cliente Adaptável
Este tipo de processo adaptável requer um diferente tipo de relação com o cliente em 
relação ao que os outros frequentemente consideravam, particularmente quando o 
desenvolvimento é realizado por uma firma separada. Quando se contrata uma firma 
separada para realizar desenvolvimento de software, muitos clientes preferem um 
contrato de preço fixo. Dizer aos projectistas o que se pretende, perguntar por um 
orçamento, aceitar o orçamento e depois o ónus está na organização de desenvolvimento 
para construir o software.
Um contrato de preço fixo requer requisitos estáveis e portanto um processo preditivo. 
Processos adaptativos e requisitos estáveis implicam que não se pode trabalhar com a 
usual noção de preço fixo. Tentar encaixar um modelo de preço fixo num processo 
adaptativo acabar por ser uma explosão muito dolorosa. A parte pior desta explosão é 
que o cliente sai tão lesado quando a companhia de desenvolvimento de software. 
Afinal de contas o cliente não pretende um software a não ser que o seu negócio 
necessite dele. Se ele não o conseguir o seu negócio sofre. Então mesmo que não 
paguem nada à companhia de desenvolvimento, perdemna mesma. Na realidade 
perdem mais do que pagariam pelo software (porque pagariam pelo software se o valor 
de negócio do software fosse menor?)
Então existem perigos para ambos os lados em assinar um contrato de preço fixo onde 
um processo previsível não pode ser utilizado. Isto significa que o cliente tem de 
trabalhar de forma diferente.
Isto não significa que não é possível determinar um orçamento para o software no 
início. O que significa é que não se pode fixar o tempo, preço e profundidade. A 
abordagem ágil típica é fixar tempo e preço e permitir que a profundidade varie de 
forma controlada.
Num processo adaptável o cliente tem um controlo mais detalhado sobre o processo de 
desenvolvimento de software. Em cada iteração ele verifica o progresso e altera a 
direcção do desenvolvimento do software. Isto leva a uma relação muito mais próxima 
com os projectistas de software, uma verdadeira parceria de negócio. Este nível de 
compromisso não é para todas as organizações clientes, nem para todos os projectistas 
de software; mas é essencial fazer o processo adaptável funcionar correctamente.
Tudo isto tem um número de vantagens para o cliente. Para começar ele obtém um 
desenvolvimento de software muito mais responsivo. Um utilizável, no entanto 
mínimo, sistema pode ir para produção atempadamente. O cliente pode então alterar as 
suas capacidades de acordo com as mudanças no negócio, e também pela aprendizagem 
de como o sistema é utilizado na realidade.
(...) O problema com os processos preditivos é que a qualidade é medida em 
conformidade com o plano. Isto torna difícil às pessoas para notarem quando a realidade 
e o plano divergem. O resultado comum é um grande deslize no planeamento tarde no 
projecto. Num projecto ágil existe actualização constante do planeamento em cada 
iteração. Se más notícias estão para aparecer, tendem a aparecer mais cedo, quando 
ainda existe tempo para fazer alguma coisa sobre isso. Efectivamente este controlo de 
risco é a vantagem chave do desenvolvimento iterativo. Métodos ágeis levam isto mais 
fundo mantendo as durações das iterações pequenas, mas também vendo estas variações 
como oportunidades.
Isto é um suporte importante que constitui um projecto bem sucedido. Um projecto 
previsível é frequentemente medido pelo quando segue o seu plano. Um projecto que se 
encontra dentro do tempo e custo é considerado ser um sucesso. Esta medida não faz 
sentido num ambiente ágil. Para os ágeis a questão é o valor de negócio - recebeu o 
cliente software que tem mais valor para ele que o dinheiro que investiu. Um bom 
projecto previsível segue o plano, um bom projecto ágil vai construir algo diferente e 
melhor que o plano original previu.
Colocando as Pessoas Primeiro
Executar um processo adaptável não é fácil. Em particular, requer uma equipa de 
projectistas bastante eficiente. A equipa necessita de ser eficiente tanto na qualidade dos 
indivíduos, e na forma como a equipa se junta. Existe também uma sinergia 
interessante: não só a adaptabilidade necessita de uma equipa forte, como a maioria dos 
bons programadores preferem um processo adaptável.
Unidades de Programação Compatíveis e Uníveis
Um dos objectivos das metodologias tradicionais é desenvolver um processo onde as 
pessoas envolvidas são partes substituíveis. Com um processo destes pode-se tratar as 
pessoas como recursos que estão disponíveis em vários tipos. Tem-se um analista, 
alguns programadores, alguns testers, um gestor. Os indivíduos não são tão importantes, 
somente os papeis são importantes. Desta forma se for planeado um projecto não 
interessa qual é um analista e os testers que se tenham, desde que se saiba quantos se 
tem e de que forma o número de recursos afecta o plano.
Mas isso levanta uma questão chave: são as pessoas envolvidas no desenvolvimento de 
software partes substituíveis? Uma das características chave os métodos ágeis é rejeitar 
essa assunção.
Talvez a mais explicita rejeição das pessoas como recursos é Alistair Cockburn. No seu 
artigo, Characterizing People as Non-Linear, First-Order Components in Software 
Development, ele refere que processos preditivos requerem componentes que se 
comportem numa forma previsível. No entanto as pessoas não são componentes 
previsíveis. Para além disso os seus estudos de projectos de software levaram-no a 
concluir que as pessoas são o factor mais importante no desenvolvimento de software.
No título, [deste artigo] eu refiro as pessoas como "componentes". É assim que as pessoas 
são tratadas na literatura de desenho de processos/metodologia. O erro desta abordagem é 
que as "pessoas" são altamente variáveis e não lineares, com modos de sucesso e falha 
únicos. Estes factores são de primeira ordem, factores não negligenciáveis. A falha dos 
desenhoers de processo e metodologia em considerarem isto contribui com todos os tipos de 
trajectórias de projecto não planeadas que frequentemente vemos.
-- [Cockburn non-linear]
Questionam-se se a natureza do desenvolvimento de software trabalha contra nós aqui. 
Quando nos encontramos a programar um computador, controlamos um dispositivo 
previsível. Já que estamos neste negócio porque somos bons em fazer isso, estamos 
idealmente destinados a falhar quando nos deparamos com seres humanos.
Mesmo sendo o Cockburn o mais explicito na sua visão centrada nas pessoas do 
desenvolvimento de software, a noção de pessoas primeiro é um tema comum com 
muitos pensadores em software. O problema, muito frequentemente, é que a 
metodologia se tem oposto à noção de pessoas como um factor de primeira ordem no 
sucesso de um projecto.
Isto cria um forte efeito de retorno positivo. Se se esperar que todos os projectistas 
sejam unidades de programação compatíveis e uníveis, não se tenta tratá-los como 
indivíduos. Isto reduz a moral (e produtividade). As melhores pessoas procurarão um 
melhor lugar para estar, e acabarás com o que pretendias: unidades de programação 
compatíveis e uníveis.
Decidir que as pessoas vêm primeiro é uma grande decisão, que requer uma grande 
determinação para levar para a frente. A noção de pessoas como recursos está 
fortemente enraizada no pensamento de negócio, as suas raízes vêm do impacto da 
abordagem de gestão cientifica de Frederick Taylor. Na gestão de uma fábrica, esta 
abordagem Tayloristica pode fazer sentido. Mas para o trabalho altamente profissional e 
criativo, como eu acredito que o desenvolvimento de software seja, isto não serve. (E 
efectivamente a industria moderna está também a afastar-se do modelo Taylorista.)
Os programadores são profissionais responsáveis
Um ponto chave na noção Taylorista é que as pessoas que realizam o trabalho não são 
pessoas que conseguem perceber a melhor forma de o fazer. Numa fábrica isto pode ser 
verdade por várias razões. Parte disto é que muitos trabalhadores fabris não são as 
pessoas mais inteligentes ou criativas, e em parte isto é devido à tensão existente entre a 
gestão e os trabalhadores no sentido em que a gestão obtém mais dinheiro quando os 
trabalhadores obtêm menos.
A história recente mostra-nos o quando isto não é verdade para o desenvolvimento de 
software. Pessoas cada vez mais brilhantes e capazes são atraídas pelo desenvolvimento 
de software, atraídas tanto pela sua popularidade como por prémios potencialmente 
elevados. (Ambos me afastaram da engenharia electrónica.) Esquemas como (??) 
alinham os interesses dos programadores com os da companhia.
(Pode existir um efeito geracional aqui. Algumas provas anedóticas fazem-me pensar se 
mais pessoas brilhantes se aventuraram na engenharia de software nos últimos dez anos 
ou assim. Se sim esta seria uma razão do porquê da existência de um culto dajuventude 
no negócio dos computadores, como todos os cultos necessita de ter um ponto de 
verdade nele.)
Quando se pretende contratar e reter boas pessoas, necessita-se de reconhecer que eles 
são profissionais competentes. Assim sendo eles são as melhores pessoas para decidir 
como conduzir o seu trabalho técnico. A noção Taylorista de um departamento de 
planeamento separado que decide como fazer as coisas funciona apenas se os 
planeadores perceberem como fazer o trabalho melhor que aqueles que estão a fazer. Se 
tens pessoas brilhantes e motivadas a realizar o trabalho então isto não serve.
Gerir um Processo Orientado pelas Pessoas
A orientação por pessoas manifesta-se de diversas formas nos processos ágeis. Isto leva 
a efeitos diferentes, não sendo todos eles consistentes.
Um dos elementos chave é a aceitação do processo em vez da imposição do processo. 
Frequentemente os processos de software são impostos por figuras de gestão. Desta 
forma eles são frequentemente resistidos, particularmente quando as figuras de gestão 
estiveram muito tempo afastadas de desenvolvimento activo. Aceitar um processo 
requer dedicação, e assim sendo necessita do envolvimento activo de toda a equipa.
Isto resulta num resultado interessante em que apenas os projectistas podem decidir por 
seguir um processo adaptável. Isto é particularmente verdade para XP, que requer muita 
disciplina para executar. É aqui que Crystal é um complemento efectivo pois foca a 
mínima disciplina.
Outro ponto é que os projectistas têm de ser capazes de efectuar todas as decisões 
técnicas. XP vai ao centro desta questão onde, no seu processo de planeamento, diz que 
apenas os projectistas podem estimar quanto tempo demorará a realizar uma tarefa.
Esta liderança técnica é uma grande mudança para muitas pessoas em posições de 
gestão. Uma abordagem destas requer partilha de responsabilidade onde os projectistas 
e a gestão têm um lugar igual na liderança do projecto. De notar que eu disse igual. A 
gestão ainda tem o seu papel, mas reconhece a experiência dos projectistas.
Uma razão importante para isto é a taxa de mudança de tecnologia na nossa industria. 
Após alguns anos o conhecimento técnico torna-se obsoleto. Esta meia vida de 
capacidades técnicas não tem paralelo em qualquer outra industria. Até pessoas técnicas 
têm de reconhecer que entrar na gestão significa que as suas capacidades técnicas são 
desaparecer depressa. Ex-projectistas necessitam de reconhecer que as suas capacidades 
técnicas vão desaparecer depressa e que necessitam de confiar e depender dos 
projectistas actuais.
A Dificuldade da Medição
Se tens um processo onde as pessoas que dizem como é que o trabalho deve ser 
realizado são diferentes das pessoas que efectivamente o realizam, os chefes necessitam 
de alguma forma de medição sobre o quão efectivos os trabalhadores são. Na gestão 
cientifica houve um grande esforço para desenvolver abordagens objectivas para medir 
o resultado das pessoas.
Isto é particularmente relevante para o software devido à dificuldade de aplicar 
medições ao software. Apesar dos nossos melhores esforços não formos capazes de 
medir as coisas mais simples acerca do software, como a produtividade. Sem boas 
medições para estas coisas, qualquer tipo de controlo externo está acabado.
A introdução de gestão medida sem boas medições leva aos seus próprios problemas. 
Robert Austin efectuou uma excelente discussão sobre isto. Ele refere que quando se 
mede a performance tem que se ter todos os factores importantes sob medição. 
Qualquer coisa que esteja em falta tem o resultado inevitável que os trabalhadores vão 
alterar o que estão a fazer para produzir as melhores medições, mesmo que isso reduza 
claramente a verdadeira eficácia do que fazem. Esta disfunção de medição é o calcanhar 
de aquiles da gestão baseada em medição.
A conclusão do Austin é que se tem que escolher entre gestão baseada em medição e 
gestão delegatória (em que os trabalhadores decidem como trabalhar). Gestão baseada 
em medição é a melhor para trabalho simples e repetitivo, com poucos requisitos de 
conhecimento e resultados facilmente mensuráveis - exactamente o oposto do 
desenvolvimento de software.
O resultado disto tudo é que os métodos tradicionais têm operado sob a assunção que a 
gestão baseada em medição é a forma mais eficiente de gerir. A comunidade ágil 
reconhece que as características do desenvolvimento de software são tais que a gestão 
baseada em medição leva a níveis elevados de disfunção na medição. É realmente mais 
eficiente utilizar um estilo delegatório de gestão, que é o tipo de abordagem que é o 
centro do ponto de vista agilista.
O Papel da Liderança do Negócio
Mas os técnicos não podem realizar todo o processo por si próprios. Eles necessitam de 
indicações nas necessidades do negócio. Isto leva a outro aspecto importante dos 
processos adaptativos: eles necessitam de estar em contacto próximo com a experiência 
de negócio.
Isto vai para além do envolvimento de muitos projectos no papel de negócio. Equipas 
ágeis não podem existir sem comunicação ocasional. Eles necessitam de acesso 
continuo à experiência de negócio. Para além disso este acesso não pode ser algo que é 
realizado ao nível da gestão, é algo que está presente para qualquer projectista. Já que os 
projectistas são profissionais capazes na sua própria disciplina, eles necessitam de poder 
trabalhar ao mesmo nível com outros profissionais noutras disciplinas.
Uma grande parte disto, obviamente, é devida à natureza do desenvolvimento 
adaptativo. Já que toda a premissa do desenvolvimento adaptativo é que as coisas 
mudam rapidamente, necessita-se de contacto constante para avisar toda a gente das 
mudanças.
Não há nada mais frustrante para um projectista que ver o seu trabalho a ir para o lixo. 
Então é importante assegurar que existe experiência de negócio de qualidade e que esta 
está disponível para o projectista e que tem qualidade suficiente para que o projectista 
possa confiar nela.
O Processo Auto-Adaptável
Até agora falámos acerca da adaptabilidade no contexto de um projecto a adaptar o seu 
software frequentemente para atingir os requisitos mutáveis dos seus clientes. No 
entanto existe outro ângulo para a adaptabilidade: o do processo a alterar ao longo do 
tempo. Um projecto que começa utilizando um processo adaptável não vai ter o mesmo 
processo um ano depois. Ao longo do tempo, a equipa vai descobrir o que funciona para 
ela, e altera o processo.
A primeira parte da auto-adaptabilidade é a revisão regular do processo. Tipicamente 
faz-se isso com cada iteração. No final de cada iteração, tem-se uma curta reunião e 
colocam-se as seguintes questões
- O que é que fizemos bem?
- O que aprendemos?
- O que podemos fazer melhor?
- Que dúvidas temos?
Estas questões levam a ideias para alterar o processo para a próxima iteração. Deste 
modo o processo que começa com problemas pode melhorar à medida que o projecto 
avança, adaptando-se melhor à equipa que o usa.
Se a auto-adaptabilidade ocorre dentro de um projecto, é ainda mais marcante numa 
organização. Para enraizar o processo da auto-adaptabilidade eu sugiro que as equipas 
realizem uma revisão mais formal e que (???). Estas retrospectivas envolvem um 
encontro e 2-3 dias e um facilitador treinado. Não só se oferece aprendizagem para a 
equipa, também se oferece aprendizagem para toda a organização.
Uma consequência da auto-adaptabilidade é que nunca se deve esperar encontrar uma 
única metodologia de corporação. Em vez disso cada equipa não deve somente escolher 
o seu próprio processo, mas deve também activamente afinar o seu processo à medida 
que avança no projecto. Enquanto tanto os processos publicados e a experiência de 
outros projectos possa servir como inspiraçãoe base, a responsabilidade profissional 
dos projectistas é adaptar o processo à tarefa em mãos.
Esta auto-adaptividade está mais marcada em ASD e Crystal. As regras rígidas do XP 
parecem não permitir isso, mas é apenas uma impressão superficial já que o XP 
encoraja as pessoas a afinar o processo. A diferença principal com o XP é que os seus 
advogados sugerem seguir o XP pelas regras algumas iterações antes de o adaptar. 
Além disso as revisões nunca são enfatizadas, nem parte do processo, mesmo existindo 
sugestões para que as revisões façam mais uma prática do XP.
As Metodologias
Várias metodologias encaixam sob este cartaz ágil. Enquanto todas partilham as 
mesmas características, existem também algumas diferenças significativas. Não posso 
apresentar todos os pontos neste breve sumário, mas pelo menos posso apontar alguns 
locais para ver. Também não posso falar com experiência significativa acerca da 
maioria deles. Realizei muito trabalho baseado em XP, e vi RUP por alguns (???), mas 
com a maioria dos outros o meu conhecimento é o menos adequado conhecimento 
literário.
XP (Extreme Programming)
De todas as metodologias ágeis, esta é a que tem atraído a maior atenção. Em parte isto 
acontece devido à habilidade dos líderes do XP, em particular Kent Beck, para atrair a 
atenção. É também devido à habilidade do Kent Beck para atrair as pessoas para a 
abordagem, e tomar um papel de liderança nele. Nalguns sentidos, no entanto, a 
popularidade do XP tornou-se um problema, pois tirou público às outras metodologias e 
às suas ideias com valor.
As raízes do XP encontram-se na comunidade de Smalltalk, e em particular na 
colaboração próxima do Kent Beck e Ward Cunningham nos finais dos anos 80. Ambos 
refinaram as duas práticas em numerosos projectos durante os inícios dos anos 90, 
estendendo as duas ideias de uma abordagem de desenvolvimento de software que era 
adaptável e orientada às pessoas.
O passo crucial de prática informal para metodologia ocorreu na primavera de 1996. 
Kent foi contratado para rever o progresso do projecto de pagamento C3 para a 
Chrysler. O projecto estava a ser levado em Smalltalk por uma empresa contratada, e 
estava com problemas. Devido à baixa qualidade da base de código, o Kent recomendou 
deixar fora todo o código e começar do inicio. O projecto recomeçou sob a sua 
liderança e tornou-se num campo de treino para o XP.
A primeira fase do C3 foi bastante bem sucedida e ficou activa no inicio de 1997. O 
projecto continuou e começou com dificuldades mais tarde, o que resultou no 
cancelamento de mais desenvolvimento em 1999. (o que prova que o XP não é garantia 
de sucesso.)
O XP começa com quatro valores: Comunicação, Retorno, Simplicidade, e Coragem. 
Depois constrói-se sob meia dúzia de práticas que os projectos de XP devem seguir. 
Muitas destas práticas são velhas, técnicas tentadas e testadas, no entanto muitas vezes 
esquecidas por muitos, incluindo os processos mais planeados. Para além de ressuscitar 
estas técnicas, o XP leva-as para um todo sinergético onde cada uma é reforçada pelas 
outras.
Uma das mais difíceis, mas também mais interessantes para mim, é o seu forte ênfase 
nos testes. Enquanto os outros processos referem os testes, a maioria fá-lo com pouco 
ênfase. No entanto o XP coloca o teste nas fundações do desenvolvimento, com todos 
os programadores a escrever testes à medida que escrevem o seu código de produção. 
Os testes são integrados num processo de integração e construção contínua o que resulta 
numa plataforma altamente estável para desenvolvimento futuro.
Nesta plataforma o XP constroi um processo evolucionário de desenho que se suporta 
na refactorização de um sistema base simples com cada iteração.Todo o desenho é 
centrado à volta da iteração corrente com nenhum código de desenho realizado para 
necessidades futuras antecipadas. O resultado é um processo de desenho que é 
disciplinado, no entanto (???), combinando disciplina com adaptabilidade num sentido 
que a torna na metodologia adaptável mais bem desenvolvida.
O XP desenvolveu uma grande liderança, muitos deles do projecto C3. Como resultado 
existem muitas fontes para mais informação. O Kent Beck escreveu o Extreme 
Programming Explained o manifesto chave do XP, que explica os motivos por detrás da 
metodologia e uma explicação suficiente dela para dizer às pessoas se estão ou não 
interessadas em segui-la. Nos últimos anos houve uma epidemia de livros XP, muitos 
deles sendo bastante semelhantes no sentido em que descrevem todo o processo a partir 
do ponto de vista dos primeiros seguidores.
Além dos livros, existe um grande conjunto de recursos na web. Para encontrar uma 
abordagem mais estruturada ao XP, é melhor começar por dois sites de pessoas do C3: o 
xprogramming.com do Ron Jeffries e o extremeprogramming.org do Don Wells. Muito 
da advocacia e desenvolvimento inicial das ideias do XP ocorreram no ambiente de 
escrita colaborativa do Ward Cunningham. A wiki continua um local fascinante para 
descobrir, no entanto a sua natureza (???) leva a que seja sugado. Existe um activo e 
frequentemente interessante egrupo de discussão xp. Uma das mais interessantes vistas 
de fora do XP é a do Mark Paulk, que é um dos líderes da comunidade CMM – o seu 
documento vê o XP numa perspectiva CMM.
Família Crystal do Cockburn
O Alistair Cockburn tem vindo a trabalhar sobre metodologia deste que teve a tarefa de 
escrever sobre metodologia na IBM nos inícios dos anos 90. A sua abordagem não é 
igual à maioria dos metodologistas, no entanto. Em vez de construir somente na 
experiência pessoal para construir uma teoria de como as coisas devem ser feitas, ele 
suplementa a sua experiência directa com a procura activa de entrevistar os projectos 
para ver como eles funcionam. Além disso ele não tem receio de alterar os seus pontos 
de vista baseado nas suas descobertas: por todo isto faz com que seja o meu 
metodologista favorito.
O seu livro, Surviving Object-Oriented Projects, foi a primeira peça de aviso aos 
projectos em execução, e continua a ser a minha primeira recomendação para projectos 
iterativos em execução. Mais recentemente o Alistair escreveu um livro no 
desenvolvimento ágil de software que olha para os princípios por debaixo destes tipos 
de metodologias.
Desde essse livro ele explorou ainda mais os métodos ágeis, chegando à família de 
metodologias Crystal. É uma família porque ele acredita que tipos diferentes de 
projectos necessitam de tipos diferentes de metodologias. Ele vê esta variação em dois 
eixos: o número de pessoas no projecto, e as consequências dos erros. Cada 
metodologia encaixa numa parte diferente da grelha, logo um projecto de 40 pessoas 
que pode perder algum dinheiro tem uma metodologia diferente de um projecto crítico 
de 6 pessoas.
Os Crystals partilham uma orientação humana com o XP, mas esta centralidade nas 
pessoas é realizada de forma diferente. O Alistair considera que as pessoas acham difícil 
seguir um processo disciplinado, e portanto em vez de seguir a difícil alta disciplina do 
XP, o Alistar explora a metodologia menos disciplinada que ainda assim pode ter 
sucesso, conscientemente trocando produtividade pela facilidade de execução. Assim 
mesmo sendo Crystal menos produtiva que o XP, mais pessoas poderão segui-la.
O Alistair também coloca bastante peso nas revisões de cada iteração, encorajando 
assim as pessoas a auto melhorarem-se. O seu pressuposto é que o desenvolvimento 
iterativo está lá para encontrar os problemas mais cedo, e permitir então às pessoas de o 
corrigir. Isto coloca mais ênfase nas pessoas a monitorarem o seu processo e a afinarem-
no à medida que desenvolvem.
Open Source
Podes estar surpreendido por este título. Afinal de contas o open sourceé um estilo de 
software, não propriamente um processo. No entanto existe uma forma definida de fazer 
as coisas na comunidade open source, e muita da sua abordagem é tão aplicável aos 
projectos closed source como aos de open source. Em particular o seu processo está 
afinado para equipas fisicamente distribuídas, o que é importante porque a maioria dos 
processos referem equipas co-localizadas.
A maioria dos projectos open source têm um ou mais gestores. Um gestor é a única 
pessoa que pode colocar uma actualização no repositório de código fonte. No entanto 
outras pessoas para além do gestor pode realizar alterações à base de código. A 
diferença chave é que as outras pessoas têm que enviar a sua alteração para o gestor, 
que depois revê a alteração e aplica-a à base de código. Tipicamente estas alterações são 
efectuadas na forma de (???) que torna este processo mais simples. O gestor é então 
responsável pela coordenação das (???) e manutenção da coesão de desenho do 
software.
Projectos diferentes gerem o papel do gestor de formas diferentes. Alguns têm um 
gestor para todo o projecto, outros dividem-no em módulos e têm um gestor por 
módulo, outros rodam o gestor, outros têm múltiplos gestores para o mesmo código, 
outros têm uma combinação destas ideias. A maioria das pessoas do open source são-no 
em part-time, logo existe um problema do quanto uma equipa se coordena um projecto a 
tempo inteiro.
Uma característica particular do desenvolvimento open source é que o debugging é 
altamente paralelizado. Muitas pessoas podem estar envolvidas no debugging. Quando 
elas encontram um bug elas podem enviar uma actualização para o gestor. Isto é um 
bom papel para os não-gestores já que a maior parte do tempo se ocupa a procurar o 
bug. Também é bom para pessoas sem grandes capacidades de desenho.
O processo para o open source ainda não está bem escrito. O paper mais famoso é o The 
Cathedral and the Bazar do Eric Raymond que, enquanto é uma boa descrição, é um 
pouco breve. O livro do Karl Fogel sobre o repositório de código CVS também contém 
alguns bons capítulos sobre o processo de open source que podem ser interessantes 
mesmo que nunca queiras fazer cvs update.
Desenvolvimento Adaptável de Software do Highsmith
O Jim Highsmith ocupou muitos anos a trabalhar em metodologias preditivas. Ele 
desenvolveu-as, instalou-as, ensinou-as, e concluiu que elas tinham falhas profundas: 
particularmente para o negócio moderno.
O seu livro recente foca a natureza adaptável das novas metodologias, com particular 
ênfase na aplicação das ideias que originam no mundo dos sistemas adaptáveis 
complexos (comummente referidos como teoria do caos.) Não oferece o tipo de práticas 
detalhadas como o trabalho do XP faz, mas oferece uma base de trabalho fundamental 
para o porquê da importância do desenvolvimento adaptável e as consequências nos 
níveis mais profundos de organização e gestão.
No coração do ASD existem três fases não lineares e sobrepostas: especulação, 
colaboração e aprendizagem.
O Highsmith vê o planeamento como um paradoxo no ambiente adaptável, já que os 
resultados são naturalmente imprevisíveis. No planeamento tradicional, desvios dos 
planos eram erros que deviam ser corrigidos. Num ambiente adaptável, no entanto, 
desvios guiam-nos para a solução correcta.
Neste ambiente imprevisível necessita-se que as pessoas colaborem de uma forma rica 
para lidar com a incerteza. A atenção da gestão é menos sobre dizer às pessoas o que 
dizer, e mais sobre encorajar a comunicação para que as pessoas surjam elas próprias 
com respostas criativas.
Nos ambientes preditivos, a aprendizagem é frequentemente desencorajada. As coisas 
são dispostas no inicio e depois segue-se esse desenho.
Num ambiente adaptável, a aprendizagem desafia todos – projectistas e os seus clientes 
– a examinar as suas assunções e a utilizar os resultados de cada ciclo de 
desenvolvimento para adaptar o próximo.
– Highsmith
Como a aprendizagem é uma característica importante e contínua, assume-se que os 
planos e desenhos devem alterar à medida que o desenvolvimento progride.
	A Nova Metodologia
	Martin Fowler
	Do Nada, para o Monumental, para o Ágil
	Previsível contra Adaptável
	Separação de Desenho e Construção
	A Imprevisibilidade dos Requisitos
	A previsibilidade é impossível?
	Controlando um Processo Imprevisível – Iterações
	O Cliente Adaptável
	Colocando as Pessoas Primeiro
	Unidades de Programação Compatíveis e Uníveis
	Os programadores são profissionais responsáveis
	Gerir um Processo Orientado pelas Pessoas
	A Dificuldade da Medição
	O Papel da Liderança do Negócio
	O Processo Auto-Adaptável
	As Metodologias
	XP (Extreme Programming)
	Família Crystal do Cockburn
	Open Source
	Desenvolvimento Adaptável de Software do Highsmith

Outros materiais