Pergunta

Eu estou trabalhando em um aplicativo que é de cerca de 250.000 linhas de código. Eu sou atualmente o único desenvolvedor trabalhando sobre este pedido, que foi originalmente construído em .NET 1.1. Permeia é uma classe que herda de CollectionBase. Todas as coleções de banco de dados herdar desta classe. Estou pensando em refatoração para herdar a partir da Lista de coleção genérica vez. Escusado será dizer, o livro Refactoring do Martin Fowler não tem sugestões. Devo tentar isso refatorar? Se sim, qual é a melhor maneira de resolver este refatorar?

E sim, existem testes de unidade por toda parte, mas nenhuma equipe de QA.

Foi útil?

Solução

250.000 Lines é muito para refatorar, mais você deve levar em conta vários dos seguintes:

  1. Você tem um departamento de controle de qualidade que será capaz de QA o código refatorado?
  2. Você tem testes de unidade para o código antigo?
  3. Existe um calendário que é em torno do projeto, ou seja, você está mantendo o código como os usuários estão encontrando bugs?

Se você respondeu 1 e 2 não, eu faria em primeiro lugar testes de unidade de gravação para o código existente. Torná-los extensa e minuciosa. Uma vez que você tem aqueles no lugar, ramificar uma versão, e começar a refatoração. Os testes de unidade deve ser capaz de ajudá-lo a refatorar nos genéricos no corretamente.

Se 2 for sim, então apenas ramo e começar a refatoração, contando com esses testes de unidade.

departamento Um QA ajudaria muito bem, desde que você pode campo eles o novo código para teste.

E, por último, se os clientes / usuários estão precisando de bugs corrigidos, corrigi-los em primeiro lugar.

Outras dicas

Não faça isso. A menos que você tenha uma boa justificativa comercial para colocar a sua base de código através deste exercício. O que é a redução de custos ou receitas geradas por sua refatorar? Se eu fosse seu gerente I provavelmente aconselhar contra ele. Desculpe.

Como exposto é CollectionBase da classe herdada?
Existem coisas que os genéricos poderiam fazer melhor do que CollectionBase?

Quer dizer esta classe é muito utilizada, mas é apenas uma classe. Chave para refatoração não é perturbar o status quo do programa. A classe deve sempre manter o seu contrato com o mundo exterior. Se você pode fazer isso, não é um quarto de milhão de linhas de código que você está refatoração, mas talvez única 2500 (palpite aleatório, não tenho idéia de quão grande essa classe é).

Mas se há um monte de exposição a partir desta classe, você pode ter que, em vez tratar que a exposição como o contrato e tentar fator a exposição.

Se você são vai passar com ele, não use List . Em vez disso, use System.Collections.ObjectModel. Collection , que é mais de um sucessor spirtual a CollectionBase.

A classe Collection<T> fornece métodos protegidos que podem ser usados ??para personalizar o seu comportamento ao adicionar e remover itens, limpando a coleção, ou definir o valor de um item existente. Se você usar List<T> não há nenhuma maneira de substituir o método Add() para lidar com quando os anúncios alguém à coleção.

Eu acho que refatoração e manter seu código atualizado é um processo muito importante para código de evitar rot / cheiro. Um monte de desenvolvedores sofrem de um ou outro estar casada com seu código ou simplesmente não confiante o suficiente em seus testes de unidade para ser capaz de rasgar as coisas separadas e limpá-lo e fazê-lo direito.

Se você não tomar o tempo para limpá-lo e tornar o código melhor, você vai se arrepender, a longo prazo, porque você tem que manter esse código por muitos anos para vir, ou quem assume a vontade de código odeio você. Você disse que tem testes de unidade e você deve ser capaz de confiar nesses testes para certificar-se de que quando você refatorar o código ele vai ainda trabalho.

Então eu digo fazê-lo, limpá-lo, torná-lo bonito. Se você não está confiante de que os testes de unidade pode lidar com a refatorar, escrever um pouco mais.

Eu concordo com Thomas.

Eu sinto a pergunta que você deve sempre se perguntar quando refatoração é "O que eu ganho fazendo isso vs fazer outra coisa com o meu tempo?" A resposta pode ser muitas coisas, de aumentar a capacidade de manutenção para melhor desempenho, mas sempre virá à custa de outra coisa.

Sem ver o código é difícil para mim dizer, mas isso soa como uma situação muito ruim para ser refatoração no. Testes são bons, mas eles não são à prova de idiotas. Tudo que toma é para um deles ter uma má suposição, e seu refactor poderia introduzir um bug desagradável. E sem QA para pegá-lo, isso não seria bom.

Eu também sou pessoalmente um pouco suspeitos de refatora maciças como este. Custou-me um trabalho uma vez. Foi a minha primeira fora de emprego do governo (que tende a ser um pouco mais indulgente, uma vez que você 'tenure' é muito duro ser demitido) e eu era o único programador web. Eu tenho um ASP aplicativo legado que foi mal escrito caiu no meu colo. Minha primeira prioridade era fazer com que o danado reformulado em algo menos ... icky. O meu patrão queria que os incêndios colocar para fora e nada mais. Seis meses depois, eu estava à procura de trabalho novamente: p Moral da história:. Verifique com seu gerente antes de embarcar nesta

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top