miércoles, 11 de junio de 2008

Ejemplo de Modelado con UML

Hola, veremos a continuación un sencillo ejemplo para implementar el modelado de requerimientos con UML, para esto tenemos los siguientes pasos:

• Descripción del problema
• Identificación de requisitos.
• Casos de uso.
• Conclusiones.


Comencemos,


Descripción del problema
  • Sokoban es un juego de varios niveles.
  • Cada nivel está compuesto por un jugador, cajas, repisas y muros.
  • El objetivo del jugador es empujar todas las cajas sobre las repisas.
  • Cuando esto sucede el jugador pasa al siguiente nivel.
  • Para mover una caja, el jugador debe colocarse al lado y empujarla. Si la casilla hacia la que está empujando la caja está libre la caja se moverá.
  • Si el jugador se queda bloqueado, es decir, no puede terminar el nivel, puede reiniciar el nivel perdiendo una vida.
  • Cuando el jugador pierde todas sus vidas la partida termina.


Identificación de requisitos

Una mini entrevista
¿Qué debe hacer el sistema (o tiene que tener) para implementar la descripción?

Requisitos:
• El sistema debe permitir comenzar una nueva partida y terminarla.
• El sistema debe permitir mover al jugador, a las cajas y reiniciar el nivel cuando
el usuario lo solicite.
• El sistema deberá almacenar varios niveles y cambiar de nivel cuando el usuario
complete el nivel actual.


Casos de uso

Los casos de uso son una respuesta,

¿Cómo puede un usuario jugar una partida de sokoban?

La primera pregunta que vamos a resolver:


¿cuántos actores tiene el sistema?

Un único actor:

  • ­ Persona humana que controla al jugador
  • ­ Su meta es jugar una partida de Sokoban

La segunda pregunta que vamos a resolver:

¿qué casos de uso necesitamos?



A continuación debemos completar la documentación de estos Casos de Uso, para esto existen las fichas de Casos de Uso, las que cumplen con el estandar de documentación de Casos de Uso:








Conclusiones

¿Cambiar de nivel es un caso de uso?
• No, porque sólo participa el sistema, no participa ningún actor externo.
• La única manera que un actor externo tiene de cambiar de nivel es mediante los movimientos (caso de uso 2)

¿Cargar un nivel es un caso de uso?
• No, porque sólo interviene el sistema.
• Además, cuando detallamos como cargar un nivel estamos detallando el sistema (queda fuera de la fase de requisitos).

¿Terminar la partida es un caso de uso?
• Como está redactado en el enunciado la respuesta es no.

¿Faltan casos de uso o están incompletos?
1. El sistema debe permitir comenzar una nueva partida y terminarla.

2. El sistema debe permitir mover al jugador y a las cajas y reiniciar el nivel cuando el usuario lo solicite.

3. El sistema deberá almacenar varios niveles y cambiar de nivel cuando el usuario complete el nivel actual

Los tres requisitos anteriores son los que definimos al principio, en la siguiente ficha vemos que los casos de uso cumplen con lo requerido.


Esta es una forma de comprobar que con los casos de uso definidos tenemos satisfechos los requerimientos.

Saludos y suerte !!

viernes, 16 de mayo de 2008

Instalador RPM firmado con clave GPG

Hola, este articulo nos servira para proteger con claves y firmas digitales nuestros softwares instalables, ya sean rpm, deb, etc.
Explico aqui de forma practica su uso.

1.- Objetivo: Generar un instalador que permita incluir una clave de tipo key con firma digital la cual contenga el periodo de tiempo que estará habilitado el software.

2.- Instalación de los paquetes necesarios
Para Linux Red-Hat o distribuciones que manejen gestor de paquetes RPM debe tener actualizados los siguientes paquetes:

Repositorios main, contrib, main-updates

# urpmi rpm rpm-build spec-helper libtool rpmlint
Para satisfacer las dependencias, se instalarán los paquetes siguientes:
..........
¿Efectuar la instalación de los 16 paquetes? (82 MB) (S/n) s
..........

3.- Generación del RPM con clave GPG, firmas y exportación

slack@debian:~$ gpg --gen-key
gpg (GnuPG) 1.4.6; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) [enter]
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 2
Key expires at dom 18 may 2008 12:26:28 CLT
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "

Real name: jorge_salomon
Email address: linSlackware@gmail.com
Comment: ejemplo de clave con expiracion para instalador RPM
You selected this USER-ID:
"jorge_salomon (ejemplo de clave con expiracion para instalador RPM) "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
++++++++++.++++++++++++++++++++.+++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++.++++++++++>.+++++.+++++....+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++.++++++++++++++++++++..++++++++++...+++++.+++++.+++++.+++++++++++++++++++++++++++++++++++.+++++..++++++++++++++++++++..+++++.+++++...++++++++++.+++++.++++++++++>++++++++++>+++++........................................................................................................>.+++++................+++++^^^
gpg: key FB0A8720 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2008-05-18
pub 1024D/FB0A8720 2008-05-16 [expires: 2008-05-18]
Key fingerprint = CA96 8146 B051 C0CF 8687 665C 9671 45F8 FB0A 8720
uid jorge_salomon (ejemplo de clave con expiracion para instalador RPM)
sub 2048g/1D35BFAD 2008-05-16 [expires: 2008-05-18]


Ya generada la clave a ocupar en el instalador podemos verificar con el siguiente comando:

slack@debian:~$ gpg --list-keys
/home/slack/.gnupg/pubring.gpg
------------------------------
pub 1024D/4F4DACF2 2008-05-15
uid Jorge Salomon
sub 2048g/B823BCC8 2008-05-15

pub 1024D/FB0A8720 2008-05-16 [expires: 2008-05-18]
uid jorge_salomon (ejemplo de clave con expiracion para instalador RPM)
sub 2048g/1D35BFAD 2008-05-16 [expires: 2008-05-18]

Confirmada la correcta generación de la clave, la exportamos a un archivo de texto:

slack@debian:~$ gpg --export -a 'slack' > RPM-GPG-KEY-slack

slack@debian:~$ ls -l
total 224
drwx------ 2 slack slack 4096 2008-05-08 16:21 amsn_received
-rw-r--r-- 1 slack slack 579 2008-04-16 15:05 beryl~
drwx--x--x 25 slack slack 4096 2008-05-09 20:12 desarrollo
drwxr-xr-x 2 slack slack 4096 2008-05-15 17:05 Desktop
drwxr-xr-x 13 slack slack 4096 2008-05-15 17:40 documentos
drwxr-xr-x 3 slack slack 4096 2007-12-17 16:41 drivers_db
drwxr-xr-x 3 slack slack 4096 2008-01-23 12:41 flexdock
drwxr-xr-x 5 slack slack 12288 2008-05-09 10:27 imagenes
drwxr-xr-x 4 slack slack 4096 2008-03-23 14:08 NetBeansProjects
drwxr-xr-x 18 slack slack 4096 2008-05-15 17:05 programas
drwxr-xr-x 3 root root 4096 2008-05-07 21:27 redmine_open_source
-rw-r--r-- 1 slack slack 1690 2008-05-15 17:33 RPM-GPG-KEY-jsalomon
-rw-r--r-- 1 slack slack 3351 2008-05-16 12:36 RPM-GPG-KEY-slack
drwxr-xr-x 10 slack slack 4096 2008-05-16 10:07 software
drwxr-xr-x 4 slack slack 4096 2008-04-28 15:26 uml_workflow
drwxr-xr-x 6 slack slack 4096 2008-01-29 20:02 workspace


Luego se debe importar la clave al RPMDB, este comando debemos ingresarlo como root

slack@debian:~$ su
Password:
debian:/home/slack# rpm --import RPM-GPG-KEY-slack


Verificamos la lista de claves públicas del RPMDB

debian:/home/slack# rpm -q gpg-pubkey --qf '%{name}-%{version} --> %{summary}\n'
gpg-pubkey-4f4dacf2 --> gpg(Jorge Salomon )
gpg-pubkey-fb0a8720 --> gpg(jorge_salomon (ejemplo de clave con expiracion para instalador RPM) )

Ahora debemos configurar el fichero .rpmmacros incluyendo lo siguiente, lo podemos editar con nano:

debian:/home/slack# nano .rpmmacros


%_signature gpg

%_gpg_name fb0a8720

El archivo esta vacio, y debemos incluir las dos lineas anteriores, teniendo la precaución de que el _gpg_name debe tener el valor de la clave que hemos creado anteriormente

Posteriormente firmamos el instalador de la siguiente manera:

debian:/home/slack# rpm --addsign xs4dte-2.1.2-1.i386.rpm
xs4dte-2.1.2-1.i386.rpm

