METODOLOGIAS TRADICIONALES DEL DESARROLLO DE SOFTWARE INTRODUCCION Teniendo en cuenta la filosofía de desarrollo de las metodologías, aquellas con mayor énfasis en la planificación y control del proyecto, en especificación precisa de requisitos y modelado, reciben el apelativo de Metodologías Tradicionales o Pesadas Estas metodologías tradicionales imponen una disciplina de trabajo sobre el proceso de desarrollo del software, con el fin de conseguir un software más eficiente. Para ello, se hace énfasis en la planificación total de todo el trabajo a realizar y una vez que está todo detallado, comienza el ciclo de desarrollo del producto software. Se centran especialmente en el control del proceso, mediante una rigurosa definición de roles, actividades, artefactos, herramientas y notaciones para el modelado y documentación detallada. Además, las metodologías tradicionales no se adaptan adecuadamente a los cambios, por lo que no son métodos adecuados cuando se trabaja en un entorno, donde los requisitos no pueden predecirse o bien pueden variar. Para el desarrollo de cualquier producto de software se desarrollan una serie de tareas entre la idea inicial y el producto final. Un modelo de desarrollo establece el orden en el que se harán las cosas en el proyecto, nos provee de requisitos de entrada y salida para cada una de las actividades. Al modelo o proceso de desarrollo de software se le conoce como ciclo de vida del software, porque describe la vida de un producto de software desde su concepción hasta su implantación, entrega, utilización y mantenimiento. Un modelo es una representación abstracta de un proceso. ¿Qué es un proceso del software? Cuando se trabaja para construir un producto o un sistema, es importante seguir una serie de pasos predecibles – un mapa de carreteras que ayude a obtener el resultado oportuno de calidad -. El mapa de carreteras a seguir es llamado proceso del software o modelo de desarrollo. ¿Quién lo hace? Los ingenieros de software y sus gestores, es decir, los analistas de sistemas, los programadores, adaptan el proceso a sus necesidades y entonces lo siguen. Además, las personas que han solicitado el software tienen un papel a desempeñar en el proceso del software. ¿Por qué es importante? Porque proporciona estabilidad, control y organización a una actividad que puede, si no se controla, volverse caótica. ¿Cuáles son los pasos? A un nivel detallado, el proceso que adoptemos depende del software que estamos construyendo. Un proceso puede ser apropiado para crear software de un Sistema de aviación, mientras que un proceso diferente por completo puede ser adecuado para la creación de un sitio web. ¿Cuál es el producto obtenido? Los productos obtenidos son programas, documentos y datos que se producen como consecuencia de las actividades de ingeniería del software definidas por el proceso o modelo de desarrollo. Pero sin dudas adaptarse a la agitada sociedad actual implica ser “ágil”, es decir, tener la capacidad de proveer respuestas rápidas y ser adaptables al cambio. Ambas cualidades siempre han sido deseables, pero en el entorno de negocio actual resultan indispensables. Este requerimiento de agilidad en las empresas, gobiernos y cualquier otra organización provoca que el software también deba ser desarrollado de manera ágil. Las necesidades de un cliente pueden sufrir cambios importantes del momento de contratación de un software al momento de su entrega; y es mucho más importante satisfacer estas últimas que las primeras. Esto requiere procesos de software diferentes que en lugar de rechazar los cambios sean capaces de incorporarlos. Los procesos ágiles son una buena elección cuando se trabaja con requisitos desconocidos o variables. Si no existen requisitos estables, no existe una gran posibilidad de tener un diseño estable y de seguir un proceso totalmente planificado, que no vaya a variar ni en tiempo ni en dinero. En estas situaciones, un proceso adaptativo será mucho más efectivo que un proceso predictivo. Por otra parte, los procesos de desarrollo adaptativos también facilitan la generación rápida de prototipos y de versiones previos a la entrega final, lo cual agradará al cliente. NECESIDAD DE UNA METODOLOGIA Cuando surgió la necesidad de adaptar los sistemas informáticos a las exigencias del mercado, el programador realizaba un relevamiento de las solicitudes de quien necesitaba cierto programa o producto software, y con aquellos requerimientos bajo el brazo comenzaba la dura tarea de codificar. Esta tarea no estaba administrada, supervisada o gestionada de ningún modo, por lo que se iba corrigiendo a medida que surgían los errores, tanto los lógicos provenientes de la codificación, como los de requerimientos solicitados por el cliente o usuario final. En la década de 1970 los programas fueron creciendo en complejidad, por lo que la antigua técnica de “Code and Fix” (codificar y corregir) terminó quedando obsoleta. Esta técnica se basaba en requerimientos ambiguos y sin especificaciones puntuales. Al no seguir normas para el proyecto, el cliente o usuario sólo impartían especificaciones muy generales del producto final. Se programaba, se corregía y se volvía a programar sobre la misma marcha del proyecto. El ciclo de vida de éste tipo de proyectos finalizaba cuando se satisfacían las especificaciones, no sólo las primeras por las cuales nació la necesidad del programa, sino también todas aquellas que fueron surgiendo sobre la marcha. Esta técnica tiene ventajas de no gastar recursos en análisis, planificación, gestión de recursos, documentación, etc., también es muy cómoda y muchas veces recomendable cuando el proyecto es muy pequeño y es llevado adelante por uno o dos programadores. Por otro lado, cuando el sistema no es pequeño o es más complejo (y tengamos en cuenta que no hubo análisis) nos trae desventajas en lo que se refiere a costo de recursos, que siempre será mayor del previsto; aumentará el tiempo de desarrollo y la calidad del código será bastante dudosa. DEFINICION DE METODOLOGIA La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto para llevarlo a cabo con altas posibilidades de éxito. Esta sistematización nos indica cómo dividiremos un gran proyecto en módulos más pequeños llamados etapas y las acciones que correspondan en cada una de ellas, nos ayuda a definir entradas y salidas para cada una de las etapas y, sobre todo, normaliza el modo en que se administrará el proyecto. Una metodología para el desarrollo del software son los procesos a seguir sistemáticamente para idear, implementar y mantener un producto software desde que surge la necesidad del producto hasta que se cumple con el objetivo por el cual fue creado. 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. VENTAJAS DEL USO DE UNA METODOLOGIA Son muchas las ventajas que puede aportar el uso de una metodología de desarrollo de software, desde distintos puntos de vista éstas son: a) Desde el punto de vista de gestión: Facilitar la tarea de planificación. Facilitar la tarea del control y seguimiento de un proyecto. Mejorar la relación coste/beneficio. Optimizar el uso de recursos disponibles. Facilitar la evaluación de resultados y cumplimiento de los objetivos. Facilitar la comunicación efectiva entre usuarios y desarrolladores. b) Desde el punto de vista de los ingenieros del software: Ayudar a la comprensión del problema. Optimizar el conjunto y cada una de las fases del proceso de desarrollo. Facilitar el mantenimiento del producto final. Permitir la reutilización de partes del producto. c) Desde el punto de vista del cliente o usuario: Garantía de un determinado nivel de calidad en el producto final. Confianza en los plazos de tiempo fijados en la definición del proyecto. Definir el ciclo de vida que más se adecue a las condiciones y características del desarrollo. FASES O ETAPAS COMUNES EN EL CICLO DE VIDA DEL DESARROLLO DEL SOFTWARE El ciclo de vida del desarrollo Software, es una secuencia estructurada y bien definida de las etapas en Ingeniería de software para desarrollar el producto software deseado. Aporta una serie de pasos a seguir con la finalidad de diseñar y desarrollar un producto software de manera eficiente. 1. Comunicación Este es el primer paso donde el usuario inicia la petición de un producto software determinado. Contacta al proveedor de servicios e intenta negociar las condiciones. Presenta su solicitud al proveedor de servicios aportando la organización por escrito. 2. Recolección de solicitudes A partir de éste paso y en adelante el equipo de desarrollo software trabaja para llevar adelante el proyecto. El equipo se reúne con varios depositarios de dominio del problema, e intentan conseguir la máxima cantidad de información posible sobre lo que requieren. Los requisitos se contemplan y agrupan en requisitos del usuario, requisitos funcionales y requisitos del sistema. La recolección de todos los requisitos se lleva a cabo como se especifica a continuación: 3. Estudiando el software y el sistema actual o obsoleto Entrevistando a usuarios y a desarrolladores de Software Consultando la base de datos o Recogiendo respuestas a través de cuestionarios. Estudio de viabilidad Después de la recolección de requisitos, el equipo idea un plan para procesar el software. En esta fase, el equipo analiza si el software puede hacerse para cubrir todos los requisitos del usuario y si hay alguna posibilidad de que el software ya no sea necesario. Se investiga si el proyecto es viable a nivel financiero, práctico, y a nivel tecnológico para que la organización acepte la oferta. Hay varios algoritmos disponibles, los cuales ayudan a los desarrolladores a concluir si el proyecto software es factible o no. 4. Análisis del sistema En éste paso los desarrolladores trazan su plan e intentan crear el mejor y más conveniente modelo de software para el proyecto. El análisis del sistema incluye el entendimiento de las limitaciones del producto Software; el aprendizaje de los problemas relacionados con el sistema; los cambios que se requieren en sistemas ya existentes con antelación, identificando y dirigiendo el impacto del proyecto a la organización y al personal, etc. El equipo del proyecto analiza las posibilidades del proyecto y planifica la temporalización y los recursos correspondientes. 5. Diseño de Software El siguiente paso es diseñar el producto software con la ayuda de toda la información recogida sobre requisitos y análisis. Los inputs (aportaciones) de los usuarios y los resultados de la recogida de información hecha en la fase anterior serán las aportaciones base de la fase actual. El output (o resultado) de esta etapa toma la forma de 2 diseños; El diseño lógico y el diseño físico. Los ingenieros crean meta-data (Metadatos), base de datos, Diagramas dialógicos, diagramas de flujo de datos, y en algunos casos pseudocódigos. 6. Codificación Esta fase también se puede denominar 'fase de programación'. La implementación del diseño de software empieza con el lenguaje de programación más conveniente, y desarrollando programas ejecutables y sin errores de manera eficiente. 7. Pruebas Se estima que el 50% de todos los procesos de desarrollo de software deberían ser evaluados. Los errores pueden arruinar el software tanto a nivel crítico y hasta el punto de ser eliminado. Las pruebas de Software se hacen mientras se codifica y suelen hacerlo los desarrolladores y otros expertos evaluadores a varios niveles. Esto incluye evaluación de módulos, evaluación del programa, evaluación del producto, evaluación interna y finalmente evaluación con el consumidor final. Encontrar errores y su remedio a tiempo es la llave para conseguir un software fiable. 8. Integración El Software puede necesitar estar integrado con las bibliotecas, Bases de datos o con otro u otros programas. Esta fase se focaliza en la integración del software con las entidades del mundo exterior. 9. Implantación Aquí se instala el software en máquinas de clientes. A veces, el software necesita instalar configuraciones para el consumidor final con posterioridad. El Software se evalúa por su adaptabilidad y su portabilidad, en cuanto a las cuestiones relacionadas con la integración y conceptos asociados, se resuelven durante la implementación. 10. Mantenimiento y Funcionamiento Esta fase confirma el funcionamiento del software en términos de más eficiencia y menos errores. Si se requiere, los usuarios se forman, o se les presta documentación sobre como operar y como mantenerlo en funcionamiento. El software se mantiene de forma temprana actualizando el código en acorde a los cambios que tienen lugar en entornos del usuario o tecnológicos. Esta fase puede que tenga que encarar retos originados por virus ocultos o problemas no identificados del mundo real. 11. Disposición Con el paso del tiempo, puede que el software falle en su ejecución. Puede que se vuelva totalmente obsoleto o que necesite actualizaciones. De ahí surge una necesidad urgente de eliminar una parte importante del sistema. Esta fase incluye archivar datos y componentes software requerido, cierre del sistema, planificación de la actividad de disposición y terminación de sistema en el momento final del sistema. METODOLOGIAS DE DESARROLLO DE SOFTWARE Para resolver los problemas reales de una industria, un ingeniero del software y su equipo deben incorporar una estrategia de desarrollo que acompañe al proceso, métodos y herramientas. Esta estrategia a menudo se llama modelo de proceso o metodología de desarrollo o paradigma de ingeniería del software. Se selecciona un modelo de proceso para la ingeniería del software según la naturaleza del proyecto y de la aplicación, los métodos y las herramientas a utilizarse, y los controles y entregas que se requieren.