25 CAPITULO II MARCO TEÓRICO. 2. TEORÍA DE SISTEMAS. 2.1 DESARROLLO DE APLICACIONES INFORMÁTICAS. 2.1.1 ARQUITECTURA DE SISTEMAS INFORMÁTICOS. GENERALIDADES Las tendencias de la evolución tecnológica, determinan que el presente y el futuro inmediato de la informática, esta asociado a las tecnologías que utilizan la facilidad de las comunicaciones, para enlazar entornos empresariales con los usuarios, que necesitan acceso a la información. La arquitectura basada en los estándares Internet es "Navegador/Red", significando que el foco principal es la informática basada en Red. Bajo este enfoque, las aplicaciones únicamente existen en las redes y están disponibles para su acceso en el momento en el que esta sea requerida. Las arquitecturas basadas en n-capas permiten a los componentes de negocio correr en una LAN, WAN o Internet. Esto significa que cualquiera con un ordenador y conexión a la Red posee toda la funcionalidad que tendría si se encontrase delante de su sistema de escritorio. Una arquitectura de este tipo permite la integración, escalabilidad, enlace o reingeniería de los sistemas existentes para adaptarse continuamente a los constantes cambios en las necesidades de negocio y convertirse en una tarea manejable en el futuro. 2.1.2 DESARROLLO DEL MODELO DE N-CAPAS. El modelo n-tier (n-capas) de informática es un cambio en los modelos de computación, desde los tradicionales sistemas cliente-servidor, hacia sistemas 26 distribuidos multiplataforma altamente modulables, y representa un ejemplo de los nuevos paradigmas en el desarrollo de aplicaciones. Hay que destacar la importante distinción que existe entre niveles (tiers) y capas (layers). Una capa es una separación lógica del software, una separación básica de tareas en el nivel del desarrollador, de modo que se pueden dividir más fácilmente las responsabilidades con respecto al sistema. El patrón de capas establece que el uso de capas ayuda a estructurar aplicaciones que pueden descomponerse en grupos de sub-tareas, cada uno de los cuales se encuentra en un nivel de abstracción determinado. Dicho de otro modo: dividir las diversas tareas de un sistema empresarial (recuperación de datos, almacenamiento de datos, ejecución de reglas empresariales con esos datos, visualización de datos, recopilación de entradas, etc.) en componentes o subsecciones, de modo que se pueda realizar con mayor facilidad un seguimiento de lo que ocurre, dónde y cuándo. La división del trabajo más frecuente de capas corresponde a niveles de de funcionalidad bien definido: capa de presentación, capa de negocio (lógica del dominio) y capa de acceso a datos. Por otra parte, un nivel es una capa física de hardware; normalmente, un equipo en el que se puede ejecutar todo el sistema o una parte de él. El entorno tradicional de cliente/servidor (en el que se escribe un programa que ejecute instrucciones SQL con una base de datos que se ejecuta en un servidor independiente) es un sistema de dos niveles. El diseño de World Wide Web se basa originalmente en un enfoque de dos niveles; uno de ellos, el del equipo cliente, se encuentra en una oficina o un hogar y tiene acceso remoto a un segundo nivel, que se encuentra en una sala de servidores en un lugar indeterminado. 27 Los principios y motivos de la disposición del diseño de software en capas, están basados en razones que justifican el modelo. En primer lugar, colocar equipos con las características de un servidor ante los usuarios, iría en detrimento de la centralización de los datos y la eficacia desde un punto de vista económico. Luego estaba la necesidad de escalabilidad: Con el crecimiento de Internet y una mayor accesibilidad para los usuarios, las empresas se dieron cuenta de que podían llevar sus sistemas hasta los clientes, y trasladar buena parte de la tarea que antes llevaban a cabo los sistemas internos, fuera de la compañía, a Internet. Por ejemplo, en 1980, un cliente tenía que llamar a una compañía de envíos y preguntar a un representante del servicio de atención en qué punto se encontraba un determinado paquete en tránsito. El representante de atención al cliente preguntaba el número de seguimiento y después usaba un sistema interno de software para averiguar la ubicación del paquete. En 2005, el mismo cliente sólo tenía que elegir su explorador web preferido en el sitio web de la empresa y escribir el número de seguimiento. Se trata de los mismos algoritmos de servicios de fondo que buscan en los mismos sistemas de almacenamiento de datos, pero ahora es el usuario el que introduce directamente los datos, en lugar de un empleado. Sin embargo, la ampliación del "alcance" del sistema empresarial llevaba un costo aparejado: Mientras que el sistema interno sólo tenía algunos centenares de usuarios (los representantes de atención al cliente), ahora puede llegar a tener centenares de miles (los clientes). Y aquí nos encontramos ante un problema, dado que la mayoría de los servidores de bases de datos pueden admitir algunos centenares de conexiones simultáneas, pero varios centenares de miles colapsarían la base de datos en poco tiempo Sin embargo, se hizo evidente una propiedad relacionada con estas conexiones simultáneas: La mayoría de las aplicaciones de cliente/servidor, la conexión establecida con la base de datos permanecía inactiva la mayor parte del tiempo (más del 95%), a la espera de solicitudes de operaciones con la base de datos. 28 Esto significaba que el cuello de botella se encontraba en el número de conexiones, no en el trabajo que se llevaba a cabo. La implicación era que, para ampliar la escalabilidad de la base de datos, sería preciso aumentar la cantidad de trabajo que se podía realizar a través de cada una de estas conexiones. Así pues, se creó un nivel intermedio, al que se conectan los clientes para la multiplexación de las solicitudes a la base de datos. Si la base de datos sólo puede admitir 100 conexiones, y cada conexión de cliente está siendo usada el 1% del tiempo, podemos ampliar la escalabilidad de la base de datos mediante la conexión de 100 clientes a un servidor intermedio que, a su vez, usa una conexión (100% del tiempo, 1% por cada cliente) para las operaciones con la base de datos. La escalabilidad se multiplica por cien. Lo anterior es valido para un entorno empresarial grande, pero difícilmente justifica el modelo de n capas para entornos con pocos usuarios concurrentes conectados a la base de datos. En este caso entran en juego factores de seguridad. Para una aplicación que se ejecute en el equipo de un usuario final (ya sea basada en web o de cliente enriquecida), no es probable que ningún administrador de sistemas o consultor de seguridad recomiende colocar una base de datos con información importante directamente tras un firewall (con acceso directo desde equipos que se encuentren fuera del perímetro de seguridad, por ejemplo). Si se interpone un equipo, con otro firewall detrás, se crea lo que habitualmente se denomina una zona desmilitarizada, o DMZ, que posibilita una mayor restricción del acceso a la base de datos. Esa zona desmilitarizada fortalece considerablemente la infraestructura de seguridad, y reduce las probabilidades de intrusión. Así, no sólo se protegen los datos de intentos de robo, sino que también se contribuye a proteger los servidores (y, por lo tanto, el resto de la aplicación o del sistema) de un ataque de denegación de servicio. Otro factor, que hace atractivos los sistemas de n módulos para muchos propietarios de grandes sistemas, está relacionado con la implementación; es 29 decir, la instalación física del software en un equipo al que puedan tener acceso los clientes. En el entorno tradicional de cliente/servidor, la convivencia de la lógica empresarial con la lógica de presentación y la de acceso a datos llevó a los programadores a una constatación poco agradable: Cada vez que se precisaba una nueva actualización (por ejemplo, cambios en la forma de procesar los datos en la empresa, o una nueva vista de esos datos), era preciso reemplazar o ampliar con nuevo código el cliente de los escritorios de los usuarios. Eso significaba, al menos entonces, que alguien (normalmente, el desarrollador o administrador de sistemas que ocupaba el puesto más bajo en el escalafón) tenía que ir de equipo en equipo para instalar el nuevo código. O bien se pedía a los usuarios que descargasen a través de la red el código más reciente; lo que, muchas veces, se pasaba por alto o no se hacía correctamente. En ningún caso se daba una situación idónea para proponer actualizaciones frecuentes. Las implementaciones requerían tiempo, durante el cual tenía que interrumpirse el funcionamiento del sistema para evitar la alteración semántica de datos debida a la mezcla de versiones de las aplicaciones que trabajaban continuamente con la base de datos. Este factor relacionado con la implementación contribuyó considerablemente a acelerar la adopción del modelo de n niveles y, más concretamente, de la aplicación basada en web. Ahora, en lugar de tener que llevar el código hasta el escritorio de cada usuario, puede implementarse en el servidor web (único), de modo que el explorador web del usuario final se limite a seleccionar los cambios sin necesidad de más esfuerzo. Por sí misma, la implementación no constituye un motivo para poner en marcha un sistema de n niveles; varias alternativas, no disponibles en los tiempos de las aplicaciones tradicionales de cliente/servidor, se han agregado ahora a la lista de posibilidades de implementación. De hecho, actualmente es algo habitual lanzar una aplicación cliente enriquecida que se actualice automáticamente en el inicio, conectándose a internet y descargando los archivos necesarios para ello. 30 Algunas ventajas del modelo de desarrollo de aplicaciones en n-capas son las siguientes: Desarrollos paralelos (en cada capa) Aplicaciones más robustas debido al encapsulamiento Mantenimiento y soporte más sencillo (es más sencillo cambiar un componente que modificar una aplicación monolítica) Mayor flexibilidad (se pueden añadir nuevos módulos para dotar al sistema de nueva funcionalidad) Alta escalabilidad. La principal ventaja de una aplicación distribuida bien diseñada es su buen escalado, es decir, que puede manejar muchas peticiones con el mismo rendimiento simplemente añadiendo más hardware. El crecimiento es casi lineal y no es necesario añadir más código para conseguir esta escalabilidad. Como tecnología, las arquitecturas de n-capas proporcionan una gran cantidad de beneficios para las empresas que necesitan soluciones flexibles y fiables para resolver complejos problemas inmersos en cambios constantes. Diagrama esquemático de una arquitectura de 3 capas (3-tiers). 31 2.1.3 CARACTERÍSTICAS DE UNA APLICACIÓN WEB. Aunque muchas variaciones son posibles, una aplicación Web está comúnmente estructurada como una aplicación de tres-capas. En su forma más común, el navegador Web es la primera capa, un servidor usando alguna tecnología Web dinámica (como PHP) es la capa media, y una base de datos como última capa. El navegador Web manda peticiones a la capa media, que la entrega valiéndose de consultas y actualizaciones a la base de datos, y genera la imagen con la información requerida en la interfaz de usuario. Las aplicaciones Web tienen la ventaja adicional que las actualizaciones son relativamente poco costosas, ya que no requieren replicarse a los clientes. Cualquier cambio o modificación de la aplicación solo es requerida en el servidor Web. 2.2 SERVIDORES DE APLICACIONES. 2.2.1 DEFINICIONES. Un servidor de aplicaciones es un servidor en una red de computadores que ejecuta aplicaciones, y se puede definir como un servidor Web interconectado con componentes adicionales para despliegue de aplicaciones. Proporciona servicios de aplicación a computadoras cliente y generalmente gestiona la mayor parte (o la totalidad) de las funciones de lógica de negocio y de acceso a los datos de la aplicación. Los principales beneficios de la tecnología de servidores de aplicación son la centralización y la disminución de la complejidad en el desarrollo de aplicaciones. 32 Las aplicaciones distribuidas que frecuentemente se ejecutan a través de Internet (comercio electrónico, aplicaciones bancarias, etc.), están formadas por componentes que pueden estar ubicados en distintas máquinas. Estos componentes, se ensamblan en una aplicación, se verifica que estén bien formados, y se despliegan en el entorno de producción, donde se ejecutan y son controlados por el servidor de aplicaciones. 2.2.2 CONFIGURACIÓN DE SERVIDORES DE APLICACIONES. La configuración de un servidor de aplicaciones depende de los requerimientos que se tengan de parte de los usuarios o la compañía, y de las funcionalidades del software que se esta utilizando. Los servidores de aplicación típicamente incluyen middleware (o software de conectividad) que les permite intercomunicarse con variados servicios, para efectos de confiabilidad, seguridad, no-repudio, etc. También brindan a los desarrolladores una Interfaz para Programación de Aplicaciones (API), de manera que no tengan que preocuparse por el sistema operativo o por la cantidad de interfaces requeridas en una aplicación Web moderna. Los servidores de aplicación también brindan soporte a variedad de estándares, como HTML, XML, SSL, etc. lo que incrementa la complejidad a la hora de configurar un servidor de aplicaciones. Entre las tareas de un servidor de aplicaciones están: Cargar los módulos requeridos del contenedor de servlets e inicializarlo (antes de servir peticiones). Cuando llega una petición, verifica si petición pertenece a un servlet, si es así necesita permitir que el contenedor tome el control y lo maneje. 33 El contenedor necesita saber qué peticiones va a servir, usualmente basándose en algún patrón de la URL requerida, y dónde dirigir estas peticiones. Tareas complejas como cuando el usuario selecciona una configuración que use hosts virtuales, o cuando se quiere que múltiples desarrolladores trabajen en el mismo servidor Web pero en distintos contenedores de Servlets. Básicamente, un servidor de aplicaciones siempre está esperando peticiones de un cliente HTTP. Cuando estas peticiones llegan, el servidor hace lo que sea necesario para servir las peticiones proporcionando el contenido necesario. La configuración básica esta basada en la identidad de las URLs que están bajo la responsabilidad del contenedor. Algunos ítems de configuración que se deben evaluar son: La configuración sobre los procesos disponibles y los puertos/host TCP/IP sobre los que estos están escuchando. Indicarle al servidor Web la localización de las librerías de los módulos (para que pueda cargarlas en el inicio). Configurar la información interna del adaptador sobre cuantos registros guardar, cantidad de memoria a utilizar, etc. La importancia de la configuración radica en que afecta directamente el rendimiento de una aplicación, y también en el aspecto de seguridad, por lo que se debe ser acucioso al configurar un servidor de aplicaciones. 34 2.2.3 SEGURIDAD DEL SERVIDOR DE APLICACIONES. El servidor de aplicaciones es el que recibe las peticiones de los usuarios para luego direccionarlas a la aplicación y a la base de datos. Por lo tanto, se convierte en la puerta de entrada y el primer objetivo de un ataque para intentar violar la seguridad del sistema. Debido a esto, es importante tomar las medidas necesarias para asegurar la información. Esto supone requerimientos de seguridad para obtener un ambiente de producción que no pueda ser violado por algún intruso informático. Entre los aspectos de seguridad a tomar en cuenta en un servidor de aplicaciones, se encuentran los siguientes: Integridad de datos: Asegurar que los datos no son modificados durante la transmisión. Privacidad de los datos: Se debe asegurar que los datos no son inapropiadamente detectados mientras se transmiten. Autenticación: Se debe garantizar una correcta validación de la identidad de usuarios, clientes y equipos involucrados en el proceso. Políticas de contraseñas: Se deben establecer y esforzar reglas de cómo las contraseñas son definidas y utilizadas. Protección de contraseñas: Debe asegurarse la seguridad de las contraseñas. Adicionalmente un servidor Web puede aprovechar estándares como Secure Socket Layer para incrementar la seguridad en la transmisión de datos, entre otros mecanismos para reforzar la seguridad. 35 2.3 SISTEMA OPERATIVO WINDOWS. 2.3.1 RESEÑA DEL SISTEMA OPERATIVO WINDOWS. Cuando en 1980 IBM introdujo la computadora personal , popularmente conocida como PC , una compañía hasta entonces apenas conocida, Microsoft , había estado trabajando en un sistema operativo para la nueva arquitectura de computadoras, basadas en circuitos LSI (Large Scale Integration), que abrieron paso a la nueva generación de computadoras. El sistema operativo DOS (Disk Operative System) de Microsoft aparece en 1981 dominando este mercado de las PCs inmediatamente, aunque el sistema UNIX, predomina en las estaciones de trabajo. Desde un inicio, Windows nació bajo el concepto de un sistema propietario, distribuido bajo licencia. En la década de los 90, aumenta el uso de conexiones en redes, equipos de trabajo y aplicaciones distribuidas, con ello los Sistemas Operativos como Windows NT, etc., soportan muchos clientes, dando así el nacimiento de la Computación en Red. El camino de este sistema operativo abarca entre sus principales versiones el Windows 3.11, Windows 95, Windows 98, Windows Millenium, Windows XP, Windows NT Server, Windows 2000 Server y Windows 2003 Server. 2.3.2 CARACTERÍSTICAS DEL SISTEMA OPERATIVO WINDOWS. Windows es un sistema operativo propietario, creado y distribuido por la empresa Microsoft. Los sistemas operativos Windows se orientan a que los usuarios de todo el mundo desarrollen su potencial en el lugar de 36 trabajo, en el hogar y en los desplazamientos. Para esto, siempre se ha caracterizado por una interfaz bastante amigable, que facilita su uso por los usuarios. Entre las características de Windows podemos mencionar: Se ejecuta sobre múltiples arquitecturas de hardware y plataformas. Una limitante es que los programas hechos para Windows, solo se ejecutan sobre este sistema operativo, por ejemplo el servidor de base de datos SQL Server. Reúne los requisitos de la industria para la seguridad del Sistema Operativo. Es un sistema que corre y balancea los procesos de forma paralela en varios procesadores a la vez. Es un Sistema Operativo de memoria virtual. Uno de los pasos más importantes que revolucionó los Sistemas Operativos de Microsoft fue el diseño y creación del Sistema Operativo Windows NT, el cual significo una mejora respecto a todo lo que la compañía había hecho hasta entonces, ya que implico un kernel rediseñado totalmente desde el inicio. Windows NT, y sus versiones posteriores, son sistemas que aprovechan la potencia de los procesadores, ya que son diseñados para adaptarse a las nuevas tecnologías, ofrece compatibilidad con varias plataformas (OS/2, Unix entre otros) con buen rendimiento, conectividad y seguridad, requisitos que poco a poco se fueron convirtiendo en indispensables hasta el día de ahora. La competencia en el mundo de la informática impuesta por los sistemas operativos de licenciamiento libre, específicamente Linux en sus diferentes distribuciones, imponen a Microsoft un reto constante para la mejora de sus productos. 37 2.3.3 SEGURIDAD DE LOS SISTEMAS OPERATIVOS WINDOWS. Windows es un sistema operativo inicialmente orientado mas a satisfacer las demandas de funcionalidad de los usuarios que los requerimientos de seguridad, u otros como estabilidad y confiabilidad. Esto implico que la seguridad era una mejora al sistema operativo cuando este ya estaba terminado, no un requerimiento de diseño. Solo después de mucho tiempo, y cuando otros sistemas operativos que compiten en el mercado como Unix y Linux, presentaban entre sus características el ser poco vulnerables a ataques de intrusos, la empresa Microsoft inicio un proceso de cambio en su filosofía. En el año 2002, Microsoft dio el giro necesario para hacer de Windows un sistema operativo tan seguro como los estándares exigidos por la industria, en parte por el hecho que los ataques a servidores y sistemas basados en Windows, se multiplicaban , y lo hacían de forma exitosa para los intrusos, poniendo a muchas empresas fuera de línea, con grandes perdidas económicas y de imagen, convirtiendo los requerimientos de seguridad en una prioridad para cualquier proveedor de sistemas operativos y aplicaciones. Este esfuerzo ha dado resultados después de mucho tiempo, y las últimas versiones de Windows presentan características más seguras para los usuarios. Microsoft apunta a una mejora constante y sostenida en sus productos para hacer sus sistemas invulnerables a ataques maliciosos, mejorando el control de calidad de los productos desde su diseño, y adoptando un esquema de actualizaciones más dinámico y efectivo. 38 2.3.4 RENDIMIENTO DEL SISTEMA OPERATIVO WINDOWS. Windows siempre ha sido un sistema operativo bastante amigable en su interfaz de usuario. Esto ha tenido un costo en términos de rendimiento, y estabilidad del producto. Sin embargo, junto a tratar de resolver problemas como los de seguridad, Microsoft aposto además a resolver lo que los usuarios consideraban como fallas inherentes de sus productos. A partir de Windows XP, Microsoft promovió un cambio radical a sus antecesores, garantizando más estabilidad y seguridad. Entre las propiedades de diseño para aumentar la productividad, mejorando las redes y las herramientas de acceso remoto, están: Fiabilidad a nivel empresarial: Proporcionando un nuevo nivel de estabilidad. Rendimiento avanzado: Los últimos sistemas operativos administran los recursos del sistema con eficacia. Nuevo diseño visual basado en tareas: Por medio de un diseño más claro y nuevas pistas visuales llegará rápidamente a las tareas que más utiliza. Rápida reanudación desde el modo de hibernación o suspensión, a un tiempo razonable de espera para los usuarios. Restaurar sistema: Si se produce algún error en el equipo, puede devolver el sistema a su estado anterior. Todas estas características hacen de los productos Windows, un sistema operativo del que puede esperarse un rendimiento aceptable. 39 2.4 BASES DE DATOS. Una base de datos es un conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente para su uso. Un archivo por sí mismo, no constituye una base de datos, sino más bien la forma en que está organizada la información que da origen a la base de datos. Entonces, podríamos definir una base de datos como un conjunto de datos estructurados, fiables y homogéneos, organizados independientemente, accesibles a tiempo real, compartibles por usuarios concurrentes que tienen necesidades de información, diferente y no predecible en el tiempo. La idea general es que se trata de una colección de datos que cumplen las siguientes propiedades: Están estructurados independientemente de las aplicaciones y del soporte de almacenamiento que los contiene. Presentan la menor redundancia posible. Son compartidos por varios usuarios y/o aplicaciones. Un servidor de base de datos es un software capaz de servir a las propiedades del repositorio a los usuarios y aplicaciones, y es comúnmente conocido por el termino RDBMS (Relational Data Base Management System). Existen en el mercado gran cantidad de productos comerciales y libres que pueden utilizarse como servidores de bases de datos, sin embargo, debe hacerse un análisis de requerimientos para determinar el tipo de base de datos que es necesario adquirir. 40 2.4.1 CARACTERÍSTICAS DE CONFIDENCIALIDAD, INTEGRIDAD Y SEGURIDAD DE INFORMACIÓN. Un servidor de base de datos debe tener características que garanticen que la información que almacena se mantiene con el paso del tiempo, solo modificándose por los procesos autorizados a ello. Las principales características de un servidor de base de datos son: Confidencialidad: El acceso a la información solo debe ser hecho por los canales determinados por los gestores del sistema o el negocio. Para esto, un servidor de base de datos debe tener un manejo de accesos basados en usuarios, privilegios y contraseñas, que sea confiable y difícil, por no decir imposible, de vulnerar. Integridad: significa que las modificaciones de los datos deben cumplir las reglas del negocio, y ser hechas respetando las relaciones que han sido definidas entre los mismos datos. Se pretende que los datos no sean modificados de forma maliciosa. Seguridad: La seguridad garantiza en primer lugar que los datos se mantienen inaccesibles a cualquier intruso, y en segundo lugar que no hay perdidas de información por cualquier motivo. Debe contar con validaciones a nivel de usuarios, objetos y mecanismos que permitan rastrear el uso o violación de los accesos otorgados. Las propiedades descritas anteriormente definen la calidad de un servidor de base de datos. Los usuarios de sistemas basados en bases de datos deben evaluar las características mencionadas, para acceder a una plataforma que aporte a los objetivos trazados por el negocio. 41 2.4.2 CRITERIOS DE SELECCIÓN DE UNA BASE DE DATOS. Habiendo en el mercado una amplia oferta de servidores de base de datos, se debe hacer una cuidadosa selección del producto que a fin de cuentas será el que proteja la información de la empresa. Se deben evaluar diversos criterios entre los cuales están los siguientes: Estabilidad: El servidor debe ser capaz de mantener una operación continua, sin caídas repentinas, soportando la carga de los usuarios en todo momento. Dimensiones de la base de datos: Para evaluar esto es importante el análisis de los requerimientos, que pueden dar una idea acerca de la cantidad de datos que se manejaran con el tiempo, permitiendo tener una base que no quedara pequeña al sistema al poco tiempo. Escalabilidad: El servidor de base de datos debe ser capaz de soportar no solo al sistema original, sino ampliaciones en el manejo de procesos, recursos y usuarios. Presupuesto: La disponibilidad del recurso económico es una variable a tomar en cuenta. Dependiendo del costo del servidor, podría ser inaccesible para muchos usuarios. Compatibilidad: Una base de datos debe poder soportar aplicaciones hechas en lenguajes de última generación. Esto permitirá aprovechar los conocimientos y experiencia de diversos proveedores, sin depender de uno solo, y minimiza los problemas al momento de efectuar migraciones o actualizaciones a los sistemas. 42 2.4.3 BASE DE DATOS MYSQL. MySQL es un servidor de bases de datos SQL de código abierto (Open Source). Lo desarrolla, distribuye y soporta la empresa MySQL AB. Entre las principales características del servidor de base de datos MySQL podemos mencionar: MySQL es un sistema de gestión de base de datos: Un sistema de gestión de base de datos como MySQL Server permite añadir, acceder, y procesar los datos almacenados en una base de datos. MySQL es un sistema bases de datos relacionales: Una base de datos relacional almacena datos en tablas separadas en lugar de poner todos los datos en un gran almacén. MySQL utiliza el "Structured Query Language" (SQL) que es el lenguaje estandarizado más común para acceder a bases de datos. MySQL software es Open Source: Open Source significa que usa la licencia GPL (GNU General Public License). Se puede descargar el software MySQL de internet y usarlo sin pagar nada. También es posible estudiar el código fuente y cambiarlo para adaptarlo a lo que uno necesita. El servidor de base de datos MySQL es rápido, fiable y fácil de usar: MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet 43 MySQL Server trabaja en entornos cliente/servidor y web. Puede concluirse que MySQL es una base de datos capaz de satisfacer los requerimientos de un ambiente de producción que maneje gran volumen de datos, con confiabilidad y seguridad garantizadas. 2.5 LENGUAJES DE PROGRAMACIÓN. 2.5.1 DEFINICIÓN DE LENGUAJE DE PROGRAMACIÓN. Desde el punto de vista de la informática, un lenguaje de programación es un conjunto de instrucciones que puede ser utilizado para controlar el comportamiento de una máquina, particularmente una computadora o un servidor. Consiste en un conjunto de reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos, respectivamente. Un lenguaje de programación permite a un programador especificar de manera precisa sobre qué datos una computadora debe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, de tal forma que facilite su entendimiento, tal como sucede con el lenguaje Léxico. Orientando el concepto a desarrollo de aplicaciones accesibles por redes de área amplia, la programación Web permite la creación de sitios dinámicos o aplicaciones de escritorio en Internet. Esto se consigue generando los contenidos del sitio a través de una base de datos mediante lenguajes de script como pueden ser PHP, ASP o JAVA, por mencionar los más utilizados. Con la programación Web se pueden crear 44 sitios dinámicos o potentes aplicaciones informáticas para negocios, con gran flexibilidad en cuanto a acceso y disponibilidad, y distribuidas en diversos sitios según su tamaño y requerimientos. 2.5.2 LENGUAJE DE PROGRAMACIÓN PHP. GENERALIDADES. PHP es un lenguaje de programación nacido en 1994, creado por el programador danés-canadiense Rasmus Lerdorf, y asociado luego bajo los términos de licenciamiento libre. Su primera versión utilizable por los usuarios salió hasta 1995. PHP en sus inicios era acrónimo de “Personal Home Page”, termino que evoluciono posteriormente a “Profesional Home Pages”, llegando por ultimo en el año 1997 a su actual significado, “Hypertext Pre-processor”, liberado en ese entonces como la versión PHP3. PHP es un lenguaje orientado a la programación en entorno web, basado en scripts que se insertan en paginas HTML, y teniendo como característica que el código PHP se interpreta y ejecuta del lado del servidor, nunca del lado del cliente. En julio de 2004 es liberada la versión PHP 5, siendo su última actualización la versión 5.2.4, liberada en agosto de 2007. PHP es utilizado para la creación de aplicaciones para servidores, o creación de contenido dinámico para sitios Web, y ofrece una gran cantidad de funciones para la explotación de bases de datos de una manera sencilla y sin complicaciones. Su interpretación y ejecución se da en el servidor Web, como se dijo previamente, y en el cual se encuentra almacenado el script, de forma que el cliente sólo recibe el resultado de la ejecución. Además es posible 45 utilizar PHP para generar archivos PDF, Flash, así como imágenes en diferentes formatos, entre otras cosas. Permite la conexión a diferentes tipos de servidores de bases de datos tales como MySQL, Postgres, Oracle y Microsoft SQL Server entre otros. También tiene la capacidad de ser ejecutado en la mayoría de los Sistemas operativos tales como UNIX, Linux, Windows y Mac OSX, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI. PHP se puede obtener libremente desde el sitio www.php.net/downloads.php, y la documentación para usuarios se puede descargar en el sitio www.php.org. RESUMEN DE LAS PRINCIPALES CARACTERÍSTICAS DE PHP: Es un lenguaje multiplataforma. Capacidad de conexión con la mayoría de servidores de base de datos utilizados en la actualidad. Leer y manipular datos desde diversas fuentes, incluyendo datos que pueden ingresar los usuarios desde formularios HTML. Capacidad de expandir su potencial utilizando la enorme cantidad de módulos nativas del lenguaje. Posee una amplia documentación en su página oficial, entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda. Es libre, por lo que se presenta como alternativa de fácil acceso desde el punto de vista económico. Permite las técnicas de Programación Orientada a Objetos, aunque no obliga a su implementación. 46 Permite crear los formularios para la Web. Implementa el manejo de excepciones. 2.5.3 ESQUEMA DE FUNCIONAMIENTO DE PHP. El diagrama anterior describe de forma esquemática el funcionamiento básico de un proceso ejecutándose con PHP: 1- El cliente, desde el navegador hace una petición al servidor de capa internet. 2- El servidor de internet (normalmente llamado de capa media) recibe la petición y la procesa, utilizando su modulo de PHP. 3- La pagina es procesada y el resultado enviado en HTML al navegador del usuario. 47 Este funcionamiento sencillo, permite el desarrollo de aplicaciones robustas con lenguaje PHP. 2.5.4 ADMINISTRADOR DE BASE DE DATOS PHP. La conectividad a diversas bases de datos, es una de las principales opciones del lenguaje PHP, por lo que la administración de bases de datos se vuelve una imperiosa necesidad, y para desempeñar esta función, existe una herramienta libre hecha en PHP, el “phpMyAdmyn”, el cual es liberado en diferentes versiones, y que se utiliza para efectuar tareas administrativas y de mantenimiento sobre servidores de bases de datos como MySQL y Postgress. Consta de una interfaz grafica fácil de conocer y entender. No requiere mayor proceso de instalación, ni recursos de hardware, y se encuentra disponible sin costo de licenciamiento. Entre las tareas que se pueden ejecutar están: Creación de objetos de base de datos, como tablas, índices, y objetos asociados. Modificación de estructuras de base de datos. Operaciones de mantenimiento de datos (SQL). Tareas de respaldo de información, como importar y/o exportar estructuras y datos. Consultas y modificación de privilegios de usuarios. 48 2.6 MODELOS DE DESARROLLO DE SOFTWARE. 2.6.1 INTRODUCCIÓN A LOS PARADIGMAS DE DESARROLLO DE SOFTWARE. Concebido como un Conjunto de instrucciones que cuando se ejecutan suministran la función y comportamiento adecuados, el software es un elemento de los Sistemas Basados en Computadora y tiene características peculiares. La más importante es el hecho que el “software se desarrolla”, lo cual requiere todo un proceso que involucre las tareas de Análisis, Especificación, Planificación, Diseño, Codificación, Prueba y Mantenimiento. La Ingeniería de Software (IS) es una disciplina de la Informática que ofrece métodos y técnicas para desarrollar, mantener y documentar software. La Ingeniería de Software integra Métodos, Herramientas y Procesos para el desarrollo del Software, bajo un enfoque de calidad. Los métodos indican cómo construir técnicamente el software. Las herramientas son un soporte para el proceso y los métodos. Los procesos son los encargados de integrar los métodos y herramientas, además de definir la secuencia en la que se aplican los métodos, las entregas que requieren, los controles de calidad y las guías para el desarrollo. Dentro del Desarrollo de Software, existen tres fases Genéricas que deben cumplirse: 49 Definición. Tareas que la componen: Análisis del sistema. Planificación del Proyecto. QUÉ Análisis de requisitos. Desarrollo. Tareas que la componen: Diseño del software. Codificación. CÓMO Prueba del Software. Mantenimiento. Tipos de cambios: Corrección. Adaptación. Mejora. TIPO Prevención o Reingeniería. Todo lo definido anteriormente, se encierra en un concepto de vital importancia “El Modelo o Paradigma de Desarrollo de Software”. El Modelo o Paradigma de Desarrollo dentro de la Ingeniería de Software es una estrategia que comprenden métodos, herramientas y procesos. El desarrollador debe seleccionar un Modelo de proceso para ingeniería del software según la naturaleza del proyecto y la aplicación, los métodos, las herramientas a utilizar, y los controles y entregas que se requieren. Los diferentes paradigmas intentan ordenar las actividades en el desarrollo del software, de manera que no sean llevadas a cabo de manera caótica. Para efectos de visualización y comparación se exponen brevemente 4 paradigmas, que pueden ser aplicados en el desarrollo de Sistemas Informáticos, destacando sus virtudes y debilidades. 50 2.6.2 MODELO LINEAL SECUENCIAL Es el también llamado Ciclo de Vida Clásico de los Sistemas o Modelo de Cascada. Sugiere un enfoque sistemático o secuencial del desarrollo de software; comenzando en un nivel de sistemas y progresando con el Análisis, Diseño, Codificación, Prueba y Mantenimiento. MODELO LINEAL SECUENCIAL Ingeniería de Sistemas Análisis Diseño Codificación Prueba Mantenimiento Es el paradigma de desarrollo de software más antiguo que existe, sin embargo aun es muy utilizado. Algunas de las desventajas que presenta: El cliente pocas veces establece todos los requerimientos al principio. El cliente no tiene un producto hasta el final. Los responsables del desarrollo de software se pueden retrasar innecesariamente Con todo y sus desventajas este paradigma sigue siendo el más utilizado para el desarrollo del software, siendo mejor que un enfoque al azar. 51 2.6.3 MODELO DE CONSTRUCCIÓN DE PROTOTIPOS. Es un modelo que se centra en la idea de presentar uno o más prototipos antes de llegar a un producto final. Parte de la recolección o determinación de los requerimientos, hace un diseño rápido que da como resultado un modelo inicial, sobre el cual se van haciendo mejoras, hasta convertirse en un software funcional. MODELO DE CONSTRUCCIÓN DE PROTOTIPOS Recolección de Requerimientos Diseño Rápido Evaluar y pulir los Requerimientos Construcción del Prototipo Producto Terminado Cualidades de este Modelo: El cliente no puede especificar todos los requerimientos al principio. Por medio de este modelo pueden ir agregándose, nuevos requerimientos a medida se vayan presentando los prototipos. Ayuda a comprender mejor en caso de que existan dudas de alguna parte del sistema. Facilita un modelo al programador. Reduce el riesgo de construir productos que no satisfagan las necesidades de los usuarios 52 Reduce costos y aumenta la probabilidad de éxito Una vez identificados todos los requisitos mediante el prototipo, se construye el producto de ingeniería. Desventajas o problemas del Modelo de Prototipos: Exige disponer de las herramientas adecuadas El cliente ve funcionando lo que es la primera versión del prototipo que ha sido construido, y puede desilusionarse al ver un sistema incompleto. El desarrollador puede caer en la tentación de ampliar el prototipo para construir el sistema final sin tener en cuenta los compromisos de calidad y de mantenimiento que tiene con el cliente. 2.6.4 MODELO DE DRA. (DISEÑO RÁPIDO DE APLICACIONES) El Desarrollo Rápido de Aplicaciones o DRA, es un modelo del proceso de desarrollo de software lineal secuencial que enfatiza un ciclo de desarrollo extremadamente corto. Se logra el desarrollo rápido utilizando un enfoque de construcción basado en componentes. El proceso DRA permite al equipo de desarrollo crear un "sistema completamente funcional" dentro de periodos cortos de tiempo. Cuando se utiliza principalmente para aplicaciones de sistemas de información, el enfoque DRA comprende las siguientes fases: Modelado de gestión: El flujo de información entre las funciones de gestión se modela de forma que responda a las siguientes preguntas: ¿Qué información conduce el proceso de gestión? ¿Qué información se genera y quién la genera? ¿A dónde va la información? ¿Quién la proceso? 53 Modelado de datos: El flujo de información definido como parte de la fase de modelado de gestión se refina como un conjunto de objetos de datos necesarios para apoyar la empresa. Se definen las características o atributos de cada uno de los objetos y sus relaciones. Modelado de proceso: los objetos de datos definidos en la fase de modelado de datos quedan transformados para lograr el flujo de información necesario para implementar una función de gestión. Es la comunicación entre los objetos. Generación de aplicaciones: El DRA asume la utilización de técnicas de cuarta generación. DRA trabaja para volver a utilizar componentes de programas ya existentes cuando es posible, o a crear componentes reutilizables cuando sea necesario. En todos los casos se utilizan herramientas automáticas para facilitar la construcción del software. Pruebas y entrega: Como el proceso DRA enfatiza la reutilización, ya se han probado muchos de los componentes de los programas. Esto reduce el tiempo de pruebas. Sin embargo, se deben probar todos los componentes nuevos y se deben ejercitar todas las interfaces a fondo. Modelado de Gestión Modelado de Datos Modelado de Procesos Generación de Aplicaciones Pruebas y Entrega De 60 a 90 días 54 Si una aplicación de gestión puede modularse de modo que permita completar cada función principal en menos de tres meses, es candidato del DRA. Cada una de las funciones puede ser afrontada por un equipo DRA diferente e integrarse en un solo conjunto. Como todos los modelos de proceso, el enfoque DRA tiene inconvenientes: Para proyectos grandes, el DRA requiere recursos humanos suficientes como para crear el número correcto de equipos DRA. DRA requiere clientes y desarrolladores comprometidos en las actividades necesarias para completar un sistema en un tiempo abreviado. Si no hay compromiso los proyectos DRA fracasaran. No todos los tipos de aplicaciones son apropiados para DRA. Si un sistema no puede modelarse adecuadamente, la construcción de los componentes para DRA será problemático. Si se requiere alto rendimiento, y se conseguirá convirtiendo interfaces en componentes de sistema, el enfoque DRA puede no funcionar. DRA no es adecuado cuando hay riesgos técnicos altos, como una aplicación que usa nuevas tecnologías, o cuando el nuevo software requiere alta interoperabilidad con programas ya existentes. 2.6.5 MODELO EN ESPIRAL. Es parte de los llamados Modelos Evolutivos, caracterizados por permitir a los ingenieros en sistemas, desarrollar de manera iterativa, nuevas versiones del software cada vez más completas. Este modelo conjuga la naturaleza iterativa de construcción de prototipos, con aspectos controlados y sistemáticos del modelo lineal secuencial. Es ideal para hacer versiones incrementales de forma rápida. 55 Ventajas del Modelo en espiral, en el desarrollo de Sistemas: Trata de mejorar los ciclos de vida clásicos y prototipos. Permite acomodar otros modelos Incorpora objetivos de calidad y gestión de riesgos Elimina errores y alternativas no atractivas al comienzo Permite iteraciones, vuelta atrás y finalizaciones rápidas Cada ciclo empieza identificando: Los objetivos de la porción correspondiente Las alternativas Restricciones Cada ciclo se completa con una revisión que incluye todo el ciclo anterior y el plan para el siguiente.