Skip navigation.

miSiOneS dOMiNicAs - miSiOneS rEaleS

tHe sUpEr wh0g3 - g3r4rd0rcm bLog ;-)

Arquitectura de Software

,

Mientras me preparo para el siguiente sistema, me puse a buscar que leer sobre el tema y encontre esta interesante presentación sobre historia y una breve introducción a la Arquitectura de Software. ;-)

Introducción a la Arquitectura de Software.ppt


También les dejo este archivo sobre Introducción a la Ingeniería de Software.

Introduccion a la Ingenieria de Software.pdf

La capa humana de los sistemas.

, , ,

Que tal,

Tuve en puerta otro proyecto, lo que me gusto mucho de él fue que, otra vez, abarcaba muchas áreas. Se me hace muy interesante cuando involucras a muchas personas en un proyecto porque podemos ver a cada persona como una parte del sistema y entonces un grupo de personas donde cada quien hace su parte se convierte en nuestra "arquitectura del sistema".

El meollo de este tipo de proyectos es que uno debe diseñar la arquitectura del sistema en términos de las personas que participan en el proyecto y sus funciones. Por ejemplo sí, en nuestra arquitectura el componente 1 hace las tareas X y Y pero en la vida real, la tarea X la hace una persona y la tarea Y la hace otra, entonces debemos considerar "dos componentes" en la arquitectura. Para esto es importante saber definir no solo funciones de los "componentes" sino también responsabilidades de las personas.

Por ejemplo, me topé con el siguiente problema:

1.La persona X era responsable de construir una vista SQL para pasarle datos a un sistema.
2.La persona Y debía acceder a dicha vista y procesar los datos.
3.La persona Y tenía que validar los datos antes de procesarlos.

La duda:
¿qué es mejor? ¿Que la persona X valide los datos desde la sentencia SQL que define los datos o que la persona Y los valide al nivel de la aplicación?

Le dí muchas vueltas y no supe que responder =(, los dos caminos eran completamente viables. Un compañero arquitecto de muchos años de experiencia le dío al clavo. El notó que la consulta debía acceder millones de registros, por lo que sí metíamos la validación en las sentencias SQL, la consulta tardaría mucho y nos quedaríamos sin saber que pasaba. En cambio si validabamos los datos en la aplicación, la consulta sería más rápida y podíamos ir actualizando algún indicador cada que procesaramos N registros para saber que el sistema seguía vivo. =)

Este tipo de cosas de la arquitectura de sistemas, solo se domina con el tiempo! =)

Finalmente, todos los involucrados cooperaron y el sistema esta a punto de liberarse.

Este tipo de proyectos son retadores porque te invitan a no sólo crear una arquitectura de un software, sino además debes considerar la "capa humana" y, por lo mismo, tratar con humanos, ejercitar al máximo la inteligencia y audacia para explicar, motivar y pedir las cosas! =)

Hasta Pronto!

Liberación del Primer Sistema

, , , ...

Hola, después de tanto tiempo! =)

Les platico que el proyecto con el que inicie este blog sobre Ingenería de Software (IS) ya lleva dos meses en producción y el usuario esta contento con él.

De él aprendí muchas cosas y lo que más rescato de la puesta en producción es no volver a pensar que "algunos detalles pueden afinarse a última hora". Siempre hay que hacer y validar cada una de las partes del sistema antes de ponerlo en producción. Es importante hacer las pruebas con datos reales y también es importante tratar de que el usuario defina todo lo que desea.

Digo lo de las pruebas con datos reales porque a mí se me ocurrío inventar casos de prueba pero cuando el sistema ya funcionaba en producción ví que había muchas cosas que no había considerado. En ese momento me tuvo que poner a pensar rápido como solucionarlo. Eso no me agrada porque con "código desesperado" los sistemas pierden robustez, legibilidad y facilidad de mantenimiento. =( Sí hubiera tomado muestras de la información real, habría podido prevenir esta situación. Hay ocasiones en que no se cuentan con grandes volúmenes de información para probar, lo que recomiendo en esos casos y poner el sistema en producción pero dejarselo sólo a unos pocos usuarios para que lo prueben y monitoreen. Conforme vayan saliendo los errores impredecibles deben ser modificados y ya después un tiempo considerable, "abrir" el sistema para todos sus usuarios. =)