Ahora comprobamos la firma del paquete:

debian:/home/slack# rpm --checksig xs4dte-2.1.2-1.i386.rpm
xs4dte-2.1.2-1.i386.rpm: sha1 md5 OK

y ya tenemos el paquete firmado y con clave gpg con una licencia que durara el tiempo que pasamos para este instalador, en este caso es de 2 días

para más info vayan a: http://www.gnupg.org

Saludos y suerte !!

viernes, 9 de mayo de 2008

Revolution OS

Hola, existe gran diferencia entre microsoft y el open source, una es la que se refleja en la imagen....



El Software Libre ha revolucionado la informática, esa es la idea fundamental de la obra. Revolution OS es una película documental que trata sobre el Sistema Operativo (OS) GNU/Linux, y los movimientos del Software Libre y el Código abierto (Open Source).

Durante los minutos que dura RevolutionOS veremos pasar los principales personajes que han cambiado el mundo de la informática a nivel mundial, hablando por sí mismos, opinando, realizando algún chiste, contando alguna anécdota, todos muy entusiasmados, como cualquier hacker al cual se le pregunta ¿a qué te dedicas? Los hackers y los emprendedores empresariales
informáticos suelen ser muy misticos cuando hablan de sus tareas.

Será muy interesante presenciar los comienzos del software, cuando era compartido en discos de cinta. Así mismo, este documental es una joyita dentro de la historia de la informática, la Carta Abierta de Bill Gates hacia lo que él llamaba aficionados en la cual les pide que no compartan el software, sino que lo vendan... esta carta fue escrita por Bill Gates cuando Microsoft todavía estaba basado en New México y se llamaba "Micro-Soft".

Luego Richard Stallman explica cómo y por qué dejó el MIT Lab for Artificial Intelligence para dedicar su vida entera al desarrollo y la expansión del Software Libre, y cómo empezó con el proyecto GNU para construir un sistema operativo totalmente libre.

La controversia en cuanto a llamar Linux o GNU/Linux al sistema es presentada ante Linus Tordvalds, así como se le pregunta qué es Linux y qué supone su desarrollo y comercialización. Es interesante lo que dice Linus en un momento: "puedes pensar a Richard Stallman como el gran filósofo y a mí como el arquitecto", también es remarcable escucharlo decir "Sin el compilador GNU C no hubiera sido posible hacer Linux ni la mayoría de los programas abiertos": esto le cerraría la boca a más de un fanático que anda diciendo por listas de mail y foros de usuarios que GNU no es importante para Linux, o cosas por el estilo, o que Richard Stallman anda por ahí reclamándose la paternidad del Software Libre cuando en realidad hizo muy poco (!!!)... siendo que él mismo comenzó a programar el compilador GNU C (GCC), y redactó la licencia GPL, entre otras cosas.

Se tratan en la película los primeros pasos a pequeña, mediana y gran escala de la aplicación de GNU/Linux en los negocios, dan testimonio de ello Larry Augustin de "VA Linux" y Michael Tiemann de Cygnus Solutions.

También se entrevista a uno de los desarrolladores originales de uno de los programas libres más exitosos de la historia: Apache, el que sirve mas del 80% de las aplicaciones web alrededor del mundo.

A muchos les gustará ver cómo fue el primer evento masivo "LinuxWorld", en el que estuvieron presentes Linus Torvalds, Larry Augustin y Richard Stallman recibiendo un premio.

La película se exhibió en varios festivales, incluyendo South by Southwest, Atlanta Film and Video Festival, Boston Film Festival, Denver International Film Festival; ganó el premio al Mejor Documental en ambos "Savannah Film and Video Festival" y en el "Kudzu Film Festival".

¿Qué ha cambiado desde 2001 dentro del Software Libre, el Open Source y GNU/Linux?

Para concluir, sería bueno preguntarse ¿qué ha cambiado desde 2001 dentro del Software Libre, el Open Source y GNU/Linux? Han cambiado algunas cosas: los programas para escritorio se han popularizado, tenemos a OpenOffice, Firefox, BitTorrent entre otros, el sistema GNU/Linux se ha convertido en algo muy sencillo de manejar para cualquier persona, hasta diría que es más sencillo que Windows (ventanukos).

Richard Stallman y otros han realizado una campaña mundial por difundir la filosofía del software libre, la cual ha impactado en políticos de todo el mundo, vemos que Paises enteros comienzan la migración, tales son los casos de Venezuela, Cuba, Brasil, Rusia, italia, etc.. entre otros.

