viernes, 29 de agosto de 2014

Aspectos legales y licencias del software libre y de código abierto


Dentro del mundo de los aspectos legales y licencias del software libre y de código abierto existen muchas licencias tales como: 

  • Las licencias GPL, el autor conserva los derechos de autor (copyright), y permite la redistribución y modificación, pero controlando que todas las versiones modificadas del software permanecen bajo los términos más restrictivos de la propia licencia GNU GPL.
  • Licencias BSD, el autor mantiene la protección de copyright únicamente para la renuncia de garantía y para solicitar la atribución de la autoría en trabajos derivados, pero permite la libre redistribución y modificación, incluso si dichos trabajos tienen propietario. 
  • Copyleft, se refiere a la autorización por parte del propietario de la licencia para su copia, modificación y posterior distribución, contrariamente a lo que ocurre con el software licenciado bajo los términos de los derechos de autor. el propietario de la licencia bajo términos de Copyleft puede desarrollar una versión de dicho software bajo licencia sujeta a Copyrigth y vender o ceder este software bajo cualquiera de estas licencias, pero sin afectar a las licencias Copyleft ya otorgadas. El propietario de estas licencias puede retirar la autorización de uso de una licencia Copyleft si lo cree oportuno, pero en ese caso está obligado a indemnizar a los poseedores de las licencias en uso de este tipo.
  • Freeware, se trata de un tipo de licencia en el que se autoriza el uso del software de forma libre y gratuita, aunque esta sesión pueda ser bajo determinadas condiciones, como por ejemplo que se autoriza su uso a particulares, pero no a empresas o a organismos oficiales.
  • Shareware, es un tipo de distribución en el que se autoriza el uso de un programa para que el usuario lo evalúe y posteriormente lo compre.
A continuación mi mapa conceptual referente al Licenciamiento en Software Libre


Mapa Conceptual Gestión de Calidad y Pruebas de Software


domingo, 24 de agosto de 2014

Modelos de Calidad de Software

¿Qué es un Modelo de calidad de software?

Es un conjunto de buenas practicas para el ciclo de vida del software, enfocado en los procesos de gestión y desarrollo de proyectos. Es importante resaltar que los modelos de calidad te dicen qué hacer, mas no cómo hacerlo, ya que todo depende de la metodología que se utilice y cuales sean los objetivos del negocio.

Existen muchos modelos de calidad de software, entre los cuales se encuentran los siguientes:

  • CMMI
  • Normas ISO/IEC 12007
  • Métrica 3


CMMI: Es un modelo orientado a  mejora de procesos en diferentes niveles de madurez, mas hacia proyectos específicos. Bajo este modelo, se clasifica las empresas en niveles de madurez. Estos niveles sirven para conocer la madurez de los procesos que se realizan para producir software.

Los niveles CMM - CMMI son 5:

  • Inicial o Nivel 1: Este es el nivel en donde están todas las empresas que no tienen procesos. Los presupuestos se disparan, no es posible entregar el proyecto en fechas o no hay control sobre el estado del proyecto.
  • Repetible o Nivel 2: Quiere decir que el éxito de los resultados obtenidos se pueden repetir. La principal diferencia entre este nivel y el anterior es que el proyecto es gestionado y controlado durante el desarrollo del mismo. El desarrollo no es opaco y se puede saber el estado del proyecto en todo momento.
  • Definido o Nivel 3: Para que una empresa pueda alcanzar este nivel, significa que la forma de desarrollar proyectos (gestión e ingeniería) tiene que estar definida, por definida quiere decir que esta establecida, documentada y que existan métricas (obtención de datos objetivos) para la consecución de objetivos concretos.
  • Cuantitativamente Gestionado o Nivel 4: Los proyectos usan objetivos medibles para alcanzar las necesidades de los clientes y la organización. Se usan métricas para gestionar la organización.
  • Optimizado o Nivel 5: Los procesos de los proyectos y de la organización están orientados a la mejora de las actividades. Mejoras incrementales e innovadoras de los procesos que mediante métricas son identificadas, evaluadas y puestas en práctica.






