La inteligencia de software es la comprensión del funcionamiento interno y la condición estructural de los activos de software producida por software diseñado para analizar la estructura de la base de datos , el marco de software y el código fuente para comprender y controlar mejor los sistemas de software complejos en entornos de tecnología de la información . [1] [2] De manera similar a la inteligencia empresarial (BI), la inteligencia de software se produce mediante un conjunto de herramientas y técnicas de software para la minería de datos y la estructura interna del software. Los resultados se producen automáticamente y alimentan una base de conocimiento que contiene documentación técnica y planos del funcionamiento interno de las aplicaciones, [3] y se ponen a disposición de todos para que los interesados en el negocio y el software los utilicen para tomar decisiones informadas, [4] medir la eficiencia de las organizaciones de desarrollo de software, comunicar sobre la salud del software y prevenir catástrofes de software. [5]
Historia
La inteligencia de software ha sido utilizada por Kirk Paul Lafler, ingeniero, empresario y consultor estadounidense, fundador de Software Intelligence Corporation en 1979. En ese momento, estaba relacionada principalmente con las actividades de SAS , en la que ha sido experto desde 1979. [6]
A principios de la década de 1980, Victor R. Basili participó en diferentes artículos que detallaban una metodología para recopilar datos válidos de ingeniería de software relacionados con la ingeniería de software, la evaluación del desarrollo de software y las variaciones. [7] [8]
En 2004, diferentes proveedores de software en análisis de software comenzaron a utilizar los términos como parte de su estrategia de marketing y denominación de productos.
En 2010, Ahmed E. Hassan y Tao Xie definieron la inteligencia de software como una " práctica que ofrece a los profesionales del software información actualizada y pertinente para respaldar sus procesos diarios de toma de decisiones y la inteligencia de software debería respaldar los procesos de toma de decisiones durante toda la vida útil de un sistema de software ". Continúan definiendo la inteligencia de software como un " fuerte impacto en la práctica del software moderno " para las próximas décadas. [9]
Capacidades
Debido a la complejidad y la amplia gama de componentes y temas implicados en el software, la inteligencia del software se deriva de diferentes aspectos del software:
- La composición de software es la construcción de componentes de aplicaciones de software. [10] Los componentes son el resultado de la codificación del software, así como de la integración del código fuente de componentes externos: código abierto, componentes de terceros o marcos. Otros componentes se pueden integrar mediante llamadas a bibliotecas o servicios de la interfaz de programación de aplicaciones .
- La arquitectura de software se refiere a la estructura y organización de los elementos de un sistema, las relaciones y propiedades entre ellos.
- Las fallas de software designan problemas que pueden causar problemas de seguridad, estabilidad, resiliencia y resultados inesperados. No existe una definición estándar de fallas de software, pero la más aceptada es la de The MITRE Corporation, donde las fallas comunes se catalogan como Common Weakness Enumeration . [11]
- Las calificaciones de software evalúan los atributos del software. Históricamente, la clasificación y la terminología de los atributos se han derivado del modelo de calidad ISO 9126-3 y del posterior ISO 25000:2005 [12] .
- La economía del software se refiere a la evaluación de recursos del software en el pasado, presente o futuro para tomar decisiones y gobernar. [13]
Componentes
Las capacidades de las plataformas de inteligencia de software incluyen un número cada vez mayor de componentes:
- Analizador de código que sirve como base de información para otros componentes de inteligencia de software que identifican objetos creados por el lenguaje de programación, objetos externos de código abierto , objetos de terceros, marcos , API o servicios.
- Visualización gráfica y diseño de la estructura interna del producto de software o aplicación considerado [14] incluyendo dependencias, desde la adquisición de datos (captura de datos automatizada y en tiempo real, entradas del usuario final) hasta el almacenamiento de datos, las diferentes capas [15] dentro del software y el acoplamiento entre todos los elementos.
- Capacidades de navegación dentro de los componentes y funciones de análisis de impacto
- Lista de fallas, violaciones arquitectónicas y de codificación, contra las mejores prácticas estandarizadas, [16] bloqueador de nube que impide la migración a un entorno de nube, [17] y llamadas de datos no autorizadas que comprometen la seguridad e integridad del software [18]
- Calificaciones o puntuaciones de la calidad estructural y del software alineadas con estándares de la industria como OMG , CISQ o SEI que evalúan la confiabilidad, seguridad, eficiencia, mantenibilidad y escalabilidad a la nube u otros sistemas.
- Métricas que cuantifican y estiman la economía del software, incluidos el esfuerzo laboral, el tamaño y la deuda técnica [19]
- Referencias de la industria y evaluación comparativa que permiten comparaciones entre los resultados del análisis y los estándares de la industria.
Aspecto del usuario
Para integrar con éxito el uso de sistemas de inteligencia de software en una empresa, es necesario tener en cuenta algunas consideraciones. En definitiva, el sistema de inteligencia de software debe ser aceptado y utilizado por los usuarios para que agregue valor a la organización. Si el sistema no agrega valor a la misión de los usuarios, simplemente no lo utilizan, como afirmó M. Storey en 2003. [20]
A nivel de código y representación del sistema, los sistemas de inteligencia de software deben proporcionar un nivel diferente de abstracciones: una vista abstracta para diseñar, explicar y documentar y una vista detallada para comprender y analizar el sistema de software. [21]
A nivel de gobernanza, la aceptación por parte del usuario de la inteligencia del software abarca diferentes áreas relacionadas con el funcionamiento interno del sistema, así como con los resultados del mismo. Abarca los siguientes requisitos:
- Integral: la falta de información puede llevar a una decisión equivocada o inapropiada, además de ser un factor que influye en la aceptación del sistema por parte del usuario. [22]
- Precisión: la precisión depende de cómo se recopilan los datos para garantizar una opinión y un juicio justos e indiscutibles. [23]
- Precisión: la precisión se suele juzgar comparando varias mediciones de la misma fuente o de fuentes diferentes. [24]
- Escalable: la falta de escalabilidad en la industria del software es un factor crítico que conduce al fracaso. [25]
- Creíble: los resultados deben ser confiables y creíbles.
- Desplegable y utilizable.
Aplicaciones
La inteligencia de software tiene muchas aplicaciones en todas las empresas relacionadas con el entorno de software, ya sea software para profesionales, para particulares o software integrado. Dependiendo de la asociación y el uso de los componentes, las aplicaciones estarán relacionadas con:
- Cambio y modernización: documentación uniforme y diseño de planos para todos los componentes internos, código externo integrado o llamada a componentes internos o externos del software [26]
- Resiliencia y seguridad: medición frente a estándares de la industria para diagnosticar fallas estructurales en un entorno de TI. [ cita requerida ] Validación de cumplimiento con respecto a seguridad, regulaciones específicas o cuestiones técnicas.
- Toma de decisiones y gobernanza: proporcionar análisis sobre el software en sí o las partes interesadas involucradas en el desarrollo del software, por ejemplo, medición de la productividad para informar a los líderes empresariales y de TI sobre el progreso hacia los objetivos comerciales. [27]
- Evaluación y evaluación comparativa para ayudar a los líderes empresariales y de TI a tomar decisiones informadas y basadas en hechos sobre el software. [28]
Mercado
La inteligencia de software es una disciplina de alto nivel que ha ido creciendo gradualmente y abarca las aplicaciones mencionadas anteriormente. Hay varios mercados que impulsan su necesidad:
- Análisis de la cartera de aplicaciones (APA) con el objetivo de mejorar el rendimiento empresarial. [29] [30]
- Evaluación de software para producir el KPI del software y mejorar la calidad y la productividad. [31]
- Medidas de seguridad y resiliencia del software y validación.
- Evolución del software o modernización del legado, para lo cual no se necesitan ni esquematizar los sistemas de software ni herramientas que mejoren y faciliten las modificaciones. [ cita requerida ]
Referencias
- ^ Dąbrowski R. (2012) Sobre almacenes de arquitectura e inteligencia de software. En: Kim T., Lee Y., Fang W. (eds) Tecnología de la información de la generación futura. FGIT 2012. Apuntes de clase en informática, vol. 7709. Springer, Berlín, Heidelberg
- ^ Hinchey, Mike; Jain, Amit; Kaushik, Manju; Misra, Sanjay (enero de 2023). "Editorial invitada: Inteligencia para sistemas e ingeniería de software". Innovaciones en sistemas e ingeniería de software . 19 (1). Springer: 1–4. doi :10.1007/s11334-023-00526-1. PMC 9886201 . PMID 36744022.
- ^ Bartoszuk, C., Dąbrowski, R., Stencel, K., y Timoszuk, G. "Sobre la comprensión y evaluación rápidas del software", en Actas de la 14.ª Conferencia internacional sobre sistemas y tecnologías informáticas, junio de 2013, págs. 161-168 doi :10.1145/2516775.2516806
- ^ Raymond PL Buse y Thomas Zimmermann. "Necesidades de información para el análisis del desarrollo de software". 2012 34th International Conference on Software Engineering (ICSE). IEEE, junio de 2012, págs. 987-996 doi :10.1109/ICSE.2012.6227122
- ^ Ahmed E. Hassan y Tao Xie. 2010. Inteligencia de software: el futuro de la minería de datos de ingeniería de software. En Actas del taller FSE/SDP sobre el futuro de la investigación en ingeniería de software (FoSER '10). ACM, Nueva York, NY, EE. UU., 161–166
- ^ "El señor Kirk Paul Lafler". 21 de diciembre de 2015.
- ^ Basili, Victor R. (1981). Recopilación, validación y análisis de datos. Métricas de software: análisis y evaluación (PDF) . MIT Press. pág. 143. ISBN 0-262-16083-8.
- ^ Basili, Victor R.; Weiss, David M. (noviembre de 1984). "Una metodología para recopilar datos válidos de ingeniería de software". IEEE Transactions on Software Engineering (6). IEEE Trans. Softw. Eng. 10, 6 (noviembre de 1984): 728–738. doi :10.1109/TSE.1984.5010301. hdl : 1903/7513 .
- ^ Ahmed E. Hassan y Tao Xie. 2010. Inteligencia de software: el futuro de la minería de datos de ingeniería de software. En Actas del taller FSE/SDP sobre el futuro de la investigación en ingeniería de software (FoSER '10). ACM, Nueva York, NY, EE. UU., 161–166. doi :10.1145/1882362.1882397
- ^ Nierstrasz, Oscar y Theo Dirk Meijler. "Orientaciones de investigación en la composición de software". ACM Computing Surveys 27.2 (1995): 262-264 doi :10.1145/210376.210389
- ^ Kanashiro, L., et al. "Predicción de fallas de software con modelos de baja complejidad basados en datos de análisis estático". Journal of Information Systems Engineering & Management 3.2 (2018): 17 doi :10.20897/jisem.201817
- ^ "ISO 25000:2005" (PDF) . Archivado (PDF) desde el original el 14 de abril de 2013 . Consultado el 18 de octubre de 2013 .
- ^ Boehm, Barry W. y Kevin J. Sullivan. "Economía del software: una hoja de ruta". Actas de la conferencia sobre el futuro de la ingeniería del software. 2000. doi :10.1145/336512.336584
- ^ Renato Novais, José Amancio Santos, Manoel Mendonça, Evaluación experimental de la combinación de múltiples estrategias de visualización para el análisis de la evolución del software, Journal of Systems and Software, Volumen 128, 2017, págs. 56–71, ISSN 0164-1212, doi :10.1016/j.jss.2017.03.006.
- ^
Rolia, Jerome A. y Kenneth C. Sevcik. "El método de capas". Transacciones IEEE sobre ingeniería de software 21.8, 1995, 689-700, doi :10.1109/32.403785
- ^ "Reglas de ingeniería de software sobre calidad del código". Object Management Group, Inc. 2023. Consultado el 15 de diciembre de 2023 .
- ^ Balalaie, Armin, Abbas Heydarnoori y Pooyan Jamshidi. "La arquitectura de microservicios permite DevOps: migración a una arquitectura nativa de la nube". Ieee Software 33.3, mayo-junio de 2016, 42-52, doi :10.1109/MS.2016.64
- ^
Q. Feng, R. Kazman, Y. Cai, R. Mo y L. Xiao, "Hacia un enfoque centrado en la arquitectura para el análisis de seguridad", 13.ª Conferencia de trabajo IEEE/IFIP sobre arquitectura de software (WICSA) de 2016, Venecia, 2016, págs. 221-230, doi :10.1109/WICSA.2016.41
- ^
R. Haas, R. Niedermayr y E. Juergens, "Teamscale: Abordar la deuda técnica y controlar la calidad de su software", Conferencia internacional IEEE/ACM sobre deuda técnica (TechDebt) de 2019, Montreal, QC, Canadá, 2019, págs. 55-56, doi :10.1109/TechDebt.2019.00016
- ^ Storey MA. (2003) Diseño de una herramienta de exploración de software utilizando un marco cognitivo. En: Zhang K. (eds) Visualización de software. La serie internacional Springer en ingeniería y ciencias de la computación, vol. 734. Springer, Boston, MA.
- ^ Seonah Lee, Sungwon Kang, ¿Qué información situacional ayudaría a los desarrolladores al usar un recomendador de código gráfico?, Journal of Systems and Software, Volumen 117, 2016, págs. 199-217, ISSN 0164-1212, doi :10.1016/j.jss.2016.02.050.
- ^ Linda G. Wallace, Steven D. Sheetz, La adopción de medidas de software: una perspectiva del modelo de aceptación de tecnología (TAM), Information & Management, Volumen 51, Número 2, 2014, págs. 249-259, ISSN 0378-7206, doi :10.1016/j.im.2013.12.003
- ^ Lippert, SK; Forman, H. (agosto de 2005). "Utilización de la tecnología de la información: examen de los factores cognitivos y experienciales del comportamiento posterior a la adopción". IEEE Transactions on Engineering Management. págs. 363–381 . Consultado el 8 de diciembre de 2023 .
- ^ Banker, RD; Kemerer, CF (diciembre de 1992). "Métricas de evaluación del desempeño para el desarrollo de sistemas de información: un modelo principal-agente". Investigación en sistemas de información . 3 (4): 379–400 . Consultado el 8 de diciembre de 2023 .
- ^ Crowne, M. (9 de julio de 2003). "Por qué fracasan las empresas emergentes de productos de software y qué hacer al respecto. Evolución del desarrollo de productos de software en empresas emergentes". IEEE International Engineering Management Conference. págs. 338–343. doi :10.1109/IEMC.2002.1038454 . Consultado el 8 de diciembre de 2023 .
- ^ Parnas, David Lorge, Documentación precisa: la clave para un mejor software, El futuro de la ingeniería de software, 2011, 125–148, doi :10.1007/978-3-642-15187-3_8
- ^ LaValle, S.; Lesser, E.; Shockley, R.; Hopkins, MS (21 de diciembre de 2010). "Big data, analytics and the path from insights to value" (Grandes datos, análisis y el camino desde los conocimientos hasta el valor). MIT Sloan Management Review . págs. 21–32 . Consultado el 8 de diciembre de 2023 .
- ^ Janez Prašnikar; Žiga Debeljak; Aleš Ahčan (3 de diciembre de 2010). "Benchmarking como herramienta de gestión estratégica". Gestión de Calidad Total y Excelencia Empresarial . 16 (2): 257–275. doi :10.1080/14783360500054400 . Consultado el 8 de diciembre de 2023 .
- ^ "Glosario de Gartner: Análisis de cartera de aplicaciones (APA)". Gartner, Inc. 2023. Consultado el 7 de diciembre de 2023 .
- ^ "Gartner Research - Effective Strategies to Deliver Sustainable Cost Optimization in Application Services" (Investigación de Gartner: estrategias eficaces para lograr una optimización de costes sostenible en los servicios de aplicaciones). Gartner, Inc. 4 de octubre de 2017. Consultado el 7 de diciembre de 2017 .
- ^ "Acerca de la especificación de puntos de función automatizados versión 1.0". Object Management Group. Diciembre de 2013. Consultado el 7 de diciembre de 2023 .