Fundamentos básicos Ingeniería del Software Ingeniería de Software Las economías de los países desarrollados dependen en gran parte del software. Mas y más sistemas son actualmente controlados por software. La Ingeniería de Software concierne a teorías, métodos y herramientas para el desarrollo profesional de software. El gasto en La Ingeniería de Software, representa un alto porcentaje del PIB de los países desarrollados. Ingeniería de Software: Conceptos Básicos ¿Que es la Ingeniería de Software ? ¿Cual es la diferencia entre un programador y un Ingeniero de Software? ¿Cual es la diferencia entre un Ingeniero de Software y un Ingeniero de Sistemas? ¿Cual es la diferencia entre la Ingeniería de Software y la Computación ? ¿Que es un sistema software ? ¿Que es un modelar un sistema software ? ¿Que actividades son necesarias para el desarrollo de software (proceso)? Estado del arte en Ing. De Software ¿Es una ciencia rigurosa con fuertes fundamentos matemáticos? ¿Es una campo técnico bien desarrollado con mucho de disciplina de ingeniería? O está realmente en un estado primitivo... A lo más una serie de “mejores prácticas”, desarrolladores de software construyen software y si éstos funcionan entonces nosotros estudiamos cómo ellos lo hicieron. Si éstos funcionan por un largo tiempo entonces estudiamos sus procesos de software aun más cuidadosamente. ¿Que es la Ingeniería de Software? I La Ingeniería de Software es una disciplina de la Ingeniería que concierne a todos los aspectos de la producción de software, se ocupa del desarrollo del software. Término que aparece por primera vez en 1968. La producción de programas debe abordarse como una ingeniería más. Disciplina que comprende todos los aspectos de la producción de software, desde las etapas iniciales hasta el mantenimiento “disciplina de ingeniería”: aplicación de teorías, métodos y herramientas para solucionar problemas, y teniendo en cuenta restricciones financieras y organizativas “todos los aspectos de producción”: comprende procesos técnicos del desarrollo y actividades como la administración de proyectos, desarrollo de herramientas, métodos y teorías Se enfrenta al software como un producto de ingeniería que requiere: planificación, análisis, diseño, implementación, pruebas y mantenimiento ¿Que es la Ingeniería de Software? II Trata de las teorías, métodos y herramientas que los profesionales del desarrollo del software deben utilizar. No solo comprende los procesos técnicos del desarrollo. También los principios más relevantes de la dirección y control de este proceso También el desarrollo de nuevas teorías, métodos y herramientas de apoyo a la producción del software. Diferencia entre Ingeniería de Software y Computación La Ingeniería del Software se fundamenta en técnicas relacionadas con: ciencia de la computación, programación, ingeniería, administración, matemáticas, economía,... La computación concierne a la teoría y fundamentos de cualquier sistema de computo, sea de hardware o de software. La Ingeniería de software concierne solo al desarrollo de sistemas o productos de software La Ingeniería de Software todavía mantiene ñas distancias de otras ciencia e ingenierías como los son la Química, la Ingeniería Civil o la Electrónica. Ingeniería de Sistemas e Ingeniería de Software La Ingeniería de Sistemas concierne a todos los aspectos del desarrollo de sistemas basados en cómputo, información y conocimiento que incluyen el hardware, software, los procesos, métodos y organización de Ingeniería. La Ingeniería de Software es solo parte de este proceso. Forma parte de la “Ingeniería de Sistemas” Ingeniería del Software. Antecedentes-Evolución Bohem 76 “La aplicación práctica del conocimiento científico al diseño y construcción de programas de computador y la documentación asociada requerida para su desarrollo, operación y mantenimiento” IEEE 83 “ La investigación sistemática para el desarrollo operación, mantenimiento y requerimientos del software” donde software es: “ Programas de computador, procedimientos, reglas, posiblemente la documentación asociada y los datos pertinentes para la operatividad de un sistema informático”. Ingeniería del Software. Antecedentes-evolución Fairley 85 “La ingeniería del Software es la disciplina tecnológica y de gestión dedicada a la producción sistemática y al mantenimiento de los productos software desarrollados y modificados con un coste y tiempo estimado” Sommerville 89 “ El desarrollo y mantenimiento sistemático de software certificado que resuelve correctamente un conjunto preciso de especificaciones”. Ingeniería del Software. Definición "El sistemático desarrollo y mantenimiento de software certificado que resuelve correctamente un conjunto preciso de especificaciones“. Ingeniería del Software. Certificación Una garantía escrita de que un sistema o programa cumple con sus especificaciones. Una autorización escrita que establece que un sistema de computación es seguro y esta permitido operar en un entorno definido, produciendo información sensible. La demostración formal de aceptabilidad del sistema para obtener autorización para su uso operacional. El proceso de confirmación que un sistema o programa es capaz de satisfacer sus especificaciones requeridas en un entorno operativo. Certificación dada en uso bajo las actuales condiciones y utilizado para evaluar no solo el software en si mismo, sino también las especificaciones en las cuales fue construido. El procedimiento por el cual personal debidamente autorizado determina, verifica y da fe por escrito de que un proceso, función, programa cumple un requerimiento dado. Ingeniería del Software. Software correcto Libre de defectos de diseño y codificación. Libre de fallos. Cumple las especificaciones requeridas. Cumple con las expectativas de los usuarios. Ingeniería del Software. Especificación Un documento que prescribe, un completo, preciso, verificable, conjunto de requerimientos, diseño comportamiento y otras características de un sistema o componente del sistema. El proceso de desarrollar una especificación. La declaración de un conjunto de requerimientos que son satisfechos por un producto. Otros conceptos de la ingeniería del software Sistemas y modelos sistema: realidad subyacente modelo: cualquier abstracción de la realidad Productos de trabajo artefacto o elemento que se produce durante el desarrollo (documento, fragmento de software,...) dos tipos: producto de trabajo interno: producto para el consumo interno del proyecto (por ejemplo, una revisión de la estructura de la base de datos, resultados de pruebas para el gerente,...) entrega: producto de trabajo para un cliente (especificación de requisitos, manual de usuario, producto final,...) Otros conceptos de la ingeniería del software Objetivos: principios de alto nivel que se utilizan para guiar el proyecto definen los atributos realmente importantes del sistema (seguridad, fiabilidad,...) a veces hay conflicto entre objetivos (por ejemplo, seguridad y bajo coste) que aumentan la complejidad del proyecto Otros conceptos de la ingeniería del software Requerimientos características que debe tener el sistema requerimiento funcional: área de funcionalidad que debe soportar el sistema (por ejemplo, proporcionar billetes de tren) requerimiento no funcional: restricción que se establece sobre el funcionamiento del sistema (por ejemplo, proporcionar billetes de tren en menos de un segundo) Restricciones: por ejemplo, utilización de un determinado lenguaje, de una determinada plataforma o de un sistema antiguo que el cliente no quiere retirar Otros conceptos de la ingeniería del software Actividades, tareas y recursos actividad (o fase): conjunto de tareas que se realiza con un propósito específico (obtención de requisitos, entrega, administración,...) que pueden componerse de otras actividades tarea: unidad elemental de trabajo que puede ser administrada; consumen recursos, dan como resultado productos de trabajo y dependen de productos de trabajo producidos por otras tareas recursos: bienes que se utilizan para realizar el trabajo: tiempo, equipamiento y recursos humanos al planificar, el gerente divide el trabajo en tareas y les asigna recursos Otros conceptos de la ingeniería del software Notaciones, métodos y metodologías notación: conjunto de reglas gráficas o de texto para representar un modelo (UML, Unified Modelling Language, es una notación gráfica orientada a objetos para representar modelos) método: técnica repetible para resolver un problema específico. Por ejemplo: un algoritmo de ordenación es un método para ordenar elementos en una lista la administración de la configuración es un método para el seguimiento de los cambios metodología: colección de métodos, actividades y herramientas para la resolución de una clase de problemas (OMT, metodología de Booch, Catalysis, Proceso Unificado de Desarrollo,...) Otros conceptos de la ingeniería del software Participantes: todas las personas involucradas en el proyecto cliente: encarga y paga el sistema desarrolladores: construyen el sistema (analistas, diseñadores, programadores,...) gerente o director del proyecto: planifica y calcula el presupuesto, coordina a los desarrolladores y cliente usuarios finales: los que van a utilizar el sistema Otros conceptos de la ingeniería del software Papel (rol) conjunto de responsabilidades en el proyecto o en el sistema asociado con un conjunto de tareas y se asigna a un participante un mismo participante puede cumplir varios papeles Modelado Modelado: método básico de la ciencia Modelo representación abstracta de un sistema que da respuesta a preguntas sobre el sistema útiles cuando se manejan sistemas grandes, pequeños, complicados o caros para tener una experiencia de primera mano permiten visualizar y comprender sistemas que no existen o que sólo se supone que existen ejemplos: modelos Modelado Los ingenieros de software necesitan comprender el ambiente de funcionamiento del sistema: construyen modelos del dominio del problema (sistemas de bolsa, control de tráfico aéreo,...) comprender los distintos sistemas que podrían construir para evaluar alternativas: construyen modelos del dominio de la solución técnicas y herramientas para construir los modelos (por ejemplo, diagramas de UML) SI ST EMA DE PA GOS Y FA CT URA CIÓN Sol ici ta r b iene s o servicios Hojear fact uras <<subsistema>> Sistema de visión <<subsistema>> iniciador Co nf irm ar p ed ido iniciador Enviar factura al comprador iniciador iniciador Planificar pago factura Rechazar factura <<subsistema>> Controlador del brazo <<subsistema>> <<subsistema>> Co ntrolador del asidero Sistema d e i dentificaci ón de objetos Pagar factura Vendedor Comprador <<extend>> iniciador Re al iza r t ransa cció n Pagar factura en día vencimiento Pagar recargo por saldo deudor <<subsistema>> <<subsistema>> Sistema de selección de embalajes Sistema de cuentas bancarias En vi ar av iso <<subsistema>> <<subsistema>> Sistema de embalaje Contro lado r de cinta transportadora Solución de problemas Los ingenieros de software buscan una solución adecuada, en varios pasos: 1. Formular el problema 2. Analizar el problema 3. Buscar soluciones 4. Decidir la solución más adecuada 5. Especificar la solución Actividades básicas del desarrollo 1. obtención de requerimientos 2. análisis 3. diseño del sistema 4. implementación Solución de problemas Otras actividades del desarrollo para evaluar la adecuación de los modelos revisiones del análisis: el modelo del dominio del problema se compara con la realidad del cliente revisiones del diseño: el modelo del dominio de la solución se compara con los objetivos del proyecto pruebas: el sistema se valida contra el modelo del dominio de la solución administración del proyecto: se compara el modelo del proceso de desarrollo (calendario y presupuesto) con la realidad (trabajos entregados y recursos gastados) La ingeniería del software Trata de ser la respuesta a los problemas y crisis del software Combinación de elementos: métodos completos para todas las fases mejores técnicas de control de calidad mejores elementos de programación herramientas para Automatizar los métodos filosofía de coordinación, Control y buena gestión Ingenieros del Software Los ingenieros del software deben: Adoptar un enfoque sistémico y organizado en su trabajo y Utilizar las herramientas y técnicas más apropiadas dependiendo Del problema a resolver Las restricciones del desarrollo y Los recursos disponibles Responsabilidad ética y profesional en ISW (I) Está cobrando más interés en los últimos años. Los ingenieros de software tienen responsabilidades frente a la profesión y la sociedad. Su responsabilidad no es exclusivamente técnica. Deben comportarse de forma ética y moralmente responsable si quieren ser respetados como profesionales. Un ingeniero de software no debería comportarse de manera deshonesta o de una forma que perjudique a la profesión. Responsabilidad ética y profesional en ISW (II) Hay áreas donde el concepto de conducta aceptable no está limitada por la ley sino por la noción más tenue de responsabilidad profesional. Algunas de ellas son: Confidencialidad. Se debería respetar la confidencialidad de la empresa empleadora o de los clientes independientemente de que se haya firmado un contrato formal de confidencialidad. Competencia. El ingeniero de software no debería aceptar conscientemente trabajo que esté fuera de su competencia. Responsabilidad ética y profesional en ISW (III) Derechos de la propiedad intelectual. El ingeniero de software debería conocer las leyes que gobiernan la propiedad intelectual, como patentes y derechos de autor, y debería proteger la propiedad intelectual de clientes y empleadores. Mal uso del ordenador. El ingeniero de software no debería usar sus conocimientos técnicos para utilizar de forma incorrecta los ordenadores de otras personas. El mal uso va desde lo relativamente trivial (usar el ordenador de la empresa para jugar, p.ej.) hasta lo extremadamente serio (diseminación de virus). Responsabilidad ética y profesional en ISW (IV) ACM (Association for Computer Machinery) e IEEE (Institute of Electrical and Electronic Engineers) publicaron en 1999 un código conjunto de ética y conducta profesional, que establece los estándares de conducta esperados de sus miembros. http://www.acm.org/serving/se/code_s.html Es preciso aceptar dicho código para poder ser miembro de estas organizaciones. ⇒ El Octavo Principio establece como obligación el aprendizaje continuo a través de toda la vida profesional.