Normas ISO/IEC 12007: Es un modelo de calidad orientado al ciclo de vida del software. Establece un proceso de ciclo de vida para el software que incluye procesos y actividades que se aplican desde la definición de requisitos, pasando por la adquisición y configuración de los servicios del sistema, hasta la finalización de su uso.



Los procesos de la norma ISO 12207 se clasifican en tres grandes grupos:

  • Procesos Principales
  • Procesos de Apoyo
  • Procesos de Gestion

Los procesos principales de la norma ISO 12207 son los siguientes:

  • Adquisición.
  • Suministro.
  • Desarrollo.
  • Explotación.
  • Mantenimiento.

Los procesos de Soporte de la norma ISO 12207 son los siguientes:
  • Documentación
  • Gestión de la configuración.
  • Aseguramiento de calidad.
  • Verificación. Validación.
  • Revisión conjunta.
  • Auditoría.
  • Resolución de problemas.

Los procesos de gestión de la norma ISO 12207 son los siguientes:
  • Gestión.
  • Infraestructura.
  • Mejora.
  • Formación.

Métrica 3: Es un modelo que ofrece a las organizaciones un instrumento útil para la sistematización de las actividades que dan soporte al ciclo de vida del software. Esta metodología fue promovida por el Ministerio de Administraciones Públicas del Gobierno de España con el fin de aplicarla en la Administración Pública de ese país y ésta se realizó basada en las normas ISO/IEC 12207 y ISO/IEC 15504.

Elementos de Métrica 3:

Esta métrica está conformada por una serie de elementos que son los siguientes:
  • Procesos
  • Interfaces
  • Técnicas y Prácticas
  • Roles o Perfiles

Procesos involucrados en la Métrica 3:
  • Planificación de Sistemas de Información (PSI).
  • Desarrollo de Sistemas de Información (DSI). Debido a su complejidad, está a su vez dividido en cinco procesos:

  1. Estudio de Viabilidad del Sistema (EVS).
  2. Análisis del Sistema de Información (ASI).
  3. Diseño del Sistema de Información (DSI).
  4. Construcción del Sistema de Información (CSI).
  5. Implantación y Aceptación del Sistema (IAS).

  • Mantenimiento de Sistemas de Información (MSI).

Es importante señalar que tanto la Métrica 3 como las normas ISO/IEC 12207 se encuentran orientadas al proceso o a establecer parámetros de calidad del proceso de desarrollo de un software determinado.

Interfaces de Métrica 3:

  • Gestión de proyectos (GP).
  • Seguridad (SEG).
  • Aseguramiento de la Calidad (CAL).
  • Gestión de la Configuración (GC).


Técnicas de Métrica 3:
  • Técnicas de desarrollo (Casos de Uso, Diagramas de Clase, Diagramas de Flujo de Datos, etc).
  • Técnicas de gestión de proyectos (Técnicas de estimación, Staffing Size, Planificación, etc)
  • Prácticas (Análisis de impacto, Presentaciones, Prototipado, etc).

Perfiles o Roles en Métrica 3:
  • Directivo (Comité de Dirección, Directores de Usuarios, etc).
  • Jefe de Proyecto (Responsable de Implantación, Responsable de Seguridad, etc).
  • Consultor (Consultor Informático, Técnico de Sistemas).
  • Analista (Analista, Administrador de Bases de Datos, etc).
  • Programador.


Por último, vamos a destacar que MÉTRICA versión 3 puede ser utilizada libremente con la única restricción de citar la fuente de su propiedad intelectual.


MOSCA