La adopción y desarrollo de Software Libre u Open Source ha avanzado de forma definitiva sobre las grandes empresas en todo el planeta, dominando el mercado de los servidores web y de base de datos... el 95% de las computadoras en Hollywood utilizan GNU/Linux, y así podríamos seguir con una lista casi interminable de objetivos cumplidos por esta comunidad heterogénea y anárquica que ha revolucionado la informática para siempre.

Vamos al meollo del asunto.



Otras peliculas que recomiendo son:

-Code Linux
-The Secret history of Hacking(ingles, documental de discovery channel)
-Pirates of silicon valley(ingles)

Regards and be free... Use Linux...

miércoles, 30 de abril de 2008

Modelado con UML

Las notaciones nos permiten formular ideas complejas en forma resumida y precisa.

Para que una notación permita la comunicación precisa debe tener una semántica bien definida, debe ser muy adecuada para la representación de un aspecto dado de un sistema y debe ser bien comprendida por los participantes del proyecto. En esto ultimo se encuentra la fortaleza de los estándares y las convenciones.

Seleccionamos el UML (Lenguaje de Modelado Unificado) como notación estándar, ya que tiene una semántica bien definida, proporciona un espectro de notaciones para la representación de diferentes aspectos de un sistema y ha sido aceptado como una notación estándar en la industria.

UML es una notación que se produjo como resultado de la unificación de la técnica de modelado de objetos. El UML ha sido diseñado para resolver un amplio rango de aplicaciones.

El desarrollo de sistemas se enfoca en tres modelos diferentes del sistema:

Modelo funcional: representado en UML con diagramas de caso de uso, describe la funcionalidad del sistema desde el punto de vista del usuario.

Modelo de objetos: representado en UML con diagramas del clase, describe la estructura de un sistema desde el punto de vista de objetos, atributos, asociaciones y operaciones.

Modelo dinámico: representado en UML con diagramas de secuencia, diagramas de gráfica de estado y diagramas de actividad, describe el comportamiento interno del sistema.


Panorámica del UML.

Se presentan 5 notaciones UML:

Diagramas de caso de uso.
Diagrama de clase.
Diagrama de secuencia.
Diagrama de estado. (*)
Diagrama de actividad (*)



Diagrama de caso de uso.

Los casos de uso se utilizan durante la obtención de requerimientos y el análisis para representar la funcionalidad del sistema. Los casos de uso se enfocan en el comportamiento del sistema desde un punto de vista externo y que proporciona un resultado visible para un actor.

Un actor puede ser cualquier entidad que interactúa con el sistema ya sea un usuario u otro sistema. La identificación de los actores y los casos de uso da como resultado la definición de la frontera del sistema, esto es la diferencia entre las tareas realizadas por el sistema y las realizadas por su ambiente.


El actor UsuarioReloj puede consultar la hora con el caso de uso LeerHora, o ajustar la hora con el caso de uso AjustarHora. Sin embargo, solo el actor PersonaReparadoraRelojes puede cambiar la batería del reloj con el caso de uso CambiarBateria


Diagrama de clase

Se utilizan diagramas de clase para describir la estructura del sistema. Las clases son abstracciones que especifican la estructura y el comportamiento común de un conjunto de objetos. Los objetos son instancias de las clases que se crean, modifican y se destruyen durante la ejecución del sistema.

Los diagramas de clase describen el sistema desde el punto de vista de objetos, clases, atributos, operaciones y sus asociaciones.


El diagrama de clase describe todos los elementos de todos los relojes de la clase RelojSimple.Todos estos objetos de reloj tienen una asociación con un objeto de la clase BotonImprimible, un objeto de la clase pantalla, un objeto de la clase hora.


Diagrama de secuencia

Los diagramas de secuencia se usan para formalizar el comportamiento del sistema y para visualizar la comunicación entre objetos. Son útiles para la identificación de objetos adicionales que participan en los casos de uso. A los objetos involucrados en un caso de uso les llamamos objetos participantes. Un diagrama de secuencia representa las interacciones que suceden entre esos objetos.



La imagen corresponde al diagrama de secuencia para el caso de uso AjustarHora de nuestro RelojSimple, la primera columna representa al actor UsuarioReloj que inicia el caso de uso. Las demás columnas representan la linea de tiempo de los objetos que participan en este caso de uso.

