Modelos para El Desarrollo de Software
Modelos para El Desarrollo de Software
Modelos para El Desarrollo de Software
2009
Contenido
1. Objetivo ........................................................................................................................................... 2
2. Introducción .................................................................................................................................... 2
13. Limitaciones............................................................................................................................... 15
Agradecimiento ..................................................................................................................................... 15
Los modelos a utilizar para desarrollar aplicaciones informáticas son parte fundamental de
cualquier bibliografía dedicada a la ingeniería de software.
El objetivo de este trabajo es presentar esos modelos de un modo más claro y ordenado,
haciendo hincapié en aquellos modelos que más se utilizan. Se busca además adaptar los modelos a
un enfoque más realista, más local y más orientado al desarrollo de sistemas vinculados a la
administración y a las ciencias económicas.
2. Introducción
Muchas profesiones tienen protocolos o guías para encarar su arte, su ciencia o su técnica.
Un pintor sabe que antes de empezar su cuadro debe preparar la tela conforme la técnica de pintura
que luego utilizará. Un médico que visita a un paciente a domicilio sabe que primero debe tomarle la
fiebre, auscultarlo, revisar su garganta y luego decidir un diagnostico. Podrá optar por realizar más
estudios de laboratorio o prescribir algún medicamento.
Algo similar pasa con la construcción del software: no es simplemente sentarse y empezar a
programar. Por el contrario, un proyecto de construcción de un sistema informático requiere
desarrollar una serie de tareas. Algunas de estas tareas son previas y otras son posteriores a la
programación propiamente dicha y deben ejecutarse con cierto orden y cumpliendo ciertas pautas
para asegurar un proyecto exitoso y un software de calidad.
Los modelos para el desarrollo de software dan al ingeniero un marco teórico a seguir para
desempeñar eficazmente su tarea. La existencia de múltiples tipos de sistemas, de múltiples tipos de
organizaciones y de contextos muy diferentes, hace que sea necesario contar con varios modelos. Las
diferentes características de cada modelo lo hacen más o menos apto ante determinados supuestos.
Este modelo presenta algunas variantes en cuanto su concepción. Algunos autores incluyen
otras etapas, como la de relevamiento o la de mantenimiento (más adelante se hablará de esto) o las
nombran de modo diferente (por ejemplo “implementación” o “implantación” en lugar de “puesta
en marcha”). Sin embargo, la esencia es similar en todos: Un modelo de etapas secuenciales las
Queda fuera de alcance de este trabajo el análisis exhaustivo de cada una de estas etapas.
Sin embargo, es necesaria una breve descripción de cada una de ellas.
Etapa Descripción
Análisis Los analistas relevan una determinada organización para detectar sus
necesidades y los problemas a ser resueltos por un sistema informático.
Diseño En esta etapa se diseña una solución informática a los problemas encontrados,
contemplando las necesidades de los usuarios. Generan la documentación con el
detalle técnico necesario para que los programadores puedan construir el
código.
Antes de avanzar con el análisis de los diferentes modelos que pueden ser utilizados para
construir software, es necesario aclarar que este modelo clásico tampoco abarca todas las etapas
existentes en un proyecto de construcción de una aplicación informática. Por ejemplo, no es cierto
que un desarrollo de software empiece directamente con la etapa de análisis. Tampoco es cierto que
solo estas cinco etapas basten para construir software de calidad. El modelo tradicional podría
mejorarse, agregando algunas etapas y reformulando otras.
Etapa Descripción
Construcción de Los modelos de desarrollo de software abarcan las etapas de análisis, diseño,
la aplicación codificación, prueba y puesta en marcha. Cada una de estas actividades tendrá
utilizando un particularidades y agregados según las características de cada modelo y de los
modelo sistemas a desarrollar.
Mantenimiento Ni los sistemas ni las organizaciones en las que estos funcionan son estáticos.
Una vez instalado un sistema es posible que sean necesarios cambios o mejoras.
Puede incorporarse nuevos pedidos de los clientes; agregar nuevas
funcionalidades; mejorar las existentes; corregir errores; adaptarlo a nuevas
tecnologías o a cambios del entorno.
Por supuesto también existen casos donde esta etapa no se lleva a cabo.
Los sistemas son diferentes entre sí. Y aunque sean parecidos, las organizaciones para los
cuales estos sistemas se desarrollan tienen diferente cultura. Resulta difícil pensar que un único
modelo, como el modelo clásico o secuencial, pueda servir para todos los tipos de software que
pueden construirse.
Es más, las críticas a este enfoque tradicional son variadas: que los proyectos de software
rara vez son tan lineales, que hay poca interacción con el cliente, que los errores u omisiones de una
Un software más grande presupone más líneas de código, más usuarios, más problemas
para relevar, una mayor cantidad de recursos asignados, un mayor despliegue en la
implementación, una mayor capacitación, más horas de prueba, más documentación,
etc.
En resumen: Es más difícil desarrollar un software de gran tamaño que uno pequeño. Es
más difícil mantener controlado un proyecto grande que otro más chico.
También pueden ocultarse cosas, a veces por una simple omisión, otras veces
deliberadamente. No debe olvidarse que el usuario puede asumir diversas actitudes
frente a la instalación de un nuevo software. A veces puede incluso no querer
implementarlo por temores a ser desplazado para conservar cierto poder dentro de la
organización.
Incluso debe considerarse que los usuarios no siempre tienen el tiempo suficiente para
dedicarle a los analistas que realizan el relevamiento. También existe la posibilidad de
que estos requerimientos no puedan ser explicitados al inicio o que cambien conforme
va avanzando el proyecto.
Es importante entonces asegurar que los requerimientos sean bien comprendidos y que
coincidan con las necesidades reales de la organización.
• La complejidad técnica:
Incluso hay casos en los cuales el cliente fija determinados requerimientos tecnológicos
que pueden resultar desafíos adicionales para el desarrollador que puede no tener la
suficiente experiencia en esa tecnología.
• El tiempo disponible:
Se supone que una de las cosas que se estiman y presupuestan al realizar un software es
cuánto tiempo se tardará en el desarrollo.
Sin embargo, muchas veces las organizaciones requieren tener disponible el software
para una fecha específica (por ejemplo para el lanzamiento de un nuevo producto, el
cambio de período fiscal, la necesidad adelantarse a la competencia, la apertura de un
nuevo local, etc.) En estos casos los plazos de desarrollos son parte del requerimiento e
imponen restricciones al proyecto.
• El riesgo:
Todo nuevo proyecto es un desafío e implica riesgos. De hecho, las situaciones descriptas
anteriormente implican diferentes grados de riesgos que pueden alterar los planes y los
resultados previstos.
Pero existen también otras situaciones propias del proyecto que implican riesgos
concretos. Se debe prestar especial atención a estas situaciones ya que pueden
determinar la necesidad de redefinir o incluso de abandonar el proyecto.
La lista de posibles riesgos es larga, pero como ejemplo puede mencionarse: pérdida de
apoyo político, cambios de personal, cambios en el presupuesto, cambios en la
legislación, cambios en el mercado, lanzamiento de nuevo hardware, aparición de nuevo
software o de un nuevo sistema operativo, cambios en sistemas de la competencia,
ventas o fusiones de la empresa…
Resulta apropiado aclarar que, así como se destacaron las posibles limitaciones de tiempo,
seguramente al leer esta lista pueda pensarse en el costo como un factor limitante. O mejor dicho en
el presupuesto que el cliente tiene disponible. Por supuesto que es necesario desarrollar software
que el cliente pueda pagar, pero esto no debe tomarse como un condicionante a la hora de elegir un
modelo u otro. En efecto y como se verá a continuación, hay modelos que insumen más recursos que
otros y por ende son más costosos. Pero hay que tener en cuenta que hay otros factores para
determinar el costo total de un sistema. Quizá un modelo a priori más caro termine generando
ahorros. Por ejemplo, un modelo que permita comprender mejor los requerimientos evita las
reprogramaciones. Aun con presupuestos limitados debe elegirse el modelo más adecuado y no
necesariamente el mas barato.
Etapa Descripción
Ingeniería de Esta etapa coincide con la etapa de análisis, aunque no solo debe relevarse
requerimientos usuarios y analizar la información proporcionada. El término ingeniería de
requerimientos hace referencia a una actitud activa en la búsqueda de todos los
problemas y en tratar de obtener los requerimientos de la manera más completa
y exacta posible, aun aquellos que los usuarios ocultan o desconocen. Además de
relevar usuarios debe también analizarse la documentación, la normativa vigente
y los procesos internos de la organización.
Diseño Es la primera de las actividades técnicas. En esta etapa se diseña una solución a
los problemas encontrados, contemplando las necesidades de los usuarios.
Produce un modelo de lo que se construirá más adelante. Proporciona detalles
acerca de las estructuras de datos, las arquitecturas, las interfaces y los
componentes del software que son necesarios para programar el sistema.
Codificación Basado en las especificaciones del diseño los programadores generan el código
utilizando un lenguaje de programación. Construyen el software propiamente
dicho.
Prueba Frecuentemente se señala a esta etapa como aquella en la cual se prueba que el
software no contenga errores. Sin embargo, no debe probarse que el software
funcione sino que se debe buscar que este falle. Se debe entonces atacar y
someter al programa a diversas condiciones extremas, buscando que aparezcan
errores no detectados en la etapa de la codificación.
Puede ocurrir que, por razones de tamaño, tiempo u operativas, sea conveniente construir y
entregar el sistema en partes. De este modo puede construirse una primera versión con algunas
funcionalidades. Una vez implementada esta versión, se vuelve a emplear el modelo lineal secuencial
para producir una nueva versión más completa.
Las etapas de este modelo obviamente no difieren del modelo Lineal Secuencial ya que, en
definitiva, son sucesivas iteraciones del mismo.
Como ejemplo puede mencionarse un sistema para un comercio minorista. Una primera
versión podría contener solamente funciones para emitir las facturas y controlar la caja. Una segunda
vuelta podría permitir registrar clientes y manejar la cuenta corriente de los mismos. Un tercer
incremento habilitaría la posibilidad de registrar las compras y los proveedores y finalmente una
última versión podría permitir un control de stock automatizado.
Ventajas Desventajas
• Las entregas parciales reducen la complejidad • Sigue siendo un esquema secuencial, aunque
del proyecto y mejoran las estimaciones. esto sea menos grave que en el modelo
• El usuario recibe rápidamente una primera anterior.
versión con sus primeras necesidades ya • Los errores de las primeras etapas se arrastran
cubiertas. con facilidad a las siguientes.
• Requiere menos personal concurrente y los • Pueden producirse estados de bloqueos por la
recursos se asignan mejor en el tiempo. secuencialidad de las etapas.
• Las implementaciones parciales son más
sencillas que una implementación total.
Ya se mencionó la dificultad existente para obtener requerimientos y para asegurar que los
analistas entendieron lo mismo que los usuarios quisieron explicar.
Así como al construir una casa los arquitectos construyen maquetas y diseños simulados para
que el cliente pueda tener una mejor idea de cómo será la futura construcción, los ingenieros de
software pueden construir un prototipo de lo que será el producto final. Este prototipo es una
versión acotada del software, construida solamente a los fines de poder interactuar con el cliente y
poder tener una mejor visión de que es lo que se está planificando hacer. Seguramente no todas las
funciones, pantallas u opciones del software serán incluidas en el prototipo, que podrá ser parcial e
incluir sólo aquellas funciones más representativas.
El prototipo también puede ser utilizado por el desarrollador para probar algún algoritmo
determinado o alguna funcionalidad compleja del software. Por ejemplo, si se construye un software
para interactuar y controlar algún dispositivo móvil, podría desarrollarse un prototipo para
comprobar que en efecto puede accederse al dispositivo y que se pueden realizar las operaciones
necesarias para controlarlo.
El prototipo puede tener varias versiones, cambios y ajustes. Podría trabajarse sobre el
prototipo hasta que se finalmente acuerdan los requerimientos o se comprueban y verifican los
temas técnicos. Recién cuando se logra el acuerdo final sobre el prototipo se avanza en la
construcción del software.
Es importante destacar que una vez que el prototipo es aprobado y que los requerimientos
han quedado finalmente claros, este debe desecharse para iniciar la construcción del software real.
Para ello, podrá utilizarse cualquiera de los modelos de desarrollo, según las necesidades específicas
del proyecto.
Las etapas de construcción del prototipo son similares a las del modelo lineal secuencial,
aunque en este caso no se busca la construcción de un producto final del software sino solamente de
un prototipo.
Etapa Descripción
Relevamiento Esta etapa se realiza un relevamiento general y luego de relevan con más
Rápido detalle aquellas opciones que serán incluidas en el prototipo. Este relevamiento
no se hace de un modo tan exhaustivo ya que no tiene como objetivo
determinar las funciones de todo el sistema sino sólo del prototipo.
Diseño del Se diseña el prototipo, detallando el modo en el que se presentará y cuál será
prototipo el alcance de cada una de las opciones del mismo.
Construcción de Una vez definidos los requerimientos o probada alguna funcionalidad específica
la aplicación se generará la aplicación final, utilizando alguno de los modelos de desarrollo
utilizando un de software.
modelo
Ventajas Desventajas
• Permite una mejor definición y comprensión • El cliente puede tentarse de utilizar el
de los requerimientos iniciales. prototipo, construido como tal y sin calidad,
• Permite un testeo de aquellas funciones como una primera versión operativa.
técnicamente complejas. • El desarrollador puede tentarse de ajustar el
• Reduce la incertidumbre. prototipo y entregarlo como producto final.
• Algunas de las funcionalidades presentes en el
prototipo podrían no ser tenidas en cuenta en
la versión final o quizá no sean posibles de
construir en el entorno real de desarrollo.
9. Modelo en “Espiral”
El nombre del modelo deriva de la representación gráfica utilizada para ilustrarlo. Un espiral
marca el sucesivo recorrido de las distintas etapas, produciendo una versión operativa del software
en cada una de sus vueltas.
Prueba
Diseño
La característica distintiva y saliente del modelo consiste en que agrega a las etapas
habituales un análisis de riesgo. En cada una de estas iteraciones se evalúan los riesgos del proyecto,
A partir de dicho análisis el proyecto puede ser modificado o incluso abortado sí las condiciones así lo
imponen.
Etapa Descripción
Diseño Es la primera de las actividades técnicas. En esta etapa se diseña una solución a
los problemas encontrados, contemplando las necesidades de los usuarios.
Produce un modelo de lo que se construirá más adelante. Proporciona detalles
acerca de las estructuras de datos, las arquitecturas, las interfaces y los
componentes del software que son necesarios para programar el sistema.
Análisis de Es la etapa distintiva del modelo. En ella se analizan los riesgos que pueden
riesgo afectar la continuidad del proyecto y se evalúa la conveniencia o no de continuar.
A diferencia de otros modelos, esta etapa actúa como vía de escape, permitiendo
no seguir gastando recursos en proyectos inviables
Codificación Basado en las especificaciones del diseño los programadores generan el código
utilizando un lenguaje de programación. Construyen el software propiamente
dicho.
Prueba Frecuentemente se señala a esta etapa como aquella en la cual se prueba que el
software no contenga errores. Sin embargo, no debe probarse que el software
funcione sino que se debe buscar que este falle. Se debe entonces atacar y
someter al programa a diversas condiciones extremas, buscando que aparezcan
errores no detectados en la etapa de la codificación.
Para agilizar los tiempos de desarrollo el software debe dividirse en partes, para que puedan
ser desarrolladas por varios equipos que trabajan en forma concurrente. Esta división, mas la
reutilización de componentes y las herramientas RAD permiten construir piezas de software de
calidad en tiempos que van de 30 a 90 días. La permanente comunicación con el cliente y entre los
equipos de trabajo se vuelve imprescindible para el éxito final.
Etapa Descripción
Diseño Se diseña en función de las herramientas RAD y usando los asistentes de esta. Se
analizan los componentes que pueden ser reutilizados y aquellos que será
necesario programar.
Codificación Se utiliza la herramienta RAD para volcar en ella las características que tendrá
cada uno de los componentes del sistema. El código se genera mediante un
proceso semi-automático, pudiendo incluso utilizarse más de un lenguaje y/o
generar para más de un entorno operativo.
Ventajas Desventajas
• Los tiempos de desarrollo se acortan • El cliente debe también comprometerse con los
significativamente. plazos cortos de desarrollo y esto implica
• También se reducen los tiempos de prueba y asignar mayor personal al proyecto y por con
los errores no detectados. una mayor carga horaria.
• Pueden construirse sistemas portables o de • No todos los proyectos pueden dividirse ni son
fácil migración entre diferentes entornos y aptos de ser desarrollados con herramientas
sistemas operativos. RAD
• El código generado en forma automática suele
tener menor performance y consumir más
recursos.
• Se complica su implementación en proyectos
grandes porque requiere mucho personal en
forma concurrente.
Si bien los modelos descriptos anteriormente son los más utilizados en desarrollos vinculados
a la administración y a las ciencias económicas, desde luego no agotan la totalidad de los modelos
existentes. El análisis y desarrollo de otros modelos escapa a los alcances del presente trabajo, pero
cabe de todos modos hacer una rápida mención de alguno de ellos, destacando algunas de sus
características principales:
• Métodos formales: Este modelo intenta hallar modelos matemáticos formales para
asegurar un desarrollo de software libre de errores. Aun cuando difícilmente puedan
Ya se ha mencionado que no existe un mejor modelo para todo tipo de desarrollos y por
ende tampoco la posibilidad de hacer una recomendación certera sobre qué modelo conviene
utilizar. El proyecto y sus características, así como también el cliente y la experiencia y forma de
trabajo del equipo de desarrollo, pueden inclinar la elección hacia un modelo u otro.
Tampoco estos modelos deben ser tomados como caminos obligatorios a seguir. Un proyecto
puede requerir que el desarrollo se realice tomando características de más de un modelo. Por
ejemplo, podría realizarse un prototipo y luego utilizar una herramienta RAD. O realizar un análisis de
riesgo en alguna de las iteraciones del modelo secuencial incremental.
13.Limitaciones
Si bien a lo largo del apunte se han mencionados diferentes modelos que se adecúan a diversas
situaciones, existen escenarios, particularmente aquellos sujetos a cambios continuos, en los cuáles
estos modelos se vuelven ineficaces. Entre las limitaciones de estos modelos podemos mencionar:
En los últimos años se han propuesto una serie de modelos denominados “agiles”, que buscan
satisfacer al cliente con la entrega rápida de software incremental, que puede ser cambiado
fácilmente para adaptarse a las nuevas necesidades.
Agradecimiento
Agradezco la especial dedicación del Dr. Carlos Waldbott en la colaboración para el armado y en la
revisión del presente trabajo.
1. ROGER PRESSMAN: Ingeniería del Software. 6ta Edición. 2005. Ed. McGraw-Hill.
2. IAN SOMMERVILLE: Ingeniería de Software. 6ta Edición. 2002. Pearson Education.
3. SHARI LAWRENCE PFLEEGER: Ingeniería de Software. 1ra Edición. 2002. Prentice Hall.
4. WIKIPEDIA: Ingeniería del Software http://es.wikipedia.org/wiki/Ingenieria_de_software
El presente trabajo ha sido preparado como material de lectura complementario a la bibliografía de las materias
de la Facultad de Ciencias Económicas de la UBA. Puede ser distribuido libremente y por cualquier medio entre
los alumnos de los cursos que así lo consideren. No debe alterarse el formato y/o contenido original.