Microsoft FxCop…

FxCop es un analizador de buenas prácticas de programación, es una herramienta de análisis de código que verifica el código de las assemblies de .NET para lograr la conformidad de “Microsoft .NET Framework Design Guidelines“.

FxCop inspecciona los assemblies para detectar más de 200 defectos en las siguientes áreas: 

  • Diseño de librerías
  • Globalización
  • Convenciones de nomenclatura
  • Performance
  • Interoperabilidad y portabilidad
  • Seguridad
  • Usabilidad

FxCop incluye versiones GUI y línea de comandos, con soporte para analizar componentes .NET 1.x, .NET 2.0 y .NET 3.x.

FxCop nos ayuda a analizar nuestro código y nos propone algunas mejoras y fixes al código, con el fin de hacerlo más robusto y seguro.

Como dije, hay 2 formas de analizar el código, pero la manera más fácil y rápida es utilizando su GUI:

en VS .NET

Si contamos con la versión 1.35 podemos realizar el análisis, haciendo click con el botón derecho en el proyecto y haciendo click en la opción Run Code Analysis, como se muestra en la figura:

como resultado en la lista de errores obtenemos los warnings relacionados a los fixes propuestos:


la resolución de los problemas encontrados se basa en leer e interpretar los warnings. Cabe aclarar que para personalizar las reglas utilizadas en el Code Analysis, se las puede modificar en las propiedades del proyecto, en el Tab “Code Analysis”.

Si tenemos la versión 1.36b el análisis puede realizarse sobre los proyectos o también sobre clases específicas (de ahí la denominación de “Source analysis” o “análisis de fuente”:

y los resultados se visualizaran en una lista denominada “source analysis”.

FxCop.exe

FxCop.exe brinda una interfaz amigable en la cual se pueden crear proyectos de análisis de código, en el cual se pueden agregar numerosos assemblies, personalizar las políticas (reglas) de análisis, etc. En cada una de las issues reportadas se puede ver la descripción, su link a las guías de diseño relacionado, link al código, información adicional, entre otros.

Bien, ahora queda por aclarar que FxCop nos ayuda a hacer de nuestro código más robusto y más seguro, más eficiente y estándar con respecto a las buenas prácticas, por lo que es importante que sepamos guiarnos con la herramienta, absorviendo las recomendaciones para usarlas de manera directa e intuitivamente en nuestro futuro código…

En el proyecto en que estoy trabajando después de terminar el desarrollo de casi todos los paquetes, llegamos a la instancia de optimización de la aplicación, por lo cual la primer medida es optimizar el código (quizás se podría haber echo antes), y qué mejor herramienta para esto que la nombrada en esta entrada. A partir de ahora, me queda claro que debería aplicarlo a cada desarrollo que tenga. 😀

Anuncios
Publicado en Development, Herramientas. Etiquetas: . Leave a Comment »

Patrones de diseño…

¿Qué es un patrón de diseño?

Son soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones basadas en la experiencia y que se ha demostrado que funcionan.

Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Los patrones se agrupan en 3 grupos principales:

  • Patrones creacionales
  • Patrones Estructurales
  • Patrones de Comportamiento

Les paso unos links (en inglés) sobre los patrones de diseño:

Obviamente muchas veces aplicamos intuitivamente patrones de diseño en nuestro trabajo de desarrollo diario… Como consejo les digo, no se preocupen por saberlos de memoria a todos, no se preocupen por conocer todos sus nombres (los más utilizados quizás si, ya que nos van a ayudar con nuestro profesionalismo), pero sí les recomiendo tenerlos siempre en cuenta y aprender de sus buenas prácticas.

Que les sea útil, saludos!

Publicado en Development. Etiquetas: . Leave a Comment »

Desarrollador 5 Estrellas…

No se con exactitud desde cuando, pero se ha publicado en la página de DCE todo el contenido relacionado con esta certificación, agrupado por cada uno de los niveles del 0 al 5 y por último los conocimientos necesarios de la estrella gold. Estas publicaciones incluyen ppts, docs, videos y ejemplos.

Cabe destacar que esta es una fuente muy interesante y muy variada de conocimiento… Desde los fundamentos de programación hasta tecnologías avanzadas como ser el Entity Framework.

Les dejo el link:

http://www.mslatam.com/latam/msdn/comunidad/dce2005/biblioteca.aspx

Saludos!

Experiencia e implementación de GUID

Se preguntarán a que viene todo esto del GUID.. Bueno, les contaré mi historia… jaj

Cuando empecé a trabajar en el proyecto en que estoy (denominado Genesis), como es común empezamos a trabajar con Base de Datos Relacionales, usando como PK (primary key) enteros, únicos (obviamente) y autoincrementales.

Después de unos meses de desarrollo se incorporó a nuestro proyecto un Senior Architect que trajo consigo una idea (loca en ese momento), cambiar la Base de Datos, haciendo que las tablas tengan como PK “UNIQUEIDENTIFIER”s, debiendo migrar a una nueva instancia de SQL.

Una de las razones (100% válida) era la gran cantidad de datos con las que trabajaría (imagínensen todo el sistema de una red de electrodomésticos) siendo que dan se dan de alta unos 5000 registros por día. Debido a esto el uso de enteros como PKs es altamente limitante, seguramente en cuestión de un tiempo nos enfrentaríamos al problema de limitación de índices. (esta es una de las razones, la mas signifitiva, aunque también es solucionable con un buen diseño de tablas y relaciones).

Luego del consenso de “migrar” la BD surgió la gran pregunta del millón ¿realmente no se repiten los GUIDs? tras la exposición de las justificaciones probabilísticas y matématicas y blabla… y que se genera con la MAC y con la fecha… (¿que pasa si no se tiene placa de red?) blabla…

Llegué a la conclusión: nadie puede afirmar con el 100% de seguridad que no se pueden repetir los GUIDs, pero existe una gran probabilidad de que no lo hagan!.

Cabe destacar que usar GUIDs no es lo mejor para cualquier clase de BD, tiene sus desventajas como ser que ocupa 128 bits, contra Ints de 32 o 64 bits, por lo que puede llegar a relentizar el sistema (no creo que sea la gran cosa tampoco).

Un poco mas a la práctica una desventaja que le encuentro es la casi imposibilidad de recordar los dígitos de por ejemplo una sucursal del sistema (hablando en serio, yo recuerdo 4 dígitos de los registros mas significativos). Otra desventaja que puede llegar a percibir el usuario es cuando asignamos un ID (value) a un combo (p.ej.) y este combo resulta que no lo tiene ya sea porque está inactivo o porque no existe, se muestra en pantalla semejante número que puede llegar a espantar al usuario jaja. Este problema en parte la pudimos llegar a resolver.

Otro punto a tener en cuenta es que, al trabajar con DataSet tipados, no podemos hacerle a estos una asignación directa a null ni leer un null (esto tira una linda excepción), por lo que debemos usar unos métodos que nos brinda el .NET2.0:

DocPrueba documento = new DocPrueba();
DocPrueba.paramRow fila = documento.param.NewparamRow();
fila.SetIDSucursalNull();

y para leer un null:

if (fila.IsIDSucursalNull()) {
   //...
}
Publicado en C#, Development. Etiquetas: . 3 Comments »

¿Cómo se usa GUID en programación?

  • En SQL-Server se denomina a GUID como “UNIQUEIDENTIFIER” y el mismo se puede generar llamando a la funición NEWID():
    INSERT INTO t_TransferenciaEstadoHistorico
    (
        ID_TransferenciaEstadoHistorico,
        ID_Transferencia,
        ID_TransferenciaEstado,
        FechaDesde_TransferenciaEstadoHistorico
    )
    VALUES
    (
        NEWID(),
        @pID_Transferencia,
        @pID_TransferenciaEstado,
        @pFecha_Transferencia
    )
    
  • En .NET (mis ejemplos van a ser en C#)  existe la estructura GUID como System.Guidcuyos miembros se pueden ver en el link: http://msdn2.microsoft.com/es-es/library/system.guid_members(VS.80).aspxUn punto importante a destacar es su constructor Guid (String) que instancia un nuevo GUID a partir del String recibido como parámetro.¿Cómo hacer para generar un Guid? Fácil, solo debemos usar el método NewGuid():Guid id = Guid.NewGuid();

    Una particularidad a señalar es que, al ser una estructura Guid, no permite hacer referencias a nulo. O sea Guid id = null es erróneo! para lo cual una solución (no es la que uso, ni me gusta) es usar Guid.Empty, que es un Guid que contiene todos sus terminos en 0.

    La otra solución, mas elegante es usar los tipos “Nullable” en el Fwk 2.0:

    Guid? id;

    ver http://msdn2.microsoft.com/es-es/library/b3h38hb0(VS.80).aspx

Publicado en C#, Development. Etiquetas: . 2 Comments »

¿Qué es GUID?

Bueno, en esta 2da entrada voy a hablar un poco de lo que significa GUID y cual es su importancia.

GUID: Global Unique IDentifier.  Es una implementación de Microsoft de un estándar llamado Universal Unique Identifier o UUID. Es un código de 128 bits “único en todo el espacio y universo conocido por el hombre” (según se dice y está comprobado probabilísticamente).

Si bien no se puede garantizar que cada GUID generado sea único, el número total de claves únicas (2128) es tan grande, que la posibilidad de que se genere un mismo número dos veces puede considerarse prácticamente nula.

Los GUIDs son escritos empleando una palabra de cuatro bytes, tres palabras de dos bytes y una palabra de seis bytes, como por ejemplo:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

La estructura del tipo de dato es:

typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];

} GUID;

El algoritmo empleado para generar nuevos GUIDs ha sido ampliamente criticado. Al principio, la dirección MAC de la tarjeta de red del usuario se usaba como base para varios dígitos GUID, lo que significaba que conociendo el algoritmo se podía averiguar la MAC del creador. Este agujero en la privacidad se utilizó para localizar al creador del gusano Melissa. Después de que esto se descubriera, Microsoft cambió el algoritmo, por lo que ya no contiene la dirección MAC.  También parece ser que utiliza la Fecha y la Hora del instante de creación.

Publicado en C#, Development. Etiquetas: . Leave a Comment »