Adakah yang tahu alat refactoring berfitur lengkap untuk C ++ yang dapat diandalkan dengan basis kode besar (sekitar 100.000 baris)?
Saya mencoba apa pun yang dapat saya temukan berulang kali selama beberapa tahun terakhir: SlickEdit, Eclipse CDT. Mereka semua sama sekali tidak dapat digunakan.
RINGKASAN : Saya mengambil waktu dan mengevaluasi "Visual Assist X" serta "Refactor for C ++". Keduanya memiliki beberapa fitur yang mengesankan, tetapi keduanya juga jauh dari sempurna. Mengekstraksi sejumlah besar kode biasanya tidak memuaskan tanpa modifikasi manual - dan karena itu tidak membuahkan hasil.
"Visual Assist X" memiliki fitur-fitur yang bagus seperti pelengkapan otomatis yang jauh lebih lengkap, dll. Tetapi itu menyebabkan banyak kedipan dan melambat pada titik-titik tertentu.
Oleh karena itu menurut saya jawabannya adalah: "Tidak, tidak ada alat refactoring siap produksi untuk C ++"
UPDATE Maret 2015 Adapun balasan hdoghmens hari ini saya mencoba Resharper untuk C ++. Tautannya https://www.jetbrains.com/resharper/ tidak mengatakan apa-apa tentang C ++. Tetapi saya menemukan Resharper C ++ yang diumumkan lebih dari setahun yang lalu di sini:
https://www.jetbrains.com/resharper/features/cpp.html
Saya mencobanya dengan VC2010 menggunakan basis kode 20MB.
Tes 1: Ekstrak Metode: menghasilkan pengecualian Pengambilan Ulang. Tidak ada kode sumber yang diubah.
Tes 2: Ekstrak Metode dengan sumber berbeda: Berfungsi baik
Tes 3: Ubah tanda tangan dari fungsi yang diekstraksi: Menghasilkan kode C ++ yang rusak:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Mungkin itu sebabnya C ++ tidak terdaftar di halaman utama.
Menurut pendapat saya jawaban untuk pertanyaan ini masih "TIDAK" .
sumber
Jawaban:
Saya menemukan Visual Assist X dengan Visual Studio sangat berguna. Pilihan lain adalah Refactor untuk C ++ .
sumber
Visual Assist dan Visual Studio membuat berurusan dengan basis kode besar jauh lebih mudah. Bantuan visual bagus dalam melacak bagaimana kelas atau anggota digunakan dan lebih efektif dalam penamaan ulang tanpa kesalahan positif daripada pencarian dan penggantian.
sumber
Saya berharap dentang akan secara signifikan mengubah lanskap alat refactoring C ++ di luar sana selama beberapa tahun ke depan. Ini adalah kompiler modular open-source yang memaparkan API untuk mengurai dan menganalisis secara semantik kode C ++. IDE dan alat-alat lain akan dapat menggunakan API ini daripada melakukan pekerjaan yang sulit untuk menulis penganalisa parser dan semantik mereka sendiri.
Google sudah membuat alat refactoring skala besar menggunakan dentang .
sumber
Mozilla memiliki alat refactoring sendiri bernama Pork ( Wiki , Developer Wiki ). Berikut adalah blog pengembang di belakang Pork. Dari apa yang saya baca, daging babi berhasil digunakan dalam refactor di Mozilla.
Daging babi seharusnya membantu jika Anda berasal dari * nix land, untuk Visual Studio saya juga merekomendasikan Visual Assist.
sumber
Perangkat Rekayasa Ulang Perangkat Lunak DMS kami adalah mesin transformasi yang dirancang untuk melakukan transformasi kompleks pada sejumlah besar kode, termasuk C ++. Ini telah digunakan untuk membuat perubahan yang dapat diandalkan pada sistem jutaan baris kode. Ini beroperasi dengan menggunakan penganalisis dan transformator langauges yang akurat-kompiler.
Ini memiliki parser C ++ lengkap dengan resolusi nama dan tipe, membangun AST kode, dapat menerapkan transformasi prosedural atau sumber-ke-sumber (dengan sintaks permukaan C ++) untuk merevisi pohon-pohon tersebut, dan membuat kembali keluaran yang dapat dikompilasi dengan komentar yang dipertahankan. (Sunting: 7/1/2011: Sekarang apakah C ++ 1X sejauh kita memahami standar :)
Ini telah digunakan pada proyek rekayasa ulang skala besar, termasuk pembuatan ulang komponen C ++, dan 100% terjemahan sepenuhnya otomatis antara bahasa. Anda dapat membaca tentang ini di situs web.
DMS juga digunakan untuk membangun alat analisis sumber sewenang-wenang. Contohnya termasuk deteksi kloning, cakupan pengujian, perbedaan cerdas (perbandingan struktur kode sumber dan operasi pengeditan abstrak daripada garis dengan memasukkan dan menghapus sederhana), dll.
Apa yang tidak (saat ini) adalah alat refactoring interaktif. Kami percaya bahwa untuk melakukan sebagian besar refactoring dengan baik, Anda perlu kontrol mendalam dan analisis data. DMS memiliki mesin generik untuk mendukung hal ini, dan mesin tersebut diimplementasikan untuk C, COBOL dan Java pada saat ini, dengan C ++ menjadi yang berikutnya. Ini adalah pekerjaan yang sulit. Anda tidak akan melihat banyak alat refactoring C ++ yang serius dari siapa pun sampai masalah seperti ini diselesaikan dengan baik. Pertama, Anda membutuhkan parser C ++ lengkap: -}
EDIT 7/5/2011: Sepertinya kita akan berlari di versi interaktif. Kami telah memenangkan Departemen Energi Tahap I SBIR untuk menyelidiki bagaimana melakukan ini. Lihat http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (Cari Desain Semantik di bawah "Texas"). Jangan berharap hasil terburu-buru; ini hanyalah awal dari program multi-tahun 3 fase untuk mendapatkan alat.
EDIT 8/11/2011: Kemajuan pertama ... kami sekarang menangani semua arahan C ++ 0x dan OpenMP.
EDIT 1/4/2012: Apakah analisis aliran kontrol penuh kode C ++.
EDIT 9/15/2014: Sekarang ada mesin parser / transformasi front end C ++ 14. Bahkan mengubah nama dengan cukup andal pada saat ini: -}
sumber
Jika Anda menggunakan emacs, coba Xrefactory . Ini mendukung ekstraksi metode, penggantian nama kelas / fungsi / variabel dan memasukkan / menghapus / memindahkan parameter. Ini juga memiliki mesin penyelesaian kode yang sangat baik / cepat.
sumber
Saat ini saya tidak bisa merekomendasikan setiap alat refactoring untuk C ++, tentu bukan untuk basis kode besar dari 100k garis dan di atas. Saya berharap ini akan berubah, seperti OP, dan saya berharap suatu hari akan ada sesuatu. Saya takut bahasanya sendiri mungkin harus berubah secara signifikan sebelum kita melihat alat yang benar-benar bagus.
btw, sudahkah SlickEdit menjatuhkan fitur refactoring-nya?
sumber
The DMS software rengineering toolkit melakukan hal ini saya pikir. Ini adalah mesin transformasi kode, dirancang untuk skala besar dan menangani C ++. Tidak tahu seberapa elegan outputnya.
sumber
Saya sarankan untuk mencoba rtags jika Anda menggunakan emacs dan belum mencobanya (ada juga paket untuk vim yang tersedia). Ini adalah aplikasi klien / server berdentang yang mengindeks kode C / C ++, dengan fitur-fitur ini termasuk:
Saya memutuskan untuk mencobanya setelah menonton ceramah ini yang memperkenalkan rtags (dan emacs) untuk saya.
(Saya harus mengatakan bahwa saya melangkah sejauh ini hanya setelah QtCreator saya gagal mengubah nama beberapa simbol dengan benar, yang merupakan show-stopper untuk saya menggunakan IDE yang hebat ini untuk saat ini)
Selain apa yang didukung oleh rtags, saya juga memerlukan beberapa fitur rapi tambahan, termasuk:
Untuk ini, saya sarankan untuk menggunakan paket semantic-refactor untuk emacs (tidak yakin apakah ada alternatif untuk vim)
Secara umum, alat berbasis dentang terlihat sangat menjanjikan. Jika Anda tertarik pada informasi lebih lanjut tentang alat dentang untuk refactoring C ++, termasuk untuk proyek dengan basis kode besar, ada beberapa pembicaraan hebat oleh Chandler Carruth.
sumber
Orang pasti harus menyebut Klocwork sebagai suite kode refactoring komersial. Itu terlihat sangat menjanjikan ketika Anda pergi melalui video demo.
sumber
Masalahnya adalah template C ++. Sampai 2019 saya tidak mengetahui adanya alat refactoring yang mendukung templat C ++. Saya sudah mencoba VS2019, VisualAssist, Clion, QtCreator.
Pertimbangkan contoh:
Jika saya menjalankan Ubah Nama Refactoring
foo::print
,bar::print
harus juga diganti nama secara otomatis. Karena mereka terhubung melaluicall_print
instantiations templat fungsi.sumber
Jika Anda menggunakan Visual C ++ (Edisi Express gratis), Anda dapat menggunakan Visual Assist dari www.wholetomato.com (tautan ke fitur refactoring C ++).
Ini memiliki masa percobaan 30 hari dan kami telah menemukan itu menjadi lebih cepat dan lebih banyak fitur-penuh bahwa built-in intellisense dalam produk Visual C ++ itu sendiri.
sumber
Jika Anda ingin merekayasa ulang basis kode Anda: MOOSE. Tapi itu koleksi besar alat analisis dan rekayasa ulang, bukan editor.
sumber
Sekarang ada ekstensi refactoring C ++ untuk Visual Studio 2013 dari Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
sumber
Definetely Resharper Ultimate adalah cara untuk pergi. Jaminan kebahagiaan :)
Dalam versi Beta pada Maret 2015.
sumber
CLion terlihat sangat menjanjikan.
Penafian: Saya belum mencobanya karena saya perlu mengubah proyek saya ke format CMake untuk menggunakannya.
sumber
Saya sarankan Anda mencoba Lattix . Ini memungkinkan Anda untuk menganalisis basis kode C / C ++ besar untuk menemukan arsitektur, mengidentifikasi dependensi yang bermasalah, dan merekayasa ulang kode untuk meningkatkan modularitas dan mengurangi hutang teknis. Lattix juga menyediakan sejumlah algoritma untuk membantu dalam proses refactoring. Algoritma ini membantu Anda mengetahui cara memindahkan elemen dari satu bagian hierarki ke yang lain, untuk memutus siklus dan untuk memindahkan subsistem sehingga penggabungan dan kohesi subsistem dapat ditingkatkan. Berikut adalah hasil Lattix menganalisis Kernel Android (1,6 juta LOC dari C / C ++). Pengungkapan penuh: Saya bekerja untuk Lattix
sumber
Maaf hanya menemukan pertanyaan ini sangat terlambat. Siswa dan asisten saya bekerja di C ++ refactoring sejak sekitar 2006. Sebagian besar infrastruktur refactoring CDT dibangun oleh tim saya di IFS institute of software. sejak beberapa tahun kami menyediakan Cevelop versi CDT kami dengan dukungan untuk perbaikan kode C ++ dll. Cevelop dapat bekerja dengan basis kode yang besar, jika ruang kerja diatur dengan benar. Gratis tersedia di https://cevelop.com
sumber
Saya menemukan plugin berikut untuk Visual Studio 2013: Visual C ++ Refactoring oleh Microsoft.
Ini hanya alat ganti nama yang sederhana tetapi bekerja dengan sempurna. Itu menambahkan menu konteks berikut setelah mengklik kanan pada simbol:
sumber