El LISI-USB desarrolló el Modelo Sistémico de Calidad de SoftwareMOSCA- (Mendoza et al., 2001; 2002), que integra el modelo de calidad del producto (Ortega et al., 2000) y el modelo de calidad del proceso de desarrollo (Pérez et al., 2001), y está soportado por los conceptos de calidad total sistémica (Callaos y Callaos, 1993; Pérez et al., 1999).
A la hora de definir la calidad del software se debe diferenciar entre la calidad del producto software y la calidad del proceso de desarrollo de éste -calidad de diseño y fabricación- (Callaos y Callaos, 1993; Pérez et al., 1999). No obstante, las metas que se establezcan para la calidad del producto van a determinar los objetivos del proceso de desarrollo, ya que la calidad del primero va a depender, entre otros aspectos, de estos últimos. Según Callaos y Callaos (1993), la calidad de los Sistemas de Software no es algo que depende de una sola característica en particular, sino que obedece al compromiso de todas sus partes. Ésta es una visión sistémica de la calidad del software.
Tomando en cuenta este enfoque de la calidad, se desarrolló el Modelo Sistémico de Calidad de software (MOSCA), en el LISI-USB (Mendoza et al., 2001), que integra el modelo de calidad del producto (Ortega, et al., 2000) y el modelo de calidad del proceso de desarrollo (Pérez et al., 2001), y soporta estos conceptos de calidad sistémica (Callaos y Callaos, 1993; Pérez et al., 1999).
En cuanto a la perspectiva del producto, este modelo plantea, sobre la base de las 6 características de calidad del estándar internacional ISO/IEC 9126 (1991), un conjunto de categorías, características y métricas asociadas que miden la calidad y hacen del modelo un instrumento de medición de gran valor, ya que cubre todos los aspectos imprescindibles para medir directamente la calidad del producto de software. En cuanto a la perspectiva del proceso, este modelo se formuló sobre la base de las 5 características de calidad del estándar internacional  ISO/IEC 15504 (JTC 1/SC 7, 1991),  un conjunto de categorías, características y métricas asociadas que miden la calidad de un proceso de software con un enfoque sistémico. El modelo de calidad que soporta este enfoque se describe a continuación:

Nivel 0: Dimensiones. Eficiencia del proceso, Efectividad del proceso, Eficiencia del producto y Efectividad del producto son las cuatro dimensiones propuestas en el prototipo de modelo. Sólo un balance y una buena interrelación entre ellas permite garantizar la calidad Sistémica global de una organización.

Nivel 1: Categorías. Se contemplan 11 categorías: 6  pertenecientes al producto y las otras 5 al proceso de desarrollo.
  • Producto: Funcionalidad (FUN), Fiabilidad (FIA), Usabilidad (USA), Eficiencia (EFI), Mantenibilidad (MAB) y Portabilidad (POR).
  • Proceso: Cliente-Proveedor (CUS), Ingeniería (ENG), Soporte (SUP), Gestión (MAN) y Organizacional (ORG).

Nivel 2: Características. Cada categoría tiene asociado un conjunto de características (56 asociadas al producto y 27 al proceso de desarrollo), las cuales definen las áreas claves a satisfacer para lograr, asegurar y controlar la calidad tanto en el producto como en el proceso. Entre las características asociadas a cada categoría del producto, se proponen en el modelo MOSCA, una serie de características del proceso (ver Figura 1). Esto se debe a que algunas características de la calidad del  proceso, impactan directamente en las categorías del producto, al igual que ciertas características de la calidad del producto definen categorías del proceso.

Nivel 3: Métricas. La cantidad de métricas asociadas a cada una de las características que conforman MOSCA es de 587 en total.
Adicionalmente, MOSCA cuenta con un algoritmo que facilita su operacionalización y permite estimar la calidad de software. El algoritmo contempla tres fases: (1) estimación de la calidad del producto de software con un enfoque sistémico; (2) estimación de la calidad del proceso de desarrollo de software con un enfoque sistémico; y (3) integración de las mediciones de los sub-modelos de la calidad del producto y la calidad del proceso.

Mapa Conceptual de UML




UML (Unified Modeling Language)


UML (Unified Modeling Language): Es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad. Es importante destacar que este lenguaje se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir.

UML sirve para el modelado completo de sistemas complejos, tanto en el diseño de los sistemas software como para la arquitectura hardware donde se ejecuten.

Otro objetivo de este modelado visual es que sea independiente del lenguaje de implementación, de tal forma que los diseños realizados usando UML se pueda implementar en cualquier lenguaje que soporte las posibilidades de UML (principalmente lenguajes orientados a objetos).



Tipos de Diagramas

En UML 2.0 hay 13 tipos diferentes de diagramas. Para comprenderlos de manera concreta, a veces es útil categorizarlos jerárquicamente, como se muestra en la siguiente figura:





