¡Bienvenido! - Welcome!

 

Typology of Replications for Synthesizing Software Engineering Experiments

Experimental Software Engineering (ESE) imports the experimental paradigm, successfully applied in many branches of science, to software engineering (SE). ESE aims to make software construction a predictable activity by exploring the relations between software production processes and products.
Advancement of the experimental paradigm in SE entails more than just applying experimental design and statistical data analysis, it also calls for the development of a methodology (either from scratch or adapted from other disciplines) based on the general principles of experimentalism. The primary motivation of this research is to adapt a particular aspect of the experimental paradigm --replication-- to SE experimentation.
ESE researchers have conducted several replications of experiments. But, there is still debate about what is the best way to go about replication. Some questions raised in this discussion are: Should the baseline experiment materials be reused? Should the replication be carried out independently or is form of communication among experimenters and replicators acceptable? What elements of the experiment structure can be changed for the experiment to still be considered a replication?
This research examines the concept of replication for adoption in ESE from a theoretical and practical viewpoint. It addresses the following objectives: 1) study the concept of replication in different scientific disciplines to gain a better understanding of its importation into ESE; 2) develop a typology of replications useful for understanding what different types of replication can be conducted in ESE and what experimental results verification purpose each replication type serves, and 3) develop a conceptual framework with key ideas for comparing and gathering knowledge about sets of replications that is useful for both practitioners and researchers. To evaluate the proposals of this thesis, we use a set of 20 replications by different authors which examine among other aspects the effectiveness of three software evaluation techniques.
[download] cheksum files [md5][sha1][sha512]


PhD Thesis

Replication of Software Engineering Experiments

Experimentation has played a major role in scientific advancement. Replication is one of the essentials of the experimental methods. In replications, experiments are repeated aiming to check their results. Successful replication increases the validity and reliability of the outcomes observed in an experiment.
There is debate about the best way of running replications of Software Engineering (SE) experiments. Some of the questions that have cropped up in this debate are, “Should replicators reuse the baseline experiment materials? Which is the adequate sort of communication among experimenters and replicators if any? What elements of the experimental structure can be changed and still be considered a replication instead of a new experiment?”. A deeper understanding of the concept of replication should help to clarify these issues as well as increase and improve replications in SE experimental practices.
In this chapter, we study the concept of replication in order to gain insight. The chapter starts with an introduction to the importance of replication and the state of replication in ESE. Then we discuss replication from both the statistical and scientific viewpoint. Based on a review of the diverse types of replication used in other scientific disciplines, we identify the different types of replication that are feasible to be run in our discipline. Finally, we present the different purposes that replication can serve in Experimental Software Engineering (ESE). [view]


Book Chapter Co-Authored with Professor Natalia Juristo.

Replications Types in Experimental Disciplines

Experiment replication is a key component of the scientific paradigm. The purpose of replication is to verify previously observed findings. Although some Software Engineering (SE) experiments have been replicated, yet, there is still disagreement about how replications should be run in our field. With the aim of gaining a better understanding of how replications are carried out, this paper examines different replication types in other scientific disciplines. We believe that by analysing the replication types proposed in other disciplines it is possible to clarify some of the question marks still hanging over experimental SE replication. [view]


Paper presented at the proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement ESEM'2010 Bolzan, Italy.

Replication, Reproduction and Re-analysis: Three ways for verifying experimental findings [In Software Engineering]

The verification of a previously observed finding is important. Being able to verify a finding provides some guarantee that it is not product of chance but that the observed phenomenon is stable or regular. The most well done way of verifying experimental findings is through replication. But, is this the only method for verifying the observations of an experiment? We have studied different ways of verifying experimental findings that are used in other disciplines. From the 18 replication classifications that we located, we have identified three methods for verifying a finding. Each of these methods fulfil a particular verification purpose. [view]


Paper presented at the 1st International Workshop on Replication in Empirical Software Engineering Research RESER'2010 Cape Town, South Africa.

ClasificaciÓn de Replicaciones para la SÍntesis de Experimentos en IngenierÍa del Software

La Ingeniería del Software Experimental (ESE en Inglés) traslada a la Ingeniería del Software (IS) el paradigma experimental que se ha aplicado con éxito en diversas disciplinas científicas. El objetivo de la ESE es hacer del desarrollo de software una actividad predecible gracias al conocimiento de las relaciones entre los procesos de producción de software y los productos que se obtienen. Para avanzar en el paradigma experimental en IS no es suficiente con aplicar las técnicas de diseño experimental y el análisis estadístico de datos, sino que es necesario construir una metodología (bien desde cero o adaptada de otras disciplinas) basada en los principios generales del experimentalismo. La motivación principal de esta investigación es trabajar en la adaptación de un aspecto particular del paradigma experimental a la experimentación en IS: La replicación, en el contexto de una serie de experimentos. El objetivo de la investigación consiste en identificar y definir una clasificación de replicaciones para experimentos en IS. Esta clasificación permitirá prescribir los distintos niveles de síntesis de resultados que se recomiendan para los diferentes tipos de replicaciones identificadas. [ver artículo]

Evaluando la arquitectura de software: Panorama General

Uno de los factores que determina el éxito o fracaso de un sistema de software es su arquitectura. De nada sirve un sistema de software que no cumple con los tiempos de respuesta previamente especificados por el cliente o que es complejo de modificar, difícil de usar o vulnerable a ataques. Por lo regular una vez que el sistema de software ha sido construido es posible determinar si éste cumplió o no con los atributos de calidad que fueron especificados en los requerimientos no funcionales. Este conocimiento tardío implica tomar demasiados riesgos innecesarios, un ejemplo de estos riesgos es el descubrir en fases tardías del desarrollo fallos en el sistema debido a que en la fase de diseño no se eligió apropiadamente una arquitectura. Para reducir estos riesgos y como una buena práctica de ingeniería es recomendable llevar acabo evaluaciones a la arquitectura. [ver artículo]

Artículo original disponible en la revista Software Guru, edición Enero-Febrero 2007

Evaluando la arquitectura de software: MÉtodos de EvaluaciÓn

En este documento damos a conocer una serie de métodos utilizados para evaluar la arquitectura de software. Estos métodos han demostrado su efectividad en diferentes dominios de aplicación, como son: sistemas financieros, sistemas de gobierno, sistemas en tiempo real, entre otros más. A continuación se describen cuatro métodos, que analizan un atributo de calidad específico en la arquitectura de software. Al final del presente artículo se incluye una tabla en la que se comparan los cuatro métodos con respecto a una serie de criterios. [ver artículo]

Artículo original disponible en la revista Software Guru, edición Marzo-Abril 2007

Documentando la arquitectura de software: Principios bÁsicos

En la actualidad, uno de los temas candentes que se habla dentro de la comunidad de desarrollo de software es el referente a las arquitecturas. La literatura nos dice que una arquitectura de software describe cómo un sistema es descompuesto en componentes, cómo éstos son interconectados, y la manera en que se comunican e interactúan entre sí. Tras la anterior definición me surgieron un par de preguntas, ¿En qué grado cumplimos con ésta definición durante el rol que desempeñamos como arquitecto o diseñador? y ¿Qué tan bien documentamos una arquitectura de software? [ver artículo]

Artículo original disponible en la revista Software Guru, ediciones Mayo-Julio 2008 y Agosto-Octubre 2008

PROPUESTA DE MEJORA SOBRE LA PRIMERA ETAPA DEL MODELO DE PROCESO KDDM, CRISP-DM

En este artículo se propone una serie de prácticas y técnicas tomadas de los dominios de gestión de proyectos e ingeniería del software para usarlas en la etapa de entendimiento del negocio del modelo de proceso CRISP-DM, con la finalidad de reducir el riesgo de fracaso en la implementación de proyectos de descubrimiento de conocimiento y minería de datos. [ver artículo]

Creative Commons License

INTEGRACIÓN CONTINUA DE COMPONENTES EJB

En la actualidad, se sabe que el esfuerzo requerido para llevar acabo la integración es exponencialmente proporcional a la cantidad del tiempo en que se posponga esta actividad. Entre más tiempo pase sin efectuar la integración, mayor es el riesgo en que haya conflictos en los cambios, ya sea en el tiempo de construcción del sistema o en el tiempo de ejecución. [ver artículo]

Creative Commons License

PARADIGMA DE PROGRAMACIÓN DIRIGIDO POR EVENTOS

En la actualidad una gran variedad de sistemas software hacen uso del paradigma dirigido por eventos, desde sistemas que utilizan interfaces gráficas de usuario (GUI) hasta sistemas complejos en tiempo real tales como sistemas controladores de vuelos. El objetivo del presente documento es dar a conocer al lector un panorama amplio sobre este paradigma. [ver artículo]

Creative Commons License

ESPECIFICACIÓN E IMPLEMENTACIÓN DE SOFTWARE BASADO EN COMPONENTES CON LA TECNOLOGÍA EJB 3.0

Parte del presente trabajo está basado en el proceso de especificación de componentes propuesto por Cheesman. En lo particular, esta es la segunda ocasión que el autor del presente documento hace uso de este proceso. La primera vez que se usó fue en el año 2005, para especificar los componentes de un sistema distribuido responsable de evaluar y asignar una nota a los trabajos realizados por alumnos registrados en alguna asignatura. [ver artículo] [código fuente en netbeans]

Creative Commons License
Especificación e implementación de software basado en componentes con la tecnología EJB 3.0 by Omar Gómez is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License

AdministraciÓn de la ConfiguraciÓn de Software

Una de las prácticas de la ingeniería de software que es actualmente utilizada por grandes y medianas empresas desarrolladoras de software es la administración de la configuración de software. Esta disciplina sirve para identificar, organizar y controlar las modificaciones que se hacen al software. Dicha disciplina nace en los años 80s, surgida debido a los problemas que se presentaron en la industria de desarrollo de software de los años 70s, algunos de estos problemas fueron: la mala planeación en proyectos de software, el manejo inapropiado de la integridad tanto en códigos fuente como en documentación referente a los productos de software... [ver artículo]

RepresentaciÓn de maquinas de estados finitos en componentes y en el lenguaje de programaciÓn Java

Existen varias maneras de representar maquinas de estados en lenguajes de programación orientados a objetos, ya sea utilizando tablas indexadas [7], usando el operador switch [3] el cual es anidado junto con sentencias if, usando redes de Petri [5]. Construyendo un mecanismo el cual utiliza métodos virtuales [1]. Gracias a estas técnicas los objetos pueden comportarse como maquinas de estados finitos.

¿Qué pasaría si se conociera el estado de un componente u objeto de manera externa?, ¿Qué ventajas e implicaciones tendrían el usar este enfoque?. Este trabajo se centrará en resolver estas preguntas desde dos perspectivas: implementando maquinas de estados finitos en un lenguaje de programación actual, en este caso Java y proponer un mecanismo a un leguaje de programación para que sea posible implementar maquinas de estados finitos de manera mas transparente.

De acuerdo a la primera perspectiva un caso en particular sería el poder preguntar sobre el estado en el que se encuentre algún componente el cual esté representado como una maquina de estados finitos. De acuerdo al estado en el que se encuentre el componente, el usuario puede realizar alguna acción. De esta manera en cualquier momento el componente por medio de sus operaciones puede proporcionar el estado en el que se encuentra... [ver artículo]