Este articulo es solo una introducción al modelado con uml, existen otra serie de diagramas que ire agregando o escribiendo otros articulos para profundizar en este tema

Saludos y suerte !!

miércoles, 23 de abril de 2008

Requerimientos

Toma de Requerimientos

Podemos definir un requerimiento como una condicion o capacidad que debe estar presente
en un sistema o componentes de este para satisfacer un contrato, estandar, especificación u otro documento formal (Std 610.12-1900, IEEE:62)

Otra definicion adoptada es que un requerimiento es simplemente una declaración abstracta de alto nivel de un servicio que debe proporcionar un sistema.

Los requerimientos son una pieza fundamental en proyectos de Software, en base a esto se puede determinar y hacer estimaciones de tiempo, costos, definir recursos necesarios, elaborar cronogramas y cartas gantt, etc.
Permite verificar y comprobar si se obtuvieron los objetivos establecidos para el proyecto.

Muchas veces los proyectos que fracasan por que la toma de requerimientos es incompleta o por el mal manejo de los cambios en los requerimientos durante la vida de desarrollo del Software.

Clasificación de Requerimientos
La clasificación de requerimientos es importante, de esta manera podemos definir y abstraer con mayor detalle los tipos de requerimientos a los que nos enfrentamos, los requerimientos se pueden clasificar en:
  • Requerimientos Funcionales.
  • Requerimientos no Funcionales.
  • Requerimientos de Implementación.
Requerimientos Funcionales: Describen las interacciones entre el sistema y su entorno, usuarios u otros sistemas

Requerimientos No Funcionales: Describen aspectos visibles del sistema por el usuario, y que no se relacionan directamente con el comportamiento funcional del sistema.

Requerimientos de Implementación: Corresponden a las necesidades del cliente que restringen la implementación, como la plataforma tecnológica, de hardware, redes, etc.

Características en la Toma de Requerimientos
Las características mas importantes y fundamentales para una toma de requerimientos deben contener los siguientes puntos:
  • Un requerimientos debe estar especificado siempre por escrito.
  • Un requerimiento debe ser posible de probar y verificar.
  • Un requerimiento debe ser conciso.
  • Un requerimiento debe ser completo.
  • Un requerimiento debe ser consistente.
  • Un requerimiento no debe ser ambiguo.

Ingeniería de Requerimientos
La Ingeniería de requerimientos ayuda a los ingenieros de software a entender mejor el problema en cuya solución trabajaran, incluye el conjunto de tareas que conducen a comprender cual sera el impacto del software sobre el negocio, que es lo que el cliente quiere y como interactuaran los usuarios finales con el software.

También la ingeniería de requerimientos comprende el proceso de desarrollar una especificación del software, estas pretenden comunicar las necesidades del sistema del cliente a los desarrolladores del sistema

Importancia de la Ingeniería de Requerimientos:
  • Permite gestionar las necesidades del proyecto de manera documental y estructurada.
  • Mejora la capacidad de predecir cronogramas de proyectos, así como sus resultados.
  • Disminuyen los costos y retrasos del proyecto.
  • Mejora la calidad del Software.
  • Mejora la comunicación entre equipos.
  • Evita rechazos de usuarios finales.

Actividades de la IR
  • Estudio de la viabilidad
  • Obtención y análisis de requerimientos.
  • Validación de requerimientos.
  • Administración de requerimientos.

Estudio de la viabilidad
Un estudio de la viabilidad es a corto plazo, y orientado a resolver si el sistema:
Contribuye a los objetivos de la organización?
Se puede implementar con tecnología actual dentro de costo y tiempo?
Puede integrarse a otros existentes en la organización?

Obtención y análisis de requerimientos
  • Descubrimiento de requerimientos,
  • Puntos de vista: toma en cuenta la existencia de varias perspectivas y provee de una marco de trabajo para descubrir conflictos.
  • Entrevistas.
  • Escenario: son descripciones de ejemplos de las sesiones de interacción del sistema, se inicio con un bosquejo y durante la obtención se agregan detalles.
  • Casos de Uso (UML)
  • Clasificación y organización de requerimientos
  • Orden por prioridades y negociación
  • Documentación

Validación de requerimientos
  • Similar al análisis pero comprende un bosquejo completo del documento.
  • Importante, ya que los errores en los requerimientos pueden conducir a costos excesivos si se descubren durante el desarrollo o después en la implantación.

