Para
muchas personas los software son solo programas de computadora, sin embargo,
nos comenta que son todos aquellos documentos asociados a la configuración de
datos que se necesitan para hacer que estos programas operen de manera
adecuada. Estos productos de software se desarrollan para algún cliente en
particular o para un mercado en general. Para el diseño y desarrollo de
proyectos de software se aplican metodologías, modelos y técnicas que permiten
resolver los problemas. En los años 50 no existían metodologías de desarrollo, el
desarrollo estaba a cargo de los propios programadores. De ahí la importancia
de contar con analistas y diseñadores que permitieran un análisis adecuado de
las necesidades que se deberían de implementar. (Sommerville,
2005)
Aun así los resultados eran impredecibles, no se sabía la fecha exacta en que
concluiría un proyecto de software, no había forma de controlar las actividades
que se estaban desarrollando. Tampoco se contaba con documentación
estandarizada. El nacimiento de técnicas estructuradas es lo que da origen al
desarrollo de aplicaciones a través de métodos de ingeniería. La informática
aporta herramientas y procedimientos que se apoyan en la ingeniería de software
con el fin de mejorar la calidad de los productos de software, aumentar la
productividad y trabajo de los ingenieros desarrolladores de software,
facilitar el control del proceso de desarrollo de software y suministrar a los
desarrolladores las bases para construir software de alta calidad en una forma
eficiente. (Gacitúa, 2003).
Actualmente
los negocios operan en un entorno global que cambia rápidamente. Tienen que
responder a nuevas oportunidades y mercados, condiciones económicas cambiantes
y la aparición de productos y servicios competidores. El software es parte de
casi todas las operaciones de negocio, por lo que es fundamental que el
software nuevo se desarrolle rápidamente para aprovechar nuevas oportunidades y
responder a la presión competitiva. Actualmente el desarrollo y entrega de
manera rápida son los requerimientos más críticos de los sistemas. De hecho,
muchas organizaciones están dispuestas a obtener una pérdida en la calidad del
software y en el compromiso sobre los requerimientos en favor de una entrega
rápida del software.
Los
métodos ágiles no se deben de utilizar para el desarrollo de sistemas críticos
en los que es necesario generar un análisis detallado de todos los
requerimientos del sistema para así comprender mejor sus implicaciones de
seguridad o de protección. El crecimiento de los métodos ágiles y su
penetración ocurre a un ritmo pocas veces visto en la industria: en tres o
cuatro años, según el Cutter Consortium, el 50% de las empresas define como
“ágiles” más de la mitad de los métodos empleados en sus proyectos (Charette,
2004).
Algunas de las metodologías agiles más usadas en la actualidad se describen a
continuación.
La
programación extrema XP es posiblemente el método ágil más conocido y
ampliamente utilizado. El nombre de XP fue acuñado por (Beck, 2000),
debido a que el enfoque fue desarrollado utilizando las mejores prácticas del
desarrollo iterativo y con la participación extrema del cliente. La
programación extrema (XP), que algunos consideran una innovación extraordinaria
y otros creen cínica (Rakitin, 2001). En la metodología extrema, todos los
requerimientos se expresan como escenarios (llamados historias de usuario), los
cuales se implementan directamente como una serie de tareas. Los programadores
trabajan en parejas y desarrollan pruebas para cada tarea antes de escribir el
código. Todas las pruebas se deben ejecutar satisfactoriamente cuando el código
nuevo se integra al sistema. Existe un pequeño espacio de tiempo entre las
entregas del sistema.
El
desarrollo incremental se lleva a través de entregas pequeñas y frecuentes del
sistema y por medio de un enfoque que sirve para la descripción de
requerimientos basado en las historias los clientes o escenarios que pueden ser
la base para el proceso de planificación.
La
participación del cliente se lleva a cabo a través del compromiso y del tiempo
completo del cliente en el equipo de desarrollo. Los colaboradores directos de
los clientes participan en el desarrollo y son los responsables de definir las
pruebas necesarias que servirán para la aceptación del sistema. El interés de
las personas, en vez de los procesos, se lleva a través de la programación en
parejas, la propiedad colectiva del código y un proceso de desarrollo
sostenible que no implique excesivas jornadas de trabajo. El cambio se lleva a
cabo a través de las entregas regulares del sistema, un desarrollo previamente
probado y la integración continua. El mantenimiento se lleva a cabo a través de
una recta actualización constante para mejorar la calidad del código y la
utilización de diseños sencillos que no prevén cambios futuros en el sistema.
En
XP, los clientes están implicados en la especificación y establecimiento de
prioridades de los requerimientos del sistema. Dichos requerimientos no se
especifica como una lista de funciones requeridas en el sistema. Más bien, los
clientes del sistema son parte fundamental del equipo de desarrollo esto
permite que discutan escenarios con todos los miembros del equipo. Desarrollar
conjuntamente tarjetas de historia (story card) que recogen las necesidades del
cliente. Por ende el equipo de desarrollo intentará implementar esos escenarios
en una entrega futura del software. Un punto fundamental en la ingeniería del
soporte tradicional es que se debe de diseñar para futuros. Esto es que se
deben de prever los cambios futuros y diseñar éste de forma que tales cambios
se puedan implementar fácilmente.
A
pesar de que la metodología XP recibe la mayor atención bibliográfica, las
organizaciones están enfocando su atención en la metodología ágil denominada
SCRUM (Schwaber & Shuterland, 2011) (Shuterland, 2012), la cual aplica las
mismas premisas conceptuales que XP pero para resolver un problema ligeramente
distinto como es el de desarrollo evolutivo de aplicaciones. SCRUM es una
metodología ágil y flexible que sirve para gestionar el desarrollo de software,
cuyo principal objetivo es maximizar el retorno de la inversión para su
empresa. Se basa principalmente en construir la funcionalidad de mayor valor
para el cliente y en los principios de inspección continua, adaptación,
auto-gestión e innovación.
Con
SCRUM el cliente es pieza fundamental en el desarrollo de software, se
entusiasma y se compromete con el proyecto dado que lo ve crecer iteración a
iteración. Asimismo le permite en cualquier momento realinear el software con
los objetivos de negocio de su empresa, ya que puede introducir cambios
funcionales o de prioridad en el inicio de cada nueva iteración. Esta forma de
trabajo promueve la innovación, motivación y el compromiso del equipo que forma
parte del proyecto, por lo que los profesionales encuentran un ámbito propicio
para desarrollar sus capacidades. SCRUM genera algunas ventajas a diferencia de
otras metodologías agiles entre ellas:
• Cumplimento de expectativas: El cliente establece sus expectativas indicando
el valor que aporta a cada requisito / historia del proyecto, el equipo los
estima y con esta información el propietario del producto establece su
prioridad.
•
Flexibilidad a cambios: Genera una alta capacidad de reacción ante los cambios
de requerimientos generados por necesidades del cliente o evoluciones del
mercado. La metodología está diseñada para adaptarse a los cambios de requerimientos
que conllevan los proyectos complejos.
•
Reducción del tiempo: El cliente puede empezar a utilizar las funcionalidades
más importantes del proyecto antes de que esté finalizado por completo.
•
Mayor calidad del software: La forma de trabajo y la necesidad de obtener una
versión funcional después de cada iteración, ayuda a la obtención de un
software de calidad superior.
• Mayor productividad: Se consigue entre otras razones, gracias a la
eliminación de la burocracia y a la motivación del equipo que proporciona el
hecho de que sean autónomos para organizarse.
•
Maximiza el retorno de la inversión (ROI): Producción de software únicamente
con las prestaciones que aportan mayor valor de negocio gracias a la
priorización por retorno de inversión.
•
Predicciones de tiempos: Mediante esta metodología se conoce la velocidad media
del equipo por sprint (los llamados puntos historia), con lo que
consecuentemente, es posible estimar fácilmente para cuando se dispondrá de una
determinada funcionalidad que todavía está retrasada.
•
Reducción de riesgos: El hecho de llevar a cabo las funcionalidades de más
valor en primer lugar y de conocer la velocidad con que el equipo avanza en el
proyecto, permite despejar riesgos eficazmente de manera anticipada.
Este es el proceso por que el cual se debe pasar al tomar la metodologia de scrum:
El
desarrollo adaptativo software (DAS) lo propuso Jim Highsmith en 1998 como una
técnica para construir software y sistemas complejos. Los apoyos filosóficos
del DAS se enfocan en la colaboración humana y la organización propia del
equipo. Un enfoque de desarrollo ágil y adaptativo basado en la colaboración es
" una fuente de orden en las complejas interacciones entre disciplina e
ingeniería". El define el ciclo de vida del DAS, como se muestra en la
figura 2.29 el cual incorpora tres fases principales:
1) Especulación; en esta fase se inicia el
proyecto y se conduce el ciclo adaptativo de planeación. Este último utiliza
información de inicio del proyecto, es decir, el enunciado de la misión del
cliente, restricciones del proyecto y los requisitos básicos. Esto permite
definir el conjunto de ciclos de lanzamiento que se requerirán para el
proyecto.
2) Colaboración; la gente motivada trabaja
de una forma que multiplica su talento y sus salidas creativas más allá de sus
números absolutos. Este enfoque de colaboración es un tema recurrente en todos
los métodos ágiles, pero la cooperación no es fácil. No solamente es la
comunicación, o que la comunicación es parte de ella. No sólo es un asunto de
trabajo en equipo, aunque un equipo cuajado es esencial para la presencia de la
colaboración real. No es un rechazo al individualismo ya que la creatividad
individual representa un papel importante en el pensamiento de colaboración.
Esto es, por encima de todo, una cuestión de confianza. Las personas que
trabajan juntas deben confiar entre sí para:
a)
Criticar de forma constructiva
b)
Ayudar sin resentimientos
c)
Trabajar más duro de lo que ya lo hace
d)
Tener el conjunto de actitudes para contribuir al trabajo curso
e)
Comunicar los problemas o preocupaciones en una forma que conduzca a la acción
efectiva
Hay
una serie de metodologías que solemos llamar tradicionales, propuestas casi
todas ellas con anterioridad a los años 90 del siglo XX, y que pretendían
ayudar a los profesionales indicando pautas para realizar y documentar cada una
de las tareas del desarrollo del software. Sin embargo, tienen casi todas ellas
un gran lastre: asumen que un proyecto informático es casi una extensión de un
proyecto burocrático tradicional. Así pues, los pasos que sugieren para llevar
a cabo cada tarea, aunque bienintencionados, están cargados de burocracia,
reiteraciones, ambigüedades... No suelen tener en cuenta cosas como la calidad,
la satisfacción, la competitividad, los beneficios. Fueron metodologías creadas
en los años 70-80 pensando en los negocios de los años 50.
Es
otra metodología de diseño y desarrollo de software y sistemas, diseñada por M.
A. Jackson y J. R. Cameron. Publicada por primera vez en 1983. Algunos
consideran que es una de las primeras metodologías de desarrollo de software
orientado a objetos. Se considera una tecnología madura.
Originalmente
su nombre era “Orientado a objeto” en la que se identificaban objetos como parte
de un método, en un tiempo en el que los métodos se basaban en descomposición
funcional o en el análisis estático de datos. Jackson divide en dos etapas el
desarrollo de sistemas:
– Especificación (incluye análisis y diseño)
– Implementación
Los
modelos de JSD consideran al mundo real y que el propósito de un sistema es el
de proporcionar una funcionalidad. Jackson sostiene que es necesario considerar
primeramente la forma en que esa funcionalidad del sistema encaja en el mundo
real.
En
el enfoque JSD se describe al mundo real en “entidades”, “acciones” y
“secuencias de acciones” creando un modelo dinámico de datos. En donde las
entidades se denotan como sustantivos (ejemplo: botón, elevador) y las acciones
se denotan como verbos (ejemplo: pulsar, llega, sale).
1. Paso de acciones de entidades: definición
de listado de entidades y acciones del mundo real.
2. Paso de estructuras de entidades: se
ordenan las acciones de las entidades.
3. Paso de modelo inicial: muestra la manera
en la que el mundo real se conecta con el mundo abstracto. Se admiten los
vectores de estado.
4. Paso de función: indica las salidas de las
acciones.
5. Paso de temporización del sistema: conjunto
de notas informales acerca de las restricciones de rendimiento.
6. Paso de implementación: asigna procesadores
a los procesos.
Con esta tabla comparativa de las metodologías ágiles y tradicionales podrás darte cuenta y saber en que momento poder aplicarla en algún proyecto.