Los Diagramas de Estructura enfatizan en los elementos que deben existir en el sistema modelado:
  • Diagrama de clases.
  • Diagrama de componentes.
  • Diagrama de objetos.
  • Diagrama de estructura compuesta (UML 2.0).
  • Diagrama de despliegue.
  • Diagrama de paquetes.


Los Diagramas de Comportamiento enfatizan en lo que debe suceder en el sistema modelado:
  • Diagrama de actividades.
  • Diagrama de casos de uso.
  • Diagrama de estados.


Los Diagramas de Interacción son un subtipo de diagramas de comportamiento, que enfatiza sobre el flujo de control y de datos entre los elementos del sistema modelado:

  • Diagrama de secuencia.
  • Diagrama de comunicación, que es una versión simplificada del Diagrama de colaboración (UML 1.x).
  • Diagrama de tiempos (UML 2.0).
  • Diagrama global de interacciones o Diagrama de vista de interacción (UML 2.0)


Principios del Modelado

  • Principio 1: La elección de que modelos crear tiene una profunda influencia sobre cómo se enfrenta un problema y cómo se da forma a una solución.
  • Principio 2: Todo modelo puede ser expresado a diferentes niveles de precisión.
  • Principio 3: Los mejores modelos están ligados a la realidad.
  • Principio 4: Un único modelo no es suficiente.



martes, 12 de agosto de 2014

Mapa Conceptual de Ingeniería del Software Libre


Ingeniería del Software Libre

Introducción a la Ingeniería del Software Tradicional

En 1968, F.L. Bauer definió a la Ingeniería del Software como: “la disciplina que tiene el propósito de diseñar, crear y mantener el software por medio de la aplicación de tecnologías y prácticas de las ciencias de la computación, administración de proyectos, ingeniería, dominio de aplicaciones, diseño de interfaces, administración de componentes digitales y otros campos”
La ingeniería del software se relaciona con la aplicación de los principios de ingeniería de la concepción, desarrollo y verificación y depuración de sistemas de software.
Esta disciplina está de acuerdo con identificar, definir, realizar y verificar las características requeridas del software resultante. Esas características del software pueden incluir, la funcionalidad, la confiabilidad, la mantenibilidad, la disponibilidad, la testeabilidad, la facilidad de uso, la portabilidad y demás atributos. La Ingeniería del Software direcciona dichas características por medio de diseños preparados y especificaciones técnicas que, si se implementan de forma correcta, darán como resultado un software que puede ser verificado para cumplir con dichos requerimientos.
La Ingeniería del software también se relaciona con las características del proceso de desarrollo de software. En este particular, toma en cuenta características tales como el costo de desarrollo, la duración de desarrollo y los riesgos en el desarrollo de software. 
A pesar de que la ingeniería del software ha conseguido indudablemente notables éxitos, también es cierto que ha sucumbido a lo que se ha venido a llamar la "crisis del software". Prueba de ello es que a día de hoy todavía sigue sin ser posible cuantificar con exactitud los plazos, costos, recursos humanos y técnicas que lleven a un desarrollo exitoso del software, tal y como otras ramas de la ingeniería en otros campos sí han sido capaces de hacer. El enfoque sistemático y cuantificable ha tenido siempre como barreras las propias de las formas en las que el software se ha desarrollado y distribuido

Y es aquí donde el software libre brinda ventajas en la ingeniería del software. El software libre tiene un gran auge en cuanto a uso, aceptación y desarrollo. La implantación de Internet junto con las características de las licencias que invitan a todo el mundo a formar parte del equipo de desarrollo, han propiciado que no sólo podamos contar con el código fuente, sino tomar medidas de los repositorios de versiones gracias a los cuales podemos ver la evolución, etc.


Ingeniería del software libre

Este nuevo enfoque de la ingeniería del software se puede considerar compatible e incluso complementario a la Ingeniería de software tradicional. Mediante el análisis del software libre se ganan una serie de factores que difícilmente ha podido conseguir la ingeniería del software tradicional.

El primero de ellos es la vertiente temporal que se añade al análisis. Mediante un análisis temporal continuo podemos medir lo que sucede en el mundo del software libre.

