Saya harus memperbaiki aplikasi C # yang besar, dan saya menemukan banyak fungsi yang tidak pernah digunakan. Bagaimana saya dapat memeriksa kode yang tidak digunakan, sehingga saya dapat menghapus semua fungsi yang tidak digunakan?
Saya harus memperbaiki aplikasi C # yang besar, dan saya menemukan banyak fungsi yang tidak pernah digunakan. Bagaimana saya dapat memeriksa kode yang tidak digunakan, sehingga saya dapat menghapus semua fungsi yang tidak digunakan?
Jawaban:
Ya, ReSharper melakukan ini. Klik kanan pada solusi Anda dan pilih "Find Code Issues". Salah satu hasilnya adalah "Simbol Tidak Digunakan". Ini akan menunjukkan kepada Anda kelas, metode, dll., Yang tidak digunakan.
Ini pertanyaan yang bagus, tetapi berhati-hatilah karena Anda sedang menginjak perairan berbahaya di sini. Saat Anda menghapus kode, Anda harus memastikan bahwa Anda sering mengkompilasi dan menguji.
Satu alat hebat muncul di benak:
NDepend - alat ini luar biasa. Butuh sedikit waktu untuk grok, dan setelah 10 menit pertama saya pikir sebagian besar pengembang hanya mengatakan "Persetan!" dan hapus aplikasinya. Setelah Anda merasakan NDepend, Anda mendapat wawasan yang luar biasa tentang bagaimana aplikasi Anda digabungkan. Lihat itu: http://www.ndepend.com/ . Yang paling penting, alat ini akan memungkinkan Anda untuk melihat metode yang tidak memiliki penelepon langsung. Ini juga akan menunjukkan kepada Anda kebalikan, pohon panggilan lengkap untuk metode apa pun dalam perakitan (atau bahkan antara majelis).
Apa pun alat yang Anda pilih, itu bukan tugas untuk dianggap enteng. Terutama jika Anda berurusan dengan metode publik pada majelis tipe perpustakaan, karena Anda mungkin tidak pernah tahu kapan aplikasi merujuk mereka.
Seperti yang ditunjukkan Jeff, alat NDepend dapat membantu menemukan metode, bidang, dan tipe yang tidak digunakan.
Untuk menguraikan sedikit, NDepend mengusulkan untuk menulis Code Rule over LINQ Query (CQLinq) . Sekitar 200 aturan kode standar diusulkan, 3 di antaranya didedikasikan untuk deteksi kode yang tidak digunakan / mati
Pada dasarnya aturan untuk mendeteksi metode yang tidak digunakan misalnya terlihat seperti:
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
Tetapi aturan ini naif dan akan mengembalikan positif palsu sepele. Ada banyak situasi di mana metode tidak pernah dipanggil namun tidak terpakai (titik masuk, konstruktor kelas, finaliser ...) ini sebabnya 3 aturan standar lebih diuraikan:
NDepend terintegrasi dalam Visual Studio 2017,2015, 2013, 2012, 2010, sehingga aturan ini dapat diperiksa / diramban / diedit tepat di dalam IDE . Alat ini juga dapat diintegrasikan ke dalam proses CI Anda dan dapat membuat laporan yang akan menunjukkan aturan yang dilanggar dan elemen kode pelakunya. NDepend juga memiliki ekstensi VS Team Services .
Jika Anda mengklik 3 tautan di atas menuju kode sumber aturan ini, Anda akan melihat bahwa yang menyangkut jenis dan metode agak rumit. Ini karena mereka mendeteksi tidak hanya tipe dan metode yang tidak digunakan, tetapi juga tipe dan metode yang hanya digunakan oleh tipe dan metode mati yang tidak digunakan (rekursif).
Ini adalah analisis statis , karenanya awalan Berpotensi dalam nama aturan. Jika elemen kode hanya digunakan melalui refleksi, aturan ini mungkin menganggapnya sebagai tidak terpakai yang tidak terjadi.
Selain menggunakan 3 aturan ini, saya akan menyarankan mengukur cakupan kode dengan tes dan berusaha untuk memiliki cakupan penuh. Seringkali, Anda akan melihat bahwa kode yang tidak dapat ditutupi oleh tes, sebenarnya adalah kode yang tidak digunakan / mati yang dapat dibuang dengan aman. Ini sangat berguna dalam algoritma kompleks di mana tidak jelas apakah cabang kode dapat dijangkau atau tidak.
Penafian: Saya bekerja untuk NDepend.
Saya juga akan menyebutkan bahwa menggunakan IOC alias Unity dapat membuat penilaian ini menyesatkan. Saya mungkin telah keliru tetapi beberapa kelas yang sangat penting yang dipakai melalui Unity tampaknya tidak memiliki instantiasi sejauh ReSharper tahu. Jika saya mengikuti rekomendasi ReSharper, saya akan disemprot!
ReSharper melakukan pekerjaan yang baik untuk menemukan kode yang tidak digunakan.
Dalam VS IDE, Anda dapat mengklik kanan pada definisi dan memilih 'Temukan Semua Referensi', meskipun ini hanya berfungsi pada tingkat solusi.
Yang benar adalah bahwa alat tersebut tidak pernah dapat memberi Anda jawaban 100% pasti, tetapi alat cakupan dapat memberi Anda uang yang cukup bagus.
Jika Anda menghitung dengan unit test suite yang komprehensif, daripada Anda dapat menggunakan alat cakupan tes untuk melihat dengan tepat baris kode apa yang tidak dieksekusi selama menjalankan tes. Anda masih perlu menganalisis kode secara manual: menghilangkan kode yang Anda anggap mati atau menulis tes untuk meningkatkan cakupan tes.
Salah satu alat tersebut adalah NCover , dengan prekursor open source di Sourceforge . Alternatif lain adalah PartCover .
Lihat jawaban ini di stackoverflow.
FXCop adalah penganalisa kode ... Itu jauh lebih banyak daripada menemukan kode yang tidak digunakan. Saya menggunakan FXCop untuk sementara waktu, dan sangat hilang dalam rekomendasinya sehingga saya mencopotnya.
Saya pikir NDepend sepertinya kandidat yang lebih mungkin.