Feed Artigos Comentários

Arquivo de CategoriasDesenvolvimento de Software



Desenvolvimento de Software Hildebrando em 11 Ago 2007

High-Tech e High-Touch

Se você é da área de tecnologia (ou não) ja deve ter ouvido a palavra High-Tech associada a um computador, acessório, veículo ou midia. A tradução fiel para este termo é algo altamente tecnológico.

Já a palavra High-touch significa algo altamente assessorado, com uma atenção e atendimento especial. Por exemplo, se uma pessoa te faz uma visita é uma interação high-touch pois você esta em contato direto com o individuo.

Agora, o que as palavras têm em comum além do “High” ?

Levando para o campo do desenvolvimento de software a ideia é que, em algumas situções, você precisa desenvolver algo extremamente high-tech, ou seja, utilizar dos mais avançados recurso para possibilitar o “high-touch”. Imagine um aplicação de Broker (compra e venda de ações) em que a utilização de alta tecnologia é indiscutível dado o numero de integrações, a robustes, a escalabilidade e a disponibilidade do serviço, porém os canais de suporte são falhos quanto ao “touch”. Como suporte demorado, atendimento somente via ferramentas de abertura de chamados e telefones burocráticos. Aplicar o “high-touch” é essencial e de implantação não tão complicada :

Destacando duas aplicaçoes interessantes de “High-touch” em sistemas :

1 - Disponibilizar ferramentas de chat online além dos tradicionais canais de telefones. Um chat tem uma linguagem mais informal e mais direta. O usuario consegue detalhar algumas informações ou mesmo ter agilidade para ter uma pergunta respondida. Por ser um aplicativo este pode ser desenvolvido para encontrar um atendente para determinado perfil, armazenar o historico da conversa, suporta o usuario copiar/colar mensagens do sistema.

2 - Acompanhar as ações do usuario (movimento do mouse, digitação, cliques, etc) , através da utilização de ferramentas de acesso remoto.

a) VNC. É um dos softwares mais famosos do segmento, em que a unica necessidade é o usuario a ser acessado instalar o VNC server. Para acessar um computador o atendente utiliza o VNC client.

b) Remote Desktop Connection é um aplicativo nativo do Windows XP. Quem for acessar precisa apenas digitar o IP do usuario que ja consegue acesso direto. Neste caso não é necessário instalar nenhum aplicativo.

c) LogMeIn que, diferente dos outros, não obriga o usuario a possuir um IP quente (IP válido), podendo ser utilizado dentro de uma rede interna. Tambem necessita da instalação de um programa na estação a ser gerenciada remotamente.

Todos eles exigem senhas de autenticação para garantir a segurança no acesso.

Noticias & Java & Desenvolvimento de Software Hildebrando em 08 Jul 2007

Projeto querotrabalharcomjava.com.br

Colocamos no ar um produto 2Solutions chamado “www.querotrabalharcomjava.com.br”. Basicamente é uma iniciativa para capacitar o pessoal que esta querendo entrar no mercado de trabalho Java.

Vale a pena para pessoas que tem conhecimento na linguagem (fizeram cursos ou aprenderam na faculdade) mas não conseguiram o seu emprego na área pois as empresas querem pessoas com experiência (mesmo para Junior - contraditório não ?), ou mesmo para quem esta procurando uma recolocação para a área de desenvolvimento Java.

Para valores e mais informaçoes acessar o site http://www.querotrabalharcomjava.com.br.

Java & Desenvolvimento de Software Hildebrando em 01 Jun 2007

Projeto OpenSource (GPL) - Hibernate Web Paginator

Colocamos no java.net o projeto Hibernate Web Paginator. É uma biblioteca para facilitar a criação de tabelas de paginação nas aplicações que usam Hibernate. O grande diferencial da biblioteca frente a outras implementações é a simplicidade e também a integração com Hibernate, possibilitando paginações com recursos de maxResults, ou seja, evitar apenas as paginações com dados de sessão.

Se quiser participar é só entrar no endereço https://hibernatewebpaginator.dev.java.net

Desenvolvimento de Software Hildebrando em 30 Jan 2007

Você sabe o significado das licensas de Software?

