domingo, 22 de mayo de 2011

Mapa Mental de la Ingenieria del Software

Luego de haber analizado los conceptos fundamentales de la ingenieria del software, como esta se ve apoyada utilizando UML y como se realiza la gestión de calidad, enmarcado en el software libre podremos asociar todos estos terminos mediante este mapa mental.





Gestión de la calidad y pruebas del sofware

En principio, podemos definir la Calidad en el software como el grado con el que un sistema, componente o proceso cumple los requisitos especificados y/o las necesidades o expectativas del cliente o usuario.

El objetivo no es necesariamente alcanzar una calidad perfecta, sino la necesaria y suficiente para cada contexto de uso a la hora de la entrega y del uso por parte de los usuarios.

Entonces ¿En qué consiste la gestión de calidad y pruebas del software?

Este proceso de la ingeniería de software consiste en someter al producto de software a un conjunto de pruebas, basadas en prestaciones, respuestas esperadas a determinadas acciones y bajo ciertas condiciones, con la finalidad de determinar la calidad del mismo.

Uno de los principales errores que se suelen cometer en la gestión de calidad en la mayoría de los modelos de desarrollo, consiste en dejar esta fase para el final del ciclo de vida del software. Con esto caemos en que luego de que la aplicación esta desarrollada es cuando la vamos a revisar y con ello, si el producto no pasa las pruebas ni cumple con los estándares mínimos necesarios, se habrá perdido una gran cantidad de tiempo, esfuerzo y hasta recursos, pues sera necesario rehacer el trabajo de vuelta.

Por tanto para asegurar la calidad del software en cualquier proyecto, es importante tener en cuenta los siguientes principios:
  • Es imperativo disponer de unos requisitos que detallen el sistema para disminuir el margen de error
  • Los procesos de calidad deben ser integrados desde las primeras fases del proyecto
  • Quien desarrolle un sistema no debe ser quien prueba su funcionalidad. (Indispensable!!!)
Aca en Venezuela se han desarrollado varias iniciativas y modelos, basados en los estandares y normas de calidad ISO 9126, 14598. Entre las mas destacadas tenemos :

MOSCA (Modelo Sistemico de Calidad): el cual fue desarrollado en el Laboratorio de Investigación en Sistemas de Información LISI de la Universidad Simón Bolivar, y se caracteriza principalmente por ser una herramienta que soporta la Administración de la Calidad del Software en sus tres actividades: Aseguramiento de la Calidad, Planeación de la Calidad y Control de la Calidad, al establecer un marco de referencia que permite ubicar en un “nivel establecido” la calidad sistémica de sus productos.

MOECS (Modelo de Estimación de Calidad de Software): el cual es utilizado por la oficina de control de calidad del CNTI, y es el resultado de unificar en una matriz de calidad:
  • ISO 9126 (Modelo de Calidad Externa e Interna) y sus variantes (9241, 10741, 11581, 18019, 13407, 16982, 16071, 15910, 20282) .
  • Mc Call (Modelo de Calidad de la Operación, Revisión y Transición del Producto de Software).
  • MOSCA (Modelo de Calidad Sistémica de Software).
El siguiente cuadro muestra las caracteristicas y subcaracteristicas de MOECS:

domingo, 8 de mayo de 2011

Herramientas Libres para UML

Aunque para Windows disponemos de muchas herramientas que nos facilitarían el trabajo al momento de modelar UML, y al menos se que se puede utilizar StarUML mediante el emulador Wine, para GNU/Linux he encontrado en diversos artículos que las mas completas (aunque no las he probado) son ArgoUML, BOUML, Dia y UMBRELLO.

Aquí les dejo una tabla comparativa de los distintos diagramas de los que disponen estas herramientas:

Mas información sobre estas herramientas la encontraran en:

Lenguaje de Modelado Unificado - UML

UML (Unified Modeling Language o Lenguaje de Modelamiento Unificado) es un lenguaje gráfico que permite visualizar, especificar, construir y documentar cada una de los elementos que forman un sistema software orientado a objetos. La notación gráfica de UML se utiliza para visualizar el sistema y la especificación se utiliza para expresar los detalles de dicho sistema.

Basicamente UML posee cierto numero de vistas y por cada ella varios diagramas que son los que se emplean para modelar las aplicaciones:

Con UML podemos modelar distintos tipos de sistemas: sistemas de software, sistemas de hardware, y también se puede modelar sistemas que no son informáticos, como flujos de trabajo (workflow) en una empresa, diseño de la estructura de una organización y por supuesto, en el diseño de hardware. UML entrega una forma de modelar cosas conceptuales como lo son procesos de negocio y funciones de sistema, además de cosas concretas como lo son escribir clases en un lenguaje determinado, esquemas de base de datos y componentes de software reusables.

martes, 3 de mayo de 2011

Ingenieria del Software - Conceptos y Origenes

Para entrar en materia, creo que es conveniente comenzar con las definiciones básicas de Ingeniería del Software y hablando un poco de sus orígenes y fases. Entre las mas destacadas, tenemos:

  • Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978)
  • Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software (Bohem, 1976).
  • Ingeniería de Software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972).
  • Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993).

De acuerdo a lo antes mencionado se puede concluir que es una disciplina conformada por todas aquellas técnicas, métodos y herramientas utilizadas en el desarrollo y producción de software, abarcando más allá del solo hecho de programar.

Esta disciplina surge a finales de los años 60, en el medio de la llamada "Crisis del Software" donde los proyectos de desarrollo eran inacabables, existía una enorme ineficiencia, los costos eran impredecibles y generalmente, aquellos que llegaban al final, (fuera de los tiempos estimados) ofrecían soluciones que ya los usuarios no necesitaban, por no mencionar lo difícil que resultaba el poder darles mantenimiento. Entonces, se decidió seguir el ejemplo de la "Ingeniería Civil", la cual ya tenia cientos de años progresando exitosamente, puesto que en programación se aplica el mismo principio que en la construcción de un edificio: poner simplemente ladrillos y cemento (echar código) no es suficiente. Su elaboración consta de diversos pasos antes de comenzar con la fase de construcción, tales como el diseño arquitectónico, la albañilería, la fontanería, el diseño eléctrico, y durante este período se calculan los presupuestos y los plazos.

Por lo tanto, la ingeniería de software requiere la gestión de proyectos para que se pueda desarrollar una aplicación en el plazo previsto y con el presupuesto establecido que sea satisfactoria para el cliente (el concepto de calidad).

A partir de ese entonces, surgirían en las décadas siguientes, N cantidad de modelos de desarrollo, empezando por el tradicional Cascada, luego incorporando mejoras con el modelo espiral, y eventualmente se concebirían metodologías incrementales pesadas como la bien conocida Proceso Unificado o ágiles como XP. Sin embargo independientemente de su naturaleza, todas siguen en mayor o menor medida los siguientes pasos o fases:


  • Requerimientos del software: la obtención, análisis, especificación y validación de los requerimientos para el software.
  • Diseño de software: diseño del software, generalmente llevado a cabo con herramientas CASE y el uso de lenguajes de diseño como el UML.
  • Desarrollo/implementación de software: es la construcción del software empleando lenguajes de programación.
  • Testeo/prueba del software.
  • Mantenimiento del software: solución de los problemas del software ya desarrollado.
Fuentes:
http://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software
http://es.kioskea.net/contents/genie-logiciel/genie-logiciel.php3
http://www.alegsa.com.ar/Dic/ingenieria%20del%20software.php