Técnicas de validación.
  • Revisiones de requerimientos y su documentación.
  • Construcción de prototipos.
  • Generación de casos de prueba.
  • Análisis de consistencia automático con herramientas de software.

Administración de requerimientos.
Los requerimientos de sistemas grandes o complejos son siempre cambiantes.
Los sistemas grandes usualmente se desarrollan para mejorar el status quo.
Surgirán nuevos requerimientos debido a:
  • Comunidad diversa de usuarios, los requerimientos finales son comúnmente un termino medio.
  • Quien paga es raramente quien usa el sistema.
  • Entorno del negocio cambiante.

Se debe generar un proceso formal para que todos los cambios propuestos sean tratados de forma consistente.

Etapas:
  • Análisis del problema y especificación del cambio
  • Análisis del cambio y costos
  • Implementación del cambio
Siempre existe la tentación de hacer un cambio de manera urgente al sistema, y en retrospectiva
modificar el documento de requerimientos. Esto conduce a un desface e inconsistencia

Requerimientos en Normas de calidad
MPS-BR: Norma estándar basada en conceptos similares a los tratados, siguiere la utilización de
UML(casos de uso, secuencia, actividades, estados, etc.) con formato de documentos definidos y
adoptados por la industria como estándar para el modelado y diseño de sistemas con UML.
Propuesta: Utilización de diagramas UML y Procesos, con un modelo de entrega por etapas con
verificación y administración de requerimientos basado en documentación de la norma estándar IEEE-STD-803-1998

Casos de Uso (UML)
UML, de sus siglas en ingles (Unified Modeling Language) se relaciona directamente con el desarrollo de software orientado a objetos y en este nos encontramos con los casos de uso, los cuales nos apoyan al análisis de los requerimientos como una técnica de adquisición de estos, una definición es que los Casos de Uso no son parte del diseño, sino parte del análisis. De forma que al ser parte del análisis nos ayudan a describir qué es lo que el sistema debe hacer. Los Casos de Uso son lo qué hace el sistema desde el punto de vista del usuario. Es decir, describen un uso del sistema y cómo este interactúa con el usuario.


Notación de casos de uso:



Lo importante de los casos de uso no es el dibujo que acostumbramos a ver, entonces ¿que es lo importante?, Lo realmente útil de los casos de uso es el documento que describe el caso de uso, en este documento se explica la forma de interactuar entre el sistema y el usuario.
Este podría ser el caso de uso de escribir un mensaje en un foro.



Herramientas de apoyo
Es importante para la buena gestión y administración de tareas, las cuales nacen muchas veces de un requerimiento del cliente, contar con una herramienta tecnológica o aplicación que nos apoye en esta gestión, una aplicación de tipo Workflow que nos permita hacer seguimiento de estas tareas que se pueden asignar a los participantes del proyecto.

Mejores Prácticas
¿Que son las mejores prácticas?
Un conjunto organizado y documentado de principios, métodos y procesos que incrementan la calidad y la productividad en del desarrollo de software.

Mejores practicas orientadas hacia:

El recurso humano.
  • Gestión por Roles
  • Administración del Tiempo
  • Gestión del Conocimiento
  • Capacitación basada en competencias

El proceso.
  • Desarrollo Iterativo
  • Administración de requisitos
  • Uso de arquitectura basada en componentes
  • Modelado visual
  • Aseguramiento continuo de la calidad
  • Administración de cambios

El Producto
  • La Arquitectura
  • El Diseño
  • Las Base de datos
  • Las Pruebas
  • La Operación

Saludos y Suerte !!

viernes, 28 de marzo de 2008

Workflow - Scarab

Hola, muchas veces en las empresas en que trabajamos es necesario implementar un sistema que haga un seguimiento a distintos casos o actividades, es decir la construcción o implementación de un workflow. Ahora ustedes se preguntaran ¿Que es un Workflow? , en simples palabras, un workflow es el seguimiento a un flujo de trabajo ver aquí para más información.

Los Workflow deben cumplir con los siguientes objetivos (copiado de wikipedia):
  • Reflejar, mecanizar y automatizar los métodos y organización en el sistema de información
  • Establecer los mecanismos de control y seguimiento de los procedimientos organizativos
  • Independizar el método y flujo de trabajo de las personas que lo ejecutan
  • Facilitar la movilidad del personal
  • Soportar procesos de reingeniería de negocio
  • Agilizar el proceso de intercambio de información y agilizar la toma de decisiones de una organización, empresa o institución

