Teoría Entornos Desarrollo PDF
Document Details
Tags
Summary
This document includes theory on software development environments, focusing on Version Control Systems (VCS) like Git and using commands in the terminal. Topics include repositorios, different types, and common commands for using Git and the bash shell. It contains information on how to use commands and tools for software development.
Full Transcript
1. Repositorios y GIT Qué es un repositorio Un repositorio es un sistema o espacio de almacenamiento donde se guarda y gestiona código fuente, archivos o datos, generalmente en el contexto de desarrollo de software. Un repositorio se utiliza en sistemas de control de versiones (como Git) para llevar...
1. Repositorios y GIT Qué es un repositorio Un repositorio es un sistema o espacio de almacenamiento donde se guarda y gestiona código fuente, archivos o datos, generalmente en el contexto de desarrollo de software. Un repositorio se utiliza en sistemas de control de versiones (como Git) para llevar un registro de los cambios realizados a los archivos a lo largo del tiempo. a. Tipos de repositorios - Repositorios locales: Guardado en tu propia computadora. - Repositorios remotos: Almacenado en un servidor en línea (ej. GitHub, GitLab). - Repositorios de código fuente (o de software): Guarda el código de software de un proyecto. - Repositorios de datos: Almacena datos o conjuntos de datos para análisis. - Repositorios públicos: Accesible por cualquiera (open-source). - Repositorios privados: Solo accesible por personas autorizadas. - Repositorios de binarios: Almacena archivos ya procesados o ejecutables (no código fuente). - Repositorios de dependencias (o paquetes):Contiene librerías o paquetes para usar en otros proyectos (ej. npm, PyPI). b. Cómo inicializar un repositorio de GIT - init es un comando de Git que crea un nuevo repositorio en el directorio actual. Al ejecutarlo, Git genera una carpeta oculta llamada.git - config git config es un comando de Git que se usa para configurar opciones como tu nombre de usuario, correo electrónico y otros ajustes del repositorio. Cómo añadir elementos a un repositorio - add git add se usa para preparar archivos antes de hacer un commit, añadiéndolos al área de preparación. - commit git commit guarda los cambios en el repositorio con un mensaje que describe lo que se ha modificado. - push git push envía tus cambios locales al repositorio remoto, actualizándolo con tus últimos commits. - fetch git fetch actualiza tu repositorio local con los cambios del remoto, pero no afecta tu trabajo actual. - pull git pull descarga los cambios del repositorio remoto y los fusiona automáticamente con tu rama local. - remote add origin git remote add origin vincula tu repositorio local con un repositorio remoto, permitiendo que puedas compartir y sincronizar cambios entre ambos. c. Distintas etapas a la hora de trabajar con repositorios - clone : Es el comando para clonar (copiar) un repositorio remoto en tu máquina local. - checkout : Permite cambiar de una rama a otra o navegar entre diferentes commits. - merge : Es el comando para combinar cambios de una rama a otra. - local -> staging -> pusheado Local: Donde haces tus cambios. - Staging: Donde añades cambios que quieres confirmar. git add. - Push: Envías los cambios al repositorio remoto para que todos puedan verlos. Ejemplo: git push origin. d. Gestión de conflictos - Distintas estrategias : git status: Ver archivos en conflicto. - git mergetool: Ayuda a resolver conflictos usando una herramienta de comparación. - Trabajo con ramas : se fusiona en la rama principal (generalmente main o master) y se empuja a producción. - PAT y validación : Es una alternativa a la contraseña de GitHub para la autenticación, Para usar un PAT, debes generarlo en GitHub y usarlo como contraseña al hacer operaciones como git push o git pull. e. Git vs Github vs Github Desktop - Git: Es un sistema de control de versiones local que te permite gestionar tu código y su historial. - GitHub: Es una plataforma de basada en Git que facilita la colaboración en proyectos remotos - GitHub Desktop: Una aplicación de GitHub que simplifica el uso de Git en una interfaz gráfica. 2. Comandos bash que deberíamos conocer: a. Navegación del sistema de archivos: - pwd significa "print working directory" y muestra la ruta del directorio actual en el que te encuentras en la terminal. Te ayuda a verificar tu ubicación antes de ejecutar otros comandos. - ls muestra los nombres de los archivos y carpetas. ls -l: Muestra detalles de los archivos. ls -a: Muestra archivos ocultos. ls se usa para explorar el contenido de un directorio. - cd (change directory) se utiliza para cambiar de directorio en la terminal. - cd.. Regresar al directorio padre: Te lleva al directorio que contiene el directorio actual. - mkdir Se utiliza para crear un nuevo directorio en la terminal. - rmdir Permite borrar directorios que no contienen archivos o subdirectorios. b. Manipulación de archivos: - touch es útil para crear archivos nuevos o para refrescar la fecha de modificación de archivos existentes. - cp es esencial para duplicar archivos y directorios en el sistema de archivos. - mv se utiliza para mover o renombrar archivos y directorios en la terminal. - rm se utiliza para eliminar archivos y directorios en la terminal. - cat (concatenate) se utiliza para mostrar, concatenar y crear archivos de texto en la terminal. - nano es un editor de texto que se utiliza en la terminal para crear y editar archivos de texto de forma sencilla. - echo "texto" > archivo se utiliza en la terminal para crear un archivo y escribir en él el texto especificado. - echo "texto" >> archivo se utiliza en la terminal para añadir texto al final de un archivo existente. c. Permisos de archivos: - chmod (change mode) se utiliza en sistemas Unix y Linux para cambiar los permisos de acceso de archivos y directorios. - chown (change owner) se utiliza en sistemas Unix y Linux para cambiar el propietario y/o el grupo de un archivo o directorio. d. Comandos relacionados con procesos - ps aux es una herramienta esencial para gestionar y analizar procesos en un sistema Unix/Linux. - top es una herramienta esencial para monitorear y gestionar el rendimiento de un sistema en tiempo real. - kill PID se utiliza en sistemas Unix y Linux para enviar señales a procesos en ejecución, permitiendo finalizar o controlar esos procesos. e. Comandos de red: - ping dominio_o_ip se utiliza para comprobar la conectividad de red entre tu máquina y un dominio o dirección IP. Envía paquetes de datos a la dirección especificada y mide el tiempo que tardan en recibir respuesta. - ifconfig se utiliza en sistemas Unix y Linux para configurar y mostrar información sobre las interfaces de red del sistema. - curl http://sitio.com Puedes usar curl para descargar el contenido de un sitio web o para realizar solicitudes a APIs. f. Compresión y descompresión de archivos: - tar -czvf se utiliza en sistemas Unix y Linux para crear un archivo comprimido en formato.tar.gz. Este comando combina varias funciones: crea un archivo tar, lo comprime con gzip, y muestra detalles de lo que está haciendo. - tar -xzvf se utiliza en sistemas Unix y Linux para extraer archivos de un archivo comprimido en formato.tar.gz (tarball). - zip se utiliza en sistemas Unix y Linux para crear archivos comprimidos en formato.zip. - unzip se utiliza en sistemas Unix y Linux para extraer archivos de un archivo comprimido en formato.zip. g. Inspección de archivos y sistemas: - df -h se utiliza en sistemas Unix y Linux para mostrar información sobre el espacio en disco disponible y utilizado en los sistemas de archivos montados. - du -sh nombre_directorio se utiliza en sistemas Unix y Linux para mostrar el tamaño total de un directorio y su contenido de manera resumida. - history se utiliza en sistemas Unix y Linux para mostrar el historial de comandos que has ejecutado en la terminal. h. Administración de usuarios: - adduser nombre_usuario se utiliza en sistemas Unix y Linux para crear un nuevo usuario en el sistema. - passwd nombre_usuario se utiliza en sistemas Unix y Linux para cambiar la contraseña de un usuario específico. - whoami se utiliza en sistemas Unix y Linux para mostrar el nombre del usuario que está actualmente conectado en la terminal. i. Tuberías y redirección: - ls | grep nombre se utiliza en sistemas Unix y Linux para listar archivos y directorios en el directorio actual y filtrar la salida para mostrar solo aquellos que contienen el texto especificado. - cat archivo | sort se utiliza en sistemas Unix y Linux para mostrar el contenido de un archivo y luego ordenar ese contenido alfabéticamente. - cat archivo | wc -l se utiliza en sistemas Unix y Linux para contar el número de líneas en un archivo. 3. Desarrollo de software - Componentes Hardware : CPU (Unidad Central de Procesamiento): - RAM (Memoria de Acceso Aleatorio) - Almacenamiento - GPU (Unidad de Procesamiento Gráfico):Procesa gráficos y es esencial en aplicaciones de diseño y procesamiento visual intensivo. - Red (NIC, Wi-Fi): Permite el acceso a internet y redes locales a. Componentes software : -Sistema Operativo (SO) -Aplicaciones -APIs (Interfaces de Programación de Aplicaciones) -Bases de Datos -Servidores y Software de Red - Tipos : Software de Sistema: Incluye el sistema operativo y controladores que permiten que otros software se comuniquen con el hardware. - Software de Aplicación: Programas que realizan tareas específicas para los usuarios (por ejemplo, software de diseño o editores de texto). - Software de Desarrollo: Herramientas utilizadas para desarrollar y probar otros programas, como editores de texto y entornos de desarrollo integrado (IDEs). b. Lenguajes de programación Qué es y qué no es Un lenguaje de programación es un conjunto de reglas y sintaxis que permite a los programadores comunicarse con la computadora para crear software. No es un software en sí mismo; es una herramienta que permite desarrollar software. - Tipos : Lenguajes de bajo nivel: Como el ensamblador, muy cercanos al hardware y complejos de usar. - Lenguajes de alto nivel: Como Python, Java, y C++, son más fáciles de usar y están diseñados para una mayor productividad. - Características : Sintaxis: Conjunto de reglas que define cómo escribir instrucciones. Tipado: Dinámico (por ejemplo, Python) o estático (por ejemplo, Java). Paradigma: Orientado a objetos, funcional, procedimental, etc. Máquinas Virtuales : Una máquina virtual (VM) es una emulación de una computadora real, que permite ejecutar un sistema operativo y aplicaciones en un entorno virtualizado dentro de otra computadora. Ejemplos: VirtualBox, VMware. Entornos virtuales : A diferencia de las máquinas virtuales completas, los entornos virtuales son entornos específicos dentro de un sistema operativo que permiten aislar las dependencias de un proyecto. Ejemplo: En Python, los entornos virtuales permiten instalar y gestionar paquetes específicos para un proyecto sin afectar el resto del sistema. Son útiles para trabajar en proyectos con diferentes lenguajes, evitando conflictos entre dependencias. 4. Ciclo de vida de software a. Etapas del desarrollo Requisitos: Identificación y documentación de las necesidades del usuario. Análisis: Definición detallada de cómo el sistema debe cumplir con los requisitos. Diseño: Especificación de la arquitectura, componentes y estructura del sistema. Implementación (Desarrollo): Codificación y construcción del sistema. Pruebas: Verificación y validación de que el software funciona según lo esperado. Despliegue: Entrega del software al entorno de producción. Mantenimiento: Corrección de errores, mejoras y adaptación a nuevos requisitos. b. Metodologías de desarrollo Cascada : Descripción: Proceso secuencial donde cada etapa se completa antes de comenzar la siguiente. Ventajas: Estructura clara.,Documentación detallada. Desventajas:Difícil de adaptar a cambios.,Poco flexible. Ágil : Descripción: Desarrollo en iteraciones cortas y entregas continuas de valor. Ventajas:Adaptación al cambio., Mayor interacción con el cliente. Desventajas: Menos adecuado para proyectos grandes o con requisitos poco claros. Modelo V : Descripción: Variante del modelo en cascada que enfatiza la relación entre desarrollo y pruebas (forma de "V"). Ventajas:Fuerte enfoque en pruebas.,Alta calidad en entregables. Desventajas:Rigidez.,Alto costo de cambios. Incremental : Descripción: Se desarrolla el software en módulos funcionales que se entregan de forma progresiva. Ventajas:Reducción de riesgos.,Entregas parciales tempranas. Desventajas:Mayor complejidad en integración. RAD (Rapid Application Development) : Descripción: Enfocado en el desarrollo rápido mediante herramientas y prototipos. Ventajas: Menor tiempo de desarrollo. Feedback constante. Desventajas: Menos adecuado para sistemas complejos. Iterativo : Descripción: Desarrollo en ciclos repetitivos donde cada iteración mejora o amplía el sistema. Ventajas: Fácil corrección de errores. Alta adaptabilidad. Desventajas: Complejidad en la gestión. Espiral: Descripción: Combina desarrollo iterativo con la gestión de riesgos en cada ciclo. Ventajas:Identificación temprana de riesgos. Adecuado para proyectos complejos. Desventajas: Costo elevado. Requiere experiencia en gestión de riesgos. Prototipo : Descripción: Construcción rápida de un modelo funcional para validar requisitos. Ventajas: Reducción de malentendidos con el cliente. Mayor comprensión de los requisitos. Desventajas:Prototipo puede ser confundido con el producto final. Riesgo de mala planificación.