Por otro lado, el análisis de software libre no plantea problemas de granularidad. La ingeniería del software se ha basado con frecuencia en el análisis de unos pocos proyectos de software debido en gran parte a la facilidad de acumular experiencias en entornos corporativos propios. 


Paradigmas de la Ingeniería del Software

Un paradigma es un modelo para comprender la realidad, que nos permite relacionarnos con el mundo circundante y tener un sentido de identidad dentro de lo que percibimos que es el “mundo real”.

Un paradigma de programación es un modelo básico de diseño y desarrollo de programas, que permite producir programas con una directriz específica, tales como: estructura modular, fuerte cohesión, alta rentabilidad, etc. (Olivares, 2011).

En términos generales se puede decir que un paradigma de programación es un modelo básico de diseño y desarrollo de programas, que permite producir programas con una directriz específica, tales como: estructura modular, fuerte cohesión, alta rentabilidad, etc.

El paradigma a utilizarse en cada caso de desarrollo se selecciona por los ingenieros de software según la naturaleza del proyecto y la aplicación, los controles y las entregas que se requieren, la complejidad del proyecto y los recursos disponibles.

La ingeniería de software tiene varios modelos o paradigmas de desarrollo en los cuales se puede apoyar para la realización de software, algunos de ellos son:
• Programación Procedimental: En este paradigma de programación, la atención se centra en el procesamiento, es decir, en las acciones necesarias para resolver un determinado problema. 

Los lenguajes soportan este paradigma mediante la definición de subprogramas (procedimientos y funciones) para la realización de dichas acciones, y el suministro de utilidades para el intercambio de información entre subprogramas (paso por valor, paso por referencia).

• Programación Modular: Acá la programación se define como la suma de dos tareas: el diseño del algoritmo y el diseño de las estructuras de datos: 

Programa = Algoritmo + Estructura de Datos

La programación modular tiene diversas acepciones en función del concepto de módulo y de la tarea en la que se enfatice: 

* Énfasis en el procesamiento algorítmico: 
    - Módulo como algoritmo autocontenido, es decir, un subprograma. 
    - Módulo como agrupación de subprogramas relacionados lógicamente entre sí 
        - Agrupación de un programa principal y los subprogramas necesarios: módulo de programa. 
         - Agrupación de diferentes subalgoritmos diseñados bajo un ámbito de aplicación común: biblioteca. 

* Énfasis en los datos: 
    - Módulo como agrupación de una estructura de datos y las operaciones que la gestionan. 
           - Accesibilidad. Tipos transparentes. 
           - Ocultación. Tipos Abstractos de Datos 
           - Herencia y Polimorfismo. Orientación a Objetos

• Abstracción de Datos (TADs): la abstracción de datos es a la utilización de datos lo que la abstracción procedimental a la utilización de subprogramas. 

La abstracción de datos proporciona la definición de un concepto y las operaciones aplicables, sin especificar la implementación concreta del mismo. Cuando un tipo de datos se define de esta forma decimos que estamos definiendo un Tipo Abstracto de Datos (TAD). 

De esta manera, cuando se manejan TADs, aparecen tres niveles: 

   • Nivel de utilización. Se definen variables del TAD definido y se les aplican las operaciones establecidas. 
   • Nivel de especificación. Se define el concepto y las operaciones que se le aplican, junto con las condiciones bajo las cuales se aplican. Este nivel constituye el interfaz del TAD. 
   • Nivel de implementación. Se implementa el tipo concreto y los subprogramas que soportan las operaciones especificadas. 

• Orientación a Objetos: La orientación a objetos proporciona un nivel más de reutilización y mayor flexibilidad en el diseño de programas, mediante los conceptos de herencia y polimorfismo. En OO se utilizan los términos de Clases (como abstracciones de objetos) y objetos (ejemplos de una clase).


·  • Programación Genérica: es una técnica que define algoritmos reusables, implementados como entidades de primer nivel (clases) e independientes de los datos sobre los que opera.

