Grado en Informática · 2026–2027
01 / 19
Sesión 02 · 9 de septiembre de 2026
Los principios de laIngenierí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: 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ón Todo es un fichero: el mismo read/write sirve para un disco, una impresora o un socket.
Modularidad Tuberías: ls | grep | sort. Piezas independientes que se combinan.
Ocultación de información El driver esconde el hardware; el programa de arriba nunca necesita saberlo.
Cohesión y acoplamiento Cada 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. Reconocimiento a gran altitud, 1955.
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
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 1 Registro + índice hash. Cap. 3.
Fase 2 Segmentación y compactación. Cap. 3.
Fase 3 Árbol B. Cap. 3.
Fase 4 WAL y transacciones. Cap. 7.
Fase 5 Analizador 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
01 Equipos de 4 personas. Un repositorio público por equipo en GitHub.
02 Roles rotativos. Cambian en cada entrega. Todos pasan por todos los roles a lo largo del curso.
03 Organizaos 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
01 Python 3.12+, entorno virtual, pytest / black / flake8 instalados.
02 Cada equipo crea su repositorio en GitHub (público).
03 Repasad el código de hoy: ¿sabríais implementar delete(key)?
04 En 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