stringtranslate.com

Desarrollo de software

El desarrollo de software es el proceso utilizado para crear software. Programar y mantener el código fuente es el paso central de este proceso, pero también incluye concebir el proyecto, evaluar su viabilidad, analizar los requisitos del negocio, diseñar el software , probarlo y lanzarlo . La ingeniería de software , además del desarrollo, también incluye la gestión de proyectos , la gestión de empleados y otras funciones generales. [1] El desarrollo de software puede ser secuencial, en el que cada paso se completa antes de que comience el siguiente, pero también se han ideado métodos de desarrollo iterativos en los que se pueden ejecutar varios pasos a la vez y se pueden revisar los pasos anteriores para mejorar la flexibilidad, la eficiencia y la programación. .

El desarrollo de software involucra a profesionales de diversos campos, no solo programadores de software sino también personas especializadas en pruebas, redacción de documentación, diseño gráfico , soporte al usuario, marketing y recaudación de fondos. En el desarrollo de software se utilizan habitualmente una serie de herramientas y modelos, como el entorno de desarrollo integrado (IDE), el control de versiones , la ingeniería de software asistida por computadora y la documentación de software .

Metodologías

Diagrama de flujo del modelo de creación de prototipos evolutivos, un modelo de desarrollo iterativo [2]

Cada una de las metodologías disponibles se adapta mejor a tipos específicos de proyectos, en función de diversas consideraciones técnicas, organizativas, de proyecto y de equipo. [3]

Otro enfoque en muchas metodologías de programación es la idea de intentar detectar problemas como vulnerabilidades y errores de seguridad lo antes posible ( pruebas de desplazamiento a la izquierda ) para reducir el costo de rastrearlos y solucionarlos. [13]

En 2009, se estimó que el 32 por ciento de los proyectos de software se entregaron a tiempo y dentro del presupuesto, y con toda la funcionalidad. Se entregó un 44 por ciento adicional, pero faltaba al menos una de estas características. El 24 por ciento restante fue cancelado antes de su lanzamiento. [14]

Pasos

El ciclo de vida del desarrollo de software se refiere al proceso sistemático de desarrollo de aplicaciones . [15]

Factibilidad

Las fuentes de ideas para productos de software son abundantes. Estas ideas pueden surgir de una investigación de mercado que incluya la demografía de nuevos clientes potenciales, clientes existentes, prospectos de ventas que rechazaron el producto, otro personal interno de desarrollo de software o un tercero creativo. Las ideas para productos de software generalmente son evaluadas primero por el personal de marketing para determinar su viabilidad económica, su adecuación a los canales de distribución existentes, los posibles efectos en las líneas de productos existentes, las características requeridas y su adecuación a los objetivos de marketing de la empresa. En la fase de evaluación de marketing, se evalúan los supuestos de costo y tiempo. [16] El análisis de viabilidad estima el retorno de la inversión del proyecto , su coste de desarrollo y su calendario. Sobre la base de este análisis, la empresa puede tomar la decisión comercial de invertir en un mayor desarrollo. [17] Después de decidir desarrollar el software, la empresa se concentra en entregar el producto al costo y tiempo estimados o menos, y con un alto estándar de calidad (es decir, sin errores) y la funcionalidad deseada. Sin embargo, la mayoría de los proyectos de software se retrasan y, a veces, se hacen concesiones en las características o la calidad para cumplir con un plazo. [18]

Análisis

El análisis de software comienza con un análisis de requisitos para capturar las necesidades comerciales del software. [19] Los desafíos para la identificación de necesidades son que los usuarios actuales o potenciales pueden tener necesidades diferentes e incompatibles, pueden no comprender sus propias necesidades y cambiar sus necesidades durante el proceso de desarrollo de software. [20] En última instancia, el resultado del análisis es una especificación detallada del producto a partir de la cual los desarrolladores pueden trabajar. Los analistas de software a menudo descomponen el proyecto en objetos más pequeños, componentes que pueden reutilizarse para aumentar la rentabilidad, la eficiencia y la confiabilidad. [19] Descomponer el proyecto puede permitir una implementación multiproceso que se ejecute significativamente más rápido en computadoras multiprocesador . [21]

