2009-11-10 39 views
5

¿Existe alguna herramienta de análisis de código estático de código abierto que pueda ayudar a encontrar el código inalcanzable/no utilizado en los programas de C#?Herramienta de código abierto para encontrar el código de C# inalcanzable/no utilizado

+0

Er, Visual Studio da advertencias sobre el código inalcanzable o no utilizado ... – Joren

+6

Solo los segmentos de funciones no utilizados, y eso es manejado por el compilador, no VS. Tengo la sensación de que OP está hablando de funciones completamente no utilizadas/no llamadas, que no son manejadas por el compilador. –

+2

@ ApoY2k inalcanzable sí. Digamos que declaras un método pero nunca lo llamas, eso no es compatible con AFAIK. – ParmesanCodice

Respuesta

5

FxCop, que está integrado en ediciones superiores de Visual Studio, advertirá sobre los miembros privados o internos no utilizados. Haga clic derecho en su proyecto y elija Ejecutar análisis de código. Junto con los "segmentos de código inalcanzables" identificados por el compilador como han señalado otros, esto debería capturar el código restante no utilizado.

(Nota FxCop se no advierten de los miembros del público o protegido no utilizados, ya que estos podrían ser parte de una API para su uso por personas externas. Además, FxCop no está disponible en todas las ediciones de Visual Studio aunque las versiones más antiguas son disponible para descargar).

+0

FxCop está disponible por separado de VS, aunque de forma gratuita, por lo que yo sé (sé que está disponible por separado, es la parte libre de la que no estoy seguro). –

+0

Sí, por separado y gratis. – Cheeso

1

Lo mejor que puedo sugerir es una herramienta de cobertura de código utilizada en el ejecutable principal en lugar de un ensamblaje de prueba, luego coloque la aplicación a través de sus pasos ... Un análisis estático de código sería NP difícil de hacer en un poco más esotérico casos.

+2

Es mucho peor que NP-HARD. Un análisis estático exacto de la cobertura del código es prácticamente * por definición * el problema de detención. Claramente, la pregunta "¿alguna vez se ejecuta esta línea de código?" Es equivalente a "¿este programa se detiene alguna vez?" (Simplemente reemplace cada parada en el programa con un ciclo infinito, y la línea en cuestión con un alto, y luego ejecute su detector de detención.) El problema de detención no es NP-HARD; es indecible. –

+0

@Eric: Dejé de mencionar The Halting Problem, porque aunque sonaba correcto para mí, no estaba muy seguro de que fuera aplicable en este caso. –

1

Aunque no es una herramienta de código abierto, puede usar R# (Resharper). es un complemento de estudio visual que puede mostrarle un código inalcanzable y puede eliminarlo automáticamente (mediante la limpieza del sistema).

+3

No es código abierto ** **, ¿o sí? –

+0

¿Es al menos gratis (de pago) o tiene que comprarlo? – hasen

+1

No es gratis, pero puede usar su versión beta de forma gratuita (al menos por ahora): las compilaciones nocturnas están disponibles en: http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+5.0+Nightly+Builds –

0

Puede utilizar la herramienta de cobertura de código, que está disponible en Visual Studio 2005/2008 Team Suite.

-1

La herramienta NDepend puede ayudar a encontrar el código no utilizado en una base de código .NET. Sin embargo, esta herramienta no es de código abierto. Descargo de responsabilidad: soy uno de los desarrolladores de esta herramienta.

NDepen propone escribir Code Rule over LINQ Query (CQLinq). Alrededor se proponen 200 default code rules, 3 de ellos está dedicado a código no utilizado/muertos detección:

NDepend está integrado en Visual Studio, por lo que estas reglas pueden ser checked/browsed/edited right inside the IDE. La herramienta también se puede integrar en su proceso de CI y puede compilar reports que mostrará las reglas violadas y los elementos del código culpable.

Si hace clic en estos 3 enlaces de arriba hacia el código fuente de estas reglas, verá que las relativas a los tipos y métodos son un poco complejas. Esto se debe a que no solo detectan los tipos y métodos no utilizados, sino también los tipos y métodos utilizados solo por tipos y métodos muertos no utilizados (recursivo).

Este es análisis estático, de ahí el prefijo Potencialmente en los nombres de las reglas. Si se usa un elemento de código solo mediante reflexión, estas reglas podrían considerarlo como no utilizado, que no es el caso.

Además de utilizar estas 3 reglas, aconsejaría medir la cobertura del código mediante 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 puede descartarse de manera segura. Esto es especialmente útil en algoritmos complejos donde no está claro si una rama de código es alcanzable o no.

Cuestiones relacionadas