CICLO DE VIDA DEL SOFTWARE
SDLC

SDLC en Arquitectura de Software

Programación del Software

Desarrollo a partir de una Arquitectura

Ahora que entedemos que es una arquitectura Software por microservicios y que un microservicio funciona como un pequeño Software independiente dentro del Software principal.
Se puede concluir:
"El Software se divide en microservicios, cada uno a su vez es un Software independiente que responde a una funcionalidad concreta, por lo que el Software como un todo, se irá desarrollando, por funcionalidades".

Con este principio se puede entender que crear un Software primero parte de una Arquitectura que será el ¿Qué tipo de producto se va a desarrollar? y luego la organización de este proceso, es decir el ¿Cómo se va a desarrollar?.
Retomando el principio enunciado antes se pueden extraer dos aspectos importantes:
1 Para cumplir con una arquitectura de Software como un todo dividido en microservicios, el Software se va a desarrollar en etapas, a manera de ciclo de vida, infinito, puesto que, cada vez que se inicia una funcionalidad, se desarrolla y se despliega en "el Software principal", que es la versión que van a consumir los usuarios finales, o sea "lo que está en producción" y se va repetir el proceso en la creación de nuevos microservicios.
2 Cada funcionalidad se va a desarrollar de manera independiente, entendida como un microservicio, en un período de tiempo "Sprint, que una vez que cumpla con el criterio de Definción de Terminado (DoD), o sea un producto funcional que ha logrado cumplir con los requisitos de negocio, estas entregas se consideran productos de valor, puesto que son relativos al Software principal, que ya se podrían consumir por los usuarios finales.
En resumen: Una vez desarrollado un microservicio y desplegado en producción, se procede al siguiente y se repite el mismo proceso, cada vez que se integran cambios y se despliegan nuevos microservicios, se dice que se "itera"dentro del Ciclo de Vida de Desarrollo del Software (SDLC) y así se va iterando o sea se hacen ciclos, y se dice que es infinito porque a medida se desarrolla crece pero además se puede iterar para agregar nuevas funcionalidades si se requiere en el tiempo, por lo que el desarrollo del Software podría continuar.
Este proceso se aplica tanto a un Software nuevo como a un Software existente en Mantenimiento, de hecho más adelante se abordará las etapas dentro de SDLC.

sdlc-microservicios

El SDLC entendido como "Etapas y Prácticas"

El SDLC es como la hoja de ruta que sigue un proyecto de software desde su concepción hasta su entrega final .
La manifestación real del SDLC no es más que las etapas que se crean para conducir el desarrollo y dentro de estas se van a encontrar todas las buenas prácticas necesarias para crear, mantener y mejorar una aplicación, tanto a modo de tareas, procesos y flujos, como a modo de procedimientos y reglas.
El SDLC implica el desarrollo de los microservicios y las operaciones de integración de estos y despliegue hacia el Producto de Valor final, se puede pensar como un puente que conecta el desarrollo (DEV) con operaciones (Ops) a través de una cultura conocida como DevOps, buscando asignar responsabilidades y asegurar un control total sobre cada etapa en el proceso de desarrollo del microservicio y el Software en general. Como mencionaba antes van a existir varios pasos en esta hoja de ruta de SDLC concebidos como etapas, para asegurar la calidad en cada una, es importante entenderlas y saber que prácticas de QA se podrían aplicar según cada momento del ciclo de vida, y crear un trabajo sistemático y procedimental de QA.
sdlc-etapas-practicas

Etapas del ciclo de vida del Software

  • Planificación (Plan): Es la etapa de ideación y definición de los requisitos del Software
  • Codificación (Code/Dev): Se escribe el código fuente de los diferentes módulos de la funcionalidad. Se crea el programa relativo a cada parte de la funcionalidad (FrontEnd y BackEnd)
  • Construcción (Build/Integración): Se compila el código fuente, se construye el software y se ejecutan pruebas unitarias y las pruebas de integración
  • Pruebas (Test): Es importante aclarar que en esta instancia se refiere pruebas de UI y UAT, pero en realidad en todas las etapas de SDLC se realizan pruebas a diferentes niveles y se incluyen prácticas de QA, incluso las relativas a DevOps
  • Lanzamiento (Release): Se realiza la entrega del producto funcional para los usuarios
  • Despliegue (Deploy): Se unen los componentes desarrollados en un entorno de pruebas o en un entorno de producción.
  • Operación (Ops): Se integran las diferentes partes del Software a modo de versiones desde la que estaba en desarrollo, se va a integrar, y se va a desplegar, en diferentes entornos hasta la entrega final en el entorno de producción. Todas estas versiones van a pasar por niveles de control de calidad .
  • Monitoreo (Monitor): Se monitorean las versiones del Software, se monitorean los entornos de pruebas y de producción. Se incluye el mantenimiento de la infraestructura
