gestion del conocimiento en el desarrollo de software

8

Click here to load reader

Upload: gust-alva

Post on 12-Jun-2015

1.413 views

Category:

Documents


3 download

DESCRIPTION

El tema central de este trabajo es la aplicabilidad de los conceptos y técnicas de Gestión del Conocimiento en el ámbito particular de las Líneas de Productos Software

TRANSCRIPT

Page 1: Gestion del Conocimiento en el Desarrollo de Software

GESTION DEL CONOCIMIENTO EN EL PROCESO DE DESARROLLO DEL SOFTWARE

 Escuela Profesional de Ingeniería Informática UNIVERSIDAD NACIONAL DE TRUJILLO

Resumen: el tema central de este trabajo es la aplicabilidad de los conceptos y técnicas de Gestión del Conocimiento en el ámbito particular de las Líneas de Productos Software. Se presentan aquí las motivaciones del tema elegido, las actividades realizadas para la definición y el ajuste del alcance del trabajo, así como las referencias a muchos artículos técnicos que surgieron a partir del trabajo y que fueron aceptados para su presentación y publicación en las conferencias a las que fueron enviados. Se presentara una definición de lo que significa la gestión de conocimiento en una organización, junto con argumentos que soportan el por qué es importante la gestión de conocimiento en la ingeniería de software. Finalmente se expone una iniciativa que se está llevando a cabo para desarrollar una herramienta que pretende aportar a la gestión de conocimiento en un grupo de desarrollo de software.

1. INTRODUCCIÓN En el presente artículo se abordan diferentes aspectos teóricos que contribuyen a fomentar el conocimiento en la temática del Talento Humano y del rol que este desempeña en el proceso de Innovación Tecnológica y el éxito Organizacional, proponiéndose un modelo de Gestión del Talento Humano que transita por varias etapas, donde cada una de ellas se relacionan entre sí para lograr la sinergia funcional del sistema. Las Organizaciones modernas se desarrollan en un entorno altamente cambiante, donde las tecnologías caducan rápidamente y con ellas sus ventajas de ingreso y competitividad, dejando atrás toda una infraestructura creada para tal efecto, poniendo a las Organizaciones en puntos críticos para mantenerse en el mercado. Enfrentar esta situación es un elemento constante del futuro de las Organizaciones, las cuales están obligadas a buscar alternativas para superarlas y mantenerse con vida en la competencia internacional, alcanzando niveles de eficiencia, eficacia y calidad estandarizados para la actividad que desempeñan. La respuesta a esta incertidumbre se ha convertido en el motor impulsor de todas las tendencias teórico – prácticas que se expresan en la literatura actual con respecto al sector empresarial, las cuales buscan trazar modelos que las ayuden a superar esa situación tan convulsa. Lograr la más acertada es la clave del éxito. En el actual contexto competitivo, globalizado e incierto el mayor valor de una empresa se centra en sus competencias esenciales, es decir, en su capital intelectual. Hoy en día, la teoría económica de la empresa resalta que para la formulación de estrategias de éxito, estas se deben basar en el conocimiento más que en la gestión de los activos tangibles de la empresa. En una empresa existen dos tipos diferentes de competencias, una en la que se desarrolla el capital intelectual de operaciones y el otro orientado al desarrollo del capital intelectual de innovación. Las operaciones de

la empresa se organizan a través de las unidades de negocios, en cambio los activos de innovación se organizan por medio de los proyectos. En ambas actividades las tecnologías de la información y comunicaciones son un medio fundamental para transferir, analizar, compartir y almacenar los conocimientos explícitos o las informaciones. El presente estudio tiene por principal objetivo analizar el capital intelectual de innovación e identificar las competencias y las capacidades esenciales, viendo la importancia de estas en el desarrollo de los proyectos de innovación y en la creación de nuevos conocimientos, todo esto en beneficio de la generación de ventajas competitivas sostenibles.

