Diferencias entre FxCop y StyleCop
El otro día recibí un correo electrónico en que me preguntaban si sabía cuales eran las diferencias entre FxCop y StyleCop.
El caso es que en realidad, no hay ninguna página Web que hable de las diferencias entre ambos productos, o al menos, la persona que me hizo la pregunta no la encontró y yo tampoco, así que he pensado que es bueno que exista algo de material al respecto para echar un poco de luz sobre el tema, y si es en nuestro idioma, mejor aún.
Antes de empezar, comentaré que ambas herramientas, están impulsadas por Microsoft, o mejor dicho, por personas que trabajan en Microsoft.
La última versión de FxCop es la v1.36 (Agosto 2008), y la última versión de StyleCop es la v4.3.1.3 (Marzo 2009).
Una vez dicho esto, paso a analizar algunos pros y contras de las dos herramientas y alguna cosa más de interés.
Origen de la herramienta:
1-. Pros de FxCop v1.36: FxCop salió como herramienta colaborativa Open Source para que la Comunidad colaborara y la hiciera más robusta agregando funcionalidades adicionales a través del feedback directo.
2-. Pros de StyleCop v4.3.1.3: Jason Allor de Microsoft, inició un proyecto interno y generó una herramienta para codificar bajo los estándares de Microsoft. Esa herramienta es el embrión de la actual StyleCop. El problema de Microsoft es que no todo el mundo utiliza esta herramienta, por lo que un proyecto desarrollado por Microsoft puede pasar las reglas de StyleCop y otro no, así de simple. Es decir, se ha intentado implantar StyleCop, pero no todo el mundo lo ha implantado.
3-. El equipo de Visual Studio Team System no tenía idea de la existencia de StyleCop hasta que empezó a extenderse su uso en la Comunidad. Cuando la conoció, vio que hacía cosas que FxCop no hacía.
Actualización y mejoras de la herramienta:
1-. Contra de FxCop v1.36: Su actualización se hace en fases más largas de tiempo.
2-. Pros de StyleCop v4.3.1.3: Su actualización se hace en fases más cortas de tiempo.
3-. Pros de FxCop v1.36: Tiene más antiguedad que StyleCop, y aunque StyleCop es bastante robusta, FxCop es quizás más robusta aún.
4-. Contra de StyleCop v4.3.1.3: No es un contra exactamente, pero si se trata de diferenciar con FxCop, FxCop es más robusta, si bien, las últimas mejoras y actualizaciones la han hecho casi tan robusta como FxCop.
Resolución de problemas:
1-. Contra de FxCop v1.36: Cuando encontramos un error que queremos solventar, no nos permitirá el cambio del código de forma directa.
2-. Contra de StyleCop v4.3.1.3: No permite dar soluciones o consejos ante fallos de seguridad, cultura, etc.
Código a Analizar:
1-. Pros de FxCop v1.36: Permite analizar código escrito tanto de VB para .NET como de C# (y en principio, en cualquier lenguaje de .NET).
2-. Contra de StyleCop v4.3.1.3: Es un tirón de orejas muy justificado. StyleCop no admite el análisis de código de VB para .NET, solo de C#.
Tipo de Análisis:
1-. Pros de FxCop v1.36: Permite analizar solo los ensamblados (el código MSIL) chequeando las construcciones de código. Se basa principalmente en el análisis de las reglas de diseño.
2-. Pros de FxCop v1.36: Dado que analiza el binario, analiza el fichero que va a ser ejecutado propiamente por el cliente, analizando aspectos relacionados con el código, rendimiento, localización y seguridad.
3-. Pros de StyleCop v4.3.1.3: Permite analizar solo el formateo del código fuente. Analiza el código fuente y su nomenclatura, y las cruza con unas reglas de codificación de forma que el código sea escrito de la forma más homogénea posible.
Detalles de los mensajes de error:
1-. Pros de FxCop v1.36: El fichero HTML resultante, detalla de los errores sintácticos y violaciones identificando de forma única cada uno de ellos, indicando incluso un enlace a la librería de MSDN para describir mejor el problema o error detectado y su posible corrección.
2-. Pros de FxCop v1.36 y StyleCop v4.3.1.3: Se integran con MSBuild.
3-. Contras de FxCop v1.36: En el caso de la integración con MSBuild, requiere el uso de la línea de comandos para utilizarlo en proyectos Web y Mobile.
Los riesgos de las reglas de codificación personalizadas:
1-. Tanto con FxCop como con StyleCop podemos preparar nuestras «propias» reglas de codificación y estilo haciendo más flexible StyleCop. Que sean flexibles es bueno y positivo, pero se debe tener cuidado sobre la posible anarquía a la hora de que cada equipo de desarrollo prepare «sus» propias reglas de codificación.
¿Cuál usar?
Como todo, depende. Para el gusto están los colores, así que cada persona verá bondades, ventajas y desventajas en cada uno.
Tampoco debemos cerrarnos a FxCop o StyleCop, de hecho, Microsoft agrega en sus herramientas de desarrollo (Visual Studio 2005 y Visual Studio 2008), sus propias herramientas de análisis de código que conviene conocer y que tiene su embrión en FxCop.
Así, que podríamos decir que:
1-. Hay equipos de desarrollo que utilizan FxCop y StyleCop asegurándose que las reglas que utiliza uno y otro sean compatibles.
2-. Hay equipos de desarrollo que solo utilizan FxCop porque se aseguran y se fían más de analizar el ensamblado resultante que el código fuente.
3-. Hay equipos que solo buscan una nomenclatura de código escrito (calidad) y solo utilizar StyleCop, siempre y cuando, solo utilicen C# como lenguaje.
4-. FxCop debe ser lanzado desde la línea de comandos, pero hay herramientas que permiten lanzarlo desde un front-end amigable.
5-. StyleCop es utilizado por algunas personas dentro de Microsoft, y por lo tanto, es una herramienta «fiable». Se trata de una herramienta óptima de cara al análisis del código previo antes de ser compilado. Solo asegura que el código está escrito de acuerdo a unas determinadas normas.
6-. Visual Studio 2008 SP1 trae ya todas las reglas de análisis y corrección de las últimas versiones de FxCop y StyleCop. Si tienes Visual Studio 2008 SP1, entonces no tendrás que descargarte la última versión de FxCop.
7-. Visual Studio Team System – Development Edition proporciona una herramienta llamada CodeAnalysis que permite analizar el código de una aplicación. Existen diferencias reales entre CodeAnalysis y FxCop que convienen conocer y que indico en la sección de enlaces.
8-. Otra herramienta interesante a tener en cuenta es StyleCop for ReSharper que encontraremos en CodePlex. En la sección de enlaces, indico el enlace a esta herramienta que está en versión v4.5.0.4 para ReSharper v4.5 y StyleCop v4.3.1.3.
Espero que toda esta información le sea de utilidad e interés a más de uno.
Referencias
Enlace Web: Blog del equipo de Microsoft StyleCop (Source Code Style and Consistency Tool).
Enlace Web: MSDN Gallery sobre StyleCop.
Enlace Web: Blog del equipo de Microsoft FxCop (The Visual Studio Code Analysis Team Blog).
Enlace Web: Blog del equipo de Microsoft CodeAnalysis (Blog discontinuado – The Visual Studio Code Analysis Team Blog).
Enlace Web: MSDN Gallery sobre Code Analysis.
Enlace Web: Design Guidelines for Developing Class Libraries.
Enlace Web: Comparación de reglas entre CodeAnalysis y FxCop.
Enlace Web: Escribiendo nuestras propias reglas para FxCop y Code Analysis.
Enlace Web: StyleCop fpr ReCharper.
Enlace Web: Recomiendo esta lectura sobre FxCopy y StyleCop.
Enlace Web: Lectura de el Bruno sobre centralización de reglas de Code Analysis con TFS 2008.
4 Responsesso far
Me gustado mucho, yo sólo conozco FxCop, creo que es una gran herramienta pero tiene inconcluencias importantes.
Genial Jorge,
Me alegro que mi pregunta te haya levantado tanto interes como para crear una entrada. Y por supuesto muy buena la entrada, deseando estaba de encontrar algo así.
Muchas Gracias.
Muy bueno Jorge, otro de los problemas es la adopción de estas herramientas en una fase posterior al comienzo del proyecto, tanto StyleCop como FxCop, visualizan warning diferentes, en mi caso además, utilizo Resharper y Code Issues de DevExpress, y muchos casos las diferentes utilidades hasta se contradicen, aunque como apuntas podemos configurar cada una para que tengan comportamientos similares, esperemos una herramienta que auné lo mejor de ambas para facilitar la labor, y que como Resharper con su «Cleanup Code», en muchos casos sea capaz de refactorizar el código de forma automática evitando tener que reescribir, porque cumplir todas las reglas es prácticamente imposible.
Pero evitan cometer gran cantidad de errores de diseño y optimizan tu código.
Por otro lado también comentar que uno de los problema de fxcop, es el tiempo que lleva al proceso cada vez que realizamos la compilación, sobre todo en proyecto grandes, para mi seria más adecuado hacer algo similar al resharper que analice las reglas en tiempo de ejecución, en lugar de hacerlo posteriormente.
Salu2.
No conocía el «StyleCop for ReSharper» voy por el…
Carlos.