Normalmente los algoritmos genéricos son utilizados sobre agregados de elementos (pilas, colas, listas, conjuntos).



 Programación Orientada a Aspectos: es un paradigma de programación relativamente reciente cuya intención es permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de incumbencias. El principal objetivo de la POA es la separación de las funcionalidades dentro del sistema:

*         Por un lado funcionalidades comunes utilizadas a lo largo de la aplicación.
*         Por otro lado, las funcionalidades impropias de cada módulo. Cada funcionalidad común se encapsulará en una entidad.

Paradigma de Desarrollo Ágil: Es un paradigma basado en procesos ágiles. Estos intentan evitar los tediosos caminos de las metodologías tradicionales enfocándose en las personas y los resultados. Usa un enfoque basado en el Valor para construir software, colaborando con el cliente e incorporando los cambios continuamente.

Metodologías de Desarrollo de Software
Una metodología de desarrollo de software es un conjunto de pasos y procedimientos que deben seguirse para desarrollar software. Una metodología está compuesta por:

  •          Cómo dividir un proyecto en etapas.
  •          Qué tareas se llevan a cabo en cada etapa.
  •          Qué restricciones deben aplicarse.
  •          Qué técnicas y herramientas se emplean.
  •       Cómo se controla y gestiona un proyecto.


Existen tres tipos de metodologías de Desarrollo de software, las ágiles, las tradicionales o duras y las híbridas que combinan los beneficios de las dos anteriores.

A continuación un cuadro comparativo entre las metodologías ágiles y las tradicionales:



Algunas de las metodologías ágiles son:
·         eXtreme Programming (XP)
·         Agile Unified Process (AUP)
·         Feature Driven Development (FDD)
·         Scrum
adicionales:
·         Rational Unified Process (RUP)
·         Métrica (V3)

Modelos de desarrollo de Software
Los modelos de desarrollo de software son una representación abstracta de una manera en particular. Representan un enfoque común. Puede ser modificado y adaptado de acuerdo a las necesidades del software en proceso de desarrollo. Los modelos más comunes son:

Modelo Espiral

Es un modelo meta del ciclo de vida del software donde el esfuerzo del desarrollo es iterativo, tan pronto culmina un esfuerzo del desarrollo por ahí mismo comienza otro; además en cada ejecución del desarrollo se sigue cuatro pasos principales:

  1. Determinar o fijar los objetivos: En este paso se definen los objetivos específicos para posteriormente identifica las limitaciones del proceso y del sistema de software, además se diseña una planificación detallada de gestión y se identifican los riesgos.
  2. Análisis del riesgo: En este paso se efectúa un análisis detallado para cada uno de los riesgos identificados del proyecto, se definen los pasos a seguir para reducir los riesgos y luego del análisis de estos riesgos se planean estrategias alternativas.
  3. Desarrollar, verificar y validar: En este tercer paso, después del análisis de riesgo, se eligen un paradigma para el desarrollo del sistema de software y se lo desarrolla.
  4. Planificar: En este paso del proyecto se revisa y se toma la decisión si se debe continuar con un ciclo posterior al de la espiral. Si se decide continuar, se desarrollan los planes para la siguiente fase del proyecto.



Modelo en cascada

Es el enfoque metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior.
Las etapas de su ciclo de vida son las siguientes:


  • Análisis de requisitos.
  • Diseño del Sistema.
  • Diseño del Programa.
  • Codificación.
  • Pruebas.
  • Implantación.
  • Mantenimiento.

De esta forma, cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costos del desarrollo.



Modelo iterativo e incremental
En un desarrollo iterativo e incremental el proyecto se planifica en diversos llamados iteraciones.
Las iteraciones se pueden entender como miniproyectos: en todas las iteraciones se repite un proceso de trabajo similar para proporcionar un resultado completo sobre producto final, de manera que el cliente pueda obtener los beneficios del proyecto de forma incremental. Para ello, cada requisito se debe completar en una única iteración: el equipo debe realizar todas las tareas necesarias para completarlo (incluyendo pruebas y documentación) y que esté preparado para ser entregado al cliente con el mínimo esfuerzo necesario. De esta manera no se deja para el final del proyecto ninguna actividad arriesgada relacionada con la entrega de requisitos.
En cada iteración el equipo evoluciona el producto (hace una entrega incremental) a partir de los resultados completados en las iteraciones anteriores, añadiendo nuevos objetivos/requisitos o mejorando los que ya fueron completados.




