pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
Voltei a programar - A Elaboração do Sistema

Se bem se recordam (não foi assim há tanto tempo), estou a meio de uma história sobre a conciliação entre formalidade e agilidade... Entremos nas fases mais interessantes. No post anterior descrevi a fase de Concepção que não tem muito que saber. Avancemos para a próxima.

Elaboração

O Problema

Na fase de elaboração realiza-se a análise funcional e técnica: elaboramos o caderno de requisitos; definimos a arquitectura do sistema; enquadramo-lo com os sistemas e a infra-estrutura existente; fazemos um desenho detalhado do sistema entre outras tarefas. O objectivo é ter tudo o mais planeado possível para diminuir o impacto dos imprevistos... bla, bla, bla. Todos sabem como é, não vale a pena estar a repetir-me. Como provavelmente saberão, as metodologias ágeis não favorecem esta aproximação, pelo que me encontrei num dilema: o facto é que tinha de apresentar aqueles deliverables, mas eu queria à viva força tentar mitigar os problemas deste modo de trabalhar. Como conciliar as duas coisas?

A Solução

A resposta passou pelo aproveitamento do ambiente .Net e das ferramentas que a comunidade disponibiliza e, claro, pela aceitação dos chefes desta... experiência. Uma coisa que defini à partida foi que não queria fazer documentos Word inúteis, como aqueles que especificam o desenho do sistema, já que me parecem uma violação flagrante do princípio DRY (Don't Repeat Yourself). Por outro lado, queria tentar montar desde o início um mecanismo iterativo, que me impusesse um ritmo saudável.

Os meus (três?) leitores regulares do meu blog irregular provavelmente já sabem a resposta: montar a Integração Contínua já nesta fase e programar desde o princípio. E foi mesmo a primeira coisa que fiz nesta fase.  Montei todo o ambiente de Integração Contínua:

  • Criei imediatamente a estrutura do projecto no sistema de controlo de versões;
  • Criei a solução no Visual Studio.Net;
  • Configurei um projecto no CruiseControl.Net;
  • Criei o script de build, com o Nant;
  • Muito importante nesta fase, montei desde logo o FxCop e o NDoc no processo de build;

Depois de tudo montado, iniciei a especificação do código (ou desenho, ou modelação, ....), tal como necessário de acordo com os nossos métodos em vigor. Comecei por analisar os requisitos (que tentei criar em forma de user stories) e procurar os conceitos principais (não sei se alguma vez falei da Linguagem Ubíqua ou não... um dia mais tarde) e depois parti para o desenho detalhado do modelo de objectos.

Foi neste momento que realmente comecei a tirar partido do ambiente de Integração Contínua. No modelo tradicional, o desenho detalhado faz-se através de especificações em documentos Word (eventualmente com UML à mistura) que depois são transformadas em código na fase seguinte. Eu saltei os documentos e comecei logo com o código, mas obedecendo ao facto de esta fase ser somente de desenho:

  • Criei apenas os objectos e as suas interfaces. Não criei o corpo dos métodos.
  • Utilizei intensivamente os Xml Docs.

O facto de ter realizado o desenho detalhado em código ofereceu-me várias vantagens:

  • Obedeci a todos os requisitos, já que o código é apenas uma outra forma de documentação;
  • Adiantei trabalho, já que a Integração Contínua ia ser montada de qq das formas;
  • Graças ao NDoc, gerei documentação em HTML e CHM de forma automática, sendo que é possível criar um formato de documentação Word, pelo que temos essa documentação à mesma. O ponto importante é que a fonte é comum, pelo que não existem dessincronizações.
  • Como o desenho foi realizado directamente no código, foi possível ir compilando tudo a cada momento, validando desde logo uma série de situações.
  • Graças ao FxCop, em cada momento da "especificação" foi possível validar o desenho contra as guidelines da Microsoft.

Um dos riscos desta abordagem, pelo menos do ponto de vista de quem defende uma fase de desenho separada da construção, é que a tendência dos programadores para começarem imediatamente a codificar tudo (dar comportamento aos objectos) e não apenas as interfaces é demasiado grande. Na minha experiência, apesar de ser totalmente a favor desse modelo (com algumas regras, naturalmente), consegui evitar a tentação, não foi difícil. Acho que na prática, não é um problema muito grande.

Em resumo, apesar de ter de seguir uma metodologia por fases, foi possível introduzir alguma agilidade no processo. Pouca, é verdade, mas com algumas vantagens que me parecem evidentes. O desenho detalhado que fiz tornou a fase de construção mais simples? Ajudou-me mesmo que não tenha me tenha impedido de redesenhar o modelo nalguns locais?

Na fase seguinte, da Construção foi possível introduzir bastante mais agilidade no processo, com resultados (mais uma vez) muito satisfatórios, mas estou a pôr o carro à frente dos bois...


Posted 28-6-2005 8:21 por João Hugo Miranda

Comments

Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Nao sei se estavas a contar comigo na lista; se nao estavas, entao sao pelo menos 4 leitores regulares :)
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Cinco!

Pelo que vi, utilizas a estrutura do sistema, auxiliada pelos comentários para tentar aumentar a velocidade das fases de análise/projecto. Isso é porreiro para definir a estrutura, mas como modelas/documentas a dinamica do sistema?
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Cinco leitores! :)

Pedro, o que queres dizer com modelar/documentar a dinâmica do sistema? Modelar o comportamento dos objectos?

João
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Bela metodologia.

Sem ainda experimentar, gostaria que pudesses detalhar um pouco mais sobre a utilidade do NDoc, FxCop e Nant.

Pelo que vi do NDoc é como o VBCommenter e uma cena em C# que não me recordo o nome. Quais a vantagens de usar o NDoc em relação a estas ferramentas?

Que informação relevante retiras do FxCop?

Em relação ao Nant, gostaria de saber porque o usas? Para que necessitas de um build externo ao .NET para criares a tua aplicação.
Penso que não entendi muito be a necessidade desta ferramenta.


(())
Esqueleto
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Boas

Este metodo de fazer código prototipo para ajudar na fase de desenho da implementação não é nova mas realmente ainda não tinha visto isto aplicado a um cenário de integração continua.

Em todo o caso acho que se usas este metodo podes até secalhar aproveitar o Visio para fazer os "bonecos" com base nas tuas classes que entretanto já criaste. É um extra.

Apenas vejo um potencial problema. Todos sabemos de que normalmente durante o ciclo de desenvolvimento muitas vezes é preciso mudar a estrutura base de uma parte do projecto mais que não seja porque entretanto o cliente mudou a especificação parcialmente devido a novas necessidades. Poderá ser mais moroso, embora agora não esteja a pensar em nenhum caso especifico, ter de estar a alterar source code e garantir que tudo continua a compilar sem erros de forma a gerar a documentação.

No entanto penso que isso pode ser facilmente ultrapassável usando metodologias de refactoring aplicadas a estra fase inicial da implementação o que poderá ser também uma area a abordar neste cenário.

Estás de parabens. Já agora, podes dar a dica ao pessoal de que ferramentas usas na fase de análise funcional além dos tradicionais word, excel e visio? :)

E qual é o sistema de Source control que usas já agora?

Cheers
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Eu estou fresco da cadeira de Metodologias de Desenvolvimento de Software onde demos basicamente o modelo RUP.

Aprendi que comportamento = estrutura + dinamica. Um diagrama de classes modela a estrutura de um sistema. A sua dinamica é modelada por um diagrama de sequência ou de estados. Ao longo da cadeira aprendi que modelar a dinamica é importante, porque nos permite analisar a priori como é que as diversas entidades comunicam ao longo do tempo.

Tu podes ter as classes A e B, bem documentadas. Mas como documentas/modelas a interacção entre elas? A sequência de mensagens(métodos) entre elas? Acho isto importante para acentar ideias e até para depois criar uns testes com base na dinamica.
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Olha k devem ser (seis) leitores! :)
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
João,

Quanto ao Visio, não fiz referência mas faço o reverse engineering, como sugeriste. :)

Quanto à tua preocupação em relação à documentação, não sei se a percebi bem, mas é legítima. Manter a documentação toda certinha é uma chatice (já agora, não sou a favor de documentação exaustiva, só o fiz porque não tinha alternativa).

Utilizei activamente o refactoring, mas mais na fase de construção. No entanto, o problema de manter a documentação sincronizada mantém-se em parte...

O Source Control é o SourceSafe, mas tenho uma (bonita) aspiração de nos livrarmos dele tão cedo quanto possível (o que quer dizer que vai levar meses).
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 1-7-2009 1:09
Pedro,

Os diagramas de sequência podem ser bastante úteis, em determinadas situações. Quando os crio, escrevo-os em papel, porque o meu objectivo é precisamente assentar ideias, explorar possibilidades e não documentar a dinâmica.

