¿Analizador de código C # para evaluar la capacidad de prueba?

Estoy tratando de escribir un programa que me permita darle una colección de archivos de código C# y analizarlos para problemas de comprobabilidad. Estoy comenzando con solo los 4 proporcionados en el enlace anterior.

El objetivo final es crear un informe de todos los archivos, cualquier problema de capacidad de prueba que puedan tener y anotaciones de código específicas sobre dónde se pueden observar estos problemas (si corresponde). En lo que me gustaría recibir ayuda es en elegir algunas herramientas para facilitar el trabajo de analizar el código; Puedo leer todo como una cadena, pero ordenar el código para analizarlo es muy difícil en esa situación.

He evaluado las siguientes cosas hasta ahora:

  • FxCop (no funciona para nada que no sea un .dll, algunos proyectos de prueba son proyectos web con lógica comprobable en sus controladores o presentadores)
  • Contratos de código (no es lo que necesito; esto no ayuda a identificar problemas)
  • Pex (ídem)
  • NRefactorio (Puede ser interesante, pero la documentación y la información de uso no existen y las demostraciones no funcionan, incluso con gtk/mono instalado en Windows)
  • CSharpCodeProvider (El método .Parse devuelve una NotImplementedException)

En cuanto a lo que estoy buscando:

Al menos me gustaría tener detección de estructuras de objetos básicos y objetos de acceso para navegar (por ejemplo, un Declarar impuestos el objeto tiene un Espacio de nombres propiedad con una colección de Clases, Cada Clase tiene colecciones de Miembros, Constructoresy Métodos, etc.). Obviamente, si hay herramientas que pueden volverse cada vez más elaboradas y detalladas, sería increíble, pero tener estas cosas disponibles para permitirme procesar cadenas pequeñas y enfocadas sería una completa bendición.

Gracias de antemano.

preguntado el 03 de mayo de 12 a las 17:05

Suena como si estuvieras buscando CodeDom. -

Creo que lo estás haciendo de la manera incorrecta. Creo que debe abordarlo desde el punto de vista en el que no es posible crear un código que no coincida con sus pautas de codificación que NO se puede probar. No tuve problemas para configurar FxCop en grandes soluciones tanto en proyectos WPF/Win32/dll. -

@Ramhound ¿Cómo probar/analizar controladores/presentadores en este caso entonces? -

@RobertHarvey: Sí, de ahí vino CSharpCodeProvider, y el análisis que devuelve un NIE. Estaba más que un poco enojado por eso cuando lo vi. Sin embargo, me rendí en ese momento; es posible que me di por vencido pronto. Si tiene alguna sugerencia para hacer que CodeDom funcione, ¡soy todo oídos! -

2 Respuestas

Si puede usar el código de versión preliminar, es posible que desee consultar Roslyn, es decir, "compilador como servicio":

Tradicionalmente, los compiladores son cajas negras: el código fuente va en un extremo y los archivos de objetos o ensamblados salen en el otro extremo. El Roslyn [proyecto] cambia ese modelo al abrir los compiladores de Visual Basic y C# como API. Estas API permiten que las herramientas y los usuarios finales compartan la gran cantidad de información que los compiladores tienen sobre el código.

Tenga en cuenta, sin embargo, que interpretar lo que obtiene (un árbol de sintaxis) aún puede ser mucho trabajo.

contestado el 03 de mayo de 12 a las 18:05

NRefactorio 5 ofrece aproximadamente las mismas funciones de análisis para C# que Roslyn para C#, "solo" falta la capacidad de compilar en IL.

No estoy seguro de qué está pasando con la demostración basada en GTK; así que arreglé la demostración basada en WinForms y la volví a agregar a la solución.

Para analizar el código C#, use new CSharpParser().Parse(sourceCode, "filename.cs"). Esto le dará el árbol de sintaxis completo para el archivo; es decir, un CompilationUnit nodo raíz con NamespaceDeclarations como niños. Utilice la aplicación de demostración para ver cómo se ve el árbol.

Si desea detectar ciertos patrones de código (sus problemas de capacidad de prueba), puede usar la función de coincidencia de patrones de NRefactory. (ver doc/Pattern Matching.html para detalles)

Creo que NRefactory con coincidencia de patrones podría funcionar mejor que Roslyn para su caso de uso.

contestado el 19 de mayo de 12 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.