Cuadro comparativo de los modelos de software

Modelo
Ventajas
Descripción
Modelo de Cascada
Este enfoque metodológico que ordena rigurosamente las etapas del ciclo de vida del software, de forma tal que el inicio de cada etapa debe esperar a la finalización de la inmediatamente anterior.
·         Ingeniería y análisis del Sistema 
·         Análisis de los Requisitos 
·         Diseño 
·         Codificación 
·         Prueba 
·         Mantenimiento
Modelo Iterativo e Incremental
Los modelos iterativos e incrementales disminuyen riesgos y nos ayudan a tener un mejor desarrollo de software ya que estos modelos se basan en la retroalimentación por lo que nos ayudan a tener una mejor arquitectura del software.
El modelo incremental: este modelo mantiene la función anterior y aumenta otra, ya que puede ser que el primer incremento no hubiera tenido todos los requerimientos que necesitaba el proyecto.
El modelo iterativo: Este modelo en cambio mejora cada versión es decir mejora la función que tiene la versión.
Modelo Espiral
Es un modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con los aspectos controlados y sistemáticos del Modelo Cascada. Proporciona potencial para desarrollo rápido de versiones incrementales. En el modelo Espiral el software se construye en una serie de versiones incremental.
           Región 1
           Región 2
           Región 3
           Región 4
           Región 5
           Región 6


Modelado de Software
Al momento de crear modelos como abstracciones de sistema o de entidades del mundo real es importante contar con herramientas que permitan crearlos, abordarlos y simplificar la complejidad de los sistemas.
Para modelar software se utiliza el Lenguaje de Modelado unificado UML que es un lenguaje para especificar, construir, visualizar y documentar los artefactos de un sistema de software orientado a objetos (OO).
UML ofrece vocabulario y reglas para crear y leer modelos bien formados que constituyen los planos de un sistema software.
UML es independiente del Proceso de desarrollo. Un uso óptimo se consigue en procesos dirigidos por casos de uso, centrados en la arquitectura, iterativos e incrementales (Proceso Unificado de Desarrollo (RUP)). Además, cubre las diferentes vistas de la arquitectura de un sistema mientras evoluciona a través del ciclo de vida de desarrollo del software.
A continuación los diferentes tipos de diagramas presentes en UML:




Modelos de Calidad en el desarrollo de software
Son diferentes iniciativas que las empresas desarrolladoras de software toman en cuenta para completar culminar sus proyectos de desarrollo con grandes ganancias con respecto a costos, plazo y nivel de calidad.
Consisten en mejorar los procesos de desarrollo de software de tal modo los proyectos sean más predecibles (tiempo y costes), se reduzcan los riesgos en los desarrollo (con el consiguiente ahorro de costes), etc.

Existen numerosas iniciativas, siendo las más importantes:

  • Norma ISO 9000: son un conjunto de normas cuyo ámbito es la gestión de la calidad, del conjunto la norma más destacada es la ISO/IEC 9001, que trata los requisitos del sistema de gestión de la calidad. Es una norma de carácter general (aplica a cualquier tipo de organización, tecnológica o no), y por tanto no trata específicamente el ciclo de vida de un sistema de información o los servicios que este presta. Por el carácter generalista de la norma, existe una guía, la ISO/IEC 90003, para aplicar la 9001 al software.

  • Norma ISO 15504: Son un conjunto de normas cuyo ámbito es evaluar y mejorar la capacidad y madurez de los procesos. En principio no es específica para el software, pero se usa normal y principalmente junto con la ISO/IEC 12207 (que contiene buenas prácticas, a nivel procesos, para el desarrollo y mantenimiento software), en la evaluación y mejora de la calidad del proceso de desarrollo y mantenimiento de software.

  • El Capability Maturity Model (CMMI): es un modelo de calidad del software que clasifica las empresas en niveles de madurez. Estos niveles sirven para conocer la madurez de los procesos que se realizan para producir software. Los niveles de funcionalidad practica de CMMI son: