3

Mi primera clase de Fundamentos Ingeniería de Software.

Esta publicación está dirigida a personas que como yo, nos podemos sentir abrumados por el contenido de la primera clase del curso de Fundamentos de Ingeniería de software, así que antes de continuar, decidí tomarme un tiempo para tratar de explicar con mis palabras lo que entendí y poder ayudar a otras personas. Igualmente, le agradezco a la comunidad que me haga saber si encuentran conceptos errados en mi escrito, ya que entiendo que son bases de vital importancia para el buen desempeño en este curso y en otras rutas de aprendizaje.
Todo inicia con una perspectiva en la que la ingeniería de software es vista más allá de la actividad de escribir código y la necesidad de entender qué pasa detrás de las computadoras. Para ello se utilizará como ejemplo el envío de un mail y la aparición de la notificación en el teléfono móvil del destinatario asociada a la recepción de dicho mail.
Lo que sucede cuando enviamos un mail desde una computadora, es que se utiliza el teclado para ingresar la información y cuando se oprime la tecla enter para realizar el envío, se genera una señal eléctrica desde el teclado, la cual recibirá la tarjeta madre, que es una placa electrónica por donde transitan todas las señales de los dispositivos que funcionan con electricidad y que están conectados a la máquina.
Esta señal es intervenida por el procesador o CPU, que es el centro de procesamiento de todo lo que hace la computadora y es un chip especial que procesa señales eléctricas, operaciones matemáticas y ejecuta código de programación. Una vez el procesador identifica la señal, se la envía a una capa de electricidad superior en la que funciona el Sistema Operativo.
Una vez el Sistema Operativo recibe la señal, utiliza los drivers que son capas de software que le permiten identificar cada señal de cada dispositivo externo de hardware que utiliza la computadora. Además, el Sistema Operativo utiliza el estado para identificar en qué aplicación y tarea se está enfocando el usuario y como en nuestro ejemplo se está enviando un mail, subirá de capa para enviarle la señal al navegador.
El navegador de internet es el software que entiende la capa sobre la que corre internet y en donde lo que visualiza el usuario, está basado en tres tecnologías frontend que son HTML, que para el ejemplo está representada por el botón de enviar, CSS y JavaScript que es el software que se encarga de ejecutar una instrucción para que ocurra el evento del envío.
El evento es lo que dispara que algo ocurra en un Sistema Operativo moderno, cuando se utiliza la programación orientada a objetos (POO) y la programación visual. Algunos ejemplos de evento son: enter que corresponde a cuando se oprime una tecla o botón, click cuando se utilizan los botones del mouse, en teléfonos existe touch o tab cuando se toca la pantalla, en tabletas existe el evento de rotación que utiliza el acelerómetro para identificar la posición del dispositivo con respecto a la gravedad de la tierra y ajustar lo que está mostrando la pantalla.
En nuestro ejemplo del envío de un mail, el evento está representado por el enter, que a su vez está ligado a un código de programación construido en JavaScript, que se encarga de tomar todo lo que escribe un usuario en el navegador y encapsularlo para enviarlo a internet, utilizando una API (Application Programming Interface).
Un API es lo que utilizan los programadores para que su código se comunique con el de otros programadores. En el caso de los navegadores de internet, se creó un API llamado AJAX (Asynchronous JavaScript and XML). AJAX permite enviar información a los servidores de Internet, sin necesidad de recargar la página y es un ejemplo de la gran cantidad de API’s desarrolladas por diferentes compañías, para que los programadores puedan construir aplicaciones que interactúen con los sitios web de dichas organizaciones, atendiendo las necesidades propias de cada negocio.
AJAX toma los datos ingresados por el usuario, los encapsula y los envía al servidor y para su encapsulamiento, emplea formatos de archivo utilizados en la transferencia de información por internet, entre los que se destacan HTML, XML y el más popular en la actualidad es JSON (JavaScript Object Notation).
Haciendo un recuento hasta aquí en el envío de nuestro mail, lo que sucede es que JavaScript toma la información ingresada por el usuario, la encapsula utilizando un formato de archivo que puede ser JSON y la envía al servidor utilizando una API llamada AJAX. La información es recibida por el servidor a través de la API REST que es un protocolo preestablecido y una técnica de envío de datos al servidor.
El vehículo por el cual viaja la información desde la computadora al servidor, es el protocolo de transmisión HTTP (Hypertext Transfer Protocol), el cual se ubica en una capa diferente que es la que maneja Internet y en la cual existen direcciones que permiten el acceso a los diferentes sitios web.
El envío también requiere de una URL (Uniform Resource Locator), la cual está formada por varias partes y la primera corresponde al protocolo que utiliza en la transmisión. Existen varios tipos de protocolo siendo HTTP el utilizado por Internet para su funcionamiento, FTP (File Transfer Protocol) que es un protocolo obsoleto pero que aún se utiliza para el envío de archivos grandes y TELNET que sirve para controlar de manera remota un servidor a través de una consola de texto, pero este último fue remplazado por el protocolo SSH (Secure SHell).
Adicional a los tipos de protocolos ya mencionados, se puede agregar el protocolo bittorrent, que se utiliza para descargar distribuciones de LINUX, trasmitir archivos masivamente en redes peer to peer y para actualizar juegos y transmitir información de juegos multijugador.
Cuando el protocolo HTTP está precedido de una letra “s” (https), significa que el protocolo va cifrado y encriptado y esto indica que el servidor envió una llave, para que la conexión sea encriptada y sólo pueda ser vista por el usuario y el servidor, impidiendo que pueda ser intervenida por alguien más. Lo anterior obedece a que una conexión de Internet no viaja en línea recta y para evitar que sea intervenida mientras viaja, se creó este protocolo https o http seguro.
La segunda parte de la URL es el dominio que corresponde al nombre con el que se encuentra el servidor en internet, al cual se llega utilizando el DNS (Domain Name System).
El final de la URL, que es lo que está después del slash (/) del dominio, es la instrucción que se le está enviando al servidor para tener acceso a al sitio en el caso de un login o consultar la información del mismo. Este final de URL puede ser más extenso y complejo dependiendo del tipo de producto y la compañía y hace parte de las responsabilidades del backend.
A pesar de existir el DNS y utilizar los nombres para la búsqueda, Internet los convierte en direcciones IP exactas que es con lo que realmente funciona. Hay servidores globales llamados DNS, que son un proceso común en donde todas las personas de internet y países colaboran.
Los DNS constituyen una base de datos gigantesca que tienen la información de las direcciones IP y su nombre de dominio respectivo. Para saber cuál es la dirección IP de un nombre de dominio determinado, se utiliza la instrucción ping de la consola de comandos y se escribe el dominio a continuación. Al escribir ping google.com en la consola de comandos, se van a obtener varias direcciones IP dependiendo el país en donde se realice esta tarea, ya que google cambia la IP para buscar el servidor más cercano y mejorar así la velocidad de acceso.
Regresando a nuestro ejemplo del envío del mail, cuando se encuentra la IP, se envía la petición al servidor y este puede ser una serie de computadoras o una computadora gigante, en donde se ejecuta el código real con el que está hecha la aplicación de correo que se está utilizando para el envío. Gmail por ejemplo, está escrito en Java, pero antes de llegar allí, se debe pasar por la capa del Sistema Operativo, que para servidores normalmente es LINUX y este a su vez cuenta con drivers que le permiten conectarse a la electricidad del cable de red, que junto con los routers y switches que transmiten la información de la IP, se encargan de entregarle la señal eléctrica al servidor.
Allí, el driver reinterpreta la electricidad en una capa de red conocida como ethernet, la cual envía la señal a LINUX y este la convierte en datos que están encapsulados en un protocolo llamado TCP/IP, a través del que se transmite todo en internet. Luego el protocolo TCP/IP crea los datos hacia el protocolo HTTP, el cual es recibido por un servidor HTTP dentro de LINUX, bien sea Apache o NGINX.
A nivel de software, estos dos tipos de servidores mencionados, son aplicaciones que corren en el Sistema Operativo y reciben las señales que llegan en formatos como JSON o alguno de los mencionados y las procesa utilizando el código de programación que está hecho en lenguajes como Java, PHP, Python, Go o cualquiera de los que corre del lado del servidor. En este punto el lenguaje sabe que se le envío la orden de enviar un e-mail, porque también recibe la URL completa e inicia por el envío de la información a una base de datos, que en el futuro permitirá el acceso a esta información de una forma estructurada.
Lo que se hace después es enviar el mail utilizando su protocolo propio y servidores propios para esta tarea, lo que implica que un servidor de correo atiende la petición de forma similar a una petición web, ya que el correo tiene un dominio que permite establecer la dirección IP a la que se debe conectar para enviar el correo y también cuentan con un nombre para identificar la casilla de correo del destinatario. Los protocolos que utiliza el correo son SMTP (Simple Mail Transfer Protocol) y POP (Post Office Protocol), siendo uno de envío y otro el de recepción.
Actualmente la transmisión de correos es más compleja y utiliza elementos como llaves DKIM, verificaciones SPF, listas blancas y negras y honeypots, elevando la complejidad para que compañías desarrollen su servidor propio de correo, porque deben cumplir con todos los protocolos para conectarse con otro servidor de correo. Por otra parte compañías como GMail, no requieren pasar por todos los protocolos, ya que sólo necesitan utilizar su base de datos para hacer el cambio y mandar las notificaciones respectivas. Esto, debido a que muchos de los correos entrantes y salientes son de usuarios dentro de su dominio.
El servidor de e-mail puede no ser el mismo de HTTP o puede ser el mismo de otros protocolos y siguen un procedimiento similar a los de HTTP. La diferencia radica en que los Servidores de Correo cuando llegan al punto en donde el protocolo TCP/IP crea los datos hacia los protocolos SMTP o POP, utiliza servidores diferentes y específicos para ello, siendo Postfix uno de los más populares.
El servidor de correo establece a quien le enviaron el e-mail y lo asigna a una base de datos que los servidores de correo llaman bandeja y después genera la notificación de e-mail. Estas notificaciones de e-mail funcionan de 2 formas:
• Si se cuenta con servidor propio y aplicación propia para el envío de correo, los dispositivos están constantemente revisando si hay nuevos correos utilizando un protocolo SMTP, POP o el que se esté utilizando y en caso de haberlos dispara una notificación. Esas preguntas constantes que no generan alerta, hacen un modelo ineficiente.
• A partir de allí los desarrolladores de aplicaciones para dispositivos móviles crearon los Servidores de Notificaciones.
Revisando en detalle la segunda opción, los Servidores de Notificaciones que suelen estar o ser propiedad de Apple o Google, se encargan de ubicar el dispositivo y estar escuchando diferentes servidores ya sean de e-mails, chat, etc., que se suscriben al servicio de los servidores de notificaciones para enviar la notificación. En el caso de Apple se puede asumir que existe un servidor iOS con una base de datos que contiene todos los teléfonos, el id único asociado a cada uno y la IP a la que está conectado el teléfono.
Adicionalmente, existe una conexión constante entre el servidor y el teléfono, la cual utiliza el protocolo especial UDP, que a su vez funciona con IP’s, pero que nunca espera respuesta. Todo ello conectado al Sistema Operativo.
El Servidor de Correo utilizando el Id del usuario, le envía el aviso a través de las Apps al Servidor de Notificaciones y para ello utiliza un protocolo interno de notificaciones por IP a través de HTTP, lo que hace que reciba una notificación y eso a su vez es lo que permite que aparezca la notificación en el teléfono.
Al igual que en un computador, en el teléfono móvil hay toda una batería de hardware, pero en lugar de CPU existe el SoC (System on a Chip) que concentra la CPU, la memoria RAM, el disco duro, etc.

Escribe tu comentario
+ 2
1
5917Puntos
4 años

Muchas gracias por tu aporte la verdad si es bastante información, pero leyéndolo de la manera en que lo expones realmente me queda mucho más claro, gracias por tomarte el tiempo de escribirlo.