Durante las fases de análisis y diseño del desarrollo de software, el análisis estructurado a menudo se utiliza para dividir los requisitos del cliente en partes que los programadores de software puedan implementar. [22] La lógica subyacente del programa puede representarse en diagramas de flujo de datos , diccionarios de datos , pseudocódigo , diagramas de transición de estados y/o diagramas de relaciones entre entidades . [23] Si el proyecto incorpora una pieza de software heredado que no ha sido modelado, este software puede modelarse para ayudar a garantizar que se incorpore correctamente con el software más nuevo. [24]

Diseño

El diseño implica opciones sobre la implementación del software, como qué lenguajes de programación y software de base de datos utilizar, o cómo se organizarán el hardware y las comunicaciones de red. El diseño puede ser iterativo y se consulta a los usuarios sobre sus necesidades en un proceso de prueba y error . El diseño a menudo involucra a personas expertas en aspectos como el diseño de bases de datos , la arquitectura de pantalla y el rendimiento de servidores y otro hardware. [19] Los diseñadores a menudo intentan encontrar patrones en la funcionalidad del software para generar módulos distintos que puedan reutilizarse con programación orientada a objetos . Un ejemplo de esto es el modelo-vista-controlador , una interfaz entre una interfaz gráfica de usuario y el backend . [25]

Programación

La característica central del desarrollo de software es crear y comprender el software que implementa la funcionalidad deseada. [26] Existen varias estrategias para escribir el código. El software cohesivo tiene varios componentes que son independientes entre sí. [19] El acoplamiento es la interrelación de diferentes componentes de software, lo que se considera indeseable porque aumenta la dificultad de mantenimiento . [27] A menudo, los programadores de software no siguen las mejores prácticas de la industria, lo que da como resultado un código ineficiente, difícil de entender o que carece de documentación sobre su funcionalidad. [28] Es especialmente probable que estas normas fracasen en presencia de plazos. [29] Como resultado, probar, depurar y revisar el código se vuelve mucho más difícil. La refactorización de código , por ejemplo agregar más comentarios al código, es una solución para mejorar la comprensibilidad del código. [30]

Pruebas

La prueba es el proceso de garantizar que el código se ejecute correctamente y sin errores. Cada desarrollador de software realiza la depuración en su propio código para confirmar que el código hace lo que pretende. En particular, es crucial que el software se ejecute en todas las entradas, incluso si el resultado es incorrecto. [31] Las revisiones de código realizadas por otros desarrolladores se utilizan a menudo para examinar el nuevo código agregado al proyecto y, según algunas estimaciones, reducen drásticamente la cantidad de errores que persisten una vez completadas las pruebas. [32] Una vez que se ha enviado el código, el control de calidad (un departamento separado de no programadores para la mayoría de las grandes empresas) prueba la precisión de todo el producto de software. Las pruebas de aceptación derivadas de los requisitos del software original son una herramienta popular para esto. [31] Las pruebas de calidad también suelen incluir verificación de estrés y carga (si el software es resistente a niveles elevados de entrada o uso), pruebas de integración (para garantizar que el software se integra adecuadamente con otro software) y pruebas de compatibilidad (que miden la capacidad del software). rendimiento en diferentes sistemas operativos o navegadores). [31] Cuando las pruebas se escriben antes del código, esto se denomina desarrollo basado en pruebas . [33]

Producción

La producción es la fase en la que se implementa el software para el usuario final. [34] Durante la producción, el desarrollador puede crear recursos de soporte técnico para los usuarios [35] [34] o un proceso para corregir errores que no se detectaron antes. También podría haber un retorno a fases de desarrollo anteriores si las necesidades del usuario cambiaran o no se entendieran correctamente. [34]

Trabajadores

El desarrollo de software lo realizan desarrolladores de software, que normalmente trabajan en equipo. Las comunicaciones eficientes entre los miembros del equipo son esenciales para el éxito. Esto se logra más fácilmente si el equipo es pequeño, está acostumbrado a trabajar en conjunto y está ubicado cerca uno del otro. [36] Las comunicaciones también ayudan a identificar problemas en un estado anterior de desarrollo y evitar esfuerzos duplicados. Muchos proyectos de desarrollo evitan el riesgo de perder conocimientos esenciales que posee un solo empleado al garantizar que varios trabajadores estén familiarizados con cada componente. [37] El desarrollo de software involucra a profesionales de diversos campos, no solo programadores de software sino también personas especializadas en pruebas, redacción de documentación, diseño gráfico , soporte al usuario, marketing y recaudación de fondos. Aunque a los trabajadores del software propietario se les paga, la mayoría de los contribuyentes al software de código abierto son voluntarios. [38] Alternativamente, pueden ser pagados por empresas cuyo modelo de negocio no implica vender el software, sino algo más, como servicios y modificaciones del software de código abierto. [39]