Otra cosa que me sucedió cuando el sistema de reportes ya estaba instalado fue que el usuario quería acceder a información de varios meses atrás... :S. Nunca se comentó nada de que se haría una carga previa en el sistema con datos antiguos, simplemente se pensó para comenzar a guardar información en el momento de la liberación. Los reportes estarían disponibles a partir de esa fecha. Total que el usuario se molesto por esto y dijo que el lo consideraba obvio.... :S El problema es que lo que él vió obvio, yo no lo ví así. He aqui toda la importancia de la Ingeniería de Requerimientos. No me volverá a pasar! ;-)

Dejo este buen artículo sobre Ingeniería de Requisitos (otro nombre de esta ciencia) para quien esté interesado en el largo tema de la correcta definición de las necesidades del usuario antes de iniciar el sistema: ING_REQ.pdf


Pásenla bien! =)

Diseño Deficiente de la Base de Datos

, , , ...

A lo largo del desarrollo del sistema, me he dado cuenta de otros detalles que no se deben dejar pasar durante la fase del diseño arquitectónico del sistema. Me refiero al diseño de la base de datos.

La base de datos es el conjunto de información que le da sentido a un sistema. No existen sistemas que no trabajen con datos y cuando estos datos necesitan ser almacenados tendrán que hacerlo en una base de datos. Incluso un solo archivo .txt puede verse como una base de datos primitiva.

Los manejadores de bases de datos modernos nos permiten operar con bases de datos muy poderosas y complejas, capaces de resguardar por sí solas, de manera íntegra, todos los datos de un negocio. Esto lo hacen a traves de procedimientos almacenados, disparadores de eventos, restricciones, índices y paquetes, entre otras cosas.

Cuando diseñamos una base de datos, la tarea principal consiste en identificar los datos y sus respectivas relaciones. Es importante tomar en cuenta la teoría de normalización de bases de datos en esta fase. Otra tarea consiste en definir tipos de datos y llaves. A primera vista, una vez que se tiene esto listo, parece que hemos terminado y surge la constante tentación del programador poco experimentado: COMENZAR A PROGRAMAR. En este caso, comenzar a utilizar la base de datos...

Sin embargo no es así. El diseño conceptual de la base de datos, anteriormente citado, es sólo el PRINCIPIO de la construcción de una buena base de datos. Hay más factores a tomar en cuenta, tanto del diseño lógico como del físico.

Respecto del diseño lógico, es importante tener cuidado incluso de los nombres de los campos, es importante definir una nomenclatura para diferenciar tablas crecientes de tablas catalogo, columnas llave de columnas descriptivas, etc. Una vez que hemos definido nuestra nomenclatura, es importante apegarse a ella a lo largo de todas las tablas. Esto nos facilitara mucho la programación de sql y hará que nuestras consultas sean legibles, facilitando así el mantenimiento de la base y de la aplicación.

Siguiendo con el diseño lógico, una vez que hemos terminado el diseño de las tablas y sus relaciones, es necesario definir los usuarios de la base. Debido a los ataques de inyección de sql, una buena medida de seguridad consiste en utilizar siempre usuarios con permisos limitados según las actividades que le son necesarias. Por ejemplo, al momento de generar un reporte únicamente necesitamos permisos de lectura por lo que podríamos crear un usuario que solo pueda leer y utilizar ese usuario cada vez que vayamos a generar un reporte. Cuando necesitemos escribir, utilizaremos otro usuario. Para obtener una seguridad mas rigurosa, además de limitar el acceso por permisos, lo limitamos también por objetos. Es decir, indicamos que un usuario puede leer o escribir SOLAMENTE en ciertas tablas.

Respecto del diseño físico, es importante considerar en que lugar estará la base de datos, ver si usará el mismo servidor para la base que para la aplicación. En caso de que no sea así, ver si existen las configuraciones de red necesarias para que los dos servidores puedan comunicarse, analizar el tráfico que aumentarán a la red las transacciones entre ambos servidores y definir las reglas de crecimiento para la base.

Es interesante esto de ser arquitecto de sistemas! :=)

Hasta Pronto.

Liga del día:
http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java

Página del día:
http://www.ctube.net/
;-)

Canción del día:
Sweet Sacrifice - Evanescence

Frase del día:
No porque me guste la misma música que una persona significa que soy igual a esa persona. :-o

Nunca se bajen música de:
Eagles

Faltaron Diagramas

, , , ...

Resulta que me he dado cuenta de que me faltaron varios diagramas importantes para la realización de este proyecto.

Mi error fue pensar SOLO en el sistema a desarrollar y no tomar en cuenta la arquitectura propia que le daría soporte a la aplicación. En concreto me faltó:

