FACULTAD DE INGENIERIA ESCUELA DE INGENIERA BIOMDICA
(1er. Semestre 2014)
1 1.1. PROCESO DE DESARROLLO DE SOFTWARE.
1.1.1. EL CONCEPTO DEL SOFTWARE.
Software, un trmino plenamente incorporado al vocabulario de muchas personas, cuyo significado literal enfatiza su caracterstica blanda o intangible, en comparacin con el hardware (o incluso con el peopleware: los recursos humanos). La mayora entiende que software significa un conjunto de programas computacionales que cumplen con una determinada funcin [Press-1993A]. Y algunos tienen claro que existen diferentes clases de software; y que hoy en da, el hacer software es una actividad econmica del hombre, como muchas; tiene costos y beneficios, tanto en el orden financiero como en el social.
Y todo el mundo realiza software persiguiendo distintos objetivos. Se hace software porque hay demanda del mismo. Por ejemplo, se construye software para que las empresas y organizaciones ganen en eficiencia y eficacia administrativa. Se hace software para que los procesos industriales se automaticen, reemplazando as a otros sistemas de trabajo; y en general, a la resolucin de problemas donde la cantidad de variables supera nuestra capacidad, o ante la imposibilidad de realizar las tareas de otra forma que no sea bajo el control de un computador. Se construye software para que la ciencia y la tcnica progresen (con las simulaciones y los clculos numricos). Tambin se hace software para que el hardware existente sea accesible a los usuarios: por ejemplo, sistemas operativos que faciliten el compartir recursos, compiladores e intrpretes que faciliten escribir programas ejecutables, herramientas de cuarta generacin, administradores de bases de datos que faciliten el acceso y el procesamiento de los datos almacenados, aplicaciones en electro- medicina, sistemas computacionales que faciliten la documentacin, mejores y ms amigables interfaces grficas, y aplicaciones multimedia; y actualmente procesadores de texto que se activan por voz humana.
Ahora bien, para cualquier persona que haya intentado hacer un sistema de varios programas de regular tamao, es claro que hacer software no es trivial. Frente a la pregunta qu significa hacer software?, muchas veces se piensa en hacer software como en el hacer programas, y entonces suena rimbombante hablar de una ingeniera de software.
2 Se habla de hacer software como en el hacer uno o ms programas, y se piensa en un crecimiento lineal de la complejidad: si en hacer un programa tardo A, en hacer n programas tardar n por A . Pero este pensamiento esconde dos falacias, que muchos gerentes o ejecutivos deben reconocer: La primera, es que hacer software es hacer programas. Algunos autores especializados [Boria-1988] sealan que un sistema de software es diferente de un programa-producto en el cual se deben cumplir requisitos de interfaz hombre-mquina, mantenibilidad, documentacin y seguridad entre otros. La segunda, un sistema no es un simple agregado de programas, y su complejidad crece ms que linealmente con la cantidad de programas que contiene. Encarada como una actividad industrial, la confeccin de software requiere de un enfoque disciplinado, al cual se le denomina ingeniera de software [Sommer-1991] [Press-1993A].
Se desea insistir en que el concepto de software es mucho ms que programas; para los profesionales informticos y de ingeniera, es informacin que existe en dos componentes bsicos, pero importantes: a) Los componentes ejecutables, que corresponden a los programas escritos en algn lenguaje de programacin formal (como Cobol, C, Visual-Basic, PHP, JAVA), y el cdigo de mquina ejecutable que se obtiene de la compilacin o interpretacin de estos lenguajes; incluso, en los casos de productos de 4GL generadores de cdigos. b) Los componentes no-ejecutables, que se refieren principalmente a la documentacin existente para acompaar a los programas, que deberan incluir (por ejemplo): una especificacin de los requerimientos, una representacin del diseo (con la estructura de los datos y de los mdulos), y un buen manual del usuario.
Existe un problema fundamental que va ms all de la estrategia que un profesional decida implementar para asegurar una buena relacin con el personal de usuarios que le rodea. Se trata de un aspecto netamente cultural asociado al proceso de compra de software; en efecto, tanto disponer de software regalado como argumento de venta para los equipos (o simplemente copiado en forma ilegal), ha llevado a que el usuario tpico no considere el costo del software, o a lo ms implique un costo marginal del total de su adquisicin. La pregunta del milln: cunto vale el software? [Bartle-1991] .
3 El software se desarrolla, no se fabrica en un sentido clsico; el software no se estropea [Press-1993A] [Press-1993B] . El desafo para todos los profesionales informticos y desarrolladores de software, queda planteado entonces en trminos educacionales; se tiene que convencer a los usuarios-clientes de que hacer software no es barato ni fcil. Adems, la industria del software es nica por el hecho que su producto es intangible. El cliente no puede ver o tocar un programa. A lo ms, l puede ser testigo de las acciones que ejecuta y produce el sistema de software en el computador. Debido al creciente tamao y complejidad del software en la actualidad, la verificacin de su calidad se ha hecho muy difcil.
Muchos especialistas incluso planteaban una crisis del software. Es necesario explicar un poco sobre esta crisis o afliccin crnica. [Boria-1988] [Press-1993A]. Esta crisis es un estado permanente de insatisfaccin, tanto en usuarios como profesionales, que preocupa por igual a los sectores industriales y a los acadmicos. Permanentemente, los gerentes de Informtica debaten los problemas del control de los proyectos de software (cmo dejar de superar siempre los presupuestos y plazos de entrega de los sistemas). O bien, siempre esperan un producto de "ltima generacin" que les permita controlar mejor sus proyectos y concretarlos con xito. En los ltimos aos, con la incorporacin de los PC's, se ha producido una masificacin de su uso y la liberacin del usuario. El nuevo marco de colaboracin entre los usuarios y las reas de Informtica no est resultando ideal en todos los casos. Suelen presentarse quejas entre los ejecutivos informticos en cuanto a que el mayor conocimiento que los usuarios tienen respecto a los requisitos y recursos de la informtica centralizada, no siempre se ve acompaado al mismo ritmo con los conocimientos que existen respecto a procedimientos y aplicaciones a nivel de PCs. El apetito insaciable de los usuarios por ms novedosos y mejores equipos y aplicaciones en algunos casos puede afectar al personal de informtica, cuyo trabajo consiste en soportar la compatibilidad e interconectividad. La mayora de las veces, la prdida del control de un proyecto es principalmente un problema de administracin. Es la combinacin de una cuidadosa planificacin y un "know- how" sobre el diseo (- no slo la fuerza tcnica -) lo que conduce a un resultado exitoso. Las organizaciones desarrolladoras de software, debido a esta crisis , no realizan una administracin adecuada del proyecto, saltndose etapas para tratar de cumplir con los plazos estipulados. Se debe reconocer que la administracin de proyectos de software resulta diferente de otras administraciones de proyectos, por varias razones [Antima-1997] .
4
Se debe entender el proceso de software, como un proceso que puede ser controlado, medido y modificado. Cuando el Director General de una empresa le solicita al Jefe Informtico, que cuantifique los beneficios sobre la inversin en tecnologas de informacin (software especfico), no basta simplemente describir los cambios en la productividad del personal de sistemas y los niveles de servicio; lo que realmente desea ver, es el beneficio expresado en trminos de mejoras a la actividad (negocio) de la empresa.
Sin duda alguna la Informtica es un ingrediente y parte fundamental en todo tipo de organizaciones. Las empresas lderes del mundo reconocen en ella a uno de los factores crticos de xito [Guerre-1994] . Por ende, su definicin y aplicacin deben ser apropiadas para entender las continuas demandas de mejoras que formulen sus usuarios. Uno de sus pilares bsicos son los sistemas de informacin, en particular aquellos relacionados con las actividades del negocio de cada organizacin. Sin embargo, las opiniones respecto de sus bondades estn divididas o difieren, dependiendo de quin emita los comentarios.
Los ingenieros informticos o personal de sistemas, por lo general manifiestan preocupacin por aspectos relacionados con el uso de recursos y otros parmetros de eficiencia tcnica. As mismo, auditores, contralores o personal administrativo, indicarn problemas de control interno y/o debilidades por falta de integridad de los datos o por errores de clculo u otros problemas similares. Los usuarios, dependiendo de su nivel jerrquico, tendrn sus propios puntos de vista y sus "dardos", eventualmente, estarn dirigidos: (1) a la cantidad de trabajo que les demanden mantenerlos en produccin (obtener/generar los datos, alimentar el sistema, controlar su funcionamiento, retroalimentar para corregir, usar las salidas para generar informacin que no entregan en forma automtica, etc.); (2) a que no apoyan el proceso de posicionamiento de la empresa en el mercado; y (3), a otros factores importantes para ellos (como que se les "cae" eventualmente el sistema). Los clientes, por su parte, mencionarn, entre otros, problemas como mantener 24 horas de funcionamiento, y los 365 das del ao. Finalmente, y desde el punto de vista de la Gerencia, nunca un sistema de software est completamente terminado: siempre hay "detalles que solucionar", lo que motiva que los plazos se extiendan, y que los costos asociados aumenten.
5
Existen estadsticas a nivel mundial que muestran que cerca del 75 % de los recursos informticos se destinan a realizar mantenciones de los sistemas en explotacin, y cerca del 80 % de ese esfuerzo est destinado a la correccin de problemas y fallas que pudieron haber sido previstos, mediante el uso de tcnicas adecuadas [Guerre-1994] . El prestigioso Instituto de Ingeniera de Software de la Universidad de Carnegie Mellon (en EE.UU.), ha evaluado la calidad del proceso de desarrollo de software de ms de 250 empresas de dicho pas, encontrando que el 80 % de ellas se encuentran en el estado ms primario de su evolucin, lo cual se caracteriza por producir ms problemas que soluciones. Una valiosa investigacin realizada a nivel nacional [Antima-1997], respecto al grado de madurez existente en los procesos de documentacin y calidad del software en la industria chilena, arroj que el 86 % se encontraba en el nivel mnimo, y que el 14 % slo se ubicada en el nivel siguiente. Quin tiene la razn? Como puede suponerse, las inquietudes tienen su base, fundamento o motivo. Por ende, es necesario atenderlas desde los inicios de los proyectos; idealmente durante la gnesis de los sistemas. Es decir, durante su diseo y desarrollo, y de esta forma reducir los riesgos y costos de mantenimiento, asegurar los retornos esperados y prever un nivel de servicio o satisfaccin apropiado para cada uno de los grupos de opinin o en conflicto de intereses.
Dados los incalculables miles de millones de dlares que los pases industrializados han invertido en la tecnologa informtica durante la ltima dcada, se han obtenido los beneficios que se esperaban?, los productores de software han llegado realmente a ser ms productivos?. Por ejemplo: durante los aos 80, los negocios realizados en Estados Unidos invirtieron una cifra de US$ trilln en tecnologa informtica [Keyes-1995]. Slo en 1988, las compaas norteamericanas invirtieron unos US$ 51 billones en hardware, unos US$ 20 billones en software comprado, y ms de US$ 44 billones en servicios computacionales. El desafo de la calidad es necesariamente inseparable del de la productividad, si una empresa va a hacer sistemas de software correctos, exactos y confiables. Para los profesionales y los acadmicos, esta crisis slo admite un desafo y respuesta: nuevas y mejores tecnologas y metodologas de produccin de software dentro de las organizaciones. Hay tres caminos posibles para enfrentar el problema: incrementar la productividad individual; mejorar la organizacin del equipo y el control del proyecto; y comprar el software hecho. En este ltimo caso, las tcnicas y mtodos son la responsabilidad del proveedor; l slo tiene dos de los tres caminos.
6
1.1.2. PROCESOS DE SOFTWARE.
Administrando Proyectos de Software.
La mayora de los gerentes de proyectos de software probablemente concuerden en que la entrega a tiempo y al costo adecuado de productos de alta calidad a los clientes, es el objetivo ms importante en la administracin de un proyecto de produccin de software. La industria de software est tapada con una gran cantidad de proyectos que no pudieron cumplir con los criterios de tiempo, costo y/o calidad. Otros gerentes tambin le pueden agregar objetivos adicionales: satisfaccin de los trabajadores en la tarea, mejoramiento a largo plazo de la competencia global de la organizacin en el desarrollo del producto, y un buen retorno de la inversin del negocio. Ahora bien, dados estos objetivos, cmo pueden lograr los gerentes de software ( TICs) que sto suceda? cules son las herramientas y factores principales que pudieran usar para alcanzar estos ambiciosos objetivos?
Previamente, se puede mencionar que a travs del estudio de varias publicaciones, algunos autores [Yeh-1993] [Press-1993B] plantean diferentes enfoques en cuanto a estilos de administracin. En la vida real, el enfoque suele ser una mezcla de los tipos puros, dependiendo del temperamento del administrador y de la gente, la tecnologa y los recursos disponibles.
* El enfoque de menor rendimiento. Un enfoque es no ser demasiado ambicioso, y establecer objetivos limitados. Si se promete poco, es improbable que se fracase [Jenner95]. Incluso se puede entregar ms de lo prometido y verse bien en el papel. Pero, en realidad, finalmente se pierde en el comercio competitivo, debido a que los productos de calidad no se pueden entregar en forma rpida y con un bajo costo.
* Un enfoque de estrellas. Otro enfoque consiste en usar slo la mejor gente, lo que es indicado por la experiencia, registros curriculares, y/o post-grados. La explicacin es la siguiente: escribir software es una actividad compleja, y cada producto es, en ciertos sentidos, diferente del anterior. De modo que la produccin de buen software es en realidad un arte, que se adquiere mejor a travs de la prctica. Si se puede conseguir a la mejor gente y usarla como un equipo de elite, este equipo fcilmente aventajar a un equipo promedio, tanto en productividad como en calidad.
7
* El enfoque de tecnologa de punta. Quizs debido a que el software representa un enfoque altamente tcnico para resolver problemas en la sociedad moderna, algunos gerentes de software favorecen un enfoque tcnico para los problemas de produccin de software. Esto se puede denominar como el enfoque robtica, para usar una analoga con la automatizacin de una fbrica. Este enfoque incluye ideas tales como herramientas para mejorar la calidad y los ambientes de desarrollo y pruebas, herramientas CASE, y el uso de generadores de programas, entre otros.
* El enfoque de proceso. Este enfoque trata la produccin de software, como consistiendo en una serie de procesos individuales diferentes, similares a la produccin de hardware. Cun bien opere la fbrica depender en gran medida de cun bien se hayan afiatados los procesos productivos de la fbrica. Aunque las personas y las herramientas son importantes elementos de los procesos de software, se deben buscar modos de reducir la variabilidad del proceso (hacer ms predecible la produccin de software) y mejorar las capacidades del proceso. En la actualidad, este enfoque tiene muchos partidarios en la industria del software [Guerre-1995]. Tal como lo demuestra la siguiente seccin, no es difcil entender el por qu.
Definiendo el proceso de Software.
Los estndares ISO 9000 estn basados en comprender que todo trabajo est acompaado de un proceso. Cada proceso tiene insumos. Los productos son los resultados de un proceso; y los productos son tangibles o intangibles. El proceso mismo es una transformacin que agrega valor. Un producto puede ser, por ejemplo, una factura, un software computacional, un combustible lquido, un dispositivo clnico, un servicio bancario o un producto final o intermedio de cualquier categora genrica. Deber existir oportunidades para hacer mediciones sobre los insumos en varias instancias del proceso, as como tambin sobre los productos [INN90-1995] .
El desarrollo de software puede ser tremendamente complejo y a menudo existen diversas formas de realizar las distintas tareas involucradas. Un proceso bien definido puede ayudar a ejecutarlo adecuadamente, y permite enfocarlo en realizar tareas asignadas y establece un marco de trabajo apropiado.
8
Un proceso es un mtodo particular de hacer algo; generalmente involucra numerosos pasos y operaciones, incluyendo procedimientos, instrucciones de trabajo y estndares [Jenner-1995]. Algunos ejemplos adecuados a esta definicin son libros de recetas culinarias, instrucciones de ensamblaje hgalo usted mismo, procedimientos para desmontar un aparato elctrico, lneas de ensamblaje para fabricacin de tableros de circuitos o de autos, y definicin de etapas para construir un producto de software. Un proceso necesita ser repetible, pero puede ser o no repetible, o frecuentemente usado. Algunos procesos pueden usarse muy rara vez o no del todo, tal como el procedimiento de evacuacin de emergencia para una ciudad bajo ataque nuclear. Un proceso puede no ser visible o bien documentado. A veces, lo que se practica puede diferir de los procedimientos escritos. Si las cosas estn hechas para un propsito determinado (ad hoc), no de acuerdo a algn procedimiento, por lo general no es repetible, y entonces ya no merecera ser llamado un proceso. Pero la ingeniera de software no es una actividad rutinaria que puede ser estructurada y reglamentaria como un proceso de manufactura repetitivo; es un proceso intelectual que debe ajustarse dinmicamente a las necesidades creativas de las personas y sus tareas.
Adems, se puede definir proceso una serie de actividades relacionadas entre s, que convierten insumos en resultados (cambiando el estado de las entidades) .
Tambin para describir un proceso, puede ser til dibujar un diagrama de flujo, que capture los pasos o tareas del proceso y la relacin interna y secuencias de estos pasos [Yeh-1993]. Tambin puede ser til para capturar las entradas y salidas de cada uno de los pasos del proceso a conocer, qu variables podran afectar el resultado y dnde se guarda el conocimiento detallado del proceso. Se hace notar que no todas las variables son controlables; por ejemplo, la complejidad del problema puede estar ms all del control del proceso del software del proyectista. Si se mira en el diagrama de flujo, se puede tener una nueva perspectiva del proceso, reconocer variables importantes, e identificar pasos innecesarios o etapas perdidas. El diagrama puede servir como punto de partida para el proceso de la trayectoria del flujo, mejoramiento, o re-proyeccin.
9
Frecuentemente todo el ciclo de vida del desarrollo de software se divide en unas etapas de proceso. Sin embargo, los procesos grandes tienden a estar afectados por muchas variables y no son tan fciles de comprender. Cada proceso grande, por lo general, consta de muchos procesos pequeos y distintos. Por ejemplo, el proceso inicial de requerimientos puede contener los siguientes subprocesos: estudio de mercado, encuesta al cliente, anlisis competitivo, prototipo, estudio de factibilidad, caractersticas prioritarias (mediante el despliegue de la funcin de calidad) y el estudio del factor humano, entre otros. Mientras ms se puede tomar aparte un proceso grande, y trazar un problema hacia un proceso pequeo especfico, ms probable ser el ser capaz de comprender el problema y hacer algo con respecto a l, mediante el proceso de mejoramiento. Como estos procesos individuales son especficos, estn ms sujetos a experimentaciones y control. Algunos de ellos, pueden que normalmente, no se reconozcan como procesos de software en el modelo de ciclo de vida o metodologa de software.
El hecho que un proceso exista no significa necesariamente que sea el proceso correcto. Con frecuencia, los procesos pueden simplificarse, perfeccionarse, o mejorarse de otro modo para satisfacer las necesidades del proyecto. Debera considerarse un diseo del proceso o re-ingeniera para ver si el proceso es o no ad-hoc en llenar las necesidades de la lnea de produccin de software.
Por qu basado en proceso?
Se mencionarn algunos de los problemas que plantean los tres primeros enfoques administrativos: el enfoque de menor rendimiento, el enfoque de estrellas y el enfoque de tecnologa de punta, antes de conocer los beneficios del enfoque basado en proceso [Yeh-1993] .
El enfoque de menor rendimiento corresponde a una posicin poco competitiva que conducir al fracaso y ser derrotado en el mercado. El enfoque de slo estrellas no es prctico. Existe una escasez de buenos profesionales de software. No se puede detener la produccin de software slo porque no se pueda conseguir la gente que se gustara utilizar en el proyecto. Adems, existe un problema que es cada vez mayor. El enfoque de slo estrellas funcionara bien para un proyecto ms bien pequeo. Pero cuando se necesita producir muchos cientos de miles de lneas de cdigos o ms, y hacerlo dentro de un perodo de tiempo razonable, este enfoque se quiebra. Todos los equipos de elite (equipos 10 quirrgicos en el hospital, comandos militares, pilotos del servicio de vuelo) son relativamente pequeos. La comunicacin y el trabajo en equipo adquieren una importancia crucial cuando se logra un equipo de ms de una docena de personas. El enfoque de robtica tambin es limitado porque no se puede automatizar a las personas. En la medida que las personas sigan desempeando roles claves en la produccin de software, un enfoque que dependa slo de la automatizacin y de las herramientas, tendr nicamente un impacto limitado. Esto tambin se mantiene para la fabricacin, aunque las tareas de fabricacin son ms proclives a la automatizacin. Varios estudios de casos han sugerido que las fbricas que hicieron grandes inversiones en robtica, pero que descuidaron la dimensin personas, aparte de lo caro que es construirlas, no necesariamente sern ms productivas que las fbricas tradicionales. Los procesos de produccin de software son ms difciles de automatizar, debido a la amplia variedad de problemas y a la complejidad encontrada.
Por contraste, el enfoque basado en proceso pretende reducir las variaciones de produccin de software y mejorar las capacidades de produccin de software a travs de la caracterizacin y mejoramiento del proceso. El proceso abarca el mtodo, la gente y la tecnologa, pero no se limita a estos componentes. El enfoque basado en proceso trata de mover a la administracin de produccin de software desde una forma de arte a una disciplina de ingeniera [Guerre-1995] . Al descifrar las lecciones de la ciencia de la computacin, sociologa, tecnologa de informacin, integracin de sistemas, ingeniera de software y muchas otras disciplinas, y acumulando estudios y experiencias de casos de la vida real, se puede comprender mejor cada proceso individual de produccin de software y sus factores claves, y as ser ms capaz de controlar y predecir el comportamiento.
Esto es precisamente lo que se discute en el marco de calidad del proceso de software y las aplicaciones que plantea este Captulo. Tal como se puede explicar y demostrar, se puede obtener mejores ganancias en calidad y productividad con una inversin relativamente pequea en automatizacin, y sin tener que cambiar el personal por un elenco de personas estrellas.
Sin embargo, sto no debe sugerir que todos concuerdan con un enfoque basado en proceso. Estn aquellos que creen que las personas son nicas y diferentes, y que es contraproductivo tratar de mecanizar el proceso de produccin de software o de estandarizar los procedimientos [Guerre-1995].
11
Actividades del Proceso de Software
Un proceso del software es un conjunto de actividades que conducen a la creacin de un producto software. Estas actividades pueden consistir en el desarrollo de software desde cero en un lenguaje de programacin estndar como Java o C. Sin embargo, cada vez ms, se desarrolla nuevo software ampliando y modificando los sistemas existentes y configurando e integrando software comercial o componentes del sistema. Los procesos del software son complejos y, como todos los procesos intelectuales y creativos, dependen de las personas que toman decisiones y juicios. Debido a la necesidad de juzgar y crear, los intentos para automatizar estos procesos han tenido un xito limitado. Existe una inmensa diversidad de procesos del software. No existe un proceso ideal, y muchas organizaciones han desarrollado su propio enfoque para el desarrollo del software. Los procesos han evolucionado para explotar las capacidades de las personas de una organizacin, as como las caractersticas especficas de los sistemas que se estn desarrollando. Para algunos sistemas, como los sistemas crticos, se requiere un proceso de desarrollo muy estructurado. Para sistemas de negocio, con requerimientos rpidamente cambiantes, un proceso flexible y gil probablemente sea ms efectivo.
Aunque existen muchos procesos diferentes de software, y cada organizacin pueda tener establecidos sus propios y diferentes procesos, algunas actividades fundamentales son comunes para todos ellos [Sommer-2005] : 1. Especificacin del software. Se debe definir la funcionalidad del software y las restricciones en su operacin. 2. Diseo e implementacin del software. Se debe producir software que cumpla su especificacin. 3. Validacin del software. Se debe validar el software para asegurar que hace lo que el cliente (o usuario) desea. 4. Evolucin del software. El software debe evolucionar para cubrir las necesidades cambiantes del cliente.
Aunque no existe un proceso del software ideal, en las organizaciones existen enfoques para mejorarlos. Los procesos pueden incluir tcnicas anticuadas, y no aprovecharse de las mejores prcticas en la ingeniera del software industrial. De hecho, muchas organizaciones an no aprovechan los mtodos de la ingeniera del software en el desarrollo de su software. 12
Los procesos del software se pueden mejorar por la estandarizacin del proceso; esto conduce a mejorar la comunicacin y a una reduccin del tiempo de formacin, y hace la ayuda al proceso automatizado ms econmica. La estandarizacin tambin es un primer paso importante para introducir nuevos mtodos, tcnicas y buenas prcticas de ingeniera del software [Sommer-2005] .
No hay una forma correcta o incorrecta de organizar estas actividades, y el objetivo de este Captulo es simplemente proporcionar al alumno una introduccin de cmo se pueden organizar. Las cuatro actividades bsicas y fundamentales del proceso son: especificacin, desarrollo, validacin y evolucin, y se pueden organizar de forma distinta en diferentes procesos del desarrollo. En el enfoque en cascada, estn organizadas en secuencia, mientras que en el desarrollo evolutivo se entrelazan. Cmo se llevan a cabo estas actividades depende del tipo de software, de las personas y de la estructura organizacional implicada.
Especificacin del software
La especificacin del software o ingeniera de requerimientos es el proceso de comprensin y definicin de qu servicios (o funcionalidades) se requieren del sistema, y de la identificacin de las restricciones de funcionamiento y desarrollo del mismo. La ingeniera de requerimientos es una etapa particularmente crtica en el proceso del software ya que los errores en esta etapa originan inevitablemente problemas posteriores en el diseo e implementacin del sistema.
En la Figura 1.1. se muestra el proceso de ingeniera de requerimientos. ste conduce a la generacin de un documento de especificacin de requerimientos, que bsicamente es la especificacin del sistema. Normalmente en este documento los requerimientos se presentan en dos niveles de detalle. Los usuarios finales y los clientes necesitan una declaracin de alto nivel de los requerimientos, mientras que los desarrolladores del sistema necesitan una especificacin ms detallada de ste [Sommer- 2005] .
13
Existen cuatro fases principales en el proceso de ingeniera de requerimientos:
1. Estudio de viabilidad. Se estima si las necesidades del usuario se pueden satisfacer con las tecnologas actuales de software y de hardware. El estudio analiza si el sistema propuesto ser rentable desde un punto de vista del negocio, y si se puede desarrollar dentro de las restricciones de presupuesto existentes. Este estudio debe ser relativamente econmico y rpido de elaborar. El resultado debe informar si se va a continuar con un anlisis ms detallado.
2. Obtencin y anlisis de requerimientos. Es el proceso de obtener los requerimientos del sistema por medio de la observacin de los sistemas existentes, levantamiento de los procesos actuales, discusiones con los dueos de los procesos, los usuarios potenciales y proveedores, el anlisis de procedimientos y tareas, etc. Esto puede implicar el desarrollo de uno o ms modelos y prototipos del sistema que ayudan a los profesionales (analistas) a comprender el sistema a especificar.
3. Especificacin de requerimientos. Es la actividad de traducir la informacin recopilada durante la actividad de anlisis en un documento que define un conjunto de requerimientos. En este documento se pueden incluir dos tipos de requerimientos: los requerimientos de los usuarios, que son declaraciones abstractas de los requerimientos del cliente y del usuario final del sistema, y los requerimientos del sistema, que son una descripcin ms detallada (y tcnica) de la funcionalidad a proporcionar.
4. Validacin de requerimientos. Esta actividad comprueba la veracidad, consistencia y completitud de los requerimientos. Durante este proceso, inevitablemente se descubren errores en el documento de requerimientos. Se debe modificar entonces para corregir estos problemas. Es necesario obtener la visacin del dueo del proceso.
Por supuesto, las actividades en el proceso de requerimientos no se llevan a cabo de forma estrictamente secuencial. El anlisis de requerimientos contina durante la definicin y especificacin, y a lo largo del proceso pueden surgir nuevos requerimientos. Por lo tanto, las actividades de anlisis, definicin y especificacin se entrelazan. En los mtodos giles, los requerimientos de desarrollan de forma incremental conforme a las prioridades del usuario, y la obtencin de requerimientos viene de los usuarios que forman parte del equipo de desarrollo.
14
Figura 1.1: Especificacin de Requerimientos.
Diseo e implementacin del software
La etapa de implementacin del desarrollo de software es el proceso de convertir las especificaciones del sistema en un sistema ejecutable. Siempre implica los procesos de diseo y desarrollo del software, pero, si se utiliza un enfoque evolutivo de desarrollo, tambin puede implicar un refinamiento de la especificacin del software. Un diseo de software es una descripcin de la estructura del software que se va a implementar, los datos que son parte del sistema, las interfaces entre los componentes del sistema, los procesos y/o los algoritmos utilizados (o reglas del negocio). Los diseadores no llegan inmediatamente a un diseo detallado, sino que lo pueden desarrollar de manera iterativa a travs de diversas versiones [Sommer-2005] . El proceso de diseo puede implicar el desarrollo de varios modelos del sistema con diferentes niveles de abstraccin. Mientras se descompone un diseo, se pueden descubrir errores y omisiones de las etapas previas. Esta retroalimentacin permite mejorar los modelos de diseo previos. La Figura 1.2. es un modelo de este proceso que muestra las descripciones de diseo que pueden producirse en varias etapas del diseo. Este diagrama sugiere que las etapas son secuenciales; aunque en realidad, las actividades del proceso de diseo se entrelazan. La retroalimentacin entre etapas y la consecuente repeticin del trabajo es inevitable en todos los procesos de diseo.
15
Figura 1.2.; Diseo e Implementacin de Software.
La salida de cada actividad de diseo es una especificacin para la siguiente etapa. Esta especificacin puede ser abstracta y formal, realizada para clarificar los requerimientos, o puede ser una especificacin para determinar qu parte del sistema se va a construir. Durante todo el proceso de diseo, se detalla cada vez ms esta especificacin. El resultado final del proceso son especificaciones precisas de los algoritmos y estructuras de datos a implementarse.
Las actividades que se pueden distinguir del proceso de diseo son:
1. Diseo arquitectnico. Los subsistemas que forman el sistema y sus relaciones se identifican y documentan. 2. Especificacin abstracta. Para cada subsistema se produce una especificacin abstracta de sus servicios y las restricciones bajo las cuales debe funcionar. 3. Diseo de la interfaz. Para cada subsistema se disea y documenta su interfaz con otros posibles subsistemas. Esta especificacin de la interfaz debe ser inequvoca ya que permite que el subsistema se utilice sin conocimiento de su funcionamiento. En esta etapa pueden utilizarse los mtodos de especificacin formal [Sommer-2005]. 4. Diseo de componentes. Se asignan servicios a los componentes y se disean sus interfaces (y el caso de los procedimientos almacenados).
16
5. Diseo de la estructura de datos. Se disea en detalle y especifica la estructura de datos utilizada en la implementacin del sistema (Tablas del Sistema, con los datos necesarios). 6. Diseo de algoritmos. Se disean en detalle y especifican los posibles algoritmos (o reglas del negocio) utilizados para proporcionar los servicios.
ste es un modelo general del proceso de diseo, y los procesos reales y prcticos pueden adaptarlo de diversas maneras [Sommer-2005] .
En la prctica, los mtodos estructurados son realmente notaciones estndar que comprenden prcticas aceptables. Si se siguen estos mtodos y se aplican las pautas, puede obtenerse un diseo razonable. La creatividad del diseador an se requiere para decidir la descomposicin del sistema y asegurar que el diseo capte de forma adecuada la especificacin del mismo.
La programacin es una actividad personal y no existe un proceso general que se siga comnmente. Algunos programadores empiezan con los componentes que comprenden, los desarrollan y despus continan con los que comprenden menos. Otros toman el enfoque opuesto, dejando los componentes que son ms familiares hasta el final debido a que saben cmo desarrollarlos. Algunos desarrolladores prefieren definir los datos al inicio del proceso y los utilizan para conducir el desarrollo del programa; otros dejan los datos sin especificar tanto como sea posible. Esta tema se podr analizar ms adelante (con algunos Anexos y literatura complementaria).
Normalmente, los programadores llevan a cabo algunas pruebas del cdigo que han desarrollado. A menudo esto muestra defectos en el programa que se deben eliminar del mismo. Esto se denomina depuracin. Las pruebas y la depuracin de defectos son procesos diferentes. Las pruebas establecen la existencia de defectos. La depuracin comprende la localizacin y correccin de estos defectos. Los defectos en el cdigo se localizan y el programa se modifica para cumplir los requerimientos. Las pruebas se deben entonces repetir para asegurar que los cambios se han efectuado correctamente. As, el proceso de depuracin es parte tanto del desarrollo como de las pruebas del software.
17
Validacin del software
La validacin del software o, de una forma ms general, la verificacin y validacin (V & V, para algunos especialistas) [Sommer-2005] se utiliza para mostrar que el sistema se ajusta a su especificacin y que cumple las expectativas del usuario que lo comprar o utilizar. Implica procesos de comprobacin, como las inspecciones y revisiones, en cada etapa del proceso del software, desde la definicin de requerimientos hasta el desarrollo del programa. Sin embargo, la mayora de los costos de validacin aparecen despus de la implementacin, cuando se prueba el funcionamiento del sistema.
Bsicamente, un proceso de pruebas consta de tres etapas, en las cuales se prueban los componentes del sistema, la integracin del sistema y, finalmente, el sistema con los datos del cliente. En el mejor de los casos, los defectos se descubren en las etapas iniciales del proceso y los problemas con la interfaz, cuando el sistema se integra. Sin embargo, cuando se descubren defectos, el programa debe depurarse y esto puede requerir la repeticin de otras etapas del proceso de pruebas. Los errores en los componentes del programa pueden descubrirse durante las pruebas del sistema. Por lo tanto, el proceso es iterativo y se retroalimenta tanto de las ltimas etapas como de la primera parte del proceso.
Las tpicas etapas del proceso de pruebas son:
1. Prueba de componentes (o unidades). Se prueban los componentes individuales para asegurarse de que funcionan correctamente. Cada uno se prueba de forma independiente, sin los otros componentes del sistema. Los componentes pueden ser entidades simples como funciones o clases de objetos, o pueden ser agrupaciones coherentes de estas entidades.
2. Prueba del sistema. Los componentes se integran para formar el sistema. Este proceso comprende encontrar errores que son el resultado de interacciones (o condiciones) no previstas entre los componentes y su interfaz. Tambin comprende validar que el sistema cumpla sus requerimientos funcionales y no funcionales. Para sistemas grandes, esto puede ser un proceso gradual en el cual los componentes se integran para formar subsistemas que son probados individualmente antes de que ellos mismos se integren para formar el sistema final.
18
3. Prueba de aceptacin. Es la etapa final en el proceso de pruebas antes de que se acepte que el sistema se ponga en funcionamiento. Este se prueba con los datos reales proporcionados por el cliente ms que con datos de prueba simulados. Debido a la diferencia existente entre los datos reales y los de prueba, la prueba de aceptacin puede revelar errores y omisiones en la definicin de requerimientos del sistema. Tambin puede revelar problemas en los requerimientos donde los recursos del sistema no cumplen las necesidades del usuario o donde el desempeo del sistema es inaceptable.
Las ltimas etapas de prueba consisten en integrar el trabajo de los programadores y deben planificarse por adelantado. Un equipo independiente de probadores debe trabajar a partir de planes de prueba que se desarrollan desde de la especificacin y diseo del sistema. Este es un tema y tarea muy importante, y que generalmente no se hace. La Figura 1.3. ilustra cmo los planes de prueba son el vnculo entre las actividades de prueba y de desarrollo [Sommer-2005] .
Figura 1.3.: Planes de Pruebas.
En el lenguaje informtico, la prueba de aceptacin algunas veces se denomina prueba alfa. Los sistemas personalizados se desarrollan para un nico cliente. El proceso de prueba alfa contina hasta que el desarrollador del sistema y el cliente acuerdan que el sistema que se va a entregar es una implementacin aceptable de los requerimientos del sistema. Cuando un sistema se va a comercializar (masivamente) como un producto de 19 software, a menudo se utiliza un proceso de prueba denominado prueba beta. sta comprende la entrega de un sistema a un nmero potencial de clientes que acuerdan utilizarlo, los cuales informan de los problemas a los desarrolladores del sistema. Esto expone el producto a un uso real y detecta los errores no identificados por los constructores del sistema. Despus de esta retroalimentacin, el sistema se modifica y se entrega ya sea para una prueba beta adicional o para la venta.
Evolucin (o mantencin) del software
La flexibilidad de los sistemas de software es una de las principales razones por la que ms y ms software se incorpora a los sistemas grandes y complejos. Se destaca que una vez que se decide adquirir un hardware, es muy costoso hacer cambios en su diseo. Sin embargo, se pueden pedir y hacer cambios al software en cualquier momento durante o despus del desarrollo del sistema. Y casi siempre, con la puesta en marcha del sistema, comenzarn a solicitarse nuevos requerimientos adicionales [Sommer-2005] .
Histricamente, siempre ha existido una separacin entre el proceso de desarrollo y el proceso de evolucin del software (o mantenimiento del software). La mayora de las personas considera el desarrollo de software como una actividad creativa en la cual un sistema de software se desarrolla desde un concepto inicial hasta que se pone en funcionamiento. Sin embargo, a veces consideran el mantenimiento del software como algo aburrido y sin inters (o simplemente, no lo consideran). Aunque los costos de mantencin son a menudo mayores que los costos iniciales de desarrollo, el proceso de mantenimiento se considera a veces menos problemtico que el desarrollo del software original (siempre y cuando se haya desarrollado bajo un proceso documentado y controlado).
Esta distincin entre el desarrollo y el mantenimiento es cada vez menos relevante. Hoy en da, pocos sistemas de software son completamente nuevos, lo que implica que tiene ms sentido ver el desarrollo y el mantenimiento como actividades continuas. Ms que dos procesos separados, es ms realista considerar a la ingeniera del software como un proceso evolutivo (Figura 1.4.) en el cual el software se cambia continuamente durante su periodo de vida como respuesta a los requerimientos cambiantes y necesidades del cliente- usuario.
20
Actualmente, en todas las bases tcnicas de las licitaciones pblicas, las especificaciones establecen condiciones acerca de un perodo de marcha blanca, en el cual se incluyen las mantenciones, las que pueden ser debido a errores detectados, o a perfecciones que se requieran por condiciones normativas y/o regulatorias.
Figura 1.4.: Mantenimiento del Software.
El tema del mantenimiento del software se encuentra plenamente incorporado al concepto de ciclo de vida de un sistema de software, el que se analiza en el siguiente Captulo.
21
1.2. INGENIERIA DE SOFTWARE Y CICLO DE VIDA.
1.2.1. LA INGENIERIA DEL SOFTWARE.
El desarrollo de aplicaciones de software requiere diversas habilidades y pasos para el reconocimiento y la solucin del problema; sin embargo, puede ser logrado usando un conjunto de tcnicas que son independientes de las aplicaciones. Estas tcnicas forman precisamente, la base de una metodologa de ingeniera de software.
La ingeniera de software pretende desarrollar y aplicar tcnicas de ingeniera en la produccin de software, para obtener productos confiables, eficientes y de bajo costo [Press93-B] . Entre sus objetivos principales se puede reconocer: - Poseer una metodologa bien definida, que direccione el ciclo de vida del software, en sus fases de planeacin, desarrollo y mantencin. - Establecer un conjunto de componentes de software que documenten cada etapa en el ciclo de vida del software, y muestre el seguimiento paso a paso. - Acordar un conjunto de puntos de revisin predecibles que puedan ser revisados a intervalos regulares en el ciclo de vida del software.
Una definicin tcnica es: La aplicacin de una sistemtica, disciplinada y cuantificable aproximacin, al desarrollo, operacin y mantenimiento de software [Press-1993A]; es decir, la aplicacin de la ingeniera al software. Un ingeniero de software es una persona que aplica principios de ingeniera al desarrollo o produccin de sistemas, donde el software es la intrnsica o principal parte de un sistema. Sin entrar en profundizar el tema, junto con este ingeniero, hay otros roles (profesionales y/o tcnicos) que participan ayudando al proceso de ingeniera: un analista (analiza requerimientos), un programador (escribe el cdigo que implementa el diseo) y el probador (desarrolla y conduce un conjunto de pruebas para el producto de software) [Press- 1993B] .
Un interesante aporte para conocer el desarrollo histrico de la ingeniera de software, lo constituyen ciertas publicaciones especializadas [Press-1993A] [Parra-1995] .
22
En la prctica, las fases genricas del desarrollo de software se manifiestan como un paradigma de ingeniera de software. Un paradigma es una plantilla, modelo, o marco de referencia que define el proceso a travs del cual se crea el software [Press-1993B]. Establece el contexto de procedimientos para un proyecto de software, lo que implica puntos importantes y productos que se crean, las actividades de aseguramiento de calidad que se van a imponer, y la visin de la administracin que se va a requerir. Secuencialmente, la iteracin y el paralelismo son caractersticas importantes de un paradigma de ingeniera de software. Se ejecutan paso a paso ciertas actividades de definicin y desarrollo. La salida de una actividad se convierte en la entrada de la siguiente y el software se desarrolla en una secuencia de pasos predecibles. Por ejemplo, el software puede derivarse de una declaracin de requerimientos del cliente, usando una secuencia de pasos tcnicos que se denominan: anlisis, diseo, codificacin y prueba. Una vez que el software ha sido entregado al cliente, comienzan las actividades de soporte y mantenimiento.
Por lo tanto, se puede definir a la ingeniera de software como la rama de la ingeniera que crea y mantiene las aplicaciones de software aplicando tecnologas y prcticas de las ciencias computacionales, manejo de proyectos, ingeniera, el mbito de la aplicacin, y otros campos. Otros especialistas la definen como: Es un proceso definido paso a paso, que facilita la especificacin, el diseo, la implementacin y las pruebas de una solucin de software, para un conjunto de requisitos explcitos, de modo eficiente y eficaz
Se destacan dos aspectos:
En primer lugar, se puede recordar por la experiencia, que la administracin inteligente de un proyecto no deja de utilizar todos los recursos a su disposicin. Estos son de dos categoras: los recursos humanos y los recursos tecnolgicos. Los recursos tecnolgicos se agrupan, a su vez, en dos categoras: los recursos administrativos (metodologas y tcnicas) y los recursos automticos (herramientas). En este contexto, una Tcnica es un procedimiento destinado a realizar ordenadamente una tarea; una Herramienta es un programa de computador que apoya la realizacin de una tarea, y una Metodologa es un sistema de tcnicas supuestamente coherente, consistente y completo, para llevar adelante el proyecto.
23
En segundo lugar, se habla mucho del "ciclo de vida de un software"; y este aspecto cuesta mucho hacerlo entender a los ejecutivos de una organizacin que se encuentra desarrollando un plan o proyecto informtico normal. Y se debe reconocer que todo software debe evolucionar con el tiempo. Una ley de la ingeniera de software establece que sin importar en qu momento del ciclo de vida del sistema se encuentre, el sistema cambiar, y el deseo de cambiarlo persistir a lo largo de todo el ciclo [Press-1993B] . Un ejemplo claro: todo utilitario o software de aplicacin aparece con nuevas versiones actualizadas en el mercado. En el caso de un desarrollo interno en las organizaciones, muchas veces, ante continuas mantenciones o "parches" a un sistema en explotacin, es mejor desarrollar un nuevo sistema en forma completa. Es indudable que la experiencia acumulada ayudar a reducir el tiempo de desarrollo (en comparacin con la versin original). Por esto se recomienda disear los sistemas ( mdulos), sabiendo que requerirn alguna mantencin en el futuro, y que tendrn un perodo de vida til limitado. De este tema se profundizar en el siguiente punto.
1.2.2. MODELOS DEL PROCESO DE SOFTWARE Y CICLO DE VIDA.
Como se ha explicado precedentemente, un proceso de software es un conjunto de actividades que conducen a la creacin de un producto de software; y un modelo de software es una representacin abstracta de un proceso de software. Cada modelo representa un proceso desde una perspectiva particular.
Estos modelos generales no son descripciones definitivas de los procesos del software. Ms bien, son abstracciones de los procesos que se pueden utilizar para explicar diferentes enfoques para el desarrollo de software. Puede pensarse en ellos como marcos de trabajo del proceso que pueden ser extendidos y adaptados para crear procesos ms especficos de ingeniera del software. Adems, los conceptos (o alcances) de los modelos de procesos, y del ciclo de vida del software, tambin pueden varias entre los especialistas (de autor en autor).
En el rea del desarrollo de software, las actividades del ciclo de vida son las concernientes a la transformacin de una necesidad de un cliente, en un producto de software que satisface dicha necesidad.
24
El ciclo de vida de un software comienza cuando ste es concebido, y termina cuando no se encuentra ms disponible para su uso [Sander-1994]. Para facilitar la administracin, ste ciclo generalmente se divide en etapas o fases, cada una con objetivos bien precisos, y con productos (o salidas) a entregar por cada una de las fases. Cada una de las actividades y productos de cada fase, tienen asociados un conjunto de normas y prcticas basadas en estndares internacionales vigentes de una buena prctica ingenieril del software.
El alumno debe comprender que los modelos de procesos genricos se utilizan ampliamente en la prctica actual de la ingeniera del software. No se excluyen mutuamente y a menudo se utilizan juntos, especialmente para el desarrollo de sistemas grandes. De hecho, el Proceso Unificado de Racional (RUP) que se trata en el siguiente Captulo combina elementos de todos estos modelos. Los subsistemas dentro de un sistema ms grande pueden ser desarrollados utilizando enfoques diferentes. Por lo tanto, aunque es conveniente estudiar estos modelos separadamente, debe entenderse que, en la prctica, a menudo se combinan.
Modelar el ciclo total de vida de produccin de software ha sido un rea muy activa de investigacin. Existe bastante literatura en que se presentan distintos modelos y puntos de vistas al respecto [Yeh-1993] [Press-1993A] [IPL-1996] [Macas-1997] . Algunos representan nuevas maneras o paradigmas de la produccin de software. Debido al gran nmero de variables en un ciclo de vida, es difcil llegar a un modelo de ciclo-vida que sea a la vez de uso prctico y razonablemente preciso.
No se desea profundizar dicho tema, pero se hace necesario conocer bsicamente, las distintas fases en la que se ve envuelto el desarrollo de un producto de software. A continuacin, se sintetizarn varios de tales modelos y algunos de otros procesos alternativos, que son tambin importantes en el desarrollo de software [Parra-1995] [Sommer-2005] . Tambin se cuenta con literatura complementaria que el alumno puede acceder.
25 Modelo de Cascada (Waterfall).
Este modelo clsico exige un enfoque sistemtico y secuencial del desarrollo de software, que comienza y se propaga a travs de las conocidas fases separadas de anlisis de requerimientos, diseo, implementacin o codificacin, pruebas y mantenimiento; y con lazos de retroalimentacin entre las fases adyacentes. Segn los puntos de vista estudiados, el modelo de cascada de produccin de software, se produce secuencialmente en fases genricas. Versiones diferentes del modelo pueden subdividir las etapas/fases en algo diferente; pero todas ellas tienen tareas similares. Vase la Figura 1.5.
Analizar y Especificar. Comprender y desarrollar los requerimientos o las especificaciones tcnicas del producto para que ste tenga xito en el mercado y satisfaga las necesidades de los clientes.
Disear e Implementar. Esto se hace generalmente por medio de la descomposicin top- down (de arriba-abajo) en cuatro fases: 1. Arquitectura. Llegar a una clara comprensin del dominio de la aplicacin y desarrollar bloques funcionales y programas ejecutorios que apoyen fcil y efecti-vamente las caractersticas del dominio de aplicacin, para que la arquitectura sea robusta y fcil de mejorar y mantener en el futuro. 2. Diseo Global. Desarrollar los mdulos y estructuras de datos necesarios para cada programa ejecutable. 3. Diseo Detallado. Traducir los requerimientos en una representacin de software; desarrollando el algoritmo y estructura de datos que se necesitan para implementar en cada mdulo. 4. Codificacin. Construir el algoritmo y estructura de datos en el lenguaje de programacin elegido, forma legible para la mquina (hardware).
Verificar. Esto se hace mediante el montaje y las pruebas bottom-up (de abajo-arriba), tambin en fases, tales como: 1. Prueba de la unidad. Esto verifica que un mdulo o programa trabaje correctamente. 2. Prueba de construccin e integracin. La prueba de integracin es, por lo comn, la etapa cuando se ejecuta el control de configuracin del producto total. La prueba de integracin, verifica que todos los programas trabajen juntos correctamente de acuerdo a las especificaciones de interfaz entre programas.
26
3. Prueba de sistema. Esto asegura la calidad y confiabilidad del producto segn criterios del cliente a travs de pruebas en un ambiente que emula el ambiente activo del cliente. 4. Prueba in-situ (marcha blanca). El producto se prueba con datos de la vida real, y la prueba verifica que todos los otros aspectos de la versin liberada del producto, pudiendo incluir la instalacin, conversin de base de datos, y procedimientos de aprovisionamiento de antecedentes del cliente, trabajen correctamente.
Liberar o entregar. Esto incluye el progresivo soporte y mantencin del producto. Generalmente, es la fase ms larga del ciclo de vida.
Figura 1.5.: Esquematizacin del Modelo en Cascada.
Algunos paradigmas alternativos.
El modelo de cascada se ha criticado por tomar demasiado tiempo (entre la definicin de requerimientos y la entrega del producto), tiende a enfocar la atencin internamente en vez de hacerlo con los clientes (usuarios finales), y guiarse por una excesiva documentacin. Se han propuesto o tratado otras alternativas para desarrollar software [Sommer-1991] [Press-1993B] [Sander-1994] [Macas-1997] .
Algunas de las alternativas ms destacadas (como un vistazo general para el alumno), son:
27
Modelo Incremental o Prototipos. Consiste en construir rpidamente, prototipos casi-desechables para estudiar la factibilidad y aprender lecciones de diseo. En un proceso de desarrollo incremental, los clientes identifican, a grandes rasgos, las funcionalidades o los servicios que proporcionar el sistema. Identifican qu servicios son ms importantes y cules menos. Este planteamiento es, con frecuencia, usado para permitir que los clientes avalen la interfaz de usuario del producto en una etapa temprana del desarrollo. Algunos prototipos pueden convertirse en productos, o luego, en partes claves del producto. As la prototipificacin introduce reiteracin rpida como una manera de aprender antes de construir el producto final (y pueden experimentar con el Sistema). Esto puede proveer una rpida realimentacin al desarrollo, y ayudar a acortar el tiempo entre los requerimientos y la implementacin. Este modelo tiene varias ventajas [Cabre-2013] , sin embargo, demanda una mayor organizacin y puede ser una seleccin costosa. Permite superar algunas dificultades del modelo cascada, mediante la entrega del software en etapas. En algunos casos, no es posible liberar partes que utilizan el resto del sistema. Adems, si los incrementos son muy pequeos (entre versin y versin), las repetidas pruebas pueden incrementar el costo del proyecto.
Modelo en Espiral. Fue desarrollado por Boehm [Press-2001], para cubrir las mejores caractersticas del modelo clsico como de la creacin de prototipos, y se agreg un nuevo elemento: el anlisis de riesgo. Difiere del modelo incremental en todas las fases (incluyendo las fases de requerimientos y diseo, que se repiten). Esto es utilizado cuando los requerimientos iniciales son pobremente entendidos o inestables. En este caso, la planificacin es muy importante, en asegurar que la evolucin converge hacia la solucin deseada (que cada cambio pueda ser acomodado). El modelo, que se representa mediante una espiral, define cuatro actividades: planificacin y definicin, anlisis de riesgo, ingeniera y evaluacin del cliente. Cada ciclo en la espiral representa una fase del proceso de software. Con cada iteracin alrededor de la espiral (comenzando en el centro y siguiendo hacia el exterior), se construyen sucesivas versiones del software, cada vez ms completas.
28
Figura 1.6.: Esquematizacin del Modelo basado en Prototipos.
Figura 1.7.: Esquematizacin del Modelo en Espiral.
29
Modelo basado en componentes. Este enfoque se basa en la existencia de un nmero significativo de componentes reutilizables. El proceso de desarrollo del sistema se enfoca en integrar estos componentes en el sistema ms que en desarrollarlos desde cero [Press-2001] [Sommer-2005] . Este modelo consiste en construir sistemas genricos reusables y permitir a los clientes aprovisionar, personalizar, o cambiar el producto para favorecer sus cambiantes necesidades mediante tablas, archivos configurables, plantillas, y lenguajes para personalizar (ampliables por el cliente), entre otros. Los generadores de aplicaciones y de programas, son ejemplos de esta categora. Algunas veces estos componentes son sistemas por s mismos (sistemas comerciales) que se pueden utilizar para proporcionar una funcionalidad especfica, como dar formato al texto o efectuar clculos numricos.
La ingeniera del software basada en componentes tiene la ventaja obvia de reducir la cantidad de software a desarrollarse y as reduce los costos y los riesgos. Por lo general, tambin permite una entrega ms rpida del software. Sin embargo, los compromisos en los requerimientos son inevitables, y esto puede dar lugar a un sistema que no cumpla con todas las necesidades del cliente/usuario. En el proceso se pueden identificar algunas etapas intermedias (ver Figura 1.8.), tales como: anlisis de componentes, modificacin de los requerimientos, diseo del sistema con reutilizacin, y desarrollo e integracin
Modelo Orientado a Objetos. Un modelo iterativo por naturaleza, e incorpora el enfoque que supone que el nuevo software se puede construir a partir de una biblioteca de componentes de software re- usables. Este modelo comienza con una fase de definicin similar a los otros modelos. El desarrollador y el cliente se renen y definen los objetivos generales para el software; identifican los requerimientos funcionales, conductuales y de datos que se conocen; y describen reas donde se requiere ms elaboracin. El anlisis orientado al objeto (OOA), es una actividad donde se hace un intento para identificar las clases y los objetos claves que forman parte del dominio del problema. El diseo orientado al objeto (OOD) crea un modelo de cada componente de programa (objeto) y los mecanismos de comunicacin entre los objetos [Press-2001] . Basado en el modelo en espiral, las fases OOA y OOD se producen iterativamente hasta que se haya desarrollado un modelo de diseo razonable para el sistema [Sommer-2005] . Vase el esquema de la Figura 1.9.
30
Figura 1.8.: Esquema del Modelo basado en Componentes.
Figura 1.9.: Esquematizacin del Modelo Orientado a Objetos.
31
Modelo CleanRoom (sala limpia o libre de errores). Es un modelo en el cual se han combinado la especificacin y verificacin formal de programas, y el aseguramiento de calidad (SQA) estadstico, para el desarrollo de software de alta calidad con fiabilidad certificada. Desarrollado inicialmente por IBM [Press-2001], consiste en traducir los requerimientos del cliente a una especificacin matemtica (lenguaje), de los datos del problema, funcin y comportamiento; se evala entonces la representacin matemtica de requerimientos, para comprobar que est completa y que sea consistente. Una vez que se han validado los requerimientos contra las necesidades del cliente, el modelo formal se traduce en una representacin de lenguaje de programacin apropiado. Debido a que existe el modelo formal, el cdigo fuente resultante puede ser "probado" para que corresponda con el modelo de requerimientos. De esta manera, el software implementado se puede validar en forma directa contra los requerimientos del sistema que en s han sido formalmente especificados usando un enfoque matemtico.
En el proceso de sala limpia, cada incremento del software se especifica formalmente, y esta especificacin se transforma en una implementacin. La correccin del software se demuestra utilizando un enfoque formal. Focaliza la atencin en la prevencin en lugar de la correccin de errores, y la certificacin de la fiabilidad del software para el entorno de uso para cual fue planeado. En lugar de realizar pruebas de unidades y mdulos, se especifican formalmente componentes de software los cuales son verificados matemticamente en cuanto son construidos. El modelo se muestra en la Figura 1.10. El modelo de sala limpia es particularmente apropiado para el desarrollo de sistemas que tienen estrictos requerimientos de seguridad, fiabilidad o proteccin.
Otros Modelos. Si el alumno investiga en la literatura especializada, podr encontrar otros modelos para el proceso de software.
Existe el MSF (Microsoft Solucion Framework). La metodologa MSF es flexible e interrelacionada con una serie de conceptos, modelos y prcticas de uso, y guas para disear y desarrollar soluciones empresariales de una manera que asegura que todos los elementos del proyecto, tales como gente, procesos y herramientas, puedan ser exitosamente conducidos.
32 El MSF, que est compuesto por seis fases [Cabre-2013] no slo es aplicable al desarrollo de proyectos de desarrollo, tambin es aplicable a otros proyectos de TI, como el despliegue o proyectos de infraestructura o redes. MSF no fuerza al desarrollador a utilizar una metodologa especfica (Cascada, gil), pero les permite decidir qu mtodo utilizar.
Existe un Modelo de Desarrollo gil, que se origin a mediados de los aos 1990, extrado del modelo de desarrollo en cascada, pues ste ltimo era visto como burocrtico, lento, degradante e inconsistente por lo exigente y muy estructurado en sus formas de desarrollo de software, que sin embargo realizaban un trabajo eficiente. En el ao 2001, miembros prominentes de la comunidad de la industria del software se reunieron en Sonwbird, Utah, y adoptaron el nombre de "Metodologas giles". El modelo de desarrollo gil es un paradigma de Desarrollo de Software que utiliza procesos giles (pequeas y frecuentes entregas con ciclos rpidos) enfocados en la gente y resultados. Las metodologas ms conocidas son: XP, Scrum, y RAD [Press-2001] [Cabre-2013] .
Figura 1.10.: Esquema del Modelo Clean-Room. 33
1.2.3 LA EVOLUCION DE LOS ESTANDARES.
La importancia del software es una parte integral y necesaria de muchos productos y sistemas, requiere un marco comn internacional, para especificar las mejores prcticas de los procesos de software, actividades y tareas. Debido al crecimiento de los estndares en los ltimos aos, es importante que los ingenieros de software entiendan qu es lo que proporciona el estndar ISO 12.207, y cmo se relaciona con otros estndares que tratan con los procesos de ciclo de vida. Esta norma no fomenta o especifica ningn modelo concreto de ciclo de vida, gestin del software o mtodo de ingeniera, ni prescribe cmo realizar ninguna actividad. La ISO 12.207 presenta un marco de referencia para el proceso del ciclo de vida del software [Lopez-2012] .
Histricamente, el Departamento de la Defensa (DoD) de los EE.UU. fue el pionero en definir los ciclos de vida del desarrollo de software, y en las ltimas dcadas emprendi un esfuerzo para unificar la DoD-STD-2167A (usada por la comunidad de misin crtica) y la MIL- STD-7935 (usada por la comunidad de sistemas de informacin) para crear un estndar de ciclo de vida: la MIL-STD-498. Posteriormente, el DoD cambi sus polticas de adquisicin hacia ms confiabilidad en los estndares comerciales. Entonces, la IEEE y la Asociacin de Industria Electrnica (EIA) iniciaron un proyecto conjunto para un reemplazo comercial de la STD-498. Este esfuerzo produjo un estndar con dos nombres: un Estndar de Uso de Pruebas IEEE (la 1498) y un Estndar Provisional EIA. Dado que IEEE y EIA produjeron el estndar, el Instituto de Estndares Nacional Norteamericano (ANSI) design el documento como un Estndar Conjunto J-016 ANSI. Mientras tanto, la ISO 12.207 se encontraba en desarrollo.
En la Figura 1.11. se muestra cmo han ido evolucionando los distintos estndares acerca del ciclo de vida del software [Moore96]; y lo ms importante, es como se estableci un consenso en este tema. En 1987, en una sesin plenaria de la ISO, la delegacin norteamericana solicit al International Software Engineering Standards Group el desarrollo de una norma relativa al proceso del ciclo de vida del software. En 1989, se constituy el Grupo de Trabajo 7 para iniciar el proyecto.
34
MIL 1679 DoD 2167 MIL 7935 DoD 2167-A IEEE 1074 MIL 498 ISO 12207 Rev ISO 12207 Rev IEEE 1074 IEEE 1496 EIA 640 ANSI J-016 Adap.EEUU de 12207 Implementacin EEUU de 12207 ESTANDARES DoD ESTANDARES IEEE COMERCIALIZACION IEEE/EIA de ESTANDARES DoD ESTANDARES EE.UU. ESTANDARES I.S.O. Vigente a 1996 EVOLUCION: Basado en Influenciado por Idntico a
Fig.1.11. Estndares del Ciclo de Vida.
La ISO 12.207 es una de las normas internacionales ms interesantes para la ingeniera del software (titulada Software Life-Cycle Processes); y proporciona una estructura de procesos que utiliza una terminologa mutuamente aceptada, ms que imponer un modelo de ciclo de vida en particular o un mtodo de desarrollo de software. Dado que es un documento de un nivel ms bien alto, este estndar no especifica los detalles de cmo efectuar las actividades y tareas que comprenden los procesos. Tampoco prescribe el nombre, formato o contenido de la documentacin. Por lo tanto, las organizaciones que buscan aplicar la 12.207 pudieran desear usar estndares o procedimientos adicionales que especifiquen dichos detalles. La normativa ISO/IEC se encuentra en la actualidad desarrollando tales guas y procedimientos de evaluacin constantemente, y la ltima versin corresponde a la 12207:2004.
ISO/IEC 12207:2004 35
Este estndar ofrece un marco de referencia para los procesos de ciclo de vida del software desde el momento de su concepcin hasta su retiro del servicio. Es, en especial, apropiado para adquisiciones debido a que reconoce los diferentes roles del comprador y del proveedor [EstPia-1995] . De hecho, el estndar tiene como fin ser usado por dos partes, donde un contrato o acuerdo define el desarrollo, mantenimiento u operacin de un sistema de software. No es aplicable a la compra de productos de software tipo paquetes (o envasado).
En la mayora de los casos, la 12.207 usa el lenguaje convencional de estndares: "shall" para indicar provisiones obligatorias, "should" para recomendaciones y "may" para acciones permitidas. Puesto que el estndar se aplica tanto al comprador como al proveedor, se podra esperar que imponga requerimientos obligatorios a ambas partes. Sin embargo, su lenguaje hace una distincin sutil, aquellas provisiones que se aplican al comprador usan, en forma tpica, "will", denotando una "declaracin de propsito o intencin por una de las partes", y no un requerimiento.
En forma bsica y original, la ISO 12207 describa cinco "procesos primarios": adquisicin, suministro, desarrollo, mantenimiento y operacin. Divide los cinco procesos en "actividades", y las actividades en "tareas", mientras impone requerimientos en su ejecucin. Tambin especifica ocho "procesos de apoyo": documentacin, administracin de la configuracin, aseguramiento de la calidad, verificacin, validacin, revisin conjunta, auditora y solucin de problemas; como tambin cuatro "procesos organizacionales": administracin, infraestructura, mejoramiento y recursos humanos (entrenamiento) [EstPia-1995] [Lopez- 2012] . Vase la Figura 1.12. Ms detalles actualizados, se pueden encontrar en la literatura especializada.
El estndar ISO pretende que las organizaciones adecen estos diecisiete procesos para que alcancen el objetivo final de sus proyectos particulares, eliminando todas las actividades no aplicables; y define el acatamiento de la 12.207 como la ejecucin de esos procesos, actividades y tareas seleccionadas por un ajuste a la medida. Como los estndares estn sometidos continuamente a revisiones y mejoras, la ltima versin de la ISO/IEC 12207:2004, contempla diez procesos de soporte, y siete procesos organizacionales.
36
Figura 1.12.: Procesos de la Norma ISO/IEC 12.207
El estndar es independiente de tecnologas y de metodologas de desarrollo y son tiles para cualquier forma de modelo de ciclo de vida, por ejemplo, cascada, incremental, espiral, etc. De hecho, una de las responsabilidades del proveedor del servicio es la de seleccionar un modelo de ciclo de vida y mapear los requerimientos del estndar 12207 a ese ciclo de vida en particular, por lo que sus actividades pueden ser llevadas a cabo de forma secuencial, repetida y combinndolas acorde a la seleccin del proyecto del modelo del ciclo de vida.
Finalmente, el estndar 12207 se relaciona con normas de calidad, especialmente la ISO 9001: Sistemas de calidad modelos para la garanta de calidad en la concepcin, desarrollo, produccin, instalacin y prestacin de servicios. Adems, tiene una gran relacin con la segunda parte de la norma ISO/IEC 15504: Tecnologas de la informacin - Evaluacin de los procesos de software.
37 1.3. EL PROCESO UNIFICADO DE RATIONAL (RUP).
1.3.1. INTRODUCCION.
En la actualidad, la utilizacin de ciertas metodologas para el desarrollo de aplicaciones de software es casi imposible omitirla, debido a la gran necesidad de controlar el conjunto de variables que conlleva todo el proceso de desarrollo, y de estar en competitividad en todo momento. Como se ha planteado en esta Unidad, es de suma importancia conocer el modo como se interrelacionan metodologas con estndares y herramientas siguiendo un nico objetivo, el cual consiste en la elaboracin de aplicaciones de software de manera eficiente, ordenada y con el menor nmero de defectos.
Las metodologas y estndares utilizados en un desarrollo de software nos proporcionan las guas para poder conocer todo el camino a recorrer desde antes de empezar la implementacin, con lo cual se asegura la calidad del producto final, as como tambin el cumplimiento en la entrega del mismo en un tiempo estipulado. Una metodologa conocida como RUP nos proporciona disciplinas (o flujos de trabajo) en las cuales se encuentran productos entregables, con lo cual se podr contar con guas para poder documentar e implementar de una manera fcil y eficiente, todas las fases para un buen desarrollo. Es de suma importancia elegir la metodologa adecuada, as como las herramientas de implementacin adecuadas, es por ello que la metodologa RUP basada en UML nos proporciona todas las bases para llevar al xito la elaboracin del software.
Las siglas RUP en ingles significa Rational Unified Process (Proceso Unificado de Rational). Es un producto del proceso de ingeniera de software que proporciona un enfoque disciplinado para asignar tareas y responsabilidades dentro de una organizacin de desarrollo de software. Es un ejemplo de un modelo de proceso moderno; y se le considera hbrido, pues rene varios elementos; y su meta es asegurar la produccin del software de alta calidad que resuelve las necesidades de los usuarios dentro de un presupuesto y tiempo establecidos. Esta metodologa RUP (marca registrada por IBM), se fue desarrollando y refinando con el tiempo, basado en numerosos proyectos desde los aos 1970 a 1980; mejorando finalmente con la incorporacin del concepto del modelado del negocio, y adoptando a UML como lenguaje de modelado. Una visin resumida de su historia se muestra en la Figura 1.13. [Palen-2011].
38
Figura 1.13.: Evolucin de la Metodologa RUP.
La metodologa RUP persigue una forma disciplinada de asignar tareas y responsabilidades (quin hace qu, cundo y cmo). Adems: Pretende implementar las mejores prcticas en Ingeniera de Software; Fomenta el desarrollo iterativo; Sistematiza la administracin de los requisitos; Persigue el uso de arquitectura basada en componentes; Asegura un adecuado control de cambios; Establece la verificacin de la calidad del software.
Se basa en ciertos Principios de Desarrollo, los que pueden conocerse en detalle, en la literatura especializada [Palen-2011] [Limach-2012] : Adaptar el proceso Equilibrar prioridades Demostrar valor iterativamente Colaboracin entre equipos Elevar el nivel de abstraccin Enfocarse en la calidad
39
1.3.2. CICLO DE VIDA.
El ciclo de vida consiste en una serie de ciclos, cada uno de los cuales produce una nueva versin del producto; cada ciclo est compuesto por fases y cada una de estas fases est compuesta por un nmero de iteraciones. El RUP tiene tres dimensiones (o perspectivas):
El eje horizontal representa tiempo y demuestra los aspectos del ciclo de vida del proceso; representa el aspecto dinmico del proceso, y se expresa en trminos de fases, de iteraciones, y la finalizacin de las fases. El eje vertical representa las disciplinas, que agrupan actividades definidas lgicamente por la naturaleza; representa el aspecto esttico del proceso, y se describe en trminos de componentes de proceso, las disciplinas, las actividades, los flujos de trabajo, los entregables, y los roles. Y una perspectiva prctica, que sugiere un conjunto de buenas prcticas a utilizar durante el proceso de software.
Figura 1.14.: Dimensiones de la Metodologa RUP.
40
En la Fig. 1.14. se ensea cmo vara el nfasis de cada disciplina en un cierto plazo en el tiempo, y durante cada una de las fases. Por ejemplo, en iteraciones tempranas, se pasa ms tiempo en requerimientos, y en las ltimas iteraciones se pasa ms tiempo en poner en prctica la realizacin del proyecto en si (implementacin y pruebas).
El ciclo de vida del software, segn la metodologa RUP se descompone en cuatro fases secuenciales dentro de las cuales se realizan varias iteraciones en nmero variable segn el proyecto y en las que se hace un mayor o menor hincapi en las distintas actividades. Las primeras iteraciones (en las fases de Inicio y Elaboracin) se enfocan hacia la comprensin del problema y la tecnologa, la delimitacin del mbito del proyecto, la eliminacin de los riesgos crticos, y al establecimiento de una base de inicio. Las fases son:
FASE DE INICIO Se define el mbito y los objetivos del proyecto; se define la funcionalidad y las capacidades del producto a obtener. Durante esta fase de inicio las iteraciones se centran con mayor nfasis en las actividades de modelamiento de la empresa (negocio) y en sus requerimientos.
FASE DE ELABORACIN Tanto la funcionalidad como el dominio del problema se estudian en profundidad. Se define una arquitectura bsica, y se planifica el proyecto considerando los recursos disponibles. Durante esta fase de elaboracin, las iteraciones se centran en el desarrollo de la base del diseo, acotan ms los flujos de trabajo de los requerimientos, el modelo de la organizacin, y el anlisis, diseo y una parte de implementacin orientada como base de la construccin.
FASE DE CONSTRUCCIN El producto se desarrolla a travs de iteraciones donde cada iteracin involucra tareas de anlisis, diseo e implementacin. Las fases de estudio y anlisis slo generaron una arquitectura bsica, que es refinada aqu de manera incremental conforme se construye (se permiten cambios en la estructura). Gran parte del trabajo es programacin y pruebas. Esta fase proporciona un producto construido junto con la documentacin. Se documenta tanto el sistema construido como el manejo (operacin) del mismo.
41 Durante esta fase de construccin, se lleva a cabo la construccin del producto por medio de una serie de iteraciones, en las cuales se seleccionan algunos Casos de Uso, se redefine su anlisis y diseo, y se procede a su implantacin y pruebas. En esta fase se realiza una pequea cascada para cada ciclo, se realizan tantas iteraciones hasta que se termine una nueva implementacin del producto.
FASE DE TRANSICIN Se libera el producto y se entrega al usuario para un uso real. Se incluyen tareas de marketing, empaquetado atractivo, instalacin, configuracin, entrenamiento, soporte, y mantenimiento. Los manuales de usuario se completan y se refinan con la informacin anterior; estas tareas se realizan tambin en iteraciones Durante esta fase de transicin se busca garantizar que se tiene un producto preparado para su entrega final al usuario.
El RUP es un producto de Rational (empresa de IBM). Se caracteriza por ser iterativo e incremental, est centrado en la arquitectura y guiado por los casos de uso (como se explica ms adelante). Incluye entregables (que son los productos tangibles del proceso como por ejemplo, el modelo de casos de uso, el cdigo fuente, etc.) y roles (papel que desempea una persona en un determinado momento; una persona puede desempear distintos roles a lo largo del proceso).
Como se aprecia en la Figura 1.14., el RUP comprende 2 aspectos importantes por los cuales se establecen las disciplinas (o flujos de trabajo): Proceso: Las etapas consideradas en esta seccin son: Modelado de negocio Requisitos Anlisis y Diseo Implementacin Pruebas Despliegue Soporte: En esta parte se consideran las siguientes etapas: Gestin del cambio y configuraciones Gestin del proyecto Entorno
42
La metodologa RUP es ms apropiada para proyectos grandes (aunque tambin pueden se menores, dado que requiere un equipo de trabajo capaz de administrar un proceso complejo en varias etapas. En proyectos pequeos, es posible que no se puedan cubrir los costos de dedicacin del equipo de todos los profesionales necesarios.
El RUP define, para el xito de los proyectos, una gran cantidad de roles:
Analistas: tales como: Analista de procesos de negocio; Diseador del negocio; Analista de sistema; y/o Especificador de requisitos. Desarrolladores: tales como: Arquitecto de software; Diseador (de mdulos; de interfaz de usuario; de base de datos); Implementador y/o Integrador. Gestores: tales como: Jefe de proyecto; Jefe de control de cambios; Jefe de configuracin; Jefe de pruebas; Jefe de despliegue; Ingeniero de procesos; Revisor de gestin del proyecto; y/o Gestor de pruebas. Apoyo: tales como: Documentador tcnico; Administrador de sistema; Especialista en herramientas; Desarrollador de cursos; y/o Diseador grfico. Especialista en pruebas: Especialista en Pruebas (tester) Analista de pruebas Diseador de pruebas. Otros roles: Stakeholders. Revisores ; Coordinador de revisiones Revisor tcnico
Como se mencion, el RUP, junto con describirse desde una perspectiva dinmica (que muestra las fases del modelo sobre el tiempo), y una perspectiva esttica (que muestra las actividades del proceso que se representan), tambin se incluye una perspectiva prctica, que sugiere buenas prcticas a utilizar durante el proceso.
La perspectiva prctica en el RUP describe buenas prcticas de la ingeniera del software que son aconsejables en el desarrollo de sistemas. Se recomiendan seis buenas prcticas fundamentales [Limach-2012] :
43 1. Desarrolle el software de forma iterativa. Planifique incrementos del sistema basado en las prioridades del usuario y del desarrollo, y entregue las caractersticas del sistema de ms alta prioridad al inicio del proceso de desarrollo. 2. Gestione los requerimientos. Documente explcitamente los requerimientos del cliente y mantngase al tanto de los cambios de estos requerimientos. Analice el impacto de los cambios en el sistema antes de aceptarlos. 3. Utilice arquitecturas basadas en componentes. Estructure la arquitectura del sistema en componentes existentes y reutilizables, que facilitan el desarrollo rpido. 4. Modele el software visualmente. Utilice modelos grficos UML para presentar vistas estticas y dinmicas del software. 5. Verifique la calidad del software. Asegure que el software cumple los estndares de calidad organizacionales (propios, o externos). 6. Controle los cambios del software. Gestione los cambios del software usando un sistema de gestin de cambios y procedimientos y herramientas de gestin de configuraciones (incluya el rol del SCM).
El RUP no es un proceso apropiado para todos los tipos de desarrollo sino que representa una nueva generacin de procesos genricos. Las innovaciones ms importantes son la separacin de fases y los flujos de trabajo, y el reconocimiento de que la utilizacin del software en un entorno del usuario es parte del proceso. Las fases son dinmicas y tienen objetivos. Los flujos de trabajo son estticos y son actividades tcnicas que no estn asociadas con fases nicas sino que pueden utilizarse durante el desarrollo para alcanzar los objetivos de cada fase.
1.3.3. CARACTERSTICAS ESENCIALES QUE DEFINEN AL RUP
Proceso Dirigido por los Casos de Uso.
Segn algunos especialistas [Palen-2011] [Limach-2012] , los Casos de Uso son una tcnica de captura de requisitos que fuerza a pensar en trminos de importancia para el usuario, y no slo en trminos de funciones que debe contemplar el Sistema. . Los Casos de Uso representan los requisitos funcionales del sistema; y se pueden definir como un fragmento de funcionalidad del sistema que proporciona al usuario un valor agregado.
44 En RUP, los Casos de Uso no son slo una herramienta para especificar los requisitos del sistema. Tambin guan su diseo, la implementacin y las pruebas. Los Casos de Uso constituyen un elemento integrador y una gua del trabajo; vase la Figura 1.15.
Los Casos de Uso no slo inician el proceso de desarrollo sino que proporcionan un hilo conductor, permitiendo establecer trazabilidad entre los productos entregables que son generados en las diferentes actividades del proceso de desarrollo.
Figura 1.15.: Casos de Uso en el Modelo RUP.
Proceso Centrado en la Arquitectura.
La arquitectura de un sistema es la organizacin o estructura de sus partes ms relevantes, lo que permite tener una visin comn entre todos los involucrados (ingenieros, desarrolladores y usuarios), y una perspectiva clara del sistema completo, necesaria para controlar todo el proceso de desarrollo. La arquitectura involucra los aspectos estticos y dinmicos ms significativos del sistema; est relacionada con la toma de decisiones que indican cmo tiene que ser construido el sistema, y ayuda a determinar en qu orden. Adems la definicin de la arquitectura debe tomar en consideracin elementos de calidad del sistema, rendimiento, reutilizacin y capacidad de evolucin por lo que debe ser flexible durante todo el proceso de desarrollo. La arquitectura se ve influenciada por la plataforma de software, el sistema operativo, el gestor de bases de datos, los protocolos, y otras consideraciones de desarrollo como los sistemas heredados (antiguos).
45 Proceso Iterativo e Incremental.
El equilibrio correcto entre los Casos de Uso y la arquitectura es algo muy parecido al equilibrio que debe existir entre la forma y la funcin en el desarrollo del producto, lo cual se consigue con el tiempo. Para esto, la estrategia que se propone en RUP es tener un proceso iterativo e incremental, en donde el trabajo se divide en partes ms pequeas o mini proyectos; permitiendo que el equilibrio entre los casos de Uso y la arquitectura se vaya logrando durante cada mini proyecto, as durante todo el proceso de desarrollo. Cada mini proyecto se puede ver como una iteracin (un recorrido ms o menos completo a lo largo de todos los flujos de trabajo fundamentales), del cual se obtiene un incremento que produce un crecimiento en el producto. Una iteracin puede realizarse por medio de una cascada, como se muestra en la Figura 1.16. Se pasa por los flujos fundamentales (Requisitos, Anlisis, Diseo, Implementacin y Pruebas). Tambin existe una planificacin de la iteracin, un anlisis de la iteracin y algunas actividades especficas de la iteracin; y al finalizar se realiza una integracin de los resultados con lo obtenido de las iteraciones anteriores. El proceso iterativo e incremental consta de una secuencia de iteraciones. Cada iteracin aborda una parte de la funcionalidad total, pasando por todos los flujos de trabajo relevantes y refinando la arquitectura. Cada iteracin se analiza cuando termina; determinando si han aparecido nuevos requisitos o han cambiado los existentes, afectando a las iteraciones siguientes.
Figura 1.16.: El RUP es un proceso iterativo e incremental.
46 En resumen, la metodologa RUP divide el proceso en cuatro fases, dentro de las cuales se realizan varias iteraciones, en un nmero variable segn el proyecto, y en las que se hace un mayor o menor hincapi en los distintas actividades. El esfuerzo humano asociado a las disciplinas (flujos), va variando segn la fase en la que se encuentre el proyecto.
Para cada iteracin se seleccionan algunos Casos de Uso, se refina su anlisis y diseo y se procede a su implementacin y pruebas. Se realiza una pequea cascada para cada ciclo; y se realizan tantas iteraciones hasta que se termine la implementacin de la nueva versin del producto.
Finalmente, el alumno deber comprender que, existen varios modelos para el proceso de desarrollo de software, y que estos modelos se van perfeccionando constantemente; y adems, complementndose entre ellos. Lo importante, es que para desarrollar un buen software, se hace necesario contar con un modelo y una metodologa para desarrollarlo.
47 REFERENCIAS
[ANTIMA-1997] = Antimn, Patricio: Mejoramiento de los Procesos de Documentacin y Calidad del Software en la Industria Chilena; Memoria Ttulo Ingeniero Civil Informtico, Depto.de Informtica; U.T.F.S.M.; Valparaso, 1997.
[BARTLE-1991] = Bartley, Steven: Cuanto vale el Software; Suplemento Computacin N 131; Diario Estrategia; Santiago, Junio 1991.
[BORIA-1988] = Boria, Jorge: INGENIERIA DE SOFTWARE; Editorial Kapelutz; Buenos Aires, 1988.
[CABRE-2013] = Cabrera, Armando et. al.: Procesos de Ingeniera de Software; Publicacin de la Universidad de Ecuador. Extrado el 15.01.2013 de: www.slideshare.net/rfsolano/procesos-de-ingenieria-del-software
[DAVIS-1995] = Davis, Alan M.: 201 PRINCIPLES OF SOFTWARE DEVELOPMENT; McGraw-Hill, Inc., New York, 1995 .
[ESTPIA-1995] = Esteban, Jos & Piattini, Mario: Procesos del Ciclo de Vida del Software, Revista Novtica, N 118 ; Barcelona, Noviembre/Diciembre 1995 . Pgs. 39-44.
[GUERRE-1994] = Guerrero, Jos; Calidad del Proceso de Desarrollo de Software; XVII Taller de Ingeniera de Sistemas, Universidad de Chile; Santiago, Julio 1994.
[GUERRE-1995] = Guerrero, Luciano: Procesos de Calidad en la Ingeniera de Software; Seminario, XVIII Taller de Ingeniera de Sistemas, Universidad de Chile; Santiago, 1995.
[INN90-1995] = Instituto Nacional de Normalizacin: Norma NCh-ISO 9000-1, Parte 1: Gua para la Seleccin y Uso; I.N.N.; Santiago, 1995 .
[IPL-1996] = Staff Editorial: Software Testing and Software Development Life-Cycles; Serie Software Testing WhitePapers, Information Processing Ltd.; Bath, Gran Bretaa; Septiembre 1996.
[ISOIEC-1995] = International Standards Organization - Internat. Electrothecnical Comis-sion; Standard 12207: Software Lyfe-Cycle Processes; ISO/IEC Press; Ginebra 1995.
[JENNER-1995] = Jenner, Michael; SOFTWARE QUALITY MANAGEMENT AND ISO 9001; John Wiley, Inc.; New York, 1995 .
[KEYES-1995] = Keyes, Jessica; SOLVING THE PRODUCTIVITY PARADOX; Editorial McGraw-Hill; New York, 1995. Capits. 1, 13 y 14 .
[LIMACH-2012] = Limachi, Bernando: Metodologa RUP; Material del Curso Anlisis de Sistemas II; Extrado el 15.01.2013 de: www.slideshare.net/bernardolimachi/metodologia-rup-14288208
[LOPEZ-2012] = Lopez, Marcos: Ciclo de Vida del Software; Tema 2; Material del Curso Ingeniera de Software I; Universidad Rey Juan Carlos; Madrid. Extrado el 15.01.2013 de: http://www.kybele.etsii.urjc.es/docencia/IS4/ 48
[MACIAS-1997] = Macas, Santiago: Rediseo del Proceso de Software en un Entorno de Produccin Automtico y Formal Basado en Objetos; Tesis de Magister en Ingeniera Informtica, Depto.de Informtica; U.T.F.S.M.; Valparaso, Enero 1997.
[NTP-2006] = Staff : NTPISO/IEC 12207; Comisin de Reglamentos Tcnicos y Comerciales Lima, Per; 2006. Extrado el 15.01.2013 de: www.bvindecopi.gob.pe/normas/isoiec12207.pdf
[PALEN-2011] = Palencia, Johanna, et. al.: RUP: Rational Unified Process; Material Curso de Ingeniera de Software. Extrado el 15.01.2013 de: www.slideshare.net/angel2365/exposrup
[PARRA-1995] = Parra, Claudio: SPM : Modelamiento del Proceso de Software; Memoria Ttulo Ingeniero Civil Informtico, Depto.de Informtica; U.T.F.S.M.; Valparaso, 1995.
[PRESS-1993A] = Pressman, Roger: INGENIERIA DEL SOFTWARE; 3ra. edicin; Editorial McGraw-Hill; New York, 1993. Capits. 1 y 10.
[PRESS-1993B] = Pressman, Roger: A MANAGERS GUIDE FOR SOFTWARE MANAGER; Editorial McGraw-Hill; New York, 1993. Capts. 1 y 2 .
[PRESS-2001] = Pressman, Roger: INGENIERIA DEL SOFTWARE, UN ENFOQUE PRACTICO; 5ta. edicin; Editorial McGraw-Hill; Madrid, 2001. Capits. 1, 2 y Parte 5ta.