Ao baixar a documentação da nova versão do JFreeChart (API Java para construção de gráficos) um ponto chamou a atenção. Como o nome da biblioteca á JFreeChart suponho que posso fazer o que eu quiser com a biblioteca, como baixar, usar, alterar, incorporar, vender e ate mudar de nome. Porém ao ler com mais detalhes a licensa percebi algumas restrições.

São estas restrições que definem o tipo de licensa. Existem inúmeras licensas para software. O motivo disso é que uma pessoa pode desenvolver um determinado aplicativo ou biblioteca e, mesmo disponibilizando gratuitamente, quer manter o controle de atualizações, por exemplo.


Public Domain
GNU General Public License - GPL
GNU Library General Public License - LGPL
BSD
Apache Licenses

no link (livro) http://www.oreilly.com/catalog/opensources/book/perens.html o autor detalha algumas licensas.

Desenvolvimento de Software Hildebrando em 28 Jan 2007

Trabalho colaborativo entre equipe de programação e design.

O desenvolvimento de qualquer software envolve fazes iterativas que, com a união de diversos artefatos, resultam no produto final. Existem inúmeras tecnicas para esse desenvolvimento, no entanto, a que eu considero das mais produtivas é quando partimos de um protótipo funcional.

Neste modelo o analista, o designer (visual e HTML) e o cliente desenvolvem o sistema baseado nas telas e na navegação entre elas. É uma abordagem interessante pois o cliente ja esta vendo o sistema e assim consegue criticar e requisitar mudanças de forma mais precisa. Após a aprovação do protótipo funcional a equipe de programação faz a mágica, ou seja, adiciona ao HTML estático alguma tecnologia dinâmica (ASP,JSP,PHP,…).

Após a finalização desta etapa surgem as manutenções, e é ai que começam os problemas.

Agora as telas não são mais simples HTML que podem ser editados em qualquer aplicativo, eles são telas que contêm codigo dinâmico que interagem com banco de dados. Se o seu designer realizar as mudanças no HTML e passar para o programador, este tera um trabalho dobrado de identificar aonde foram feitas as mudanças.

Para evitar isso estou descrevendo um modelo de desenvolvimento colaborativo que suporta ambos trabalharem sobre os mesmos arquivos e com a utilização de repositórios (CVS e SVN) para facilitar a integração.

1 - Diferença de ferramentas

O Designer utiliza um conjunto de ferramentas completamente diferente das ferramentas utilizadas pelo programador. Não adianta impor ferramentas para nenhum dos dois pois isto, ao invés de ajudar, pode comprometer a produtividade.

Para isso servem os clientes de repositorio. As ferramentas utilizadas pela equipe de programação, na maioria das vezes, ja suportam versionadores (CVS e SVN) por tanto o que falta é adicionar estas funcionalidades para o designer. Uma ferramenta interessante é o Tortoise. O fato de ele integrar o seu repositorio com o Windows Explorer facilita para o designer pois este pode editar seus arquivos na ferramenta que ele deseja e, na hora de “commitar”, basta faze-lo pelo Explorer mesmo.

2 - Configurando o ambiente

Para baixar um projeto do repositorio :
a) Entre no Windows Explorer
b) Crie um diretorio para armazenar seus projetos. (Ex. REPOSITORIO)
c) Dentro deste diretorio clique com o botão direito e selecione “CVS Checkout”
d) Informe todos os dados do seu servidor e finalize.

Com os arquivos baixados o que precisamos fazer é configurar o banco de dados e web server para possibilitar que o designer trabalhe com os arquivos ja aproveitando os recursos dinâmicos.


Infraestrutura
1 - liberação do acesso ao banco de dados de desenvolvimento pelo usuario do designer.
2 - Configuração do Web Server para acessar o banco de dados de forma remota.

No tomcat 5.5 crie um arquivo NomeDoSeuProjeto.xml e coloque na pasta TOMCAT_HOME/conf/Catalina/localhost.

O conteudo do arquivo deve indicar a localização fisica dos seus arquivos.

<Context docBase=”C:\TORTOISE-CVS_FOLDER\FusorOnLine\WebContent” path=”/FusorOnLine” reloadable=”true”>
</Context>

3 - Classes

Para uma manutenção sobre codigo ja existente é preciso que as modificações funcionem com acesso a banco e tudo mais. Para habilitar isso a equipe de programação precisa gerar um arquivo contendo os .class gerados. Este arquivo deve ser copiado para o diretorio /WEB-INF/lib. Se possível configure para ignorar este arquivo no ato do versionamento do diretorio.

O motivo principal deste arquivo é evitar que se versione os .class

4 - Dinâmica

O designer agora tem acesso a todo o código utilizado pela equipe de programação. Uma alteração na tela ja pode ser atualizada. Para uma maior produtividade um pequeno treinamento sobre JSTL e Expression Language, para o seu designer, pode resultar no modelo utópico de separação de responsabilidades em que o programador se preocupa apenas com regra de negócio, persistencia, validação e o deisgner fica responsavel por 100% da parte de apresentação.

Desenvolvimento de Software Hildebrando em 05 Nov 2006

Convention over Configuration

Você só deve configurar aquilo que for específico, o que for padrão deve ser utilizado normalmente. Assim como padrões de projeto talvez você ja utilize mas nem sabia, portanto aqui vai um exemplo.

Imagine que você tem uma tela de edição de dados de uma pessoa. Junto a esta tela você tem o Controller (Servlet), o objeto de dominio (POJO) e a tabela PESSOA. Além desta tela você tem outra tela de pesquisa de pessoas. Se você seguir o padrão de nomenclatura, por exemplo. A Classe Pessoa esta ligada a tabela PESSOA, por tanto o arquivo de tela é o Pessoa.jsp você esta seguindo uma determinada convenção, evitando criar arquivos de configuração para montar o fluxo.

O conceito é bem simples. Para as situações normais basta seguir as convenções que o seu sistema ja deve estar preparado para tratar estes padrões.

Com o Struts uma forma interessante da utilização de CoC é com os wildcards das Actions. Se todas as suas Actions forem SalvarProduto, SalvarCliente, SalvarPedido você pode declarar a Action Salvar* , e por convenção pode se chegar ao componente de serviço ou de domínio.

Um link sobre o assunto Struts - Wildcard http://www.twdata.org/struts-wildcard/

Desenvolvimento de Software Hildebrando em 05 Nov 2006

A produtividade de Ruby on Rails - I.

Você ja teve ter ouvido falar de uma nova linguagem que pretende revolucionar o desenvolvimento de software. Ele chama Ruby e foi inventada a algum tempo visando produtividade.

Eu olho novas tecnologias com uma certa desconfiança, isso se deve a inumeras que ja vi chegar, ficar e passar. Porém vou começar um estudo pesado em Ruby pois pode contribuir com o nosso processo.

A Linguagem Ruby é uma linguagem bem simples, com tipagem fraca e outros recursos mais dinâmicos.

Sugiro o tutorial http://kb.reflectivesurface.com/br/tutoriais/rubyOnRails/

1 - Comece fazendo o download do Ruby.

2 - De uma analisada na documentação. Se você tem uma base de OO vai entender o porque da linguagem simples.

3 - Na instalação Windows (que eu utilizei) você ira encontrar um aplicativo chamado de RubyGems. É como se fosse um gerenciador de pacotes. Portanto qualquer novo pacote deve ser feito utilizando seus comandos. O pacote que iremos utilizar é o Rails.

gem install rails --include-dependencies

Na instalação ja foi adicionado no PATH o diretorio /ruby/bin.

Devido a todas as dependencias a instalação demora alguns minutos. Infelizmente sem barra de progresso portanto tenha paciência se a tela ficar estática por um tempo. O resultado final deve ser :


Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rails-1.1.6
Successfully installed activesupport-1.3.1
Successfully installed activerecord-1.14.4
Successfully installed actionpack-1.12.5
Successfully installed actionmailer-1.2.5
Successfully installed actionwebservice-1.1.6
Installing ri documentation for activesupport-1.3.1...
Installing ri documentation for activerecord-1.14.4...
Installing ri documentation for actionpack-1.12.5...
Installing ri documentation for actionmailer-1.2.5...
Installing ri documentation for actionwebservice-1.1.6...
Installing RDoc documentation for activesupport-1.3.1...
Installing RDoc documentation for activerecord-1.14.4...
Installing RDoc documentation for actionpack-1.12.5...
Installing RDoc documentation for actionmailer-1.2.5...
Installing RDoc documentation for actionwebservice-1.1.6...

4 - Após a instalação vamos criar a estrutura básica de uma aplicação WEB.

rails c:\ruby\hellorails

Este processo é bem rápido e ao fim você tem uma estrutura de diretórios :

+ app
+ components
+ config
+ db
+ doc
+ lib
+ log
+ public
+ script
+ test
+ tmp
+ vendor
+ Rakefile
+ README

Entre no diretório

cd c:\ruby\hellorails

Inicie o servidor

ruby script/server

=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2006-11-04 20:59:05] INFO WEBrick 1.3.1
[2006-11-04 20:59:05] INFO ruby 1.8.4 (2006-04-14) [i386-mswin32]
[2006-11-04 20:59:05] INFO WEBrick::HTTPServer#start: pid=3732 port=3000

Se tudo funcionou como o previsto basta acessar o servidor no endereco http://localhost:3000

5 - Vamos começar nosso projeto fazendo o famoso CRUD (Create,Retrieve,Update,Delete). Para integrar com o MySQL voce precisa alterar o arquivo config/database.yml.


gem install mysql

Select which gem to install for your platform (i386-mswin32)
1. mysql 2.7.1 (mswin32)
2. mysql 2.7 (ruby)
3. mysql 2.6 (ruby)
4. mysql 2.5.1 (ruby)
5. Cancel installation
> 1
Successfully installed mysql-2.7.1-mswin32
Installing ri documentation for mysql-2.7.1-mswin32...
Installing RDoc documentation for mysql-2.7.1-mswin32...

Copie o arquivo libmysql.dll que esta localizado no diretorio bin do MySQL para o diretorio bin do ruby.

6 - O Rails utiliza o modelo MVC como sua estrutura camadas, por tanto execute “ruby script/generate” para criar seus arquivos “controller” e “model”.

6.1 - Controller

C:\ruby\hellorails>ruby script/generate controller Produto editar pesquisar
exists app/controllers/
exists app/helpers/
create app/views/produto
exists test/functional/
create app/controllers/produto_controller.rb
create test/functional/produto_controller_test.rb
create app/helpers/produto_helper.rb
create app/views/produto/editar.rhtml
create app/views/produto/pesquisar.rhtml

“ruby script/generate controller Produto editar pesquisar”

Produto = É o nome do controller
editar = É o nome de uma View
pesquisar = É o nome de outra View

6.2 - Model

C:\ruby\hellorails>ruby script/generate model Produto
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/produto.rb
create test/unit/produto_test.rb
create test/fixtures/produtos.yml
create db/migrate
create db/migrate/001_create_produtos.rb

“ruby script/generate model Produto”
Produto = É o nome do Model

7 - Para testar se esta tudo funcionando você deve configurar suas paginas no arquivo app/controllers/produto_controller.rb

class ProdutoController < ApplicationController

def index
render_text "Hello, world! Pagina principal"
end

def editar
render_text "Hello, world! Editar"
end

def pesquisar
render_text "Hello, world! Pesquisar"
end
end

Cada def contida no arquivo representa seu método e este indica cada requisição. Portanto para entrar no metodo pesquisar basta acessar a pagina http://localhost:3000/produto/pesquisar

8 - Para completar o fluxo precisamos criar um novo componente view. Na verdade este ja foi criado no momento que criamos o controller, portanto basta alterar seu codigo para

def editar
end

Ao acessar a pagina esta ira redirecionar para o arquivo “app\views\produto\editar.rhtml”

Notem que não foi feita configuração em nenhum arquivo ainda. O fluxo de camadas é executado sguindo alguns padrões de nomenclatura.

9 - Realizando o CRUD. Como tudo ja esta funcionando vamos criar uma tabela de testes em todos os ambientes descritos no arquivo config/database.yml (hellorails_development , hellorails_test , hellorails_production).


CREATE TABLE PRODUTOS
(
id INTEGER NOT NULL PRIMARY KEY,
descricao VARCHAR(50) NOT NULL,
detalhes VARCHAR(255) NOT NULL,
preco DECIMAL(10,2) NULL
);

ALTER TABLE PRODUTOS MODIFY COLUMN `id` INTEGER NOT NULL DEFAULT NULL AUTO_INCREMENT;

Repare que a tabela foi criada no plural. O Rails vai fazer a co-relação de singular/plural.

Um recurso interessante é o scaffolding. Para utiliza-lo basta alterar o seu arquivo controller.


class ProdutoController < ApplicationController

scaffold :produto

end

Este é um recurso que mapeia as operações CRUD para esta determinada tabela. O interessante é que não há geração de código, portanto se for incluido um novo campo na tabela a tela será alterada também.

10 - Uma coisa que você deve estar questionando é quanto a customização. As telas criadas seguem templates do Rails, e com certeza em seus projetos você ira utilizar um padrão diferente. O Rails tem essa ideia de havendo necessidade de mudança é so você descrevê-las.

produto_controller.rb
class ProdutoController < ApplicationController

scaffold :produto

layout "default"

def list
@entries = Produto.find_all nil, "descricao"
end

def edit
@entry = Produto.find(@params["id"])
end

end

list.rhtml
<table border="1" cellpadding="4" cellspacing="0" width="90%">
<tr>
<th>Descricao</th>
<th>Preco</th>
<th colspan="3">Actions</th>
</tr>
<% @entries.each do |entry| %>
<tr>
<td><%= entry.descricao %></td>
<td><%= entry.preco %></td>
<td><%= link_to "Show", :action => "show", :id => entry.id %></td>
<td><%= link_to "Edit", :action => "edit", :id => entry.id %></td>
<td><%= link_to "Destroy", :action => "destroy", :id => entry.id %></td>
</tr>
<% end %>
</table
<p><%= link_to "New", :action => "new" %></p>

edit.rhtml
<%= start_form_tag :action => "update" %>

<%= hidden_field 'entry', 'id' %>

<p>Descricao:<br / ><%= text_field 'entry', 'descricao' %></p>
<p>Preco:<br / ><%= text_field 'entry', 'preco' %></p>
<p>Detalhes:<br / ><%= text_area 'entry', 'detalhes', "rows" => "3" %></p>

<input type="submit" value="Update" />

<%= end_form_tag %>

Desenvolvimento de Software Hildebrando em 17 Out 2006

Quer ser um desenvolvedor Java?

Utilizo a tecnologia Java em todos os projetos da 2Solutions, com raras excessões. Com isso acabei me tornando um especialista. Tenho consciência que não sei tudo, aliás acredito que não existe aquele “especialista de tudo”.

Quero indicar alguns caminhos para qualquer um virar um especialista Java. Com certeza ja existe algum texto semelhante na internet (google), no entanto quero fazer uma coisa diferente, focada no perfil do nosso pessoal. E como eles viraram especialistas também.

1 - Faça uma faculdade de tecnologia
Existe muita discussão neste assunto, precisa ou não precisa fazer uma faculdade para entrar no mercado de trabalho de TI. Uma coisa que aprendi na minha carreira de instrutoria Java é que só o fato de a pessoa fazer uma faculdade, as coisas acabam fluindo mais fáceis. Se você vai fazer ou não, fica a seu criterio, porém saiba que nem todo mundo é auto-didata, inclusive a grande minoria. Mesmo a faculdade sendo dispersiva em alguns assuntos, como as inúmeras materias de matemática em Ciência da Computação, tudo acaba agregando na sua formação.

2 - Faça um curso de Java
Existem livros, tutorias, apostilas, exemplos e mini-cursos que ajudam muito no seu aprendizado. Porém você tem que ter experiência com este estudo auto-didata. Exige disciplina e organização. A ideia de fazer curso envolve apenas 2 variaveis. Tempo e dinheiro. Se você tem tempo e não tem dinheiro estude em casa. Se você tem dinheiro e não tem tempo faça um curso.

Java em si é uma lingaguem simples.O grande problema é a parte de orientação a objetos. Isso é complicado. Envolve conceitos de alto nivel e abstrações. Aprender Java é diferente de aprender VB que você compra uma revista na banca e naquele mesmo dia você ja tem algo funcionando. É por isso que eu indico fazer cursos.

3 - A unica coisa que começa de cima é buraco
Tradução para paciência. Nesta hora precisamos ter humildade e seguirmos o papel de aprendiz. Você pode ser especialista em outras linguagens ou ja ser um cara que conhece muito de Hardware, no entanto com linguagens de programação o papo é diferente. Voce tem que aprender as manhas. Apanhar muito. E acima de tudo pergutar. Entre em foruns e listas de discussão. Mande duvidas, sempre seguindo as boas maneiras nestes ambientes.

