UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO FES Acatlán Lic. Matemáticas Aplicadas y Computación Desarrollo Web Alumno: SEGURA CRUZ LADY LAURA Hacer un reporte de lectura sobre Ingeniería de software, orígenes, características, ventajas, aportaciones importantes, recursos, técnicas, herramientas. ¿Qué es la Ingeniería de Software? Ingeniería del software es la aplicación de un método sistemático, estructurado y cuantificable al desarrollo, operación y mantenimiento de software. 1.1.1 Antecedentes Históricos, crisis del software El término de Ingeniería de Software se introdujo por primera vez, a finales de los 60´s, en una conferencia celebrada para analizar la llamada crisis del software. La crisis del software consiste en el surgimiento de las computadoras y hardware en general de la 3ra. Generación, más potentes, más rápidas, con mayor capacidad de memoria y procesamiento, que permitieron realizar aplicaciones que hasta ese momento eran irrealizable. El desarrollo de esas aplicaciones requirió de la construcción de grandes sistemas de software. Las primeras experiencias en la construcción de grandes sistemas, mostraron que las metodologías de desarrollo de software eran inadecuadas, debido a esto, muchos sistemas se retrasaron (a veces hasta años), costaron mucho mas de lo previsto en principio y resultaron poco fiables, difíciles de mantener y de rendimiento pobre. El desarrollo de software estaba en una situación de crisis. Los costos de hardware caían, mientras que los de software aumentaban. Había una urgente necesidad de nuevas técnicas y metodologías que permitieran controlar la complejidad de los grandes sistemas de software, surgiendo así la ingeniería de software. Actualmente, el software ha superado al hardware como la clave del éxito de muchos sistemas basados en computadora. Tanto si se utiliza la computadora para llevar un negocio, controlar un producto o capacitar un sistema, el software es el factor que marca la diferencia. Lo que diferencia a una compañía de sus competidores es la suficiencia y oportunidad de la información dada por el software. El diseño de un producto de software amigable al usuario lo diferencia de los productos competidores que tengan funciones similares. La inteligencia y función que proporciona el software empotrado distingue los productos industriales o de consumo similares. El software marca la diferencia. 1.1.2 Definición de Ingeniería de Software (IS) Ingeniería de software es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad. Esta ingeniería trata con áreas muy diversas de la informática y de las ciencias de la computación, tales como construcción de compiladores, sistemas operativos, o desarrollos Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a infinidad de áreas: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc. Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden citar las enunciadas por algunos de los más prestigiosos autores: Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978) Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software ( Bohem, 1976). Ingeniería de Software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972). Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993). Ingeniería de software es la disciplina o área de la informática que utiliza métodos y técnicas de ingeniería y de administración de proyectos para analizar, diseñar, desarrollar y mantener software de calidad. 1.1.2 Definición de Software Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación. Extraído del estándar 729 del IEEE Considerando esta definición, el concepto de software va más allá de los programas de cómputo en sus distintos estados: código fuente, binario o ejecutable; también su documentación, datos a procesar e información de usuario forman parte del software: es decir, abarca todo lo intangible, todo lo "no físico" relacionado. 1.1.3 Tipos de Software Para fines prácticos se puede clasificar al software en tres grandes tipos: Software de sistema: Su objetivo es desvincular adecuadamente al usuario y al programador de los detalles de la computadora en particular que se use, aislándolo especialmente del procesamiento referido a las características internas de: memoria, discos, puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc. El software de sistema le procura al usuario y programador adecuadas interfaces de alto nivel, herramientas y utilidades de apoyo que permiten su mantenimiento. Incluye entre otros: Sistemas operativos, Controladores de dispositivos, Herramientas de diagnóstico, Herramientas de Corrección y Optimización, Servidores, Utilidades. Software de programación: Es el conjunto de herramientas que permiten al programador desarrollar programas informáticos, usando diferentes alternativas y lenguajes de programación, de una manera práctica. Incluye entre otros: Editores de texto, Compiladores, Intérpretes, Enlazadores, Depuradores, Entornos de Desarrollo Integrados (IDE) Software de aplicación: Es aquel que permite a los usuarios llevar a cabo una o varias tareas específicas, en cualquier campo de actividad susceptible de ser automatizado o asistido, con especial énfasis en los negocios. Incluye entre otros: Aplicaciones para Control de sistemas y automatización industrial, Aplicaciones ofimáticas, Software educativo, Software empresarial, Bases de datos, Telecomunicaciones (p.ej. internet y toda su estructura lógica), Videojuegos, Software médico, Software de Cálculo Numérico y simbólico, Software de Diseño Asistido (CAD), Software de Control Numérico (CAM). MODELOS DE DESARROLLO DE SOFTWARE Desarrollo en cascada Desarrollo en espiral Modelo de Prototipos Modelo por etapas Desarrollo iterativo y creciente ESTRUCTURA ORGANIZACIONAL DE UN PROYECTO Planeación -Identifica necesidades, estudios de factibilidad, supervisión. Desarrollo -Específica, diseña, codifica, depura, prueba del producto. Servicios -Provee herramientas y equipos p/las actividades. Distribuye el producto. Publicaciones -Manuales, instructivos de instalación y operación. Control de Calidad -Evaluación del código fuente y publicaciones. Apoyo -Promoción, entrena a usuarios. Mantenimiento -Corrige errores y hace mejoras o adaptaciones. Los métodos para organizar estas actividades pueden ser los formatos de proyecto, el funcional y el matricial. a) FORMATO DE PROYECTO.- Se forma un equipo de programadores que llevan a cabo todas las actividades de principio a fin (definición, diseño, construcción, etc. ). Los miembros trabajan hasta el final del proyecto y luego son asignados a otros proyectos. b) FORMATO FUNCIONAL.- Un equipo distinto de programadores realiza cada fase del proyecto, los productos pasan de un equipo a otro conforme el producto evoluciona. En este formato se deben rotar a los miembros de los equipos para evitar el tedio de la supe especialización. Requiere más comunicación entre equipos, pero el personal se especializa en ciertas áreas. c) FORMATO MATRICIAL.- En este formato cada actividad o función tiene su propia administración y equipo que la realiza. Cada proyecto es miembro de cada función y tiene su propio administrador. Cada equipo funcional trabaja en todo proyecto pero bajo la supervisión del administrador de ese proyecto. En estas organizaciones cada quien tiene, al menos dos jefes y esta ambigüedad es el precio que hay que pagar por mantener mas controlado el proyecto. II. ESTRUCTURA DEL GRUPO DE PROGRAMACION • Todo equipo debe tener una estructura interna. • La organización óptima varía dependiendo de la naturaleza del proyecto. Las posibles estructuras de organización de un grupo de programación son: a) Grupo Democrático b) Grupo con jefe de programadores c) Grupo jerárquico En proyectos de programación grandes que ocupan varios equipos de programación cada equipo debe mantener su estructura interna y no debe ser mayor de 5 a 7 miembros por equipo, para minimizar las líneas de comunicación. Características: 1. Las metas y las decisiones se definen por acuerdo. 2. El liderazgo rota según las tareas que se realicen y la capacidad de cada miembro. 3. Todas las actividades se discuten abiertamente. Ventajas: 1. Todos los miembros contribuyen en la toma de decisiones 2. Los miembros aprenden uno de otro 3. Ambiente comunicado Desventajas: 1. Demasiadas líneas de comunicación para la toma de decisiones 2. Todos deben trabajar juntos 3. Falta de autoridad