Como você explica a refatoração (e a dívida técnica) a uma pessoa não técnica (normalmente um PHB ou cliente)? ("O que, vai me custar um mês do seu trabalho sem nenhuma diferença visível ?!")
ATUALIZAÇÃO Obrigado por todas as respostas até agora, acho que esta lista fornecerá várias analogias úteis para as quais podemos apontar as pessoas apropriadas (embora a edição de referências a PHBs seja sensata!)
Respostas:
Quando você tem um grande home theater e adiciona coisas, lenta mas seguramente, grandes ratos aninham-se nas costas.
Se você costuma substituir peças, às vezes vale a pena endireitar tudo isso.
Claro, se você fizer isso, estava funcionando antes e não funcionará melhor do que quando você começou, mas quando você precisar mexer com isso novamente, as coisas serão muito mais fáceis.
De qualquer forma, provavelmente é melhor fazer uma comparação semelhante a alguma área com a qual o PHB ou o cliente já esteja familiarizado, ou seja, carro, construção ou algo assim ...
fonte
Re-fatorar é como o processo de re-embalar uma mala até que tudo se encaixe perfeitamente. Às vezes, no processo, você se pergunta por que estava tentando obter tanto lixo lá para começar.
fonte
Eu não explicaria o conceito de dívida técnica, porque não é necessário. Em vez disso, concentre-se na refatoração: você está alterando o design do seu programa, não necessariamente para que seja "melhor" ou "aprimorado", mas para que ele possa aceitar uma alteração que precisa ser feita.
Uma analogia de carro pode ser adequada: você precisa adicionar um ar-condicionado a um carro, mas ele não foi originalmente projetado para ele. Você não apenas precisa fabricar um ar-condicionado estranho em forma de L, mas também precisa afastar outras coisas do caminho e mudar o sistema de ventilação.
Eu também acho que é uma estratégia melhor refatorar quando você está acomodando novos recursos: caso contrário, você pode estar mudando o design para algo que apenas pareça "melhor", mas que na verdade seja pouco adequado às circunstâncias que envolvem a adição do seu próximo recurso.
fonte
Uso o termo Dívida técnica e relaciono-o diretamente com algo que eles entendem - Dívida corporativa. Dívida técnica é como contrair um empréstimo. Você paga juros sobre isso. Por exemplo, você pode construir uma nova fábrica e pagar por ela diretamente ou pode obter um empréstimo por ela. Se você conseguir um empréstimo, pagará mais por ele a longo prazo, mas faz sentido financeiramente se os termos estiverem corretos .
No entanto, se você está pagando juros de 25% sobre esse empréstimo, coloca-se em uma posição não sustentável. O mesmo acontece com a dívida técnica. Às vezes, faz sentido assumir alguma dívida técnica. No entanto, chega um momento em que os juros são altos demais e precisam ser pagos. Algumas dívidas técnicas são como um empréstimo à habitação e outras são como dívidas no cartão de crédito. Em emergências, a dívida do cartão de crédito é um ativo importante e valioso. No entanto, também pode quebrar o banco (ou domicílio, se você escolher) se usado imprudentemente.
Outro exemplo: você pode pagar US $ 10.000 por uma caixa de correio de marketing para angariar mais leads de vendas no futuro. Você está pagando "dívida de vendas". Esta é uma despesa com pagamento a longo prazo. Compare isso ao motivo pelo qual você deseja "gastar" dinheiro agora refatorando um pedaço de código. Nos dois casos, não há retorno imediato, mas você está se preparando para um melhor desempenho no futuro.
Costumo usar o termo "dívida xxxx" como analogia ao falar com quem quer que seja o público-alvo. Por exemplo, Dívida Operacional - A impressora que temos agora funciona bem, mas ao interromper a produção por um dia (ou uma semana) e atualizar para uma nova máquina, podemos aumentar a produção em 25%.
EDIT - Aqui está outra opinião sobre este
fonte
Limpeza de primavera.
Você não está fazendo nenhuma modificação na casa. Você está apenas mudando as coisas e se livrando da poeira. Talvez jogando algumas coisas que você não usa ou não precisa mais. mas você não está adicionando nada.
fonte
"Você já jogou Mouse Trap ? À medida que aderimos a novos recursos, alteramos interfaces e corrigimos bugs, o código pode começar a parecer muito com isso. Chega um momento em que precisamos gastar muito capital (tempo e esforço , que equivale a dinheiro), certificando-se de que todas as partes móveis se adaptem bem a cada nova alteração ou adição, ou podemos reservar um tempo para refatorar o design, resultando em menos partes móveis que precisamos gerenciar cada vez que fazemos uma alteração. da perspectiva do usuário final, pode parecer que o refator não possui nenhum benefício, mas o benefício acontece toda vez que um novo recurso é adicionado após o refator.O processo é mais rápido, apresenta menos erros e é mais barato depois, sem mencionar que o código refatorado geralmente é mais eficiente em geral.
Você pode se perguntar por que deixamos que pareça com o Mouse Trap em primeiro lugar:
Em um esforço para continuar construindo uma melhor armadilha para o mouse, precisamos voltar constantemente e encontrar lugares para reduzir a complexidade e otimizar o que temos. É a diferença entre apenas ter um software com muitos recursos e ter um software de alta qualidade ".
fonte
Esta é uma versão um pouco mais gráfica da analogia do home theater.
Se você quiser adicionar mais um novo appliance [aka, nova funcionalidade], com uma pitada, provavelmente poderá encaixá-lo em algum lugar.
Se você quiser adicionar outro aparelho, poderá comprar um fio de extensão, o que levará algum tempo.
Mas a cada adição, fica mais difícil encontrar uma solução. E você está se expondo a um risco 1 de incêndio [também conhecido como insetos], e terá que pagar muito dinheiro para pagar alguém para colocar novas tomadas na parede, o que pode escalar até o principal placa de circuito ou ainda mais.
1 Outra coisa que PHBs não Grokar muito bem: "Bem, se isso só pode acontecer, o que você se preocupar com?"
fonte
Refatoração - é como organizar seu armário de roupas / gaveta de ferramentas.
Você não joga fora suas roupas / ferramentas apenas porque elas estão por todo o lugar.
Você poderia argumentar que eles nunca deveriam se desorganizar. Mas eles fazem.
Assim como o código. Especialmente à medida que cresce com o tempo.
E se você não limpar, continuará se perguntando o que aconteceu com a camiseta que você amava ou com a chave que você sempre precisa, mas nunca consegue encontrar!
fonte
Eu diria "manutenção de código" . É importante usar palavras com as quais a pessoa não técnica esteja familiarizada e que façam sentido para uma visão de mundo não técnica. Se uma pessoa não técnica (cliente) estiver familiarizada com a manutenção de aplicativos, será fácil fazer paralelo entre a manutenção de código e a manutenção de aplicativos. Mesmo que não sejam iguais, você pode explicar que o cliente final aqui é desenvolvedor ou como manter o sistema.
fonte
Digamos que você seja um mecânico especializado em personalizar carros e até construí-los do zero, se o cliente exigir. Há um cliente que volta à sua loja de vez em quando para colocar sempre algo novo e brilhante em sua limusine super grande.
Uma vez que ele entra para ter um bom sistema de som instalado. Você executa diligentemente a tarefa passando os fios e conectando tudo corretamente. Ele sai um dia depois, está feliz e paga generosamente, como sempre.
No mês seguinte, ele volta, mas desta vez ele quer um home theater completo instalado. Mais uma vez, você entra na limusine. Sendo um profissional, você revisita o sistema de som e facilita a manutenção instalando um sistema de tubulação para passar os fios ao redor do carro. Dessa forma, os fios são protegidos e mais fáceis de remover e, caso você precise adicionar mais, também será fácil. Então você arranca os fios antigos, instala a tubulação e passa o sistema de som e os fios extras para o cinema, fecha tudo e está pronto.
Percebendo que o cliente não pediu para você substituir o sistema de som antigo, você dedica parte do custo das substituições e dos tubos. No entanto, você ainda ganha dinheiro com o negócio, mas não tanto quanto você teria, apenas juntou o sistema como fez na primeira vez.
Um mês depois, ele volta, desta vez quer um sistema de iluminação e quer que os novos alto-falantes tenham danificado os antigos no início da semana.
Como você manteve tudo bonito e arrumado, pode passar rapidamente os novos fios de iluminação pelo tubo, instalar o sistema e substituir o alto-falante. Desta vez, no entanto, você é feito muito mais rápido, a re-fatoração valeu a pena mantendo você no topo do seu jogo.
Seu concorrente, que estava rindo de você por rasgar fios perfeitamente bons e instalar todo esse tubo extra, ainda está lutando para satisfazer o cliente. Claro que ele foi feito mais rápido do que você na maioria das vezes, mas com o passar do tempo seus clientes estão reclamando que há cada vez mais atrasos e a qualidade geral do trabalho é degradante.
Olhando para isso, você percebe que seu objetivo não apenas é permanecer no negócio, mas também ser o principal responsável por equilibrar o que você faz para atender às demandas do cliente e o que você faz para facilitar sua vida no futuro. Muito raramente um cliente pagará pelos dois, então você precisa gerenciar de perto. Você aposta que, ao fazer as coisas de maneira pró-ativa, mesmo com o custo de fazer duas vezes, você manterá os custos de manutenção em uma porcentagem estável controlada de sua produtividade.
O software é o mesmo, exceto que os programadores podem jogar com fita adesiva digital por MUITO tempo antes que os efeitos sejam realmente sentidos pelos clientes e gerentes. Infelizmente, nessa época, o custo de refazer as coisas corretamente aumenta exponencialmente em relação à quantidade de fita adesiva presente e à idade média da referida fita adesiva.
É por isso que é importante continuar refatorando o sistema. Muitas vezes, a experiência nos mostra uma nova maneira mais eficiente de fazer a mesma coisa ou podemos combinar funcionalidades semelhantes e explorar redundâncias, em vez de simplesmente copiá-las. É assim que mantemos o sistema enxuto e mesquinho. O tempo mostrará que refazer o sistema constantemente para atender às demandas manterá a produtividade constante, controlando a quantidade colocada em manutenção.
A colocação de fita adesiva aumentará momentaneamente a produtividade ao custo de transportar um sistema abaixo do ideal. A dívida técnica é incorrida sempre que a produtividade imediata é favorecida em detrimento dos outros aspectos de um sistema. A analogia da dívida é boa porque assim como os juros sobre o capital emprestado diminuem os lucros, o tempo emprestado torna as coisas rapidamente incorridas em maior manutenção e aumentam a fragilidade do sistema, forçando uma equipe a gastar recursos adicionais na manutenção e não na criação. Assim como seu parente financeiro, se os empréstimos continuarem inabaláveis, a maioria dos recursos será gasta no pagamento de juros, deixando muito pouco para melhorias. A dívida técnica corroerá os recursos técnicos a um ponto em que a maioria dos recursos é gasta, apenas mantendo o sistema funcionando paralisando todos os outros aprimoramentos possíveis.
Portanto, em última análise, a questão não é se devemos ou não devemos fazê-lo, mas é ético deixar que gerentes e clientes acreditem que podem confiar em números de produtividade inchados artificialmente com o uso de fita adesiva digital. Alguns pensam que é uma decisão de negócios, mas, francamente, isso ocorre apenas porque os gerentes não a entendem. No final, alguém terá que pagar a dívida através de uma pesada re-factoring ou migrando para um novo sistema. Em última análise, para nós, programadores, é manter os sistemas em manutenção, você não precisa pedir para re-fatorar, pois é uma parte inerente do trabalho, deixar de entender isso significa não entender o que é a engenharia de software. Dito isto, percebo que existem sistemas por aí que já assumiram uma dívida importante e que pagar essa dívida exigirá decisões dos pagadores. Seu trabalho é que tal situação é, pelo menos, fazer sua parte para parar de pedir empréstimos. Esta dívida foi constituídaPELOS EUA, talvez porque não soubéssemos melhor, porque fomos pressionados a fazê-lo, ainda assim, assumimos essa dívida e, muitas vezes, as pessoas que entregamos a dívida não a entendem e, portanto, não conseguem administrá-la adequadamente.
Aqui está o seu software, pronto, espero que você goste .... Ho, a propósito, eu estiquei o máximo de seu cartão de crédito, espero que você não se importe ... cya
fonte
O objetivo do re-fatoração é simplificar o design e remover ineficiências. Isso facilita a correção de bugs e a adição de novos recursos no futuro.
Se você continuar adicionando novos recursos ao código, a re-fatoração se pagará rapidamente. Isso será visível em menor taxa de erro, depuração mais rápida e correções mais rápidas.
fonte
clever == 0
so2 * clever == 0
...Escrever software é como escrever um grande livro de não ficção ou uma enciclopédia.
O primeiro rascunho sempre é uma merda. Ele sempre pode ser aprimorado reorganizando-o, removendo seções que não precisam estar lá e garantindo um estilo consistente.
Sempre que você precisar revisar, a coisa mais simples a fazer é adicionar uma nova seção, alterar algumas palavras e assim por diante. Mas, à medida que as revisões se acumulam, o livro começa a perder sua organização. Então você tem que fazer mais passes de reorganização. Caso contrário, o livro se torna uma confusão sem sentido.
fonte
Tome seu computador de mesa, por exemplo. Você tem uma torre, monitor, teclado, mouse, impressora, scanner e alto-falantes. Em última análise, tudo o que você quer é uma boa mesa organizada. Então você apenas conecta as coisas cegamente e, alguns minutos depois, eis que tudo está configurado da maneira que você deseja. Bem ... quase do jeito que você quer.
Um dia depois, quando você está alterando o balanço dos alto-falantes, percebe que acidentalmente colocou os alto-falantes esquerdo e direito nas áreas erradas, de modo que deseja trocar de posição. Mas não! Há uma selva de fios emaranhados; Quando você move os alto-falantes, o cabo do mouse fica preso e agora o mouse é arrastado junto com os alto-falantes. Além disso, seu teclado agora não tem folga - você costumava movê-lo da mesa para o seu colo.
Tudo bem, você pode simplesmente desconectar o mouse e o teclado e reinseri-los para que tudo esteja consertado. Mas isso não ajudará em futuras reorganizações e adições futuras. Também tecer os cabos do mouse e do teclado pela selva é um aborrecimento.
A melhor solução é recarregar tudo para conectá-los de uma maneira limpa e limpa, onde cada cabo não interfira no outro. Agora, as alterações futuras são fáceis e continuam fáceis. Você investe um pouco na frente para obter grandes ganhos posteriormente.
O ponto principal é que a solução original funcionou principalmente. Essa é a questão da refatoração: funciona desde o início, mas você precisa mudar a maneira como as coisas já existem para fazer facilmente mudanças futuras (movendo os alto-falantes).
fonte
É como limpar a casa depois de uma festa louca e louca da noite anterior.
Digamos que a sala ficou totalmente destruída. A casa ainda é uma casa, a sala ainda é uma sala de estar. Funciona, mas não é assim que poderia ser. Depois de olhar para a bagunça, você percebe que ela precisa ser limpa.
Então, você começa a ensacar o lixo. Já parece melhor. Então, você olha ao redor da sala e decide arrumar os móveis. Você coloca um pedaço de volta, depois o próximo e o próximo. Uau, o quarto parece muito bom. Você está orgulhoso.
Sua irmã entra e diz que a sala parece lixo, você deve arrumar a estante e aspirar o tapete. Ela está certa. O quarto parece muito, muito bom.
Você olha em volta e vê que as cortinas das janelas ficariam muito melhores se todas estivessem na mesma altura. Feito. Uau, o quarto é incrível.
Trate seu código da mesma maneira.
fonte
Fácil!
Tomemos um exemplo ... todo mundo em suas vidas escreveu uma carta para alguém querido. Tem que ser alguém querido, porque nessas cartas geralmente prestamos atenção também na composição.
Então, você tem o seu texto, ... o significado será de qualquer maneira, mas você deseja que tudo pareça agradável! Direito?
Refatoração, mesma coisa ... mesmas informações, mais ou menos, mas a composição é melhor. E provavelmente resultará em uma melhor revisão por parte do leitor.
Outro exemplo - escrever um artigo para uma revista. Dois escritores, ambos sabem "suas coisas", a única diferença é que um sabe "como escrever" e o outro escreve como ele aprendeu a escrever a partir de respostas como estas.
De quem você se lembrará?
fonte
Todas as analogias com as coisas no mundo físico - como construir um teatro - são, na IMO, terríveis.
Você precisa explicar que o código de refatoração é como ... código de refatoração. O software é maleável de maneiras que os análogos físicos não são. À medida que as coisas se tornam cada vez mais complexas, é preciso reativar (ou refazer, conforme desejado) partes maciças ou pequenas de uma base de código para que possamos continuar a aumentar a complexidade sem enlouquecer.
Por que refatoramos? Porque o código que nunca é refatorado custa mais por minuto para manter e mudar e, finalmente, se torna mais problemático.
O que é tão interessante sobre a refatoração é que refazemos a base de código, mas, pelo menos no início, a funcionalidade permanece a mesma.
fonte
Re-fatorar é o mesmo que limpar algo e dar às coisas um novo lugar para 'ficar'
Fácil, simples e algo que pode levar muitas vezes. Às vezes até acrescento que a pessoa X deixou uma enorme bagunça e tenho que limpá-la.
fonte
Pensei em outro exemplo, que aparentemente ninguém mencionou aqui: refatorar é exatamente o mesmo que reorganizar uma equação em matemática (embora isso possa estar fora do escopo de 'pessoa não técnica, eu acho).
Quando você reorganiza uma equação, apenas 'move as coisas' para torná-la mais legível e utilizável, sem alterar o significado .
fonte
Dê a eles uma equação matemática simples. Por exemplo:
Qual é mais simples?
ou
Refatoração é um conceito semelhante, exceto que, em vez de simples equações matemáticas, você coloca algoritmos. A idéia principal é que você pode alternar entre duas maneiras de fazer as coisas, porque elas produzirão o mesmo resultado.
A refatoração mais simples que pode ser feita é renomear.
Agora, porque realmente não queremos que as coisas sejam chamadas de doX, porque na verdade não sabemos o que isso significa, renomeamos para outra coisa que é mais autoexplicativa e substituímos em qualquer lugar que a tenhamos usado.
Isso economizará dinheiro mais tarde, quando houver um problema ou aprimoramento, pois reduz o tempo para as pessoas entenderem e corrigirem seu aplicativo. Para economizar ainda mais, existem ferramentas gratuitas que fazem isso funcionar automaticamente, dependendo do idioma que você está usando. Essas ferramentas também são licenciadas de forma que não sejam restritivas e exigiriam que você fizesse algo de especial, além de reconhecê-lo, se você o usar diretamente.
fonte
Uma imagem diz mil palavras. Por exemplo, a refatoração possui dois casos de uso:
Referências
xkcd: bom código
xkcd: vale a pena o tempo?
fonte
Considere uma resposta dada na refatoração e não a explique a uma pessoa não técnica. A refatoração é uma atividade técnica que eles não precisam saber sobre:
(Refatoração, Martin Fowler, 2000, página 61)
É claro que isso não funcionará se você passar um mês fazendo nada além de refatoração, mas acho que geralmente é uma péssima ideia e é muito melhor refatorar na medida necessária para facilitar sua tarefa atual ou a próxima , ou para limpar o código com o qual você acabou de trabalhar.
fonte