¿Cuáles son algunas de las estrategias que se utilizan al implementar el análisis FxCop/static en bases de códigos existentes con violaciones existentes? ¿Cómo puede uno reducir de manera más efectiva las violaciones del análisis estático?¿Cómo se implementa un análisis FxCop/static en una base de código existente
Respuesta
Para empezar, haga un uso liberal del atributo [SuppressMessage]. Al menos al principio. Una vez que obtiene el recuento a 0 a través del atributo, a continuación, establece una regla que los nuevos checkins no pueden introducir violaciones FxCop.
Visual Studio 2008 tiene una buena característica de análisis de código que le permite garantizar que el análisis de código se ejecuta en cada compilación y puede tratar las advertencias como errores. Eso puede ralentizar un poco las cosas, así que recomiendo configurar un servidor de integración continua (como CruiseControl.NET) y hacer que se ejecute el análisis del código cada vez que se registre.
Una vez que lo tenga bajo control y no presente nuevas infracciones con cada checkin, comience a atacar clases enteras de violaciones de FxCop a la vez con el objetivo de eliminar los SuppressMessageAttributes que utilizó.
La manera de hacer un seguimiento de cuáles realmente desea conservar es agregar siempre un valor de Justificación a los que realmente desea suprimir.
¡Reescriba su código en un estilo que pase!
En serio, una base de código antigua tendrá cientos de errores, pero es por eso que tenemos programadores novatos/pasantes. Corregir las infracciones de FxCop es una excelente forma de obtener una descripción general de la base de código y también aprender a escribir el código .NET conforme.
Así que, solo muerde la bala, bebe mucha cafeína, ¡y solo hazlo en un par de días!
NDepende looks like podría hacer lo que está buscando, pero no estoy seguro de si puede integrarse en una compilación automatizada de CruiseControl.Net, y fallar la construcción si el código no cumple con los requisitos (que es lo que me gustaría que sucediera).
¿Alguna otra idea?
Una alternativa a FxCop sería utilizar la herramienta NDepend. Esta herramienta permite escribir Reglas de código sobre C# LINQ consultas (lo que llamamos CQLinq). Descargo de responsabilidad: soy uno de los desarrolladores de la herramienta
Más de 200 code rules se han propuesto por defecto. La personalización de las reglas existentes o la creación de sus propias reglas es sencilla gracias a la conocida sintaxis C# LINQ.
Para mantener el número de falsos positivos baja, CQLinq ofrece las capacidades únicas para definir lo que es el conjunto JustMyCode través de consultas especiales de código con el prefijo notmycode. Se pueden encontrar más explicaciones acerca de esta característica here.Éstos son por ejemplo dos notmycode consultas predeterminadas:
Para mantener el número de falsos positivos baja, con CQLinq también se puede enfocar reglas resultan sólo en código añadido o código refactorizado, desde un defined baseline in the past. Ver la siguiente regla, que detectan los métodos añadidos o refactorizado demasiado compleja desde la línea de base:
warnif count > 0
from m in Methods
where m.CyclomaticComplexity > 20 &&
m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }
Por último, el aviso de que con las reglas del código NDepend se pueden verificar live in Visual Studio y en tiempo de proceso de construcción, en un generated HTML+javascript report.
- 1. ¿Cómo se implementa una clase en C?
- 2. ¿Cómo se implementa una interfaz en IronPython?
- 3. Cómo implementar asociaciones polimórficas en una base de datos existente
- 4. ¿cómo se implementa sarcmark?
- 5. ¿Cómo se implementa "const"?
- 6. ¿Cómo se implementa HttpSession?
- 7. ¿Cómo introducir boost :: shared_ptr en una base de código C++ existente (grande)?
- 8. ¿Cómo se implementa OpenID?
- 9. ¿Cómo construir una herramienta de análisis de código estático?
- 10. ¿Cómo se implementa __RTC_CheckEsp?
- 11. ¿Cómo se implementa Set.toString()?
- 12. ¿Cómo se implementa ** en Python?
- 13. ¿Cómo se implementa set()?
- 14. ¿Cómo se implementa un JMP (x86) relativo en un ensamblador?
- 15. ¿Cómo crear un proyecto de base de datos desde una base de datos SQL Server existente?
- 16. ¿Cómo se implementa BigDecimal?
- 17. ¿Cómo suprimir el análisis de código en el código generado?
- 18. ¿Qué lenguaje de scripting apoyar en una base de código existente?
- 19. ¿Cómo se implementa la propiedad de dependencia?
- 20. ¿Cómo se implementa std :: tuple?
- 21. ¿Cómo implementa un MPVolumeView?
- 22. ¿Cómo se implementa una cláusula de guardia en JavaScript?
- 23. ¿Cómo se implementa el multiproceso de Python en Windows?
- 24. ¿Cómo se pone una gran base de datos existente (esquema) bajo control de fuente?
- 25. ¿Cómo se implementa string.find en CPython?
- 26. Análisis de código C#
- 27. ¿Cómo se implementa un buffer circular en C?
- 28. ¿Cómo se implementa un Hadoop Mapper en Scala 2.9.0?
- 29. La herencia de una clase base que implementa INotifyPropertyChanged
- 30. ¿Cómo se implementa 'proporcionado' en un hecho en Midje?