« febrero 2017 | Inicio | abril 2017 »

4 posts from marzo 2017

03/31/2017

Búsqueda Parametrizada para la Detección de Código Duplicado

Imagen-Portada

Para nadie es un secreto que un software al que no se le hace mantenimiento se vuelve obsoleto con el tiempo. Por eso, el mantenimiento del software es un área muy importante de la ingeniería de software, pero el código duplicado es un flagelo que dificulta dicho mantenimiento.

Muchas veces, el código duplicado se introduce cuando un programador va a arreglar un bug o a agregar una nueva funcionalidad parecida a otra existente. En lugar de hacer un análisis profundo para hacer uso de patrones y buenas prácticas de programación, como el uso de funciones para la reutilización de código, los desarrolladores prefieren hacer nuevas copias de código que funciona para evitar la introducción de nuevos bugs en el sistema y dañar otros módulos que ya estaban funcionando bien [1].  Esto lo hacen, en especial, cuando lo que están editando lo hizo otro programador.

Para tal edición, copian el código que ya funciona en un editor de texto, cambian los nombres de algunas variables y lo pegan en otra sección del programa. Con el tiempo, la cantidad de código duplicado aumenta y el código se vuelve más extenso y más difícil de mantener. Por ejemplo, cuando se arregla un error en una sección del código, esta reparación no se replica automáticamente en las copias de dicha sección. Es más, dichas copias pueden ser difíciles de identificar en especial en los sistemas grandes de software en el que trabajan muchos desarrolladores.

Estudios en un software de más de un millón de líneas muestran que más del 22% del código es repetido [1]. Esta cantidad de código se podría reducir usando técnicas de programación más adecuadas como el uso de funciones, procedimientos y patrones de diseño. Una reducción así haría que el código fuera más simple y más fácil de mantener.

Con el fin de facilitar el hallazgo del código duplicado, Brenda Baker definió la búsqueda parametrizada [2]. En dicha búsqueda, el código es visto como una secuencia de tokens que corresponden a variables, operadores, palabras reservadas, etc. En particular, ella diferencia los tokens en dos grupos: los constantes y los parámetros. Los primeros corresponden a los tokens que permanecen iguales en dos copias de código: palabras reservadas, operadores y literales. Los parámetros corresponden a elementos que pueden ser identificados con nombres distintos: los nombres de las variables y de las constantes.

Basada en estas nociones, Baker definió las cadenas parametrizadas como cadenas de texto formadas por el alfabeto constante y el alfabeto de parámetros. Dos cadenas del mismo tamaño hacen coincidencia parametrizada si existe una biyección que mapee los símbolos de una cadena en los símbolos de la otra de manera que los símbolos del alfabeto constante tengan un mapeo identidad. Por ejemplo, si el alfabeto constante está formado por {a,b} y el alfabeto de parámetros es {X,Y,Z}, las cadenas XZabaYXYbZ y ZYabaXZXbY hacen una coincidencia parametrizada bajo el mapeo (a,b,X,Y,Z)→(a,b,Z,X,Y).

Visto desde el punto de vista de código, una coincidencia parametrizada se ilustra en los siguientes fragmentos.

 

 

Imagen_1

Nótese que estos fragmentos de código son idénticos, excepto por un intercambio sistemático de los parámetros. En este caso, los parámetros son las variables x e y, las cuales son mapeadas a las variables a y b, respectivamente.

Entonces, la idea de la búsqueda parametrizada, dado un patrón y un texto, es encontrar las subcadenas del texto que hagan coincidencia parametrizada con el patrón, de esta manera se pueden encontrar todas las copias en el código del sistema de software del fragmento representado por el patrón.

Así, la búsqueda parametrizada adquiere gran importancia en la reducción de código duplicado y en el mantenimiento de software. Por esta razón, se han buscado soluciones eficientes para el problema, como las presentadas en [3,4]. También, el problema se ha extendido a la búsqueda de patrones múltiples [5], búsqueda aproximada [6,7,8] y búsqueda en dos dimensiones [9]. Los trabajos más recientes se enfocan a la búsqueda parametrizada aplicada a la solución del isomorfismo de grafos [10] y a la búsqueda en textos comprimidos [11]. 

Una gran cantidad de trabajo se ha desarrollado en torno al tema debido a su importancia en el mantenimiento de software, procesamiento de imágenes y bioinformática. Una guía más detallada de las contribuciones en esta área es presentada en [12]. A pesar de que el problema se propuso hace más de dos décadas, la búsqueda parametrizada continúa siendo ampliamente estudiada.

Por Juan Mendivelso, PhD

Bibliografía

  1. Baker, B. S. (1993). A program for identifying duplicated code. Computing Science and Statistics, 49-49.
  2. Baker, B. S. (1993, June). A theory of parameterized pattern matching: algorithms and applications. In Proceedings of the twenty-fifth annual ACM symposium on Theory of computing (pp. 71-80).
  3. Amir, A., Farach, M., & Muthukrishnan, S. (1994). Alphabet dependence in parameterized matching. Information Processing Letters, 49(3), 111-115.
  4. Baker, B. S. (1995, January). Parameterized Pattern Matching by Boyer-Moore-Type Algorithms. In SODA (Vol. 95, pp. 541-550).
  5. Idury, R. M., & Schäffer, A. A. (1994, June). Multiple matching of parameterized patterns. In Annual Symposium on Combinatorial Pattern Matching (pp. 226-239). Springer Berlin Heidelberg.
  6. Lee, I., Mendivelso, J., & Pinzón, Y. J. (2008, November). δγ–parameterized matching. In International Symposium on String Processing and Information Retrieval (pp. 236-248). Springer Berlin Heidelberg.
  7. Hazay, C., Lewenstein, M., & Sokol, D. (2007). Approximate parameterized matching. ACM Transactions on Algorithms (TALG), 3(3), 29.
  8. Apostolico, A., Erdős, P. L., & Lewenstein, M. (2007). Parameterized matching with mismatches. Journal of Discrete Algorithms, 5(1), 135-140.
  9. Hazay, C., Lewenstein, M., & Tsur, D. (2005, June). Two dimensional parameterized matching. In Annual Symposium on Combinatorial Pattern Matching (pp. 266-279). Springer Berlin Heidelberg.
  10. Mendivelso, J., Kim, S., Elnikety, S., He, Y., Hwang, S. W., & Pinzón, Y. (2013, October). Solving graph isomorphism using parameterized matching. In International Symposium on String Processing and Information Retrieval (pp. 230-242). Springer International Publishing.
  11. Beal, R., & Adjeroh, D. (2016). Compressed parameterized pattern matching. Theoretical Computer Science, 609, 129-142.
  12. Mendivelso, J., & Pinzón, Y. J. (2015, August). Parameterized Matching: Solutions and Extensions. In Stringology (pp. 118-131).

03/17/2017

Reflexión pasajera de un estudiante

Imagen_1

Según el profesor Campos [1], los pasos para comprender una teoría son: dar ejemplos, contraejemplos, resolver ejercicios, problemas y por último, proponer problemas, los cuales son muy buen comienzo para el aprendiz no iniciado, estos pasos son un camino para recorrer sin prisa y con deleite, son un sendero que lo conducirá a niveles superiores y claro, al ensanchamiento de la comprensión de la teoría estudiada.

En contraste con nuevas escuelas, metodologías y corrientes educativas es importante el concebir la investigación como la última etapa de la formación integral de un matemático, como también para otras profesiones; esto con el fin de impulsar la mayor cantidad de conocimiento, ya sea para una aplicación práctica o mejor aún, para enriquecer una teoría desde sus fundamentos, y de ser posible, llevarla un paso más lejos, es decir, encontrar una pregunta sin respuesta con anhelos de apadrinarla, hacerla propia y responderla de manera contundente.

En este punto quiero plantear una pregunta, de manera prudente y sin esperar por ahora encontrar una respuesta, pero aunque usted lector entusiasta se sentirá decepcionado, quiero invitarlo a acompañarme en mi breve viaje: ¿Es la investigación un proceso que madura lentamente despertando a quien investiga a una nueva interpretación de un asunto ya estudiado que demanda y requiere mayor atención o, caso contrario, es una misteriosa recopilación de información que busca adiestrarme en un caso de manual, un esfuerzo individual que caza el conocimiento aún no adquirido ?

Quiero valerme de la siguiente experiencia para exhibir mi punto: meditando en mis ejercicios pendientes de variable compleja, recordé lo que es en definitiva para un matemático sacar el conejo del sombrero, práctica muy utilizada por docentes universitarios. Tratando de calcular i i, mi maestro no paraba de decir que era más sabio por viejo que por… bueno, por cualquier otra razón, y si usted conoce algo del asunto, entenderá lo frustrante de resolver este problema propuesto. De lo contrario, al igual que yo, se sentirá frustrado las siguientes doce horas y sus comidas las apreciará insípidas, no se preocupe, será normal, y como consejo le digo, no trate de buscar la solución en Google. Recomiendo, como un favor personal, no se afane, cuando encuentre o, mejor dicho, "vea" la solución, sabrá qué es adentrarse en la madriguera. Y sí, cuando la vea, se encontrará en otro nivel, y será capaz de enseñarla.

Sin embargo, es aquí cuando el sendero se divide en dos, y se desprenden las siguientes tesis: es el investigar una acción similar al buscar cómo calcular i i, o en contraposición, es el investigar el responder de dónde o qué razones llevaron a tomar i = e i/2) ; en mi humilde opinión, aunque para ambas acudimos a "buscar respuestas", la primera búsqueda es simple mecánica que se aprende viendo, pero la segunda, de seguro necesitará madurar más de un concepto o dos, y necesitará tiempo, pues créame, no es inmediato, solo Alicia es capaz de seguirle el diálogo a un sombrerero loco y a la liebre de marzo.

Así que, usted lector, en este punto, puede continuar su viaje solo e iniciar a partir de cualquiera de las dos tesis señaladas, y espero, cuando haya decidido qué es la investigación, su viaje haya sido igual de apasionante que el mío.

 

Juanita del Mar Ramírez Weaver 

 

REFERENCIAS

[1] Campos, Alberto. Descripcion aproximante de la actitud investigativa. Manuscrito.

 

 

 

03/13/2017

Administración de producción y logística

Imagen-1

La Asignatura “Administración de producción y logística”  tiene como objetivo primordial dar a conocer a los estudiantes la importancia de las cadenas de suministro,  regionales y globales, y su papel como Ingenieros industriales en las áreas de producción y logística.

La razón de ser de las industrias de hoy, es la satisfacción de sus clientes, por lo que cada día se hace más importante lograr entender sus necesidades y anticiparse a sus requerimientos, no solo brindándole productos o servicios de calidad, sino que además es necesario llegar a superar sus expectativas, con el único objetivo de fidelizarlo. Un cliente plenamente satisfecho será la mejor carta de presentación para la empresa y el mejor medio de publicidad que se pueda llegar a tener.

La satisfacción de las expectativas de un cliente, está determinada por la impresión que éste experimenta después de realizar una compra o de recibir un servicio, es más que un sentir. El cliente solicita (de manera directa o indirecta; consiente o inconsiente), que el producto (tangible o intangible) le sea entregado de manera perfecta. Pero, ¿qué significa perfección?; en muchos casos podrá ser entendida como calidad, un producto adecuado para su uso y que cumple con las consideraciones técnicas y subjetivas que sólo él se ha imaginado; en otros casos la perfección estará asociada con la oportunidad, tener el producto disponible en el momento y lugar en el que el cliente lo requiere; en algunas oportunidades estará asociado al cumplimiento de una función a un precio razonable y en otras estará asociado a la confiabilidad del producto, que siempre se obtengan las mismas características y funciones.

La administración de producción y logística entonces, consiste en la colaboración e integración de todos los procesos de la compañía y se ocupa de la gestión de todo el sistema para producir o prestar un servicio de la manera más eficaz posible. La producción comprende los procesos de transformación y la gestión de los recursos para obtener productos o servicios deseados por el cliente, con la mayor productividad. La logística por su parte se refiere a los procesos que involucran el manejo de la información, el control de inventarios y almacenes de materiales tanto de materia prima como de producto en proceso y producto terminado, del movimiento físico de los mismos al interior de la empresa,   y además está encargado también de coordinar los procesos de distribución del producto  hasta llegar a las manos del cliente de manera rápida y oportuna.

Al mismo tiempo que cumple las anteriores funciones, la administración de producción y logística no puede dejar de lado los procesos de administración y gestión, que incluyen la planeación de la oferta y la demanda, la coordinación y disponibilidad de los recursos como maquinas, personal, vehículos, entre otros, el monitoreo y control de los procesos productivos y logísticos,  y el manejo de la información a través de plataformas informáticas que permitan la interacción de todo el sistema.

Un administrador de producción y logística no sólo debe pensar en actividades operativas, sino que además debe generar estrategias competitivas que contribuyan al mejoramiento del desempeño de la organización; tomando decisiones acerca de las instalaciones, las máquinas, la tecnología, los proveedores, el personal y hasta la ubicación. Debe apoyarse en metodologías y herramientas que le permitan el logro de los objetivos, en el menor tiempo posible y el mejoramiento del sistema financiera y competitivamente. Debe también, adoptar sistemas y tecnologías vanguardistas, que le permitan ofrecer un plus y diferenciarse en el mercado.

Las estrategias deben establecer las políticas y planes generales para la utilización de los recursos, sin descuidar la sustentabilidad de la compañía. Cuando se habla de sustentabilidad, se deben considerar múltiples criterios, debido a que actualmente se deben satisfacer todas las necesidades inherentes del cliente y de la empresa, sin llegar a comprometer capacidades futuras: técnicas, tecnológicas, económicas, sociales y ambientales. El futuro de las compañías y de los recursos, depende de las decisiones que sean tomadas hoy.

 

Diana Catalina Londoño Restrepo

Profesora Facultad Matemáticas e Ingeniería.

03/03/2017

Ingeniería industrial, miopía y empirismo profesional

Ingeniería industrial, miopía y empirismo profesional

 

Muchas dudas pasan por la cabeza de un estudiante de ingeniería industrial cuando piensa en cómo será en realidad su futuro profesional; surgen muchos interrogantes: “¿conseguiré trabajo rápidamente como ingeniero?”, “¿podré trabajar en el área que realmente me gusta?” y una duda muy frecuente: “¿realmente usaré los conocimientos que adquirí en la universidad?”, todas estas preguntas que no tienen una respuesta ni inmediata ni única, pueden generar una desmotivación vocacional muy fuerte, generando incluso deserción. Es necesario aclarar que todas estas dudas no son exclusivas de los estudiantes de ingeniería industrial, este cuestionamiento ocurre en prácticamente todas las áreas del saber y es necesario hacer varias aclaraciones al respecto.

Como estudiantes de ingeniería industrial pasamos por varias etapas en nuestro proceso formativo:

Primera etapa: Cuando escogemos nuestra carrera, la mayoría de nosotros tenemos solo información parcial que se puede encontrar en internet, en las páginas web y folletos informativos de las universidades y en el mejor de los casos, la información personal que brinda alguna institución educativa en ferias escolares o visitas a los colegios, o la experiencia de algún conocido o familiar que es ingeniero industrial. Sin embargo, la gran mayoría no logra tener una visión general de lo que es la ingeniería industrial y aunque los colegios y universidades están trabajando fuertemente en este aspecto queda mucho camino por recorrer, teniendo en cuenta que existen cientos de carreras universitarias y nuestra ingeniería industrial es solo una más de ellas.

Segunda etapa: Independientemente de qué tan informado(a) o no se haya hecho la selección de la carrera, en el primer semestre se da por lo general una introducción al área profesional, donde se amplía el alcance y la resolución de dudas vocacionales, esto se logra con la metodología que cada institución considere más efectiva para lograr el objetivo buscado, que es permitir al estudiante descubrir por sí mismo si quiere dedicar “el resto de su vida” a ser un ingeniero industrial. Lo que ocurre luego es que vienen varios semestres de lo que se denomina ciencia básica (cálculo, física, química,…) lo cual aporta el enfoque general que cualquier ingeniero debe poseer; en esta etapa surgen más dudas: “¿Cómo usaré esto como ingeniero industrial?”, la duda se justifica plenamente debido a que los ejemplos que se usan son genéricos y no se refieren exclusivamente a la esfera de la ingeniería industrial y las respuestas que se pueden obtener son aún más difusas, debido a que por lo general todas estas materias son impartidas por matemáticos, físicos y/o licenciados y no por ingenieros industriales. Por lo tanto, esta etapa es crítica, pues es aún más difícil resolver los interrogantes cuando se pueden pasar perfectamente dos años cursando materias de enfoque genérico.

Tercera etapa: Llega un punto que frecuentemente es la mitad de la carrera y estamos prestos a cursar el Core de nuestra carrera, las materias que nos darán el sello o la identidad de ingenieros industriales, las materias que probablemente vamos a usar día tras día en nuestros futuros empleos, estamos emocionados y llenos de expectativas e implícitamente ya se ha logrado el objetivo de la ciencia básica que es “abrirnos la mente” para empezar a pensar como ingenieros, y resultado de ese efecto puede ser simplemente concluir “esto no es lo mío”, es una etapa en la que frecuentemente ya no hay vuelta atrás: “Tengo que ser ingeniero industrial porque ya voy muy adelante, porque mis padres se pueden enojar, porque mi círculo social me va a criticar, porque ya invertí mucho dinero y no lo puedo perder,…”

Si se sigue adelante, lo que se puede observar es que la ingeniería industrial tiene ramas muy variadas, no se necesitan datos para afirmar que tiene uno de los campos de acción más amplios en el sector profesional, unos campos nos parecerán muy interesantes, otros quizá no tanto, pero lo que no se puede negar es que son todos necesarios para ser un profesional integral, nuestro pensamiento ya es inevitablemente más sistémico y ya tenemos la capacidad de cuestionar lo que se nos enseña, mucho más lo que son los conocimientos que vamos a usar como profesionales y entonces nos preguntamos: “¿Allá afuera se harán las cosas tal cual me las están enseñando?” y la respuesta más certera y verídica es: NO.  Efectivamente puede sonar deprimente la respuesta, pero hacer un panorama más prometedor de esta cruda respuesta es el verdadero reto de un ingeniero industrial.

La mayoría de materias se fundamentan en una bibliografía extranjera, académicos de Norteamérica y de Europa suelen ser los más reconocidos autores de los libros de texto que se usan en la enseñanza de la ingeniería industrial y que se caracterizan por un trabajo impecable con aplicaciones validadas de manera exitosa en el mundo académico y profesional, por este mismo hecho se usan con toda la confianza en el proceso de enseñanza, sin embargo, es necesario entender que un ingeniero industrial no es exactamente el mismo en cualquier latitud del mundo, la cultura de los lugares donde se desarrollaron tales conocimientos debe ser caracterizada y comparada con la realidad nacional e incluso internacional más cercana, no podemos caer en el cliché de “como en ese lugar funcionó, también acá lo podemos aplicar tal cual”, ese enfoque de simplemente copiar los modelos y metodologías que han sido usadas con éxito en otros lugares va en contra de la esencia de la ingeniería industrial. Lo que se debe hacer es entender de manera integral estas metodologías de modo que se puedan adecuar exitosamente a las realidades locales y nacionales y no solo adecuar, por supuesto, generar nuevo conocimiento es siempre un objetivo implícito de cualquier rama del saber. Los docentes tienen esto muy claro, sin embargo, es inevitable que en el día a día no se hable explícitamente y con la rigurosidad necesaria de este tema a los estudiantes, de modo que estos se pueden llevar una visión cuadriculada y pensar erróneamente que con entender y aprender un libro de texto, ya son buenos profesionales y chocarse de manera estrepitosa con la realidad laboral que los espera más adelante, una realidad en la que todavía reina el empirismo profesional a pesar de los grandes avances y conocimientos disponibles con el acceso a la información mundial. Especialmente en Colombia, las pequeñas y medianas empresas se gestionan con métodos empíricos e incluso alguna parte de las grandes compañías todavía lo hacen, por lo tanto un profesional al cual no se forme con la mentalidad de que debe adaptar sus conocimientos científicos e ingenieriles a la práctica laboral, será absorbido por el sistema que reina de “siempre se ha hecho así”, convirtiéndose simplemente en un “obrero calificado” del montón y fallando a su propósito como ingeniero industrial.

Aunque suene casi esotérico, la ingeniería industrial hoy en día es sinónimo de cuestionar todo, de cambiar, de romper el paradigma de hacer las cosas como siempre se han hecho porque así han funcionado bien, no, nosotros queremos que funcionen mejor que bien, queremos que funcionen de la mejor manera posible, no en vano se afirma “los ingenieros hacen cosas, los ingenieros industriales las hacemos mejor”.

Es importante aclarar que en ningún momento se están demeritando los libros de texto y el conocimiento que se encuentra publicado, lo que se quiere alentar es que ningún método por bueno que sea se puede aplicar de manera miope (replicar pobremente) a una situación en particular. Ser ingeniero industrial es tener la capacidad de tomar el conocimiento ya existente y adecuarlo de manera exitosa, para resolver los problemas de su interés y por supuesto de generar nuevo conocimiento, pero además existe el reto de cambiar el método empirista y la cultura en el ámbito laboral y esto requiere de la capacidad de cada persona, pues es una actitud que no se puede enseñar con los libros y que no se puede garantizar que se aprenda en la universidad, es decir, este es el sello personal de cada ingeniero.

 Carlos Andrés Quiroz

Docente Facultad de Matemáticas e Ingenierías