EL DESARROLLO DEL SOFTWARE TAPIA HERNANDEZ ARELI EL DESARROLLO DEL SOFTWARE 1. EL DESARROLLO DEL SOFTWARE 1.1 OBJETIVO EN EL DESARROLLO DEL SOFTWARE. El objetivo que se persigue es el desarrollar un software útil y de alta calidad, que cubra las necesidades del usuario final, para lograr este propósito se debe tener en cuenta las siguientes cuestiones: Productividad. Hoy en día la productividad es un problema serio en el desarrollo de sistemas, básicamente se plantean dos aspectos importantes: El retraso en los nuevos sistemas que se necesita desarrollar. El tiempo necesario para la construcción de un sistema nuevo. En la mayor parte de las organizaciones existe un retraso de varios años el retraso se presenta en tres aspectos: Retraso visible. Sistemas nuevos que los usuarios han pedido, se han autorizado y financiado, sin embargo, los proyectos no se han iniciado porque no existen los recursos adecuados, hablamos de; analistas, programadores, etc. Retraso invisible. Sistemas nuevos que los usuarios saben que necesitan, pero que no los han solicitado, ya que están en espera que se concluyan proyectos del retraso visible. Retraso desconocido. Son sistemas que es necesario desarrollar pero que los usuarios ni siquiera saben que requieren todavía Confiabilidad. Una vez que se ha terminado un sistema llega el tiempo de probarlo y corregir los errores detectados. Típicamente el período de prueba representa un 50% del tiempo de desarrollo del sistema. Mantenibilidad. La mantenibilidad se puede resumir en dos aspectos: 1) La corrección de errores sobre la marcha 2) Modificaciones para: a) Reflejar cambios en el hardware. b) Acelerar ciertos aspectos operacionales. c) Reflejar cambios en los requerimientos del usuario final. Otros aspectos a considerar en el desarrollo de software. Eficiencia. El sistema debe tener un tiempo de respuesta adecuado en cuanto a las salidas que se le solicitan. Transportabilidad. Al desarrollar los sistemas debe pensarse en su operación en varias plataformas. Seguridad. Dado que la información que se maneja en los sistemas de cómputo actuales es vital para las organizaciones 1.2 LA EVOLUCION DEL SOFTWARE Hoy en día el software tiene un doble papel. Es un producto y al mismo tiempo el vehículo para hacer una entrega de un producto. Como producto hace entrega de la potencia informática del hardware informático. El software transforma datos personales (p. Ej.: transacciones financieras de una persona) para que los datos sean más útiles en un contexto local; gestiona información comercial para mejorar la competitividad, proporciona el acceso a redes de información por todo el mundo (Internet) y también proporciona el medio de adquirir información en todas sus formas. La mayoría del software se desarrollaba y era utilizado por la misma persona u organización. Debido a que la movilidad en el trabajo era baja, los ejecutivos estaban seguros de que esa persona estaría allí cuando se encontrara algún error. La segunda era de la evolución de los sistemas de computadoras tomo lo que era la multiprogramación y los sistemas multiusuarios introdujeron nuevos conceptos de interacción hombre-máquina. La tercera era en la evolución de los sistemas de computadoras era basado en el sistema distribuido, múltiples computadoras, cada una ejecutando funciones concurrentemente y comunicándose con alguna otra, incremento notablemente la complejidad de los sistemas informáticos. La cuarta era de la evolución de sistemas informáticos se aleja de las computadoras individuales y de los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras y del software. EVOLUCION DEL SOFTWARE Los primeros años Orientación por lotes (batch) Distribución limitada Software a medida La segunda era Multiusuario Tiempo real Bases de datos Producto del software La tercera era Sistemas distribuidos Incorporación de <<inteligencia>> Hardware de bajo costo Impacto en el consumo La cuarta era Sistemas personales potentes Tecnologías orientadas a objetos Sistemas expertos Redes neuronales artificiales Computación en paralelo Redes de computadoras 1.3 CARACTERISITICAS DEL SOFTWARE El software se desarrolla, no se fabrica en un sentido clásico. El software no se estropea. La mayoría del software se construye a medida, en vez de ensamblar componentes Existentes. 1.3.1 Aplicaciones del software Software de sistemas. Software de tiempo real. Software de gestión. Entre otros. 1.4 LA METODOLOGÍA. Un buen diseño es la clave de una ingeniería de software efectiva, ya que un sistema de software bien diseñado es fácil de aplicar y mantener, además de ser comprensible y confiable. En contraste un sistema mal diseñado, aunque funcione, son caros de mantener, difíciles de probar y poco confiables, por consiguiente la etapa de diseño es la parte más importante del proceso de desarrollo del software. Una vez dada la definición de requerimientos se debe utilizar para desarrollar el diseño del sistema de software que satisfaga dichos requisitos. Para tal propósito se pueden plantear las siguientes etapas: 1) Establecer los subsistemas que componen el sistema general. 2) Cada subsistema debe dividirse en componentes individuales y debe establecerse la especificación de los subsistemas definiendo la operación de sus componentes. 3) Cada componente se puede seguir dividiendo en subcomponentes que actúen recíprocamente 4) A continuación cada componente debe ser especificado como una jerarquía de subcomponentes. 5) En algún momento de este proceso de refinamiento hay que especificar con detalle los algoritmos utilizados en cada componente. Además es necesario definir: 1) Mecanismos de comunicación entre procesos. 2) Las estructuras de archivos. 3) Las estructuras de datos utilizadas en los programas. 4) Casos de prueba, para comprobar la operación de los sistemas y subsistemas. 1.4.1 Descomposición funcional descendente Esta metodología utiliza la característica humana fundamental para la solución de problemas "la abstracción". La formulación y descripción de un diseño de software incluye varias etapas: 1) Estudio y comprensión del problema. 2) Identificación de las características generales de por lo menos una solución. 3) Construcción de un diagrama de flujo de datos que muestre las transformaciones generales de los datos del sistema. 4) Utilizando el diagrama de flujo de datos, construir un diagrama de estructura que muestre las unidades del programa relacionadas con la solución. 5) Describir cada abstracción utilizada en la solución mediante un lenguaje de descripción, aunque en las primeras etapas del diseño se utiliza exclusivamente lenguaje natural. 1.5 DEFINCION DE UNA METODOLOGIA DE ANÁLISIS Y DISEÑO ORIENTADA A OBJETOS 1.5.1 Enfoque El diseño Orientado a objetos (DOO, ODD por sus siglas en ingles), al igual que otras metodologías de diseño orientadas a la información, crea una representación del campo del problema del mundo real y la hace corresponder con el ámbito de la solución, que es el software. A diferencia de otros métodos el DOO produce un diseño que interconecta objetos de datos y operaciones de procesamiento en una forma que modularía la información y el procesamiento. La naturaleza única del DOO queda reflejada en su capacidad de construir sobre tres pilares conceptuales importantes del diseño de software: Abstracción Ocultamiento de la información Modularidad Directamente en el campo de las bases de datos, una base de datos tradicional solo almacena datos, sin procesarlos, de modo que resulten independientes de los procesamientos. Los datos son accesibles a diferentes usuarios, con diversos propósitos. A diferencia, una base de datos Orientada a objetos almacena objetos, es decir, los datos se almacenan junto con los métodos que procesan dichos datos (objetos). En la base de datos original a objetos (BDOO, OODB , por sus siglas en ingles), no se tiene acceso a dato alguno si no es a través de los métodos almacenados en la base de datos. Estos métodos están listos para entrar en acción al momento en que reciben una solicitud (evento). Los datos de todos los objetos quedan entonces encapsulados. En general, los datos son activos más que pasivos. 1.5.2 Ventajas y desventajas de la Tecnología Orientada a Objetos. a) Ventajas. Las ventajas tienen en general el mismo carácter que las ofrecidas por la programación y diseño estructurado, aunque van más allá en algunas direcciones, algunas de ellas son: Los objetos bien diseñados pueden constituir la base para el ensamble de otros sistemas, empleando la reutilización de componentes, lo que redunda en mayor productividad. La reutilización de clases, probadas en proyectos anteriores, conducen a la creación de sistemas de mayor calidad, que satisfacen los requerimientos y conteniendo menor número de errores. La herencia permite la definición de módulos básicos, los cuales posteriormente pueden ser extendidos, sin alterar su operación básica., ni la de sus clientes, lo que produce sistemas más flexibles, más fácilmente extendibles y de mantenimiento menos costoso. La convención de pase de mensajes para la comunicación entre objetos lleva a que la descripción de la interfaz entre módulos y sistemas externos sea más fácil. También facilita la descripción y la construcción de interfaces gráficas de usuario y sistemas distribuidos. El encapsulamiento representa la mayor promesa como técnica para hacer que los sistemas sean flexibles a los cambios en su realización: La elaboración de prototipos es una herramienta importante para la obtención de especificaciones correctas, éstos se emplean dentro de los desarrollos convencionales, pero cuando se combinan con métodos orientados a objetos ofrecen ventajas adicionales. El uso de las herramientas CASE trae otro problema asociado al que se enfrentan los jefes de proyectos muy grandes en los que se emplean éstas. b) Desventajas. La producción de módulos reutilizables produce en realidad un aumento en el costo del proyecto, en la mayoría de los casos no se esta dispuesto a pagar ese costo, estos costos solo se pueden justificar en ahorros futuros, además siempre existe la tentación de realizar lo más pronto posible el trabajo entre manos. Al contar con bibliotecas, se deben encontrar formas de recorrerlas en todo su volumen y complejidad. Además resolver el problema de cómo informar al desarrollador que una cierta biblioteca contiene precisamente el objeto que necesita para un caso concreto. No existen protocolos para el control de cambios y de versiones para sistemas de objetos complejos con múltiples interconexiones. 1.6 TENDENCIA 1.6.1 Una revolución industrial en el software Las técnicas orientadas a objetos permiten que el software se construya a partir de objetos de comportamiento específico. Los propios objetos se pueden construir a partir de otros, que a su vez pueden estar formados por otros objetos. El análisis de sistemas en el mundo orientado a objetos se realiza al estudiar los objetos en un ambiente, así como los eventos que interactúan con dichos objetos. El diseño del software se realiza al volver a utilizar clases de objetos ya existentes y en caso necesario construir nuevas clases. A través de la historia de la ingeniería, parece surgir un principio: la gran ingeniería es la ingeniería sencilla. Las ideas que se tornan muy rebuscadas inflexibles y problemáticas tienden a ser reemplazadas por otras más nuevas y claras desde el punto de vista conceptual y con sencillez estética. La tecnología Killer para el desarrollo de software: ♦CASE e I-CASE ♦Programación visual ♦Generadores de códigos ♦Depósitos y coordinadores de depósitos ♦Metodologías basadas en depósitos ♦Ingeniería de la información ♦Bases de datos orientadas a objetos 1.6.2 El paradigma de la integración La revolución industrial del software ganara fuerza cuando se difundan las técnicas orientadas a objetos y se disponga de grandes bibliotecas de clases de objetos. Las bibliotecas se enlazaran con depósitos CASE de modo que las nuevas clases se puedan ensamblar rápidamente a partir de las ya existentes. La mayoría de las herramientas del software se modificaran para utilizar el paradigma orientado a objetos. 1.7 LA VERDADERA INGENIERIA DEL SOFTWARE La fábrica de software debe aumentar en forma continua la funcionalidad de las clases que utiliza (construir objetos a partir de objetos componentes). El software debe construirse en forma independiente del ambiente (sistema operativo, la administración de la LAN, el manejo de la base de datos, la interfaz con el usuario, etc.). Debe poder ligarse con varios ambientes mediante solicitudes y respuestas estándares de clases. 1.8 EVOLUCION DE LA PRODUCCION DEL SOFTWARE Fase 1 : La industria artesanal La mayoría del software de la actualidad está diseñado y codificado con técnicas manuales, cada programa es una pieza artesanal única. Fase 2 : Herramientas poderosas y métodos de ingeniería I-CASE representa la llegada de las herramientas poderosas en la construcción del software. Fase 3 : Producción en masa Cuando se empezaban a utilizar las herramientas I-CASE cada programa se desarrollaba en forma individual. Fase 4 : Producción con robots Al madurar el diseño orientado a objetos, se crean clases de una complejidad cada vez mayor. 1.9 EL FUTURO DEL SOFTWARE El software actual es relativamente trivial. Para que las computadoras sean los socios sinérgicos de los humanos, necesitan un software complejo. Es probable que el software de la complejidad necesaria no se pueda construir solo mediante las técnicas estructurales tradicionales. A mediados de los 80´s las autoridades de las técnicas estructurales afirmaban que era imposible construir sistemas de 50 millones de líneas de código. Nuestro futuro requiere software en que los sistemas de 50 millones de líneas de código sean comunes. En este aspecto son esenciales las técnicas orientadas a objetos, con encapsulado, polimorfismo, desarrollo con base en dispositivos, automatización del diseño y generadores de código. 1.9.1 Concluyendo: De manera general, las técnicas orientadas a objetos, en la mayoría de las aplicaciones, brindan beneficios, aunque algunos de los problemas requieren de una buena investigación para encontrar la manera de resolverlos, esta técnica es promisoria y ante el aumento de la complejidad, la necesidad de desarrollos rápidos y cada vez mas seguros, es superior a las técnicas estructuradas. Las técnicas orientadas a objetos se piensan a veces en términos de lo que puede hacerse con los lenguajes de programación orientada a objetos, este es un punto de vista muy restringido, en realidad se puede trabajar inclusive utilizando lenguajes procedurales, sin embargo hay que utilizar las técnicas más poderosas, lo que por lo general quiere decir usar una herramienta CASE para el análisis y el diseño con un generador integrado de código y tal vez un motor de inferencias.