Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ahora bien, aunque existen varias definiciones para entender el concepto de ingeniería del
software de acuerdo a cada autor, a continuación se cita la definición dada por Fritz Bauer,
seguido por Pressman (2005), en una conferencia fundamental sobre la materia:
“[La ingeniería del software es] el establecimiento y uso de principios sólidos de la ingeniería
para obtener económicamente un software confiable y que funcione de modo eficiente en
máquinas reales” p. 23
En este sentido, la ingeniería del software se puede ver como una disciplina que tiene en
cuenta elementos administrativos y tecnológicos –dado que es necesario administrar una
serie de recursos y porque hace uso de las TIC’s y las ciencias de la computación, que son
inherentes a la fabricación de software–, además de económicos, psicológicos, entre muchos
otros como parte integral de ésta.
Siendo consecuentes con lo mencionado y si se piensa en la ingeniería del software
enmarcada en un contexto de proyectos de software, es totalmente posible pensar que ésta
busca:
Métodos completos para surtir todas las fases del desarrollo de un proyecto de
software.
Mejores herramientas para la automatización de métodos.
Bloques de construcción más potentes para la implementación de software.
Mejores técnicas para la garantía de la calidad del software.
Filosofía predominante para la construcción y gestión.
Según Pressman (2005), una empresa perteneciente a la industria del software debería
describir un conjunto único de actividades para un marco de trabajo definido para los
procesos de software adoptados. Esto se podría definir cómo modelo de desarrollo, pues
cada empresa debe adaptar la definición de su modelo, a la naturaleza específica de cada
proyecto.
Siendo consecuentes con lo mencionado, se han definido a lo largo del proceso evolutivo de
la industria del software, una serie de modelos de desarrollo “genéricos” que algunas
organizaciones, eventualmente podrían adoptar, bien sea en su forma pura o con ciertas
modificaciones de acuerdo a sus necesidades. Sin embargo, es importante tener en cuenta
que sin importar el modelo seleccionado, la industria del software ha elegido un marco de
trabajo estándar que se define bajo el contexto de las actividades de comunicación,
planeación, modelado, construcción y desarrollo.
Modelo en cascada
Pressman (2005), define que el modelo en cascada –también llamado el ciclo de vida
clásico– sugiere un enfoque sistemático y secuencial hacia el desarrollo de software que
indica ciertas etapas y actividades. El modelo en cascada es el paradigma más antiguo para
la ingeniería del software, sin embargo en décadas pasadas, las críticas al mismo han
ocasionado que incluso sus más fieles seguidores hayan puesto en duda su eficiencia,
Pressman (2005), pues para trabajar con un modelo en cascada, es necesario tener en
cuenta algunos aspectos que de alguna forma se constituyen en sus desventajas; a
continuación se enlistan:
El modelo propone un flujo de trabajo secuencial y pocas veces un proyecto se
ejecuta de esta forma, y aunque el modelo incluye interacciones, lo hace de forma
indirecta generando cambios que confunden mientras el proyecto sigue su ejecución.
En ocasiones es complicado establecer todos los requerimientos de forma explícita, y
la metodología exige que éstos sean definidos en las etapas iniciales, pues de lo
contrario, los costos de reproceso sería demasiado alto en términos económicos y de
tiempo.
El cliente debe ser paciente, pues los resultados no se evidencian rápidamente dado
que la ejecución de cada una de las etapas, generalmente toma demasiado tiempo, y
normalmente, lo clientes sienten bajo esta situación que están perdiendo tiempo y
dinero.
“En muchas situaciones los requisitos iniciales del software están bien definidos en forma
razonable, pero el enfoque global del esfuerzo de desarrollo excluye un proceso puramente
lineal. Además, quizá haya una necesidad imperiosa de proporcionar de manera rápida un
conjunto limitado de funcionalidades para el usuario y después refinarla y expandirla en las
entregas posteriores del software. En estos casos se elige un modelo de proceso diseñado
para producir el software en forma incremental” p. 51
A continuación se definen las principales características de algunos modelos incrementales:
Modelo incremental
El modelo incremental toma el modelo en cascada y lo aplica de forma iterativa. Básicamente
se aplican secuencias lineales de forma escalonada de acuerdo al avance del proyecto,
donde cada secuencia genera incrementos del software, Pressman (2005).
Además, Pressman (2005) planeta que el modelo incremental al igual que el modelo de
prototipos y otros enfoques evolutivos, es iterativo por naturaleza, sin embargo el modelo
incremental se enfoca en la entrega de un producto operacional en cada incremento que
eventualmente se convierten en versiones parciales del software, lo que no necesariamente
ocurre con el modelo de prototipos, pues cada una de sus entregas, no necesariamente es
una versión funcional del software.
Modelo DRA
El modelo de Desarrollo Rápido de Aplicaciones (DRA), resalta un ciclo de desarrollo corto,
siendo en sí mismo una adaptación a alta velocidad del modelo en cascada, donde se logra
un rápido desarrollo a través de la construcción de un software basado en componentes,
Pressman (2005).
Con base en lo anterior, y teniendo en cuenta lo descrito por Pressman (2005), se evidencia
que se deben establecer ciertas restricciones en términos del alcance del proyecto y
tomando como base los requerimientos, lo que es necesario para cumplir con los tiempos
establecidos por el modelo.
“Los modelos evolutivos son iterativos; los caracteriza la forma en que permiten que los
ingenieros de software desarrollen versiones cada vez más completas del software” p. 55
A continuación se definen las principales características de algunos modelos incrementales:
Modelo de prototipos
Un modelo de prototipos puede ofrecer mejores resultados si en dentro de la ejecución del
proyecto no se tiene claridad sobre las necesidades del cliente o seguridad sobre un
desarrollo realizado, pues éste modelo es empleado como proceso independiente que toma
la forma de una técnica susceptible de implementarse dentro del contexto o como
complemento de cualquier otro modelo, Pressman (2005).
Modelo en espiral
El modelo en espiral, es un modelo evolutivo que fusiona la naturaleza iterativa del modelo
de prototipos con los aspectos lineales, rígidos y de control del modelo en cascada,
entregando así bases para desarrollar rápidamente versiones incrementales del producto de
software, Pressman (2005).
Con este modelo es posible hacer entregas parciales al cliente de forma rápida, sin embargo
en cualquier momento se puede salir de control por su naturaleza por su naturaleza
evolutiva, donde además, la cantidad de riesgos que pueden aparecer por el mismo
fenómeno, es alta y se requiere de mucha experticia por parte del equipo de trabajo, para
controlar adecuadamente dichos riesgos en términos de su mitigación y sus planes de
acción.
Metodologías tradicionales
Son metodologías complejas y estructuradas, donde la documentación es parte fundamental
de sus procesos y la evaluación de cada una de sus fases permite ciertos cambios a nivel de
los objetivos conforme las necesidades así lo requieran, y por ende, el seguimiento basado
en planes de trabajo cobra relevancia.
Ahora bien, dado que normalmente son adoptadas para proyectos largos y grandes, la
aparición de los riesgos es inminente y por ello se hace una tarea compleja.
Normalmente las definiciones dadas para las metodologías tradicionales son provenientes de
estándares formales de desarrollo, que hacen de estas, elementos costosos por ejemplo al
momento de asumir un cambio en las definiciones del proyecto, pues no existe mucha
flexibilidad ante los cambios.
En síntesis, con las metodologías tradicionales existen muchos artefactos, grupos definidos
dentro del equipo de trabajo y por ende un número importante de roles, y un contrato definido
desde etapas tempranas del proyecto.
Metodologías ágiles
Son metodologías sencillas y rápidas en su ejecución, donde la documentación no tiene
mucha relevancia[7] y la entrega de resultados al cliente, es continua. Se pone mucha
atención a la excelencia técnica, donde los planes de trabajo pierden relevancia y por ende el
seguimiento también.
Teniendo en cuenta que normalmente son adoptadas para proyectos cortos y pequeños, la
aparición de los riesgos aunque inevitable, se puede mitigar relativamente fácil dado que se
da importancia a la simplicidad y a la eliminación del trabajo innecesario eliminando procesos
complejos.
Desde esta perspectiva, el cliente hace parte integral del equipo de trabajo, lo que le brinda
cierta flexibilidad en términos de la claridad que debe tener frente a sus necesidades, pues
en a medida que el proyecto avanza, y seguramente con la ayuda de los demás integrantes
del equipo de trabajo, puede ir dando claridad a sus dudas.
Es común que las definiciones dadas para estas metodologías estén basadas en aspectos
empíricos y heurísticas provenientes de la producción de artefactos tangibles, lo que las
convierte en elementos relativamente económicos y muy flexibles ante los cambios.
En síntesis, con las metodologías ágiles existen pocos artefactos, pequeños equipos de
trabajo y por ende un número reducido de roles, y un contrato no tradicional que permite
flexibilidad en términos de costos, tiempos y compromisos.
Metodologías híbridas
Son metodologías flexibles que combinan las mejores prácticas que exponen las
metodologías pertenecientes a las familias metodológicas descritas anteriormente, donde la
documentación tiene importancia de acuerdo a la complejidad del proyecto, así como la
entrega de resultados a los clientes, que además, está definida de acuerdo a las
necesidades que el mismo establezca. En consecuencia, los cronogramas y por ende el
seguimiento, se ajusta del mismo modo de acuerdo a las condiciones.
Los riesgos pueden ser controlados de acuerdo a la complejidad de los proyectos, y por ello
es posible mitigarlos con cierta facilidad, dado que son identificados oportunamente y
administrados de acuerdo al impacto y a las condiciones que el proyecto y el negocio
definan.
En este sentido, el cliente puede o no ser parte integral del equipo de trabajo y en caso de
serlo, puede tomar una participación total o parcial, de igual forma, dependiendo de las
necesidades que el proyecto mismo defina.
En consecuencia, las definiciones dadas para estas metodologías están basadas, no sólo por
aspectos teóricos y formales, sino también en la práctica y la experiencia, seguramente
empírica.
En síntesis, con las metodologías híbridas, la existencia de artefactos dependerá del
proyecto y las condiciones que defina el negocio, y del mismo modo, podrán ajustarse a un
número amplio o reducido de personas según sea la necesidad, dónde también el contrato y
el tipo de proyectos pueden variar.
Metodología en cascada
La metodología en cascada parte de los principios definidos para el modelo de desarrollo de
software en cascada, también conocido como ciclo de vida clásico o modelo convencional,
donde según Pressman (2005), dicho modelo sugiere un enfoque sistemático y secuencial
hacia el desarrollo de software que indica ciertas etapas y actividades.
En este sentido, el modelo mismo se ha constituido en una metodología que ordena
rigurosamente todas las etapas del ciclo de vida del software, implicando en sí misma un
desarrollo de proyecto rígido y lineal.
Esta es la metodología clásica dentro del contexto del desarrollo de software, que busca
producir un software robusto y estrictamente documentado en cada una de sus etapas,
donde a la finalización de cada una permite el inicio de la siguiente, tomando como parte del
insumo los datos producidos en la anterior.
Así, según Sommerville (2005), las etapas definidas para el modelo se transforman en
actividades fundamentales de desarrollo:
“RUP promotes iterative development and organizes the development of software and
systems into four phases, each consisting of one or more executable iterations of the
software at that stage of development.”
RUP es una metodología que busca la producción de software, cumpliendo con los requisitos
de los usuarios dentro de una planificación y presupuesto establecidos que contempla dentro
de sus procesos el uso del Unified Modeling Language (UML)[8].
RUP se ejecuta en dos dimensiones, vertical y horizontalmente, pues a medida que los flujos
de trabajo del proceso y de soporte se van ejecutando de forma vertical, también se van
ejecutando las respectivas fases de iniciación, elaboración, construcción y transición, de
forma horizontal, completando así cuando terminan las respectivas ejecuciones, ciclos que
generan entregables internos o externos[9], y a su vez dentro de cada una de las ejecuciones
de las respectivas fases, se generan iteraciones internas de acuerdo a las necesidades que
el equipo de trabajo pueda tener en un momento determinado.
Además, RUP involucra los siguientes modelos de desarrollo de software: Modelo en
cascada: A medida que las fases y los flujos de trabajo se ejecutan, claramente se evidencia
un comportamiento en cascada. Modelo en espiral: Dado que en cada una de las fases se
pueden ejecutar varias iteraciones, es posible ver allí un comportamiento en espiral. Modelo
de prototipos: Sabiendo que cada ciclo genera un entregable, bien podrían definirse algunos
de estos como módulos funcionales que evidencian un comportamiento en prototipos.
Metodología Scrum
Scrum (2011) define a Scrum como:
“Scrum, que se basa en la teoría del control empírico del procesos, emplea un enfoque
iterativo e incremental para optimizar la previsibilidad y controlar los riesgos. Existen tres
pilares que sostienen toda implementación del control empírico de procesos.”
Scrum es una metodología de desarrollo muy simple que requiere esfuerzo porque no se
basa en el seguimiento de un plan de trabajo, sino en la adaptación continua a las
circunstancias de la evolución del proyecto, por lo que su ejecución es simple, igual que lo
son sus componentes, los roles que la articulan y las actividades principales.
Vale la pena destacar que la simpleza que describe Scrum y la necesidad de adaptación
constante por parte del equipo de trabajo por la ausencia de un plan de trabajo, pueden
generar ciclos infinitos en su ejecución, ocasionando retrasos, donde dichos ciclos pueden
obedecer a diferentes esquemas de ejecución: secuencial, secuencial con solapamiento y
solapado, que seguramente se adoptarán partiendo de las necesidades y de la experticia del
equipo de trabajo.
“La programación extrema es exitosa porque enfatiza la satisfacción del cliente. En lugar de
entregar todo lo que pueda desear en una fecha lejana en el futuro, este proceso le brinda el
software que necesita según lo necesite.
La programación extrema permite a sus desarrolladores responder con confianza a los
requisitos cambiantes de los clientes, incluso al final del ciclo de vida.