4 - Arrume um trabalho na área
Essa parte é a mais difícil, porque as empresas so querem gente com experiência. Dai aparece o problema do ovo e da galinha. Sugestão: Faça projetos seus. Desenvola uma agenda, um cadastro de estoque da sua casa, um controle de gastos com combustível. Eu faço um trabalho de seleção aqui na empresa e para mim um projeto pessoal ou academico serve sim como experiência, e inclusive tem um atrativo a mais pois demonstra pró-atividade.

5 - Banco de Dados
Não pense em se tornar um especialista de banco de dados. Você tem que conhecer SQL. O banco é indiferente. Mas aproveite e faça o seguinte. Entre no site do MySQL e baixe o MySQL e suas ferramentas. Falo do MySQL pois considero a versão para Windows muito NNF (Next,Next,Finish), isso é bom para quem esta começando. Fazer um curso de SQL pode te ajudar muito, porém não é imprescindível, SQL é um pouco mais simples que as linguagens de programação de alto nível. Porém cai naquele mesmo assunto que conversei.

6 - Tenha contatos da área
Não estou falando em ter melhores amigos na área e sim formar uma rede de conhecidos que tenham o gosto pela tecnologia como característica comum. Nos cursos voce conhece muita gente, outros lugares são os eventos. Acho que as unicas panelas que existem nos eventos são dos que estão palestrando e dos que não estão palestrando. Não precisa comprar o livro ‘como fazer amigos’, apenas vai se misturando com pessoas que estão em situações parecidas com a sua. Isso vai ajudar a todos.

7 - Atividades e Cronograma (Estratégia Auto-didata freestyle)

a) Compre um livro de Java Fundamentos - 1 dia
b) Leia o livro (pois é, só comprar não adianta) - 1 mês - Se você achou muito é porque nunca leu um livro de tecnologia. Estas não são leituras narrativas. Você tem que sempre voltar, reler e refazer exercícios.
c) Compre um outro livro de JEE - 1 dia - Esta parte JEE é a que envolve WEB e Serviços de mais alto nível. Resumindo, é aonde esta o dinheiro ($$$$$). NUNCA COMECE POR UM LIVRO DE JEE SEM ANTES PASSAR PELOS FUNDAMENTOS.
d) Leia o livro, faça os exercícios e desenvolva um sistema de cadastro de Jogadores de futebol. Utilizando JSP/Servlets e JDBC - 1 mês
e) Desenvolva um outro sistema de cadastro, porém agora um de animais em um zoologico - 1 mês
f) Faça o seu curriculum ja incluindo os projetos que você desenvolveu. Junto a isso vá estudando frameworks de mercado como Struts e Hibernate - 1 mês

Não quero discutir a qualidade do profissional após o cronograma. No entanto você ja esta encaminhado para iniciar no mercado. É isso mesmo, INICIAR. Você é um iniciante no assunto. Tem muito que aprender. Uma faculdade ira te ajudar e muito nisso, porém tenha paciência. Quanto a dinheiro e conhecimento. Não queira aprender tudo e seja humilde o suficiente para aceitar a sua situação de aprendiz.

Boa Sorte

Desenvolvimento de Software Hildebrando em 27 Set 2006

Boas maneiras na manutenção em sistemas de terceiros.

Como se comportar quando cai no seu colo um sistema que não foi você quem desenvolveu?

Antes de mais nada quero explicar o porque da escolha de ‘Boas maneiras’ ao invés de ‘Boas práticas’. Boas maneiras esta ligada a boas práticas porém com a adição de ética e postura. Quando mexemos em um software desenvolvido por outra pessoa, precisamos lembrar que foi um companheiro de profissão que fez o trabalho. Falar mal, questionar e duvidar do Software em questão deve ser feito com muito cuidado e ética.

O cénario de mexer em um sistema de terceiro é muito comum, inclusive alguns sistemas acabam se tornando verdadeiros desafios. Só o fato de você ter de entender a arquitetura utilizada (quando tem) além da regra de negócio pode te comsumir muito mais horas do que o esperado. Para evitar noites sem dormir preparei uma cartilha que pode ajuda-lo nestas tarefas:

1 - Diretorios e arquivos do projeto

Faça um levantamento de todos os diretorios do projeto. Crie um documento texto com a lista de todos os diretorios e pacotes com um indicativo de qual a funçao do respectivo diretorio/arquivo no projeto.

Este levantamento vai te ajudar muito com uma visão de alto nível sobre as diferentes entidades envolvidas no projeto. É nesse momento que podemos identificar as camadas, as boas práticas e as convenções de nomenclatura.

