Please enable JavaScript.
Coggle requires JavaScript to display documents.
Desarrollo de Software - Coggle Diagram
Desarrollo de Software
Unidad I. Software e Ingeniería de Software
Evolución del software.
Programación manual: En los primeros días de la informática, los programas se codificaban manualmente utilizando lenguajes de bajo nivel como el lenguaje de máquina
Lenguajes de programación de alto nivel: Con el tiempo, se desarrollaron lenguajes de programación de alto nivel, como COBOL, FORTRAN y C, que permitían escribir programas de manera más legible y comprensible para los programadores
Desarrollo estructurado: A medida que los programas se volvieron más grandes y complejos, surgió la necesidad de técnicas de desarrollo más estructuradas.
Desarrollo orientado a objetos: A finales del siglo XX, el enfoque orientado a objetos ganó popularidad. Este enfoque se basa en la creación de objetos que encapsulan datos y funciones relacionadas
Metodologías ágiles: En respuesta a la necesidad de adaptarse rápidamente a los cambios en los requisitos y entregar software de forma iterativa, surgieron las metodologías ágiles
Computación en la nube y desarrollo móvil: La evolución del software también ha sido impulsada por avances en la infraestructura tecnológica. La adopción generalizada de la computación en la nube ha permitido el desarrollo de aplicaciones escalables y de fácil acceso
Características y cualidades del software
Funcionalidad: El software debe ser capaz de realizar las tareas y funciones para las que ha sido diseñado.
Confiabilidad: El software debe ser confiable y producir resultados precisos y consistentes en diferentes situaciones y condiciones de uso.
Mantenibilidad: El software debe ser fácil de mantener y actualizar. Debe permitir cambios, correcciones de errores y mejoras sin afectar negativamente su estructura o funcionalidad.
Usabilidad: El software debe ser fácil de usar y comprender por los usuarios. Debe tener una interfaz intuitiva y amigable que facilite la interacción y la realización de tareas.
Eficiencia: El software debe utilizar eficientemente los recursos del sistema, como la memoria, el procesador y el almacenamiento
Portabilidad: El software debe poder ejecutarse en diferentes plataformas y entornos sin problemas
Seguridad: El software debe proteger los datos y la información confidencial de los usuarios
Escalabilidad: El software debe ser capaz de manejar un crecimiento en la carga de trabajo y el número de usuarios sin perder su rendimiento
Ingeniería de Software
Es una disciplina que se encarga de aplicar principios y prácticas de ingeniería al desarrollo, mantenimiento y gestión de software.
Involucra la aplicación sistemática de enfoques y métodos para garantizar la calidad, confiabilidad y eficiencia del software.
Conceptos generales
Requisitos: Son las necesidades y expectativas del usuario o cliente que deben ser satisfechas por el software.
Diseño: Consiste en la creación de la estructura, la arquitectura y los componentes del software para cumplir con los requisitos establecidos.
Desarrollo: Es el proceso de codificación e implementación del software de acuerdo con el diseño establecido
Pruebas: Comprende la verificación y validación del software para asegurar su calidad y cumplimiento de los requisitos
Mantenimiento: Implica la modificación y mejora continua del software una vez que está en funcionamiento
Proceso de ingeniería de software: El proceso de ingeniería de software es una serie de actividades y etapas que se llevan a cabo para desarrollar un software de manera sistemática y controlada.
Proyecto de ingeniería de software: Implica la asignación de recursos, el establecimiento de metas y objetivos, y la gestión de actividades para alcanzar los resultados deseados.
Producto de ingeniería de software: Es el software desarrollado y entregado al cliente o usuario final.
Comparación de modelos de procesos
Modelo en cascada
Características: sigue una secuencia lineal de fases, donde cada fase se completa antes de pasar a la siguiente. Las fases típicas incluyen requisitos, diseño, implementación, pruebas y mantenimiento.
Ventajas: Es simple y fácil de entender. Cada fase se completa antes de pasar a la siguiente, lo que facilita el seguimiento del progreso. Es adecuado para proyectos con requisitos estables y bien definidos.
Desventajas: No es adecuado para proyectos en los que los requisitos son propensos a cambios. El modelo no permite la retroalimentación temprana y puede llevar a problemas de adaptación si los cambios son necesarios más adelante
Modelo en espiral
Características: combina elementos del modelo en cascada y la gestión del riesgo. Se divide en ciclos en espiral que incluyen actividades de planificación, análisis de riesgos, desarrollo y evaluación. Cada ciclo se repite y se expande basado en la retroalimentación y los resultados obtenidos.
Ventajas: Permite una gestión proactiva de riesgos. Es flexible y puede adaptarse a cambios en los requisitos. Permite la retroalimentación temprana y continua.
Desventajas: Puede ser más complejo de gestionar que otros modelos. Requiere una evaluación continua de los riesgos y puede resultar costoso si no se controla adecuadamente.
Metodologías ágiles
Características: se centran en la entrega iterativa e incremental del software. Los equipos trabajan en sprints cortos, generalmente de 2 a 4 semanas, y se adaptan a medida que avanzan. La colaboración y la comunicación son fundamentales.
Ventajas: Flexibilidad y adaptabilidad a los cambios. Entrega de valor temprana y continua. Mayor participación y compromiso del cliente o usuario final.
Desventajas: Requiere una comunicación y colaboración sólidas. Puede resultar desafiante en proyectos con requisitos complejos o que requieren una planificación a largo plazo.
Unidad II. Introducción a la Planificación y Gestión de Proyectos de Software
Proyectos de desarrollo de software
Características
Objetivos específicos: Cada proyecto de desarrollo de software tiene metas y objetivos específicos que se deben alcanzar
Recursos limitados: Los proyectos de desarrollo de software tienen recursos limitados, como tiempo, presupuesto, personal y equipos
Interdisciplinariedad: Los proyectos de desarrollo de software implican la colaboración de profesionales de diferentes disciplinas, como analistas, diseñadores, programadores, probadores y gestores de proyectos, que trabajan en conjunto para lograr los objetivos del proyecto.
Principios básicos
Gestión de riesgos: La identificación y gestión de los riesgos del proyecto son fundamentales. Esto implica anticipar posibles problemas y desarrollar estrategias para mitigarlos o resolverlos
Enfoque iterativo e incremental: El desarrollo de software a menudo se realiza de manera iterativa e incremental, lo que significa que se realizan entregas parciales o versiones incrementales del software a medida que se avanza en el proyecto.
Participación del cliente: La participación activa y continua del cliente o usuario final es esencial para el éxito del proyecto
Calidad: La calidad del software es un principio básico. Se deben establecer estándares y procedimientos de calidad, así como realizar pruebas y aseguramiento de la calidad para garantizar que el software cumpla con los requisitos y sea confiable.
Funciones principales de los equipos de gestión
Planificar: El equipo de gestión planifica las actividades, recursos y cronogramas del proyecto. Establecen los objetivos, definen los entregables y desarrollan un plan de trabajo para alcanzarlos.
Organizar: La organización implica asignar roles y responsabilidades dentro del equipo, así como coordinar las actividades y recursos necesarios para ejecutar el proyecto de manera eficiente
Liderar: Los líderes del equipo de gestión brindan dirección, motivación y apoyo al equipo. Se aseguran de que todos los miembros estén alineados con los objetivos del proyecto y trabajen de manera colaborativa hacia su logro
Controlar: El control implica supervisar y evaluar el progreso del proyecto en comparación con los planes establecidos. Se realizan seguimientos, se identifican desviaciones y se toman medidas correctivas cuando sea necesario para garantizar que el proyecto avance de acuerdo con lo previsto.
Etapas del proyecto
Inicio o concepción: En esta etapa inicial, se define el propósito y los objetivos del proyecto. Se realiza una evaluación preliminar de la viabilidad del proyecto, se identifican los interesados y se establece el alcance general del software a desarrollar.
Planificación: En esta etapa, se elabora un plan detallado del proyecto que incluye la definición del alcance específico, los objetivos, los entregables y los cronogramas.
Análisis de requisitos: En esta etapa, se identifican y documentan los requisitos del software. Se lleva a cabo un análisis exhaustivo de las necesidades de los usuarios, las funcionalidades requeridas y las restricciones del sistema
Diseño: En esta etapa, se realiza el diseño detallado del software. Se definen la arquitectura del sistema, la estructura de datos, los componentes y las interfaces
Implementación: En esta etapa, se lleva a cabo la codificación del software de acuerdo con el diseño establecido. Se desarrollan y prueban los módulos y componentes, y se integran para formar el sistema completo
Pruebas y validación: En esta etapa, se llevan a cabo pruebas exhaustivas para verificar la funcionalidad, la confiabilidad y la calidad del software.
Implementación y despliegue: En esta etapa, el software se prepara y se lanza para su implementación en el entorno de producción. Se realiza una instalación y configuración adecuadas, y se lleva a cabo la migración de datos si es necesario.
Mantenimiento: Después de la implementación, el software entra en la etapa de mantenimiento. Se realizan actualizaciones, correcciones de errores y mejoras según sea necesario para garantizar su funcionamiento continuo y su adaptación a los cambios en los requisitos o en el entorno.
Documentación
Especificación de requisitos: Es un documento que describe de manera detallada los requisitos del software, es decir, las funcionalidades, características y restricciones que debe cumplir.
Documento de diseño: Describe la arquitectura y el diseño detallado del software. Incluye diagramas de flujo, diagramas de clases, diagramas de secuencia y otros artefactos que representan la estructura y la interacción del software.
Manual del usuario: Proporciona instrucciones detalladas sobre cómo instalar, configurar y utilizar el software
Manual técnico: Es una documentación dirigida a los desarrolladores y al equipo técnico. Describe la estructura interna del software, los algoritmos utilizados, las interfaces de programación (API) y otros detalles técnicos que son relevantes para el mantenimiento y la mejora del software
Documentación de pruebas: Registra los casos de prueba, los resultados de las pruebas y cualquier problema identificado durante el proceso de pruebas.
Documentación de mantenimiento: Registra los cambios realizados en el software durante el mantenimiento, incluyendo las actualizaciones, correcciones de errores y mejoras
Además de estos tipos de documentación, es importante tener en cuenta que la documentación debe ser clara, precisa y actualizada. Debe ser accesible para todas las partes involucradas, incluidos los desarrolladores, los usuarios finales y el equipo de mantenimiento.
Técnicas y herramientas actuales
Diagramas de Gantt: Los diagramas de Gantt son herramientas visuales que representan las tareas del proyecto, su duración y su secuencia en una línea de tiempo.
Métodos ágiles: Los métodos ágiles, como Scrum y Kanban, son enfoques iterativos e incrementales para la gestión de proyectos de software. Estos métodos se centran en la entrega de valor de manera continua y en la adaptabilidad a los cambios.
Herramientas de gestión de proyectos: Hay una variedad de herramientas de gestión de proyectos disponibles que ofrecen funcionalidades específicas para la planificación, el seguimiento y la colaboración en proyectos de software. Algunas de las herramientas populares incluyen Jira, Trello, Asana y Microsoft Project
Metodología de la ruta crítica (CPM): La metodología de la ruta crítica es una técnica de programación de proyectos que se basa en identificar las tareas críticas y las dependencias entre ellas
Técnicas de estimación: Para la planificación de proyectos de software, es importante contar con técnicas de estimación adecuadas. Algunas técnicas comunes incluyen la estimación por puntos de función, la estimación por descomposición y la estimación basada en la experiencia pasada
Unidad IV. Prueba/Depuración de Software
Pruebas de software
Son un componente crítico en el proceso de desarrollo de software. Se utilizan para evaluar la calidad, el rendimiento y la funcionalidad del software antes de su lanzamiento.
Tipos
Pruebas unitarias: Se centran en probar componentes individuales o unidades de código de forma aislada.
Pruebas de integración: Estas pruebas se realizan después de las pruebas unitarias y se centran en verificar la interacción y comunicación adecuada entre diferentes componentes del software
Pruebas de validación: Estas pruebas se realizan para verificar que el software cumple con los requisitos y expectativas del usuario final.
Pruebas de regresión: Se realizan para verificar que los cambios o actualizaciones en el software no hayan introducido nuevos errores o causado regresiones en la funcionalidad previamente probada.
Pruebas de rendimiento: Estas pruebas evalúan el rendimiento y la capacidad de respuesta del software en diferentes condiciones, como la carga de usuarios simultáneos, la manipulación de grandes volúmenes de datos y la gestión de situaciones límite.
Pruebas de seguridad: Estas pruebas se enfocan en identificar vulnerabilidades y debilidades en la seguridad del software. Se evalúan aspectos como la autenticación, la autorización, la protección de datos y la resistencia a ataques maliciosos.
Pruebas de usabilidad: Estas pruebas se centran en evaluar la experiencia del usuario y la facilidad de uso del software
Pruebas de aceptación: Estas pruebas se llevan a cabo en colaboración con los usuarios finales o los stakeholders para validar que el software cumpla con los criterios de aceptación acordados.
Pruebas de unidad
Son un tipo de prueba de software que se centran en verificar el correcto funcionamiento de componentes individuales o unidades de código.
Estas pruebas se realizan de forma aislada, evaluando cada unidad de código de manera independiente para asegurar que cumpla con los requisitos y funcione correctamente.
Aspectos importantes
Objetivo: El objetivo principal de las pruebas unitarias es garantizar que cada unidad de código funcione correctamente según lo esperado
Aislamiento: Durante las pruebas unitarias, la unidad de código bajo prueba se aísla de otras dependencias externas. Esto se logra utilizando técnicas como el uso de stubs (implementaciones simuladas de dependencias) o mocks (objetos simulados que imitan el comportamiento de las dependencias reales
Automatización: Las pruebas unitarias suelen ser automatizadas utilizando frameworks y herramientas de pruebas
Diseño basado en casos de prueba: Las pruebas unitarias se basan en casos de prueba específicos que cubren diferentes escenarios y condiciones.
Assertion y validación: Durante las pruebas unitarias, se utilizan afirmaciones (assertions) para validar que los resultados esperados coincidan con los resultados obtenidos
Cobertura de código: La cobertura de código es un aspecto importante en las pruebas unitarias
Integración con herramientas de desarrollo: Las pruebas unitarias suelen integrarse con herramientas de desarrollo como IDEs (entornos de desarrollo integrados) y sistemas de construcción
Depuración del software
Es el proceso de identificar, analizar y corregir los errores o defectos en el código fuente.
La depuración es una etapa crucial en el desarrollo de software, ya que ayuda a garantizar que el software funcione correctamente y cumpla con los requisitos establecidos.
Importancia
Identificación y corrección de errores: La depuración permite identificar y corregir errores y defectos en el código, mejorando la calidad y confiabilidad del software
Mejora del rendimiento: La depuración también puede ayudar a identificar y resolver problemas de rendimiento, como cuellos de botella o ineficiencias en el código.
Garantía de calidad: La depuración contribuye a garantizar que el software cumpla con los requisitos y expectativas establecidos, evitando comportamientos inesperados o errores en el funcionamiento
Buenas prácticas
Reproducir el problema: Intenta reproducir el problema o error de manera consistente para poder analizarlo y solucionarlo de manera efectiva
Utilizar registros o logs: La incorporación de registros o logs en el software puede ayudar a rastrear el flujo de ejecución, identificar problemas y capturar información útil para la depuración
Simplificar el código: Si el problema no se puede reproducir directamente, es recomendable simplificar el código o crear un caso de prueba reducido que muestre el error.
Utilizar técnicas de depuración: Utiliza herramientas de depuración como breakpoints, inspección de variables y seguimiento de la ejecución paso a paso para analizar el estado del software durante la ejecución y detectar problemas.
Realizar pruebas de regresión: Después de corregir un error, es importante realizar pruebas de regresión para asegurarse de que la corrección no haya introducido nuevos errores en el software
Herramientas
Entornos de desarrollo integrados (IDEs): Los IDEs, como Eclipse, Visual Studio y PyCharm, suelen ofrecer herramientas de depuración integradas que permiten establecer puntos de interrupción, examinar variables y controlar la ejecución del software.
Depuradores de línea de comandos: También existen depuradores de línea de comandos, como GDB (GNU Debugger) para C/C++ y PDB (Python Debugger) para Python, que permiten depurar programas sin un entorno gráfico completo.
Herramientas de trazado: Las herramientas de trazado, como strace en sistemas Unix y Process Monitor en Windows, proporcionan información sobre las llamadas al sistema y las interacciones del software con el sistema operativo
Plan de pruebas y documentación de las pruebas
Documentación de las pruebas
Casos de prueba: Los casos de prueba deben estar bien documentados y describir los pasos a seguir, los datos de entrada, los resultados esperados y cualquier condición o precondición necesaria.
Registro de resultados: Registrar los resultados de las pruebas, indicando si los casos de prueba se pasaron correctamente, fallaron o tuvieron algún problema.Defectos: Si se encuentra algún defecto durante las pruebas, estos deben ser registrados de manera clara y detallada.
Defectos: Si se encuentra algún defecto durante las pruebas, estos deben ser registrados de manera clara y detallada.
Informes de pruebas: Los informes de pruebas resumen los resultados y hallazgos de las pruebas.
Plan de pruebas
Cronograma: El plan de pruebas debe incluir un cronograma detallado que establezca los plazos para la ejecución de las pruebas y la entrega de los resultados
Estrategia de pruebas: Se debe describir la estrategia general de pruebas, incluyendo los tipos de pruebas a realizar (unitarias, de integración, funcionales, etc.), los casos de prueba a ejecutar y los recursos necesarios.
Objetivos y alcance: El plan de pruebas debe definir los objetivos y alcance de las pruebas. Esto implica establecer qué se probará, los límites de la prueba y los criterios de aceptación.
Responsabilidades y roles: Debe especificar claramente los roles y responsabilidades de los miembros del equipo de pruebas, así como su colaboración con otros equipos o stakeholders involucrados
Criterios de entrada y salida: Es importante definir los criterios de entrada para comenzar las pruebas y los criterios de salida para determinar cuándo se consideran las pruebas completas
Riesgos y mitigación: Identificar los riesgos asociados con las pruebas y establecer planes de mitigación para abordarlos
Unidad V. Criterios para la evaluación y selección de hardware y software
Conceptos asociados
Evaluación de hardware
Requisitos de rendimiento: Se deben identificar y definir los requisitos de rendimiento del hardware, como capacidad de procesamiento, memoria, almacenamiento y capacidad de red
Compatibilidad: Es importante evaluar la compatibilidad del hardware con los sistemas operativos y las aplicaciones que se utilizarán
Escalabilidad y capacidad de expansión: Se debe evaluar la capacidad del hardware para adaptarse a las necesidades futuras, considerando factores como la escalabilidad, la capacidad de expansión y la posibilidad de actualizaciones
Costo: El costo del hardware, incluyendo el costo de adquisición y el costo de mantenimiento a largo plazo, también es un factor importante a considerar en la evaluación
Evaluación de software
Requisitos técnicos: Se deben evaluar los requisitos técnicos del software, como los sistemas operativos compatibles, los requisitos de hardware y las dependencias de software.
Requisitos funcionales: Se deben identificar y definir los requisitos funcionales del software, es decir, las funcionalidades y características necesarias para cumplir con los objetivos del proyecto.
Facilidad de uso: La facilidad de uso del software es un aspecto importante a considerar, ya que afecta la experiencia del usuario y la adopción del software
Costo y licenciamiento: Se debe considerar el costo total de propiedad del software, incluyendo el costo de adquisición, las licencias, el mantenimiento y los costos de actualización.
Evaluación comparativa
Matriz de evaluación: Se puede utilizar una matriz de evaluación para comparar y clasificar diferentes opciones de hardware o software
Pruebas de concepto: Realizar pruebas de concepto o demostraciones del hardware o software puede ayudar a evaluar su funcionamiento real y su adecuación a las necesidades del proyecto
Evaluación de proveedores: Además de evaluar el hardware o software en sí, también es importante evaluar la reputación y la estabilidad del proveedor, su historial de soporte y satisfacción del cliente
La evaluación y selección de hardware y software requiere un enfoque sistemático y un análisis cuidadoso de las necesidades y requisitos del proyecto
Criterios
Criterios de evaluación
Cumplimiento de requisitos: Evaluar en qué medida el hardware o software cumple con los requisitos funcionales y técnicos establecidos para el proyecto
Rendimiento: Evaluar el rendimiento del hardware o software en términos de capacidad de procesamiento, velocidad de respuesta, eficiencia energética, escalabilidad, etc.
Facilidad de uso: Evaluar la facilidad de uso del hardware o software en función de su interfaz, flujo de trabajo, disponibilidad de documentación y soporte
Estabilidad y confiabilidad: Evaluar la estabilidad y confiabilidad del hardware o software en términos de tiempo de actividad, capacidad de recuperación de fallas y calidad del código
Costo: Evaluar el costo total de propiedad, incluyendo el costo de adquisición, mantenimiento, licencias y actualizaciones
Compatibilidad e integración: Evaluar la compatibilidad del hardware o software con otros sistemas, estándares y protocolos utilizados en la infraestructura existente
Seguridad: Evaluar la seguridad del hardware o software en términos de protección de datos, autenticación, autorización y resistencia a ataques maliciosos
Soporte y mantenimiento: Evaluar la disponibilidad y calidad del soporte técnico proporcionado por el proveedor, así como la disponibilidad de actualizaciones y parches de seguridad
Técnicas de evaluación
Análisis comparativo: Comparar y contrastar las características, funcionalidades y rendimiento de diferentes opciones utilizando una matriz de evaluación o un sistema de puntuación
Pruebas de concepto: Realizar pruebas prácticas utilizando el hardware o software en un entorno de prueba para evaluar su rendimiento y funcionalidad
Investigación y análisis: Realizar una investigación exhaustiva sobre las opciones disponibles, incluyendo la revisión de documentación, estudios de caso y revisión de comentarios y testimonios de otros usuarios
Consulta a expertos: Obtener opiniones y asesoramiento de expertos en la industria, consultores o profesionales con experiencia en el área específica de evaluación
Casos y ejemplos
Evaluación de proveedores de software CRM: Evaluar diferentes proveedores de software CRM en términos de funcionalidades, facilidad de uso, soporte, integración con otros sistemas y costo.
Evaluación de opciones de hardware para un centro de datos: Evaluar diferentes opciones de servidores, almacenamiento y equipos de red en función de su rendimiento, escalabilidad, costo y compatibilidad con los sistemas existentes.
Evaluación de frameworks de desarrollo web: Evaluar diferentes frameworks de desarrollo web en términos de características, productividad, comunidad de usuarios, soporte y rendimiento.
Evaluación de opciones de software de gestión de proyectos: Evaluar diferentes opciones de software de gestión de proyectos en términos de funcionalidades, colaboración, seguimiento de tareas, informes y costo