Mostrando entradas con la etiqueta diseño. Mostrar todas las entradas
Mostrando entradas con la etiqueta diseño. Mostrar todas las entradas

jueves, 10 de mayo de 2012

El trabajo del analista - Estandares y referencias de documentación


Me decidí a escribir sobre este tema ampliando una entrada que ya tenia sobre manejo de requisitos (Manejo de Requisitos de Software) y tratando de arrojar alguna luz a aquellos que se inician en las labores de análisis y diseño. Algunos de mis colegas me preguntan se sienten aturdidos porque no saben como iniciar, documentar y presentar sus a trabajos. Espero que algunas de la referencias acá señaladas les sean de utilidad para que no tenga que reinventar la rueda y tengan una idea de clara de como conducir sus trabajos y como presentarlos.

Estimaciones del proyecto


El método de Punto de Caso de Uso (UCP – Use Case Point), está basado en los tradicionales Puntos Función. Es un método originado de la tesis de master de Gustav Karner (Karner, 1993), desarrollada mientras trabajaba en Objectory AB, bajo supervisión de Ivar Jacobson (creador de los casos de uso). La técnica ha sido usada por la empresa Rational (posteriormente adquirida por IBM) durante varios años y con buenos resultados.

El método estima el tiempo de desarrollo de un proyecto mediante la asignación de pesos a un cierto número de factores que lo afectan. Finalmente se contabiliza el tiempo total estimado a partir de esos factores.

La especificación de requisitos de software (ERS)


En la fase de análisis se deben identificar claramente las necesidades del producto a desarrollar y documentarlas. Como resultado de esta fase se debe producir un documento de especificación de requisitos en el que describa lo que el futuro sistema debe hacer. Se trata por tanto de una actividad no solo de síntesis sino también de síntesis. En esta fase se establecen las bases contractuales del desarrollo del producto en cuestión.

IEEE 830 es una norma para Especificación de Requisitos de Software. Un buen documento de requisitos debería incluir de una forma o de otra toda la información contenida en esta norma, indica como deba organizarse un documento de requisitos. Esta no es una metodología para el análisis de requisitos sino una recomendación de como debe ser presentado la especificación de estos y no exige que sea presentada en el formato propuesto por la especificación.

Esta definición se extiende y aplica a las condiciones que debe cumplir un sistema y cada uno de sus componentes para cumplir para satisfacer un contrato, norma o especificación.

Una buena especificación de requisitos de software provee un conjunto de ventajas entre las que destacan:
  • Reducción del esfuerzo en desarrollo.
  • Constituye una buena base para estimación de costes y planificación.
  • Constituye un punto de referencia para procesos de verificación y validación.
  • Constituye una base para la mejora de los procesos analizados.

 

Características de una buena ERS


  • Correcta: cada requisito que figura en ella refleja alguna necesidad real.
  • No ambigua: cada requisito tiene una única interpretación.
  • Completa: incluye todos los requisitos significativos.
  • Verificable: es posible verificar el una ves entregado el producto que cumple con los requisitos.
  • Consistente: ninguno de los requisitos es contradictorio o entra en conflicto con otros.
  • Clasificada: los requisitos pueden clasificarse por diversos criterios, los más comunes son importancia y escalabilidad.
  • Modificable: cualquier cambio puede realizarse de forma fácil completa y consistente, también es deseable evitar la redundancia.
  • Explorable: se puede conocer tanto el origen como los componentes del sistema que realizan cada requerimiento.
  • Utilizable durante las tareas de mantenimiento y uso: el personal que no ha intervenido directamente en desarrollo debe ser capaz de mantenerlo y modificarlo, la especificación actuá como un plano.

Metodología para el Análisis de Requisitos de Sistemas Software


Existe entre muchas otras esta metodología creada por Amador Durán Toro y Beatriz Bernárdez Jiménez del Departamento de Lenguajes y Sistemas Informáticos de la Escuela Técnica Superior de Ingeniería Informática en Sevilla, es una excelente tesis. La metodología que recopila prácticas y conceptos ya aceptados y explica varios formatos para recopilación y descripción de requisitos.

No solo es muy clara sino que también se han dado a la tarea de complementarla con un software. REM (REquirements Management) es una herramienta experimental gratuita de Gestión de Requisitos diseñada para soportar la fase de Ingeniería de Requisitos de un proyecto de desarrollo software de acuerdo con la metodología definida en la Tesis Doctoral "Un Entorno Metodológico de Ingeniería de Requisitos para Sistemas de Información", presentada por Amador Durán en septiembre de 2000. en este enlace podrán encontrar la herramienta que es de uso libre solo para fines académicos y enlaces a otros documentos y tesis relacionadas.

