Refactor ou Reescrever

50 views
Skip to first unread message

Kleber Moraes

unread,
Oct 20, 2014, 2:52:29 PM10/20/14
to php-b...@googlegroups.com
Boa tarde galera

Estou com um grande problema:

Tenho uma aplicação que é um aglomerado de aplicações

O sistema é legado, com as mais diversas bizarrices, Bad Small para todos os lado,

desde views com sql, ate classes com mais de 2000 linhas.

métodos com N responsabilidades

Nenhum tipo de teste (unitário e outros...)

A base de dados é bem grande, não é um sistema que tenha uma requisição muito grande, uns 700 usuários por dia, mas não a todo o sistema

e ainda ele usa coisas que vem de outro sistema em VB.

e o banco de dados esta uma zona.

Qual a melhor opção:
Refactor
  • Fazer testes unitários
  • Refatorar, tentando dividir as responsabilidades de classes
  • Não sei nem o que fazer em relação ao DB
  • e seguir a vida

Reescrever
Usar um framewaork fullsatck (pensei em symfony + angularjs)

fazendo uma base de dados nova, uma adapter da aplicação antiga para salvar os dados na nova, e migrar os dados antigos
e ir remontando a aplicação


Edinei L. Cipriani

unread,
Oct 21, 2014, 2:08:52 AM10/21/14
to php-b...@googlegroups.com
Reescrever, pois refatorar vai dar mais trabalho


Att,
Edinei L. Cipriani
Desenvolvimento de sites, sistemas,  jogos e aplicativos cross plataforma
Evangelist cakePHP, nodeJS, jQuery, AngularJS, Bootstrap e Corona SDK
Criador do BS Sites - Um plataforma de criação de sites dinâmicos e responsivos sem a necessidade de saber programar.
http://bssites.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/php-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Guilherme Medeiros

unread,
Oct 21, 2014, 7:12:34 AM10/21/14
to php-b...@googlegroups.com
Nesse caso, reescrever = refactoring.

A questão é o quanto de refactoring você quer fazer.
Começar um projeto novo, ou reutilizar e melhorar o código que já existe.

A escolha depende das vantagens e desvantagens que você quer focar.

Em um full refactoring, refazendo tudo do zero, só reutilizando regras de negócio, com um novo framework e novas tecnologias, você tem a vantagem de um projeto seguindo as melhores práticas atuais.
Tem a vantagem de reescrever a arquitetura do seu projeto de forma que ele possa fazer uso de bibliotecas terceiras (opensource), e que possa ser facilmente atualizado e reutilizado.
Você pode tentar trazer conceitos de desacoplamento para o seu projeto, como inversão de dependência e de controle.

O lado negativo disso é que seu projeto vai demorar para ser utilizado pelos seus "clientes". Que muito provavelmente continuarão a utilizar a versão antiga, o que pode demandar de você e sua equipe que, além de estarem refazendo o software do zero, tenham que ficar corrigindo bugs e/ou adicionando features ao sistema legado.
Claro que, dependendo dos clientes e do projeto, vocês podem assumir o compromisso de não mais adicionar features, mas continuar corrigindo bugs, deixando as features para o projeto novo.


Em contra partida, refactoring do código, reutilizando o mesmo, vai te economizar muito tempo.
O código já vai estar em produção, tu não vai ter duas frentes de trabalho, visto que o código é único para manter e para renovar.
Você pode focar primeiro em áreas problemáticas do código, e ir melhorando as outras áreas a medida que for necessário.

O lado ruim disso é que dificilmente você irá conseguir modificar a arquitetura do projeto.
Ou você conseguirá, mas vai dar mais trabalho. Desacoplar código e colocar no novo formato, ao passo em que muitas partes do teu software ainda estarão no padrão antigo é muito trabalhoso, e pode confundir os novos programadores que entram na equipe.


É uma faca de dois gumes.
A escolha depende muito do tamanho do projeto, do tamanho da equipe de desenvolvimento, da experiência da equipe com as possíveis tecnologias que são e serão adotadas e, principalmente, do gerenciamento do processo de desenvolvimento de software.

Boa sorte.

PS: estou passando por isso na empresa em que trabalho.
Resolvemos fazer um full refactoring do zero.
Dividimos os DEVs em 2 grupos.
O maior grupo continua adicionando features e corrigindo bugs do código legado, enquanto o menos grupo está criando toda a arquitetura do novo software.
Porém, o código legado tem um dia para "morrer". Temos um conjunto de features fechado que devem ser implementadas.
Features novas não entram, features velhas podem sair dessa lista.

Quando as features acabarem, a maior parte dos desenvolvedores do código legado vai para o refactoring ajudar os que lá estão, deixando uns dois DEVs para fazer bugfixing no código legado, até que o novo projeto esteja pronto para entrar no ar.

Ai a gente dá uma festa :D



Reply all
Reply to author
Forward
0 new messages