Após entender a estrutura do sistema faça uma segunda análise com o objetivo de identificar os frameworks envolvidos e os arquivos de configuração (.properties e .xml)

Comportamento:
Mudanças na estrutura ou nomenclatura de pacotes só são aceitos em situações de Refactoring (alterar o codigo sem alterar funcionalidade). As vezes encontramos fulgas de padrões que realmente nos incomodam. Diretorios em português e inglês, nome de pacotes em maiusculo, etc. e mesmo assim devemos nos controlar e eveitar qualquer mudança. Lembre-se estamos na fase de Analise ainda.

2 - Depuração

Execute a aplicação em modo DEBUG. Realize operações simples e siga o fluxo de mensagens. Identifique entidades com papéis essencias como ServiceLocator, DAO, Factory, BusinessDelegate, Façade.

Neste momento você esta entendendo como funciona a arquitetura. A utilização de uma ferramenta de engenharia reversa para gerar um diagrama de sequencia e um diagrama de classe pode te ajudar muito.

Os modelos nesta situação servem para uma identificação mais detalhistas. Porém não se atenha somente aos modelos. Execute o programa. Veja as mensagens.

Comportamento:
Perca um tempo nesta etapa. Faça pesquisas, cadastrados e relatórios. Identifique a maioria das funcionalidades. Lembrando mais uma vez, ainda estamos na etapa de Analise. Não faça modificações.
Nesta etapa inclusive surgem as primeiras críticas ao software. Porque dessa classe vai para essa? O cara usou o DAO diferente dos projetos que eu estou acostumado? Poderiamos criar uma interface aqui ou ali.

3 - Começe pelo fácil

Na lista de novas funcionalidades a serem aplicadas no sistema, com certeza existem aquelas fáceis. Alinhamento de campo, formatação, validação. Comece por estas. Com isto você estará se familiarizando com a arquitetura, com a organização de arquivos e diretórios. Na comece pelas difíceis pois estas exigem um conhecimento de regra de negócio, que talvez você ainda não tenha.

Comportamento:
Ao fazer uma alteração, inclusão ou exlusão de código faça comentários. Mesmo que seja a inclusão de um atributo. Para os comentários utilize um identificar ligado a nova funcionalidade. Algo como

//NF0600505:Hildebrando Furlan Neto:Inclusao de if para validacao

O significado de NF é ‘New Feature’. Isto nao é um padrão, porém serve como controle para uma possível estatística de mudança. Adote o seu padrão. Converse com os outros envolvidos no projeto para seguirem este padrão.

4 - Testes unitários

Agora sim você consegue entender o porque da utilização de testes unitários é tão importante. Se ainda nao existe metodos de teste, crie-os. Isso ajuda inclusive para entender o algoritmo executado. Uma modificação em algo que esta funcionando deve ser feita com cautela. Com testes unitarios você tera um maior controle se o que você esta fazendo pode estar impactando em outras partes do Software.

Comportamento.
Siga o mesmo modelo de testes. Se for proprietário utilize o mesmo padrão. Caso nao possua, utilize um framework de testes como o JUnit e começe documentando alguns métodos de consistencia. Esclareça suas duvidas com o Analista responsavel para definir dados de entrada e as saidas. Se não existir ninguém simule testes na aplicação e utilize os dados de saida.

5 - Mão-na-massa

Ferramentas a mão e vamos codificar. Siga sempre a estrutura de pacotes e nomenclaturas (classes e identificadores). Abuse dos comentários. Adicione para que serve cada variavel, da onde veio e para onde vai. Mesma coisa com os metodos. Para que serve cada parametro. O que o metodo faz. Outro ponto é conhecer a Arquitetura utilizada. Se for proprietaria entenda seu processo e como as coisas funcionam. Interfaces que você deve implementar, VOs, DTOs, Tiles, Struts.

6 - Cuidado com os prazos

Somente após voce entender a estrutura completa do sistema (exemplo JSP -> Form -> Action) você conseguira dar uma prazo mais preciso. No entanto conheço a realidade brasileira e normalmente voce é questionado pelas horas antes mesmo do item 1. Os passos anteriores demoram cerca de 1 a 3 dias. Variando pelo numero de Frameworks e bibliotecas e seus conhecimentos em relação a eles.