2. INTRODUCCION DE LA GESTION DEL CONOCIMIENTO

La definición de conocimiento del diccionario de la real academia de la lengua español es: “acción y efecto de conocer.” conocer: “averiguar por el ejercicio de las facultades intelectuales la naturaleza, cualidades y relaciones de las cosas.”. aunque algunas otras definiciones generales de conocimiento se pueden encontrar en la literatura, es natural que la definición que tenga cada organización sea diferente debido a que éste es un concepto subjetivo, en principio, como explican bonifacio, bouquet, & traverso en, porque su creación consiste en un acto subjetivo: el de la interpretación de información por esto no existe una única manera de gestionar el conocimiento, es necesario que una organización logre definir el concepto de conocimiento adecuadamente (de lo contrario podría crear sistemas que nadie utiliza como zephyr presentado en), sujeto a la manera como se hacen los procesos, a la cultura de trabajo que exista, a la industria a la que pertenezca, etc.

Page 2: Gestion del Conocimiento en el Desarrollo de Software

El conocimiento se puede subdividir en dos categorías, el conocimiento tácito (o implícito) y el conocimiento explícito. En los términos que lo pone Stewart en el conocimiento explícito es aquel que ya existe en forma de artefactos v.gr., documentos, reportes de trabajo, de productos, etc. Por otro lado, el conocimiento implícito es aquel que está en la mente de las personas y en la experiencia. En principio el conocimiento explícito es más fácil de gestionar que el implícito porque puede ser codificado y articulado de manera más fácil. Es más difícil que aquel que tiene conocimiento en su cabeza (por ejemplo el saber cómo montar una bicicleta) lo pueda expresar, codificar y compartir. Esto sucede porque cada persona tiene un marco de referencia propio a través del cual interpreta y expresa el conocimiento. Lograr mediar entre dos individuos para sentar acuerdos sobre su base de conocimiento es complicado.

¿Qué es gestión de conocimiento? Thomas Davenport lo explica como “un método para simplificar el proceso de compartir, distribuir, capturar, crear y entender el conocimiento en una compañía”. Citado en el mismo trabajo, K.M. Wiig (1995) resalta otros dos objetivos importantes de la gestión de conocimiento: (1) descubrir, desarrollar, mantener y asegurar los recursos intelectuales y de conocimiento de una organización y (2) determinar el conocimiento y la experiencia requerida para desarrollar tareas, organizarlo, hacer que el conocimiento necesario esté disponible, codificado y distribuido entre los actores relevantes. En general se puede hablar de cuatro procesos en la gestión del conocimiento dentro de cualquier organización: (1) desarrollar nuevo conocimiento (2) asegurar el conocimiento existente (3) distribuir el conocimiento y (4) combinar el conocimiento disponible. 3. LA INNOVACION Y LA GESTION DEL

CONOCIMIENTO Cuando hablamos de gestión del conocimiento tendemos a pensar en sistemas cuyo objetivo se centra en captar, organizar y distribuir la información y el conocimiento de la organización. Pocas veces pensamos que la gestión del conocimiento también sirve para generar nuevo conocimiento, es decir para innovar. En este artículo se explica que ambos conceptos persiguen un mismo fin y que, por lo tanto, deben andar parejos a nivel organizativo. Se dan algunas claves prácticas sobre cómo aprovechar la gestión del conocimiento y las