1.- Definir la base de datos (nombres de tablas, llaves primarias, foráneas, catálogos, etc). Así como realizar los cálculos de crecimiento mensual en disco.

2.- Definir en donde sería instalada la aplicación y en donde sería instalada la base de datos. Para esto debe tomarse en cuenta, si va a estar en internet, en la intranet, si se necesita velocidad, espacio, seguridad y demás cuestiones técnicas.

3.- Elaborar un diagrama esquemático sobre la arquitectura del sistema, localización, nombres e ip's de los servidores de aplicación y de base de datos.

4.- Compatibilidad de la plataforma en la que se desea desarrollar con las plataformas existentes.

En fin, como pueden darse cuenta, todo esto es labor de un buen arquitecto, pero como nunca he sido arquitecto, no tenía ni idea de todos estos asuntos. Lo importante es que gracias a la apertura de la IS descubro cada vez más aspectos a tomar en cuenta ANTES de desarrollar un proyecto.

Saludos ;-)

El blog del día:
http://my.opera.com/Gine/blog/

La página del día:
http://www.news.com.au/dailytelegraph/story/0,22049,22535838-5012895,00.html

Very fantastic girl! =)

Seguimos con IS

, , , ...

Después de aventurarme en al confuso mundo de la documentación, he terminado de realizar la etapa de análisis y diseño de un nuevo sistema de reporteo. El saldo son 11 hojas completitas, llenas de diagramas por todas partes.

He de confesar, que de todo lo que hice, solo entendí el 50%, por mucho. En gran parte me confundía y no sabía bien que hacer debido, en primer lugar, a que no tengo quien me revise los diagramas. En fin, poco a poco iré aprendiendo con ayuda del método tradicional de IS en México: prueba y error! jejejeje.

Sin embargo, estoy muy asombrado de los resultados de ambas etapas. No cabe duda que la IS ayuda mucho. Experimente una especie de iluminación progresiva que me permitió ir descrifrando y DISEÑANDO una solución completa, eficaz y mantenible sin tener que programar nada. Debido a que esa es la meta de la IS, parece que tuve éxito.

Tengo el presentimiento de que todos los diagramas que hice, en particular el diagrama de clases, me ayudará muchísimo a programar fluidamente y sin descalabros. Mis dedos simplemente bailarán sobre el teclado....

De todo este trabajo lo que siento que me sirvió más son los modelos CRC, el diagrama de clases y el prototipo.


Pues vamos a comenzar a programar!!!!!!! Yuhuuuuu!!!!!!! Ya después les cuento si todo este rollo, de hacer primero los planos, sirve de algo. =)


El libro del día: Aprendiendo UML en 24 horas, Joseph Shmuller, Prentice Hall.
La liga del día: http://www.altillo.com/chistes/ingenierosa.asp
La imagen del día:


Pasenla Bien.
;-)

La segunda ilusión

, , ,

Volvamos a darle paso a la lucha constante contra la aburrición, ociosidad y paso inerte por este mundo tecnológico.

Hace un tiempo que me esta llamando la atención la Ingeniería de Software. Se me hace muy interesante y apasionante como pasar de la concepción de un sistema hasta su completa implementación y todo con pura teoría!!! =) Sin escribir una sola letra!

Estuve leyendo unas diapositivas del profe Abraham, uno de los de mayor infuiencia durante mi época universitaria (y aún hoy en día). El es un super doctor que, entre otras cosas, se chuto 2 maestrías. Una en computación y otra en ingeniería de software, aunque la titulación de la segunda le dío hueva.

Después de haber leído sus diapositivas, me surgió la duda sobre que carambas era un modelo CRC y encontre esta magnífica página en internet:

http://www.humbertocervantes.net/homepage/itzamna/DOCUMENTACION/Indice.html

Es de un greñudo rockero mexicano, defeño, que parece que sabe hacer bien las cosas, y eso ya desde el 99. Que cayucos, para hacer IS en aquellas epocas en que todavía se producia el vocho!

En fin, si les gusta la IS y son principiantes en ella, este caso real les ayudara a comprender muchas cosas.

Ahora voy a poner en práctica estas tarugadas de la IS, a ver como me salen amí.

Sean Felices, con o sin IS. ;-)

El primer entry

Hola a todos, hoy ando aburrido, por eso me puse a iniciar este blog. Ya veremos en que se convierte. ;-P

Suerte a todos.
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31