DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS
CONSTRUCCIN DEL SOFTWARE.
TESIS
QUE PARA OPTAR POR EL TTULO DE:
LICENCIADO EN CIENCIAS DE LA INFORMTICA
P R E S E N T A:
DAVID ARMANDO LEN MAYA
Mxico, D.F. 2010.
INDICE RESUMEN .......................................................................................................... I INTRODUCCIN .............................................................................................. IV
CAPTULO I FUNDAMENTOS DE CONSTRUCCIN DE SOFTWARE
1.1 ESCENARIO PARA LA CONSTRUCCIN DEL SOFTWARE. ..................................... 2
1.2 MINIMIZAR LA COMPLEJIDAD. .......................................................................... 4 1.2.1 PROPIEDADES DE LA COMPLEJIDAD. ......................................................... 5 1.2.2 CONSECUENCIAS DE LA COMPLEJIDAD ILIMITADA. ...................................... 7 1.2.3 TCNICAS PARA MINIMIZAR LA COMPLEJIDAD. ........................................... 8
1.3 PREVER EL CAMBIO. ..................................................................................... 10 1.3.1 TIPOS DE CAMBIO. ................................................................................ 11 1.3.2 PRINCIPIOS DEL CAMBIO........................................................................ 12 1.3.3 PROBLEMAS DEL CAMBIO. ..................................................................... 14 1.3.4 METODOLOGA PARA LA PREVENCIN DE CAMBIOS. ................................ 15 1.3.4.1 Especificacin de Lneas Base. .............................................. 16 1.3.4.2 Identificacin de Objetos. ........................................................ 17 1.3.4.3 Control de Versiones. .............................................................. 18 1.3.4.4 Control Estricto de Cambios. .................................................. 20
1.4 CONSTRUCCIN PARA LA VERIFICACIN. ........................................................ 22 1.4.1 MODEL CHECKING (COMPROBACIN DE MODELOS). ................................ 23 1.4.2 INTERPRETACIN ABSTRACTA. ............................................................... 25 1.4.2.1 Testing estructural................................................................... 27
1.5 ESTNDARES EN LA CONSTRUCCIN. ............................................................. 28
CAPTULO II ADMINISTRACIN DE LA CONSTRUCCIN DEL SOFTWARE
2.1 MODELOS DE CONSTRUCCIN TRADICIONALES. .............................................. 31 2.1.1 MODELO CASCADA. .............................................................................. 31 2.1.2 MODELO DE DESARROLLO INCREMENTAL. .............................................. 32 2.1.3 MODELO DE DESARROLLO EVOLUTIVO. .................................................. 34 2.1.4 MODELO DE PROTOTIPADO DE REQUERIMIENTOS. ................................... 35 2.1.5 MODELO ESPIRAL. ................................................................................ 37 2.1.6 MODELO CONCURRENTE. ...................................................................... 39
2.2 METODOLOGAS DE CONSTRUCCIN EN LA ACTUALIDAD. ................................ 40 2.2.1 METODOLOGA RUP (RATIONAL UNIFIED PROCESS- PROCESO UNIFICADO RACIONAL). ........................................................................................................ 41 2.2.2 METODOLOGA ASML (A SYSTEM MODELLING LANGUAGE-SISTEMA DE LENGUAJE MODELADO). ...................................................................................... 43 2.2.2.1 El Modelo Esencial . ................................................................ 44 2.2.2.2 El Modelo de Implementacin. ................................................ 45 2.2.3 METODOLOGA CASE (COMPUTER AIDED SYSTEMS ENGINEERING). ........ 47 2.2.4 METODOLOGA XP (EXTREME PROGRAMING). ......................................... 49 2.2.5 METODOLOGA MSF (MICROSOFT SOLUTION FRAMEWORK). .................... 51 2.2.6 SELECCIONANDO MODELOS DE CONSTRUCCIN. .................................... 53
2.3 PLANIFICACIN DE LA CONSTRUCCIN. .......................................................... 55 2.3.1 OBJETIVOS DE LA PLANIFICACIN. .......................................................... 57 2.3.2 ASPECTOS ASOCIADOS AL PROYECTO. ................................................... 57 2.3.3 MODELOS DE ESTIMACIN. .................................................................... 61
2.4 MEDICIN DE LA CONSTRUCCIN. .................................................................. 62 2.4.1 ARQUITECTURA DE UN PROCESO DE MEDIDA DE SOFTWARE. .................... 65 2.4.2 MODELO DE PROCESO PARA LA DEFINICIN DE MEDIDAS DE SOFTWARE. .. 67
CAPTULO III CONSIDERACIONES PRCTICAS
3.1 DISEO DE LA CONSTRUCCIN. ..................................................................... 71 3.1.1 TCNICAS DE DISEO. .......................................................................... 71 3.1.2 DISEO DE INTERACCIONES CON LA BASE DE DATOS. .............................. 72 3.1.3 DISEO DE ARCHIVOS. .......................................................................... 73 3.1.4 DISEO DE LA SALIDA. .......................................................................... 73
3.2 LENGUAJES DE CONSTRUCCIN. .................................................................... 74 3.2.1 CARACTERSTICAS. ............................................................................... 74 3.2.2 PARADIGMAS. ....................................................................................... 75 3.2.2.1 Clasificacin de Paradigmas. .................................................. 76 3.2.3 FACTORES EN LA ELECCIN DE UN LENGUAJE DE CONSTRUCCIN. ........... 77 3.2.4 CLASIFICACIN DE LOS LENGUAJES DE CONSTRUCCIN. .......................... 78 3.2.5 VISUAL STUDIO.NET VS C#. ................................................................. 80 3.2.5.1 Visual Studio.NET. .................................................................. 80 3.2.5.2 Lenguaje C#. ........................................................................... 81
3.4 PRUEBA DE CONSTRUCCIN. ......................................................................... 90 3.4.1 MDULOS INDEPENDIENTES. .................................................................. 92 3.4.2 PRUEBAS DE CARGA Y RENDIMIENTO. ..................................................... 92 3.4.3 SUBCONTRATACIN DE PRUEBAS. .......................................................... 93
3.5 REUSABILIDAD. ............................................................................................. 94 3.5.1 BENEFICIOS DE LA REUSABILIDAD. ......................................................... 94 3.5.2 FACTORES DE LA REUSABILIDAD. ........................................................... 96 3.5.3 NIVELES DE REUSABILIDAD. ................................................................... 97 3.5.4 REUSABILIDAD ORIENTADA A OBJETOS. .................................................. 98 3.5.4.1 BIBLIOTECAS DE CLASES. ................................................................... 99 3.5.4.2 Polimorfismo. ........................................................................ 103 3.5.4.3 Clasificacin de Clases. ........................................................ 103 3.5.4.4 Patrones de Diseo............................................................... 104 3.5.4.5 Arquitecturas. ........................................................................ 106
3.6 CALIDAD EN LA CONSTRUCCIN................................................................... 108 3.6.1 PRINCIPIOS BSICOS DE CALIDAD. ....................................................... 109 3.6.2 CONTROL DE CALIDAD. ....................................................................... 110 3.6.2.1 Gestin de Calidad................................................................ 111 3.6.2.2 Niveles de Calidad. ............................................................... 113
I RESUMEN CAPTULO I FUNDAMENTOS DE CONSTRUCCIN DEL SOFTWARE
En este captulo se dan a conocer los aspectos generales que se deben considerar previo el desarrollo del software, tales como prever los posibles cambios en las necesidades del negocio, esto es muy importante ya que todo desarrollo debe ser flexible y adaptable a cualquier variacin del entorno para el que va a ser til.
Existen diferentes tipos de cambio, los cuales pueden ser predecibles o impredecibles, y estos dependen de los diversos factores que rodean a las organizaciones.
Por esto mismo tambin se tienen que considerar en el desarrollo de software, sentencias y algoritmos sencillos, que permitan la modificacin y optimizacin de la aplicacin sin complicar el funcionamiento.
Un aspecto fundamental en la prevencin del cambio es el control de versiones. El control de versiones combina procedimientos y herramientas para gestionar las versiones de los objetos de configuracin creadas durante el proceso de ingeniera del software.
Por ltimo se presentarn los estndares de construccin que se deben seguir para lograr un desarrollo ptimo, que est preparado para soportar los cambios del ambiente y necesidades del negocio, as como los parmetros de factibilidad y costo de dichas modificaciones.
II CAPTULO II ADMINISTRACIN DE LA CONSTRUCCIN DEL SOFTWARE
La Administracin en la construccin del Software se basa primordialmente en la consecucin de un objetivo mediante una secuencia de pasos, los modelos de construccin proporcionan una gua para los ingenieros y desarrolladores de software con el fin de ordenar las diversas actividades tcnicas en el proyecto.
De manera tradicional, se han creado modelos de ciclo de vida de software, tales como el Modelo Cascada, De Desarrollo Incremental, De Desarrollo Evolutivo, Prototipado y Espiral, todos con sus ventajas y desventajas pero orientados a mejorar la calidad de las aplicaciones y con el objetivo de tener bases slidas que permitan un mejor proceso de Ingeniera.
En la actualidad hay que mencionar que se han creado metodologas que proporcionan una visin ms amplia del entorno en el cual se va a construir software, tales como RUP, ASML, CASE, XP y MSF.
Otro aspecto importante a considerar es la Planeacin de la Construccin, la cual depende de la anticipacin a los problemas que puedan surgir y preparando con soluciones tentativas a ellos.
El objetivo de la Planificacin del proyecto de Software es proporcionar un marco de trabajo que permita al administrador hacer estimaciones razonables de recursos costos y planificacin temporal.
Las medidas y las mtricas son herramientas muy tiles para el control de los procesos. Un proceso de medidas que acompae al proceso software y se integre con l, ayuda en la interpretacin, control y mejora de cada una de las actividades que se llevan a cabo dentro del mismo
III CAPITULO III CONSIDERACIONES PRCTICAS
Aqu se detallarn las tcnicas y principios que permiten la realizacin fsica de un sistema o aplicacin. Las cuales se basan en una serie de etapas de anlisis y transformacin de la informacin en una arquitectura de programa.
El diseo de archivos Incluye decisiones con respecto a la naturaleza y contenido del propio archivo, como si se fuera a emplear para guardar detalles de las transacciones, datos histricos, o informacin de referencia.
La seleccin de un lenguaje de programacin adecuado facilita la tarea de programacin, ya que tiene que disponer de formas adecuadas que permitan ser ledas y escritas por personas, y que a su vez resulten independientes del modelo de computadora a utilizar.
Por ltimo hay que mencionar los procesos de prueba o testing, los cuales son una herramienta que asegura que un sistema hace lo que tiene que hacer. Probar es una prctica habitual de todo proceso productivo, que bsicamente consiste en comprobar que un producto tiene las caractersticas deseadas.
Para controlar la calidad del software es necesario, ante todo, definir los parmetros, indicadores o criterios de medicin.
IV INTRODUCCIN
En la actualidad, con el avance de la tecnologa y los requerimientos cambiantes del negocio, surge la necesidad de tener herramientas automatizadas que sean eficientes y que tengan la capacidad de evolucionar.
Basados en lo anterior, el presente trabajo tiene como propsito dar a conocer los diversos escenarios que se presentan al momento de construir aplicaciones de software, desde la Ingeniera de Requerimientos, la planeacin, el desarrollo la fase de validacin y la implementacin en ambientes productivos.
Pero adems del desarrollo e implementacin es importante recalcar un aspecto fundamental en la construccin del software, el mantenimiento del mismo, ya que durante la explotacin de aplicaciones pudieran presentarse situaciones de mejoras o errores que no se tuvieron contemplados. Es por ello que se tiene que hacer nfasis en la flexibilidad que deben tener las aplicaciones para adaptarse al cambio.
Tambin resulta fundamental recalcar que debemos de recurrir a herramientas adecuadas y modelos especficos que nos permitan llevar a cabo un desarrollo funcional y adecuado para satisfacer los requerimientos, es decir, hacer anlisis previos y definir con el cliente cual es el objetivo primordial del software a construir, todo esto con el objetivo de reducir al mnimo la complejidad de dichas herramientas.
Por ello se debe tener conocimiento de la tecnologa que existe actualmente en el mercado, no podemos estancarnos en lo que ya existe, parte de la evolucin siempre ser el buscar el surgimiento de nuevas aplicaciones y estar capacitado para implementarlas en los ambientes de desarrollo y produccin.
V No se puede dejar fuera el factor calidad, ya que, adems de proporcionar prestigio ante los clientes, minimiza el trabajo y aumenta la productividad, se debe tener un control adecuado y personal debidamente capacitado para detectar errores de manera oportuna, todo esto con el objetivo de solucionar y obtener resultados antes de implementar las aplicaciones.
Los errores son menos costosos si se detectan en los ambientes de desarrollo y control de calidad que una vez instalados en los ambientes productivos.
Por ltimo se detallarn las tcnicas adecuadas para integrar en un solo proyecto de construccin de software todo el anlisis, funcionamiento, calidad y mantenimiento, ya que adems de adems de la separacin de actividades se necesita capacidad para armar cada una de las piezas del rompecabezas y que este llegue al objetivo deseado.
El objetivo principal del software ser siempre satisfacer las necesidades del negocio con el menor costo posible.
1 CAPTULO I
FUNDAMENTOS DE CONSTRUCCIN DE SOFTWARE
Para abordar el tema de una manera clara y precisa, se necesita entender el significado del trmino Construccin del Software, este se define como:
La creacin detallada de software significativo en operacin, a travs de una combinacin de actividades de prevencin de defectos, codificacin, verificacin y certificacin de calidad. 1
En la construccin intervienen prcticamente todas las disciplinas de la ingeniera de software y de la ciencia de la computacin, particularmente el conocimiento de algoritmos.
Desde luego, de las disciplinas de ingeniera, con las que ms estrechamente se relaciona la construccin es con el Diseo y la etapa de Evaluacin (pruebas). Suena redundante, pero aunque el Diseo Detallado se hace antes de Construir, mucho del diseo se realiza dentro de la actividad misma de la Construccin.
La construccin produce la mayor parte de los elementos de configuracin que necesitan administrarse en un proyecto de software, por ello est tambin estrechamente vinculada a la administracin de la configuracin de software.
Puesto que la construccin de software se apoya fuertemente en herramientas y mtodos, es la ms intensiva en el uso de herramientas, est conectada a la Ingeniera de Software, Herramientas y diversas reas del Conocimiento.
Es indispensable tener en cuenta que la calidad es lo ms importante en todas las actividades del ciclo de vida, y es por ello que donde ms ha de cuidarse esta es en el cdigo, el cual es la columna vertebral en un proyecto de software.
1 Pressman, R.S. Ingeniera del Software. Un enfoque prctico . Mc Graw Hill, Espaa 6 ed. 2006. p. 15.
2 1.1 Escenario Para la Construccin del Software. Todos los proyectos de software comienzan con una peticin del cliente, la cual nosotros interpretamos como una solicitud de requerimientos. Esta solicitud puede consistir en solucionar problemas del tipo:
Desarrollar una aplicacin para llevar la administracin de un negocio en particular. Elaborar informes que definan un conjunto de objetivos comerciales. Una especificacin que tiene que asignar una funcin o comportamiento al software ya existente.
Si existe una peticin para una aplicacin de una de las formas dichas anteriormente, en la construccin del software se aplican los siguientes pasos:
Paso 1.- Evaluar el requerimiento y determinar si la aplicacin a desarrollar es una buena herramienta para solucionar el problema en cuestin. A esto es a lo que comnmente conocemos como factibilidad.
Debido a que el cliente debe interactuar con el software en los ltimos pasos, es esencial que:
El cliente participe en la evaluacin y refinamiento del software. El cliente sea capaz de tomar decisiones del requerimiento solicitado de una forma oportuna.
Paso 2 .- Una vez evaluada la factibilidad del proyecto de software, se tiene que desarrollar una representacin abreviada de los requerimientos.
Antes de que pueda comenzar la construccin de un software, debemos representar de manera genrica las funciones principales y de informacin de la aplicacin, esto conllevar a desarrollar un mtodo razonable de divisin de procedimientos (Modulacin).
3 Paso 3.- Despus de que se haya revisado la representacin de los requerimientos, se crea un conjunto de especificaciones de diseo generales para el software a desarrollar.
El Diseo debe ocurrir antes de que comience la construccin del software. Aunque hay que sealar que el diseo se enfoca hacia la arquitectura a nivel superior, en vez de hacia el diseo de procedimientos detallado.
Paso 4.- El software se desarrolla, se valida y se corrige. Idealmente, los mdulos de construccin de software existen en el programa final. Esto resulta de gran utilidad en la fase de pruebas, ya que en caso de presentar errores, es mucho ms fcil localizar el punto donde se est presentando dicha falla.
Paso 5.- El software evaluado, se presenta al cliente, el cual realiza otra serie de pruebas de acuerdo a lo que el ha solicitado y sugiere modificaciones.
Es aqu donde el cliente puede examinar una representacin implementada de los requerimientos de la aplicacin, sugerir modificaciones que harn al producto cumplir mejor las necesidades reales.
Paso 6.- Los pasos 4 y 5 entran en un ciclo repetitivo hasta que todos los requerimientos estn plasmados en la nueva aplicacin o hasta que el software haya evolucionado hacia un sistema definitivo.
La construccin del software puede ser conducida con dos objetivos en mente:
1) Requerimientos traducidos en la produccin del programa mediante el uso de mtodos y tcnicas de programacin. 2) Suministrar un proceso continuo que pueda conducir al desarrollo evolutivo del software. 2
Figura No. 1.- Desglose de los Elementos que Intervienen en la Construccin del Software. 3
Los fundamentos de la Construccin del Software Incluyen: Minimizar la Complejidad. Prever el Cambio. Construccin para la Verificacin. Estndares en la Construccin. 4
A continuacin se explicar la aplicacin de estos fundamentos.
1.2 Minimizar la Complejidad. El problema principal cuando los Ingenieros de Software tratan de codificar los requerimientos del usuario a Lenguaje Mquina radica en tener estructuras e informacin complejas, sobre todo cuando la construccin se realiza durante los perodos largos de tiempo.
3 2006- Swebok_Guide_2006 (Archivo en formato PDF) Profesor: Sergio Fuenlabrada Velzquez. 4 2006- Swebok_Guide_2006 (Archivo en formato PDF) Profesor: Sergio Fuenlabrada velsquez. Construccin del Software Fundamentos en la Construccin de Software Consideraciones Prcticas Administracin de la Construccin Minimizar la Complejidad
Prever el Cambio
Construccin para la Verificacin
Estndares en la Construccin
Modelos de construccin Planificacin de construccin Medicin de construccin Diseo de construccin Lenguajes de construccin Codificacin Prueba de construccin Reusabilidad Calidad de construccin La integracin
5 Estrictamente, la Complejidad se define como:
Una propiedad intrnseca de los objetos sin tomar en cuenta la percepcin de un observador externo. 5
Muchos peligros nuevos son relacionados a la complejidad en los sistemas. Ya que sta dificulta la identificacin de las causas de los errores.
Una paradoja es que la gente quiere gastar mucho ms dinero en la complejidad pero no en la sencillez. Las computadoras frecuentemente permiten construir dispositivos ms interactivos, ms acoplados, y ms susceptibles a los errores, y pueden introducir complejidad innecesaria y peligrosa.
La complejidad del software se incrementa constantemente. El software es solicitado para ejecutar las tareas demandantes de hoy y est presente en todos los sistemas que van desde los ms sencillos hasta los de misin crtica.
Las aplicaciones de software son complejas porque modelan la complejidad del mundo real. En estos das, las aplicaciones tpicas son muy grandes y complejas para que un individuo las entienda y, por ello, lleva gran tiempo implementar software.
Es conveniente hacer un anlisis de la complejidad, sus propiedades, los tipos de esta que pueden surgir y como resolverlos, a continuacin se detallarn estos puntos:
1.2.1 Propiedades de la Complejidad.
1) No Negativa.- Siempre existe como parte de un diseo de un sistema. 2) Nula.- No hay relaciones dependientes entre los elementos de un sistema.
5 JOHNSON, Bruce. Flexible Software Design. Ed Mc Graw Hill. 2005, pp.440.
6 En algunos casos, el agregar relaciones entre componentes puede ayudar a entender ms al sistema. Esto es desde luego cierto, pero lo que se mejora es el entendimiento de el sistema y no la complejidad.
La complejidad est basada en los siguientes principios:
Principio No. 1.- La complejidad de un sistema debe ser igual o mayor que la suma de las complejidades de cualquiera de sus mdulos. Principio No. 2.- La complejidad de un sistema nunca disminuir cuando las relaciones entre sus componentes aumenten.
3) No Sensitiva.- Es decir, un sistema y las relaciones entre sus componentes no cambian si cambiamos la forma de representarlos. 6
La complejidad determina el entendimiento de el sistema y puede ayudar a pronosticarlo, pero no es el nico elemento que se deba de usar para medir el entendimiento del sistema.
Esto nos lleva a tomar en cuenta uno de los factores ms importantes en la construccin de software: reduccin al mnimo de la complejidad.
La complejidad en la construccin del software se divide en 4 tipos:
Complejidad en el Dominio del Problema. Complejidad en la Administracin del Proyecto. Complejidad de Flexibilidad. Complejidad del Comportamiento.
A continuacin se dar una breve descripcin de cada uno de estos tipos:
Complejidad en el Dominio del Problema.- Existe confusin o falta de entendimiento entre usuarios y desarrolladores. No hablan el mismo idioma.
6 E. J. Weyuker, "Evaluacin de la Complejiadad del Software" Mc Graw Hill, 6 ed 2001. pp. 1357-1365.
7 Complejidad en la Administracin del Proyecto.- La tarea del equipo de desarrollo es proporcionar al usuario un enfoque se simplicidad aunque se trate de un sistema muy complejo.
Complejidad de Flexibilidad.- El equipo de desarrollo se puede ocupar de todos los mdulos del proyecto sin necesidad de ayuda de otros profesionales.
Complejidad del Comportamiento.- Cualquier cambio externo puede afectar el estado interno de modo ms brusco. 7
1.2.2 Consecuencias de la Complejidad Ilimitada.
Mayor Riesgo.- Entre ms complejo es el sistema, es ms riesgoso aplicar cambios ya que se puede afectar completamente su funcionamiento. Gran Inversin de Tiempo y Recursos Humanos.- Lo cual provoca a su vez mayor inversin costo-capital y menor productividad ya que provocara retraso de otros posibles proyectos. Mayor Planeacin.- Mayor anlisis y diseo de un modelado ms amplio para minimizar el efecto del mantenimiento y la evolucin. Sistemas altamente jerarquizados.- Varios subsistemas relacionados, lo cual ocasiona mayor dependencia de un procedimiento con otro.
La complejidad es como casi todo. Hay complejidad mala y hay complejidad buena. La complejidad mala es la que no controlamos, la que puede con nosotros. La complejidad buena es la que diseamos y controlamos, de forma intencionada, para resolver algn problema.
En la construccin del software, la reduccin de la complejidad se alcanza haciendo nfasis en la creacin del cdigo simple y legible en lugar de inteligente.
8 La minimizacin de la complejidad se logra con hacer uso estndares y con tcnicas especficas. A continuacin se explicarn algunas de esas tcnicas.
1.2.3 Tcnicas para Minimizar la Complejidad.
1) El diseo Modular.- Desarrollo paralelo de las diferentes partes de un sistema; vamos que es ideal para el proceso de codificacin abierta donde trabajan varias personas en un proyecto.
El Diseo Modular debe de estar basado en el principio de ocultamiento de la informacin, el cual sugiere que:
Los mdulos se han de caracterizar por decisiones de diseo que los oculten unos a otros; es decir, deben especificarse y disearse de forma que la informacin dentro de un mdulo sea inaccesible a otros mdulos que no necesitan tal informacin. 8
Algunos aspectos importantes de la modulacin son:
Reglas Correspondencia directa. Pocas interfaces. Interfaces pequeas. Interfaces explicitas. Ocultacin de la informacin.
2) La independencia Funcional de los Mdulos.- La cual nace directamente de la modularidad, de la abstraccin y ocultamiento de la informacin, esto se puede afirmar que se adquiere desarrollando mdulos con una clara funcin y que no tengan excesiva interaccin con otros mdulos.
Se trata pues de disear software de forma que cada mdulo se centre en una funcin especfica de los requisitos y tenga una interfaz sencilla, cuando se ve desde otras partes de la estructura del software.
El software con independencia funcional es fcil de desarrollar porque su funcin puede ser divida y se simplifican las interfases (con las implicaciones que conlleva cuando el desarrollo es realizado por un equipo).
Los mdulos independientes son fciles de mantener y de probar ya que limitan los efectos secundarios, reduce la propagacin de errores y fomenta la reusabilidad de cdigo.
3) Cohesin.- Se puede definir como una medida de funcionalidad de un mdulo; es una extensin del concepto de ocultamiento de informacin.
Un mdulo slo debe tener una funcin especfica, en esto consiste la cohesin, bsicamente se trata de evitar que los mdulos sean solo una agrupacin de lneas de cdigo y debe de tender a que los procedimientos de dicho mdulo se concentren en la funcin especfica en el rea de una estructura de datos para la que fue diseado.
9 Pleeger. Ingeniera del Software: Teora y prctica. Pearson Education.Mxico 2003 pp.55.
10 Un principio para establecer el grado de cohesin nos dice:
Escribir una frase que describa el propsito del mdulo y examinarlo; si la frase no contiene un objeto especfico sencillo a continuacin del verbo lo ms normal es que estemos en la banda baja de cohesin. 10
4) Acoplamiento.- Es un grado de interdependencia relativa entre mdulos, depende de la complejidad de las relaciones entre los mismos, del punto en el que se hace una llamada al mdulo y de los datos que pasan a travs del enlace o llamada. El objetivo es lograr una interrelacin sencilla, es decir, acoplamiento bajo, ms fcil de comprender y menos propenso a una cadena de errores a lo largo del sistema.
Como conclusin en este sentido minimizar la complejidad significa tener una cohesin alta y un acoplamiento bajo.
1.3 Prever el Cambio.
La mayora de las aplicaciones cambia en un cierto plazo, y la anticipacin al cambio maneja muchos aspectos de la construccin del software.
El software forma parte inevitablemente de los ambientes externos del cambio, y los cambios en esos ambientes externos afectan al software de maneras diversas.
El prever el cambio distingue al software de otros aspectos de la ingeniera. Se basa en el la propiedad de flexibilidad del software. La habilidad del software para evolucionar requiere de un esfuerzo adicional que implica anticipar cundo y dnde se pueden requerir los cambios.
El principio de prevencin del cambio se usa para alcanzar las cualidades de evolucin y reusabilidad. As como el principio de anticipo al cambio tambin se puede aplicar al proceso de Construccin.
10 Ibid.
11 Aspectos que se deben tomar en cuenta en la prevencin del cambio:
Considerar alteraciones en el personal (Renuencia al cambio). Considerar los recursos necesarios para mantenimiento (Capacitacin).
Una definicin del cambio en sentido estricto es:
Una alteracin del estado de una entidad (alguien o algo), siendo esta alteracin generada por un proceso el cual ha sido disparado por el entorno en el cual se encuentra inmersa la entidad. 11
A continuacin se dar una breve descripcin de los tipos de cambio que se presentan en las aplicaciones actuales. 1.3.1 Tipos de Cambio.
Se reconocen Tres tipos de Cambio: Cambio discreto. Cambio continuo. Cambio discontinuo.
1) Cambio Discreto:
Separacin marcada entre un cambio y otro. No hay nada entre los cambios. Catastrfico por lo impredecible.
Figura No. 2.- Representacin Grfica del Cambio Discreto.
No hay separacin entre cambios. Surgen requerimientos entre los cambios. Es predecible.
Figura No. 3.- Representacin Grfica del Cambio Continuo.
3) Cambio Discontinuo:
Depende de la escala de observacin. Se percibe de forma discreta y continua (discontinuo).
Figura No. 4.- Representacin Grfica del Cambio Discontinuo. 12
1.3.2 Principios del Cambio. Una manera de comprender la naturaleza del cambio nos la proporcionan los principios que mencionaremos a continuacin:
Principio de Equivalencia entre Cambio y Proceso.- El cambio define el proceso, y el proceso define el cambio. El cambio est organizado en procesos, siendo algunos de ellos visibles y otros no.
12 2006- Tipos de Cambio (Archivo en formato PDF) Profesor: Sergio Fuenlabrada Velzquez.
Cambio Inicial (T0) Cambio Final (T1) T0 T1 T2 T3 T4 T5
13 Principio de Universalidad del Cambio.- El cambio forma y opera el universo. El cambio puede ser perceptible o no.
Principio de Escalamiento de la Operacin del Cambio.- El cambio siempre opera a todas las posibles escalas existentes en el universo. Si el cambio es perceptible, Qu lo origino?, Cual es el final del cambio?.
Principio de las Fronteras del Cambio.- En el universo, los procesos, y por lo tanto el cambio, no tienen ni principio ni final. El cambio en el universo carece de fronteras, esta depende de la escala de observacin.
Principio de Ocurrencia del Cambio.- Un cambio ocurre en un momento especfico. Si el estado no cambia con el tiempo, entonces el cambio no representa una ocurrencia.
Principio de Origen del Cambio.- Un cambio siempre es provocado por la entidad sujeto. Si el evento es generado por si mismo (entidad objeto), el evento no representa un cambio.
Principio de Control del Cambio.- La ocurrencia de un cambio est bajo control de la entidad sujeto y no de la entidad objeto.
Principio de Percepcin del Cambio.- La entidad objeto debe ser capaz de percibir que el cambio ocurri. Si la entidad objeto no percibe el cambio, entonces no representa un cambio.
Principio de Alteracin del Estado y del Comportamiento.- Una vez detectado el cambio por la entidad objeto, sta altera su estado original y por lo tanto su comportamiento. Si la entidad objeto percibe el cambio, pero no hace nada, entonces no representa un cambio. 13
13 Ibid.
14 Basados en los principios descritos anteriormente, se ha generado un modelo prototipo que vale la pena considerar, este consta de los siguientes pasos:
1.- Determinar los sntomas que presenta la entidad objeto cuando una entidad sujeto provoca el cambio. 2.- Determinar si la organizacin y estructura de la entidad objeto es lo suficientemente robusta para soportar el cambio. 3. - Determinar las acciones para reducir el impacto.
Este Modelo se traduce en:
1.3.3 Problemas del Cambio.
El cambio siempre provoca algn tipo de problema, sobre todo cuando no se tiene una buena documentacin de las aplicaciones desarrolladas, ya que no se conoce el funcionamiento total ni la dependencia que puedan tener los mdulos, por lo tanto, el impacto puede ser mayor al esperado como consecuencia de no conocer el alcance de las modificaciones a realizar.
Como consecuencia, el cambio puede provocar un deterioro en el diseo del software, aqu influyen dos aspectos:
1) Requisitos Cambiantes:
Esta causa del deterioro es muy comn. Los requerimientos cambian de forma por dems significativa de manera que no estaba previsto en el diseo inicial.
A menudo los cambios necesitan hacerse rpidamente y tienen que hacerse por programadores que no estn familiarizados con el diseo original. Entonces, aunque los cambios funcionan, violan el diseo original. Poco a poco los cambios continan y las violaciones se acumulan hasta que el diseo se rompe.
Pensamiento Sistemtico + Datos + Informacin + Conocimiento
15 An as no se puede echar la culpa a que los requisitos cambian. Como desarrolladores, se debe de tener conocimiento de que los requisitos van a cambiar. As que se tiene que realizar un diseo que soporte modificaciones sin que este pierda su consistencia.
2) Control de Dependencias:
Qu tipos de cambios hacen que un diseo se degrade? Los cambios que introducen nuevas e imprevistas dependencias, y son estas dependencias de la arquitectura las que se degradan y con ellas el mantenimiento del software.
Para anticiparse a la degradacin de las dependencias del diseo de la arquitectura, deben ser controladas estas mismas por mdulos de una aplicacin. Este control consiste en la creacin de "cortafuegos" de dependencias. A travs de estos cortafuegos las dependencias no se propagan.
El diseo orientado a objetos est repleto de principios y tcnicas que nos permiten construir estos cortafuegos y controlar estas dependencias. 14
Otros aspectos poco comunes pero que tambin generan cambios pueden ser:
Reorganizacin y/o reduccin del volumen comercial que provoca cambios en las prioridades del proyecto o en la estructura del equipo de ingeniera del software. Restricciones presupuestarias o de planificaciones que provocan una redefinicin del sistema o del producto. 15
1.3.4 Metodologa Para la Prevencin de Cambios.
Durante el proceso de construccin de un software, los cambios son inevitables. Los cambios provocan confusin e incertidumbre, sobre todo cuando no se han analizado o pronosticado correctamente.
14 Effy Oz, Administracin de sistemas de informacin, 2da ed. Thomson Learning 2001. 15 www.als-es.com/home.php/ingenieria-software_prevencion_cambio (30/05/2008).
16 Las actividades de esta metodologa sirven para:
Identificar el cambio del software. Controlar ese cambio. Garantizar que el cambio quede bien implantado. Informar el cambio.
La Metodologa de Prevencin de cambios comprende 4 pasos:
Especificacin de Lneas Base. Identificacin de Objetos. Control de Versiones. Control de Cambios.
A continuacin se detallar cada uno de estos pasos: 1.3.4.1 Especificacin de Lneas Base.
Una lnea base es un concepto de gestin de configuracin del software que nos ayuda a controlar los cambios sin impedir seriamente los cambios justificados.
La IEEE define una lnea base como:
Una especificacin o producto que se ha revisado formalmente y sobre los que se ha llegado a un acuerdo, y que de ah en adelante sirve como base para un desarrollo posterior y que puede cambiarse solamente a travs de procedimientos formales de control de cambios. 16
En el contexto de la ingeniera del software se define una lnea base como un punto de referencia en el desarrollo del software y que queda marcado por el envo de uno o ms elementos de configuracin del software y la aprobacin de esta mediante una revisin tcnica formal.
16 A. Toval. Ingeniera del Software. Gestin de Requisitos, ed. DM, Espaa, 1999.
17 Por ejemplo, los elementos de una especificacin de diseo se documentan y se revisan. Se encuentran errores y se corrigen cuando todas las partes de las especificaciones se han revisado corregido y aprobado, la especificacin de diseo se convierte en lnea base. Solo se pueden realizar cambios futuros en la arquitectura del software, tras haber sido evaluados y aprobados. Las lneas base ms comunes son las que se muestran en la Figura No. 5.
Figura No. 5.- Lneas base. 17
1.3.4.2 Identificacin de Objetos.
Se pueden identificar dos tipos de objetos, los objetos bsicos y los objetos compuestos. Un objeto bsico es una unidad de texto creada durante el anlisis, diseo, codificacin o prueba. Un objeto compuesto es una coleccin de objetos bsicos u objetos compuestos. Cada objeto tiene un conjunto de caractersticas que los identifican como nicos. El nombre del objeto es una cadena de caracteres que identifica al objeto sin ambigedad. El esquema de identificacin de los objetos de software debe tener en cuenta que los objetos evolucionan a lo largo del proceso de ingeniera, por lo que se puede crear un grafo de evolucin como se muestra en la Figura No. 6.
Ingeniera del Sistema Anlisis de Requerimientos Diseo del Sistema Codificacin Pruebas Sistema en Funcionamiento
18
Figura No. 6.- Grafo de Evolucin. 18
En el grafo de evolucin se describe la historia del objeto y sus cambios, las grandes modificaciones hacen que un objeto cambie, por lo que cambia el nmero de versin principal.
1.3.4.3 Control de Versiones.
El control de versiones combina procedimientos y herramientas para gestionar las versiones de los objetos de configuracin creadas durante el proceso de ingeniera del software. Esto permite al usuario especificar configuraciones alternativas de un sistema mediante la seleccin de las versiones adecuadas. Esto se puede lograr asociando atributos a cada versin del software y permitiendo luego especificar y construir una configuracin describiendo el conjunto de atributos deseado.
Estos atributos pueden ser tan sencillos como un nmero especfico de versin asociado a cada objeto o tan complejos como una cadena de variables lgicas que especifiquen tipos de cambios funcionales aplicados al sistema.
18 Ibid.
19
Figura No. 7.-Versiones y Variantes.
Otra forma de establecer los conceptos de la relacin entre componentes, variantes y versiones es representarlas como un fondo de objetos.
Figura No. 8.- Representacin de objetos, componentes, variantes y versiones. 19
19 Ibid.
20 La principal diferencia entre los distintos est en la mejora de los atributos que se usan para construir versiones y variantes especficas de un sistema y en la mecnica del proceso de construccin.
1.3.4.4 Control Estricto de Cambios. En un gran proyecto de desarrollo de software, el cambio incontrolado lleva rpidamente al caos. El control de cambios combina los procedimientos humanos y las herramientas automticas para proporcionar un mecanismo para el control de cambio.
Figura No. 9.- Proceso de Control de Cambios.
21 Para cada cambio aprobado se genera una orden de cambio de ingeniera (OCI).La OCI describe el cambio a realizar, las restricciones que se deben respetar y los criterios de revisin y de auditora. 20
El objeto a cambiar es "dado de baja" de la base de datos del proyecto y se realiza el cambio. Luego, el objeto es "dado de alta" en la base de datos y se usan los mecanismos de de control de versiones apropiadas para crear la siguiente versin del software.
Los procedimientos de altas y bajas implementan dos elementos importantes del control de cambios: control de acceso y sincrona. El control de acceso provee los derechos de los ingenieros de software a acceder y modificar objetos. El control de sincrona asegura que los cambios en paralelo, realizados por personas diferentes, no se sobrescriben mutuamente.
Figura No. 10.- Control de Acceso y de Sincrona.
20 Stair M Ralphm. Principios de sistemas de informacin,. Thomson Learning 4 Ed 2002.
22 Antes de que un elemento de configuracin se convierta en una lnea base, slo es necesario aplicar un control de cambios informal. El que haya desarrollado el elemento en cuestin podr hacer cualquier cambio justificado por el proyecto y por los requisitos tcnicos.
Una vez que el objeto ha pasado la revisin tcnica formal y ha sido aprobada, se crea la lnea base.
Una vez que el elemento se convierte en una lnea base, aparece el control de cambios a nivel de proyecto. 21
Para hacer un cambio, el encargado del desarrollo debe recibir la aprobacin del gestor del proyecto (si el cambio es local), o de la Autoridad de Control de Cambios (ACC) si el cambio impacta en otros elementos.
La autoridad de control de cambios (ACC) desempea un papel activo en el segundo y tercer nivel de control. El papel de la ACC es el de tener una visin general, o sea, evaluar el impacto del cambio fuera del elemento en cuestin. Todo esto se traduce en los siguientes cuestionamientos:
Cmo impactar el cambio en el hardware? . Cmo impactar en el rendimiento?. Cmo alterar el cambio la percepcin del cliente sobre el producto?. 22
1.4 Construccin para la Verificacin.
La construccin para la verificacin significa disear el software de tal modo que las fallas puedan ser detectadas fcilmente por los ingenieros y desarrolladores de software, esto se realiza mediante pruebas unitarias y simulacin de las actividades operativas del cliente.
21 Ibid. 22 Ibid.
23 Las tcnicas especficas que apoyan la construccin para la verificacin incluyen estndares en la redaccin del cdigo para apoyar sus respectivas revisiones, pruebas de unidad, pruebas automatizadas, y el empleo restringido de estructuras complejas o lenguaje difcil de entender entre otros.
La construccin para verificacin tiene dos tareas: Validacin.- Comprobar que el modelo se construy segn la hiptesis planteada. Verificacin.-Comprobar la consistencia de dicho modelo.
La validacin nos permite comprobar que se cumplen las especificaciones del usuario y la verificacin nos asegura la correccin del sistema.
En pocas palabras, la validacin nos permite hacer pruebas si el modelo que se ha construido de acuerdo a los estndares establecidos, pero no se comprueba el funcionamiento, es por ello que se dice que la validacin es emprica.
La verificacin toma los resultados de la validacin para realizar las pruebas necesarias para concluir si la construccin del software cumple con las necesidades del cliente y realiza las funciones que debe ejecutar, es por ello que la verificacin es deductiva.
1.4.1 Model Checking (Comprobacin de Modelos). La comprobacin de modelos (model checking) se define como:
Una aproximacin especfica para la verificacin eficiente de propiedades de sistemas concurrentes y reactivos que tiene especial aplicacin en el rea de los sistemas de estados finitos. Este tipo de tcnicas son, pues, especialmente adecuadas para abordar los problemas planteados por los sistemas anteriormente mencionados. 23
23 BOOCH, Grady. Lenguaje Unificado de Modelado. Mc Graw Hill. Ao 2000. pp. 464.
24 La verificacin de la correccin de un sistema de software puede verse oportunamente acompaada por el intento de corregir cualquier posible anomala detectada.
Las tcnicas de depuracin de programas permiten detectar las causas que introducen discrepancias entre el comportamiento real y el comportamiento que se espera de un programa ayudando a corregir, en su caso, las inconsistencias encontradas (mediante tcnicas de aprendizaje inductivo de programas).
Puesto que tanto la verificacin como la depuracin de programas necesitan considerar algn tipo de representacin de lenguaje mquina de la semntica de los sistemas considerados, la interpretacin abstracta, que permite disear, aproximar y comparar semnticas de programas que expresan varios tipos de propiedades observables resulta ser un recurso fundamental que se puede aadir a las tcnicas de verificacin y depuracin.
En la interpretacin abstracta pueden inferirse propiedades que pueden usarse para implantar condiciones de seguridad, adems del uso tradicional que se hace en los compiladores para optimizar el cdigo generado estticamente. Por supuesto, existen muchas similitudes entre todas estas tcnicas en cuanto a sus objetivos y dominios de aplicacin.
Con la creciente necesidad de mtodos formales giles para el desarrollo correcto de software cada vez ms complejo (sistemas abiertos, con un nmero infinito de estados y/o funciones), cobran especial relevancia los mtodos hbridos que combinan las distintas tcnicas.
Aqu se describir el desarrollo del Model Checking como tcnicas de verificacin y depuracin que combinan la mejora algortmica, la sntesis de programas, el anlisis esttico basado en la interpretacin abstracta.
El Model Checking permite comprobar si un modelo dado satisface una determinada propiedad. Esta tcnica se puede aplicar tanto a sistemas reactivos como a sistemas hbridos. Existen paradigmas declarativos muy adecuados para la especificacin de estas dos clases de sistemas.
25 Tanto los sistemas reactivos como los sistemas hbridos estn muy relacionados con la nocin de concurrencia por lo que resultan muy complicados de verificar a mano. Por este motivo es importante disponer de algoritmos de Model Checking para estos paradigmas. 24
Figura No. 11.- Algoritmo de Model Checking. 25
1.4.2 Interpretacin Abstracta.
La teora de la Interpretacin Abstracta puede ser utilizada para mejorar y optimizar la tcnica de Model Checking. Usando esta tcnica es posible verificar sistemas con un gran espacio de estados de una forma eficaz. 26
24 www.dc.uba.ar/materias/valsof/view (19/07/2008). 25 www.fceia.unr.edu.ar/ingsoft/unidad21-4.pdf (19/07/2008). 26 SOMMERVILLE, Lan. Ingeniera de Software. Mc Graw Hill. 2006. pp 692.
26 El Model checking se considera un mtodo automtico de verificacin de un sistema formal, en la mayora de las ocasiones derivado del hardware o del software de un sistema informtico.
El sistema es descrito mediante un modelo, que debe satisfacer una especificacin formal descrita mediante una frmula, a menudo escrita en alguna variedad de lgica temporal. Este modelo suele estar expresado como un sistema de cambios, es decir, un grafo dirigido, que consta de un conjunto de vrtices y arcos.
As pues, los nodos representan los estados posibles de un sistema, los arcos posibles evoluciones del mismo, mediante ejecuciones permitidas, que alteran el estado, mientras que las proposiciones representan las propiedades bsicas que se satisfacen en cada punto de la ejecucin.
Existen herramientas automticas para realizar el Model checking, basadas en tcnicas combinatorias, explorando el espacio de estados posibles; lo que conduce al problema de explosin de estados.
Para evitarlo, diversos investigadores han desarrollado tcnicas basadas en algoritmos simblicos, abstraccin, reduccin de orden parcial y model checking al vuelo. Inicialmente, las herramientas se disearon para trabajar con sistemas discretos, pero han sido extendidas a sistemas de tiempo real, o sistemas hbridos.
Existen 2 tcnicas que podran ayudar a comprobar el funcionamiento del software:
Tcnicas Estticas.- Usadas para comprobar la correspondencia entre el software desarrollado y las especificaciones. Verificacin de Modelos.- Tcnica automtica para verificar sistemas modelados y especificados con frmulas de una lgica temporal. 27
27 Ibid
27
Figura No. 12.- Diagrama de Verificacin.
1.4.2.1 Testing estructural.
Aqu se utiliza la informacin sobre la estructura interna del programa basada en la interpretacin abstracta. Se prueba lo que el programa hace, indicando de forma genrica un subconjunto de caminos a recorrer. Puede automatizarse en gran medida, pero requiere que haya finalizado la fase de codificacin para que pueda empezarse a probar. Si se cambia la estructura del cdigo deben recalcularse los casos.
Figura No. 13.- El ciclo del Testing. 28
28 www.dc.exa.unrc.edu.ar/nuevodc/materias/verificacin (25/05/2008). Ingeniera de Requerimientos Plan De Validacin Plan de Verificacin e Integracin Plan de Verificacin de Componentes
Validacin Verificacin e Integracin Verificacin de Componentes
Arquitectura Especificacin de Mdulos
Diseo Detallado Comprobacin Especificacin Casos de Prueba a nivel de Especificacin Resultados a nivel de Especificacin Resultados a nivel de Implementacin Casos de Prueba a nivel de Implementacin Implementacin Refinamiento Extraccin Sustitucin Abstraccin Ejecucin Ejecucin
28 1.5 Estndares en la Construccin.
1) Uso - Contexto del producto:
ISO/IEC 9126-1: Ingeniera de Software - Modelos de calidad. ISO/IEC TR 9126-4: Ingeniera de software - Calidad en mtricas de uso. ISO 9241-11: Guas en Usabilidad. ISO 20282: Usabilidad en productos de cada da.
2) Interfaz:
ISO/IEC TR 9126-2: Ingeniera de software-Mtricas externas. ISO 9241: Requerimientos para trabajo en oficinas. ISO/IEC TR 9126-3: Ingeniera de software-Mtricas internas. ISO/IEC 10741-1: Interaccin de Dilogo - Control en edicin de textos. ISO/IEC 11581: Iconos, smbolos y funciones. ISO 11064: Diseo ergonmico para centros de control. ISO 13406: Requisitos ergonmicos de trabajo de paneles planos. ISO 14915: Ergonoma de software para interfaz multimedia. ISO/IEC 14754: Interfaz de escritura manual.
3) Interaccin:
IEC TR 61997: Guas de interfaz de usuario en equipos de uso general. ISO/IEC 18021: Interfaz de usuario para dispositivos mviles. ISO 18789: Requerimientos y sistemas mtricos para pantallas.
4) Documentacin:
ISO/IEC 18019: Guas para diseo y preparacin de documentacin. ISO/IEC 15910: Documentacin de procesos de software de usuario.
29 5) Proceso de desarrollo:
ISO 13407: Diseo de procesos interactivos. ISO/IEC 14598: Evaluacin de software. ISO TR 16982: Mtodos de soporte de diseos centrados en usuarios.
6) Capacitacin de la empresa:
ISO TR 18529: Procesos descriptivos de vida de producto (lifecycle) .
7) Otros ISO:
ISO 9241-1: Introduccin general. ISO 9241-2: Gua en requisitos de acciones. ISO 10075-1: Principios de carga mental, trminos y definiciones. ISO DTS 16071: Gua de accesibilidad en interfaz de usuario. 29
La Administracin de la construccin comienza con la eleccin de un modelo de ciclo de vida, el cual define el estado de las fases a travs de las cuales se mueve un proyecto de desarrollo de software. La Administracin en la construccin del Software se basa primordialmente en la consecucin de un objetivo mediante una secuencia de pasos, esta secuencia es proporcionada por un esquema ya definido y estandarizado, este esquema es comnmente llamado Modelo de Construccin (Ciclo de Vida) del software.
Resea Histrica.
A fines de los 70s se defini como tal el primer modelo de ciclo de vida de software (modelo de cascada), Winston Royce es el autor de este primer modelo. Desde entonces muchos equipos de desarrollo haban seguido esta metodologa.
Sin embargo, ya desde 10 a 15 aos atrs, el modelo cascada ha sido sujeto a numerosas crticas, debido a que es restrictivo y rgido, lo cual dificulta el desarrollo de proyectos de software moderno. Es por ello que actualmente, existe una gama muy basta de Modelos de Construccin de software adaptables a las necesidades de cada proyecto.
Un Modelo de Ciclo de Vida de Software se puede definir como:
Una vista de las actividades que ocurren durante el desarrollo de software, intenta determinar el orden de las etapas involucradas y los criterios de transicin asociadas entre estas etapas. 30
30 Lawrence, S..Ingeniera del software. Ed. Prentice-Hall, Mxico. 2002.
31 Caractersticas:
Describe las fases o etapas principales de desarrollo de software. Define las fases primarias esperadas de ser ejecutadas durante esas fases. Ayuda a administrar el progreso del desarrollo. Provee un espacio de trabajo para la definicin de un detallado proceso de desarrollo de software.
De esta manera, los modelos de construccin proporcionan una gua para los ingenieros y desarrolladores de software con el fin de ordenar las diversas actividades tcnicas en el proyecto, en este sentido suministran un marco para la administracin del desarrollo y el mantenimiento, en el sentido en que permiten estimar recursos, definir puntos de control intermedios, monitorear el avance, etc.
2.1 Modelos de Construccin Tradicionales.
2.1.1 Modelo Cascada. El modelo Cascada es el que ha servido como base en la construccin de los modelos recientes, y sirve como bloque de construccin para los dems modelos de construccin. La visin del modelo cascada del desarrollo de software es muy simple; dice que el desarrollo de software puede ser a travs de una secuencia simple de fases.
Cada fase tiene un conjunto de actividades y objetivos bien definidos, en donde las actividades dentro de cada fase contribuyen a la satisfaccin de los objetivos trazados de dicha fase.
La Figura No. 14 muestra grficamente el flujo de cada una de las fases del modelo en cascada. Las flechas muestran el flujo de informacin entre las fases. La flecha de avance muestra el flujo normal. Las flechas hacia atrs representan la retroalimentacin.
32
Figura No. 14.- Modelo de Cascada. 31
El modelo de ciclo de vida cascada, proporciona algunos principios bsicos:
Planear un proyecto antes de establecer un compromiso con el mismo. Definir el comportamiento externo deseado del sistema antes de disear su arquitectura interna. Documentar los resultados de cada actividad. Disear un sistema antes de codificarlo. Evaluar un sistema despus de construirlo.
2.1.2 Modelo De Desarrollo Incremental. El desarrollo incremental es el proceso de construccin que consiste en incrementar nuevas especificaciones de requerimientos al diseo del sistema original.
Tpicamente, un documento de requerimientos es escrito al capturar todos los requerimientos para el sistema completo. Sin embargo, este modelo permite agregar nuevas funcionalidades interdependientes a las ya hechas.
33 El desarrollo incremental no demanda una forma especfica de observar el desarrollo de algn otro incremento.
El modelo de desarrollo incremental provee algunos beneficios significativos para los proyectos de desarrollo de software:
Construir sistemas pequeos. Si un error importante es detectado, slo el ltimo cambio realizado necesita ser descartado, es decir, la versin anterior a los ltimos cambios es la que puede ser utilizada. Reduccin del tiempo de desarrollo, lo cual evita la redefinicin del requerimiento. Los errores de desarrollo cometidos en un incremento o cambio, pueden ser arreglados antes del comienzo del prximo incremento.
La Figura No. 15 nos muestra la arquitectura del modelo de Desarrollo Incremental, el cual podemos visualizar como una especie de Modelo Estrella.
Figura No. 15.- Modelo de Desarrollo Incremental. 32
Al igual que el modelo de desarrollo incremental, el modelo de desarrollo evolutivo construye una serie de grandes versiones sucesivas de un producto.
Sin embargo, mientras que el modelo de desarrollo incremental asume que el conjunto completo de requerimientos es conocido al comenzar, el modelo evolutivo asume que los requerimientos no son completamente conocidos al inicio del proyecto.
En el modelo evolutivo, los requerimientos son cuidadosamente examinados, y slo aquellos que son bien comprendidos son seleccionados para el primer incremento. Los desarrolladores construyen una implementacin parcial del software que recibe slo estos requerimientos.
El software es entonces desarrollado, se realizan pruebas con la ayuda de los usuarios para proveer retroalimentacin a los desarrolladores. De esta manera la especificacin de requerimientos es actualizada, y una segunda versin del producto es desarrollada. El proceso se repite tantas veces como se necesite cambiar las reglas o procesos del sistema.
Todo lo que los lderes de proyecto tienen que hacer es construir un subconjunto de requerimientos conocidos (incremental), y comprender al principio que muchos nuevos requerimientos es probable que aparezcan cuando el sistema sea desplegado o desarrollado.
El desarrollo de software en forma evolutiva requiere un especial cuidado en la manipulacin de documentos, programas, datos de prueba, etc. desarrollados para distintas versiones del software.
35
Figura No. 16.- Modelo de Desarrollo Evolutivo. 33
2.1.4 Modelo de Prototipado de Requerimientos.
El prototipado de requerimientos es la creacin de una implementacin parcial de un sistema, para el propsito explcito de aprender sobre los requerimientos del sistema definidos por los usuarios. Un prototipo es construido de una manera rpida tal como sea posible. Esto es dado a los usuarios, clientes o representantes de ellos, posibilitando que ellos experimenten con el prototipo.
Estos individuos luego proveen la retroalimentacin sobre lo que a ellos les gust y no les gust acerca del prototipo proporcionado, es entonces cuando se captura en la documentacin actual de la especificacin de requerimientos la nueva informacin entregada por los usuarios para el desarrollo ideal del software.
Muchos usuarios y clientes encuentran que es mucho ms fcil proveer retroalimentacin convenientemente basada en la manipulacin, desde un prototipo, en vez de leer una especificacin de requerimientos potencialmente ambigua y extensa.
A diferencia del modelo evolutivo donde los requerimientos mejor entendidos estn incorporados, un prototipo generalmente se construye con los requerimientos entendidos ms pobremente.
36 En caso de que se desarrollen requerimientos bien entendidos, el cliente podra responder con "s, as es", y nada podra ser aprendido de la experiencia.
El Prototipado de Requerimientos es compatible con el Modelo de Cascada (Figura No.17).
Figura No. 17.- Prototipado de Requerimientos Basado en el Modelo de Cascada. 34
Sin Embargo, el Modelo de Prototipado de Requerimientos tambin es funcional con el Modelo de Desarrollo Evolutivo, de hecho, en combinacin con este, alcanza su mayor grado de funcionalidad (Figura 18).
Figura No. 18.- Prototipado de Requerimientos Basado en el Modelo de Desarrollo Evolutivo. 35
2.1.5 Modelo Espiral.
Es un modelo del ciclo de meta-vida. En este modelo, el esfuerzo de desarrollo es repetitivo. Tan pronto como uno completa un esfuerzo de desarrollo, otro comienza.
El Modelo Espiral define los siguientes objetivos:
Determinar qu es lo que se quiere lograr. Determinar las rutas alternativas, analizar los riesgos y resultados finales de cada una, y seleccionar la mejor. Implementar la alternativa seleccionada en el paso 2. Establecer qu es lo que se logr y evaluar los resultados obtenidos.
Durante el primer viaje alrededor de la espiral, se analiza la situacin y se determina que los mayores riesgos son la interfaz con el usuario. Despus de un cuidadoso anlisis de las formas alternativas de solucionar el problema, dichas alternativas pueden ser:
Construir un sistema y esperar lo mejor. Escribir una especificacin de requerimientos. Construir un prototipo.
35 Ibid.
38 Se lleva a cabo dicha alternativa. Luego se muestra el prototipo al cliente quien provee con retroalimentacin til. Ahora, se comienza el segundo viaje alrededor de la espiral. Es entonces cuando se comienza nuevamente a analizar las rutas alternativas, llegando a la conclusin de que la mejor es construir un incremento u opcin alterna del sistema que satisfaga slo los requerimientos mejor entendidos. Nuevamente se lleva a cabo dicha alternativa.
Despus del despliegue, el cliente proveer nuevamente de retroalimentacin que dir si los requerimientos son correctos. El tercer viaje alrededor de la espiral comienza.
En la Figura No. 19 se observa grficamente el Modelo Espiral
La contribucin del modelo concurrente es su capacidad de describir las mltiples actividades del software ocurriendo simultneamente. Los requerimientos son usualmente "lneas base", cuando la mayora de estos comienzan a ser bien entendidos, se dedica un esfuerzo considerable en el tema de diseo. Una vez que comienza el diseo, cambios a los requerimientos son comunes y frecuentes.
Pero no se debe detener el diseo cuando los requerimientos cambian; existe una necesidad de modificar y rehacer las especificaciones de los requerimientos mientras progresa el diseo. Dependiendo del impacto de los cambios de los requerimientos el diseo puede no ser afectado, medianamente afectado o se requerir comenzar todo de nuevo.
Durante el diseo de la arquitectura, es posible que algunos componentes ya se hayan definido antes que la arquitectura completa sea estabilizada. Por lo cual no necesiten reestructurarse dependiendo si se ve afectada la infraestructura planteada en un inicio.
En tales casos, puede ser posible comenzar el diseo detallado en esos componentes estables. En esta etapa, puede ser posible empezar la codificacin y quizs establecer una evaluacin de integridad de manera genrica antes de llevar a cabo el diseo detallado de todos los componentes.
En algunos proyectos, las etapas de un producto se pueden desarrollar concurrentemente. No es inusual dar mantenimiento a la etapa 1 de un producto, y al mismo tiempo dar mantenimiento a un componente 2, mientras que se est haciendo codificacin al componente 3, mientras se realiza diseo sobre una etapa 4, y especificacin de requisitos sobre un componente 5.
40 En todos estos casos, diversas actividades estn ocurriendo simultneamente. Eligiendo seguir un proyecto usando tcnicas de modelacin concurrente, se posibilita el conocimiento del estado verdadero en el que se encuentra el proyecto. 37
2.2 Metodologas de Construccin en la Actualidad.
En la actualidad existen nuevas metodologas que permiten hacer un anlisis y diseo estructurado muy eficiente, entre las ms importantes estn las siguientes:
Hablando en este sentido, cuando los proyectos que se van a desarrollar son de mayor complejidad, ah si toma sentido el basarnos en una de estas metodologas de desarrollo, y empezamos a buscar cual sera la ms apropiada para nuestro caso.
Lo cierto es que muchas veces no encontramos la ms adecuada y terminamos por hacer o disear nuestra propia metodologa, algo que por supuesto no esta mal, siempre y cuando cumpla con el objetivo.
Al realizar el diseo del software de manera rgida, cuando el cliente en la etapa final solicita un cambio, resulta muy difcil realizarlo, pues se alteran muchas cosas que no habamos previsto, y es justo ste, uno de los factores que ocasiona un atraso en el proyecto y por tanto la incomodidad del desarrollador por no cumplir con el cambio solicitado y el malestar por parte del cliente por no tomar en cuenta su pedido.
41 Obviamente para evitar estos incidentes debemos haber llegado a un acuerdo formal con el cliente, al inicio del proyecto, de tal manera que cada cambio o modificacin no perjudique al desarrollo del mismo.
A continuacin se explicar el uso de estas nuevas metodologas para dar a conocer las diferencias entre ellas y as tener una informacin adecuada en caso de que necesitemos de una de ellas en el desarrollo de un proyecto, de esta manera podremos elegir la que ms se adapte a nuestras necesidades.
2.2.1 Metodologa RUP (Rational Unified Process- Proceso Unificado Racional). La Metodologa RUP, llamada as por sus siglas en ingls Rational Unified Process, divide en 4 fases el desarrollo del software:
Inicio.- El Objetivo en esta etapa es determinar la visin del proyecto. Elaboracin.- El objetivo es determinar la arquitectura ptima. Construccin.- Desarrollar la capacidad operacional inicial. Transicin.- El objetivo es llegar a obtener el release del proyecto.
Cada una de estas etapas es desarrollada mediante el ciclo de iteraciones, la cual consiste en reproducir el ciclo de vida en cascada a menor escala. Los Objetivos de una iteracin se establecen en funcin de la evaluacin de las iteraciones precedentes.
La Metodologa RUP aplica 2 Disciplinas:
1) Disciplina de Desarrollo.- Contiene las siguientes caractersticas: Ingeniera de Negocios: Entendiendo las necesidades del negocio. Requerimientos: Formalizar las necesidades del negocio. Diseo: Traslado de los requerimientos a una arquitectura de software. Implementacin: Creando software que se ajuste a la arquitectura. Pruebas: Asegurndose que el comportamiento requerido es el correcto.
42 2) Disciplina de Soporte.- Contiene las siguientes caractersticas:
Administracin del cambio: Guardando todas las versiones del proyecto. Administrando el proyecto: Administrando horarios y recursos. Ambiente: Administrando el ambiente de desarrollo. Distribucin: Hacer todo lo necesario para la salida del proyecto.
La Figura No. 20 nos proporciona una panormica de la Metodologa RUP:
Figura No. 20.- Fases e Iteraciones de la Metodologa RUP.
Cada una de estas iteraciones se debe clasificar y ordenar segn su prioridad, y que cada una se convierte luego en un entregable al cliente. Los elementos del RUP son:
Actividades.- Procesos que se llegan a determinar en cada iteracin. Trabajadores.- Personas o entes involucrados en cada proceso. Artefactos.- Documento, un modelo, o un elemento de modelo.
43 Una particularidad de esta metodologa es que, en cada ciclo de iteracin, se hace exigente el uso de artefactos, siendo por este motivo, una de las metodologas ms importantes para alcanzar un grado de certificacin en el desarrollo del software.
La Metodologa RUP es ms adaptable para proyectos de largo plazo. 38
2.2.2 Metodologa ASML (A System Modelling Language-Sistema de Lenguaje Modelado).
ASML es una metodologa que integra todas las ideas involucradas en el anlisis y diseo estructurado. Involucra las tcnicas y herramientas de modelado usadas en el Anlisis y Diseo Estructurado Moderno.
Los objetivos fundamentales que busca la Metodologa ASML son:
Obtener una buena comprensin del problema. Disear una solucin de buena calidad.
La Metodologa ASML separa el diseo de un sistema en una jerarqua de modelos necesarios para comprender diferentes propiedades del mismo.
44 Dicha jerarqua de modelos se presenta en la siguiente figura:
Figura No. 21.- Jerarqua de la Metodologa ASML. 39
Como podemos observar, el Modelo del Sistema est dividido en dos modelos generales: El Modelo Esencial. El Modelo de Implementacin.
2.2.2.1 El Modelo Esencial. Representa la etapa de Anlisis Estructurado. Construccin de un modelo libre de detalles tecnolgicos. Es la aplicacin de la metodologa de Anlisis Estructurado Moderno de Yourdon.
Modelo Esencial Modelo del Sistema Modelo de Implementacin Modelo del Usuario Modelo de Distribucin Modelo de Programa Modelo de Procesadores Modelo de Tareas Modelo del Ambiente Modelo de Comportamiento Diagrama de Contexto 1.- cliente vie 1.- client 1.- cliente 1.- cliente vie 1.- cliente vie 1.- cliente vie 1.- client 1.- cliente 1.- cliente vie 1.- cliente vie Diccionario de Datos Modelo Funcional Modelo de Datos Lista de Eventos DTE rboles de Pantalla Informes, Listados, Lay-out de Pantallas DFDs y ERDs por Procesador DFDs por Tarea DEs por Tarea
45 La idea fundamental con la que el modelo esencial es concebido es la de Tecnologa Perfecta en la cual no hay restricciones de cantidad de memoria, tamao del disco o velocidad del procesador.
Dos Componentes conforman el Modelo Esencial:
Ambiente: Declaracin de los objetivos. Creacin de un Diagrama de Contexto y de una Lista de Eventos, describe las pruebas hechas a un sistema y los resultados obtenidos. Definicin del Diccionario de Datos inicial. Comportamiento: Creacin de un DFD (Diagrama de Flujo de Datos), y un DER (Diseo Entidad-Relacin) por cada uno de los eventos de la Lista de Eventos. Los DFDs por eventos se unen en un nico DFD (el Modelo Funcional) y los DERs por eventos se unen en un nico DER (el Modelo de Datos).
2.2.2.2 El Modelo de Implementacin.
Representa la etapa de Diseo Estructurado. Instanciacin de un Modelo Esencial con una Tecnologa dada. A partir de esta etapa, el modelo esencial es instanciado en una tecnologa dada.
Se debe considerar ahora, las imperfecciones de la tecnologa y determinar los siguientes aspectos:
La cantidad de procesadores necesarios. Las cualidades de estos procesadores. El tamao de disco necesario de acuerdo al volumen de la informacin.
Luego se disea la solucin sobre la base de esas restricciones tecnolgicas.
46 La creacin del Modelo de Implementacin se fundamenta en la creacin de 3 Componentes, uno de ellos en forma independiente (El Usuario o de la interfaz hombre-mquina) y los otros 2 en forma encadenada en un proceso incremental de refinamiento e incorporacin de detalles:
Usuario: La interfaz hombre-mquina es modelada en todos sus detalles, estilo, especificacin y formato de pantallas, formato de informes y listados, diseo de pantallas para el ingreso de datos y presentacin de resultados, estilo de mensajes de error, secuencia, etc. Distribucin: Describe todas las decisiones relativas a la arquitectura de hardware y a la estructuracin general de la arquitectura de software. Se incorporan, en los modelos creados hasta este punto algunas estrategias destinadas a optimizar el uso de esa tecnologa.
Tres Modelos se derivan de la Distribucin:
Modelo de Procesadores: El modelo de comportamiento (modelo de datos, modelo funcional y modelo de comportamiento externo o de interfaz) es subdividido por procesadores. Modelo de Tareas: Los modelos resultantes de la creacin del Sub- Modelo de procesadores son estudiados por separado, para determinar tareas diferentes. Modelo de Programas: La estructura del programa que implementa cada una de las tareas resultantes de las etapas de modelado de procesadores y tareas, es diseada mediante la aplicacin de las tcnicas y estrategias descriptas por el Diseo Estructurado. 40
47 2.2.3 Metodologa CASE (Computer Aided Systems Engineering).
CASE plantea una secuencia de etapas ms detallada, y adems proporciona para cada etapa su descripcin, definicin de objetivos y metas, productos de la etapa, factores crticos de xito, y la lista de tareas que conviene realizar. Adems es posible auxiliarse de herramientas CASE que facilitan grandemente la puesta en prctica del mtodo.
CASE se basa en un anlisis y desarrollo del tipo descendiente en que el ciclo de vida se compone de las etapas que observamos en la siguiente Figura:
Figura No. 22.- Etapas de la Metodologa CASE.
1) Estrategia.- Tiene por objetivo lograr un entendimiento claro de las necesidades de la organizacin y del ambiente en que operar el sistema o sistemas a implantar.
Con el fin de tener una visin de negocio, se analizan las diferentes funciones que realiza la organizacin y sus necesidades de informacin a todos niveles, por ello se realizan entrevistas con la direccin y gerentes de departamento.
48 As a partir de esta informacin se realiza as un primer modelado de los requerimientos del sistema de informacin adecuado a las necesidades de la organizacin.
2) Anlisis.- La etapa de anlisis toma y verifica los descubrimientos de la etapa de estrategia y expande estos en suficiente detalle para asegurar la precisin de los modelos de la empresa, posibilitando un fundamento slido para el diseo, dentro del alcance de la organizacin y tomando en cuenta sistemas existentes.
3) Diseo.- La etapa de diseo toma los requerimientos y el modelado de la etapa de anlisis y determina la mejor manera de satisfacerlos, logrando niveles de servicios acordados, dados el ambiente tcnico y las decisiones previas en los niveles requeridos de automatizacin. Es decir que del diseo conceptual se pasa al diseo final que ser utilizado para la implantacin.
Construccin.- A partir del diseo final generado en la anterior etapa, en esta de construccin, se codificarn y probarn los nuevos programas, usando herramientas apropiadas. Documentacin.- Los manuales, resultados de esta etapa, se elaboran a partir de las especificaciones de diseo, de los programas realizados y del anlisis del estilo de trabajo y nivel de competencia de los usuarios y operadores de los sistemas. En la figura 6 se muestra el proceso de esta etapa.
4) Transicin.- En esta etapa se realizan todas las tareas necesarias para la implementacin y proporciona un periodo inicial de soporte al sistema. La transicin debe llevarse a cabo con una interrupcin mnima de la organizacin, y debe dejar a los usuarios confiados y listos para explotar el nuevo sistema. El resultado final de esta etapa es un reporte que muestre que las pruebas fueron satisfactorias.
49 5) Produccin.- Aqu se asegura que el sistema funcione correctamente en la mayora de los casos, y con intervencin mnima de los administradores del sistema. Para esto se realizan nuevas pruebas, se evalan los resultados y se hacen refinamientos del sistema, los cambios necesarios debern ser introducidos sin afectar a los usuarios, y deber conseguirse la mxima confianza de los usuarios. El resultado de esta etapa un sistema listo para su operacin. 41
2.2.4 Metodologa XP (Extreme Programing). Es una de las metodologas de Construccin de desarrollo de software ms exitosas en la actualidad utilizados para proyectos de corto plazo, corto equipo y cuyo plazo de entrega era ayer.
Consiste en una programacin rpida o extrema, cuya particularidad es tener como parte del equipo, al usuario final, pues es uno de los requisitos para llegar al xito del proyecto.
Pruebas Unitarias: se basa en las pruebas realizadas a los principales procesos, de tal manera que adelantndonos en algo hacia el futuro, podamos hacer pruebas de las fallas que pudieran ocurrir. Es como si nos adelantramos a obtener los posibles errores. Refabricacin: se basa en la reusabilidad de cdigo, para lo cual se crean patrones o modelos estndares, siendo ms flexible al cambio. Programacin en pares: una particularidad de esta metodologa es que propone la programacin en pares, la cual consiste en que dos desarrolladores participen en un proyecto en una misma estacin de trabajo.
Cada miembro lleva a cabo la accin que el otro no est haciendo en ese momento. Es como el chofer y el copiloto: mientras uno conduce, el otro consulta el mapa.
Qu es lo que propone XP? Empieza en pequeo y aade funcionalidad con retroalimentacin continua. El manejo del cambio se convierte en parte sustantiva del proceso. El costo del cambio no depende de la fase o etapa. No introduce funcionalidades antes que sean necesarias. El cliente o el usuario se convierte en miembro del equipo.
Derechos del Cliente Decidir que se implementa . Saber el estado real y el progreso del proyecto. Aadir, cambiar o quitar requerimientos en cualquier momento. Obtener lo mximo de cada semana de trabajo. Obtener un sistema funcionando cada 3 o 4 meses.
51 Derechos del Desarrollador Decidir cmo se implementan los procesos. Crear el sistema con la mejor calidad posible. Pedir al cliente en cualquier momento aclaraciones de los requerimientos. Estimar el esfuerzo para implementar el sistema. Cambiar los requerimientos en base a nuevos descubrimientos. Lo fundamental en este tipo de metodologa es: La comunicacin, entre los usuarios y los desarrolladores . La simplicidad, al desarrollar y codificar los mdulos del sistema. La retroalimentacin, concreta y frecuente del equipo de desarrollo, el cliente y los usuarios finales.
La metodologa XP se recomienda para proyectos de corto plazo. 42
2.2.5 Metodologa MSF (Microsoft Solution Framework). Metodologa flexible relacionada con una serie de conceptos y prcticas de uso, que controlan la planificacin, el desarrollo y la gestin de proyectos tecnolgicos. Se centra en los modelos de proceso y de equipo dejando en un segundo plano las elecciones tecnolgicas.
Figura No. 24.- Etapas de la Metodologa MSF
42 www.monografias.com/cicdevida/xp (11/10/2008).
52 MSF tiene las siguientes caractersticas: Adaptable: es parecido a un comps, usado en cualquier parte como un mapa, del cual su uso es limitado a un especfico lugar. Escalable: puede organizar equipos tan pequeos entre 3 o 4 personas, as como tambin, proyectos que requieren 50 personas a ms. Flexible: es utilizada en el ambiente de desarrollo de cualquier cliente. Tecnologa Agnstica: porque puede ser usada para desarrollar soluciones basadas sobre cualquier tecnologa.
MSF se compone de varios modelos encargados de planificar las diferentes partes implicadas en el desarrollo de un proyecto: Modelo de Arquitectura del Proyecto.- Define las pautas para construir proyectos empresariales a travs del lanzamiento de versiones. Modelo de Equipo.- Proporciona una estructura flexible para organizar los equipos de un proyecto. Modelo de Proceso.- Proporciona pautas a seguir en el ciclo de vida del proyecto, describiendo fases, actividades, liberacin de versiones y explicando su relacin con el Modelo de equipo. Modelo de Gestin del Riesgo.- Proporciona un entorno estructurado para la toma de decisiones y acciones valorando los riesgos provocados. Modelo de Diseo del Proceso.- Proporciona un modelo centrado en el usuario para obtener diseo eficiente y flexible a travs de iteraciones. Modelo de Aplicacin.- Proporciona un modelo para disear y desarrollar aplicaciones software. Los servicios utilizados en este modelo son escalables, y pueden ser usados en una varias computadoras.
La metodologa MSF se adapta a proyectos de cualquier dimensin y de cualquier tecnologa. 43
43 www.monografias.com/cicdevida/msf (11/10/2008)
53 2.2.6 Seleccionando Modelos de Construccin.
Los modelos presentados, proporcionan una gua con el fin de ordenar las diversas actividades tcnicas en el proyecto de desarrollo de software e intentan suministrar un marco para la administracin en el desarrollo y el mantenimiento. Aunque todos ellos son compatibles unos con otros, un proyecto puede decidir cules enfoques son ms tiles en situaciones especiales.
Existe un estudio acerca de los factores que influyen en dicha eleccin; si bien es cierto este mtodo ofrece gran potencial, necesitara ser ajustado o actualizado al conocimiento de hoy, principalmente sobre las caractersticas de los proyectos actualmente en desarrollo.
Este estudio consiste en la proposicin de criterios para proyectos y aplicaciones especficas, y la creacin de plantillas que describen el perfil ideal de proyectos convenientes para cada modelo del ciclo de vida. Despus de crear un perfil para un proyecto en cuestin, el jefe del proyecto necesita slo encontrar el perfil ideal que ms se acerca.
Entre los criterios incluidos en dicho estudio se encuentran: Madurez de la aplicacin (relacionado a la probabilidad que muchos requerimientos comenzarn a conocerse slo despus del uso del sistema). Complejidad del problema y de la solucin. Utilidad de la funcionalidad rpida (parcial). Frecuencias y magnitudes esperadas de los cambios de requerimientos. Financiamiento disponible, y su perfil como una funcin del tiempo. Acceso de los desarrolladores a los usuarios. Certeza de requerimientos conocidos.
Otros que pueden incluirse: Tolerancia al riesgo. Planes y presupuestos crticos. Grado de lentitud de construccin dentro de los planes y presupuestos.
54 Considerando la importancia de la planificacin se recomienda realizar el desarrollo de un proyecto de software bajo el modelo espiral insertando en l, cualquier otro modelo que se requiera dependiendo de las necesidades que se presenten. Este modelo permite realizar una planificacin del proceso de desarrollo del software considerando los riesgos asociados en cada etapa.
El identificar los riesgos en proyectos, evaluar su impacto, monitorear y controlar el avance del desarrollo del proyecto, permite al administrador aumentar las posibilidades de xito de un proyecto o, minimizar las posibilidades de fracaso de ste.
Uno de los factores que ms influyen en el proceso de desarrollo de software y que prcticamente acompaa a toda aplicacin es el hecho de que en su mayora, no hay forma de tener todos los requerimientos corregidos antes del desarrollo del software.
Muchas veces los requerimientos emergen a medida que la aplicacin o partes de ella estn disponibles para experimentacin prctica. En todos los casos, el trabajo comienza con la determinacin de objetivos, alternativas y restricciones, paso que a veces se llama recoleccin preliminar de requisitos.
El prototipado es ampliamente recomendado para realizar la especificacin de requerimientos, se debe notar que la idea del prototipado es capturar por retroalimentacin los objetivos, necesidades y expectativas del cliente por lo cual no se debe caer en una utilizacin de estos prototipos como partes finales del sistema, ya que en su desarrollo generalmente no se consideran aspectos de calidad, ni otros asociados con facilitar la etapa de mantenimiento del sistema.
El cambio es una propiedad del software. Hoy en da el software debe poseer un enfoque evolutivo, un sistema debe evolucionar para acomodar la naturaleza evolutiva de los grandes sistemas.
55 El software cambia constantemente, debido a la necesidad de reparar el software (eliminando errores no detectados anteriormente) como a la necesidad de apoyar la evolucin de los sistemas a medida que aparecen nuevos requerimientos o cambian los antiguos. Por lo cual es importante enfatizar que, no tiene sentido entonces que un proyecto tome estrictamente una decisin concerniente con cual modelo se adherir. Los modelos de ciclo de vida presentados, son complementarios en vez de excluyentes.
En muchos casos, los paradigmas pueden y deben combinarse de forma que puedan utilizarse las ventajas de cada uno en un nico proyecto. El paradigma del modelo en espiral lo hace directamente, combinando la creacin de prototipos y algunos elementos del ciclo de vida clsico, en un enfoque evolutivo para la ingeniera de software. No hay necesidad por tanto de ser dogmtico en la eleccin de los paradigmas para la ingeniera de software: la naturaleza de la aplicacin debe dictar el mtodo a elegir. 44
2.3 Planificacin de la Construccin.
La planeacin efectiva de un proyecto de software depende de la planeacin detallada de su avance, anticipado problemas que puedan surgir y preparando con anticipacin soluciones tentativas a ellos.
Se supone que el administrador del proyecto es responsable de la planeacin desde la definicin de requerimientos hasta la entrega del sistema terminado. Planificacin del Software se puede definir como: Es el Proceso de Administracin para la creacin de un Sistema o software, la cual encierra un conjunto de actividades, una de las cuales es la estimacin, estimar es echar un vistazo al futuro y aceptamos resignados cierto grado de incertidumbre. Aunque la estimacin, es mas un arte que una Ciencia, es una actividad importante que no debe llevarse a cabo de forma descuidada. 45
44 www.huma.upm.es/documentacion.html (11/10/2008). 45 -Ivar Jacobson. El proceso unificado de desarrollo de software. Addison-Wesley 2000.
56 Existen tcnicas tiles para la estimacin de tiempo. Y dado que la estimacin es la base de todas las dems actividades de planificacin del proyecto y sirve como gua para una buena Ingeniera Sistemas y Software. Al estimar se debe tomar en cuenta no solo del procedimiento tcnico a utilizar en el proyecto, sino los recursos, costos y planificacin. El Tamao del proyecto es otro factor importante que puede afectar la precisin de las estimaciones. A medida que el tamao aumenta, crece rpidamente la interdependencia entre varios elementos del Software. Los puntos que se analizarn a continuacin, generalmente son requeridos por grandes sistemas de programacin, sin embargo estos puntos son validos tambin para sistemas pequeos.
Panorama.- Descripcin general del proyecto detalle de la organizacin del plan y resume el resto del documento. Plan de fases.- Anlisis de requisitos, fase de diseo de alto nivel, fase de diseo de bajo nivel, etc. Asociada con cada fase debe de haber una fecha que especifique cuando se deben terminar estas fases.. Plan de Organizacin.- Se definen las responsabilidades especficas de los grupos que intervienen en el proyecto. Plan de Pruebas.- Se ejecuta una matriz de las pruebas y de las herramientas, procedimientos y responsabilidades para realizar las pruebas del sistema. Plan de Control de Modificaciones.- Se establece un mecanismo para aplicar las modificaciones que se requieran a medida que se desarrolle el sistema. Plan de Documentacin.- Su funcin es definir y controlar la documentacin asociada con el proyecto. Plan de Capacitacin.- Se describe la preparacin de los programadores que participan en el proyecto y las instrucciones a los usuarios para la utilizacin del sistema que se les entregue. Plan de Revisin e Informes.- Se analiza como se informa del estado del proyecto y se definen las revisiones formales asociadas con el avance de proyecto.
57 Plan de Instalacin y Operacin.- Se describe el procedimiento para instalar el sistema en la localidad del usuario. Plan de Recursos y Entregas.- Se resume los detalles crticos del proyecto como fechas programadas, marcas de logros y todos los artculos que deben entrar bajo contrato. ndice.- Se muestra en donde encontrar las cosas dentro del plan. Plan de Mantenimiento.- Se establece un bosquejo de los posibles tipos de mantenimiento que se tienen que dar para futuras versiones del sistema.
2.3.1 Objetivos de la Planificacin. El objetivo de la Planificacin del proyecto de Software es proporcionar un marco de trabajo que permita al administrador hacer estimaciones razonables de recursos costos y planificacin temporal. Estas estimaciones se hacen dentro de un marco de tiempo limitado al comienzo de un proyecto de software, y deberan actualizarse regularmente medida que progresa el proyecto. Adems las estimaciones deberan definir los escenarios del mejor caso, y peor caso, de modo que los resultados del proyecto pueden limitarse. El Objetivo de la planificacin se logra mediante un proceso de descubrimiento de la informacin que lleve a estimaciones razonables. 46
2.3.2 Aspectos Asociados al Proyecto. 1) mbito del Software.- Es la primera actividad de llevada a cabo durante la planificacin del proyecto de Software. En esta etapa se deben evaluar la funcin y el rendimiento que se asignaron al Software durante la Ingeniera de Sistemas para establecer un mbito de proyecto que no sea ambiguo, e incomprensible para directivos y tcnicos.
58 Describe la funcin, el rendimiento, las restricciones, las interfaces y la fiabilidad, se evalan las funciones del mbito y en algunos casos se refinan para dar ms detalles antes del comienzo de la estimacin. Las restricciones de rendimiento abarcan los requisitos de tiempo de respuesta y procesamiento, identifican los lmites del software originados por el hardware externo, por la memoria disponible y por otros sistemas existentes. El mbito se define como un pre-requisito para la estimacin y existen algunos elementos que se debe tomar en cuenta como es: La Obtencin de la Informacin necesaria para el software. Para esto el analista y el cliente se renen sobre las expectativas del proyecto y se ponen de acuerdo en los puntos de inters para su desarrollo. 2) Recursos.- La Segunda tarea de la planificacin del desarrollo de Software es la estimacin de los recursos requeridos para acometer el esfuerzo de desarrollo de Software, esto simula a una pirmide donde las Herramientas (hardware y Software), son la base proporciona la infraestructura de soporte al esfuerzo de desarrollo, en segundo nivel de la pirmide se encuentran los Componentes reutilizables. Y en la parte ms alta de la pirmide se encuentra el recurso primario, las personas (el recurso humano). Cada recurso queda especificado mediante cuatro caractersticas: Descripcin del Recurso. Informes de disponibilidad. Fecha cronolgica en la que se requiere el recurso. Tiempo durante el que ser aplicado el recurso.
59 Existen diferentes tipos de recursos en la planificacin entre ellos estn: Recursos Humanos.- La Cantidad de personas requeridas para el desarrollo de un proyecto de software solo puede ser determinado despus de hacer una estimacin del esfuerzo de desarrollo (por ejemplo personas mes o personas aos), y seleccionar la posicin dentro de la organizacin y la especialidad que desempeara cada profesional. Componentes de Software Reutilizables.- Cualquier estudio sobre recursos de software estara incompleto sin estudiar la reusabilidad, esto es la creacin y la reusabilidad de bloques de construccin de Software. Tales bloques se deben establecer en catlogos para una consulta ms fcil, estandarizarse para una fcil aplicacin y validarse para la tambin fcil integracin. Recursos de Entorno.- El entorno es donde se apoya el proyecto de Software, llamado a menudo entorno de Ingeniera de Software, incorpora Hardware y Software. El Hardware proporciona una plataforma con las herramientas (Software) requeridas para producir los productos que son el resultado de la buena prctica de la Ingeniera del Software, un planificador de proyectos debe determinar la ventana temporal requerida para el Hardware y el Software, y verificar que estos recursos estn disponibles. Muchas veces el desarrollo de las pruebas de validacin de un proyecto de software para la composicin automatizada puede necesitar un compositor de fotografas en algn punto durante el desarrollo. Cada elemento de hardware debe ser especificado por el planificador del Proyecto de Software.
60 3) Estimacin del proyecto de Software.- Un gran error en la estimacin del costo puede ser lo que marque la diferencia entre beneficios y perdidas, la estimacin del costo y del esfuerzo del software nunca ser una ciencia exacta, son demasiadas las variables: humanas, tcnicas, de entorno, polticas, que pueden afectar el costo final del software y el esfuerzo aplicado para desarrollarlo. Para realizar estimaciones seguras de costos y esfuerzos tienen varias opciones posibles: Dejar la estimacin para ms adelante (obviamente podemos realizar una estimacin confiable despus de haber terminado el proyecto). Basar las estimaciones en proyectos similares ya terminados. Utilizar tcnicas de descomposicin relativamente sencillas para generar las estimaciones de costos y esfuerzo del proyecto. Desarrollar un modelo emprico para l clculo de costos y esfuerzos del Software. Antes de hacer una estimacin, el planificador del proyecto debe comprender el mbito del software a construir y generar una estimacin de su tamao. La estimacin basada en el Proceso es una tcnica basada en el proceso que se va a utilizar, es decir, el proceso se descompone en un conjunto relativamente pequeo de actividades o tareas, y en el esfuerzo requerido para llevar a cabo la estimacin de cada tarea. La estimacin basada en el proceso comienza en un enlistado de las funciones del software obtenidas a partir del mbito del proyecto. Se mezclan las funciones del problema y las actividades del proceso. Como ltimo paso se calculan los costos y el esfuerzo de cada funcin y la actividad del proceso de software. 47
61 2.3.3 Modelos de Estimacin. Existen diferentes modelos de Estimacin como son: 1) Modelos Empricos.- Donde los datos que soportan la mayora de los modelos de estimacin obtienen una muestra limitada de proyectos. Por esta razn, el modelo de estimacin no es adecuado para todas las clases de software y en todos los entornos de desarrollo. Por lo tanto los resultados obtenidos de dichos modelos se deben utilizar con prudencia. 2) Modelo COCOMO.- Barry Boehm, en su libro clsico sobre economa de la Ingeniera del Software, introduce una jerarqua de modelos de estimacin de Software con el nombre de COCOMO, por su nombre en Ingles (Constructive, Cost, Model) modelo constructivo de costos. La jerarqua de modelos de Boehm esta constituida por los siguientes: Modelo I.- El Modelo COCOMO bsico calcula el esfuerzo y el costo del desarrollo de Software en funcin del tamao del programa, expresado en las lneas estimadas. Modelo II.- El Modelo COCOMO intermedio calcula el esfuerzo del desarrollo de software en funcin del tamao del programa y de un conjunto de conductores de costos que incluyen la evaluacin subjetiva del producto, del hardware, del personal y de los atributos del proyecto. Modelo III.- El modelo COCOMO avanzado incorpora todas las caractersticas de la versin intermedia y lleva a cabo una evaluacin del impacto de los conductores de costos en cada caso (anlisis, diseo, etc.) del proceso de ingeniera de Software. 48
48 MEYER,Construccin del Software Orientado a Objetos. McGraw-Hill, 2001.pp 480.
62 3) Herramientas Automticas de Estimacin.- Las herramientas automticas de estimacin permiten al planificador estimar costos y esfuerzos, as como llevar a cabo anlisis del tipo, que pasa si, con importantes variables del proyecto, tales como la fecha de entrega o la seleccin del personal. Aunque existen muchas herramientas automticas de estimacin, todas exhiben las mismas caractersticas generales y todas requieren de una o ms clases de datos. A partir de estos datos, el modelo implementado por la herramienta automtica de estimacin proporciona estimaciones del esfuerzo requerido para llevar a cabo el proyecto, los costos, la carga de personal, la duracin, y en algunos casos la planificacin temporal de desarrollo y riesgos asociados. En resumen el planificador del Proyecto de Software tiene que estimar tres cosas antes de que comience el proyecto: cuanto durara, cuanto esfuerzo requerir y cuanta gente estar implicada. Adems el planificador debe predecir los recursos de hardware y software que va a requerir y el riesgo implicado. Para obtener estimaciones exactas para un proyecto, generalmente se utilizan al menos dos de las tres tcnicas referidas anteriormente. Mediante la comparacin y la conciliacin de las estimaciones obtenidas con las diferentes tcnicas, el planificador puede obtener una estimacin ms exacta. La estimacin del proyecto de software nunca ser una ciencia exacta, pero la combinacin de buenos datos histricos y tcnicas puede mejorar la precisin de la estimacin. 49
2.4 Medicin de la Construccin.
La Ingeniera del Software ha sido definida como la disciplinada aplicacin de la ingeniera, la ciencia y los principios matemticos, mtodos, y herramientas para la produccin de software de calidad.
49 Fairley, R.: Ingeniera del Software. McGraw-Hill, 2001.pp 165.
63 Aqu se incluyen actividades como planificacin, estimacin, modelado, diseo, construccin o programacin, pruebas, instalacin, mantenimiento y gestin.
Las medidas y las mtricas son herramientas muy tiles para el control de los procesos. Un proceso de medidas que acompae al proceso software y se integre con l, ayuda en la interpretacin, control y mejora de cada una de las actividades que se llevan a cabo dentro del mismo.
Las medidas y mtricas han de ser diseadas para soportar los objetivos de Negocio de la organizacin para la que son desarrolladas.
Para entender cules son las mejoras crticas en una organizacin, hemos de ser conscientes de las diferencias entre organizaciones de software maduras e inmaduras.
En una organizacin de software inmadura, los procesos de software generalmente son improvisados durante el curso de un proyecto por quienes los ejecutan y gestionan. En una organizacin inmadura no hay base objetiva para poder enjuiciar la calidad del producto o para resolver problemas del producto o el proceso.
Por el contrario, una organizacin de software madura, posee habilidad y capacidad en el conjunto de la organizacin para gestionar procesos de desarrollo y mantenimiento de software. Los procesos estn documentados y son utilizables y consistentes con la forma en la que el trabajo es hecho en cada momento.
Las definiciones de los procesos son actualizadas cuando es necesario, y las mejoras a esos procesos son desarrolladas a travs de pruebas controladas y anlisis costo / beneficio.
A medida que se avanza en la va de una organizacin madura, el proceso software est mejor definido e implementado de una manera ms consistente. Para ello se necesita de una infraestructura y de una cultura organizacional para soportar los mtodos, prcticas y procedimientos de la organizacin.
64 La calidad de los productos software est determinada en gran medida por la calidad del proceso usado para desarrollar y mantener dichos productos, y ello ha de ser incorporado tanto en las prcticas usuales de la organizacin, como en la gestin de los proyectos de la misma. La Figura No. 25 muestra el control de medicin del proceso de un proyecto de Software.
Figura No. 25.- Medicin de Control y Proceso. 50
Han sido desarrollados muchos modelos de gestin de procesos con el fin de mejorar la calidad y nivel de realizacin de los mismos. El Modelo de Capacidad de Madurez del Software (CMM), SPICE, ISO9001 y Bootstrap estn entre los ms extendidos internacionalmente. 51
El concepto de gestin de proceso est fundamentado en los principios del control estadstico, los cuales sostienen que manteniendo estables los niveles de variabilidad, los procesos producirn resultados predecibles. La Prediccin de resultados no debe ser interpretada como obtencin de resultados idnticos, ya que estos varan respecto de la prediccin, pero cuando un proceso est controlado, esa variacin estar dentro de lmites conocidos.
65 Los Procesos controlados son estables, y los procesos estables permiten la prediccin de resultados. Esto permite la preparacin de planes alcanzables, la estimacin de costes y el establecimiento de compromisos de plazos y fechas.
Por otro lado, la gestin de proyectos es debe asegurar que un producto software es desarrollado de acuerdo a un plan y que ese plan es viable.
En la Figura No. 26 se muestra la relacin entre las responsabilidades de la gestin del proceso y del proyecto, as como la integracin de ambas.
Figura No. 26.- Relacin entre gestin del proceso y gestin del proyecto. 52
2.4.1 Arquitectura de un proceso de Medida de Software. Una posible arquitectura para el diseo y desarrollo de un proceso de medidas software se muestra en la siguiente figura. Esta arquitectura es genrica y puede ser implementada en distintos niveles, desde el nivel proyecto hasta el nivel organizacin.
52 Ibid.
66
Figura No. 27.- Definicin de un Proceso de Medicin de Software. 53
Alineando el proceso de medidas con el proceso de software global, tanto los proyectos como las organizaciones son capaces simultneamente de recoger y analizar datos que ayuden a la toma de decisiones respecto de las metas de los proyectos, y obtener informacin para mejorar el proceso de medidas en s mismo y el proceso de software en general.
En base a lo anterior una posible definicin del proceso de medicin de software puede ser la siguiente:
La parte del proceso software que facilita la identificacin, definicin, recogida y anlisis de medidas que son usadas para entender, evaluar, controlar o mejorar los productos y-o procesos software. 54
53 www.tracnova.com/softwaredemedicion.htm (01/11/2008). 54 McGarry, J. Optimizacin prctica del Software. Addison Wesley. 2002. pp 142.
67 Este proceso de medidas debe estar disponible para que sea utilizado en cualquier proyecto de desarrollo y mantenimiento como parte del proceso software estndar de la organizacin y deber incorporar componentes como:
Elementos del proceso estndar de la organizacin, y definidos en trminos operacionales que permitan fcilmente: Identificar qu datos han de ser recogidos. Definir cmo son los datos a ser recogidos. Definir cmo son los datos a ser usados en la toma de decisiones. Definir cmo es el proceso para la evolucin y mejora tanto del proceso de medidas como del proceso software. Recoger y analizar datos. Tomar decisiones. Bases de datos de la organizacin y documentacin asociada de usuario. Herramientas para definir medidas (formularios, descripciones, recogida de datos, anlisis, etc.). Guas y criterios para una definicin a medida de cada proyecto de algunos elementos del proceso de medidas software.
En el desarrollo de un proceso de medidas debe tenerse en cuenta cules son las metas a alcanzar y las medidas que son necesarias para alcanzarlas. Es decir, los procesos de medidas deben enfocarse a los objetivos que se pretenden conseguir, no a las medidas en s mismas.
2.4.2 Modelo de Proceso para la Definicin de Medidas de Software. Aqu explicaremos la primera fase de la arquitectura del Sistema de Medidas. Se pone nfasis sobre las medidas dirigidas por objetivos y metas para recoger informacin que ayude a alcanzarlos.
Con esto se pretende que las medidas tengan referencias claras con cada meta u objetivo, evitando malgastar esfuerzos que no contribuyan directamente a alcanzar las metas de los negocios.
68 El proceso de medidas dirigido por metas y objetivos propuesto est basado en dos preceptos, estos preceptos a su vez se descomponen en cinco grupos y los grupos se dividen en diez pasos.
Los dos preceptos son: Las metas de las medidas deben estar dirigidas por las metas de los negocios. Es preciso transformar las metas y objetivos en estructuras de medida ejecutables.
Los Cinco Grupos son: Identificar Metas y Objetivos, es decir, qu se desea conocer. Formalizar las metas de las medidas. Definir las medidas a utilizar y sus definiciones operacionales. Identificar las acciones a llevar a cabo para implementar las medidas. Preparar un plan para la implantacin de las medidas. A continuacin se detallar este paso.
La preparacin de un plan para la implementacin de las acciones que han sido identificadas. Este plan debera contener al menos los apartados que se incluyen en la plantilla de la Figura No. 28.
69
Figura No. 28.- Plan de Implementacin de Medidas de Software.
Hay cuatro caractersticas que hemos de considerar bsicas y deben estar entre las herramientas de gestin del proceso de desarrollo de software: Tamao. Esfuerzo. Duracin. Calidad.
Estas medidas cubren importantes caractersticas de los productos y el proceso de software relevante en la planificacin, control y mejora del proceso. Podemos ver algunas de las medidas y las caractersticas que cubren.
Figura No. 29.- Medidas Especficas.
70 Las medidas que aparecen en la figura anterior no son las nicas posibles, pero pueden ser usadas para describir los productos y procesos software, y adems son medidas prcticas que producen informacin til.
Cada medida necesita unos atributos para ser definida. Por ejemplo, los problemas y defectos usualmente estarn clasificados de acuerdo a atributos tales como estado, tipo, severidad, prioridad, y dnde se producen; el esfuerzo ser clasificado por horas de trabajo, tipo de trabajo realizado y perfil profesional de quien lo realiza; la duracin estar definida en trminos de fechas y criterios de finalizacin; el tamao puede estar definido de acuerdo a los lenguajes de programacin, el tipo de instrucciones, los mtodos de produccin, el nmero de entradas al producto software, y el tipo de interfaz con el usuario. 55
CONSIDERACIONES PRCTICAS 3.1 Diseo de la Construccin.
El Diseo de la Construccin del Software se define como:
El proceso de aplicar ciertas tcnicas y principios con el propsito de definir un dispositivo, un proceso o un Sistema, con suficientes detalles como para permitir su interpretacin y realizacin fsica. 56
La etapa del Diseo encierra cuatro etapas:
1) El diseo de los datos.- Trasforma el modelo de dominio de la informacin, creado durante el anlisis, en las estructuras de datos necesarios para implementar el Software. 2) El Diseo Arquitectnico.- Define la relacin entre cada uno de los elementos estructurales del programa. 3) El Diseo de la Interfaz.- Describe como se comunica el Software consigo mismo, con los sistemas que operan junto con el y con los operadores y usuarios que lo emplean. 4) El Diseo de Procedimientos.- Transforma elementos estructurales de la arquitectura del programa. La importancia del Diseo del Software se puede definir en una sola palabra: Calidad; dentro del diseo es donde se fomenta la calidad del Proyecto. 3.1.1 Tcnicas de Diseo. El Diseo de Construccin es un proceso y un modelado a la vez. El proceso de Diseo es un conjunto de pasos repetitivos que permiten al diseador describir todos los aspectos del Sistema a construir.
72 A lo largo del diseo se evala la calidad del desarrollo del proyecto con un conjunto de tcnicas: Debe implementar todos los requisitos explcitos contenidos en el modelo de anlisis y debe acumular todos los requisitos implcitos que desea el cliente. Debe ser una gua que puedan leer y entender los que construyan el cdigo y los que prueban y mantienen el Software. Debe proporcionar una completa idea de lo que es el Software, enfocando los dominios de datos, funcional y comportamiento desde el punto de vista de la Implementacin. Debe presentar una organizacin jerrquica que haga un uso inteligente del control entre los componentes del software. Debe ser modular, es decir, se debe hacer una particin lgica del Software en elementos que realicen funciones especficas. Debe contener abstracciones de datos y procedimientos. As como producir mdulos que presenten caractersticas de funcionamiento independiente. Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los mdulos y el entorno exterior.
Estos criterios no se consiguen por casualidad. El proceso de Diseo de Construccin exige buena calidad a travs de la aplicacin de principios fundamentales de Diseo, Metodologa sistemtica y una revisin exhaustiva.
3.1.2 Diseo de Interacciones con la Base de Datos. La mayora de los sistemas de informacin ya sean implantado en sistemas de cmputos grandes o pequeos, utilizan una base de datos que pueden abarcar varias aplicaciones, por esta razn estos sistemas utilizan u administrador de base de datos, en este caso el diseador no construye la base de datos sino que consulta a su administrador para ponerse de acuerdo en el uso de esta en el sistema.
73 3.1.3 Diseo de Archivos. Incluye decisiones con respecto a la naturaleza y contenido del propio archivo, como si se fuera a emplear para guardar detalles de las transacciones, datos histricos, o informacin de referencia.
Entre las decisiones que se toman durante el diseo de archivos, se encuentran las siguientes: Los datos que deben incluirse en el formato de registros contenidos en el archivo. La longitud de cada registro, con base en las caractersticas de los datos que contenga. La secuencia a disposicin de los registros dentro del archivo (La estructura de almacenamiento que puede ser secuencial, indexada o relativa). No todos los sistemas requieren del diseo de todos los archivos, ya que la mayora de ellos pueden utilizar los del viejo Sistema y solo tenga que enlazarse el nuevo Sistema al Archivo maestro donde se encuentran los registros. 57
3.1.4 Diseo de la Salida. En este caso salida se refiere a los resultados e informaciones generadas por el Sistema, Para la mayora de los usuarios la salida es la nica razn para el desarrollo de un Sistema y la base de evaluacin de su utilidad. Sin embargo cuando se realiza un sistema, como analistas deben realizar lo siguiente:
Determine que informacin presentar. Decidir si la informacin ser presentada en forma visual, verbal o impresora y seleccionar el medio de salida. Disponga la presentacin de la informacin en un formato aceptable. Decida como distribuir la salida entre los posibles destinatarios. 58
57 SOMMERVILL. Ingeniera de Software. Mc Graw Hill, 5 Ed.,2002. pp.560. 58 www.wikipedia.org/wiki/Ingeniera_del_diseo/tecnicas (09/12/2008).
74 3.2 Lenguajes de Construccin. Definimos Lenguaje de Construccin como:
Un lenguaje que puede ser utilizado para controlar el comportamiento de una computadora. Consiste en un conjunto de reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos, respectivamente. 59
3.2.1 Caractersticas. Los lenguajes de programacin facilitan la tarea de programacin, ya que disponen de formas adecuadas que permiten ser ledas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.
Los lenguajes de programacin representan en forma simblica y en manera de texto los cdigos que podrn ser ledos por una persona. Los lenguajes de programacin son independientes de las computadoras a utilizar.
Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programacin simblico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la informacin en forma de texto, representada en los lenguajes de programacin simblicos.
Hay lenguajes de programacin que utilizan compilador. La ejecucin de un programa con compilador requiere de dos etapas:
Traducir el programa simblico a cdigo mquina. Ejecucin y procesamiento de los datos.
Otros lenguajes de programacin utilizan un programa intrprete o traductor, el cual analiza directamente la descripcin simblica del programa fuente y realiza las instrucciones dadas.
75 El intrprete en los lenguajes de programacin simula una mquina virtual, donde el lenguaje de mquina es similar al lenguaje fuente.
La ventaja del proceso interprete es que no necesita de dos fases para ejecutar el programa, sin embargo su inconveniente es que la velocidad de ejecucin es ms lenta ya que debe analizar e interpretar las instrucciones contenidas en el programa fuente.
Un lenguaje de programacin permite a un programador especificar de manera precisa: sobre qu datos una computadora debe operar, cmo deben ser estos almacenados y transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural, tal como sucede con el lenguaje coloquial.
Un programa escrito en un lenguaje de programacin necesita pasar por un proceso de compilacin, es decir, ser traducido al lenguaje de mquina, o ser interpretado para que pueda ser ejecutado por el ordenador. 60
3.2.2 Paradigmas.
El Paradigma de programacin representa un enfoque particular o modelo de construccin del software. 61
Los paradigmas determinan radicalmente la forma de abordar los problemas. Normalmente uno se inclina por el paradigma al que est ms acostumbrado, ya que todos los paradigmas prcticos son Turing-Completo, es decir, cualquier computacin realizable se puede llevar a cabo con cualquiera de ellos.
La eleccin del paradigma adecuado para un problema puede reducir drsticamente el tiempo, el costo y la facilidad con la que se llega a la solucin, aunque si no se tiene experiencia con el paradigma en cuestin, puede llegar a ser contraproducente cambiar del que ms se domina.
Existen muchas formas de clasificar los paradigmas, ya que muchos se solapan y depende del nivel de detalle al que se quiera llegar. Entre esta clasificacin tenemos:
1) Imperativos.- Son paradigmas mayores, consisten en una serie de instrucciones que se ejecutan para modificar el estado del programa. 2) Top-Down.- Consiste en especificar el programa como una serie de instrucciones que se ejecutan secuencialmente, con la posibilidad de incluir saltos a otras partes del programa. 3) Estructurado.- El programa se divide en bloques independientes y el flujo se controla mediante estructuras de control. Fue un gran avance respecto a la programacin top-down ya que permita empezar a reutilizar cdigo y facilitaba enormemente la comprensin de los programas. 4) Orientado a Objetos.- Los datos y las operaciones que actan sobre ellos se agrupan en "objetos" Es un siguiente paso en la programacin estructurada, que permite empezar a desarrollar componentes completos reutilizables de manera fcil. 5) Declarativo.- es el otro gran paradigma. Se trata de especificar los programas como una descripcin abstracta (de alto nivel) la solucin a un problema en lugar de detallar paso por paso cmo llegar hasta ella. Este paradigma es por lo tanto ms sofisticado que el imperativo, ofrece muchas ventajas al programador, como la posibilidad de comprobar la correccin formal de los programas, pero tiene como inconveniente que el rendimiento suele ser peor. 6) Funcional.- Se intenta imitar el lenguaje de las matemticas, expresando toda la lgica del programa como funciones y composicin de las mismas. Tiene algunas ventajas importantes, como la ausencia de efectos secundarios, suele permitir trabajar con tipos infinitos de forma eficiente y cmoda y presenta muchas soluciones elegantes a problemas tediosos que se presentan en la programacin estructurada. Ejemplos: Haskell, Erlang.
77 7) Lgico.- Se definen reglas lgicas y luego un motor de inferencia lgico permite extraer conclusiones o responder a preguntas planteadas al sistema. Ejemplos: prolog, parlog. 8) Basado en Restricciones.- Consiste en definir una serie de restricciones (y una funcin objetivo a optimizar), y un motor de bsqueda proporciona el conjunto de soluciones posibles (o la solucin ptima). Ejemplos: GAMS, SQL. 3.2.3 Factores en la eleccin de un Lenguaje de Construccin.
Tamao del lenguaje.- Sin duda es una ventaja que un lenguaje sea sencillo, ya que facilita su aprendizaje, la comprensin del cdigo escrito. Ambigedades.- Es una caracterstica deseable en un lenguaje que todas las construcciones vlidas tengan una nica interpretacin posible. Documentacin.- El lenguaje ms maravilloso del mundo si no est documentado no sirve para nada. Portabilidad.- Es deseable que un programa que se implementa en una computadora pueda funcionar sin ningn problema si se implementa en otra. Rendimiento.- el rendimiento es algo importante, pero hasta cierto punto. Si se trata de programas que se van a usar segn salen del horno, hay que tener en cuenta que al tiempo de ejecucin deberamos sumarle el tiempo de compilacin. Consumo de memoria.- ya que es un recurso que se suele agotar bastante ms rpido que el tiempo y un programa que use mucha memoria probablemente tendr penalizaciones de rendimiento por la no- localidad de los accesos. Libreras comunes (estndar).- Otro factor realmente importante es la cantidad de cdigo que nos podemos ahorrar porque ya lo ha escrito otro para nosotros. Si encima esas libreras vienen siempre con la distribucin del lenguaje, nos ahorraremos tiempo buscndolas y espacio en la distribucin del programa.
78 Entornos de desarrollo.- Un buen entorno de desarrollo puede convertir la tarea de programar en un placer. Nos puede facilitar la vida completando el cdigo, mostrndonos la documentacin sin tener que ir a buscarla, avisarnos de los errores antes de que probemos el programa, hacer cambios globales al programa (refactorizacin), permitindonos navegar rpidamente por todo nuestro cdigo, con un entorno de depuracin integrado, con editores visuales para interfaces grficas, etc. Tamao de la comunidad de usuarios.- se supone que cuantas ms personas haya usando un lenguaje menos probabilidad tendr de morir. Calidad de la comunidad de usuarios.- desde luego que est bien que haya mucha gente, pero es preferible que haya poca gente pero dispuesta a ayudarse (compartir cdigo, soluciones a problemas comunes) y que no genere demasiada basura alrededor del lenguaje. 62
3.2.4 Clasificacin de los Lenguajes de Construccin. Programacin Imperativa.-
C ALGOL ML PL/1 FORTRAN BASIC ALGOL1W LOGO SNOBOL BCPL PASCAL ALGOL 68 LUA COBOL MODULA ADA CLIPPER OCAML Programacin Orientada a Objetos.-
3.2.5 Visual Studio.Net VS C#. 3.2.5.1 Visual Studio.NET.
Visual Studio .NET es el nico entorno de programacin creado exclusivamente para servicios Web XML.
Al permitir que las aplicaciones se comuniquen y compartan datos a travs de Internet, los servicios Web XML permiten que las empresas transformen Internet en una verdadera plataforma para integrar y ofrecer sus principales valores empresariales.
81 Visual Studio .NET y los servicios Web XML proporcionan un modelo sencillo y flexible basado en estndares que permite a los programadores ensamblar aplicaciones a partir de cdigo nuevo o existente, independientemente de la plataforma, del lenguaje de programacin o del modelo de objetos.
Las caractersticas de Visual Studio en cualquiera de sus versiones son: Soporte para XML Web Services. Diseo de interfases mediante Windows Forms . Diseo web mediante Web Forms o Mobile Web Forms. Creacin de aplicaciones para Pocket PC-Windows CE .NET . Integracin con .NET y el Common Language Runtime (CLR) . Asistente para actualizacin de cdigo de VB 6.0 a VB.NET . Creacin de aplicaciones para consola. Class Library templates. Librerias para controles Windows y controles Web. Creacin de Servicios Windows ejecutables al inicio del sistema. Soporte Multilenguaje (Visual Basic .NET, Visual C# .NET, Visual C++ .NET, Visual J# .NET, soporte para la instalacin de otros lenguajes). Otras caractersticas a destacar son: un entorno integrado de desarrollo, un completo depurador, Crystal Reports o un asistente para el diseo HTML. 3.2.5.2 Lenguaje C#.
C# debe entenderse como un Java mejorado en todos los sentidos: desde la eficiencia hasta la facilidad de integracin con aplicaciones tan habituales como Microsoft Office o Corel Draw.
Se trata de un nuevo lenguaje orientado a objetos que Microsoft ha desarrollado con el propsito de que se recoja en un slo lenguaje los mejores aspectos de los principales lenguajes existentes. Aparentemente, tiene mucho de C++, pero contiene obvias influencias de Java.
82 Similitudes entre C# y Java: Las clases en C# se declaran de forma muy similar a como se declaran en Java, las clases tambin pueden ser abstract y final . Las interfaces tambin existen en C# . Cuenta tambin con operaciones lgicas booleanas. C# cuenta con el manejo de excepciones para errores tal como lo hace Java. Garbage collector.
Similitudes entre C# y C++: El proceso de compilacin. Estructuras similares a C++. Preprocesador. Existe la sobrecarga de operadores.
Nuevas Caractersticas de C# Declaraciones en el espacio de nombres.- cuando se crea un programa, se puede definir una o ms clases dentro de un mismo espacio de nombres. Tipos fundamentales de datos: existe una variedad ms amplia de tipos de datos que los que se encuentran en C, C++ o Java. Ensamblaje: lo que se entiende como ensamblaje para el lenguaje es un conjunto de clases compiladas, as como un conjunto de otros posibles elementos que se combinan en un archivo nico para ser ejecutado. Atributos: cada miembro de una clase tiene un atributo de acceso del tipo pblico, protegido, interno, interno protegido y privado. Paso de argumentos: se puede declarar a los mtodos para que acepten un nmero variable de argumentos. Por defecto el pasaje de argumentos es por valor, salvo que se utilice la palabra reservada ref, la cual indica que el pasaje es por referencia. Mtodos virtuales y redefiniciones: antes de que un mtodo pueda ser redefinido en una clase base, debe declararse el mismo como virtual. El mtodo redefinido en la subclase debe ser declarado con la palabra override.
83 Propiedades: un objeto COM posee de por s una serie de propiedades, y dado que las clases en C# pueden ser utilizadas como objetos COM, C# permite la declaracin de propiedades dentro de cualquier clase. Indexador: Un indexador (o indexer) se asemeja a una propiedad, con la diferencia de que en lugar de un nombre de propiedad, un valor de ndice encerrado en corchetes rectos se utiliza en forma annima para dirigirse al miembro de una clase. Control de versiones: C# permite a los desarrolladores mantener mltiples versiones de clases en forma binaria, colocndolas en diferentes espacios de nombres. Esto permite que versiones nuevas y anteriores de software puedan ejecutarse en forma simultnea. 64
3.3 Codificacin. El mejor diseo fcilmente puede corromperse por alteraciones casuales o incluso bien intencionadas producidas durante la codificacin del software. Los miembros del equipo de desarrollo encargados del diseo y los encargados de escribir las lneas de cdigo deben estar en estrecha coordinacin. Los programadores son los que finalmente estructurarn todas las preconcepciones plasmadas en los diversos prototipos en las interfaces que realmente utilizarn los usuarios. stos, a menudo debido a los plazos de entrega del producto, suelen ser personas que voluntaria o involuntariamente aportan sus preconcepciones e ideas propias al diseo de dichas interfaces y ello puede llevarles a no seguir estrictamente las pautas o conclusiones determinadas. Cabe destacar el papel de las disciplinas no directamente relacionadas con la propia codificacin, pues los ingenieros software y programadores suelen tener un entrenamiento especial en la resolucin de las propuestas enfocadas a la optimizacin del tamao del cdigo y a la optimizacin de la velocidad de ejecucin descuidando los aspectos relacionados con la usabilidad y la accesibilidad e incluso con el diseo grfico de la interfaz.
84 Ser importante, pues, que los programadores estn completamente comprometidos con el seguimiento del modelo de proceso y convencidos de los beneficios del mismo incluso si no lo entienden o no estn de acuerdo en algunas decisiones del diseo. Otro aspecto destacado en este punto ser que los programadores y diseadores que respectivamente escribirn las lneas de cdigo y dibujarn los elementos de las interfaces respeten las caractersticas establecidas en el enorme trabajo realizado en las fases precedentes.. 3.3.1 Estndares de codificacin.
Los estndares de codificacin son la bendicin de las prcticas para desarrollar software. La bendicin y a veces la maldicin. Cuando los estndares de codificacin son muy rigurosos tienden a frenar la velocidad del desarrollo e inevitablemente cuartan en cierta medida la creatividad de los programadores para brindar soluciones novedosas que puedan no adaptarse completamente a los requisitos de los estndares adoptados.
El error que no se puede cometer es precisamente adoptar estndares de codificacin complejos.
Se necesita que estos sean prcticos y que todo el equipo de programadores se encuentre de acuerdo y se sienta a gusto con los mismos. Esto nos permite vislumbrar que se deben tomar en cuenta en la agenda aquellas reuniones a inicios del proyecto donde los estndares sean discutidos por todo el equipo.
3.3.2 Tcnicas de Codificacin.
En general una tcnica de codificacin no pretende formar un conjunto inflexible de estndares de codificacin. Ms bien intenta servir de gua en el desarrollo de un estndar de codificacin para un proyecto especfico de software.
85 3.3.2.1 Generales.
Para conservar recursos hay que ser muy selectivo en la eleccin del tipo de dato, asegurarse que el tamao de una variable no sea excesivamente grande. Por ejemplo en los ciclos for es mejor, en la mayora de las veces utilizar un tipo de dato tipo short que int. Mantener el tiempo de vida de las variables tan corto como sea posible, esto es muy importante por ejemplo cuando se utiliza un recurso finito como una conexin a una Base de Datos. Usar los procedimientos y variables con un solo propsito. Evitar crear procedimientos multipropsito que lleven a cabo una variedad de funciones no relacionadas. Dentro de una clase, evitar el uso de variables publicas, en cambio usar procedimientos y propiedades que accedan a dichas variables (privadas), as se brinda la posibilidad de validar valores de cambio sobre las mismas, antes de manipularlas directamente.
Cuando se trabaje en un entorno web distribuido, tener cuidado de almacenar informacin en variables de sesin ASP ya que el estado de sesin es almacenado siempre en una sola maquina, considerar mejor almacenar dicha informacin en una base de datos. No abrir conexiones a datos usando credenciales especificas de usuario, ya que estas no podrn ser reutilizadas por el pool de conexiones. Usar siempre rutinas de manejo de excepciones. As como evitar el uso de variables en el mbito de aplicacin (web). Usar siempre sentencias Select-Case o Switch en lugar de utilizar sentencias if-then repetitivas. Siempre que sea posible utilizar polimorfismo en vez de clusulas Switch o Select.
Las tcnicas de codificacin estn divididas en tres secciones: Nombrado. Documentacin Interna (Comentarios). Formato.
86 3.3.2.2 Nombrado.
El esquema de nombres es una de las ayudas ms importantes para entender el flujo lgico de una aplicacin. Un nombre debe ms bien expresar el "qu" que el "cmo". Si se utiliza un nombre que evite referirse a la implementacin se estar conservando la abstraccin de la estructura ya que la implementacin est sujeta a cambios, de esta manera se describe que hace la estructura y no como lo hace.
Por ejemplo es mas claro nombrar un procedimiento de acceso a datos SeleccionarRegistro() que RealizarConsultaSelect(), porque lo que importa (para que otra persona entienda el cdigo) es que se supone que hace el mtodo y no como lo hace. Otra tcnica es utilizar nombres tan largos como para que se entiendan pero a la vez tan cortos como para que no den informacin irrelevante, por ejemplo es mejor emplearSeleccionarComida() que SeleccionarlaComidadelMenu().
Desde el punto de vista de la programacin, un nombre nico sirve solamente para diferenciar un elemento de otro. Los nombres expresivos funcionan como ayuda para el lector, por eso, es lgico dar nombres que sean fciles de comprender. No obstante, se debe garantizar que los nombres escogidos sean compatibles con las reglas de cada lenguaje y con los estndares.
En el caso de Estructuras:
Los nombres deben ser en espaol. Los namespaces deben empezar por el nombre de la compaa seguido de la unidad de negocio, el producto o proyecto yla funcionalidad: El nombre de la clase y el archivo fuente deben ser iguales. No se debe usar la notacin hngara, la cual prefija una abreviatura referente al tipo de objeto: lblAceptar (label), btnOK(Botn), etc. Utilizar la tcnica verbo-sustantivo para nombrar procedimientos que ejecuten alguna operacin en un determinado objeto; ejemplo CalcularDesperdicio().
87 Para el caso de las Variables:
Las variables miembro se escriben con la primera letra de cada palabra en mayscula a excepcin de las variable miembro privadas. Las Variables internas o de bloque deben ir en minscula. Es recomendado que las variable booleanas contengan una palabra que describa su estado: puedeEliminarse, esGrande, tieneHijos, etc. Y siempre se debe referir al estado verdadero: tieneCredito en cambio de noTieneCredito .
Incluso para el caso de una variable de poco uso, que deba aparecer slo en unas cuantas lneas de cdigo, emplee un nombre descriptivo. Utilizar nombres de variables de una sola letra, como i o j slo para ndices (ciclos for). No usar nmeros o cadenas literales, como por ejemplo For i = 1 To 7. En su lugar, emplear constantes con nombre, del tipo For i = 1 To Enumeracion.length para que resulten fciles de mantener y comprender. Los parmetros siguen el mismo estndar de las variables.
Tablas:
Los nombres de tablas deben ser en singular. Las columnas de las tablas, no deben llamarse igual que la tabla. No incorporar el tipo de datos en el nombre de una columna.
3.3.2.3 Comentarios.
Existen dos tipos de documentacin de software: externa e interna. La documentacin externa, como por ejemplo las especificaciones, los archivos de ayuda y los documentos de diseo, se debe mantener fuera del cdigo fuente.
88 La documentacin interna est formada por los comentarios que los programadores escriben dentro del cdigo fuente durante la fase de desarrollo.
Uno de los problemas de la documentacin de software interna es garantizar que se mantengan y actualicen los comentarios al mismo tiempo que el cdigo fuente.
Aunque unos buenos comentarios en el cdigo fuente no tienen ningn valor en el tiempo de ejecucin, resultan valiossimos para un programador que tenga que mantener una parte de software particularmente compleja.
Aqu se mencionarn las tcnicas para la documentacin:
Los comentarios deben ser en espaol. Si se programa en C#, utilizar la funcin de documentacin XML. Cuando se modifique el cdigo, mantener siempre actualizados los comentarios circundantes. Al principio de cada rutina, resulta til hacer comentarios estndar, repetitivos, que indiquen el propsito de la rutina, las suposiciones y las limitaciones. Un comentario repetitivo podra consistir en una breve introduccin que explicara por qu existe y qu puede hacer. Evitar aadir comentarios al final de una lnea de cdigo, porque lo hacen ms difcil de leer. Sin embargo, los comentarios de final de lnea s son apropiados al anotar declaraciones de variables. Evitar los comentarios recargados, como las lneas enteras de asteriscos. En su lugar, utilice espacios para separar los comentarios y el cdigo. Antes de la implementacin, eliminar todos los comentarios temporales o innecesarios, para evitar cualquier confusin en la futura fase de mantenimiento. Usar frases completas cuando escriba comentarios. Los comentarios deben aclarar el cdigo, no aadirle ambigedad. Usar los comentarios para explicar el propsito del cdigo. No usarlos como si fueran traducciones literales.
89 Realizar los comentarios en un estilo uniforme, respetando una puntuacin y estructura coherentes a lo largo de toda la aplicacin. Cada declaracin de variable importante debe incluir un comentario en la misma lnea que describa el uso de la variable que se declara. Despus de la secuencia de continuacin de lnea no puede escribirse un comentario en la misma lnea. Todos los comentarios deben estar ortogrficamente bien escritos, una escritura incorrecta demuestra un desarrollo negligente. Evitar comentarios que expliquen cosas obvias, en la mayora de las cosas el cdigo debe ser autoexplicativo. 3.3.2.4 Formato.
El formato hace que la organizacin lgica del cdigo sea ms clara. Si nos tomamos el tiempo de comprobar que el cdigo fuente posee un formato coherente y lgico, resultar muy sencillo descifrarlo.
A continuacin mencionaremos las pautas para establecer el formato: Evitar albergar mltiples clases en un solo archivo. Establecer un tamao estndar de sangra (por ejemplo, cuatro espacios o una tabulacin). Usar un nico tipo de letra cuando publique versiones impresas del cdigo fuente.
Una clase debe estar definida en orden descendente de la siguiente manera: Variables Miembro, Constructores, Enumeraciones, Estructuras o Clases anidadas, Propiedades y por ultimo los Mtodos.
La secuencia de declaracin de acuerdo a los modificadores de acceso debe ser la siguiente:
public protected internal private
90 1) Alinear verticalmente las llaves de apertura y cierre de cualquier bloque:
2) Establecer una longitud de lnea mxima para el cdigo. 3) Siempre que sea posible, no colocar ms de una instruccin por lnea, a excepcin de los bucles. 4) Al escribir en HTML, establecer un formato estndar para las etiquetas y los atributos; como por ejemplo, las etiquetas siempre en mayscula y los atributos en minscula. 5) En SQL utilice maysculas para las palabras clave: SELECT, UPDATE, WHERE, FROM, etc. 6) Colocar las clusulas SQL principales en lneas separadas, de modo que las instrucciones sean ms fciles de leer y editar:
7) Evitar llamadas a mtodos dentro de sentencias condicionales. 8) Evitar utilizar recursividad, usar mejor ciclos for anidados. 65
3.4 Prueba de Construccin.
En sta etapa intervienen solo los desarrolladores, los cuales actan sobre un cdigo fuente congelado, por lo que estn restringidos a agregar nuevas funcionalidades y la imposibilidad de realizar grandes modificaciones a las interfaces grficas de usuario. Los procesos de prueba o testing son una herramienta que asegura que un sistema hace lo que tiene que hacer. Probar es una prctica habitual de todo proceso productivo, que bsicamente consiste en comprobar que un producto tiene las caractersticas deseadas.
65 www.elguille.info/colabora/NET2005/fernandez_EstandarCodificacionNET.htm (21/01/2008) . Public void Main() { ... }
SELECT Nombre, Apellido FROM Clientes WHERE Fecha= Now.Today;
91 Prcticamente todos los productos que llegan al mercado son probados: se "prueban" los materiales que van a forma parte de un producto, se "prueba" que las partes a ensamblar tienen las dimensiones adecuadas y se "prueba", por ejemplo, que el producto final tiene la resistencia adecuada.
Es decir, a lo largo del proceso productivo de cualquier producto se hacen comprobaciones que hacen que el producto final sea el adecuado.
En el caso del software ocurre lo mismo. El proceso de desarrollo de software consta de una serie de etapas. En cada etapa se van desarrollando y ensamblando partes que al final van a conformar el producto final.
Al igual que ocurre en un proceso productivo normal, cada una de estas partes debe ser "probada". Al igual que ocurre en un proceso productivo normal, la naturaleza y el tipo de pruebas a realizar con el software vara a media que el desarrollo avanza.
Se puede decir, por lo tanto, que el desarrollo de software es un proceso productivo como otro cualquiera, con sus caractersticas y particularidades. Sin embargo, y aunque es una realidad que los fallos de software ocasionan graves prdidas econmicas, el nivel de concienciacin en cuanto a la necesidad de incorporar mecanismos de calidad es muy pequeo.
A pesar de que las pruebas no pueden asegurar la ausencia de defectos, ya que slo se puede demostrar que existen defectos en el software, ya que es hecho por humanos, son parte fundamental antes de entregar el software final.
El esquema general de pruebas finales aplicadas se rige por pruebas de tipo caja negra que estudia la especificacin del software, las funciones que debe realizar, las entradas y las salidas esperadas. Se detalla a continuacin:
Las pruebas se hacen principalmente en funcin de los requerimientos determinados. Tambin pruebas tcnicas no siempre visibles para el usuario final, que una vez que son superadas pueden permitir la entrega del software finalizado.
92
Figura No. 30.- Esquema General de Pruebas.
3.4.1 Mdulos independientes.
Las pruebas de mdulos independientes se realizan con el objetivo de encontrar y reparar fallas en el comportamiento de los mdulos independientes:
N^o Nombre Entrada Salida esperada Salida real 1 realizar conexin direccin de HW descriptor de socket Socket 2 mover Mouse direccin (v , , ) moverse x,y OK 3 info disponible id disponible info dispositivo info OK 4 guardar registro msg, fecha Registro OK
3.4.2 Pruebas de carga y rendimiento.
Tiene por principal objetivo probar el funcionamiento del software bajo condiciones extremas. Estudia la especificacin del software, las funciones que debe realizar, las entradas y las salidas analizando los Valores Lmite (AVL).
Tipo Condicin Rendimiento Consumo energtico conexin activa 12 horas continuado Cobertura conexin activa mxima 30 metros Tasa de ejecucin Peticiones de ejecucin Percepcin de ejecucin en tiempo real
93 Prueba de validacin.- El software totalmente ensamblado se prueba como un todo para comprobar si cumple los requisitos funcionales y de rendimiento, facilidad de mantenimiento, recuperacin de errores, etc.
Prueba de aceptacin.- El usuario comprueba en su propio entorno de explotacin si acepta el software como est o precisa ser necesario aplicar nuevas optimizaciones y soluciones de fallas.
Las pruebas de rendimiento, tanto el uso CPU, uso memoria, ping a distancias y otras variables son aceptables para una ejecucin fluida y de excelente percepcin para el usuario final.
Figura No. 31.- Diagrama de Errores.
3.4.3 Subcontratacin de pruebas.
Tras haber comprobado las innegables ventajas que un buen proceso de pruebas ofrece, y siendo conscientes de que gestionar de forma eficaz un proceso de pruebas requiere de formacin y experiencia especfica, las empresas dedicadas al desarrollo de software estn optando, de forma creciente, por la subcontratacin de esta tarea.
94
Las ventajas que la subcontratacin ofrece a las compaas son amplias: disponer de personal formado en cualquier momento; poder usar, sin tener que comprar las herramientas ms avanzadas, un proceso de pruebas sistemtico, automatizado y repetible; y disponer de informacin actualizada que nos permita tener control sobre el proyecto.
Est claro que en esta poca de implantacin masiva y generalizada de los sistemas de gestin de la calidad en todos los sectores de nuestra economa, el sector de desarrollo de software no puede permanecer ajeno a estas demandas del mercado. Es por tanto que, siendo el proceso de pruebas un factor clave en el aseguramiento de la calidad de las aplicaciones informticas, resulte cada vez ms comn y recomendable la subcontratacin de los procesos de prueba. 66
3.5 Reusabilidad. La Reusabilidad se puede definir como:
Cualquier procedimiento que produce o ayuda a producir un sistema mediante el nuevo uso de algn elemento procedente de un esfuerzo de desarrollo anterior. 67
3.5.1 Beneficios de la Reusabilidad. Es la nica aproximacin realista para llegar a los ndices de productividad y calidad que la industria del Software necesita. Mejora de la productividad. Disminucin tiempo de desarrollo. Mejor adaptacin requisitos cambiantes. Disminucin de costos. Mejora de la calidad del Software. Mayor fiabilidad. Mayor eficiencia.
66 www.monografias.com/trabajos20/pruebas-de-software/pruebas-de-software.shtml (25/01/2008). 67 RogerS. Pressman. Ingeniera del Software Un enfoque prctico. 4 Ed.Mc Graw-Hill. P. 460.
95
Figura No. 32.-Modelo de procesos con Reusabilidad. 68
Las experiencias de la industria en reusabilidad del software, demuestran que esta no depende especficamente de aspectos tecnolgicos sino de aquellos organizativos y de motivacin. No obstante las tecnologas pueden ayudar al respecto. Se describe como la orientacin a objetos y contribuye en los diferentes niveles de reusabilidad: bibliotecas de clases, patrones de diseo y arquitecturas.
En primer lugar hay que separar lo que se entiende por reusabilidad individual y oportunista de la reusabilidad a nivel empresa o sistemtica.
La reusabilidad a nivel individual o de pequeos grupos de desarrollo no es en realidad nada nuevo y desde siempre los programadores han realizado corta- pega de trozos de cdigo para ahorrarse trabajo de programacin.
En otros casos se han utilizado bibliotecas de rutinas, principalmente matemticas que han dado buenos resultados pero sin lograr el objetivo principal de la reusabilidad, la disminucin substancial de los costes de desarrollo y mantenimiento, y la mejora de los tiempos de desarrollo.
68 Ibid.
96 Para lograr de una manera efectiva los anteriores objetivos es necesario un planteamiento a nivel de empresa de reusabilidad sistemtica.
La reusabilidad sistemtica se basa en un conocimiento y modelado del dominio de aplicacin de inters para la empresa o sus clientes, sea este el financiero, control de procesos industriales, gestin de red o avinica.
Para la realizacin del modelado del dominio del problema se utilizan tcnicas de anlisis de dominio, algunas de ellas se basan en los principios de adquisicin y representacin del conocimiento desarrollado dentro de la Inteligencia Artificial, otras utilizan principios parecidos a los del anlisis de sistemas donde hay mucha experiencia en la industria.
La biblioteconoma, ha sido tambin muy til. La obtencin de la representacin del dominio en el mbito del problema, lleva a la bsqueda de soluciones de ste. Se desarrollan entonces arquitecturas de referencia que permiten desarrollar implementaciones de aplicaciones en el mbito del dominio de la aplicacin.
Estas arquitecturas de referencia se pueden apoyar en bibliotecas de programas sean estas rutinas o clases dependiendo de las metodologas de desarrollo software que se utilicen. 3.5.2 Factores de la Reusabilidad.
Soporte de la direccin.- Las decisiones en la utilizacin de procesos de desarrollo de software, herramientas, y lenguajes, as como las inversiones en formacin, construccin de activos reutilizables y adaptacin de la organizacin son inviables sin un apoyo explcito de la alta direccin.
Cambios en la organizacin.- La reusabilidad sistemtica conlleva la divisin del personal de desarrollo en dos grupos principales con funciones distintas.
97 El grupo de Ingeniera de Dominio, que construye los activos reutilizables, sean estos modelos del dominio, bibliotecas, arquitecturas o generadores de aplicaciones, y el grupo de Ingeniera de Aplicacin, que construye aplicaciones con los activos reutilizables existentes en la organizacin.
Cambios en el personal.- La formacin y los incentivos son tiles para cambiar prcticas habituales en el personal y disminuir la desconfianza en la utilizacin de cdigo desarrollado por otros como parte del suyo propio.
Por consiguiente los mayores beneficios se obtendrn de la unin de factores organizativos (personal y procesos) y tecnolgicos (orientacin a objetos). En esto se puede afirmar que no hay diferencias substanciales con los principios que rigen la mejora del desarrollo software.
3.5.3 Niveles de Reusabilidad.
La adopcin de reusabilidad en una organizacin ha de seguir una evolucin incremental donde se parte de soluciones tecnolgicas mas simples como las bibliotecas de clases a soluciones de mayor complejidad como son las arquitecturas de referencia.
Las cinco etapas en la evolucin de la reusabilidad son:
Corta-Pega.- En esta primera etapa o fase de la evolucin, la organizacin trata de disminuir los tiempos de desarrollo mediante la clonacin de trozos de cdigo. Aunque es una solucin a primera vista, los problemas aparecen en el mantenimiento, pues a la hora de realizar cambios hay que ser consciente de todos los sitios en el cdigo donde estos aplican. Es un problema tpico de la gestin de configuracin.
Caja Negra.- En la reusabilidad de caja negra se identifican componentes software de uso comn en la organizacin. Se garantiza que existe un original nico de ellas. La utilizacin de bibliotecas y taxonomas de clasificacin puede ayudar en esta fase de la evolucin de la organizacin.
98 Activos Reutilizables.- En esta fase la organizacin considera otros activos reutilizables distintos del cdigo. Entre estos destacan principalmente los procedimientos de prueba, las especificaciones, ficheros de ayuda, herramientas y otros.
Con esta aproximacin se incrementa la reusabilidad en las diversas fases del ciclo de vida del software, no solo en la fase de implementacin como ocurra especialmente en la fase de Caja Negra.
Arquitecturas.- En esta fase se generan componentes reutilizables, que podran ser los anteriores, y una arquitectura software que los aglutina , permitiendo desarrollar aplicaciones en un dominio especifico de negocio, sea este financiero, control de trfico areo , gestin de red u otros. Las guas para la creacin de arquitecturas de referencia o especificas de dominio de este proyecto pueden ser utilizadas en dominios de aplicacin diferentes.
Reusabilidad sistemtica. Se basa en la estandarizacin de los activos reutilizables y los procesos para producirlos, la creacin de una infraestructura para la produccin de estos activos y los mecanismos organizativos adecuados para facilitar la reusabilidad de estos.
La separacin del personal en grupo de ingeniera de dominio o responsable de crear y mantener los activos reutilizables y el grupo de ingeniera de aplicacin, responsable de utilizarlos, es un aspecto fundamental en esta fase. 69
3.5.4 Reusabilidad Orientada a Objetos. Las anteriores consideraciones indicaban que la reusabilidad no depende esencialmente de aspectos tecnolgicos sino tambin de los organizativos y otros. No obstante la orientacin a objetos ofrece un conjunto de particularidades que facilitan el desarrollo de la reusabilidad.
69 www.evolutionperu.com/reuse.html (25/01/2008)
99 En esta seccin se describen tres niveles de reusabilidad desde el punto de vista arquitectnico que pueden ser llevados a cabo teniendo en cuenta los principios de la orientacin a objetos. Estos niveles son las bibliotecas de clases, los patrones de diseo y las arquitecturas. Se plantearan que significan cada uno de ellos y que aspectos se tendran en cuenta en su construccin.
3.5.4.1 Bibliotecas de Clases. En trminos generales se define una biblioteca de clases como una coleccin de componentes reutilizables relativas a un dominio de aplicacin o independientes de dominio que sirven como elementos constructivos de aplicaciones.
En principio las bibliotecas de clases ms utilizadas son independientes del dominio de aplicacin y suelen ser suministradas por los fabricantes de compiladores o por terceros. Ejemplos del ltimo caso son las bibliotecas de tipos abstractos de datos donde se ofrecen abstracciones estructurales de tipo pilas, colas, listas, bolsas, anillos, etc.
Bibliotecas de clases especficas de dominio tambin existen. Existen en dominios diferentes como los financieros, investigacin operativa, control de trfico areo o comunicaciones.
Propiedades de una Biblioteca de Clases reutilizable:
Completa.- La biblioteca de clases debe proporcionar familias de clases que tengan un interfaz comn pero posibilitando diferentes implementaciones. Adaptable.- Todos los aspectos especficos de la plataforma deben estar identificados y aislados. Eficiente.- Se debe buscar la eficiencia en compilacin, permitiendo el fcil ensamblaje de los componentes y en ejecucin, haciendo una optima utilizacin de las caractersticas del lenguaje.
100 Segura respecto a los tipos.- Permitiendo que las suposiciones estticas respecto al comportamiento de una clase puedan reforzarse por el sistema de compilacin. Simple.- La biblioteca debe usar una organizacin clara y consistente que facilite la identificacin y seleccin de clases concretas. Extensible.- Se ha de admitir la adicin de nuevas clases.
El modelo de objetos se basa en cuatro principios fundamentales y tres secundarios, estos ltimos no son esenciales al modelo de objetos. Los principios fundamentales son: Abstraccin. Encapsulamiento. Modularidad. Jerarqua.
Los principios secundarios son: Tipificacin. Concurrencia. Persistencia.
El creador de una biblioteca de clases tiene que tener en cuenta como son soportados estos principios en el lenguaje de programacin utilizado y en funcin de ello definir una estrategia para implementar los aspectos variables del dominio en las diferentes clases.
Los puntos de variabilidad de los componentes son aquellos aspectos que denotan particularidades que distinguen a las aplicaciones dentro del dominio.
Se pueden utilizar diversas tcnicas de la orientacin a objetos para permitir la implementacin de la variabilidad en los componentes. Las tcnicas posibles son:
Especializacin.- Utilizando los mecanismos de herencia soportados por el lenguaje. Extensin.- Utilizando la composicin de componentes.
101 Parametrizacin.- Esta tcnica permite definir un tipo sin especificar todos los otros tipos que este usa. Los tipos no especificados son suministrados como parmetros en el punto de uso.
La herencia permite definir la implementacin de una clase en trminos de otra. Esta reusabilidad se le suele denominar de "caja blanca" porque permite que las interioridades de los ancestros sean conocidas por sus descendientes.
La herencia se define estticamente en tiempo de compilacin y es relativamente fcil de aplicar. La herencia tiene el inconveniente que en cierta medida no cumple el principio de encapsulamiento, por lo que ha de ser utilizada con precaucin.
La composicin es una alternativa a la herencia. En la composicin se obtiene una nueva funcionalidad ensamblando o componiendo objetos. Esto requiere que los objetos tengan bien definidas sus interfaces.
Se suele conocer como reusabilidad de "caja negra" porque los objetos no conocen los detalles internos de los otros. La composicin se puede realizar en tiempo de ejecucin.
Si se favorece la composicin sobre la herencia se pueden tener en la biblioteca de clases, jerarquas de clases ms pequeas y fciles de manejar.
La delegacin es la forma de permitir que la composicin sea tan poderosa para la reusabilidad como la herencia. En la delegacin, dos objetos estn involucrados en manejar una misma peticin. Un objeto receptor y un delegado.
El receptor se pasa a si mismo al delegado para permitir que la operacin del delegado se refiera al receptor.
La principal ventaja de la delegacin es que permitira cambiar la conducta de la ventana en tiempo de ejecucin. Por ejemplo una ventana se hara circular simplemente remplazando el objeto rectngulo por un objeto crculo, suponiendo que ambos tuvieran el mismo tipo.
102 Los tipos parametrizados, tambin conocidos como genricos (Ada,Eiffel) o plantillas (C++) , permiten definir un tipo sin especificar todos los tipos que ste usa. Estos sern suministrados como parmetros en el punto de instanciacin.
Los cambios son realizados por tanto en tiempo de compilacin. Los tipos parametrizados se utilizan especialmente para implementar tipos abstractos de datos: pilas, colas, anillos , bolsas y otros que permiten almacenar distintos tipos de elementos segn sean instanciados en tiempo de compilacin.
La figura 33 describe un diseo de una aplicacin para ordenar mensajes de correo electrnico por orden de llegada y prioridad. Para lo cual se utiliza una biblioteca de clases, plantillas en C++, donde se encuentran los tipos abstractos cola y cola con prioridades, esta ltima es un descendiente del anterior.
Se crea un ejemplar de cola con prioridades para manejar mensajes. Un descendiente de ste es el componente para gestionar mensajes de correo que se ha realizado para cubrir los requisitos de la aplicacin.
Figura No. 33.-Diseo de Aplicacin para Ordenar Mensajes. 70
El polimorfismo consiste en dar el mismo nombre a servicios implementados en diferentes objetos, estos servicios pueden implementarse diferentemente pero producirn el mismo tipo de resultados. Se utiliza el polimorfismo cuando se quiere enviar el mismo mensaje a diferentes objetos sin saber el objeto especfico al que se le est enviando el mensaje.
Existen 2 formas de polimorfismo:
Ad Hoc.- Es la sobrecarga de operadores, donde una funcin es llamada basndose en su firma definida como la lista de tipos de argumentos en su lista de parmetros. Puro. Una clase es subclase de otra. Las funciones disponibles en la superclase pueden usarse en la subclase. Se puede tener distinta implementacin de la funcin en la subclase. La funcin a utilizar se determina dinmicamente en tiempo de ejecucin. esto se conoce como ligadura dinmica y se consigue en C++ con el uso de funciones virtuales.
3.5.4.3 Clasificacin de Clases. Un aspecto no especfico de la orientacin a objetos pero de inters para la reusabilidad es la clasificacin de las clases pertenecientes a una biblioteca de clases. Estas clasificaciones son ms necesarias segn sea el tamao de la biblioteca de clases, es decir cuando se habla de ms de cien clases no es fcil localizar la clase que se necesita en un momento determinado.
Los esquemas de clasificacin de componentes software reutilizables que seran tambin aplicados a las clases son bsicamente dos:
Enumerativos.- Donde se descompone el dominio en clases cada vez ms especficas y restringiendo a la vez el nmero de ramas de los rboles as creados.
104 Por Facetas.- Se basa en la sntesis y no en la descomposicin del dominio. Las facetas, cuyo uso proviene tambin de la biblioteconoma, permiten clasificar una clase escogiendo el trmino adecuado para cada una de las facetas que mejor describa la clase en cuestin.
Los esquemas enumerativos se basan en jerarquas de las clases o componentes relacionadas con niveles de abstraccin, relevancia del dominio, atributos de la clase o tcnicas de creacin de ejemplares.
Las facetas se pueden considerar como dimensiones, perspectivas o vistas de un dominio particular. Para desarrollar un sistema de clasificacin por facetas, se sugiere tener en cuenta dos aspectos: funcionalidad del componente y entorno en donde realiza su funcin.
Esto lleva a un conjunto de seis facetas para describir un componente:
Funcin. Objeto. Medio. Tipo de Sistema. rea Funcional. Tipo de Negocio.
Pueden ocurrir problemas de asignacin de trminos a las facetas o con el manejo de sinnimos, que llevan a la construccin de tesauros de trminos. Se utilizan tambin los grafos de distancia conceptual para soportar una medida objetiva de la similitud conceptual entre los trminos de una faceta.
3.5.4.4 Patrones de Diseo. La utilizacin de patrones no es una actividad exclusiva del desarrollo software, precisamente ha sido una prctica habitual en multitud de disciplinas siendo su utilizacin en el desarrollo software ms bien reciente.
105 En trminos generales se puede definir un patrn como una forma realizada, original, aceptada o propuesta para su imitacin: algo dispuesto como ejemplo a ser copiado o utilizado como prototipo.
En el software desarrollado con las metodologas de orientacin a objetos, se considera un patrn de diseo software a la descripcin de un conjunto de objetos y clases que se comunican entre si y que pueden ser adaptados para resolver un problema de diseo general en un contexto particular.
En general, un patrn de diseo tiene cuatro elementos esenciales:
1) Nombre.- Es la identificacin que se puede utilizar para etiquetar un problema de diseo, su solucin y consecuencias. El nombre de los patrones, es de gran importancia pues formar parte del vocabulario del dominio de reusabilidad y nos permitir trabajar a niveles superiores de abstraccin. 2) Problema.- Describe cuando se puede aplicar el patrn. Se explica el problema a resolver y su contexto. Se pueden describir problemas especficos de diseo tales como la representacin de algoritmos como objetos. 3) Solucin.- Describe los elementos que conforman el diseo en cuestin, incluyendo sus relaciones, responsabilidades y colaboraciones. La solucin no describe un diseo particular y concreto o una implementacin, dado que un patrn es como una plantilla que puede ser aplicada en situaciones diversas. Por consiguiente, un patrn suministra una descripcin abstracta de un problema de diseo y como una agrupacin de elementos constructivos lo resuelven. 4) Consecuencias.- Estas representan las alternativas y resultados de aplicar el patrn. Aunque a veces en las descripciones de diseos se obvian las consecuencias, stas son crticas para evaluar las alternativas y para determinar los costes y beneficios derivados de aplicar un patrn.
106 En el desarrollo de sistemas, las consecuencias suelen estar ligadas a alternativas en tamao o prestaciones. Tambin se tienen en cuenta aspectos de lenguaje e implementacin. Impacto en la portabilidad, flexibilidad o escalabilidad del sistema. 71
3.5.4.5 Arquitecturas.
Las arquitecturas o "frameworks" definen un conjunto de elementos constructivos software que se pueden utilizar, extender o adaptar para la realizacin de aplicaciones informticas especficas.
La construccin de compiladores fue una de los primeros dominios donde se han realizado arquitecturas. Otros han sido las interfaces grficas. Actualmente se estn desarrollando arquitecturas en otros dominios como el financiero, avionica o multimedia.
La arquitectura describe la estructura global de un sistema es decir la particin de ste en clases y objetos, la asignacin de responsabilidades, la colaboracin entre los objetos, y el flujo de control.
La arquitectura captura las decisiones de diseo que son comunes al dominio de la aplicacin. Las arquitecturas enfatizan la reusabilidad a nivel de diseo en vez de a nivel de cdigo.
Las arquitecturas se diferencian de los patrones en una serie de aspectos: Los patrones de diseo son ms abstractos que las arquitecturas. Las arquitecturas estn implementadas en cdigo, lo que solo ocurre con los ejemplos concretos de los patrones. Los patrones se implementan cada vez que se utilizan. Los patrones son ms reducidos que las arquitecturas, algunos autores les denominan microarquitecturas. Una arquitectura puede contener varios patrones, lo contrario en cambio no es cierto.
107 Los patrones son menos especializados que las arquitecturas. Las arquitecturas tienen siempre un dominio especfico de aplicacin, en cambio los patrones pueden ser aplicados en diversos dominios.
Las arquitecturas han de tener una serie de propiedades para favorecer su reusabilidad:
Ser Completa.- La arquitectura debe soportar las caractersticas necesitadas por los ingenieros de las aplicaciones y suministrar implementaciones siempre que sea posible. Ser Flexible.- Las abstracciones podrn ser utilizadas en diversos contextos. Ser Extensible.- Los ingenieros de las aplicaciones podrn fcilmente aumentar o modificar la funcionalidad suministrada. Se suministraran los mecanismos de adaptacin que permitan modificar la conducta de la arquitectura por herencia o composicin. Ser Inteligible.- Las interfaces con otros subsistemas estn claras y la arquitectura est bien documentada y sigue estndares de diseo y codificacin.
El dominio de solucin que una arquitectura resuelve puede ser el de funciones de aplicacin, funciones de dominio o funciones de soporte.
Las arquitecturas de aplicacin conllevan la implementacin de una rebanada horizontal de la funcionalidad de un sistema. Ejemplos de estas arquitecturas son aquellas para resolver las interfaces grficas de un sistema.
Las arquitecturas de dominio conllevan la implementacin de la solucin a los requisitos de un dominio determinado de aplicacin. Conllevan por consiguiente la implementacin de una rebanada vertical de funcionalidad.
108 Las arquitecturas de soporte suministran los servicios a nivel de sistema tales como aquellos de acceso a ficheros, soporte a computacin distribuida o manejadores de dispositivo. 72
Aunque la orientacin a objetos no es ni condicin necesaria ni suficiente para obtener beneficios de la reusabilidad, puede contribuir a sta. Existen diversos niveles donde la orientacin a objetos puede contribuir en la adopcin de la reusabilidad por una organizacin. Estos son las bibliotecas de clases, los patrones de diseo y las arquitecturas.
No siempre los aspectos ms novedosos o complejos de los lenguajes de programacin, como puede ser la herencia mltiple o la ligadura dinmica son los que mejor contribuyen a la reusabilidad.
La conjuncin de los principios bsicos de la ingeniera software con la implementacin adecuada de las variabilidades de un dominio de aplicacin ha dado frecuentemente mejores resultados.
3.6 Calidad en la Construccin. La calidad en la construccin se define como:
El conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia. Es sinnimo de eficiencia, flexibilidad, correccin, confiabilidad, mantenibilidad, portabilidad, usabilidad, seguridad e integridad.
La calidad del software es medible y vara de un sistema a otro o de un programa a otro. Un software elaborado para el control de naves espaciales debe ser confiable al nivel de "cero fallas"; un software hecho para ejecutarse una sola vez no requiere el mismo nivel de calidad; mientras que un producto de software para ser explotado durante un largo perodo (10 aos o ms), necesita ser confiable, mantenible y flexible para disminuir los costos de mantenimiento y perfeccionamiento durante el tiempo de explotacin.
La calidad del software puede medirse despus de elaborado el producto. Pero esto puede resultar muy costoso si se detectan problemas deriva dos de imperfecciones en el diseo, por lo que es imprescindible tener en cuenta tanto la obtencin de la calidad como su control durante todas las etapas del ciclo de vida del software.
La obtencin de un software con calidad implica la utilizacin de metodologas o procedimientos estndares para el anlisis, diseo, programacin y prueba del software que permitan uniformar la filosofa de trabajo, en aras de lograr una mayor confiabilidad, mantenibilidad y facilidad de prueba, a la vez que eleven la productividad, tanto para la labor de desarrollo como para el control de la calidad del software.
3.6.1 Principios Bsicos de Calidad. La poltica establecida debe estar sustentada sobre tres principios bsicos: tecnolgico, administrativo y ergonmico.
El principio tecnolgico.- Define las tcnicas a utilizar en el proceso de desarrollo del software. El principio administrativo.- Contempla las funciones de planificacin y control del desarrollo del software, as como la organizacin del ambiente o centro de ingeniera de software. El principio ergonmico.- Define la interfaz entre el usuario y el ambiente automatizado. 73
La adopcin de una buena poltica contribuye en gran medida a lograr la calidad del software, pero no la asegura. Para el aseguramiento de la calidad es necesario su control o evaluacin.
73 www.calidaddelsoftware.com (15/12/2008)
110 3.6.2 Control de Calidad.
Para controlar la calidad del software es necesario, ante todo, definir los parmetros, indicadores o criterios de medicin.
Las cualidades para medir la calidad del software son definidas por innumerables autores, los cuales las denominan y agrupan de formas diferentes. Todos los autores coinciden en que el software posee determinados ndices medibles que son las bases para la calidad, el control y el perfeccionamiento de la productividad.
Una vez seleccionados los ndices de calidad, se debe establecer el proceso de control, que requiere los siguientes pasos:
Definir el software que va a ser controlado.- Clasificacin por tipo, esfera de aplicacin, complejidad, etc., de acuerdo con los estndares establecidos para el desarrollo del software.
Seleccionar una medida que pueda ser aplicada al objeto de control.- Para cada clase de software es necesario definir los indicadores y sus magnitudes.
Crear o determinar los mtodos de valoracin de los indicadores.- Mtodos manuales como cuestionarios o encuestas estndares para la medicin de criterios periciales y herramientas automatizadas para medir los criterios de clculo.
Definir las regulaciones organizativas para realizar el control.- Quines participan en el control de la calidad, cundo se realiza, qu documentos deben ser revisados y elaborados, etc.
El control de calidad del software engloba todo el proceso de desarrollo; supervisar y mejorar el proceso, asegurar que se siguen los procedimientos acordados, que se alcanza el nivel de calidad deseado y que se localizan y resuelven los problemas.
111 Estas son las fases de dicho proceso:
Anlisis. Plan general de la prueba. Esquema detallado de la prueba. Prueba de funcionamiento. Prueba de la interfaz de usuario (UI). Inspeccin final del cliente (FCI). Herramientas automatizadas. Localizacin y regresin de errores. Coordinacin de proyectos. 74
3.6.2.1 Gestin de Calidad.
La gestin de la calidad se puede entender como el conjunto de actividades y medios necesarios para definir e implementar un sistema de la calidad, por una parte y responsabilizarse de su control, aseguramiento y mejora continua, por otra.
El control est dirigido al cumplimiento de requisitos, el aseguramiento a inspirar confianza en que se cumplir el requisito pertinente y el mejoramiento al aumento de su eficiencia y eficacia.
La gestin de calidad a nivel de la organizacin en entidades de software ha seguido dos lneas que pueden perfectamente complementarse entre s.
Por una parte, se ha seguido la lnea marcada por las entidades internacionales de estandarizacin para todos los productos y servicios a travs de las normas ISO 9000 y por otra, el mundo del software ha creado su propia lnea de trabajo en la gestin de la calidad, trabajando sobre los procesos de produccin de software como medio de asegurar la calidad del producto final.
112 En los ltimos aos en que los estndares de calidad internacionales se han reorientado hacia el aseguramiento de la calidad, han aparecido en la industria del software dos importantes modelos de referencia que tienen en comn la evaluacin de la capacidad de los procesos en niveles de desarrollo o madurez:
Modelo CMM (Capability Maturity Model). Modelo SPICE (Software Process Improvement and Capability determination).
Estadsticas del Software Engineering Institute (SEI) reportan que del total de empresas que aplican CMM el 81 % se encuentra en el nivel 1, el 12 % en el nivel 2 y el 7 % en el nivel 3. Ninguna ha alcanzado los niveles 4 y 5. (Tinnirello, 1998). Esto da cuenta de la rigurosidad del modelo y de las pocas posibilidades que tendra las PYMES de ubicarse en los niveles superiores.
Las grandes empresas ya consolidadas pueden disponer a su voluntad, y de hecho lo hacen, la implantacin de otras metodologas o esquemas propios para lograr la calidad y la mejora continua de sus procesos productivos.
Sin embargo, para las pequeas y medianas empresas de software la implantacin de sistemas de la calidad basados en las normas ISO 9000 puede constituir el mejor camino a seguir pues estas normas definen los requisitos bsicos de la organizacin y por otro lado la certificacin le confiere un prestigio importante ante sus clientes.
La solucin ideal para los que comienzan es integrar ambos enfoques en la medida de lo posible bajo el principio de especificar en la ISO 9000 todas aquellas caractersticas propias del producto de software que se contemplan en las otras metodologas. 75
75 Ibid.
113 3.6.2.2 Niveles de Calidad. Para acometer la gestin de la calidad con resultados intermedios que permitan a la empresa ir obteniendo madurez en la medida en que avanza la implantacin de las normas, se propone definir 5 niveles, ya no especficos al proceso de desarrollo del producto como da cuenta el CMM, sino referentes a la gestin de la calidad a nivel de toda la organizacin:
Nivel Inicial. Nivel de Proyecto. Nivel de Gestin Total de Calidad. Nivel de Certificacin. Nivel de Referencia. Nivel Inicial.
Nivel Inicial.- Toda empresa de software aplica al menos un mnimo control de la calidad de sus productos y establece algunos parmetros mnimos como requisitos del producto.
Las empresas que trabajan a este nivel se caracterizan por: Definicin de polticas elementales de contratacin. Obtencin de las especificaciones de los clientes. Formacin emprica de equipos de trabajo de acuerdo a la disponibilidad de personal que se tenga. Compromisos de plazos de entrega sin criterios bien fundamentados. Uso de herramientas de ingeniara de software a voluntad de los desarrolladores. Empleo de los lenguajes de programacin en que se tiene experiencia, al no ser que el cliente exija lo contrario. Mnima documentacin. Acta de aceptacin del cliente quien generalmente no est en condiciones de evaluar adecuadamente el producto. Deficiente organizacin del mantenimiento posventa del producto.
114 Nivel de Proyecto .- En este nivel se incluyen: evaluaciones, revisiones y auditorias, normas, procedimientos de control y seguimiento de errores, as como el registro de la informacin como va de retroalimentacin para la calidad del proyecto.
Algunas acciones importantes que no pueden dejar de realizarse son: asegurar que los procesos de ingeniera de software sean usados durante todo el ciclo de vida del proyecto; evaluar mediante mtricas, los requerimientos de calidad de los productos; analizar las prdidas de calidad para definir acciones para el mejoramiento continuo del proceso de desarrollo de software.
Nivel de Gestin Total de Calidad.- Una vez superada la etapa de lograr la calidad en los proyectos, la empresa estar en condiciones de revisar las normas ISO 9000 de manera detallada y comenzar a adecuar sus actividades y procesos a los requisitos mnimos que ellas establecen.
Aqu es importante tener en cuenta: Como la norma admite que la documentacin puede estar en cualquier formato o tipo de medio, revisar los diseos de la intranet y de los sistemas de informacin digital que minimicen la burocracia del exceso de documentacin con el que generalmente se acompaa la implantacin de estas normas. Dentro de la gestin de recursos, prestar la mxima atencin a la gestin del capital humano (gestin del conocimiento a nivel de toda la organizacin y control de indicadores de capital intelectual). Revisar el proceso de materializacin del producto que se defini a nivel de proyecto a la luz de la norma. Conceder especial importancia dentro de la revisin de requisitos relacionados con el producto a los no explcitos por parte del cliente y a los de ingeniera de software. El control de cambios de diseo y desarrollo mediante los registros adecuados garantizar la calidad del proceso de mantenimiento del software.
115 La propiedad del cliente requiere un respeto riguroso: habr que precisar la confidencialidad de la informacin que se maneja y hasta donde llega la participacin del cliente en el know how no informtico del producto. La medicin, anlisis y mejora se da en dos etapas: durante el desarrollo del software utilizando las mtricas que proporcionan los mltiples modelos existentes y el seguimiento y medicin posterior. Se requiere implementar adecuados sistemas de satisfaccin del cliente que permita retroalimentarse con el desempeo posterior del producto.
Nivel de Certificacin.- Por la gran variabilidad de los procesos de desarrollo de software, es importante buscar una estabilidad del nivel anterior antes de pasar a este nivel. Por otro lado, los procesos de desarrollo de software ocurren en plazos mucho mayores que los procesos productivos y de servicios convencionales, de ah que para demostrar resultados con vistas a la certificacin hay que esperar un tiempo mayor.
Una vez certificada la entidad tendr que ser capaz en el tiempo de demostrar su aptitud para mantener la certificacin otorgada en las auditorias recurrentes que establecen las normas.
Nivel de Referencia.- Existe una tendencia a considerar el proceso de desarrollo de software como un proceso de I + D lo que no se considera exacto. El verdadero proceso de investigacin y desarrollo se da en el software cuando se trabaja en nuevas herramientas de ingeniera y en nuevos mtodos de trabajo que permitan obtener resultados superiores.
Las empresas de alto desempeo se convierten en referencia para otras que comienzan a partir de convertir sus mtodos y experiencias en estndares de trabajo. Por otro lado, el desarrollo de software propicia la produccin de herramientas de ingeniera y de codificacin que hacen mas efectivos y productivos los procesos. 76
76 www.ati.es/gt/calidad-software (25/01/2008)
116 3.7 La Integracin. Un concepto de Integracin puede ser:
Etapa en la cual se utiliza el diseo realizado (cdigo de programacin) y se realiza la unin de las diferentes partes del software. Incluye toda la documentacin necesaria. El resultado de esta etapa es el software en versin Beta. 77
La integracin de componentes o elementos de software no es un concepto nuevo.
Lo que ha hecho el software es llevar la integracin de software a lmites mucho ms extensos. El software libre por su naturaleza ofrece casi todas las ventajas para construir un negocio basado en integracin de software.
Las bases de este tipo de negocio consisten en un potente I+D, capaz de conocer y analizar la mayora de las herramientas disponibles basadas en software libre. De este conocimiento es posible construir aplicaciones a la medida del cliente mediante la integracin de los elementos que ms se adaptan a sus necesidades.
La clave para este tipo de negocios es el desarrollo de software de integracin evitando en la medida de lo posible la modificacin de las aplicaciones a integrar y que permita evolucionar los distintos elementos de la solucin final con el mnimo impacto sobre la solucin alcanzada.
Para las soluciones construidas en base a integracin de distintas herramientas es vital la liberacin del cdigo desarrollado, sobre todo si la integracin ha requerido la adaptacin de alguna de las herramientas utilizadas.
La clave del modelo de negocio es un potente I+D, fundamentalmente dedicado al anlisis de aplicaciones existentes en el mundo del software libre desde la ptica de la integracin, dirigido desde el departamento comercial.
117 La solucin a las necesidades del cliente se construye generalmente mediante las siguientes fases:
Anlisis de las necesidades del cliente Identificacin de los grandes sistemas que integrarn la solucin Identificacin de las necesidades de desarrollo Desarrollo de elementos necesarios Integracin de la solucin mediante utilizacin de estndares LDAP, SGBD.
La integracin se realiza de forma limpia, evitando modificar el cdigo de las distintas aplicaciones a integrar.
De este modo es posible beneficiarse del proceso de revisin y actualizacin de versiones de cada proyecto individual basado en software libre sin realizar esfuerzos importantes en reintegrar las modificaciones.
En casos en los que es necesario realizar modificaciones a algn proyecto original, dichas modificaciones deben ser siempre publicadas y enviadas al proyecto principal, de modo que se garantice la compatibilidad con la solucin global ante futuras revisiones del cdigo.
La integracin proporciona una configuracin e instalacin personalizada de software (estndar, personalizada o de propiedad) en nuestro entorno de fbrica. A travs de la integracin de software empresarial, puede controlar su servidor para asegurar que el sistema tendr la misma versin del mismo software, sin variaciones debido a versiones antiguas de la misma aplicacin.
La integracin tambin proporciona una configuracin e instalacin de software personalizada, (estndar, personalizada o de propiedad) en nuestro entorno de fbrica.
118 Los servicios de integracin de software incluyen:
Cargas de imgenes de software del cliente (Windows 2000 / Windows XP / Windows 9X / NT4 y Linux). Cargas de sistema operativo y sistema operativo de red, incluidos parmetros de sistema operativo personalizados. Cargas de aplicaciones de propiedad y de otros proveedores, incluidos software de copia de seguridad y comunicacin de administracin de servidores. Configuracin de dominio. Particin de disco duro. Agrupacin en clster personalizada. Personalizacin del sistema, incluida la personalizacin de parmetros individuales para que cada uno tenga una direccin IP, un nombre de ordenador y un identificador de sistema exclusivos. Servicios de administracin de imagen.
3.7.1 Caractersticas. Las caractersticas de esta etapa son las siguientes: La integracin de los datos y de los sistemas surge como un resultado directo de la centralizacin del departamento de sistemas bajo una sola estructura administrativa. Las nuevas tecnologas relacionadas con base de datos, sistemas administradores de bases de datos y lenguajes de cuarta generacin, hacen posible la integracin. El costo del equipo y del software disminuye por lo cual est al alcance de ms usuarios. En forma paralela a los cambios tecnolgicos, cambia el rol del usuario y del departamento de Sistemas de Informacin. Los usuarios y el departamento de sistema inician el desarrollo de nuevos sistemas, reemplazando los sistemas antiguos, en beneficio de la organizacin. 78
En la construccin del software se debe tener siempre la idea de que este tiene que ser lo menos complejo posible, para detectar a tiempo los errores que puedan presentarse o aadir mejoras a su funcionamiento, para ello es importante tambin que exista una documentacin de todos los procesos que lo conforman y que esta sea entendible por todas las personas que intervengan en el proceso.
Otro aspecto a considerar es el entendimiento del negocio, es decir, que desde los lderes de proyecto, pasando por los desarrolladores el control de calidad y la gente que implementa el sistema tenga claros los objetivos del mismo, esto sin duda beneficiar y har ms fluida la comunicacin en cuanto a tiempos, prioridades y herramientas necesarias.
Existen estndares de construccin aprobados en la Ingeniera de Software que no se pueden dejar pasar, las aplicaciones que se desarrollen debern cumplir con las normas ya establecidas.
Tambin ya se tiene conocimiento que adems de los modelos de construccin tradicionales, existen nuevas tcnicas de planeacin y desarrollo que se adaptan a las nuevas tecnologas y que en el caso de las aplicaciones robustas, son indispensables debido a su flexibilidad y minimizacin de complejidad.
En la construccin de software debe existir una arquitectura de medicin, es decir, hasta donde tiene que cumplir su objetivo y hasta donde tiene que estar limitado, es importante proporcionar herramientas adicionales que quizs no formen parte de los objetivos principales, pero siempre y cuando estas no incrementen la complejidad y como consecuencia se entregue un producto demasiado robusto.
120 La calidad quizs es el factor ms importante en la fase de desarrollo, ya que tiene que servir como filtro antes de la implementacin de aplicaciones de software, las empresas que no cuentan con estndares y procedimientos eficaces de calidad sern menos productivas y las aplicaciones que desarrollen sern ms susceptibles de caer y por tanto, ser reemplazadas por otras.
Gracias a la integracin, se permite la divisin del trabajo, ya que al principio cada quien debe de tener sus propias, funciones, los lderes tratan con los usuarios, la gente de desarrollo se encarga de las construccin, el control de calidad ejerce sus pruebas de validacin, pero al final todos se unen para formar as un sistema que cumpla con los requerimientos inicialmente establecidos.
121 BIBLIOGRAFA
CAPTULO I Pressman, R.S. Ingeniera del Software. Un enfoque prctico . Mc Graw Hill, Espaa 6 ed. 2006. p. 15 2006- Swebok_Guide_2006 (Archivo en formato PDF) Profesor: Sergio Fuenlabrada Velzquez. JOHNSON, Bruce. Flexible Software Design. Ed Mc Graw Hill. 2005, pp.440. E. J. Weyuker, "Evaluacin de la Complejidad del Software" Mc Graw Hill, 6 ed 2001. pp. 1357-1365. Klir, G.J., Complejidad del Software Aspectos Generales, Prentice Hall, 3 ed. Mxico 2003, p. 132-133. Pleeger. Ingeniera del Software: Teora y prctica. Pearson Education.Mxico 2003 pp.55. 2006- Tipos de Cambio (Archivo en formato PDF) Profesor: Sergio Fuenlabrada Velzquez. Effy Oz, Administracin de sistemas de informacin, 2da ed. Thomson Learning 2001. A. Toval. Ingeniera del Software. Gestin de Requisitos, ed. DM, Espaa, 1999. Stair M Ralphm. Principios de sistemas de informacin,. Thomson Learning 4 Ed 2002. BOOCH, Grady. Lenguaje Unificado de Modelado. Mc Graw Hill. Ao 2000. pp. 464. SOMMERVILLE, Lan. Ingeniera de Software. Mc Graw Hill. 2008. pp 692.
CAPTULO II Lawrence, S..Ingeniera del software. Ed. Prentice-Hall, Mxico. 2002. Ivar Jacobson. El proceso unificado de desarrollo de software. Addison-Wesley 2000. MEYER,Construccin del Software Orientado a Objetos. McGraw-Hill, 2001.pp 480. Fairley, R.: Ingeniera del Software. McGraw-Hill, 2001.pp 165. JOHNSON, Flexible Software Design. McGraw-Hill, 2005.pp 230. McGarry, J. Optimizacin prctica del Software. Addison Wesley. 2002. pp 142. Bernd Bruegge, Allen h. Dutoit. Ingeniera de Software Orientado a Objetos. Prentice Hall. 2002. Perdita Stevens, Rob Pooley. Utilizacin de UML en Ingeniera del Software con Objetos y Componentes. Addison Wesley. 2002 Sahri Lawrence Pfleeger. 2002. Ingeniera de Software. Teora y Prctica. Prentice Hall. Captulo 7.
CAPTULO III SOMMERVILL. Ingeniera de Software. Mc Graw Hill, 5 Ed.,2002. pp.560. RogerS. Pressman. Ingeniera del Software Un enfoque prctico. 4 Ed.Mc Graw-Hill. P. 460. Pleeger. Ingeniera del Software: Teora y prctica. Pearson Education..Mxico 2003 pp..55 Effy Oz. Administracin de sistemas de informacin, 2da ed. Thomson Learning 2001 . Roda, Jos Luis y Brito, Julio. Introduccin a la ingeniera del software. Gobierno de Canarias, 200. K. Arnold, J. Gosling, D. Holmes. El lenguaje de programacin JAVA. Addison Wesley, 2001 Beck, K. 2002. Una explicacin de la Programacin Extrema. Aceptar el Cambio. Addison Wesley. 2002. Cabrera, G., Montoya, M. 1999. Anlisis y Diseo Detallado de Aplicaciones Informticas de Gestin. Ciclo Formativo Grado Superior, McGraw Hill.