c# - example - Encontrar código no utilizado
params comments c# (9)
Como señaló Jeff, la herramienta http://www.ndepend.com/ puede ayudar a encontrar métodos, campos y tipos no utilizados.
Para elaborar un poco, NDepend propone escribir Regla de código sobre la consulta LINQ (CQLinq) . Se proponen alrededor de 200 reglas de código predeterminadas , 3 de ellas dedicadas a la detección de código muerto / no utilizado
Básicamente, una regla de este tipo para detectar métodos no utilizados se ve así:
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
Pero esta regla es ingenua y devolverá falsos positivos triviales. Hay muchas situaciones en las que nunca se llama a un método, pero no está sin usar (punto de entrada, constructor de clase, finalizador ...) esta es la razón por la que las 3 reglas predeterminadas están más elaboradas:
- Tipos potencialmente muertos (por lo tanto no utilizada detectar clase, estructura de interfaz, delegado ...)
- Métodos potencialmente muertos
- Campos potencialmente muertos
NDepend se integra en Visual Studio 2017,2015, 2013, 2012, 2010, por lo que estas reglas se pueden verificar / examinar / editar directamente dentro del IDE . La herramienta también puede integrarse en su proceso de CI y puede generar reports que muestren las reglas infringidas y los elementos de código culpables. NDepend también tiene una extensión de Servicios de Equipo VS.
Si hace clic en estos 3 enlaces anteriores hacia el código fuente de estas reglas, verá que los que se refieren a tipos y métodos son un poco complejos. Esto se debe a que detectan no solo los tipos y métodos no utilizados, sino también los tipos y métodos utilizados solo por los tipos y métodos muertos no utilizados (recursivo).
Este es un análisis estático , de ahí el prefijo Potencialmente en los nombres de las reglas. Si se utiliza un elemento de código sólo a través de la reflexión, estas normas podrían considerar como no utilizada que no es el caso.
Además de utilizar estas 3 reglas, te aconsejo que mide la cobertura de código por medio de pruebas y esforzarse por tener una cobertura total. A menudo, verá que el código que no puede ser cubierto por las pruebas, es en realidad código no utilizado / muerto que se puede descartar de forma segura. Esto es especialmente útil en algoritmos complejos en los que no está claro si una rama de código es accesible o no.
Descargo de responsabilidad: trabajo para NDepend.
Tengo que refactorizar una gran aplicación de C # y encontré muchas funciones que nunca se usan. ¿Cómo puedo verificar el código no utilizado, para poder eliminar todas las funciones no utilizadas?
Es una gran pregunta, pero ten en cuenta que estás pisando aguas peligrosas aquí. Cuando elimines el código, tendrás que asegurarte de compilar y probar a menudo.
Una gran herramienta viene a la mente:
NDepend - esta herramienta es simplemente increíble. Se tarda un poco en asimilar, y después de los primeros 10 minutos creo que la mayoría de los desarrolladores solo dicen "¡Atorníllalo!" y eliminar la aplicación. Una vez que tenga una buena idea de NDepend, le dará una idea sorprendente de cómo se acoplan sus aplicaciones. Échale un vistazo: http://www.ndepend.com/ . Lo más importante es que esta herramienta le permitirá ver métodos que no tienen llamadores directos. También le mostrará el inverso, un árbol de llamadas completo para cualquier método en el ensamblaje (o incluso entre ensamblajes).
Cualquiera que sea la herramienta que elija, no es una tarea que deba tomarse a la ligera. Especialmente si estás tratando con métodos públicos en ensamblajes de tipo de biblioteca, ya que nunca sabrás cuándo una aplicación los está haciendo referencia.
FXCop es un analizador de código ... Se hace mucho más que encontrar el código no utilizado. Solía FXCop por un tiempo, y estaba tan perdido en sus recomendaciones que he desinstalado.
Creo que NDepend parece un candidato más probable.
La verdad es que la herramienta nunca puede darte una respuesta 100% segura, pero la herramienta de cobertura puede darte una buena racha por el dinero.
Si cuenta con un conjunto completo de pruebas de unidad, puede utilizar la herramienta de cobertura de prueba para ver exactamente qué líneas de código no se ejecutaron durante la ejecución de la prueba. Usted todavía tendrá que analizar el código manualmente: o eliminar lo que se tiene en cuenta el código muerto o prueba de escritura para mejorar la cobertura de la prueba.
Una de estas herramientas es NCover , con el precursor de código abierto en Sourceforge . Otra alternativa es PartCover .
Echa un vistazo a esta answer en .
Me he encontrado con AXTools CODESMART..Try que una vez. Utilice analizador de código en las revisiones section.It mostrará una lista de las funciones locales y globales muertos junto con otras cuestiones.
Resharper es bueno para esto como han dicho otros. Sin embargo, tenga cuidado, estas herramientas no encuentran el código que utiliza la reflexión, por ejemplo, no puede saber si la reflexión NO utiliza algún código.
Sí, ReSharper hace esto. Haga clic derecho en su solución y seleccione "Encontrar problemas de código". Uno de los resultados es "Símbolos no utilizados". Esto le mostrará clases, métodos, etc., que no se utilizan.
También quisiera mencionar que el uso del COI también conocido como la Unidad puede hacer estas evaluaciones engañosa. Puede que haya cometido un error, pero varias clases muy importantes que se crean instancias a través de Unity parecen no tener una instanciación por lo que ReSharper puede decir. ¡Si seguí las recomendaciones de ReSharper me darían una manguera!
ReSharper hace un gran trabajo de encontrar código no utilizado.
En el IDE de VS, puede hacer clic con el botón derecho en la definición y elegir ''Buscar todas las referencias'', aunque esto solo funciona en el nivel de la solución.