sdlc-infinito

Metodologías para SDLC

Las etapas planteadas antes más que una serie de pasos, sería una cultura de desarrollo para las empresas de Software, casi todo el mundo sabe lo que se va a hecer,y se manejan dentro de un proyecto de Software, que opera bajo una metodología de gestión adaptada a cada equipo o empresa, y su naturaleza de trabajo, como las metodologías ágiles (Scrum, Kanban, etc.).
Estas metodologías van a
-Planificar el trabajo de forma sistemática una vez que definan la lista de trabajo total del Proyecto de Software o lista de trabajo acumulada (Backlog), esta va a contener las funcionalidades a desarrollar
-Determinar la organización del trabajo y el período de tiempo (Sprints), para el desarrollo y entrega de un Mínimo Producto Viable (MVP), una vez que se haya cumplido con la DoD
-Van a gestionar las tareas, roles y responsabilidades de cada miembro del equipo de desarrollo para cumplir las etapas de SDLC.
-Se van a desarrollar prácticas de calidad que incluyen diferentes niveles de prueba para el Control de Calidad (QC), como las pruebas unitarias, de integración, de UI y de UAT para asegurarse de que el Software funciona como se espera.
-Se adaptan a las peticiones del cliente, las dinámicas de cambio, las nuevas tecnologías, la interacción de los usuarios y se enfocan en la entrega de ese MVP y la reducción de gastos.

Prácticas de Desarrollo y Programación

Dentro de las prácticas de las metodologías de gestión de SDLC se van a encontrar los procedimientos desarrollar el programa del Software. Esto implica el desarrollo e integración de los componentes lógicos (programación) de Software utilizando los principios de diseño sólidos, enfocados en una funcionalidad concreta y en la optimización de los recursos para desarrollarlas. Esto se cumple a partir de la creación de sus módulos de desarrollo , que son la partición de las operaciones lógicas que debe realizar el sistema para cumplir la funcionalidad, en otras palabras dividir la lógica de la funcionalidad completa en operaciones lógicas específicas, que se van a ejecutar a través del funcionamiento de las características de la funcionalidad o sea las features, por ejemplo la funcionalidad de realizar pedidos en una tienda online se va a cumplir a traves de las siguientes features: la parte de realizar el pedido, la parte de pagar el pedido, la parte de recibir el pedido, la parte de cancelar el pedido, etc, y estas features van a tener una lógica específica para su programación, esto serían los módulos a desarrollar.
Para desarrollar los módulos se van a utilizar los procesos o componentes de desarrollo, que no es más que un conjunto de funciones relacionadas ó bloques de código lógico que además se pueden reutilizar , y se van a ejecutar en paralelo y se van a integrar en un entorno de desarrollo, los componentes se crean escribiendo el código (instrucciones) de programación de las operaciones que va a realizar el sistema, estas que como ya dije son funciones, se escriben de manera modular , es decir que se pueden reutilizar esto va a permitir no repetir código, recuerdo que cada línea de código es un espacio de almacenamiento de información en la memoria del computador, por lo tanto se puede reutilizar el código de las operaciones que se van a ejecutar en paralelo, de esta manera se optimiza el uso de recursos del equipo para el funcionamiento del Software, es decir se reduce la cantidad de memoria que se necesita para ejecutar el Software y favorece directamente la eficiencia y el performance de este; para comprender esto se recomienda leer la lección Sistemas Computacionales.
Entender como se crea la lógica de un componente de Software y como se integra en un entorno de desarrollo, son conocimientos de mucho valor para los que se dedican al QA, ya que permite entender la lógica que utilizan los desarrolladores para crear el código de una funcionalidad, entendiendo que al ser una lógica dividida en partes esta se puede testear individualmente o en conjunto teniendo en cuenta el resultado esperado de esta programación, de aquí que se puedan crear pruebas unitarias y de integración. Además, estos principios son aplicables al desarrollo de un Sistema de Automatización de Test Case, en próximas lecciones, como Testing Automatizado explicaré en detalle estos temas.