Modelos y herramientas

Ingeniería de software asistida por computadora

La ingeniería de software asistida por computadora (CASE) son herramientas para la automatización parcial del desarrollo de software. [40] CASE permite a los diseñadores esbozar la lógica de un programa, ya sea uno por escribir o uno ya existente para ayudar a integrarlo con un nuevo código o realizar ingeniería inversa (por ejemplo, para cambiar el lenguaje de programación ). [41]

Documentación

La documentación se presenta en dos formatos que normalmente se mantienen separados: la destinada a los desarrolladores de software y la que se pone a disposición del usuario final para ayudarle a utilizar el software. [42] [43] La mayor parte de la documentación para desarrolladores se presenta en forma de comentarios de código para cada archivo, clase y método que cubren la interfaz de programación de aplicaciones (API), es decir, cómo otro puede acceder a la pieza de software, y a menudo los detalles de implementación. [44] Esta documentación es útil para que los nuevos desarrolladores comprendan el proyecto cuando comienzan a trabajar en él. [45] En el desarrollo ágil, la documentación a menudo se escribe al mismo tiempo que el código. [46] La documentación del usuario la escriben con mayor frecuencia redactores técnicos . [47]

Estimación del esfuerzo

Una estimación precisa es crucial en la etapa de viabilidad y para entregar el producto a tiempo y dentro del presupuesto. El proceso de generación de estimaciones suele ser delegado por el director del proyecto . [48] ​​Debido a que la estimación del esfuerzo está directamente relacionada con el tamaño de la aplicación completa, está fuertemente influenciada por la adición de características en los requisitos: cuantos más requisitos, mayor será el costo de desarrollo. También son esenciales a considerar en la estimación aspectos no relacionados con la funcionalidad, como la experiencia de los desarrolladores de software y la reutilización del código. [49] A partir de 2019 , la mayoría de las herramientas para estimar la cantidad de tiempo y recursos para el desarrollo de software fueron diseñadas para aplicaciones convencionales y no son aplicables a aplicaciones web o aplicaciones móviles . [50]

Entorno de desarrollo integrado

Anjuta , un IDE en C y C++ para el entorno GNOME

Un entorno de desarrollo integrado (IDE) admite el desarrollo de software con funciones mejoradas en comparación con un simple editor de texto . [51] Los IDE a menudo incluyen compilación automatizada , resaltado de sintaxis de errores, [52] asistencia de depuración, [53] integración con control de versiones y semiautomatización de pruebas. [51]

Control de versiones

El control de versiones es una forma popular de gestionar los cambios realizados en el software. Cada vez que se registra una nueva versión, el software guarda una copia de seguridad de todos los archivos modificados. Si varios programadores están trabajando en el software simultáneamente, gestiona la combinación de sus cambios de código. El software destaca los casos en los que existe un conflicto entre dos conjuntos de cambios y permite a los programadores solucionar el conflicto. [54]

Ver modelo

La matriz TEAF de opiniones y perspectivas

Un modelo de vista es un marco que proporciona los puntos de vista sobre el sistema y su entorno , para ser utilizado en el proceso de desarrollo de software . Es una representación gráfica de la semántica subyacente de una vista.

El propósito de los puntos de vista y las vistas es permitir a los ingenieros humanos comprender sistemas muy complejos y organizar los elementos del problema en torno a dominios de especialización . En la ingeniería de sistemas físicamente intensivos, los puntos de vista a menudo corresponden a capacidades y responsabilidades dentro de la organización de ingeniería. [55]

Funciones de fitness

Las funciones de aptitud son pruebas automatizadas y objetivas para garantizar que los nuevos desarrollos no se desvían de las limitaciones, controles y controles de cumplimiento establecidos. [56]

Propiedad intelectual

La propiedad intelectual puede ser un problema cuando los desarrolladores integran código o bibliotecas de código abierto en un producto propietario, porque la mayoría de las licencias de código abierto utilizadas para el software requieren que las modificaciones se publiquen bajo la misma licencia. Como alternativa, los desarrolladores pueden elegir una alternativa propietaria o escribir su propio módulo de software. [57]

