Los desafíos de calidad de software que nos trae la IA y los LLMs
Hoja de ruta para realizar experimentos en Ingeniería de Software
1. Hoja de ruta para realizar experimentos
en Ingeniería de Software
Omar S. Gómez
Mérida, Yucatán, México, Octubre 2017 (imagen de http://study.com/cimages/course-image/science-for-kids_207305_large.jpg)
5th International Conference in Software Engineering Research and Innovation (CONISOFT'2017)
Escuela Superior Politécnica de Chimborazo (ESPOCH)
7. Software
● Creación intelectual del ser humano que hoy en día es
sumamente difícil, sino imposible, prescindir de éste
● Prácticamente se usa en todos los sectores de
nuestra sociedad moderna (ciencia, defensa,
educación, salud, ocio, etc.)
imagen de: http://www.softsubmitter.com/wp-content/uploads/2016/06/magazine-maker-software.jpg
IntroducciónCONISOFT'2017
8. Software
El software suele ser desarrollado y corregido
por profesionales del área informática
imagen de: https://medium.com/founders-coders
IntroducciónCONISOFT'2017
9. Trabajos asociados con el desarrollo de
software
MichaelPage, sitio especializado en reclutamiento,
muestra un panorama con las profesiones de mayor
demanda a nivel mundial
Fuente: https://www.michaelpage.co.uk/minisite/most-in-demand-professions/
IntroducciónCONISOFT'2017
10. Trabajos asociados con el desarrollo de
software (cont.)
De acuerdo a este sitio, existe gran demanda de
ingenieros de software en 24 países
Fuente: https://www.michaelpage.co.uk/minisite/most-in-demand-professions/
IntroducciónCONISOFT'2017
11. ¿Qué es lo que hace ser al ingeniero de
software un ingeniero?
imagen de: https://en.wikipedia.org/wiki/Software_developer
La ingeniería en la Ingeniería de SoftwareCONISOFT'2017
12. Ingeniería
En general, por ingeniería entendemos la
aplicación de conocimientos científicos
para la resolución de problemas que
ocurren en la práctica
CONISOFT'2017 La ingeniería en la Ingeniería de Software
imagen de: http://wonderfulengineering.com/engineering-pictures-in-hd-for-free-download/
13. Ingeniería civil
Imágenes de: https://www.pinterest.com/pin/415879346818439799/ y
https://www.pinterest.com/pin/309833649339912140/
CONISOFT'2017 La ingeniería en la Ingeniería de Software
14. Ingeniería civil
Conocimiento codificado
Fundamentos teóricos
-Estructuras mecánicas
-Combinación de fuerzas
-Teoría de la estática
-Teoría de la flexión
-Propiedades de materiales
-Análisis estructural
-…
Codificación
de conocimiento
Cuerpo de conocimientos
CONISOFT'2017 La ingeniería en la Ingeniería de Software
15. Según Shaw1, una disciplina ingenieril
evoluciona a través de diferentes etapas
1
Shaw, M. Prospects for an Engineering Discipline of Software IEEE Softw., IEEE Comp. Soc. Press, 1990, 7, 15-24
CONISOFT'2017 La ingeniería en la Ingeniería de Software
16. De acuerdo al concepto de ingeniería y al
gráfico de Shaw1, ¿al día de hoy podemos
considerar a la ingeniería de software como
una disciplina ingenieril?
1
Shaw, M. Prospects for an Engineering Discipline of Software IEEE Softw., IEEE Comp. Soc. Press, 1990, 7, 15-24
CONISOFT'2017 La ingeniería en la Ingeniería de Software
17. Ingeniería del Software
Definición IEEE1. Aplicación de un enfoque cuantificable,
disciplinado y sistemático para el desarrollo, operación y
mantenimiento del software, y el estudio de estos
enfoques; esto es, la aplicación de la ingeniería al software
Imagen de: https://www.intracomdefense.com/ImageHandler.ashx?image=/content/SW_Engineering(5).jpg
1
ISO/IEC/IEEE Systems and software engineering -- Vocabulary ISO/IEC/IEEE 24765:2010(E), 2010, 1-418
CONISOFT'2017 La ingeniería en la Ingeniería de Software
18. Problemáticas en la IS
● Productos software de baja calidad
● Entregados fuera de plazo
● Con un costo mayor al estimado
Imagen de: https://blog.janeirodigital.com/2016/02/11/software-self-defense-101-improving-your-technical-estimates/
CONISOFT'2017 La ingeniería en la Ingeniería de Software
19. A día de hoy no hemos sido capaces de
generar y codificar suficiente conocimiento
científico para que el profesional del desarrollo
de software pueda aplicarlo en la práctica
Imagen de: Shaw, M. Prospects for an Engineering Discipline of Software IEEE Softw., IEEE Comp. Soc. Press, 1990, 7, 15-24
CONISOFT'2017 La ingeniería en la Ingeniería de Software
20. La investigación en ingeniería de software
tiene como fin continuar con la generación y
codificación de conocimiento científico para
incorporarlo en la práctica del desarrollo de
software
Investigación en Ingeniería de SoftwareCONISOFT'2017
21. Imagen de: Shaw, M. Prospects for an Engineering Discipline of Software IEEE Softw., IEEE Comp. Soc. Press, 1990, 7, 15-24
Investigación en ingeniería
CONISOFT'2017 Investigación en Ingeniería de Software
22. Enfoques de investigación usados en la
Ingeniería de Software
Imagen de: https://www.biografiasyvidas.com/monografia/aristoteles/
CONISOFT'2017 Investigación en Ingeniería de Software
23. Experimento
En un experimento, realizado en un laboratorio (es
decir, en condiciones controladas) se modelan las
principales características de una realidad (en el caso
de la IS, el desarrollo de software) lo que permite
estudiarlas y comprenderlas mejor
Imagen de: https://searchengineland.com/answer-box-experiment-journey-known-unknown-factors-270948
Experimentación en Ingeniería de SoftwareCONISOFT'2017
24. Experimentos
Son útiles para:
- Confirmar teorías i.e. probar teorías existentes
- Confirmar juicios convencionales i.e. probar las creencias,
intuiciones de las personas, en este caso prácticas en IS
- Explorar relaciones i.e. probar que cierta relación se
mantiene
- Evaluar la exactitud de un modelo i.e. probar que la
exactitud de ciertos modelos es como se esperaba
- Validar mediciones i.e. asegurar que una medida
realmente mide lo qué se supone debe medir
CONISOFT'2017 Experimentación en Ingeniería de Software
25. Experimentos reportados en IS
● cadena de búsqueda:
TITLEABSKEY ( "controlled experiment" AND
"software engineering" ) AND PUBYEAR < 2017
CONISOFT'2017 Experimentación en Ingeniería de Software
28. Experimentación
El objetivo de la experimentación es identificar las
causas por las que se producen determinados
resultados (efecto)
Imagen de: http://www.writeawriting.com/essay/cause-and-effect-essay/
CONISOFT'2017 Experimentación en Ingeniería de Software
29. Experimentación en IS
Puede servir como un mecanismo fiable
para validar empíricamente (con hechos)
las prácticas en IS.
Ayuda a construir una base teórica a partir
de hechos recabados.
CONISOFT'2017 Experimentación en Ingeniería de Software
Imagen de: https://thumbs.dreamstime.com/z/vector-tree-growing-book-doodle-education-concept-48929812.jpg
30. Experimentación en IS
A partir de una base teórica de conocimientos es
posible codificar estos conocimientos para
aplicarlos a la resolución de problemas afines al
desarrollo y mantenimiento del software
CONISOFT'2017 Experimentación en Ingeniería de Software
31. Experimentación en IS
La experimentación en IS hace posible la
identificación y comprensión de las variables
que entran en juego en la construcción de
software, así como las conexiones que existen
entre ellas
CONISOFT'2017 Experimentación en Ingeniería de Software
32. Experimentación en IS
● La formalización de la experimentación surge
en la década de los 80s
imagen de: https://alchetron.com/Harrison-Rhodes-361036-W
CONISOFT'2017 Experimentación en Ingeniería de Software
33. Experimentación en IS
El tipo de experimentos realizados en IS
involucran la participación de estudiantes o
profesionales afines a la informática
imágenes de: https://www.aspect.com/globalassets/images/hero-developers-categorypg-1200x435.jpg
https://www.usiouxfalls.edu/var/usf/storage/images/media/images/academic-departments/computer-information-
systems/two-computer-science-students-in-class-at-usf./5526-1-eng-US/two-computer-science-students-in-class-at-usf..jpg
CONISOFT'2017 Experimentación en Ingeniería de Software
34. Experimentación en IS
Los experimentos realizados en IS se asemejan
más a los efectuados en disciplinas como la
psicología, sociología, comunicación humana, y
educación donde se emplean participantes para
llevar a cabo una serie de tareas en condiciones
controladas
imagen de: http://3.bp.blogspot.com/-06BYoK46xRY/TdAH3maKNeI/AAAAAAAAADg/xXijRrf2rxM/s1600/psychology_process.gif
CONISOFT'2017 Experimentación en Ingeniería de Software
35. Estructura básica de un experimento
Enfoque de verificación: Test First, Test Last
Grado de experiencia: novicio, intermedio, experto
Aspecto de interés: Efectividad medida como el % de defectos removidos
imagen de: https://www.mightybytes.com/wp-content/uploads/2014/03/list-image.png
Variable dependiente
Variables independientes
CONISOFT'2017 Experimentación en Ingeniería de Software
puede actuar como grupo de control
36. Estructura básica de un experimento
Las variables independientes se organizan en un diseño
experimental
CONISOFT'2017 Experimentación en Ingeniería de Software
38. Aplicación del proceso
de experimentación a la
Ingeniería de Software
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
39. Motivación
La revisión de literatura técnica o el propio
entorno de trabajo pueden incentivar la
realización de un experimento
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
40. Motivación (ejemplo)
Programación en pareja. Una de las doce prácticas de la
programación extrema (XP), en donde dos personas
(controlador y observador) trabajan en sincronía en tareas de
programación definidas
imagen: https://www.pmd.com/blog/post/weekly-byte-increasing-team-productivity-with-pair-programming
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
41. Motivación (ejemplo)
Se han estudiado algunos aspectos sobre esta
práctica, principalmente en relación con la
programación individual, tales como: calidad,
duración, esfuerzo, desempeño, cohesión,
complejidad, origen étnico, género, entre otros
más
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
42. Motivación
Género en la programación en pareja. El género comienza a ser
de interés dada la creciente participación de la mujer en el
ámbito de la informática (academia e industria)
imagen de: http://www.ibtimes.com/brogramming-africa-women-who-code-takes-learning-code-global-new-branches-algeria-2026080
imagen de: https://www.meetup.com/es/Women-Who-Code-Santiago/?_cookie-check=cQp3Ja1Naq5T0xcm
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
43. Motivación
- Entre otros aspectos, Choi (2015)1 realizó un experimento para
estudiar la productividad (medida de forma subjetiva) entre
diferentes tipos de parejas (Mujer-Mujer, Mujer-Hombre,
Hombre-Hombre)
- En este experimento participaron 128 estudiantes
universitarios
- Resultados. Las tres combinaciones de parejas se comportan
de manera similar (productividad), aunque se observa una
mayor variabilidad en la combinación Mujer-Hombre
1
K.S. Choi: A comparative analysis of different gender pair combinations in pair programming.
Behav. Inf. Technol. 34(8) pp. 825–83, 2015.
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
45. Definición del experimento
- En esta primera fase se define la pregunta de
investigación, hipótesis así como la delimitación del
experimento
- Esta fase puede complementarse con el enfoque GQM
(Goal Question Metric)1 el cual ayuda a especificar el
alcance del experimento
1
V. R. Basili, G. Caldiera, H. D. Rombach. The Goal Question Metric Approach.
Chapter in Encyclopedia of Software Engineering, Wiley, 1994.
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
46. Definición del experimento
(ejemplo)
Tomando como referencia los experimentos previos sobre
género en la programación en pareja, se desea estudiar la
densidad de defectos (defectos inyectados por cada 100
LOCs) producida por las distintas combinaciones de género
Pregunta de investigación
RQ. ¿Es la densidad de defectos afectada por los diferentes
tipos de combinaciones de género (M-M, M-H, H-H)?
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
47. Definición del experimento
(ejemplo, cont.)
De la pregunta de investigación se derivan las siguientes
hipótesis (supuestos):
H0: La densidad de defectos en los tres tipos de combinaciones
es similar
H1: Al menos en una de las combinaciones la densidad de
defectos es distinta
Nota. Las hipótesis son posteriormente contrastadas con
respecto a la evidencia obtenida por el experimento
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
48. Definición del experimento
(ejemplo, cont.)
En este ejemplo nuestras variables de interés son:
- El tipo de combinación de género (variable
independiente)
- La densidad de defectos, que se medirá como el
número de defectos inyectados por cada 100 LOCs
(variable dependiente)
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
50. Diseño del experimento
- En esta fase se detalla la estructura del experimento
tomando en cuenta los sujetos, variables independientes
(factores, tratamientos), variables dependientes
(respuestas), así como también se preparan los materiales
e instrumentos a utilizar
- La estructura de un experimento se conoce como diseño
experimental
La definición de la pregunta de investigación genera un
tipo de diseño experimental
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
51. Diseño del experimento
En este ejemplo identificamos tres tipos de combinaciones
de género (niveles) que conforman el factor ‘combinación
de género’
Pensemos que contamos con 30 participantes entre
hombres y mujeres para participar en este experimento
Mujer-Mujer (M-M) Mujer-Hombre (M-H) Hombre-Hombre (H-H)
Tratamientos
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
52. Diseño del experimento
M-M M-H H-H
5 unidades experimentales por combinación de género
Unidad experimental
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
54. Ejecución del experimento
● Consiste en aplicar los tratamientos a las
unidades experimentales según el diseño
establecido
● Los tratamientos pueden aplicarse en una o
varias sesiones experimentales
● Previo a las sesiones experimentales se
recomienda realizar sesiones de
entrenamiento o ejecutar un experimento
piloto con el fin de calibrar los materiales e
instrumentos
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
55. Ejecución del experimento
Ejemplo. Los participantes realizaron un ejercicio de programación
(dada una especificación) siguiendo la práctica de la programación en
pareja.
A los participantes se les entregó un formulario en el que registraron
las líneas de código producidas así como el número de defectos
lógicos inyectados.
Ejemplo de una
sesión experimental
Gómez, O. S.; Solari, M.; César J. Pardo, C. & Ledezma-Carrizalez, A. C. A Controlled Experiment on Productivity of Pair
Programming Gender Combinations: Preliminary Results CIbSE 2017 - XX Ibero-American Conference on Software Engineering,
Curran Associates, Inc., 2017, 197-210
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
57. Análisis e interpretación
- En esta fase se realiza el pre-procesamiento de las
mediciones recabadas así como se procede con el análisis
de éstas
- Un ejemplo de pre-procesamiento es trasladar la
información recabada de los formularios usados en el
experimento a un formato de datos tabular el cual permita
realizar análisis estadísticos
- Para el análisis se suele emplear la estadística descriptiva
e inferencial
- Los hallazgos del experimento son evaluados con respecto
a diferentes tipos de validez
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
58. Análisis e interpretación
1.47, 1.48, 1.78,
1.90, 2.22
0.81, 1.21, 1.29,
1.45, 1.49
0.68, 0.97, 1.05,
1.12, 1.45
M-M M-H H-H
Mediciones recolectadas (densidades de defectos, def x 100LOC )
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
60. Análisis descriptivo
Una primera aproximación para efectuar el análisis,
consiste en examinar de manera descriptiva la
información recolectada en el experimento. Por ejemplo,
examinar medias, desviaciones estándar, valores mínimos
y máximos, etc.
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
62. Análisis inferencial
- A nivel general el análisis inferencial aplica un enfoque
inductivo para determinar las propiedades de una
población a partir de una muestra de ésta.
- En el ámbito de la experimentación, el análisis inferencial
se usa para comparar el desempeño promedio de dos o
más grupos de mediciones, con el fin de examinar si hay o
no diferencias.
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
63. Análisis inferencial
M-M M-H H-H
1.47, 1.48, 1.78,
190,
…
0.81, 1.21, 1.29,
1.45,
…
0.97, 1.05, 1.23,
1.45,
…
Densidades de defectos en las tres combinaciones de género
promedios
muestrales
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
64. Análisis inferencial (cont.)
Las hipótesis derivadas de la pregunta de investigación se expresan en
términos estadísticos, ejemplo:
RQ. ¿Es la densidad de defectos afectada por los diferentes tipos de
combinaciones de género (M-M, M-H, H-H)?
H0: La densidad de defectos en los tres tipos de combinaciones es
similar
H0: μ1=μ2=μ3
H1: Al menos en una de las combinaciones, la densidad de defectos es
distinta
H1: μi≠μk para al menos un i≠ k
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
66. Análisis inferencial (cont.)
- Para examinar posibles diferencias entre estos tres
grupos de mediciones, empleamos el Análisis de la
Varianza (ANOVA)
- El ANOVA consiste en descomponer la variabilidad total
de los datos en ciertas componentes y comparar estas
variabilidades mediante una prueba estadística F
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
67. Análisis inferencial (cont.)
Las distintas componentes del ANOVA son colocadas en una
estructura similar a la mostrada a continuación
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
69. Validación de supuestos
Para poder tener una conclusión estadística válida, el ANOVA
realizado debe sujetarse a los supuestos como son:
independencia, normalidad, homocedasticidad
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
71. Presentación de resultados
- Esta fase del proceso de experimentación consiste en
presentar los resultados obtenidos, por ejemplo: la
preparación de un informe con los hallazgos del
experimento
- Para la preparación del informe se puede utilizar el
enfoque de investigación reproducible (reproducible
research)
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
72. Presentación de resultados - Investigación
reproducible (Reproducible research)
- Reportar de manera rigurosa el método utilizado
- Hacer público los datos utilizados en el análisis
- Hacer público el proceso de análisis de los datos
CONISOFT'2017 Proceso de experimentación en Ingeniería de Software
73. Replicación de experimentos
La realización de experimentos aislados es
sólo un primer paso en la secuencia de
actividades del paradigma experimental
Replicación de experimentosCONISOFT'2017
74. Replicación de experimentos
● La replicación es un mecanismo importante en
la ciencia. Gracias a la replicación es posible
verificar o corroborar hallazgos previos así
como generar conocimiento nuevo
CONISOFT'2017 Replicación de experimentos
75. Replicación de experimentos en IS
A través de la replicación es posible combinar
experimentos relacionados con la finalidad de
pasar de resultados locales poco
generalizables a evidencias globales sobre el
desarrollo y mantenimiento de software
CONISOFT'2017 Replicación de experimentos
77. Conclusiones
● La investigación en ingeniería de software busca la generación de
conocimiento que pueda ser aplicado en la práctica del desarrollo
de software
● Uno de los mecanismos que comienza a usarse en la
investigación en IS es la experimentación
● Para realizar un experimento se debe seguir un proceso definido
● No basta con tener experimentos aislados, es necesario contar
con replicaciones de éstos
● Entre más tipos de replicaciones se tengan, se tendrá mayor
conocimiento sobre la generalización de los hallazgos
● Contar con familias de experimentos (replicaciones) facilitará la
síntesis cuantitativa de éstos
ConclusionesCONISOFT'2017