¡Bienvenido! - Welcome!
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]
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]
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]
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]
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]
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
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
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
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]
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]
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]
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]

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
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]
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]