Sean bienvenidxs al espacio virtual de la materia “Elementos de Ingeniería de Software”, que estaremos cursando durante el segundo semestre del 2018 en la locación Capitán Sarmiento de la Universidad Nacional de Quilmes. Si llegaste hasta acá y no tenés nada que ver con ese curso podés seguir leyendo igual, seguramente haya cosas que te puedan servir.

De qué se trata la materia

Reflexionar sobre los procesos y actividades que tienen que ver con el desarrollo de software, lo cual se supone que debería ser competencia de ustedes al finalizar esta carrera. Para ello, vamos a tener una serie de lecturas (y tal vez algunos videos) que van a ser de carácter obligatorio y que sería bueno que lean en tiempo y forma, para poder debatir.

Acompañando esta reflexión, experimentaremos algunás técnicas que son utilizadas hoy en día por la industria y que pueden aplicarse virtualmente en cualquier equipo de desarollo, desde el unipersonal hasta el que pueda existir en una gran empresa. El espíritu de estas metodologias es reducir la burocracia para poder enfocar la atención en lo que realmente importa: construir soluciones que otorguen valor a las personas involucradas.

Una vez que tengamos una pequeña base “teórica” sobre los contenidos, vamos a procurar aplicarlas sobre un proyecto real: el libro matriz digital. Para esto, buscaremos involucrar activamente a nuestros clientes y que puedan ser parte de la solución que estamos construyendo.

Formalmente (según el plan de estudios) los objetivos son estos:

Que el/la estudiante:

  • Entienda que para llevar a cabo un proyecto de desarrollo de software hace falta llevar a cabo varias actividades además de programar, y tenga una noción de cuáles son estas actividades y las técnicas asociadas a cada una.
  • Conozca el concepto de metodología como definición de las actividades que involucra el desarrollo de software, su articulación y los roles que ocupan las personas que participan.
  • Conozca los conceptos principales asociados a metodologias ágiles y estructuradas, las actividades y roles que involucran, y algunas similitudes y diferencias entre ambos enfoques.
  • Pueda interpretar requerimientos funcionales y no funcionales, y tenga noción de las actividades asociadas a tareas de programación necesarias para lograr la concreción y verificación de los mismos.
  • Comprenda la relevancia de los distintos tipos de testing existentes y el alcance de cada uno de ellos e identifique cuáles son los más relacionados con las actividades de un programador.
  • Tenga una pequeña experiencia práctica aplicando las actividades y metodologías que se describen en la materia.

Nociones previas

Comencemos recuperando lo que ya sabemos o creemos sobre el desarrollo de software, a partir de las siguientes preguntas:

  1. ¿Qué actividades están involucradas en el desarrollo de un sistema?
  2. ¿Quién debería ocuparse de estas actividades?
  3. ¿A qué les suena el término “ingeniería de software”?
  4. ¿Conocen alguna experiencia de desarollo de un sistema real? ¿Participaron de esta experiencia?
  5. ¿Qué noción tenían antes de empezar esta carrera y qué noción tienen ahora?

Breve historia del software

Es una disciplina que comenzó fuertemente ligada al hardware, prácticamente sin independencia de este.

A medida que los programas se complejizaron y aparecieron nuevas máquinas, surgió la necesidad de tener lenguajes de más alto nivel (antes se usaban tarjetas perforadas… sí, pedazos de cartón con agujeros) y de empezar a organizar el trabajo un poco mejor.

Cómo (me enseñaron a mí que) se construye software

El esquema de la muerte