logica-de-programacion-sdlc

Ahora que ya expliqué como se crea la lógica de programación de un sistema de Software (módulos y componentes), específicamente de una funcionalidad, entonces voy a precisar lo que serían las pautas de buenas prácticas para la creación e integración de componentes de Software, o sea cómo deberían escribir el código y programar las instrucciones, que no es más que los principios de diseño solidos de desarrollo que antes mencionaba.
Principios de Diseño de Software:

  • Modularidad
    Un diseño debe ser "modular", lo que implica que "el sistema debe estar particionado lógicamente en elementos que realizan funciones y subfunciones específicas."
  • Abstracción
    El diseño debe generar "abstracciones de datos y abstracciones procedurales."
  • Independencia Funcional
    Los módulos deben ser "independientes funcionalmente". El diseño debe generar "módulos" (esto es, subrutinas o procedimientos), que muestren características funcionales independientes."
  • Interfaces Simplificadas
    Las interfaces deben "reducir la complejidad de conexiones entre módulos y con el ambiente externo."
  • Método Repetible
    El diseño debe construirse "usando un método repetible, guiado por la información obtenida durante la fase de requisitos de software."
  • Descomposición Orientada a Objetos
    Este enfoque divide el sistema en partes que representan "una clase u objeto del dominio del problema," viendo el mundo "como una colección de objetos que cooperan entre ellos para obtener la funcionalidad deseada." La notación incluye diagramas de clases, objetos, módulos y procesos.
principios-de-diseño-de-software

Prácticas comunes en el desarrollo de Software