A questão é que documentar a dinâmica é o mesmo que tentar acertar num mosquito com uma fisga num quarto às escuras. É impossível.
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Nao sei se estavas a contar comigo na lista; se nao estavas, entao sao pelo menos 4 leitores regulares :)
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Cinco!

Pelo que vi, utilizas a estrutura do sistema, auxiliada pelos comentários para tentar aumentar a velocidade das fases de análise/projecto. Isso é porreiro para definir a estrutura, mas como modelas/documentas a dinamica do sistema?
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Cinco leitores! :)

Pedro, o que queres dizer com modelar/documentar a dinâmica do sistema? Modelar o comportamento dos objectos?

João
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Bela metodologia.

Sem ainda experimentar, gostaria que pudesses detalhar um pouco mais sobre a utilidade do NDoc, FxCop e Nant.

Pelo que vi do NDoc é como o VBCommenter e uma cena em C# que não me recordo o nome. Quais a vantagens de usar o NDoc em relação a estas ferramentas?

Que informação relevante retiras do FxCop?

Em relação ao Nant, gostaria de saber porque o usas? Para que necessitas de um build externo ao .NET para criares a tua aplicação.
Penso que não entendi muito be a necessidade desta ferramenta.


(())
Esqueleto
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Boas

Este metodo de fazer código prototipo para ajudar na fase de desenho da implementação não é nova mas realmente ainda não tinha visto isto aplicado a um cenário de integração continua.

Em todo o caso acho que se usas este metodo podes até secalhar aproveitar o Visio para fazer os "bonecos" com base nas tuas classes que entretanto já criaste. É um extra.

Apenas vejo um potencial problema. Todos sabemos de que normalmente durante o ciclo de desenvolvimento muitas vezes é preciso mudar a estrutura base de uma parte do projecto mais que não seja porque entretanto o cliente mudou a especificação parcialmente devido a novas necessidades. Poderá ser mais moroso, embora agora não esteja a pensar em nenhum caso especifico, ter de estar a alterar source code e garantir que tudo continua a compilar sem erros de forma a gerar a documentação.

No entanto penso que isso pode ser facilmente ultrapassável usando metodologias de refactoring aplicadas a estra fase inicial da implementação o que poderá ser também uma area a abordar neste cenário.

Estás de parabens. Já agora, podes dar a dica ao pessoal de que ferramentas usas na fase de análise funcional além dos tradicionais word, excel e visio? :)

E qual é o sistema de Source control que usas já agora?

Cheers
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Eu estou fresco da cadeira de Metodologias de Desenvolvimento de Software onde demos basicamente o modelo RUP.

Aprendi que comportamento = estrutura + dinamica. Um diagrama de classes modela a estrutura de um sistema. A sua dinamica é modelada por um diagrama de sequência ou de estados. Ao longo da cadeira aprendi que modelar a dinamica é importante, porque nos permite analisar a priori como é que as diversas entidades comunicam ao longo do tempo.

Tu podes ter as classes A e B, bem documentadas. Mas como documentas/modelas a interacção entre elas? A sequência de mensagens(métodos) entre elas? Acho isto importante para acentar ideias e até para depois criar uns testes com base na dinamica.
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Olha k devem ser (seis) leitores! :)
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
João,

Quanto ao Visio, não fiz referência mas faço o reverse engineering, como sugeriste. :)

Quanto à tua preocupação em relação à documentação, não sei se a percebi bem, mas é legítima. Manter a documentação toda certinha é uma chatice (já agora, não sou a favor de documentação exaustiva, só o fiz porque não tinha alternativa).

Utilizei activamente o refactoring, mas mais na fase de construção. No entanto, o problema de manter a documentação sincronizada mantém-se em parte...

O Source Control é o SourceSafe, mas tenho uma (bonita) aspiração de nos livrarmos dele tão cedo quanto possível (o que quer dizer que vai levar meses).
Anonymous wrote re: Voltei a programar - A Elaboração do Sistema
on 2-7-2009 1:47
Pedro,

Os diagramas de sequência podem ser bastante úteis, em determinadas situações. Quando os crio, escrevo-os em papel, porque o meu objectivo é precisamente assentar ideias, explorar possibilidades e não documentar a dinâmica.

A questão é que documentar a dinâmica é o mesmo que tentar acertar num mosquito com uma fisga num quarto às escuras. É impossível.

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems