The best article we wrote in our entire lives
Transcripción
The best article we wrote in our entire lives
Gestión de conocimiento en grupos de desarrollo de software Jorge A. Quiroga [email protected] Universidad de los Andes, Bogotá, Colombia. Resumen. La gestión de conocimiento es una preocupación vigente de las organizaciones hoy en día. Esto es especialmente cierto en el caso de las organizaciones que producen y/o mantienen software dado que estas son actividades que tienen una relación muy fuerte con la creación y distribución del conocimiento. En este artículo se presenta 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. Palabras clave. Gestión de conocimiento, Ingeniería de Software, Ontología. 1 INTRODUCCIÓN La preocupación por la gestión de conocimiento ha existido desde hace muchos años y se puede rastrear hasta los tiempo de Peter Drucker en 1969 [16]. En el mundo ha habido una creciente preocupación por otorgarle cada vez más importancia al conocimiento en las organizaciones dándole un valor importante como activo [13][16]. Según plantea Skyrme en [13], una de las razones por las cuales esto ha sucedido, es porque el valor de una organización está representado por los activos intangibles – la gente, el know-how, las marcas, patentes, licencias, etc. En el caso de las empresas que desarrollan software es aun más evidente el gran valor que aportan los activos intangibles, en principio por la misma naturaleza del proceso de producción: la construcción de software es una actividad cognitiva y fuertemente dependiente del conocimiento [18]. Sin embargo, las soluciones no son tan evidentes como el problema. Las diferentes referencias ([7],[13],[14],[17]) presentan estudios de variadas aproximaciones que se han utilizado y se encuentran tanto casos de éxito como casos de fracaso. El objetivo de este artículo es explicar qué significa la gestión de conocimiento, exponer por qué es importante en la ingeniería de software y finalmente presentar una inciativa real para el desarrollo de una aplicación (SKM: Software Knowledge Management) que ayude a gestionar el conocimiento en una organización de desarrollo de software. La aplicación PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE 2 [email protected] será evaluada por un grupo de desarrollo real, el grupo QualDev del Grupo de Investigación de Construcción de Software de la Universidad de los Andes [12]. El artículo está organizado de la siguiente manera. En la parte dos, se presenta una definición de la gestión de conocimiento. En la parte tres, se explica por qué es importante la gestión de conocimiento en el desarrollo de software. En la parte cuatro, y basándose en las anteriores, se presenta una iniciativa real que está en proceso para la construcción de la aplicación SKM. Esta aplicación pretende ayudar a gestionar el conocimiento en los grupos de desarrollo de software, específicamente en la etapa de diseño del proceso de construcción. Finalmente en la parte cinco se concluye y se presentan posibles investigaciones futuras. 2 INTRODUCCIÓN A LA GESTIÓN DE CONOCIMIENTO La definición de conocimiento del diccionario de la Real Academia de la Lengua Español [6] 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 [3], 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 [4]), sujeto a la manera como se hacen los procesos, a la cultura de trabajo que exista, a la industria a la que pertenezca, etc. [4]. El conocimiento se puede subdividir en dos categorías, el conocimiento tácito (o implícito) y el conocimiento explícito [3][4][7]. En los términos que lo pone Stewart en [16], 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 [3][16] 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 [3]. ¿Qué es gestión de conocimiento? Thomas Davenport citado en [7] 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. VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 3 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 [5]. 3 ¿QUÉ IMPORTANCIA TIENE LA GESTIÓN DE CONOCIMIENTO EN LA INGENIERÍA DE SOFTWARE? A diferencia de otras disciplinas de la ingeniería, la ingeniería de software, como explica Sommerville en [15], 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 [18] 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 siguiente 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 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 4 [email protected] 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. Como se menciona en [1] 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) citado en [1], 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 en [7] 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 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. VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 5 4 SKM: UNA PROPUESTA CONCRETA PARA ABORDAR EL PROBLEMA La etapa de diseño, en el proceso de desarrollo de software, es el pilar sobre el cuál 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 transformacion 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 continuan. 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) y (2) de que el conocimiento se pueda registrar, modificar y consultar desde cualquier computaor con conexión a internet. La decisión de que fuera basada en ontologías proviene (1) del artículo de Sure [17], en donde explica cómo las ontologías han demostrado ser la respuesta correcta para estructurar y modelar problemas de conocimiento y (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 Semantic Web según Berners-Lee [2]. Para esto, el grupo se propuso los objetivos definidos en la Fig. 1. PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 6 [email protected] 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é [11], 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. Decisión de Diseño Decisión de Arquitectura Jorge A. Quiroga elaboradaPor Justificación de Arquitectura Justificación2 Decisión2 justificadoPor Decisión1 Decisión de Persistencia elaboradaEn Justificación1 Justificación de Persistencia 9 Enero 2007 Justificación3 Decisión3 Decisión4 texto Justificación4 … … “Se decidió implementar el patrón MVC…” Figura 2 – Representación gráfica de la ontología VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE texto “MVC permite. ..” Gestión de conocimiento en grupos de desarrollo de software 7 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 mucha 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 cuál 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 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 8 [email protected] decisiones con otros artefactos de conocimiento i.e. código, diagramas UML, imágenes, documentos, etc. Si el lector está interesado en hacerle un seguimiento futuro a la herramienta, o en conocer un poco más acerca de la investigación y el desarrollo que se está haciendo, puede ingresar a la página http://skm.uniandes.edu.co 5 CONCLUSIONES Y TRABAJOS FUTUROS Varias definiciones se pueden encontrar del término conocimiento; estas dependen del contexto en el cual se utilice. Cuando hablamos de conocimiento en el contexto de las organizaciones, traspasa la barrera del contexto y su significado llega incluso a diferir entre una organización y otra. En el estudio realizado previamente, se expuso la fuerte relación que existe entre el conocimiento y las organizaciones relacionadas con la construcción de software. Se mostró también, cómo diferentes procesos dentro de estas organizaciones están ligadas a la gestión de conocimiento y la gran atención que últimamente este tema ha venido recibiendo y debe recibir en una economía de conocimiento. Con el fin de ahondar más en el tema y de explorarlo en la práctica, se está desarrollando la herramienta SKM que pretende ayudar a gestionar el conocimiento que se crea en la etapa de diseño, más específicamente, a gestionar las decisiones y justificaciones de diseño que surgen durante el proceso de creación de software. Sin embargo, hay que resaltar que una de las conclusiones más claras que destacan la mayoría de referencias, es el hecho de que la gestión de conocimiento debe abordarse de una manera interdisciplinaria. No debe depender únicamente de una herramienta basada en tecnologías de información y comunicación (TICs), debe contemplar otros aspectos de la organización como su cultura, la definición de sus procesos, la definición de sus objetivos, su estructura organizacional, entre otros. Es por esto que valdría la pena una futura investigación que contemple el estado del arte, no sólo enfocado en la parte de herramientas para la gestión de conocimiento, sino que comprenda una visión más amplía que permita formular propuestas íntegras. Con el fin de complementar esta pequeña investigación, se podrían utilizar métodos de observación y análisis en un estudio de campo, en diferentes grupos de desarrollo que se encuentren tanto en el ámbito académico como en el ámbito empresarial para preguntarse: ¿Cómo se está gestionando el conocimiento (en cuanto a procesos y herramientas) en las organizaciones que desarrollan software en Colombia? ¿Qué beneficios reales están brindando estas prácticas? ¿Qué complicaciones se han presentado? ¿Qué limitaciones se pueden observar en los procesos de desarrollo que la gestión de conocimiento pueda entrar a resolver? ¿Qué prácticas, procesos y herramientas han resultado útiles para gestionar el conocimiento en la práctica? Entre otras que habría que entrar a definir. En cuanto a la herramienta, se deja como trabajo futuro la solución al resto de las problemáticas identificadas en cuanto a gestión de conocimiento en grupos de desarrollo de software. SKM solo trata dos de estas, pero esto no significa que las otras sean menos relevantes. Igualmente habría que entrar a determinar cómo apoyar los dos procesos de VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 9 gestión de conocimiento que no se contemplaron en SKM: desarrollar nuevo conocimiento y combinar el conocimiento existente. 6 AGRADECIMIENTOS Gracias a la doctora Rubby Casallas del Grupo de Investigación en Construcción de Software de la Universidad de los Andes, quien motivó a formalizar el estudio de lo que en principio fue sólo un tema de interés, y quien aportó siempre al proyecto con su apoyo. Gracias al resto de miembros del grupo de SKM con quienes hemos venido haciendo tangible aquello que a veces logra enredársenos en nuestra mente. REFERENCIAS [1] Baskerville, R., & Jan, P.-H. (1999). Knowledge Capability and Maturity in Software Management. ACM SIGMIS Database , 30 (2), 26-43. [2] Bernes-Lee, T., Hendler, J., & Lassila, O. (2001, Mayo 17). The Semantic Web. Scientific American . [3] Bonifacio, M., Bouquet, P., & Traverso, P. (2002). Enabling Distributed Knowledge Management: Managerial and Technological Implications . (Novática, Ed.) The European Journal for the Informatics Professionals (http://www.upgrade-cepis.org) , 3, 23-30. [4] Bossen C. & Dalsgaard P. (2005). Conceptualization and Appropriation: The Evolving Use of a Collaborative Knowledge Management System. Proceedings of the 4th decennial conference on Critical computing: between sense and sensibility CC '05 ACM Press. Recuperado el 1ro de Marzo de 2007 de la base de datos The ACM Digital Library. [5] Chou D., Lin, B. (2002). Development of Web-based knowledge management systems. Human Systems Management Volumen 21, (3), p153. Recuperado el 1ro de Marzo de 2007 de la base de datos Business Source Complete adscrita a EBSCO. [6] Diccionario Real Academia de la Lengua Española. (n.d.). Diccionario de la lengua española - Vigésima segunda edición. Retrieved Abril 3, 2007, from http://www.rae.es [7] Dingsoeyr, T., & Conradi, R. (2002). A Survey of Case Studies of the Use of Knowledge Management in Software Engineering. International Journal of Software Engineering and Knowledge Engineering , 12 (4), 391-414. [8] Exhibit. http://simile.mit.edu/exhibit [9] JSON. http://www.json.org/ PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 10 [email protected] [10] OWL – Web Ontology Language. http://www.w3.org/TR/owl-features/ [11] Protégé Ontology Editor. http://protege.stanford.edu [12] 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. [13] Skyrme, D. J. (1998). Knowledge management solutions - the IT contribution. ACM SISGROUP Bulletin , 19 (1), 34-39. [14] Sole, D., & Applegate, L. (2000, Diciembre). Knowledge sharing practices and technology use norms in dispersed development teams. Proceedings of the twenty first international conference on Information systems ICIS '00 , 581-587. [15] Sommerville, I. (1996). Software Engineering. Addison Wesley. [16] Stewart, K. A., Baskerville, R., Storey, V. C., Senn, J. A., Raven, A., & Long, C. (2000). Confronting the assumptions underlying the management of knowledge: an agenda for understanding and investigating knowledge management. ACM SIGMIS Database , 31 (4), 41-53. [17] 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. [18] 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. VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 11 Anexos Anexo 1 – Ontología para describir decisiones que se toman en la etapa de diseño del proceso de desarrollo de software. <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns="http://quiroga.no-ip.org/softwareDesignOntology#" xml:base="http://quiroga.no-ip.org/softwareDesignOntology"> <owl:Ontology rdf:about=""/> <owl:Class rdf:ID="Justificacion_de_Visualización"> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Elemento_Visual"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Elemento_de_Interaccion"/> </owl:disjointWith> <rdfs:subClassOf> <owl:Class rdf:ID="Justificacion_Decision_de_Interfaz"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:ID="Decision_de_Elemento_Visual"> <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Elemento_de_Interaccion"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Visualización"/> </owl:disjointWith> <rdfs:subClassOf> <owl:Class rdf:ID="Decision_de_Interfaz"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Decision_de_Elemento_de_Interaccion"> <owl:disjointWith rdf:resource="#Decision_de_Elemento_Visual"/> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Visualización"/> </owl:disjointWith> <rdfs:subClassOf> <owl:Class rdf:about="#Decision_de_Interfaz"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:ID="Decision_de_Persistencia"> <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Arquitectura"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Estructura_de_Datos"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Algoritmica"/> </owl:disjointWith> PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 12 [email protected] <owl:disjointWith> <owl:Class rdf:ID="Decision_de_Relaciones_Arquitecturas"/> </owl:disjointWith> <rdfs:subClassOf> <owl:Class rdf:ID="Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Justificacion_Decision_de_Interfaz"> <rdfs:subClassOf> <owl:Class rdf:ID="Justificacion_de_Disenho"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:ID="Justificacion_de_Arquitectura"> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Estructuras_de_Datos"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Algoritmica"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Persistencia"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:ID="Justificacion_de_Relaciones_de_Arquitecturas"/> </owl:disjointWith> <rdfs:subClassOf> <owl:Class rdf:ID="Justificacion_Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Decision_de_Estructura_de_Datos"> <rdfs:subClassOf> <owl:Class rdf:about="#Decision_de_Kernel"/> </rdfs:subClassOf> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Arquitectura"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Algoritmica"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Decision_de_Persistencia"/> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Relaciones_Arquitecturas"/> </owl:disjointWith> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Relaciones_de_Arquitecturas"> <owl:disjointWith rdf:resource="#Justificacion_de_Arquitectura"/> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Estructuras_de_Datos"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Algoritmica"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Persistencia"/> </owl:disjointWith> <rdfs:subClassOf> VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 13 <owl:Class rdf:about="#Justificacion_Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Algoritmica"> <owl:disjointWith rdf:resource="#Justificacion_de_Arquitectura"/> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Estructuras_de_Datos"/> </owl:disjointWith> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Persistencia"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Justificacion_de_Relaciones_de_Arquitecturas"/> <rdfs:subClassOf> <owl:Class rdf:about="#Justificacion_Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Elemento_de_Interaccion"> <rdfs:subClassOf rdf:resource="#Justificacion_Decision_de_Interfaz"/> <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Elemento_Visual"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Justificacion_de_Visualización"/> </owl:Class> <owl:Class rdf:about="#Decision_de_Relaciones_Arquitecturas"> <rdfs:subClassOf> <owl:Class rdf:about="#Decision_de_Kernel"/> </rdfs:subClassOf> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Arquitectura"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Decision_de_Estructura_de_Datos"/> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Algoritmica"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Decision_de_Persistencia"/> </owl:Class> <owl:Class rdf:ID="Decision_de_Disenho"/> <owl:Class rdf:about="#Decision_de_Interfaz"> <rdfs:subClassOf rdf:resource="#Decision_de_Disenho"/> </owl:Class> <owl:Class rdf:about="#Decision_de_Algoritmica"> <rdfs:subClassOf> <owl:Class rdf:about="#Decision_de_Kernel"/> </rdfs:subClassOf> <owl:disjointWith> <owl:Class rdf:about="#Decision_de_Arquitectura"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Decision_de_Estructura_de_Datos"/> <owl:disjointWith rdf:resource="#Decision_de_Persistencia"/> <owl:disjointWith rdf:resource="#Decision_de_Relaciones_Arquitecturas"/> </owl:Class> <owl:Class rdf:about="#Decision_de_Kernel"> <rdfs:subClassOf rdf:resource="#Decision_de_Disenho"/> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Persistencia"> <owl:disjointWith rdf:resource="#Justificacion_de_Arquitectura"/> PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1 14 [email protected] <owl:disjointWith> <owl:Class rdf:about="#Justificacion_de_Estructuras_de_Datos"/> </owl:disjointWith> <owl:disjointWith rdf:resource="#Justificacion_de_Algoritmica"/> <owl:disjointWith rdf:resource="#Justificacion_de_Relaciones_de_Arquitecturas"/> <rdfs:subClassOf> <owl:Class rdf:about="#Justificacion_Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Decision_de_Visualización"> <owl:disjointWith rdf:resource="#Decision_de_Elemento_Visual"/> <owl:disjointWith rdf:resource="#Decision_de_Elemento_de_Interaccion"/> <rdfs:subClassOf rdf:resource="#Decision_de_Interfaz"/> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Estructuras_de_Datos"> <owl:disjointWith rdf:resource="#Justificacion_de_Arquitectura"/> <owl:disjointWith rdf:resource="#Justificacion_de_Algoritmica"/> <owl:disjointWith rdf:resource="#Justificacion_de_Persistencia"/> <owl:disjointWith rdf:resource="#Justificacion_de_Relaciones_de_Arquitecturas"/> <rdfs:subClassOf> <owl:Class rdf:about="#Justificacion_Decision_de_Kernel"/> </rdfs:subClassOf> </owl:Class> <owl:Class rdf:about="#Justificacion_Decision_de_Kernel"> <rdfs:subClassOf rdf:resource="#Justificacion_de_Disenho"/> </owl:Class> <owl:Class rdf:about="#Justificacion_de_Elemento_Visual"> <rdfs:subClassOf rdf:resource="#Justificacion_Decision_de_Interfaz"/> <owl:disjointWith rdf:resource="#Justificacion_de_Elemento_de_Interaccion"/> <owl:disjointWith rdf:resource="#Justificacion_de_Visualización"/> </owl:Class> <owl:Class rdf:about="#Decision_de_Arquitectura"> <rdfs:subClassOf rdf:resource="#Decision_de_Kernel"/> <owl:disjointWith rdf:resource="#Decision_de_Estructura_de_Datos"/> <owl:disjointWith rdf:resource="#Decision_de_Algoritmica"/> <owl:disjointWith rdf:resource="#Decision_de_Persistencia"/> <owl:disjointWith rdf:resource="#Decision_de_Relaciones_Arquitecturas"/> </owl:Class> <owl:DatatypeProperty rdf:ID="registrada_en"> <rdfs:domain> <owl:Class> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Decision_de_Disenho"/> <owl:Class rdf:about="#Justificacion_de_Disenho"/> </owl:unionOf> </owl:Class> </rdfs:domain> <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#date"/> </owl:DatatypeProperty> <owl:DatatypeProperty rdf:ID="identificado_por"> <rdfs:domain rdf:resource="#Decision_de_Disenho"/> <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/> </owl:DatatypeProperty> <owl:TransitiveProperty rdf:ID="justificada_por"> <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/> <rdfs:domain rdf:resource="#Decision_de_Disenho"/> VOL. 1 PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE Gestión de conocimiento en grupos de desarrollo de software 15 <rdfs:range rdf:resource="#Justificacion_de_Disenho"/> </owl:TransitiveProperty> </rdf:RDF> <!-- Created with Protege (with OWL Plugin 3.2.1, Build 365) http://protege.stanford.edu --> PARADIGMA - REVISTA ELECTRONICA EN CONSTRUCCIÓN DE SOFTWARE VOL. 1