posibilidades de internet como vehículos para generar innovación. Se analiza el caso 3M. Cuando hablamos de gestión del conocimiento tendemos a pensar en sistemas cuyo objetivo se centra en captar, organizar y distribuir la información y el conocimiento de la organización. Pocas veces pensamos que la gestión del conocimiento también sirve para generar nuevo conocimiento, es decir para innovar. Normalmente entendemos la innovación como costosos procesos de investigación, desarrollo, adquisición y transferencia de tecnología aplicada al desarrollo de productos o al proceso productivo. Pero innovar consiste también en hacer lo que ya hacemos pero de forma diferente, más efectiva, aplicando la creatividad y el aprendizaje. Por lo tanto, es mucho más lo que une la gestión del conocimiento con la innovación de lo que las separa. Innovar consiste en obtener beneficios utilizando los recursos del conocimiento. Materializar los avances que se derivan del conocimiento acumulado, lo que se concreta en la creación, introducción o venta y difusión de nuevos y mejorados procesos, productos en la sociedad. Gestionar el conocimiento consiste en formalizar los procesos, políticas y herramientas orientados a la gestión y el desarrollo de los activos intelectuales de la organización, con el objetivo de transformar el conocimiento acumulado en valor y beneficios tangibles para la organización. Se entiende así que ambos conceptos persiguen un mismo fin: la generación de beneficios para la organización y/o la sociedad a través de mejoras en procesos, productos y servicios generados gracias al conocimiento. La innovación es como una aventura, una idea que evoluciona y se desarrolla en la mente de la gente, que crece a través de la comunicación y el trabajo en equipo hasta que se convierte en una realidad tangible. La gestión de la innovación implica poder identificar esas ideas, hacer que fluyan, se transfieran y que se desarrollen hasta que se conviertan en nuevos productos, nuevos procesos, nuevos servicios. Ese poder identificar ideas, hacer que fluyan y se transfieran es precisamente uno de los objetivos de la gestión del conocimiento. 2.1. Elementos facilitadores: • La capacidad de la organización para reconocer el

valor de la información y el conocimiento externo como elemento crítico para mejorar sus capacidades de innovación.

Page 3: Gestion del Conocimiento en el Desarrollo de Software

• Una cultura organizativa que da importancia a los encuentros cara a cara y a las prácticas que favorecen la comunicación interpersonal formal e informal.

• La voluntad de emplear las tecnologías de la información como elemento facilitador de la eficiencia y de la comunicación.

• Una política de reconocimiento que favorece la implicación de todos los profesionales en la generación y difusión de nuevas ideas y conocimientos.

2.1. Factores Críticos para la Innovación y la Gestión

del Conocimiento

Considerar su importancia estratégica • Incluirlo en la base estratégica de la organización.

En los discursos y mensajes de la alta dirección. • Es un proceso top-down. Incluir a la alta dirección

como sponsor y campeón. Implicar a los de arriba.

Gestionarlo como un proyecto y un proceso • Gestiónalo como un proceso sistemático. • Poner objetivos ambiciosos y combinarlos con

pasos pequeños y realizables. • Focalizarse en los resultados y aprender del propio

proceso para retroalimentarlo. • Medir los resultados y comunicarlos. Identificar

los stakeholders y personalizar la comunicación. No subestimar la importancia de la cultura como facilitador o barrera • Crear un clima para la colaboración y el intercambio

de ideas. Y para la creatividad. • Potenciar los valores que animen y faciliten la

innovación y la mejora continua. • Romper esquemas. Abandonar la verdad aceptada.

Pensar out-of-the box. Focalizarse en las personas como instrumento básico • Hay que buscar instrumentos para motivar a que las

personas se responsabilicen del proceso. • Poner en marcha los mecanismos para que las ideas

circulen también de abajo arriba. • Delegar la responsabilidad en todos y cada uno de los

miembros de la organización. Hacer a todos responsables.

• Tomar como crítico el proceso de selección como herramienta de adquisición de talento.

Mirar hacia fuera. Dar para recibir • Incluir a los clientes, proveedores e incluso

competidores en nuestra red de conocimiento e innovación.

• Participar activamente en foros, asociaciones, redes de transferencia, proyectos de I+D, etc.

• Ser humildes pero ambiciosos. Huir del enfoque “no hecho aquí”. Buscar la reutilización como valor.

• Utilizar la red como herramienta de difusión y retroalimentación de conocimiento.

4. GESTIÓN DEL CONOCIMIENTO EN PROYECTOS DE SOFTWARE

Un concepto que, sorprendentemente y por más que se pregunta a personas que trabajan en diferentes empresas, se deja de lado en muchas empresas de desarrollo de software: la gestión del conocimiento. Y dado el sector en el que nos movemos, parece un punto clave. Me parece que cualquier empresa debería ser capaz de responder a: • ¿Quién utilizó, qué tecnología, cuándo? • ¿Quién ha desarrollado qué producto y, por tanto,

conoce su Lógica de Negocio? • ¿Qué pasa si el programador X se marcha de la

empresa? ¿se lleva todo su conocimiento? ¿Quién más lo tiene?

• ¿Todo el mundo debe tener los mismos conocimientos? ¿Tenemos diferentes perfiles?

• ¿Cuál va a ser la estrategia para que un recién salido de la facultad llegue a tener los mismos conocimiento que un Senior de su perfil?

Dejó aquí un artículo interesante y las técnicas básicas que propone: Pair Programming: ayuda a revisar el código, tomar decisiones de diseño, y trasvasar conocimiento entre programadores. Wiki: es una manera ágil y rápida de compartir documentación, modificarla, y mantenerla totalmente actualizada (sabiendo quién hizo qué cambios). Coding Standards Document: si todo el mundo escribe código igual, el entendimiento es mucho más sencillo y evita que un código solo sea mantenible por quien lo programó. Mailing List: o montarte “un twitter” para el proyecto (con Prologue o con lo que sea) ayuda a preguntar y responder dudas sobre el proyecto rápidamente. Hacer saber a la gente que has arreglado un problema: esto se refiere a que una persona pueda entra en el código programado por otra y modificarlo para solucionar un problema, comentándoselo luego a los demás, y depende de la manera en que gestiones el código. 5. ¿QUÉ IMPORTANCIA TIENE LA GESTIÓN DE

CONOCIMIENTO EN LA INGENIERÍA DE SOFTWARE?

Page 4: Gestion del Conocimiento en el Desarrollo de Software

A diferencia de otras disciplinas de la ingeniería, la ingeniería de software, como explica Sommerville, se ocupa de teorías, métodos y herramientas necesarias para desarrollar software y no de materiales regidos por leyes físicas o por procesos de manufactura. El conocimiento está implícito todo el tiempo en la naturaleza de los procesos y resultados, debido a que el software está compuesto, de manera simplificada, de ideas plasmadas en código: es intangible. La gestión de conocimiento en la ingeniería de software es necesaria por la naturaleza del proceso mismo. En se muestra cómo el desarrollo de software es un proceso cognitivo que depende fuertemente del conocimiento y por esto mismo es indispensable gestionarlo. Detallemos el proceso más a fondo para entender varias de sus caracterizaciones que resaltan su relación con el conocimiento y por ende, la importancia que tiene gestionarlo: (1) El proceso de desarrollo de software necesita conocimiento de diferentes dominios; por lo menos de dos, el de la computación y el de dominio de aplicación. (2) El conocimiento que se utiliza para construir una aplicación está distribuido entre el desarrollador y el mundo exterior y es necesario aprender a integrar diferentes fuentes de conocimiento en el mundo para lograr desarrollar la solución. (3) El objetivo del proceso de desarrollo no está completamente definido al comienzo, se va determinando dinámicamente. (4) El proceso de desarrollo es una conversación continua entre las mentes humanas y la construcción que se va logrando (es un proceso cíclico). (5) El proceso de desarrollo se distribuye a lo largo de un grupo social (incluso a través de barreras geográficas) y a lo largo del tiempo. (6) En el proceso de desarrollo el conocimiento está distribuido en todo el grupo en la medida en que cada desarrollador aporta un poco al grupo para complementar el conocimiento. Entendiendo la relación que tiene el proceso de construcción de software con el conocimiento, se puede inferir entonces que es necesario gestionar el conocimiento para poder lograr los siguientes objetivos: (1) entender el conocimiento que existe en el dominio de la aplicación (2) brindar a los desarrolladores una forma fácil y eficiente de encontrar la información que necesitan para el desarrollo (3) brindarle al grupo de desarrollo una manera de que pueda hacer seguimiento de los objetivos planteados al comienzo del proceso de desarrollo, que se puedan registrar los cambios que han surgido y las implicaciones que estos cambios han forzado (4) brindar un apoyo a los desarrolladores que le permita a cada uno retroalimentar y construir sobre lo que ya se ha

hecho y sobre retroalimentaciones de otros miembros del grupo (5) brindar un apoyo en términos de colaboración entre los diferentes miembros del grupo para que complementen su conocimiento y construyan sobre los resultados producto de las interacciones. Pero no sólo es el proceso de desarrollo de software el qué depende fuertemente del conocimiento, es también la organización como tal. Es necesario que las empresas que desarrollan software reconozcan que el conocimiento es su ventaja competitiva y que es la base para la innovación, es por lo tanto uno de sus más valiosos activos. Además la industria de software, según afirma Hein (1998), que la rotación de empleados en este sector asciende hasta un 40% anual. Entendiendo que el conocimiento es un activo importante para las empresas que desarrollan software ¿cómo evitar que el conocimiento se deprecie? y ¿cómo retener ese conocimiento que en potencia se fugaría con el empleado que se va? Ambas preguntas son un ejemplo de las problemáticas que la gestión de conocimiento trata de resolver en el ámbito de la ingeniería de software. Algunas otras problemáticas concretas que se han identificado y que se mencionan para un caso de estudio en una empresa alemana de software: 1. Los desarrolladores tienen problemas adaptándose a diferentes plataformas de tecnología y herramientas. 2. Los desarrolladores toman mucho tiempo antes de obtener buenas habilidades de programación y de administración de proyectos. 3. El conocimiento que un desarrollador genera, por ejemplo al resolver un problema específico, no se dispersa a otros desarrolladores u otros grupos, haciendo que el mismo problema se resuelva una y otra vez desde el comienzo y que se repitan los mismos errores. Finalmente, otras problemáticas que he detectado trabajando para el proyecto CUPI3 (Mejoramiento en la enseñanza/aprendizaje de software) de la Universidad de los Andes: 1. Las decisiones que se toman en la etapa de diseño no se registran de manera formal y explícita argumentando con justificaciones claras y concisas. 2. Las decisiones que se toman en la etapa de diseño no se relacionan con los diferentes artefactos generados durante esta etapa (diagramas de diseño, diagramas de clase, casos de uso, diagramas de secuencia, entre otros). Con el fin de abordar poco a poco el problema de la gestión de conocimiento en la práctica, he conformado un grupo junto con otros cuatro estudiantes en el cual hemos comenzado a construir una herramienta para solucionar las últimas problemáticas mencionadas. El grupo de

Page 5: Gestion del Conocimiento en el Desarrollo de Software

desarrollo fue creado únicamente con este propósito y bajo el marco del Proyecto de Mitad de Carrera del departamento de Ingeniería de Sistemas de la Universidad de los Andes. A continuación se muestra el trabajo. 6. SELECCIONANDO EL MODELO DE

DESARROLLO Ningún modelo es bueno o malo por si solo en la aplicación y evaluación para cada situación específica, teniendo en cuenta parámetros específicos y un buen criterio de evaluación, se podrá determinar cuál es el más apropiado a cada ocasión. Un modelo de desarrollo de software se compone de varios elementos que ameritan atención particular y que fueron ya expuestos presentamos en este artículo una serie de parámetros con los cuales se puede llegar a determinar cuál puede ser el modelo a utilizar en cada situación. Lo primero que debemos determinar es que la decisión nunca será genérica, ni se podrá aplicar a todas las situaciones, por lo que el análisis siguiendo las pautas que a continuación relacionamos habrá que efectuarlo a cabalidad para cada decisión que se requiera tomar. se parte de la premisa de que bajo cualquier modelo de software se puede dar solución a la problemática que se plantee, por lo que este acercamiento a una posible decisión carece de viabilidad. Al decidir sobre el modelo de desarrollo de software, hay una serie de parámetros, que al responderlos, darán una mayor calificación a un modelo sobre el otro, reiteramos, en cada situación particular. Respaldo: este parámetro permite determinar quién es el responsable para resolver algún problema o falla que se presente. es claro que el desarrollo de software no para en el desarrollo en si mismo. es indispensable contar con un proceso de solución de fallas, bien sea interno, o a través de un proveedor. Evaluación y Calidad: sobre cualquier modelo que se trabaje, es indispensable encontrar un procedimiento de evaluación formal de evaluación y certificación del producto desarrollado, un proceso que ojala también esté certificado de tal manera que estemos seguros que el producido es de buena calidad y cumple con las especificaciones respectivas. el proceso de desarrollo de software ya tiene incorporado muchos elementos como el control de versiones y cambios, controles de calidad en ambientes simulados, entre otros. pero si no se utilizan, no tienen el efecto que deben tener y la solución a implantar puede carecer de medidas de calidad suficiente para la tarea a emprender.

Entrenamiento: ya es sabido que la aplicación por si sola no hace ningún impacto en la productividad de la empresa. es indispensable que se acompañe de un proceso de entrenamiento en el uso de la aplicación, y recientemente se ve la participación de empresas de servicios de consultoría que acompañan el proceso de entrenamiento en la aplicación, en entrenamiento al personal en procedimientos y forma de trabajo, agregando valor de experiencias en empresas similares. Estándares: no dejaremos de insistir en la necesidad de trabajar con estándares de industria, más aún cuando el requerimiento de integración inclusive con elementos que todavía no han sido inventados es de obligatorio cumplimiento. en el proceso de evaluación del modelo debe incluirse un análisis minucioso de los estándares tanto de desarrollo como de interconexión de los componentes, y además de la plataforma tecnológica que debe utilizar. Soporte: a menos que el desarrollo se interno, el soporte a la aplicación posterior a su implementación es otro factor clave en la decisión. los cambios de versión, así como el soporte en cambios de legislación donde aplique se hacen indispensables en aplicaciones como la contabilidad o el manejo de los recursos humanos. Desarrollo Futuro: si una aplicación se requiere para una solución muy básica, como por ejemplo el pesaje en una báscula, realmente el desarrollo futuro de la aplicación no tiene mucha aplicación. si se trata en cambio de un erp al cual posteriormente se le quiere agregar funcionalidad de autoservicio en la web por parte del cliente, y luego para los proveedores, y agregar crm y scm, es indispensable que en los planes del proveedor también haya una línea clara de desarrollo hacia estos objetivos. Costo: no podía faltar el factor de costo en la evaluación, pero en esta evaluación hay que tener especial cuidado de no ser facilistas mirando solo el costo de inversión inicial, sino analizando el costo total de propiedad. el costo total de propiedad contempla todos los costos fijos y variables, no solo iníciales sino en un horizonte de tiempo que se estima en cinco años. Estos son algunos parámetros, y seguro cada lector podrá agregar uno o dos adicionales que permitan todavía tomar mejor la decisión. no podemos terminar sin hacer énfasis que ésta evaluación no es subjetiva, debe ser completamente objetiva con las métricas y criterios de evaluación para cada caso. Para cada parámetro hay que definir la condición deseada, y la condición ideal, y contra estas condiciones calificar la oferta de cada modelo sugerimos utilizar un sistema de calificación de 1 punto

Page 6: Gestion del Conocimiento en el Desarrollo de Software

para quien no cumpla cada parámetro, tres puntos para el modelo que cumpla, y cinco puntos para el que supere ampliamente el requerimiento. También se sugiere darle pesos específicos a cada uno de los parámetros en conjunto, dado que en algunos casos pesará mucho el soporte, y en otro los costos. Ningún modelo es bueno o malo por sí solo. En la aplicación y evaluación para cada situación específica, teniendo en cuenta lo parámetros arriba indicados, y un buen criterio de evaluación, se podrá determinar cuál es el más apropiado a cada ocasión. 7. PROPUESTA METODOLOGICA La etapa de diseño, en el proceso de desarrollo de software, es el pilar sobre el cual se llevan a cabo las etapas posteriores. Consideramos de suma importancia poder gestionar el conocimiento que se genera en esta etapa por ser el que estará siempre en profunda transformación y será necesario revisarlo, aprender de él y compartirlo para poder construir un producto de alta calidad y de manera eficiente. De hecho, el conocimiento que se genera en esta etapa no es únicamente de suma importancia para el resto de etapas, sino también para los ciclos que continúan. Dado que el proceso de construcción de software es un proceso cíclico, es necesario poder utilizar el conocimiento que se ha generado previamente para avanzar en el proceso: “pararse en los hombros del gigante” como dijo Issac Newton. Como se mencionó al final de la sección anterior, se conformó un grupo para que construyera una herramienta que permitiera apoyar la solución de las dos últimas problemáticas detectadas en el proceso de desarrollo de software:

1. Las decisiones que se toman en la etapa de diseño no se registran de manera formal y explícita argumentando con justificaciones claras y concisas. 2. Las decisiones que se toman en la etapa de diseño no se relacionan con los diferentes artefactos generados durante esta etapa (diagramas de diseño, diagramas de clase, casos de uso, diagramas de secuencia, entre otros). Hay que notar que la solución de estas problemáticas implicaría apoyar únicamente dos de los procesos de gestión de conocimiento que se identificaron anteriormente en la sección dos: asegurar el conocimiento existente y distribuir el conocimiento. En otras palabras, el proyecto no contempla los procesos de desarrollar nuevo conocimiento, ni de combinar el conocimiento existente.

Para el momento en que se escribe este artículo, únicamente el primer problema (registrar las decisiones) ha sido tratado, implementado y probado. A continuación se describe de qué se trata la solución. Se decidió que la herramienta SKM (Software Knowledge Management) sería una herramienta web basada en ontologías. La decisión de que fuera web se tomó con el fin de que: (1) se pueda integrar a otras herramientas de gestión de conocimiento (generalmente implementadas sobre una intranet) (2) de que el conocimiento se pueda registrar, modificar y consultar desde cualquier computador con conexión a internet. La decisión de que fuera basada en ontologías proviene (1) del artículo de Sure, en donde explica cómo las ontologías han demostrado ser la respuesta correcta para estructurar y modelar problemas de conocimiento (2) de un interés personal de los integrantes del grupo en investigar este tipo de aplicaciones, dado que es uno de los pilares de la prometedora Web Semantica según Berners-Lee. Para esto, se propuso los objetivos definidos en la Fig. 1.

Figura 1 Objetivos planteados para la realización de SKM.

El primer paso fue desarrollar la ontología que se utilizaría para registrar o asegurar el conocimiento. Para esto se utilizó Protégé, un editor de ontologías de la Universidad de Stanford, USA. La ontología se desarrolló en OWL [10], el lenguaje estándar hoy en día para dicha tarea. El resultado se puede ver en el Anexo I escrito en OWL, o en la Fig.2 como una representación gráfica.

Page 7: Gestion del Conocimiento en el Desarrollo de Software

Figura 2 Representación gráfica de la ontología

El segundo paso fue entrar a definir ¿qué información sería deseable recolectar con respecto a una decisión de diseño? Y se llegó al siguiente formato expuesto en Fig. 2 con un ejemplo. Este formato está implementado en una interfaz html.