Teniendo en cuenta estos principios de diseño y lo que he explicado anteriormente sobre los lenguajes de programación en la lección El lenguaje de la máquina, se puede decir que las arquitecturas de microservicios, se han ido creando sobre estructuras, modulares, con bloques de códigos reutilizables, para poder escribir códigos de manera eficiente, simplificando la tarea de desarrollo.
Seguramente haz escuchado antes de algo como el uso de los famosos "Frameworks" o tipos de estructuras como en las bases de Datos que ayudan a modularizar el trabajo de desarrollo, para entender esto aclaro lo siguiente:

  • Funciones:
    Son los bloques de códigos que realizan tareas específicas, reciben una entrada y producirán una salida, se pueden crear y reutilizar en el desarrollo del Software, como por ejemplo crear una función para ingresar datos en un formulario, se va a reutilizar para cada campo del formulario, recordemos que el programa va a ejecutar línea por línea, por lo que no creas una función para que todos los datos entren de una vez, sino que se cree una función y se "llama" para cada entrada de dato que se requiera
  • Librerías:
    Son un conjunto de funciones que resuelven necesidades específicas y problemas específicos, relativos a una única funcionalidad, que se reutilizan en el desarrollo de varios proyectos de Software. Son funciones empaquetadas para facilitar el trabajo de los desarrolladores en un mismo lenguaje, digamos que un desarrollador crea un conjunto de funciones para realizar una tarea específica, como realizar animacioones en un juego, estas se encapsulan en una biblioteca de funciones, así cada vez que crea un nuevo juego, llama a la librería y puede usar las funciones de esta.
    Cabe aclarar que librería fue un término que se popularizó con el desarrollo pero que proviene de una mala traducción del término en inglés "library", que significa "biblioteca", aunque su forma de llamarlo en el uso hispano se acentuó como librería.
  • Librerías de Terceros:
    Hoy el trabajo de los desarrolladores de Software se mueve mucho por la cooperación y la ampliación de comunidades, ya sea por afición hacia un lenguaje de programación, o por la ampliación de algún tipo de tecnología, como la Web, los CMS, las bases de datos, etc, así se han creado grandes librerías basadas en soluciones y problemas comunes y se comparten. Estas librerías se llaman de terceros, ya que son desarrolladas por otras personas. El desarrollador va a determinar que funciones quiere usar y cuando, controlando el flujo total de su trabajo
    Algunas ejemplos son:
    -jQuery con JavaScript (una de las primeras librerías que se popularizó para el desarrollo de aplicaciones web) con funciones específicas para manejar el DOM.
    - React.js con JavaScript, es una librería para crear componentes de interfaz de usuario.
  • Frameworks:
    Muchas veces se dice que es un marco de trabajo, porque tiene una estructura, con reglas y guías integrdas, pero a ¿qué se refiere esto en realidad?, se trata de una colección de librerías que ayudan a desarrollar aplicaciones de Software. Estas librerías se relacionan para crear las condiciones necesarias para el desarrollo de un proyecto de Sopftware completo, corriendo en un solo lenguaje de programación, no te vas a encontrar un framework multilenguaje, aunque hay frameworks que si continen librerías que permiten trabajar FrontEnd, BackEnd, etc. Se dice que hay reglas puesto que el exito de estos marcos es que logran integrar varias librerías para que funcionen bien juntas, aún si su conjunto de funciones responde a una sola funcionalidad.
    En cambio puedes mezclar librerías por separado y no ser compatibles, sin embargo los frameworks, ya aseguran que las librerías se integren bien para que el proyecto funcione. Algunos Devs dicen que ya existe mucho códogo creado, que se puede reutilizar independiente del sistema nuevo que se esté creando, entonces, cómo suelen decir muchos de ellos "¿para qué reinventar la rueda".
    Además, los frameworks incluyen una estructura de archivos organizados en capas, a esto se le llama Inversión de Control IoC , para contruir aplicaciones con un flujo específico, de aquí lo de "marcos", que responden a una funcionalidad especifica para lógicas de negocio, esto significa que en vez de crear un código y llamar a una librería para traerte las funciones, solo se necesita llenar los archivos del framework y el mismo llama a las librerías que necesita, así un desarrollador puede ir creando su aplicacion usando las librerías de terceros y llenando los archivos vacíos con la lógica específica, pero el framework es quien controla el flujo de trabajo.
    Existen varios frameworks por ejemplo:
Frameworks para FrontEnd
-Combinan librerías de lenguajes de programación del lado del cliente que ayudan a configurar la lógica y la interfaz de usuario de las aplicaciones web
-Angular basado en TypeScript para aplicaciones web o mobile dinámicas y progresivas, o de nivel empresarial
-Vue.js basado en JavaScript, para aplicaciones web o mibile dinámicas, sencillas, utilizaVirtual DOM, incluye transiciones y animaciones CSS integradas
-Ember.js basado en JavaScript, para aplicaciones web o mobile escalables de una sola página, se enfoca en enfoca en el desarrollo basado en HTML y CSS como núcleo
Frameworks para BackEnd
-Combinan librerías de lenguajes de programación del lado del servidor que ayudan a configurar la lógica y la infraestructura de las aplicaciones web, incluyendo autorización, seguridad, enrutamiento (la ruta de enlace que conectan las peticiones entre el cliente y el servidor ) y la interacción con bases de datos
-Django basado en Python ideal para aplicaciones web completas y robustas, sitios web complejos, contiene un potente Mapeo de Objeto-Relacional (ORM) es es una herramienta que permite a los desarrolladores interactuar con bases de datos SQL de una manera más sencilla y orientada a objetos, sin necesidad de escribir consultas SQL directamente además se puede crear aplicaciones a gran escala y contine funciones de características de seguridad para proteger contra amenazas comunes.
-FastApi basado en Python enfocado en la construcción de APIs de back end, es de elevado rendimiento, proporciona validación y serialización de datos, y genera documentación automática de la API.
-Flask basado en Python proporcionando los componentes esenciales para construir aplicaciones web sencillas, con menos restricciones en la estructura, soporte para enrutamiento. Permite gestionar peticiones HTTP.
-Express.js basado en JavaScript, es un framework web de bajo nivel para Node.js, flexible, ideal para aplicaciones de una sola página y para APIs Restful.
-Next.js basado en TypeScript, es un framework inspirado en la estructura de Angular (framework FrontEnd), ideal para aplicaciones escalables y complejas, es modular y muy escalable
-.Net basado en C# ideal para aplicaciones empresariales, robustas, permite la creación de APIs web de alto rendimiento
-Sprint Boot basado en Java, ideal para la construcción de microservicios y aplicaciones de nivel empresarial, incluye autoconfiguración
-Ruby on Rails basado en Ruby, ideal para aplicaciones web, fomenta el desarrollo rapido con minimo codigo repetido, utiliza un ORM de alta robustez, utiliza en el patrón Modelo-Vista-Controlador (MVC) , es un Patrón de Diseño del Software usado para crear el programa dividiendo su estructura en tres partes independientes pero a la vez interconectadas, así pueden ver el componente o modelo que es la lógica del negocio y los datos, la vista es la representación de esos datos para el usuario en la interfaz es la capa de presentación, y el controlador es la capa de control que sirve de intermediario entre la vista y el modelo,maneja las interacciones del usuario o sea las peticiones hacia el modelo, procesa los datos y luego actualiza la vista con los resultados, este patrón de diseño es muy eficiente en el trabajo de los desarrolladores, permite organizar el código de manera más clara.
-Laravel basado en PHP, uno de los frameworks , más modernos de este lenguaje,ideal para aplicaciones que requieran sistemas de autenticación, limitación de velocidad, procesamiento de pagos. Proporciona alta seguridad contra amenazas comunes como inyección SQL y falsificación de solicitudes. Este framework a su vez se basa en Symfony otro framework de PHP,también usa el patrón de arquitectura MVC.
funciones-librerias-frameworks