El formato de salida se puede personalizar mediante XSL, algo que yo mismo he hecho y podemos tener el formato de salida que deseemos.

Tambien esta aNimble Platform que es una herramienta para la gestión de requerimientos descendiente directo de OSRMT. Quizá alguno de Uds. se anime a probar alguna de ellas.

Especificación de diseño de software


Luego de la especificación de requerimientos se siguiente la fase de diseño del sistema en si mismo. En este punto muchos se empiezan a preguntar también como presentar los resultados en un documento que sea claro, bien organizado y compresible para la mayoría de las personas. Por ello abordaremos con brevedad una de las especificación que puede sernos de utilidad.

IEEE 1016 es  un estándar para  "descripción de un diseño de software", entendiendo por tal la representación que sirve para comunicar cómo está diseñado el sistema. Especifica la información que una descripción de este tipo ha de contener y la organización o esquema de presentación recomendada. Puede aplicarse a software de cualquier tipo destinado a funcionar en un ordenador. Su aplicación no está restringida por ninguna consideración relativa al tamaño, complejidad o carácter crítico del software.

Tampoco está condicionada por la aplicación de una determinada metodología de diseño, gestión de configuraciones o control de la calidad, pues se supone que la información relativa a la calidad o los cambios en el diseño de la descripción será gestionada por otras actividades del proyecto. Asimismo, la norma no apoya ni se ve limitada por una técnica descriptiva particular, pudiéndose aplicar a documentos en papel, bases de datos automatizadas, lenguajes de descripción de diseños, etc.

El estándar especifica que un SDD (software design descriptions) se organiza en una serie de vistas de diseño. Cada vista abarca a un conjunto específico de problemas de diseño de las partes interesadas. Cada vista de diseño es orientada por una perspectiva de diseño. Una perspectiva identifica los problemas de diseño que se centraban en el marco de su vista y selecciona el  lenguaje de diseño que se utilizan para describir esta perspectiva de diseño. La norma establece un conjunto común de perspectivas para el diseño de vistas, como punto de partida para la preparación de un SDD, y una capacidad genérica para definir nuevas perspectivas  y con ello ampliar la expresividad de un SDD.

Los contenidos necesarios de un SDD son los siguientes:
  1. Identificación de la SDD
  2. Los actores de diseño identificados
  3. Los problemas de diseño identificados
  4. Los puntos de vista de diseño seleccionados, cada uno con definiciones del tipo de elementos de diseño y lenguaje permitido.
  5. Los puntos de vista de diseño
  6. Los superficie de diseño
  7.  Justificación del diseño

Podrán encontrar uds  mismos mas información respecto de esta y otras normas y métodos en internet. Las especificaciones presentadas incluyen plantillas para su uso, las que son una recomendación y no obligadamente debe usarse pero si seguirse. Les invito a que la lean y la pongan en práctica en la organización de sus proyectos de software.

jueves, 16 de julio de 2009

Algunas herramientas útiles para programar y modelar

En mi labor como analista y programador he tenido la oportunidad de trabajar con algunas herramientas que pueden resultarles de utilidad a alguno de ustedes. Cada herramienta tiene lo suyo y regularmente tiendo a utilizar varias de ellas en aspectos diferentes desde modelado, pasando por bases de datos, hasta codificación.

Entornos de desarrollo integrados 
  
Eclipse: Es un entono integrado de desarrollo, basado en java y con versiones en la mayoría de los sistemas operativos usado actualmente, se han desarrollado una gran cantidad de herramientas para este entorno. Entre los recursos de que dispone y que he utilizado se encuentran:

  • PHP Development Tools - excelente para desarrollo de aplicaciones usando php, tiene asistencia para creación y chequeo del código, un excelente explorado de proyectos, facilita documentar tu código y mucho mas.
  • Modelador de base de datos Clay - la versión gratuita de esta herramienta es increíble, hace ingeniería inversa, permite tener una vista logica yla física, genera script con varias opciones útiles como comentarios, forma de declaración de llaves e indices, para casi cualquier gestor de base de datos que tenga un driver jdbc.
  • ERMaster - es una excelente para el diseño de bases de datos, soporta varias notaciones, permite generar documentación de nuestro modelo. Permite crear vistas o regiones en el modelo y visualizar solamente esa perspectiva, además navegar por la demas perspectivas mediante pestañas.
  • Data Tools - esta herramienta es excelente para el desarrollo y depuración de base de datos. Puedes complementar o utilizar alternativamente SQLExplorer o Quantum.
  • Editores XML - facilita muchísimo explorar y construir documentos xml, dtd y estilos xsl.
