Grado en Informática · 2026–2027 01 / 19
Sesión 02 · 9 de septiembre de 2026

Los principios de la
Ingeniería del Software

Daniel Lombraña González talks.daniellombrana.es/is-s02
Bloque 1 IS · S02 · 2026
I
Principios

Ingenium,
ingeniare

Principios 03 / 19
Antes de nada

¿Qué es la ingeniería?

Aplicar la ciencia y las matemáticas de forma sistemática. El objetivo: diseñar y mejorar sistemas, dispositivos o procesos que resuelven problemas reales.

Puentes. Motores. Smartphones. Marcapasos. Internet. Naves espaciales. Lavadoras. Todo eso es ingeniería.

Siempre bajo restricciones

Seguridad Rendimiento Coste Estética Leyes Tiempo Física
01 · Principios en.wikipedia.org/wiki/Engineering
Principios 04 / 19
Antes de nada

Del latín ingenium: ingenio

La palabra viene del latín ingenium: ingenio. De ahí ingeniare: idear, inventar. Un ingeniero es quien practica la ingeniería.

El trabajo de un ingeniero conecta el descubrimiento científico con las necesidades reales de las personas y de las empresas.

Vosotros vais a hacer exactamente eso. Con código.

01 · Principios en.wikipedia.org/wiki/Engineer
Principios 05 / 19
La idea detrás de todo esto

Todo tiende al desorden

Segunda ley de la termodinámica. En un sistema cerrado, la entropía nunca disminuye por sí sola. La entropía es el desorden.

S = kB ln W

S: entropía · kB: constante de Boltzmann · W: número de microestados posibles.

En código, W son

Dependencias Ramas if / else Bucles Comentarios desincronizados

El software es un sistema así. No se desgasta como el hardware, pero sí se deteriora con cada cambio mal hecho.

Vuestro trabajo como ingenieros no es evitar el cambio. Es acotar la entropía que introduce cada cambio.

01 · Principios IS · S02 · 2026
Principios 06 / 19

¿Cómo la acotamos? Cuatro principios

01

Abstracción

Ocultar los detalles irrelevantes y exponer solo lo que hace falta usar.

02

Modularidad

Dividir el sistema en piezas independientes que se puedan entender, probar y cambiar por separado.

03

Ocultación de información

Cada módulo esconde sus decisiones internas; el resto del sistema no depende de cómo las resuelve.

04

Cohesión y acoplamiento

Cada pieza hace una cosa (cohesión alta) y depende lo mínimo posible de las demás (acoplamiento bajo).

01 · Principios Pressman & Maxim · Ingeniería del software (9ª ed.)
Principios 07 / 19
Ejemplo · La filosofía Unix (1978)

Un sistema construido con cuatro principios

"Write programs that do one thing and do it well. Write programs to work together."
Doug McIlroy · Unix Philosophy, 1978
AbstracciónTodo es un fichero: el mismo read/write sirve para un disco, una impresora o un socket.
ModularidadTuberías: ls | grep | sort. Piezas independientes que se combinan.
Ocultación de informaciónEl driver esconde el hardware; el programa de arriba nunca necesita saberlo.
Cohesión y acoplamientoCada herramienta, una tarea. Se comunican solo por texto plano, sin conocerse entre sí.
01 · Principios IS · S02 · 2026
Principios 08 / 19
Metodología · El origen de KISS

Un avión reparable con lo puesto

El U-2 y el SR-71 volaban misiones de reconocimiento en zonas remotas y hostiles, lejos de talleres especializados. Si algo se rompía allí, el avión quedaba inutilizado. La misión fallaba. El piloto quedaba expuesto.

Kelly Johnson, ingeniero jefe de Skunk Works en Lockheed, puso una condición a sus ingenieros. Les entregó un puñado de herramientas básicas. El avión debía poder repararlo un mecánico medio, en el frente, en combate, con solo esas herramientas.

"Keep it simple stupid"
Kelly Johnson · Skunk Works, Lockheed · h. 1960
Lockheed U-2

Lockheed U-2. Reconocimiento a gran altitud, 1955.

Lockheed SR-71 Blackbird

Lockheed SR-71 Blackbird. Mach 3+, 1966.

01 · Principios en.wikipedia.org/wiki/KISS_principle · fotos: USAF / NASA, dominio público, vía Wikimedia Commons
Principios 09 / 19

La misma disciplina, con otro nombre

De un avión de combate a la industria del software: cuatro décadas repitiendo la misma idea.