Nota 1:Sobre los frameworks y su utilidad para el QA, se ampliará en lecciones posteriores como Testing Automatizado

Nota 2: Para el desarrollo de Software con arquitectura por microservicios, se requieren varios elementos y lenguajes clave que trabajan en conjunto para crear aplicaciones funcionales y eficientes.

13 Conceptos de Valor para el SDLC en el desarrollo Web

En este tema listaré varios elementos importantes en la construcción de un Software Web, ya que el conocimiento de sus fundamentos resulta útil para entender el desarrollo de cualquier Software, incluso si no utilizara la WEB o una arquitectura por microservicios, estos elementos son:

1- Tipos de Diseño de interfaz: UI/ UX/ Gráfico/Software
Estos roles pueden ejecutarse por separado ó una misma persona puede hacer tareas relativas a todos ellos
-El Diseño de la Interfaz de Usuario ó (UI) de un Software es muy peculiar, cuando pensamos en un diseño común imaginamos solo formas y estilos, en cambio en el diseño de UI de una Software, el diseño se enfoca en la función que debe cumplir el Software y luego en la forma.
Se trata de que la interfaz primero debe tener un diseño funcinal y luego estético, por esto hay varias perspectivas en el diseño de UI, en las grandes empresas se pueden hayar separadas en diferentes roles.
Este tipo de diseño, se enfoca en cómo serán las pantallas del Software, que sean amigables, atractivas, sencillas, que la información esté bien organizada, usa herramientas como: prototipos, wireframes o mockups , que no son más que esbozos de la interfaz, pueden ser sencillos o clicables.
Este trabajo lo realizan los diseñadores UX/UI/ Maquetadores, empleando herramientas de Software que permiten hacer estos diseños como: Figma, Adobe XD, Sketch, WebFlow,Balsamiq
-El Diseño de Experiencia de Usuario UX se enfoca en cómo serán las interacciones del usuario con el Sofware, para esto se investiga el producto,el mercado y el público objetivo.
Se parte de estudios sobre comportamientos de de consumo de los clientes, se busca acercar el producto al usuario y mejorar. Por ejemplo, a partir de revelaciones de empresas como Apple, se identificó la secuencia de los "3 clicks", esto significa que un usuario no debería hacer más de 3 clicks para llegar a la información que desea o completar una tarea, como: elegir un producto y efectuar el pago de este; en cambio, si para completar este flujo el usuario debiera hacer más ejecuciones, lo más probable es que abandone la tarea y no se produzca la conversión de "ver el producto-a pagar por el producto". En el diseño UX también se busca cubrir los criterios de usabilidad del producto.
-El Diseñador Gráfico, se enfoca en comunicar un mensaje a través de una pieza visual o imagen, se enfoca en los estilos y elementos gráficos, un póster por ejemplo, y que exista consistencia de tipografía y paletas de colores si ya existen
-El Diseñador de Software SD , se enfoca patrones de diseño de elementos de Software como las features (características de la funcionalidad), como botones, input,listas
2- Programación Frontend
-Lenguajes de programación: HTML (HyperText Markup Language), CSS (Cascading Style Sheets), JavaScript
-Librerías y frameworks: Angular, React, Vue.js, etc
-Librerías de CSS: Bootstrap, Materialize, Tailwind, etc
3-Protocolo HTTP
-Configuración y documentación de API (Lógica cliente/peticiones-servidor/respuestas)
-Establecimiento de permisos, accesos y autenticación, desde los endpoints(url) que accede el usuario
4-Programación Backend
-El código fuente que ejecute la lógica de negocio de la aplicación
-Lenguajes de programación: Java, Python, Ruby, etc
-Librerías y frameworks: Spring Boot, Django, Flask,Laravel, Next.js, Ruby on Rails, etc
5-Base de Datos (DB)
Definición del Tipo de Base de Datos:Se definen dos tipos de bases de datos: Relacionales y No Relacionales, adaptado a funciones específicas y necesidades de los proyectos.
Se debe determinar los tipos de datos que el sistema va a manejar, por ejemplo,si los datos son estructurados (como números, fechas, características, direcciones, tarjetas de banco) ó no estructurados (como textos, imágenes, películas). Es muy importante definir si para almacenar los datos se necesitan tablas con filas y columnas, si se necesita establecer relaciones entre los datos mediante índices o claves foráneas, o si no lo necesitan.
-Lenguaje de programación: SQL para bases de datos relacionales y NoSQL para bases de datos no relacionales, para esto se usan:
-DDL (Data Definition Language): Permite "definir el esquema de bases de datos, creando relaciones (tablas), campos e índices, o modificando las definiciones existentes.
-DML (Data Manipulation Language): Permite insertar, actualizar y eliminar datos en la base de datos.
-DQL (Data Query Language): Permite realizar consultas y obtener información de la base de datos.
-JSON(JavaScript Object Notation): Es un formato de intercambio de datos entre sistemas, usados para bases de datos no relacionales
-Sistemas de Gestión de Bases de Datos (DBMS): son sistemas informáticos que permiten administrar y gestionar bases de datos, que ya cuentan con un esquema definido según el tipo de base de datos que se necesite.
-Relacionales: MySQL, PostgreSQL, Oracle, SQL Server, etc.
-No Relacionales:MongoDB, CouchDB, Redis, InfiniteGraph (orientada a grafos) etc.
Sobre este tema se ampliará en la lección Testing en Bases de Datos
6-Sistemas de Control de Versiones (SCV) ó (VCS)
Herramienta de software: útil para los desarrolladores, que registra y gestiona los cambios realizados en el código fuente de un proyecto, y sus diferentes versiones. Facilita la colaboración en proyectos, permitiendo a los colaboradores del código deshacer cambios, comparar versiones y trabajar en diferentes ramas de desarrollo.
Definición del Tipo de Repositorio: Los SCV se pueden utilizar según las necesidades del proyecto, para seleccionar el más adecuado, se suelen clasificar de la siguiente manera:
Centralizados: Almacenan todas las versiones del código, y los usuarios deben conectarse a él para trabajar, como por ejemplo Subversion (SVN).
Distribuidos: Permiten que cada usuario (desarrollador) pueda hacer una copia completa del repositorio principal, lo que facilita el trabajo en equipo local (PC), sin obligación de conexión, ofrecen mayor flexibilidad, como por ejemplo Git o Mercurial.
Remotos: Se puede considerar un Repositorio, pero a la vez son herramientas que se integran con otros SVC, ya que proporcionan acceso remoto a un repositorio central, o distribuido, lo que permite que los desarrolladores tengan acceso a las versiones del código, independientemente de su ubicación geográfica, como GitHub, Bitbucket, GitLab
7-Entornos de Desarrollo Integrados ó IDEs:
Son programas que proporcionan un conjunto de herramientas específicas que facilitan la escritura, edición, depuración, compilación y ejecución de códigos, permitiendo trabajar en un mismo proyecto de manera eficiente y productiva. Sobre lo que es la compilación se explica en la lección El Lenguaje de la Máquina.
Tipos de IDEs:Además de los IDEs, también están los Programas de Editores de Códigos, que, en este caso son más sencillos que los primeros, porque no compilan el código, solo se enfocan en la escritura y edición y corrección de errores, aunque permiten integrar plugins, que son aplicaciones externas que se integran con el editor, para otorgarle funcionalidades adicionales.
Estas herramientas en general, permiten escribir y editar códigos de programación de los sistemas, además contienen interfaces amigables para facilitar el trabajo de los desarrolladores, digamos que son como el "papel" para escribir, pero además contienen funcionalidades avanzadas como autocompletados,corrección de sintáxis, depuración errores, integración de extensiones, integración de asistencia con IA y mucho más, todo para facilitar la visualización del proyecto en tiempo real.
Algunos ejemplos de IDEs son: Eclipse, NetBeans, IntelliJ IDEA, Visual Studio Code (VSC), Atom, etc. y de programas que solo son editores se puede mencionar Notepad++, Sublime Text, etc.
Los IDEs y editores en general, se usan en FrontEnd y en Backend, además también se utilizan para desarrollar el código de los sistemas de automatización de Pruebas de QA.
8-Entornos de Desarrollo de Software:
No es lo mismo que IDEs, es un concepto más general que incluye a este.
Definición: Es el espacio de almacenamiento aislado que se crea en el Sistema Operativo para la ejecución de las tareas de desarrollo de software, donde un IDE sería una de las herramientas que se utilizan en este espacio, como el desarrollo de aplicaciones, el desarrollo de servicios, la implementación de soluciones de seguridad, etc, precisamente de almacenamiento de las instrcciones de programación que el equipo va a utilizar para ejecutar. Es todo el ecosistema necesario para desarrollar el Software.
Los desarrolladores trabajan en una partición dentro del Sistema Operativo de sus computadoras, para ejecutar la aplicación, es como si configuraran mini-computadoras dentro del SO de sus PC en local, las que van a contener las herramientas y las bibliotecas necesarias para desarrollar el Software, así el sistema de desarrollo es un entorno virtual que utiliza los recursos específicos para su funcionamiento, qué luego van a desplegar en un entorno remoto.
Ejemplos: Un entorno de desarrollo para una aplicación web podría incluir un IDE como VS Code o IntelliJ, un servidor web como Apache o Nginx, una base de datos como MySQL o PostgreSQL, y un sistema de control de versiones como Git o Mercurial.
Virtualización: Es una tecnología que permite crear entornos virtuales con una configuración parecida a un entorno remoto, en un servidor. De manera que el entorno en local servirá de plataforma similar al entorno en remoto, los desarrolladores podrán crear una copia exacta del servidor que se va a disponer en producción, de este modo se puede asegurar, que lo que funciona en local, funcionará también en remoto. Esto favorece el trabajo de equipo, ya que todos los desarrolladores que trabajan conjunto, comparten una misma virtualización como plataforma de ejecución del proyecto que están desarrollando en local.
9-Tipos de Servidores Virtuales:
Programas que funcionan como Máquinas Virtuales: Son softwares, configurados para ofrecer servicios de desarrollo específicos, como servidores de bases de datos, servidores de correo, servidores de archivos, etc.
-Servidores para CI/CD: Servicios de integración continua, despliegue del código y entrega continua de los productos de Software, como: Jenkins, GitLab CI/CD, Azure DevOps, CircleCI, Travi, Bitbucket Pipelines, etc.
-Servidores Web: Servidores de aplicaciones web, como Apache HTTP Server, Nginx, IIS, etc
-Servidores de Aplicaciones: Tomcat, Jetty, Glassfish, etc
-Servidores de Base de Datos: MySQL, PostgreSQL, Oracle, etc
-Servidores de Correo: Exim, Postfix, Dovecot, etc
-Servidores de Archivos: FTP, SFTP, etc
10-Servicios Alojamiento en Servidores, en inglés "hosting"
Para lanzar una Software y que sea usado por miles de usuarios, se necesitan hardwares capaces de ofrecer el soporte físico para contener el soporte lógico del proyecto de Software con toda la programación de sus funcionalidades. Aquí entran los servicios de alojamiento en servidores, son servicios ofrecidos por empresas proveedoras "Host", que cuentan con grandes máquinas de computación, de elevadas capacidades de almacenamiento y procesamiento de datos y además ofrecen los servicios de servidores virtuales. Estos servicios permiten a los propietarios de Software, desarrollar sus Programas y ofrecerlos a los usuarios finales. Algunas de las empresas proveedoras hosting son: Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, Hostinger, Digital Ocean, Linode, Vercel, Netlify, entre otros.
11-DevOps (Integración Continua - CI y Despliegue Continuo - CD):
Anteriormente mencionaba que el SDLC es un ciclo infinito, o sea continuamente se va a crear código y desplegarlo y unirlo con el código general del proyecto, como el caso de las arquitecturas de microservicios, que en estas constantemente se van a desplegar las nuevas funcionalidades a medida avanza el proyecto.
Para lograr agilizar estos procesos y garantizar que cada pieza nueva, entiéndase "una funcionalidad", secree completa, se modifique, mejore o se corrijan errores y no se afecte la continuidad de SDLC, se crean las metodologías DevOps .
Estas se insertan en las metodologías ágiles de gestión de los proyectos, ya que especifican y organizan un conjunto de buenas prácticas y una lógica de proceso, para integrar el código nuevo, testearlo y unirlo con el código que ya existe y por último desplegarlo en el entorno de producción final de entrega del producto.
DevOps organiza la infraestructura de desarrollo (Dev) y operaciones (Ops), lo que proporciona un control total desde la codificación hasta la operación de integración y monitoreo
DevOps organiza los difrentes entornos desarrollo, pruebas, staging y producción
12-Aseguramiento de la calidad QA
Definición precisa de los objetivos de calidad: Requerimientos de Negocio y Técnicos
Crear las prácticas que aseguren la calidad en todas las etapas, desde procedimientos como los planes de pruebas, hasta las metodologías de pruebas basadas en desarrollo y DevOps
Estrategias de Testing con completa cobertura
Incluir pruebas manuales y automatizadas para optimizar el performance del testing
Cobertura en los diferentes niveles del Software, desde la creación del código fuente hasta el ejecutable, el despliegue de los nuevos cambios y la entrega del producto final
13-Servicios en la nube
Se puede decir que son uno de los escenarios en los que se puede construir un Software.
Son servicios de virtuales de infraestructura y desarrollo de Software en la nube, son ofrecidos por empresas proveedoras de diferentes tipos de servicios virtuales y almacenamiento en la nube.
Permiten crear Software y aplicaciones en la nube, ofreciendo un entorno de desarrollo y despliegue flexible y escalable, permitiendo a los desarrolladores crear, testear y desplegar sus aplicaciones sin preocuparse por configurar, la infraestructura de servidores y almacenamiento. Digamos que ya ofrecen servicios preconfigurados. Algunas de las empresas proveedoras como Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, etc.
Estos servicios permiten desarrollar Software especializados, con estructuras predefinidas, ahorrando tiempo y esfuerzo, cómo para negocios enfocados en crear aplicaciones para:
Gestión de Relaciones con los Clientes (CRM)como Salesforce (útil para los negocios B2B y B2C).
Gestión de Contenido (CMS) como Wordpress (útil para los negocios B2C y los creadores de contenidos).
Gestión de Proyectos (PMS)como Jira.
Gestión de Negocios (BPM) como Camunda
Gestión de E-commerce (Ecommerce) como Shopify y Magento (ideal para comercio electrónico).
Hay servicios de desarrollo en la nube para aplicaciones web y mobile., como Firebase, Heroku, Netlify, Vercel, entre otros.
13-conceptos-valor-construccion-software