Lo mejor de eclipse es que es un entorno integrado, y tienes todo al alcance de la mano en un solo entorno. El soporte que tiene para java lo lo hace el mas grande rival de NetBeans.

NetBeans: Entorno de desarrollo integrado muy bueno, el único inconveniente es el uso excesivo de memoria es lo que me consta, para desarrollo java y de interfaz gráfica en java.


Modelado de software

ArgoUML: Para modelar sistemas y aplicaciones ArgoUML es una de esas herramientas que no debe faltar en tu colección. Soporta la especificación 1.4 de UML (el soporte para UML 2 es experimental aun). Permite generar código para varios lenguajes de programación entre ellos java, C++, php4, php5. Cuenta con varias extensiones útiles como la extensión para base de datos, la cual también te permite hacer ingeniería inversa de base de datos.

DBDesigner: Aunque se ha pretendido que WorkBench de MySQL reemplaze a esta herramienta le falta mucho para alcanzar la versatilidad que tenia esta herramienta. Permite realizar diseños de base de datos y conectarte a diferentes gestores de bases de datos. los diseños ademas de útiles son muy bonitos excelentes para presentarlos. Cuenta con dos complementos para crear reportes a modo de diccionario de datos de tu modelo y crear un sitio web para tu pagina de forma rápida con varias opciones para configurar y agrupar tus paginas.

MagicDraw Community Edition: La uso para crear modelos de sistemas web basados en UWE, cuenta con complemento y los diagramas son estéticamente atractivos. Puedes crear desde cero tu modelo o bien trabajar la base lógica con ArgoUML y luego exportar tu modelo como un XMI e importarlo con esta herramienta. Existe una versión de ArgoUML que cuenta con complementos para modelado con UWE la cual no me gusta mucho y solo es compatible con una versión mas antigua de ArgoUML.


Planeación de proyectos

Planner: Herramienta para planeación de proyectos corre en múltiples plataformas y genera reportes útiles para presentar e imprimir.

GanttProyect: Para planeación de proyectos desarrollado en java, es muy buena herramienta, genera un gráfico pert de la ruta critica de tu proyecto, es muy intuitivo.

XMaind: Crea mapas conceptuales fácilmente, incluye plantillas de diagramas de pescado, organigramas, de árbol , tablas y otros, para los que conozcan el Mainjet déjeme decir que esta herramienta tiene casi toda su funcionalidad y es de uso libre.


Diseño web

DreamWeaver: A pesar de lo que muchos tienen en contra de las tecnologías de paga, no he encontrado un editor de paginas web comparable a este, en la cantidad de funciones y su editor visual.

Mozilla Web Developer ToolBar: agrega varias herramientas de diseño al navegador, esta extensión esta disponible para Firefox y Chrome, y corre en todas las plataformas donde estos navegadores estén soportados. Provee muchas opciones útiles para formularios, estilos, imágenes, tamaño de la ventana, elementos de bloque y posicionamiento, entre otras.

Firebug: es una de las herramientas más populares entre los desarrolladores web. Este complemento para firefox esta ahora también disponible en chrome, tiene una interfaz amigable con pestañas que facilitan la inspección y depuración de cada aspecto de la web. Permite editar y ver los cambio de forma inmediata, analizar la velocidad de carga, los requisitos realizados y los parámetros y cabeceras enviados.


Validación, Formato de código y miscelaneos


CSS Formatter and Optimiser: permite dar formato al css y ademas tiene varias opciones de compresión y reducción de código.

JavaScript Formatter: permite dar formato el código js.

Validación

  • Validación HTML de W3C -  http://validator.w3.org
  • Validación CSS de W3C -  http://jigsaw.w3.org/css-validator/
  • Validación XML - http://www.xmlvalidation.com/
  • CSS Test de Selectores -  http://www.css3.info/selectors-test/

Generadores de contenido

  • Generador de texto - http://www.procato.com/lipsum/
  • Generador de Imágenes -  http://dummyimage.com/
  • Generador de MetaTags - http://www.aemilius.net/soporte/utilidades/generador-meta-tags.php



Transferencia de archivos

FileZila: Cliente ftp, aunque no es tan bueno si se trata de archivos muy grandes pero la naturaleza del protocolo tampoco le ayuda con eso.

FireFTP:  es un complemento de Mozilla Firefox para transferencia de  archivos por FTP.