1960
KISS
La Marina de EE.UU. adopta el lema. Origen: Skunk Works, Lockheed.
1978
Unix Philosophy
Código simple, corto, claro, modular y extensible.
1989
Worse is Better
Richard P. Gabriel: mejor simple y correcto que completo y perfecto.
1998
YAGNI
Extreme Programming: "You Aren't Gonna Need It".

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." · Martin Fowler

01 · Principios en.wikipedia.org/wiki/KISS_principle · b4motion.com/blog/keep-it-simple-stupid
Principios 10 / 19
Portada de Designing Data-Intensive Applications
El libro del curso

Designing Data-Intensive Applications

Martin Kleppmann · O'Reilly, 2017

Este libro es el hilo conductor de vuestro proyecto. Cada fase de la base de datos que vais a construir sigue un capítulo del libro.

Fase 1Registro + índice hash. Cap. 3.
Fase 2Segmentación y compactación. Cap. 3.
Fase 3Árbol B. Cap. 3.
Fase 4WAL y transacciones. Cap. 7.
Fase 5Analizador SQL. Cap. 2.
01 · Principios dataintensive.net
Principios 11 / 19

Los tres objetivos de diseño de vuestro proyecto

DDIA, capítulo 1. El marco con el que vais a evaluar cada decisión de esta base de datos, desde la primera línea.

Fiabilidad

El sistema sigue funcionando correctamente aunque haya fallos: de hardware, de software o humanos.

Escalabilidad

Formas razonables de lidiar con el crecimiento: más datos, más tráfico, más complejidad.

Mantenibilidad

Que otras personas, incluido vuestro yo del futuro, puedan trabajar en el sistema de forma productiva.

01 · Principios Kleppmann · Designing Data-Intensive Applications, cap. 1
Principios 12 / 19

Ejercicio · 8 min. ¿Por qué cuesta tanto cambiar esto?

En equipos: localizad todas las formas de acoplamiento. ¿Qué pasaría si mañana cambiamos de proveedor de email?

class OrderNotifier: def __init__(self): self.db_connection = mysql.connect(host="10.0.0.5", user="root", password="1234") self.smtp = smtplib.SMTP("smtp.gmail.com", 587) def notify(self, order_id): cursor = self.db_connection.cursor() cursor.execute(f"SELECT email FROM orders WHERE id={order_id}") email = cursor.fetchone()[0] message = f"Your order {order_id} is on its way" self.smtp.sendmail("no-reply@shop.com", email, message)
01 · Principios IS · S02 · 2026
Principios 13 / 19
Antes de seguir

Formación de equipos

01Equipos de 4 personas. Un repositorio público por equipo en GitHub.
02Roles rotativos. Cambian en cada entrega. Todos pasan por todos los roles a lo largo del curso.
03Organizaos ahora. Elegid equipo, sentaos juntos: es donde vais a trabajar el resto del semestre.
01 · Principios IS · S02 · 2026
Bloque 2 IS · S02 · 2026
II
De la teoría a la práctica

La base de datos
más simple posible

De la teoría a la práctica 15 / 19
Pensadlo antes de mirar código

¿Cuál es la base de datos
más simple que existe?

02 · De la teoría a la práctica IS · S02 · 2026
De la teoría a la práctica 16 / 19

La versión más tonta que funciona

Dos funciones. Nada más. DDIA, cap. 3. El ejemplo original está en bash. Esto es Python. Os toca escribirlas.

def set(key, value): # ... def get(key): # ...
02 · De la teoría a la práctica IS · S02 · 2026
De la teoría a la práctica 17 / 19
¿Qué falla?

¿Qué pasa cuando el fichero tiene diez millones de líneas?

02 · De la teoría a la práctica IS · S02 · 2026
De la teoría a la práctica 18 / 19
Pensadlo antes de seguir

¿Cómo buscáis en un libro grueso?

02 · De la teoría a la práctica IS · S02 · 2026
Cierre 19 / 19
Antes de la próxima clase

Deberes

01Python 3.12+, entorno virtual, pytest / black / flake8 instalados.
02Cada equipo crea su repositorio en GitHub (público).
03Repasad el código de hoy: ¿sabríais implementar delete(key)?
04En equipo: proponed e implementad una forma de encontrar una clave sin leer el fichero entero. Pensad en el índice de un libro.
Ingeniería del Software · 2026–2027 talks.daniellombrana.es/is-s02