Ahora que ya sabemos lo que es un workflow, y que además necesitamos implementar uno, veremos como lo haremos.
Existen muchos workflow en el mercado, en el siguiente link hay una lista de ellos, son proyectos Open Source - Workflow Engine in Java.

Nos centraremos en una aplicación Open Source llamada Scarab de tigris.org, escrita en Java y altamente configurable, trabaja con distintas bases de datos como Oracle, Postgre, Mysql, Hipersonic, etc., Prototype como librería de Ajax, y los mejores estándares abiertos de tecnología J2EE, como base de Workflow ocupa WfmOpen, La meta de este proyecto (WfmOpen) es proporcionar una puesta en práctica ligera basada en un motor del worflow J2EE. el cual funcionará en una variedad de plataformas y con licencia GPL.

Tambien el código fuente se integra fácilmente con ides como eclipse y netbeans, trabajando con ant y maven a gusto del desarrollador, velocity Macro para las paginas y turbine como motor.

Bueno pongamos manos a la obra y descarguemos el proyecto desde este link

bajemos la ultima versión estable, la 0.21, en formato tar.gz o zip, y lo descomprimimos en el directorio donde tengamos nuestros desarrollos, esto nos generara un árbol de archivos como el siguiente:

slack@ulinux:~/desarrollo/scarab-0.21$ ls -la

total 364
drwxr-xr-x 10 slack slack 4096 2008-03-28 10:26 .
drwxr-xr-x 45 slack slack 4096 2008-03-24 10:06 ..
drwxr-xr-x 3 slack slack 4096 2008-03-27 16:06 bin
drwxr-xr-x 2 slack slack 4096 2008-03-28 09:40 build
-rwxr-xr-x 1 slack slack 10104 2008-03-12 22:38 .classpath
drwxr-xr-x 8 slack slack 4096 2008-03-12 22:36 extensions
-rwxr-xr-x 1 slack slack 9646 2007-02-09 16:28 INSTALL
drwxr-xr-x 2 slack slack 4096 2008-03-12 22:36 lib
-rwxr-xr-x 1 slack slack 175 2007-02-09 16:28 LICENSE
-rwxr-xr-x 1 slack slack 28373 2007-02-09 16:28 maven.xml
-rwxr-xr-x 1 slack slack 18837 2007-02-09 16:28 MIGRATION
-rwxr-xr-x 1 slack slack 14209 2008-03-27 11:44 minimal.properties
-rwxr-xr-x 1 slack slack 3868 2007-02-09 16:28 minimal.xsl
-rwxr-xr-x 1 slack slack 370 2008-03-12 22:38 .project
-rwxr-xr-x 1 slack slack 55009 2008-03-27 15:07 project.properties
-rwxr-xr-x 1 slack slack 28509 2007-02-09 16:28 project.xml
-rwxr-xr-x 1 slack slack 4139 2007-02-09 16:28 project.xsl
-rwxr-xr-x 1 slack slack 3194 2007-02-09 16:28 README
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 src
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 tomcat
-rwxr-xr-x 1 slack slack 98872 2007-02-09 16:31 velocity.log
-rwxr-xr-x 1 slack slack 14120 2007-02-09 16:28 wizzard.properties
-rwxr-xr-x 1 slack slack 3956 2007-02-09 16:28 wizzard.xsl
drwxr-xr-x 3 slack slack 4096 2007-02-09 16:34 www
drwxr-xr-x 7 slack slack 4096 2008-03-12 22:36 xdocs

y al montarlo el eclipse quedaría así este proyecto:



Entonces ahora tendremos que tener instalada y arriba Mysql la cual ocupa por defecto para el arranque inicial, la podriamos cambiar modificando el archivo minimal.properties de la raiz del proyecto, si ocupamos ANT debemos ir a la carpeta build del proyecto y correr con ant el archivo buid.xml, como muestra la siguiente imagen:



Antes de comenzar a deployar la aplicación debemos crear una base de datos llamada scarab en mysql con usuario root por default, luego en el navegador derecho de opciones de ant hacemos doble click en la opción por defecto marcada como deploy [default] y luego que termine en la consola de hacer este deploy si todo va bien debemos generar el war con la opcion war de ant, esto nos generara una carpeta con el nombre target en la raiz del proyecto y dentro de esta el archivo scarab.war que debemos llevar al webapp de tomcat.

