Alguém conhece uma ferramenta de refatoração completa para C ++ que funciona de maneira confiável com grandes bases de código (cerca de 100.000 linhas)?
Eu tentei o que posso encontrar repetidamente nos últimos anos: SlickEdit, Eclipse CDT. Todos eles não eram de todo utilizáveis.
Resumo : Levei um tempo e avaliei o "Visual Assist X" e o "Refactor for C ++". Ambos têm alguns recursos impressionantes, mas ambos também estão longe de serem perfeitos. Extrair um grande bloco de código geralmente não é satisfatório sem modificações manuais - e, portanto, não compensa.
O "Visual Assist X" possui recursos interessantes, como preenchimento automático muito mais completo, etc.
Na minha opinião, portanto, a resposta é: "Não, não há ferramenta de refatoração pronta para produção para C ++"
ATUALIZAÇÃO março 2015 Quanto à resposta do hdoghmens hoje, tentei o Resharper for C ++. Seu link https://www.jetbrains.com/resharper/ não diz nada sobre C ++. Mas eu encontrei o Resharper C ++ que foi anunciado há mais de um ano aqui:
https://www.jetbrains.com/resharper/features/cpp.html
Eu tentei com o VC2010 usando uma base de código de 20MB.
Teste 1: método de extração: resulta em uma exceção do resharper. Nenhum código fonte foi alterado.
Teste 2: Método de extração com fonte diferente: funciona bem
Teste 3: Alterar assinatura da função extraída: resulta em código C ++ quebrado:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Talvez seja por isso que o C ++ não esteja listado na página principal.
Na minha opinião, a resposta a esta pergunta ainda é "NÃO" .
fonte
Respostas:
Acho o Visual Assist X com o Visual Studio muito útil. Outra opção é Refatorar para C ++ .
fonte
O Visual Assist e o Visual Studio tornam muito mais fácil lidar com grandes bases de códigos. A assistência visual é boa para rastrear como uma classe ou membro é usada e é mais eficaz em renomeá-la sem falsos positivos do que pesquisar e substituir.
fonte
Espero que o clang mude significativamente o cenário das ferramentas de refatoração de C ++ nos próximos anos. É um compilador modular de código aberto que expõe uma API para analisar e analisar semanticamente o código C ++. Os IDEs e outras ferramentas poderão usar essa API em vez de fazer o trabalho difícil de escrever seu próprio analisador e analisador semântico.
O Google já criou uma ferramenta de refatoração em larga escala usando o clang .
fonte
O Mozilla possui sua própria ferramenta de refatoração chamada Pork ( Wiki , Developer Wiki ). Aqui está o blog do desenvolvedor por trás do Pork. Pelo que li, o Pork foi usado com sucesso em refatorações na Mozilla.
A carne de porco deve ajudar se você vier de * nix land. Para o Visual Studio, eu também recomendo o Visual Assist.
fonte
Nosso DMS Software Reengineering Toolkit é um mecanismo de transformação projetado para realizar transformações complexas em grandes corpos de código, incluindo C ++. Ele foi usado para fazer alterações confiáveis em sistemas de milhões de linhas de código. Ele opera usando analisadores e transformadores de precisão para compiladores.
Possui um analisador C ++ completo com resolução de nome e tipo, cria ASTs de código, pode aplicar transformações procedurais ou de origem para origem (com sintaxe de superfície C ++) para revisar essas árvores e regenerar saída compilável com os comentários preservados. (Edit: 1/7/2011: Agora o C ++ 1X é suficiente para entendermos o padrão :)
Ele foi usado em projetos de reengenharia em larga escala, incluindo a re-arquitetura de componentes C ++ e traduções 100% totalmente automatizadas entre idiomas. Você pode ler sobre isso no site.
O DMS também é usado para criar ferramentas arbitrárias de análise de fontes. Os exemplos incluem detecção de clone, cobertura de teste, diferença inteligente (comparação de estruturas de código-fonte e operações de edição abstrata em vez de linhas com inserção e exclusão simples), etc.
O que não é (atualmente) é uma ferramenta de refatoração interativa. Acreditamos que, para fazer bem a maioria das refatorações, é necessário um controle profundo e análises de fluxo de dados. O DMS possui um mecanismo genérico para dar suporte a isso, e esse mecanismo é implementado para C, COBOL e Java neste momento, com o C ++ sendo o próximo na fila. Este é um trabalho difícil. Você não verá muitas ferramentas sérias de refatoração de C ++ de ninguém até que esse tipo de problema tenha sido resolvido bem. Primeiro você precisa de um analisador C ++ completo: -}
EDIT 7/5/2011: Parece que vamos dar uma corrida na versão interativa. Ganhamos um SBIR do Departamento de Energia da Fase I para investigar como fazer isso. Consulte http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (procure designs semânticos em "Texas"). Não espere um resultado com pressa; este é apenas o começo do programa trienal de três fases para chegar a uma ferramenta.
EDIT 8/11/2011: Primeiro progresso ... agora lidamos com todas as diretivas C ++ 0x e OpenMP.
EDIT 1/4/2012: Realiza análise de fluxo de controle total do código C ++.
EDIT 15/9/2014: Agora tenha o analisador de front-end C ++ 14 / mecanismo de transformação em mãos. Mesmo renomeia bastante confiável neste momento: -}
fonte
Se você estiver usando o emacs, tente o Xrefactory . Ele suporta extração de métodos, renomeação de classes / funções / variáveis e parâmetros de inserção / exclusão / movimentação. Também possui um mecanismo de conclusão de código muito bom / rápido.
fonte
Atualmente, não posso recomendar nenhuma ferramenta de refatoração para C ++, certamente não para grandes bases de código de 100 mil linhas ou mais. Eu esperava que isso mudasse, como o OP, e espero que um dia haja algo. Receio que o próprio idioma possa ter que mudar significativamente antes de vermos realmente boas ferramentas.
Aliás, o SlickEdit abandonou seus recursos de refatoração?
fonte
O kit de ferramentas de engenharia de software DMS faz isso, eu acho. É um mecanismo de transformação de código, projetado para grande escala e manipula C ++. No entanto, não tenho idéia de quão elegante é a saída.
fonte
Eu recomendo tentar rtags se você usa o emacs e ainda não o experimentou (também há um pacote para o vim disponível). É um aplicativo cliente / servidor baseado em clang que indexa o código C / C ++, com esses recursos incluídos:
Decidi experimentá-lo depois de assistir a essa palestra, que apresentou rtags (e emacs) para mim.
(Devo dizer que fui tão longe somente depois que meu QtCreator falhou em renomear alguns símbolos corretamente, o que é um impedimento para o uso desse ótimo IDE por enquanto)
Além do que é suportado pelas rtags, também preciso de alguns recursos interessantes, incluindo:
Para isso, recomendo usar um refator semântico pacote de para o emacs (não tenho certeza se existem alternativas para o vim)
Geralmente, as ferramentas baseadas em clangs parecem muito promissoras. Se você estiver interessado em obter mais informações sobre ferramentas clang para refatoração de C ++, inclusive para projetos com grandes bases de código, há algumas ótimas palestras de Chandler Carruth.
fonte
Certamente é preciso mencionar o Klocwork como um conjunto de refatoração de código comercial. Parece muito promissor quando você passa pelo vídeo de demonstração.
fonte
O problema são modelos C ++. A partir de 2019, não conheço nenhuma ferramenta de refatoração que suporte modelos C ++. Eu tentei o VS2019, VisualAssist, Clion, QtCreator.
Considere o exemplo:
Se eu executar Renomear refatoração em
foo::print
,bar::print
também deverá ser renomeado automaticamente. Porque eles estão vinculados por meio decall_print
instanciações do modelo de função.fonte
Se você estiver usando o Visual C ++ (o Express Edition é gratuito), poderá usar o Visual Assist em www.wholetomato.com (link para os recursos de refatoração do C ++).
Ele tem um período de avaliação de 30 dias e descobrimos que é mais rápido e mais cheio de recursos do que o intellisense interno no próprio produto Visual C ++.
fonte
Se você deseja recriar sua base de código: MOOSE. Mas essa é uma grande coleção de ferramentas de análise e reengenharia, não um editor.
fonte
Agora existe uma extensão de refatoração de C ++ para o Visual Studio 2013 da Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
fonte
Definitivamente ReSharper final é o caminho a percorrer. Felicidade garantida :)
Na versão beta a partir de março de 2015.
fonte
CLion parece muito promissor.
Isenção de responsabilidade: ainda não tentei, pois preciso converter meus projetos no formato CMake para usá-lo.
fonte
Eu recomendo que você tente Lattix . Ele permite que você analise grandes bases de código C / C ++ para descobrir a arquitetura, identificar dependências problemáticas e reprojetar o código para melhorar a modularidade e reduzir a dívida técnica. O Lattix também fornece vários algoritmos para ajudar no processo de refatoração. Esses algoritmos ajudam você a descobrir como mover elementos de uma parte da hierarquia para outra, quebrar ciclos e mover subsistemas para que o acoplamento e a coesão dos subsistemas possam ser aprimorados. Aqui estão os resultados do Lattix analisando o Android Kernel (1,6 milhão de LOC do C / C ++). Divulgação completa: Trabalho para Lattix
fonte
Desculpe por encontrar esta pergunta apenas tão tarde. Meus alunos e assistentes trabalham na refatoração de C ++ desde 2006. A maioria das infraestruturas de refatoração de CDTs foi construída por minha equipe no instituto de software IFS. há alguns anos, fornecemos ao Cevelop nossa versão do CDT suporte para refatorações de modernização de código C ++ etc. O Cevelop pode trabalhar com grandes bases de código, se o espaço de trabalho estiver configurado corretamente. Disponível gratuitamente em https://cevelop.com
fonte
Encontrei o seguinte plugin para o Visual Studio 2013: Refatoração do Visual C ++ pela Microsoft.
É apenas uma ferramenta de renomeação simples, mas funciona perfeitamente. Ele adiciona o seguinte menu de contexto após clicar com o botão direito do mouse em um símbolo:
fonte