2.16 Ingeniería de Software (SE)

En cada dominio de la aplicación computación, la profesionalidad, la calidad, el cronograma y el costo son fundamentales para la producción de sistemas de software. Debido a esto, los elementos de la ingeniería de software se aplican al desarrollo de software en todas las áreas de la computación. Una amplia variedad de prácticas de ingeniería de software se han desarrollado y utilizado desde que la necesidad de la disciplina de la ingeniería de software fue reconocida por primera vez. También se han identificado muchos puntos de equilibrio entre estas diferentes prácticas. La práctica de la ingeniería de software tiene que seleccionar y aplicar las técnicas y prácticas adecuadas para un esfuerzo de desarrollo determinado con el fin de maximizar el valor. Para aprender a hacerlo así, ellos estudian los elementos de ingeniería de software.

La ingeniería de software es la disciplina que estudia la aplicación de la teoría, el conocimiento y la práctica de construir con eficacia y eficiencia los sistemas de software confiables que satisfacen los requisitos de los clientes y usuarios. Esta disciplina es aplicable a sistemas de gran escala pequeña, mediana . Abarca todas las fases del ciclo de vida de un sistema de software, incluyendo la obtención de requisitos, análisis y especificación; diseño; construcción; verificación y validación; despliegue; así como la operación y mantenimiento. Ya sea pequeña o grande, siguiendo un proceso tradicional plan de desarrollo dirigido, un enfoque ágil, o algún otro método, la ingeniería de software se refiere a la mejor manera de construir buenos sistemas de software.

Ingeniería del software utiliza métodos de ingeniería, procesos, técnicas y mediciones. Se beneficia de la utilización de herramientas para la gestión de desarrollo de software; análisis y modelado de artefactos de software ; evaluación y control de calidad; y para garantizar un enfoque disciplinado y controlado para la evolución del software y su reutilización. La caja de herramientas de ingeniería de software ha evolucionado a lo largo de los años. Por ejemplo, el uso de los contratos, con cláusulas que requiere y garantiza invariantes de clase, es una buena práctica que se ha vuelto más común. El desarrollo de software, que puede implicar un desarrollador individual o un equipo o equipos de desarrolladores, requiere la elección de las herramientas más apropiadas, métodos y enfoques para un entorno de desarrollo determinado.

Los estudiantes y los instructores tienen que entender los impactos de la especialización en los enfoques de ingeniería de software. Por ejemplo, los sistemas especializados incluyen:

  1. Sistemas de tiempo real
  2. Sistemas cliente-servidor
  3. Sistemas distribuidos
  4. Sistemas paralelas
  5. sistemas basados en Web
  6. Sistemas de alta integridad
  7. Juegos
  8. Computación móvil
  9. Software de dominio específico (por ejemplo, la computación científica o aplicaciones de negocio)

Las cuestiones planteadas por cada uno de estos sistemas especializados exigen tratamientos específicos en cada fase de la ingeniería de software. Los estudiantes deben ser conscientes de las diferencias entre las técnicas y los principios de la ingeniería de software en general y las técnicas y los principios necesarios para abordar los problemas específicos de los sistemas especializados.

Un efecto importante de la especialización es que se puede necesitar  tomar decisiones diferentes de material en la enseñanza de las aplicaciones de la ingeniería de software, como entre los diferentes modelos de procesos, diferentes enfoques para los sistemas de modelamiento, o diferentes opciones de técnicas para llevar a cabo cualquiera de las actividades clave. Esto se refleja en la asignación de núcleo y el material electivo, con los temas básicos y los resultados de aprendizaje centrados en los principios que subyacen a las distintas opciones, y los detalles de las diversas alternativas entre las que hay que decidir el material electivo .

Otra división de las prácticas de ingeniería de software es entre los interesados en la necesidad fundamental de desarrollar sistemas que implementan correctamente la funcionalidad que se requiere, los relacionados con otras cualidades de los sistemas y las compensaciones necesarias para equilibrar estas cualidades. Esta división también se refleja en la asignación de núcleo y el material electivo, por lo que los temas y resultados de aprendizaje relacionados con los métodos básicos para el desarrollo de tal sistema se asignan al núcleo y aquellos que se ocupan de otras cualidades y compensaciones entre ellos están asignados al material electivo.

En general, los estudiantes pueden aprender mejor a aplicar gran parte del material definido en el Ingeniería Sofware, al participar en un proyecto. Tales proyectos deben exigir a los estudiantes a trabajar en equipo para desarrollar un sistema de software a través de la mayor cantidad de su ciclo de vida como sea posible. Gran parte de la ingeniería de software se dedica a la comunicación efectiva entre los miembros del equipo y las partes interesadas. La utilización de los equipos de proyectos, los proyectos pueden ser lo suficientemente desafiantes para requerir a los estudiantes a utilizar técnicas de ingeniería de software efectivas para desarrollar y practicar sus habilidades de comunicación. Si bien la organización y realización de proyectos eficaces en el marco académico puede ser un reto, la mejor manera de aprender a aplicar la teoría de la ingeniería del software y el conocimiento está en el entorno práctico de un proyecto. Las horas mínimas especificadas para algunas unidades de conocimiento en este documento pueden aparecer insuficientes para lograr los resultados del aprendizaje a nivel de la aplicación asociada. Se debe entender que estos resultados deben ser alcanzados a través de la experiencia del proyecto que incluso puede ocurrir más adelante en el plan de estudios que cuando se introducen los temas dentro de la unidad de conocimiento.

Además, cada vez hay más evidencia de que los estudiantes aprenden a aplicar los principios de ingeniería de software con mayor eficacia a través de un enfoque iterativo, donde los estudiantes tienen la oportunidad de trabajar a través de un ciclo de desarrollo, evaluar su trabajo, y luego aplicar los conocimientos adquiridos a través de su evaluación a otro ciclo de desarrollo. Modelos de ciclo de vida ágiles e iterativos inherentemente ofrecen tales oportunidades.

La terminología del ciclo de vida del software en este documento se basa en la utilizada en las fuentes anteriores, como el Cuerpo de Conocimiento de la Software Ingeniería (SWEBOK) y las Directrices Curriculares ACM/IEEE-CS Software Engineering 2004 (SE2004). Mientras que algunos términos se definieron originalmente en el contexto de los procesos de desarrollo del plan impulsado, son tratados aquí como genérico y por lo tanto igualmente aplicable a procesos ágiles.

Nota: La unidad de conocimiento Métodos de Desarrollo incluye 9 horas Core Tier1-que constituyen una introducción a ciertos aspectos de la ingeniería de software. Las unidades de conocimiento, los temas y las especificaciones básicas horas de esta área de Ingeniería de Software deben ser entendidos como asumiendo una exposición previa al material descrito en el Métodos de Desarrollo .

KA Core Tier1 Core Tier2 Electivo
2.16.1 Procesos de Software 2 1 Si
2.16.2 Gestión de Proyectos de Software   2 Si
2.16.3 Herramientas y Entornos   2 No
2.16.4 Ingeniería de Requisitos 1 3 Si
2.16.5 Diseño de Software 3 5 Si
2.16.6 Construcción de Software   2 Si
2.16.7 Verificación y Validación de Software   3 Si
2.16.8 Evolución de Software   2 No
2.16.9 Fiabilidad de Software   1 Si
2.16.10 Métodos Formales     Si



Subsecciones
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, Universidad de Ingeniería y Tecnología, Lima-Perú
basado en el modelo de la Computing Curricula de IEEE-CS/ACM