-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/ (en)
João Pessoa, PB, +55 83 8867-7208
Eu acho que a idéia em si de se preocupar demais com o projeto
inicial, procurando planejar tudo antes de começar, é mais um sinal de
que as pessoas tem medo da mudança e querem evitá-la do que uma
necessidade real. Eles sabem que o projeto vai ser levado sem testes
automatizados e que falhas são catastróficas, então em vez de tentar
montar um porto seguro evitando regressões com uma suíte de testes,
preferem confiar em não mudar nada que funcione. Afinal, em time que
está ganhando, não se mexe :)
Sobre os problemas de comunicação, o waterfall também não vai
enfrentar os mesmos problemas?
Mesmo que o design saia da cabeça de alguns poucos projetistas, os
executores sempre vão dar o seu "toque" no que for produzido. De
qualquer forma, o design interno dos componentes que formam o sistema
não deveria ser importante, cada equipe deveria ser responsável por
sua parte, o modo como eles expõem essa funcionalidade pros outros
componentes é que tem que ser homogeneizada, pra que todas as
interfaces públicas tenham um mesmo "feeling". Acho que todo bom
projeto de software "grande" segue o mesmo caminho de módulos
independentes que se comunicam através de "boundaries" bem definidas,
que é simplesmente levar a mesma prática que nós aplicanos nos módulos
de código fonte a níveis mais altos do sistema.
-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/ (en)
João Pessoa, PB, +55 83 8867-7208
2008/11/10 Guilherme Germoglio <germ...@gmail.com>:
Não se esqueça que o problema da documentação não é o tamanho, é a utilidade :)
Se a documentação é de valor pro cliente, seja ela muita ou pouca,
deve ser produzida. A questão é que você não deveria gerar documentos
que ninguém vai se interessar em ler ou que vão estar obsoletos em
alguns instantes.
Eu, pessoalmente, nunca tive a oportunidade de trabalhar num sistema
assim mas acho que "agilidade de caixinha" dificilmente poderia ser
aplicada, mas diversas práticas, especialmente nas relacionadas a
testes poderiam ser aplicadas pra ajudar no desenvolvimento.
Eu acho que a idéia em si de se preocupar demais com o projeto
inicial, procurando planejar tudo antes de começar, é mais um sinal de
que as pessoas tem medo da mudança e querem evitá-la do que uma
necessidade real. Eles sabem que o projeto vai ser levado sem testes
automatizados e que falhas são catastróficas, então em vez de tentar
montar um porto seguro evitando regressões com uma suíte de testes,
preferem confiar em não mudar nada que funcione. Afinal, em time que
está ganhando, não se mexe :)
Sobre os problemas de comunicação, o waterfall também não vai
enfrentar os mesmos problemas?
Mesmo que o design saia da cabeça de alguns poucos projetistas, os
executores sempre vão dar o seu "toque" no que for produzido. De
qualquer forma, o design interno dos componentes que formam o sistema
não deveria ser importante, cada equipe deveria ser responsável por
sua parte, o modo como eles expõem essa funcionalidade pros outros
componentes é que tem que ser homogeneizada, pra que todas as
interfaces públicas tenham um mesmo "feeling".
Acho que todo bom
projeto de software "grande" segue o mesmo caminho de módulos
independentes que se comunicam através de "boundaries" bem definidas,
que é simplesmente levar a mesma prática que nós aplicanos nos módulos
de código fonte a níveis mais altos do sistema.
Você pode fazer TDD com RUP?
Pode.
Os manuais de RUP incitam você a fazer isso?
Não.
Eu acho que a grande diferença dos processos ágeis (tirando Scrum,
claro) é exatamente o foco em práticas pra se chegar a um resultado
final e não no resultado final em si, que normalmente é o foco dos
outros processos.
-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/ (en)
João Pessoa, PB, +55 83 8867-7208
2008/11/11 Alan Kelon Oliveira de Moraes <al...@di.ufpb.br>:
Depende e muito Rodrigo, por incríviel que pareça a influência do Beck para o TDD surgiu desse ramo chamado de "crítico" como o controle de um avião [que na verdade é um conjunto de softwares, cada dispositivos tem até sistema operacional próprio].Eles não usam Waterfall nisso,
na verdade a prática de testes surgiu fortemente nessa área, primeiro eles criam uma base considerável de testes [pelo menos o planejamento] e depois saem criando o código para passar nesses testes, claro que não é no esqueminha RED-GREEN-RED popularizado, mas isso influenciou demais o TDD.
(...)
Ainda há um enorme preconceito sobre o que é agile, como falta de documentação [mito], não planejamento [mito], apenas para sistemas mutáveis [que sistema não é mutável ao longo de seu ciclo de vida],
que equipes grandes [o que é grande?] perde-se a comunicação [logo na era da facilidade das comunicações], que sistemas grandes precisam de metodologias burocráticas [mito], etc a dar a pau.
A construção de um controle de mísseis por exemplo precisam de uma bateria de testes gigantesco [as vezes sim de modelo formal] e por isso os mísseis construídos no Brasil apresentavam um erro de cálculo por volta de 400km [não queira estar a menos de mil km numa possível guerra no Brasil por causa do fogo amigo :)] porque o pessoal daqui não testava nada, só na prática [informações de um amigo que trabalhou no projeto].
Opa! vamos lá...
2008/11/11 CMilfont <cmil...@gmail.com>Depende e muito Rodrigo, por incríviel que pareça a influência do Beck para o TDD surgiu desse ramo chamado de "crítico" como o controle de um avião [que na verdade é um conjunto de softwares, cada dispositivos tem até sistema operacional próprio].Eles não usam Waterfall nisso,
Não digo que eles usam Waterfall. Digo que não usam processos ágeis. A agilidade de um processo está ligada à capacidade do processo suportar muitas mudanças, com alta freqüência. Não é o caso deste tipo de sistema.
na verdade a prática de testes surgiu fortemente nessa área, primeiro eles criam uma base considerável de testes [pelo menos o planejamento] e depois saem criando o código para passar nesses testes, claro que não é no esqueminha RED-GREEN-RED popularizado, mas isso influenciou demais o TDD.
Concordo que influenciou, mas não significa que o fato de processos ágeis serem test-driven ou até "orientados a testes" sejam adequados para sistemas críticos.
(...)Ainda há um enorme preconceito sobre o que é agile, como falta de documentação [mito], não planejamento [mito], apenas para sistemas mutáveis [que sistema não é mutável ao longo de seu ciclo de vida],
Sobre a tese de "mudabilidade" do sistema, ou mudança freqüente de requisitos, há sistemas onde os requisitos mudam muito, com muita freqüência, e sistemas onde os requisitos mudam pouco e com pouca freqüência. O primeiro caso exige um processo apto a absorver mudanças sem "traumas" o segundo admite um processo onde temos mais artifícios para planejar e estimar. Todo sistema muda. Alguns mudam muito e outros pouco, para isso temos processos ágeis e processos não-ágeis.
que equipes grandes [o que é grande?] perde-se a comunicação [logo na era da facilidade das comunicações], que sistemas grandes precisam de metodologias burocráticas [mito], etc a dar a pau.
Uma equipe espalhada pelo país, onde os requisitos são levantados em Brasília, a análise é feita em Curitiba e o desenvolvimento é feito em João Pessoa não pode estar regida por um processo onde um grupo de pessoas está trabalhando no mesmo ambiente. Para o primeiro caso precisamos de documentação para viabilizar a comunicação entre as equipes, no segundo caso não precisamos.
Simples assim. Há contextos e contextos. Uns onde mudanças são bem vindas e necessárias e outros onde mudanças não são bem vindas e são desnecessárias. (Atenção, falo de muitas mudanças, mudança de rota de projeto, etc. etc. Mudança sempre vai existir.)
A construção de um controle de mísseis por exemplo precisam de uma bateria de testes gigantesco [as vezes sim de modelo formal] e por isso os mísseis construídos no Brasil apresentavam um erro de cálculo por volta de 400km [não queira estar a menos de mil km numa possível guerra no Brasil por causa do fogo amigo :)] porque o pessoal daqui não testava nada, só na prática [informações de um amigo que trabalhou no projeto].
Não sei se entendi direito a mensagem deste parágrafo... Os mísseis tinham erro de cálculo por que havia muitos testes?
Se você pratica agilidade, você:
* faz TDD, o que quer dizer que tem testes que evitam regressões e que
ainda documentam o sistema
* faz pair programming, que garante que o conhecimento dos vários
pedaços de um sistema não vivem da cabeça de uma pessoa, mas de várias
* faz auditoria de código, ainda como consequência de pair
programming, ninguém vai escrever porcarias com um papagaio de pirata
do lado
* faz reuniões diárias e retrospectivas semanais (ou quinzenais) sobre
o estado atual do projeto, levando o status dele a todos os envolvidos
Processos ágeis primam por fazer com que a informação não viva em
silos, mas sim espalhada pela equipe. Eles são bem mais próprios em
ambientes onde a rotatividade é alta.
> - Software funcionando versus documentação
> Fato: Nem todas as equipes têm o cliente acessível ou estão localizadas na mesma sala ou no mesmo prédio. A maioria dos projetos têm o cliente longe, têm dificuldade de
> marcar reuniões, tem vários stakeholders envolvidos e levantando requisitos conflitantes, etc. O software tem que funcionar, mas em vários contextos, para que ele funcione,
> precisamos de documentação para comunicar e para proteger o cliente, inclusive juridicamente. No mundo cruel as coisas funcionam assim também.
Mais uma vez, se a documentação tem valor pro cliente, ela deve ser
feita. Processos ágeis não abominam documentação, abominam
documentação inútil ou que "perde a validade" rápido demais. E se o
cliente quer isso tudo, a equipe pode demonstrar o quanto isso é
nocivo.
Operação padrão neles :D
> - Colaboração com o cliente versus contrato
> Fato: Essa é bem curta. Simplesmente muitos clientes só pagam se existir contrato e muitos não trabalham com desenvolvimento orientado a escopo. Isso não é só governo.
>
Opção deles. Mas eu não acho que um contrato de escopo fechado seja
impossível de se levar em um processo ágel
> - Resposta à mudança versus seguir planos
> Fato: Se estou num contexto onde posso planejar, onde meus requisitos não mudam a ponto de afetar minha estimativa de tempo e custo, por que não planejar? Muitas grandes > empresas do mundo, que estão ganhando muito dinheiro mesmo, trabalham todo dia neste contexto onde há subsidios para um planejamento rasoável. Onde um cliente tem um > problema com escopo definido, onde se elabora um projeto, o cliente aceita o prazo e escopo e paga pelo desenvolvimento.
>
Decidir mais cedo quando você poderia decidir mais tarde, com mais
informação, experiência e embasamento é uma péssima idéia. Mais uma
vez, recomendo fortemente a leitura do "Lean Software Development",
especialmente o capítulo "Decide as late as possible". E da mesma
forma, diversas empresas também ganham muito dinheiro (mais uma vez, a
Toyota, por exemplo) fazendo isso.
Depende e muito Rodrigo, por incríviel que pareça a influência do Beck para o TDD surgiu desse ramo chamado de "crítico" como o controle de um avião [que na verdade é um conjunto de softwares, cada dispositivos tem até sistema operacional próprio].Eles não usam Waterfall nisso,
Não digo que eles usam Waterfall. Digo que não usam processos ágeis. A agilidade de um processo está ligada à capacidade do processo suportar muitas mudanças, com alta freqüência. Não é o caso deste tipo de sistema.
Agilidade não é isso, isso é um dos benefícios ganhos.
na verdade a prática de testes surgiu fortemente nessa área, primeiro eles criam uma base considerável de testes [pelo menos o planejamento] e depois saem criando o código para passar nesses testes, claro que não é no esqueminha RED-GREEN-RED popularizado, mas isso influenciou demais o TDD.
Concordo que influenciou, mas não significa que o fato de processos ágeis serem test-driven ou até "orientados a testes" sejam adequados para sistemas críticos.
Sistemas críticos são orientados a testes por natureza, já viu a construção de asas de avião? Todo o sistema de testes é desenhado antes do desenho da propria asa :)
(...)Ainda há um enorme preconceito sobre o que é agile, como falta de documentação [mito], não planejamento [mito], apenas para sistemas mutáveis [que sistema não é mutável ao longo de seu ciclo de vida],
Sobre a tese de "mudabilidade" do sistema, ou mudança freqüente de requisitos, há sistemas onde os requisitos mudam muito, com muita freqüência, e sistemas onde os requisitos mudam pouco e com pouca freqüência. O primeiro caso exige um processo apto a absorver mudanças sem "traumas" o segundo admite um processo onde temos mais artifícios para planejar e estimar. Todo sistema muda. Alguns mudam muito e outros pouco, para isso temos processos ágeis e processos não-ágeis.
O processo de desenvolvimento é composto por, entre outras coisas, práticas de desenvolvimento, como TDD, pair programming, etc.
Eu posso ter um processo ágil com práticas "burocráticas" e vice-versa.
Mas há casos onde não posso atender às premissas dos processos ágeis, simplesmente por quê não é viável. Deixa eu passar rapidinho pelas premissas:
- Indivíduos e interações versus processos e ferramentas
Fato: Há contextos em que preciso suportar a mudança de indivíduos. Simplesmente não posso sustentar o funcionamento da empresa nos indivíduos. Preciso suportar mudança de pessoas sem afetar meus prazos e custos. Infelizmente é assim que o mundo cruel funciona. Em algum momento se meus desenvolvedores resolverem sair, a empresa tem que ser capaz de colocar outros no lugar e nem sentir falta dos que sairam.
- Software funcionando versus documentação
Fato: Nem todas as equipes têm o cliente acessível ou estão localizadas na mesma sala ou no mesmo prédio. A maioria dos projetos têm o cliente longe, têm dificuldade de marcar reuniões, tem vários stakeholders envolvidos e levantando requisitos conflitantes, etc. O software tem que funcionar, mas em vários contextos, para que ele funcione, precisamos de documentação para comunicar e para proteger o cliente, inclusive juridicamente. No mundo cruel as coisas funcionam assim também.
- Colaboração com o cliente versus contrato
Fato: Essa é bem curta. Simplesmente muitos clientes só pagam se existir contrato e muitos não trabalham com desenvolvimento orientado a escopo. Isso não é só governo.
- Resposta à mudança versus seguir planos
Fato: Se estou num contexto onde posso planejar, onde meus requisitos não mudam a ponto de afetar minha estimativa de tempo e custo, por que não planejar? Muitas grandes empresas do mundo, que estão ganhando muito dinheiro mesmo, trabalham todo dia neste contexto onde há subsidios para um planejamento rasoável. Onde um cliente tem um problema com escopo definido, onde se elabora um projeto, o cliente aceita o prazo e escopo e paga pelo desenvolvimento.
Atenção: Não estou indo contra métodos ágeis (sou um dos maiores entusiastas desta filosofia de desenvolvimento). Estou apenas mostrando um mundo com duas faces, que exigem abordagens diferentes (e distintas) para desenvolver software.
Rodrigo
Processos ágeis primam por fazer com que a informação não viva em
silos, mas sim espalhada pela equipe. Eles são bem mais próprios em
ambientes onde a rotatividade é alta.
Mais uma vez, se a documentação tem valor pro cliente, ela deve ser
feita. Processos ágeis não abominam documentação, abominam
documentação inútil ou que "perde a validade" rápido demais. E se o
cliente quer isso tudo, a equipe pode demonstrar o quanto isso é
nocivo.
Opção deles. Mas eu não acho que um contrato de escopo fechado seja
> - Colaboração com o cliente versus contrato
> Fato: Essa é bem curta. Simplesmente muitos clientes só pagam se existir contrato e muitos não trabalham com desenvolvimento orientado a escopo. Isso não é só governo.
>
impossível de se levar em um processo ágel
-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/ (en)
João Pessoa, PB, +55 83 8867-7208
Os requisitos não mudam, mas isso não quer dizer que o código não
mude. Eu nunca vi um software que fosse escrito todo de uma vez, sem
alterações.
A agilidade não suporta apenas as mudanças em alto nível, como também
as de baixo nível.
>
> Não me fiz entender...
> Sistemas críticos são orientados a testes sim. Não podem nem precisam ser
> ágeis. Pronto. Em outras palavras. O fato de processos ágeis serem
> orientados a teste não os habilitam a serem adequados para produzirmos
> sistemas críticos. Acho que agora ficou claro.
Com base no que você afirma que eles "Não podem nem precisam ser ágeis"?
Uma busca rápida no google sobre o assunto vai mostrar diversos
papers, notícias e textos sobre a aplicação de metodologias ágeis em
sistemas de missão crítica.
>
> Numa metáfora barata: Se alguém me contrata para desenvolver um vinho tinto.
> Eu sei os requisitos do vinho, cor, sabor, aroma, etc. Ao longo do
> desenvolvimento do vinho eu vou mostrando os resultados intermediários ao
> meu cliente e ele pode mudar alguns requisitos, para adequar minha solução
> ao que ele quer... Ele pode pedir para mudar o sabor, alterar a uva, mudar o
> aroma, etc. Mas o contratado ainda é fazer vinho. Esse tipo de
> desenvolvimento não precisa ser ágil e absorve mudanças.
Interessante. Só é pouco provável encontrar software assim. Software
que não muda nem evolui é lenda ou obsoleto, ao menos na maior parte
das vezes.
Rodrigo, se você não tem nem propriedade coletiva de código, não
existe agilidade. O seu processo é qualquer coisa, menos ágil.
>
> Sim. Mas se documentação tem valor para o cliente e ela afeta a agilidade do
> processo, não pode ser um processo ágil. Se preciso de documentação, não
> posso aceitar mudanças como num processo onde esta não é necessária ou é
> transiente.
>
Como é que a documentação afeta a agilidade?
Não entendi a relação de uma coisa com a outra. A documentação faz
parte dos entregáveis, ela afeta o projeto tanto quanto o código do
sistema produzido.
>
> Se tenho escopo fechado, não preciso de um processo ágil. Simples assim.
> Posso planejar, estimar, para o projeto todo.
>
Mais uma vez, opção sua. Eu, pessoalmente, prefiro deixar pra decidir
depois e aproveitar as vantagens de fazer isso.
Atenção: Não estou indo contra métodos ágeis (sou um dos maiores entusiastas desta filosofia de desenvolvimento). Estou apenas mostrando um mundo com duas faces, que exigem abordagens diferentes (e distintas) para desenvolver software.
Rodrigo
Não concordo, existe a forma certa e a forma errada, seguir um modelo UP ou waterfall [que sempre foi errado] hoje em dia com tanta evolução no desenvolvimento de software é a forma errada.
Temos maturidade hoje para escopos fechados, abertos, equpe remota, local, etc e tal.
Acho que chegamos no cerne da questão.
Quais as boas práticas de testes que eram executadas antes do surgimento das metodologias ágeis?
Ninguém disse que é exclusivo, mas processos ágeis tem isso como
práticas bem definidas, em RUP por exemplo TDD não é uma prática
definida.
Você pode fazer TDD com RUP?
Pode.
Os manuais de RUP incitam você a fazer isso?
Não.
Eu acho que a grande diferença dos processos ágeis (tirando Scrum,
claro) é exatamente o foco em práticas pra se chegar a um resultado
final e não no resultado final em si, que normalmente é o foco dos
outros processos.
Esse é o pior defeito do RUP, tudo "pode ser", tudo "cabe", é só
tentar com jeitinho :)
RUP é tão personalizável que você dificilmente vai ver duas aparições
dele ao menos parecidas, mesmo que seja no mesmo lugar.
E se o projetista de testes define que "vai usar TDD" nós temos uma
coisa muito errada na história, porque TDD não é pra escrever testes,
é pra guiar o design do sistema, os testes não são o fim, mas o meio,
não acho que seja papel de um projetista de testes (eu nem acho que
isso deveria existir, mas...) definir uma coisa como essa.
2008/11/14 Alan Kelon Oliveira de Moraes <al...@di.ufpb.br>:
>Esse é o pior defeito do RUP, tudo "pode ser", tudo "cabe", é só
> Cuidado para não queimar a língua :-) A primeira tarefa do projetista dos
> testes é justamente definir qual será a abordagem de testes, que pode ser,
> inclusive, TDD.
>
tentar com jeitinho :)
E se o projetista de testes define que "vai usar TDD" nós temos uma
coisa muito errada na história, porque TDD não é pra escrever testes,
é pra guiar o design do sistema, os testes não são o fim, mas o meio,
Alan, testes unitarios só vieram a tona depois do XP e principalmente se popularizaram depois do TDD, existir o conceito pode ter existido, qual ferramenta voce conhece antes do JUnit?
2008/11/14 Alan Kelon Oliveira de Moraes <al...@di.ufpb.br>
Milfont, todas que já existem hoje: teste unitário, de integração, de sistema, de carga, etc. Veja o capítulo 5 do SWEBOK. Test-Driven Development foi sim introduzido por Beck, mas não deve ser a única técnica de testes a ser usada.
As ferramentas de automação e os testes "unitários" já existiam bem
antes disso, em "Mythical Man Month" (no capítulo "Surgical Team")
Brooks já se referia a "testing pieces of work" e também "tests for
the whole thing". A diferença é que nessa época, pela dificuldade de
se disseminar as coisas, cada equipe fazia o seu próprio
"automatizador de testes", o que provavelmente eram apenas um conjunto
de Makefiles.