INGENIERIA DEL SOFTWARE Ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, y el estudio de estos enfoques, es decir, la aplicación de la ingeniería al software.1 Es la aplicación de la ingeniería al software, ya que integra matemáticas, ciencias de la computación y prácticas cuyos orígenes se encuentran en la ingeniería. CONCEPTO DE SOFTWARE El software es un ingrediente indispensable para el funcionamiento del computador. Está formado por una serie de instrucciones y datos, que permiten aprovechar todos los recursos que el computador tiene, de manera que pueda resolver gran cantidad de problemas. Un computador en si, es sólo un conglomerado de componentes electrónicos; el software le da vida al computador, haciendo que sus componentes funcionen de forma ordenada. El software es un conjunto de instrucciones detalladas que controlan la operación de un sistema Diferencias entre Ciencias de la Computación e Ingeniería de Software Desde hace algunos años se viene discutiendo a nivel internacional sobre como se debe de considerar la educación en los campos de la Computación o Informática, es así que ACM (www.acm.org) e IEEE (www.ieee.org), dos de las instituciones más representativas de este campo en el mundo, proponen cinco grandes carreras Las carreras definidas por estas instituciones son: • Ciencias de la Computación (Computer Science) • Ingeniería de Software (Software Engineering) • Sistemas de Información (Information Systems) • Ingeniería de Computación (Computer Engineering) • Tecnologías de Información (Information Technology) En cuanto a las menciones ofrecidas en la Maestría en Informática en la PUCP, la definición de cada una de ellas se incluye a continuación. Ciencias de la Computación Esta disciplina se ocupa del estudio de sistemas de cómputo incluyendo procesos algorítmicos y principios que involucran el diseño de software y hardware. Los profesionales en ciencias de la computación se encargan del diseño de algoritmos, lenguajes, herramientas y sistemas de software. Diseñan y construyen software, creando soluciones eficientes a problemas del mundo real en campos como la medicina, el comercio, la biología y los negocios. Ingeniería de Software Esta disciplina se ocupa del diseño e implementación de software complejo de una manera confiable y eficiente, aplicando los principios y prácticas de la ingeniería. Los ingenieros de software combinan la experiencia en ciencias de la computación, ingeniería y matemáticas para diseñar, definir y organizar diversos aspectos de un producto software complejo. Los profesionales de esta disciplina están capacitados en todos los aspectos relacionados al ciclo de vida del software, incluyendo temas de costo del proceso de desarrollo. ¿QUÉ ES UN PROCESO DE SOFTWARE? Un conjunto estructurado de actividades cuya meta es el desarrollo o evolución de un software Algunas actividades genéricas en todos los procesos de software son: Especificación, qué debe hacer el software y cuáles son sus especificaciones de desarrollo: Desarrollo, producción del sistema de software Validación, verificar que el software cumple con lo solicitado por el cliente Evolución, cambiar/adaptar el software a las nuevas demandas Estas actividades varían dependiendo de la organización y del tipo de sistema a desarrollarse ATRIBUTOS DEL SOFTWARE En esta lección estamos interesados en medir características del software que dependen de la visión externa del producto. El objetivo principal y más importante de la ingeniería del software es la mejora de la calidad de los productos software. CALIDAD. El término calidad del software se interpreta de diferentes maneras. Una de las definiciones más difundidas de calidad es la debida a McCall (1977), que especifica una serie de factores. Cada uno de esos factores los subdivide en criterios, teniendo asociado cada uno de ellos una métrica. La tabla siguiente muestra algunos factores generales de calidad. FACTOR DEFINICIÓN Corrección Grado en el que un programa satisface las especificaciones y cumple los objetivos del usuario. Fiabilidad Grado en el que un programa se espera que realice su función con una precisión requerida. Eficiencia Cantidad de recursos y código requeridos por un programa para realizar una función. Integridad Grado en el que se controla el acceso al programa o los datos por usuarios no autorizados. Usabilidad Esfuerzo necesario para aprender, operar, preparar entradas e interpretar la salida de un programa. Mantenibilidad Esfuerzo requerido para localizar y corregir un error en un programa en funcionamiento. Facilidad de prueba Esfuerzo requerido para probar un programa (para garantizar que realiza la función deseada). Flexibilidad Esfuerzo requerido para modificar un programa en funcionamiento. Portabilidad Esfuerzo requerido para trasferir un programa de una configuración hardware o entorno software a otro. Reusabilidad Grado en el que un programa se puede utilizar en otras aplicaciones Interoperatividad Esfuerzo requerido para acoplar un sistema con otro.