{"id":8173,"date":"2023-04-26T04:54:04","date_gmt":"2023-04-26T04:54:04","guid":{"rendered":"https:\/\/www.cientificos.pe\/?p=8173"},"modified":"2023-04-26T05:14:09","modified_gmt":"2023-04-26T05:14:09","slug":"soluciones-basadas-en-ia-en-el-proceso-de-ingenieria-de-software","status":"publish","type":"post","link":"https:\/\/www.cientificos.pe\/?p=8173","title":{"rendered":"Soluciones basadas en IA en el proceso de ingenier\u00eda de software"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" class=\" wp-image-8184 aligncenter\" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning.jpg\" alt=\"\" width=\"509\" height=\"338\" srcset=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning.jpg 918w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning-300x199.jpg 300w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning-768x510.jpg 768w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning-696x462.jpg 696w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/inteligencia-artificial-machine-learning-632x420.jpg 632w\" sizes=\"(max-width: 509px) 100vw, 509px\" \/><\/p>\n<p style=\"text-align: justify;\">La <strong><em>Inteligencia Artificial (IA)<\/em><\/strong> es la rama de las ciencias de la computaci\u00f3n que se enfoca en brindar a las m\u00e1quinas o computadoras la capacidad de resolver problemas de manera tan inteligente como los humanos y, en algunos casos, mejor que los humanos, aprendiendo de una gran cantidad de datos. Si bien es cierto que a\u00fan estamos lejos de lograr una inteligencia artificial tan capaz como los seres humanos, en estos \u00faltimos a\u00f1os la IA se ha desarrollado de manera progresiva debido a los grandes avances en la capacidad de procesamiento de datos de los computadores, a las \u00faltimas investigaciones realizadas, el avance de la tecnolog\u00eda, y la gran cantidad de datos que actualmente se generan en la internet. Adem\u00e1s, se han empezado a utilizar diversas t\u00e9cnicas de IA, como el aprendizaje autom\u00e1tico y el procesamiento de lenguaje natural, en una amplia variedad de \u00e1reas, como salud, banca, educaci\u00f3n, agronom\u00eda, y un largo etc\u00e9tera. El \u00e1rea de desarrollo de software tampoco ha sido la excepci\u00f3n. La\u00a0<strong><em>Ingenier\u00eda de<\/em>\u00a0<em>Software<\/em><\/strong>\u00a0 es una de las ramas de las ciencias de la computaci\u00f3n que se refiere a la aplicaci\u00f3n disciplinada de principios y m\u00e9todos matem\u00e1ticos, cient\u00edficos y de ingenier\u00eda para la producci\u00f3n de software confiable y de calidad<sup>1<\/sup>. Este proceso est\u00e1 en constante optimizaci\u00f3n, aprovechando las \u00faltimas herramientas tecnol\u00f3gicas del mercado, como la IA, utilizada en diversas empresas emergentes que se han lanzado de acuerdo con un reporte de Deloitte<sup>2<\/sup>. Este informe menciona adem\u00e1s que estas empresas recaudaron 704 millones de d\u00f3lares durante el 2020, y se prev\u00e9 que el empleo de los desarrolladores de software crezca un 21 por ciento entre 2018 y 2028, mucho m\u00e1s r\u00e1pido que el promedio de todas las ocupaciones.<\/p>\n<p style=\"text-align: justify;\">El proceso de desarrollar software se compone de diversas fases, que pueden variar dependiendo de la metodolog\u00eda que se utilice. Las m\u00e1s comunes son: <em>An\u00e1lisis y Dise\u00f1o<\/em>, donde se realiza el levantamiento y an\u00e1lisis de los requerimientos del software, es decir, de c\u00f3mo va a funcionar, que debe poder hacer, etc. La <em>Codificaci\u00f3n<\/em>, que es donde los programadores desarrollan el software tomando como base las fases anteriores, y finalmente las <em>Pruebas<\/em>, que es donde se eval\u00faa que el software cumpla con lo solicitado. A continuaci\u00f3n, les mostramos algunas aplicaciones de la IA en cada una de estas fases.<\/p>\n<p><img loading=\"lazy\" class=\" wp-image-8176 aligncenter\" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/AI.jpg\" alt=\"\" width=\"371\" height=\"247\" \/><\/p>\n<ol style=\"text-align: justify;\">\n<li>An\u00e1lisis y Dise\u00f1o<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">En esta fase se realiza la identificaci\u00f3n y el an\u00e1lisis de requerimientos del software, adem\u00e1s de plantear un primer dise\u00f1o de la soluci\u00f3n. Las reuniones con los usuarios, la documentaci\u00f3n y priorizaci\u00f3n de los requerimientos son tareas que se realizan a lo largo de esta fase. En las reuniones se discuten diversas funcionalidades y los analistas deben registrar las necesidades de los usuarios, para luego convertirlos en requerimientos de software. Sin embargo, a veces es dif\u00edcil documentar e identificar todo lo tratado en la reuni\u00f3n, pero para estos casos, el proceso de transcripci\u00f3n de audio a texto (Figura 1), uno de los campos del procesamiento de lenguaje natural, puede ser \u00fatil para documentar todos los puntos tratados y obtener informaci\u00f3n m\u00e1s precisa<sup>7<\/sup>.<\/p>\n<figure id=\"attachment_8174\" aria-describedby=\"caption-attachment-8174\" style=\"width: 483px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"wp-image-8174 \" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura1.png\" alt=\"\" width=\"483\" height=\"251\" srcset=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura1.png 618w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura1-300x156.png 300w\" sizes=\"(max-width: 483px) 100vw, 483px\" \/><figcaption id=\"caption-attachment-8174\" class=\"wp-caption-text\">Figura 1<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">La priorizaci\u00f3n de requerimientos, una tarea donde a veces es dif\u00edcil llegar a un consenso entre los usuarios, o conseguir disponibilidad de estos para realizarla, es otro campo donde se aplican las \u00faltimas t\u00e9cnicas de IA<sup>8<\/sup>. T\u00e9cnicas como Prigov, basados en t\u00e9cnicas de <em>clustering<\/em> (aprendizaje autom\u00e1tico), son utilizados para lograr una priorizaci\u00f3n preliminar y as\u00ed ayudar a los usuarios a confirmar la priorizaci\u00f3n final. Finalmente, podemos obtener posibles requerimientos de diversas fuentes, una de ellas es el <em>feedback<\/em> de usuarios con respecto a una nueva aplicaci\u00f3n (<em>app<\/em>), como los comentarios (<em>reviews<\/em>) en las <em>app stores<\/em>. Debido a que los comentarios son demasiados para leerlos por una persona, se puede recurrir a algoritmos de aprendizaje autom\u00e1tico supervisado que ayudar\u00edan a leer e identificar, de manera autom\u00e1tica, informaci\u00f3n relevante de los comentarios que luego puedan servir como futuros requerimientos. En la Figura 2 se puede observar un ejemplo, donde se ha identificado en un comentario tres clasificaciones: el primer texto es un cumplido, el segundo es una nueva posible funcionalidad, y finalmente est\u00e1n reportando un error del aplicativo. Algoritmos como <em>Naive Bayes<\/em> y <em>Support Vector Machine<\/em> son utilizados para entrenar modelos en base a informaci\u00f3n hist\u00f3rica<sup>3<\/sup>.<\/p>\n<figure id=\"attachment_8175\" aria-describedby=\"caption-attachment-8175\" style=\"width: 858px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"wp-image-8175 \" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2.png\" alt=\"\" width=\"858\" height=\"196\" srcset=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2.png 1902w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-300x68.png 300w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-1024x234.png 1024w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-768x175.png 768w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-1536x350.png 1536w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-696x159.png 696w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-1068x244.png 1068w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/figura2-1841x420.png 1841w\" sizes=\"(max-width: 858px) 100vw, 858px\" \/><figcaption id=\"caption-attachment-8175\" class=\"wp-caption-text\">Figura 2<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Otro aspecto que puede mejorar es el prototipado. Los prototipos son ampliamente utilizados al momento de dise\u00f1ar soluciones para poder mostrar al usuario una versi\u00f3n simplificada de c\u00f3mo quedar\u00e1 un sitio web o una aplicaci\u00f3n. Para estos casos las \u00faltimas t\u00e9cnicas de IA que permiten convertir texto a im\u00e1genes o videos, como Stable Diffusion o DALL-E 2, ayudar\u00e1n a poder visualizar los prototipos con m\u00ednimo esfuerzo y un mayor realismo.<\/p>\n<ol style=\"text-align: justify;\" start=\"2\">\n<li>Codificaci\u00f3n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Una de las principales mejoras que se han aplicado en esta fase es el autocompletado de c\u00f3digo. El autocompletado da posibles opciones cuando un desarrollador est\u00e1 escribiendo c\u00f3digo, como por ejemplo nombres de variables, sugerencias de sentencias, etc. Un ejemplo se tiene en StackOverFlow<sup>4<\/sup>, y otras herramientas como Kite y Codota enfoc\u00e1ndose en Python y Java respectivamente. Tambi\u00e9n existe Bayou, que fue entrenado con miles de programas en Java para reconocer patrones utilizando redes neuronales (otra clasificaci\u00f3n dentro del aprendizaje autom\u00e1tico), para mejorar la velocidad y eficiencia en la codificaci\u00f3n. Adem\u00e1s del autocompletado, OpenIA est\u00e1 trabajando en la generaci\u00f3n de c\u00f3digo en base a una descripci\u00f3n de este. Es decir, bastar\u00eda solo con escribir \u2018Revisar si la palabra es pal\u00edndrome\u2019 y autom\u00e1ticamente se generar\u00eda el c\u00f3digo en un lenguaje de programaci\u00f3n (Python en este caso)<sup>5<\/sup>. El a\u00f1o pasado se present\u00f3 AlphaCode de la empresa DeepMind, el cual genera c\u00f3digo a un nivel de competici\u00f3n, es decir, resolviendo problemas espec\u00edficos que requieren creatividad, conocimientos y rapidez y que usualmente son planteados en competencias internacionales de programaci\u00f3n. AlphaCode resuelve problemas generando millones de programas utilizando modelos basados en Transformers (arquitectura basada en redes neuronales para la creaci\u00f3n de modelos), entrenados en grandes cantidades de programas y luego seleccionando los mejores resultados<sup>10<\/sup>. La predicci\u00f3n de errores en el c\u00f3digo tambi\u00e9n se ha incrementado con el uso de IA. Debido a la gran cantidad de c\u00f3digos que pueden encontrarse en diversos repositorios, como GitHub, es posible utilizar esta informaci\u00f3n para el entrenamiento de diversos algoritmos para la predicci\u00f3n de errores<sup>9<\/sup>.<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-8178 aligncenter\" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/how-artificial-intelligence-work.jpg\" alt=\"\" width=\"640\" height=\"308\" srcset=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/how-artificial-intelligence-work.jpg 640w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/how-artificial-intelligence-work-300x144.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<ol style=\"text-align: justify;\" start=\"3\">\n<li>Pruebas<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">La fase de Pruebas es una de las m\u00e1s beneficiadas con el uso de las t\u00e9cnicas de IA<sup>6<\/sup>. Se ha logrado automatizar diversas actividades de esta fase, siendo una de ellas la generaci\u00f3n de los casos de prueba y sus datos. Estos casos de prueba se generan en base a los requerimientos y se usan para validar si una aplicaci\u00f3n\/software\/programa es aceptable. El avance de las t\u00e9cnicas del procesamiento de lenguaje natural en el entendimiento y la generaci\u00f3n de texto est\u00e1n ayudando a poder generar casos de prueba autom\u00e1ticos de manera m\u00e1s eficiente<sup>11<\/sup>. La generaci\u00f3n de datos para las pruebas y la generaci\u00f3n de reportes tambi\u00e9n utilizan este tipo de t\u00e9cnicas para su automatizaci\u00f3n. La IA tambi\u00e9n influye en otras pruebas, como en las pruebas de usabilidad. Estas pruebas no son tan frecuentes pero su importancia est\u00e1 increment\u00e1ndose cada vez m\u00e1s, debido a que los usuarios se fijan cada vez m\u00e1s en la facilidad de uso y est\u00e9tica de una aplicaci\u00f3n y actualmente puede ser una ventaja competitiva en la industria. Identificar errores de usabilidad a trav\u00e9s de la identificaci\u00f3n de patrones analizando la interacci\u00f3n de los usuarios con el aplicativo, o el uso de visi\u00f3n artificial para comprobar el estado de cada pantalla por cada evento, son algunos ejemplos usados en este tipo de pruebas. Herramientas como Appvance y Testim.io son ejemplos de c\u00f3mo se usa la inteligencia artificial en la fase de pruebas.<\/p>\n<p style=\"text-align: justify;\">Hay muchas otras aplicaciones que se pueden encontrar en otras fases de la ingenier\u00eda de software, para mejorar la planificaci\u00f3n y las estimaciones en la gesti\u00f3n de proyectos, la automatizaci\u00f3n y control del despliegue de las aplicaciones y en el mantenimiento, en la seguridad de los datos. Como hemos visto, diversas soluciones basadas en inteligencia artificial ya son utilizadas para mejorar el proceso de desarrollo de software, y se prev\u00e9 que otras tecnolog\u00edas de IA, como blockchain o computaci\u00f3n qu\u00e1ntica, contribuyan tambi\u00e9n a este proceso en un futuro pr\u00f3ximo. Los beneficios de la IA, en esta \u00e1rea y en otras, tienen y tendr\u00e1n un fuerte impacto en los pr\u00f3ximos a\u00f1os.<\/p>\n<div>\n<figure id=\"attachment_8177\" aria-describedby=\"caption-attachment-8177\" style=\"width: 232px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" class=\"wp-image-8177 \" src=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/Maria-isabel-Lunarejo.jpg\" alt=\"\" width=\"232\" height=\"232\" srcset=\"https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/Maria-isabel-Lunarejo.jpg 415w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/Maria-isabel-Lunarejo-300x300.jpg 300w, https:\/\/www.cientificos.pe\/wp-content\/uploads\/2023\/04\/Maria-isabel-Lunarejo-150x150.jpg 150w\" sizes=\"(max-width: 232px) 100vw, 232px\" \/><figcaption id=\"caption-attachment-8177\" class=\"wp-caption-text\"><span style=\"font-size: 12pt; font-family: verdana, geneva, sans-serif;\">Mar\u00eda Isabel Limaylla, Estudiante del Doctorado en Computaci\u00f3n Universidad de la Coru\u00f1a, Espa\u00f1a<\/span><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><strong>Referencias<\/strong><\/p>\n<ol>\n<li style=\"text-align: justify;\">Humphrey, W. S. (1988, April). The software engineering process: definition and scope. In\u00a0Proceedings of the 4th international software process workshop on Representing and enacting the software process\u00a0(pp. 82-83).<\/li>\n<li style=\"text-align: justify;\"><em>deloitte.com\/us\/en\/insights\/focus\/signals-for-strategists\/ai-assisted-software-development.html<\/em>.<\/li>\n<li style=\"text-align: justify;\">Shah, F. A. (2020).\u00a0<em>Extracting information from app reviews to facilitate software development activities<\/em>(Doctoral dissertation, Tartu University).<\/li>\n<li style=\"text-align: justify;\">https:\/\/emilschutte.com\/stackoverflow-autocomplete\/<\/li>\n<li style=\"text-align: justify;\"><a href=\"https:\/\/www.youtube.com\/watch?v=fZSFNUT6iY8\">https:\/\/www.youtube.com\/watch?v=fZSFNUT6iY8<\/a><\/li>\n<li style=\"text-align: justify;\">Hourani, H., Hammad, A., &amp; Lafi, M. (2019, April). The impact of artificial intelligence on software testing. In\u00a0<em>2019 IEEE Jordan International Joint Conference on Electrical Engineering and Information Technology (JEEIT)<\/em>(pp. 565-570).<\/li>\n<li style=\"text-align: justify;\">Vickers, W., Reddivari, S., &amp; Reddivari, K. (2022, August). Evaluating Audio-to-Text utilizing Dragon in the Context of Just-in-Time Requirements. In\u00a0<em>2022 IEEE 23rd International Conference on Information Reuse and Integration for Data Science (IRI)<\/em>(pp. 124-125).<\/li>\n<li style=\"text-align: justify;\">Qayyum, S., &amp; Qureshi, A. (2018). A survey on machine learning based requirement prioritization techniques. <em>ACM International Conference Proceeding Series<\/em>, 51\u201355. https:\/\/doi.org\/10.1145\/3293475.3293480<\/li>\n<li style=\"text-align: justify;\">Hammouri, A., Hammad, M., Alnabhan, M., &amp; Alsarayrah, F. (2018). Software bug prediction using machine learning approach.\u00a0<em>International Journal of Advanced Computer Science and Applications<\/em>,\u00a0<em>9<\/em>(2), 78-83.<\/li>\n<li style=\"text-align: justify;\">Li, Y., Choi, D., Chung, J., Kushman, N., Schrittwieser, J., Leblond, R., &#8230; &amp; Vinyals, O. (2022). Competition-level code generation with alphacode.\u00a0<em>Science<\/em>,\u00a0<em>378<\/em>(6624), 1092-1097.<\/li>\n<li style=\"text-align: justify;\">Gr\u00f6pler, R., Sudhi, V., Garc\u00eda, E. J. C., &amp; Bergmann, A. (2021). NLP-Based Requirements Formalization for Automatic Test Case Generation. In\u00a0<em>CS&amp;P<\/em>(Vol. 21, pp. 18-30).<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; La Inteligencia Artificial (IA) es la rama de las ciencias de la computaci\u00f3n que se enfoca en brindar a las m\u00e1quinas o computadoras la capacidad de resolver problemas de manera tan inteligente como los humanos y, en algunos casos, mejor que los humanos, aprendiendo de una gran cantidad de datos. Si bien es cierto [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":8184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19,354],"tags":[359,360,358,399],"_links":{"self":[{"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/posts\/8173"}],"collection":[{"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8173"}],"version-history":[{"count":8,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/posts\/8173\/revisions"}],"predecessor-version":[{"id":8188,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/posts\/8173\/revisions\/8188"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=\/wp\/v2\/media\/8184"}],"wp:attachment":[{"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cientificos.pe\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}