Referencias

  1. ^ Dooley 2017, pag. 1.
  2. ^ Dooley 2017, pag. 12.
  3. ^ Metodologías de desarrollo de sistemas para negocios electrónicos basados ​​en la web: un marco de personalización Linda V. Knight (Universidad DePaul, EE. UU.), Theresa A. Steinbach (Universidad DePaul, EE. UU.) y Vince Kellen (Blue Wolf, EE. UU.)
  4. ^ Dooley 2017, págs. 8–9.
  5. ^ Dooley 2017, pag. 9.
  6. ^ ab Langer 2016, págs. 2–3, 5–6.
  7. ^ Tucker, Morelli y de Silva 2011, pág. 8.
  8. ^ Dooley 2017, pag. 11.
  9. ^ ab Dooley 2017, pág. 13.
  10. ^ Tucker, Morelli y de Silva 2011, págs. 41–42.
  11. ^ ab Vishnu 2019, págs. 1-2.
  12. ^ Laukkanen, Eero; Itkonen, Juha; Lassenius, Casper (2017). "Problemas, causas y soluciones al adoptar la entrega continua: una revisión sistemática de la literatura". Tecnología de la información y software . 82 : 55–79. doi : 10.1016/j.infsof.2016.10.001 .
  13. ^ Inviernos, Manshreck y Wright 2020, pag. 17.
  14. ^ Tucker, Morelli y de Silva 2011, pág. 6.
  15. ^ Saif 2019, págs. 46–47.
  16. ^ Morris 2001, pag. 1.10.
  17. ^ Langer 2016, pag. 7.
  18. ^ Dooley 2017, págs.3, 8.
  19. ^ abcd Langer 2016, pag. 8.
  20. ^ Langer 2016, págs. 2-3.
  21. ^ Dooley 2017, págs. 193-194.
  22. ^ Langer 2016, págs. 103-104.
  23. ^ Langer 2016, págs.117, 127, 131, 137, 141.
  24. ^ Langer 2016, pag. 106.
  25. ^ Dooley 2017, pag. 142.
  26. ^ Tucker, Morelli y de Silva 2011, pág. 31.
  27. ^ Langer 2016, págs. 8–9.
  28. ^ Tucker, Morelli y de Silva 2011, págs. 31–32.
  29. ^ Tucker, Morelli y de Silva 2011, págs. 34-35.
  30. ^ Tucker, Morelli y de Silva 2011, págs. 31–32, 35.
  31. ^ abc Langer 2016, pag. 9.
  32. ^ Dooley 2017, pag. 272.
  33. ^ Tucker, Morelli y de Silva 2011, pág. 9.
  34. ^ abc Langer 2016, pag. 10.
  35. ^ Tucker, Morelli y de Silva 2011, pág. 37.
  36. ^ Dooley 2017, pag. 2.
  37. ^ Winters, Manshreck y Wright 2020, págs. 30-31.
  38. ^ Tucker, Morelli y de Silva 2011, pág. 7.
  39. ^ Tucker, Morelli y de Silva 2011, págs. 14-15.
  40. ^ Langer 2016, pag. 22.
  41. ^ Langer 2016, págs. 108-110, 206.
  42. ^ Tucker, Morelli y de Silva 2011, pág. 243.
  43. ^ Inviernos, Manshreck y Wright 2020, pag. 192.
  44. ^ Winters, Manshreck y Wright 2020, págs. 193-195.
  45. ^ Tucker, Morelli y de Silva 2011, pág. 143.
  46. ^ Tucker, Morelli y de Silva 2011, pág. 144.
  47. ^ Inviernos, Manshreck y Wright 2020, pag. 204.
  48. ^ Saif 2019, págs. 50–51.
  49. ^ Saif 2019, págs. 52–53.
  50. ^ Saif 2019, pag. 45.
  51. ^ ab Tucker, Morelli y de Silva 2011, p. 68.
  52. ^ Dooley 2017, pag. 236.
  53. ^ Dooley 2017, pag. 239.
  54. ^ Dooley 2017, págs. 246-247.
  55. ^ Edward J. Barkmeyer (2003). Conceptos para la integración de sistemas de automatización Archivado el 25 de enero de 2017 en Wayback Machine NIST 2003.
  56. ^ Fundamentos de la arquitectura de software: un enfoque de ingeniería . Medios O'Reilly. 2020. ISBN 978-1492043454.
  57. ^ Langer 2016, págs. 44–45.

Otras lecturas

enlaces externos