Identificador JD-6 Nombre Estructura de datos para contener discos y

canciones Categoría Estructuras de datos Decisión La estructura que contendrá tanto los discos

como las canciones será un ArrayList. Justificación Se utiliza esta estructura simplemente para

facilitar el entendimiento del ejemplo a los estudiantes ya que están acostumbrados a utilizar esta estructura en cursos pasados.

Figura 3 Formulario para registrar decisiones de diseño.

Tanto el identificador como el nombre logran diferenciar con precisión una decisión de otra. La categoría permite agrupar las decisiones en conjuntos lógicos como por ejemplo: decisión de estructuras de datos, decisión de arquitectura, decisión de las relaciones de arquitectura, decisión de persistencia, decisión de algorítmica, entre otras. Finalmente, la justificación obliga al grupo a considerar el por qué de una decisión, a justificarla con argumentos fuertes (patrones, arquitecturas, complejidad), proceso que muchas veces obviamos como ingenieros de software. El último paso fue entrar a definir cómo mostrar el conocimiento registrado. Para esto decidimos utilizar la herramienta Exhibit [8] de la universidad de MIT, que es muy flexible porque permite al usuario utilizar diferentes filtros para consultar los datos. Para poder utilizar esta herramienta fue necesario procesar el OWL para transformar el conocimiento escrito en términos de la ontología a JSON [9], el lenguaje con el cual se construye el resultado en Exhibit. Todo el proceso se muestra en Fig. 4.

Figura 4 Proceso para registrar una decisión

Como se mencionó anteriormente, hasta el momento SKM sólo resuelve una de las problemáticas detectadas, registrar las decisiones. Las funcionalidades de (1) registrar las decisiones de diseño de acuerdo a la ontología y de (2) visualizarlas utilizando Exhibit, son las únicas que se encuentran implementadas y probadas. El siguiente paso para cumplir con los objetivos planteados por el grupo es permitir que se puedan relacionar las decisiones con otros artefactos de conocimiento i.e. código, diagramas UML, imágenes, documentos, etc.

CONCLUSIONES La Gestión del Conocimiento es un factor clave de éxito para las organizaciones del Siglo XXI. Impulsados por objetivos estratégicos de generar, compartir e innovar; los practicantes de la GC utilizan herramientas que permiten la extracción y aplicación de los recursos intangibles de la organización. Este documento muestra de manera general, algunos de los conceptos, herramientas y aplicaciones fundamentales puestos en práctica en las organizaciones actuales y que muestran la validez de las mismas. REFERENCIAS [1] Clements, P., Northrop, L., Software Product Lines. Practices and Patterns, Boston, Addison-Wesley, 2001. [2] Qualdev http://qualdev.uniandes.edu.co Grupo de desarrollo que pertenece al Grupo de Investigación en Construcción de Software del Departamento de Sistemas y Computación de la Universidad de los Andes, Bogotá, Colombia. [3] Ye, Y. (2006). Supporting Software Development as Knowledge-Intensive and Collaborative Activity. (A. Press, Ed.) Proceedings of the 2006 international workshop on Workshop on interdisciplinary software engineering research, 15-22. [4] Mas M R, Febles J P, Orue M y colaboradores. (2001) Experiencias de la Aplicación de la Ingeniería de

Page 8: Gestion del Conocimiento en el Desarrollo de Software

Software en Sistema de Gestión. Revista Cubana de Informática Médica No. 1, 2001 [5] Jorge A Quiroga. (2007) Gestión de Conocimiento en Grupos de Desarrollo de Software, Universidad de los Andes, Bogota, Colombia; Paradigma - Revista Electrónica en Construcción de Software. [6] Sure, Y., Staab, S., & Studer, R. (2002). Methodology for Development and Employment of Ontology based Knowledge Management Applications. ACM SIGMOD Record, 31 (4), 18-23. [6] OWL – Web Ontology Language. http://www.w3.org/TR/owl-features/