Saludos y mucha suerte !!

miércoles, 12 de marzo de 2008

Hacker o Cracker?


Uno de los temas que tiene mucho que ver en esto de la informática y que no está muy claro todavía, es acerca de los hackers. Estas personas tienden a ser confundidas con otro tipo de individuos que son todo lo contrario a ellos...

En esta primera parte abarcaremos lo que es un hacker - ¿ Acaso no son los hackers los que se pasan tratando de romper las cuentas de hotmail a la gente?

¿Qué es lo primero que pensamos cuando escuchamos la palabra Hacker?.En un tipo frente a una computadora metiéndose a otra para desconfigurarla o robarle información, o en un tipo programando virus para infectar tu máquina y así perder toda tu información. Muchos usuarios de Internet les temen a estos tipos que incluso cuando saben que tienen uno en su lista de contactos, lo borran y borran todo lo relacionado con este, creyendo evitar así ser espiados, este tipo de personas asociados a un mundo medio under ground, de musica rock, bar de rene, o de la noche, etc... no somos tan malos, jjj.



En cambio otros (especialmente los principiantes) adoran a estos hackers y pasan días enteros buscando información de como convertirse en uno de ellos, y cuando se topan con uno quieren convertirse en su pupilo y aprender todas la magias que encierra a estos individuos denominados hackers por la sociedad.

Pero oh! Error señores, estos no son los verdaderos hackers. Los hackers de verdad no destruyen.... Construyen.

Todos estos individuos que se la pasan saboteando equipos no son más que Crackers que se dedican a crackear cuentas con el único fin de perjudicar a otros. Los Hackers en cambio son tipos rudos en la programación y tecnología o en la creación de soluciones a problemas, autodidactas, etc.

La sociedad ha denominado hackers a los crackers y esto a los hackers de verdad no les causa la menor de las gracias pues ellos están para construir, desarrollar soluciones, y descubrir fallos de seguridad en los sistemas que investigan, no para destruir y sabotear.

Un hacker no dice: Soy un Hacker!. la comunidad de hackers es la que lo denomina como tal, por sus características y esfuerzo al realizar una aplicación o al contribuir a la solución de un problema.

"Los hackers resuelven problemas y construyen cosas, y creen en la libertad y la ayuda voluntaria mutua. Para ser aceptado como hacker, deberás comportarte como si tuvieras esta actitud en tu interior. Y para comportarte como si tuvieras esta actitud, deberás creerte de verdad dicha actitud".

"Pero si piensas en cultivar las actitudes de hacker sólo como una forma de ganar aceptación en esta cultura, te estás equivocando. Transformarse en la clase de persona que cree estas cosas es importante para ti para ayudarte a aprender y mantenerte motivado. Como en todas las artes creativas, el modo más efectivo de transformarse en un maestro es imitar la mentalidad de los maestros no sólo intelectualmente, sino también emocionalmente".

Los hackers son autodidactas, y es para ellos todo un reto el resolver un problema. Entre mas grande sea el problema a resolver, mas interesante se hace el reto para un hacker de solucionarlo.

Linux es un ejemplo de una plataforma creada por hackers. Linux es un sistema operativo muy usado por los hackers, en el desarrollan aplicaciones, y crean soluciones a distintos problemas que tiene la comunidad linux, como la falta de algunas aplicaciones o la actualización de otras, etc. Estas aplicaciones van desde una página web hasta un sistema operativo completo.

La comunidad hacker esta en la red, y se encuentra en distintas comunidades y foros en lo ancho del Internet. Algunos son Moderadores y pasan largas jornadas leyendo problemas y aportando soluciones. Otros participan en proyectos de software y aportan código u optimizan código para los proyectos, en realidad son comunidad abierta al conocimiento.

Los hackers son los que le han dado forma a lo que hoy conocemos como Internet y su aportación es muy importante en el desarrollo informático. No solo son programadores, los hay desarrolladores y podría decir que también algunos solo son autodidactas y adictivos a la informatica.

Así que si la próxima vez quieres robar una cuenta de Hotmail y ser un gran hacker.. serás mas bien un cracker! (¡lamer es el término adecuado!). En vez de robar mejor: "aporta y crea soluciones para la comunidad... se autodidacta, sé un hacker!!.

Saludos y Suerte !!