<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1684-1859</journal-id>
<journal-title><![CDATA[Revista Cubana de Informática Médica]]></journal-title>
<abbrev-journal-title><![CDATA[RCIM]]></abbrev-journal-title>
<issn>1684-1859</issn>
<publisher>
<publisher-name><![CDATA[Universidad de Ciencias Médicas de La Habana]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1684-18592016000100006</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Arquitectura de software para el sistema de visualización médica Vismedic]]></article-title>
<article-title xml:lang="en"><![CDATA[Software Architecture for the Vismedic medical visualization system]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rodríguez Peña]]></surname>
<given-names><![CDATA[Alina Dolores]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Silva Rojas]]></surname>
<given-names><![CDATA[Luis Guillermo]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A00">
<institution><![CDATA[,Universidad de las Ciencias Informáticas Vertex Entornos Interactivos 3D ]]></institution>
<addr-line><![CDATA[La Habana Boyeros]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>15</day>
<month>06</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>15</day>
<month>06</month>
<year>2016</year>
</pub-date>
<volume>8</volume>
<numero>1</numero>
<fpage>75</fpage>
<lpage>86</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1684-18592016000100006&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1684-18592016000100006&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1684-18592016000100006&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En los últimos años la Arquitectura de Software se ha consolidado como una disciplina que intenta contrarrestar los efectos negativos que pueden surgir durante el desarrollo de un software, ocupando un rol significativo en la estrategia de negocio de una organización que basa sus operaciones en el software. En el presente trabajo se propone una arquitectura de software basada en la integración de los estilos arquitectónicos: Arquitectura basada en componentes, Arquitectura basada en capas y Tuberías y filtros, para el sistema de visualización médica Vismedic, con el objetivo de reducir los problemas de extensibilidad, reusabilidad y dependencias que existían en la arquitectura anterior. Para realizar la propuesta se hizo necesario el estudio de los conceptos relacionados con la Arquitectura de Software, las características arquitectónicas de tres productos establecidos en el campo del procesamiento y visualización de imágenes: Volumen Rendering Engine (Voreen), Visualization Toolkit (VTK) e Insight Toolkit (ITK) y de la especificación OSGi para el desarrollo basado en componentes. La arquitectura propuesta integra las principales características de las bibliotecas antes mencionadas e incorpora el empleo de plugins para extender las funcionalidades. La misma se validó a través de la Técnica de evaluación basada en prototipos y de la aplicación del Método de Análisis de Acuerdos de Arquitectura de Software (ATAM). La evaluación permitió identificar los riesgos presentes en la propuesta realizada y determinar que la arquitectura satisface los atributos de calidad definidos para la presente investigación.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[In recent years, Software Architecture has become a discipline that tries to counter the negative effects that may arise during software development, occupying a significant role in the business strategy of an organization that bases its operations on software. This paper proposes a software architecture based on the integration of the architectural styles: Component-based architecture, Layers based architecture and Pipes and Filters, for the Vismedic medical visualization system, with the objective of reducing the problems of extensibility, reusability and dependencies of the previous architecture. In order to develop the proposal was becoming necessary to study the concepts related to Software Architecture, the architectural features of three established products in the image processing and viewing field, they were: Volume Rendering Engine (Voreen), Visualization Toolkit (VTK) and Insight Toolkit (ITK), and the OSGi specification for component-based development. The proposed architecture integrates the main features of the libraries mentioned above and incorporates the use of plugins to extend its functionalities. The architecture was validated through the Prototyping based evaluation technique and the application of the Architecture Tradeoff Analysis Method (ATAM). The evaluation allowed us to identify the risks of the proposal and to determine that the architecture satisfies the quality attributes defined for this investigation.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[arquitectura de software]]></kwd>
<kwd lng="es"><![CDATA[componentes]]></kwd>
<kwd lng="es"><![CDATA[estilo arquitectónico]]></kwd>
<kwd lng="es"><![CDATA[plugins]]></kwd>
<kwd lng="es"><![CDATA[Vismedic]]></kwd>
<kwd lng="en"><![CDATA[architectural style]]></kwd>
<kwd lng="en"><![CDATA[component]]></kwd>
<kwd lng="en"><![CDATA[plugins]]></kwd>
<kwd lng="en"><![CDATA[software architecture]]></kwd>
<kwd lng="en"><![CDATA[Vismedic]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <div align="right">        <p><font size="2" face="Verdana"><b>ART&Iacute;CULO ORIGINAL</b></font></p>       <p>&nbsp;</p>       <p align="left"><font size="4" face="Verdana"><strong>Arquitectura de software      para el sistema de visualizaci&oacute;n m&eacute;dica Vismedic</strong> </font></p>       <p align="left">&nbsp;</p>       <p align="left"><strong><font size="3" face="Verdana">Software Architecture      for the Vismedic medical visualization system</font></strong></p>       <p align="left">&nbsp;</p>       <p align="left">&nbsp;</p>       <p align="left"><strong><font size="2" face="Verdana">Ing. Alina Dolores Rodr&iacute;guez      Pe&ntilde;a,<sup>I</sup> Ing. Luis Guillermo Silva Rojas<sup>II</sup></font> </strong></p>       <P align="left"><font size="2" face="Verdana"> I Vertex Entornos Interactivos      3D, Universidad de las Ciencias Inform&aacute;ticas, Carretera a San Antonio,      km 2 &#189;, Torrens, Boyeros, La Habana, Cuba. CP: 19370. E-Mail: <a href="mailto:alina@uci.cu">alina@uci.cu</a>      </font>     ]]></body>
<body><![CDATA[<br>     <font size="2" face="Verdana">II Vertex Entornos Interactivos 3D, Universidad      de las Ciencias Inform&aacute;ticas, Carretera a San Antonio, km 2 &#189;,      Torrens, Boyeros, La Habana, Cuba. CP: 19370. E-Mail: <a href="mailto:lgsilva@uci.cu">lgsilva@uci.cu</a>      </font>       <P align="left">&nbsp;       <P align="left">&nbsp;   <hr>       <div align="left"><font size="2" face="Verdana"><strong>RESUMEN</strong> </font>    </div> </div>     <P><font size="2" face="Verdana">En los &uacute;ltimos a&ntilde;os la Arquitectura de Software    se ha consolidado como una disciplina que intenta contrarrestar los efectos    negativos que pueden surgir durante el desarrollo de un software, ocupando un    rol significativo en la estrategia de negocio de una organizaci&oacute;n que    basa sus operaciones en el software. En el presente trabajo se propone una arquitectura    de software basada en la integraci&oacute;n de los estilos arquitect&oacute;nicos:    Arquitectura basada en componentes, Arquitectura basada en capas y Tuber&iacute;as    y filtros, para el sistema de visualizaci&oacute;n m&eacute;dica Vismedic, con    el objetivo de reducir los problemas de extensibilidad, reusabilidad y dependencias    que exist&iacute;an en la arquitectura anterior. Para realizar la propuesta    se hizo necesario el estudio de los conceptos relacionados con la Arquitectura    de Software, las caracter&iacute;sticas arquitect&oacute;nicas de tres productos    establecidos en el campo del procesamiento y visualizaci&oacute;n de im&aacute;genes:    Volumen Rendering Engine (Voreen), Visualization Toolkit (VTK) e Insight Toolkit    (ITK) y de la especificaci&oacute;n OSGi para el desarrollo basado en componentes.    La arquitectura propuesta integra las principales caracter&iacute;sticas de    las bibliotecas antes mencionadas e incorpora el empleo de plugins para extender    las funcionalidades. La misma se valid&oacute; a trav&eacute;s de la T&eacute;cnica    de evaluaci&oacute;n basada en prototipos y de la aplicaci&oacute;n del M&eacute;todo    de An&aacute;lisis de Acuerdos de Arquitectura de Software (ATAM). La evaluaci&oacute;n    permiti&oacute; identificar los riesgos presentes en la propuesta realizada    y determinar que la arquitectura satisface los atributos de calidad definidos    para la presente investigaci&oacute;n. </font>     <P><font size="2" face="Verdana"><strong>Palabras claves:</strong> arquitectura    de software, componentes, estilo </font><font size="2" face="Verdana">arquitect&oacute;nico,    plugins, Vismedic.</font> <hr> <font size="2" face="Verdana"><strong>ABSTRACT </strong></font>      <P><font size="2" face="Verdana">In recent years, Software Architecture has become a discipline    that tries to counter the negative effects that may arise during software development,    occupying a significant role in the business strategy of an organization that    bases its operations on software. This paper proposes a software architecture    based on the integration of the architectural styles: Component-based architecture,    Layers based architecture and Pipes and Filters, for the Vismedic medical visualization    system, with the objective of reducing the problems of extensibility, reusability    and dependencies of the previous architecture. In order to develop the proposal    was becoming necessary to study the concepts related to Software Architecture,    the architectural features of three established products in the image processing    and viewing field, they were: Volume Rendering Engine (Voreen), Visualization    Toolkit (VTK) and Insight Toolkit (ITK), and the OSGi specification for component-based    development. The proposed architecture integrates the main features of the libraries    mentioned above and incorporates the use of plugins to extend its functionalities.    The architecture was validated through the Prototyping based evaluation technique    and the application of the Architecture Tradeoff Analysis Method (ATAM). The    evaluation allowed us to identify the risks of the proposal and to determine    that the architecture satisfies the quality attributes defined for this investigation.    </font>     <P><font size="2" face="Verdana"><strong>Key words:</strong> architectural style,    component, plugins, software architecture, Vismedic.</font> <hr>     <p>&nbsp;</p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><font size="3" face="Verdana"><strong>INTRODUCCI&Oacute;N</strong> </font>  </p>     <P><font size="2" face="Verdana">Las organizaciones actuales, independientemente    de su tipo, requieren constantemente de aplicaciones inform&aacute;ticas que    contribuyan a solucionar problemas relacionados con su proceso de negocio, automatizar    las tareas que realizan frecuentemente y que proporcionen asistencia a la hora    de tomar decisiones. Para esto se hace necesaria la construcci&oacute;n de eficientes    sistemas de software, estos generalmente requieren la combinaci&oacute;n de    diferentes tecnolog&iacute;as y plataformas de hardware y software para alcanzar    un comportamiento acorde con las necesidades de las organizaciones. Los sistemas    de software deben ofrecer un alto nivel de rendimiento, adaptarse a las necesidades    espec&iacute;ficas de la organizaci&oacute;n y permitir la adici&oacute;n de    nuevas funcionalidades con el menor esfuerzo posible. La consecuci&oacute;n    de estas caracter&iacute;sticas exige a los profesionales dedicados al desarrollo    de software poner especial atenci&oacute;n y cuidado en el dise&ntilde;o de    la arquitectura que soportar&aacute; el funcionamiento del sistema. </font>      <P><font size="2" face="Verdana">Entre los proyectos de desarrollo de software del centro Vertex,    se encuentra el sistema de visualizaci&oacute;n m&eacute;dica Vismedic, este    tiene como objetivo, desarrollar aplicaciones que sirvan de apoyo a los m&eacute;dicos    en el proceso de diagn&oacute;stico a trav&eacute;s de im&aacute;genes m&eacute;dicas    digitales. Actualmente el proyecto cuenta con un Visualizador 2D de im&aacute;genes    m&eacute;dicas digitales en formato DICOM y se encuentra en la fase de pruebas    del Visualizador 3D. </font>     <P><font size="2" face="Verdana">Luego de tres a&ntilde;os de desarrollo, se comprob&oacute;    que al adicionar nuevos requisitos funcionales o cambiar sustancialmente los    existentes, se necesita realizar modificaciones en la mayor parte del software.    Estas modificaciones se deben al fuerte acople, alto nivel de dependencia entre    los elementos que componen el sistema y la d&eacute;bil reusabilidad que se    puede alcanzar con los mismos. Las deficiencias presentes en la arquitectura    actual ralentizan la incorporaci&oacute;n de nuevas caracter&iacute;sticas a    los productos que se desarrollan en el proyecto, lo que conlleva a notables    atrasos en el cronograma de desarrollo y aumenta la curva de aprendizaje para    los nuevos desarrolladores que se incorporan cada curso. </font>     <P><font size="2" face="Verdana">Teniendo en cuenta la situaci&oacute;n probl&eacute;mica    anterior, se plantea el siguiente problema cient&iacute;fico: &#191;C&oacute;mo    reducir los problemas de extensibilidad, reusabilidad y dependencia para adicionar    nuevas funcionalidades al proyecto Vismedic? Para darle soluci&oacute;n al problema    planteado se estableci&oacute; como objetivo general: definir y validar una    arquitectura de software, que permita reducir los problemas de extensibilidad,    reusabilidad y dependencias que presenta la arquitectura actual del proyecto    Vismedic. </font>      <P>&nbsp;     <P><font size="3" face="Verdana"><strong>DESARROLLO</strong> </font>      <P><font size="2" face="Verdana"><strong>ARQUITECTURA DE SOFTWARE:</strong> </font>      <P><font size="2" face="Verdana">Actualmente no existe una definici&oacute;n &uacute;nica    para el concepto de arquitectura de software, el t&eacute;rmino ha sido abordado    por un gran n&uacute;mero de autores,<sup>1</sup> no obstante, se reconoce como la definici&oacute;n    m&aacute;s completa la dada por la IEEE Std 1471-2000: &quot;La arquitectura    de software es la organizaci&oacute;n fundamental de un sistema enmarcada en    sus componentes, las relaciones entre ellos, y el ambiente, y los principios    que orientan su dise&ntilde;o y evoluci&oacute;n&quot;.<sup>2</sup> </font>      <P><font size="2" face="Verdana">Al dise&ntilde;ar una arquitectura de software se crean y representan    componentes que interact&uacute;an entre s&iacute;, con responsabilidades espec&iacute;ficas    y se organizan de forma tal que se logren los requerimientos establecidos. Se    puede partir con patrones de soluciones probados que se conocen con el nombre    de estilos arquitect&oacute;nicos, patrones arquitect&oacute;nicos y patrones    de dise&ntilde;o. </font>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Un estilo arquitect&oacute;nico es un conjunto    coordinado de restricciones arquitect&oacute;nicas que regula las funciones/caracter&iacute;sticas    de los elementos arquitect&oacute;nicos y las relaciones permitidas entre estos    dentro de cualquier arquitectura que se adapte a ese estilo.<sup>3</sup> </font>      <P><font size="2" face="Verdana">Un patr&oacute;n arquitect&oacute;nico, en cambio,    expresa una organizaci&oacute;n estructural para los sistemas de software, proporciona    un conjunto de subsistemas predefinidos, especifica sus responsabilidades e    incluye reglas y directrices para organizar la relaci&oacute;n entre ellos.    Los patrones arquitect&oacute;nicos son plantillas para arquitecturas de software    concretas. La selecci&oacute;n de un patr&oacute;n arquitect&oacute;nico es,    por lo tanto, una decisi&oacute;n de dise&ntilde;o fundamental en el desarrollo    de un sistema de software.<sup>4</sup> </font>      <P><font size="2" face="Verdana">Los patrones de dise&ntilde;o trabajan a una escala intermedia    y son independientes del lenguaje de programaci&oacute;n. Definen un esquema    de refinamiento de los subsistemas o componentes dentro de un sistema, o las    relaciones entre estos. Describe una estructura com&uacute;n y recurrente de    componentes interrelacionados, que resuelve un problema general de dise&ntilde;o    dentro de un contexto particular.<sup>5</sup> </font>     <P><font size="2" face="Verdana"><strong>Arquitectura basada en componentes:</strong>    </font>      <P><font size="2" face="Verdana">Un componente es una unidad de composici&oacute;n de aplicaciones,    que posee un conjunto de interfaces especificadas contractualmente y dependencias    del contexto expl&iacute;citas, puede ser desplegado de forma independiente    y est&aacute; sujeto a la composici&oacute;n por terceras partes.<sup>6</sup> El estilo    de arquitectura basada en componentes, describe un acercamiento al dise&ntilde;o    de sistemas como un conjunto de componentes que exponen interfaces bien definidas    y que colaboran entre s&iacute; para resolver el problema. El uso de este estilo    facilita el despliegue, pues permite sustituir un componente por su nueva versi&oacute;n    sin afectar a otros componentes o al sistema y favorece la reusabilidad de los    componentes independientes del contexto, permitiendo que se empleen en otras    aplicaciones y sistemas. </font>     <P><font size="2" face="Verdana"><strong>Arquitectura en capas:</strong> </font>      <P><font size="2" face="Verdana">Este estilo define una organizaci&oacute;n jer&aacute;rquica    tal que cada capa proporciona servicios a la capa inmediatamente superior y    se sirve de las prestaciones que le brinda la inmediatamente inferior. Entre    las principales caracter&iacute;sticas de este estilo se encuentran la descomposici&oacute;n    de los servicios de forma que la mayor&iacute;a de las interacciones ocurren    solo entre capas vecinas. Los componentes de cada capa se comunican con los    componentes de otras capas a trav&eacute;s de interfaces conocidas y cada nivel    agrega las responsabilidades y abstracciones del nivel inferior.<sup>7</sup> </font>     <P><strong><font size="2" face="Verdana">Tuber&iacute;as y filtros: </font> </strong>     <P><font size="2" face="Verdana">Una tuber&iacute;a (pipeline) es un conjunto    de nodos de procesamiento de datos conectados en serie, la salida de un elemento    es la entrada del siguiente. Cada etapa del procesamiento se encapsula en un    filtro, los datos se transmiten a trav&eacute;s de tubos entre filtros adyacentes,<sup>7</sup>    ver <a href="#fig1">figura. 1</a>. El uso de este estilo fomenta la reutilizaci&oacute;n,    el bajo acoplamiento, la concurrencia y facilita, adem&aacute;s </font>      <P align="center"><img src="/img/revistas/rcim/v8n1/f0106116.jpg" width="412" height="130"> <a name="fig1"></a>     ]]></body>
<body><![CDATA[<P><strong><font size="2" face="Verdana">Arquitectura de proyectos similares:    </font> </strong>     <P><font size="2" face="Verdana">Para la propuesta de arquitectura de software realizada, se    analizaron productos relacionados con el procesamiento de im&aacute;genes m&eacute;dicas    digitales, que realizan, en cierta medida, funciones hom&oacute;logas a las    de Vismedic. El estudio de los productos Voreen, VTK e ITK tuvo como objetivos    fundamentales: determinar las caracter&iacute;sticas arquitect&oacute;nicas    que pueden ser reutilizables para la arquitectura de Vismedic y recopilar buenas    pr&aacute;cticas de programaci&oacute;n empleadas por proyectos consagrados    en el campo. </font>     <P><font size="2" face="Verdana"><strong><em>VTK</em></strong> es un sistema de    software ampliamente usado para el procesamiento y visualizaci&oacute;n de datos.    Se emplea en c&aacute;lculos cient&iacute;ficos, an&aacute;lisis por im&aacute;genes    m&eacute;dicas, geometr&iacute;a computacional y visualizaci&oacute;n de datos    volum&eacute;tricos, entre otros campos. Su objetivo fundamental es transformar    los datos de entrada para hacerlos comprensibles por el sistema visor humano.    Por tanto, uno de los requerimientos principales de VTK es la habilidad de crear    tuber&iacute;as de flujo de datos, capaces de adquirir, procesar y visualizar    datos. VTK se dise&ntilde;&oacute; como una herramienta altamente flexible,    con numerosos componentes intercambiables que pueden combinarse para procesar    una amplia variedad de datos.<sup>8</sup> </font>      <P><font size="2" face="Verdana"><strong><em>ITK</em></strong> es una biblioteca    de clases para el an&aacute;lisis de im&aacute;genes que puede pensarse como    una enciclopedia utilizable de algoritmos para procesamiento de im&aacute;genes    digitales (filtrado, segmentaci&oacute;n y registro). Fue desarrollada por un    consorcio de universidades, empresas comerciales y numerosos colaboradores individuales    de todo el mundo.<sup>9</sup> </font>      <P><font size="2" face="Verdana"><strong><em>Voreen</em></strong> es una biblioteca    de c&oacute;digo abierto para visualizaci&oacute;n de vol&uacute;menes. Posee    alta flexibilidad a la hora de incorporar nuevas t&eacute;cnicas de visualizaci&oacute;n.    Est&aacute; implementada como una biblioteca multiplataforma (Windows, Linux    y Mac.), usando OpenGL como biblioteca gr&aacute;fica y GLSL como lenguaje de    programaci&oacute;n para los algoritmos basados en GPU (Graphics Proccesing    Unit).<sup>10</sup> </font>      <P><font size="2" face="Verdana"><strong>Especificaci&oacute;n OSGi para el desarrollo    basado en componentes</strong> </font>      <P><font size="2" face="Verdana">Para definir el sistema de plugins en Vismedic se estudi&oacute;    la especificaci&oacute;n OSGi (del ingl&eacute;s Open Services Gateway Initiative.)    para el desarrollo basado en componentes. OSGi, a pesar de ser un sistema (o    framework) modular para Java, establece las formas de crear m&oacute;dulos y    la manera en que estos interactuar&aacute;n en tiempo de ejecuci&oacute;n, proporciona    un entorno orientado a servicios y basado en componentes que ofrece est&aacute;ndares    para administrar el ciclo de vida de un componente.<sup>11</sup> </font>     <P><font size="2" face="Verdana"><strong>Evaluaci&oacute;n de la arquitectura    </strong></font>      <P><font size="2" face="Verdana">La evaluaci&oacute;n de una arquitectura no define si esta es    buena o no, simplemente expresa donde se encuentran los riesgos y fortalezas    de la misma. El primer paso para evaluar una arquitectura es conocer qu&eacute;    es lo que se quiere evaluar, de esta forma es posible establecer la base para    la evaluaci&oacute;n. Los atributos de calidad, a partir de los cuales se eval&uacute;a    la arquitectura, son requerimientos del sistema que hacen referencia a las caracter&iacute;sticas    que &eacute;ste debe satisfacer. </font>     <P><font size="2" face="Verdana">Las t&eacute;cnicas de evaluaci&oacute;n de arquitecturas tienen    como objetivo, crear especificaciones y predicciones respecto a una propuesta    arquitect&oacute;nica, para saber si satisface las cualidades que el software    debe cumplir. Posibilitan, adem&aacute;s, establecer comparaciones entre arquitecturas    candidatas para determinar cu&aacute;l satisface mejor un atributo de calidad    espec&iacute;fico. Estas t&eacute;cnicas pueden clasificarse en dos vertientes    fundamentales: cuantitativas y cualitativas. Las t&eacute;cnicas de evaluaci&oacute;n    cualitativas son usadas cuando la arquitectura se encuentra en construcci&oacute;n,    a diferencia de las cuantitativas, que se utilizan cuando la arquitectura ya    ha sido implantada. Es m&aacute;s com&uacute;n el uso de las t&eacute;cnicas    cualitativas, pues permiten tomar decisiones arquitect&oacute;nicas en fases    tempranas del desarrollo, requieren menor informaci&oacute;n detallada y pueden    conducir a resultados relativamente precisos, adem&aacute;s, son menos costosas    de realizar que las cuantitativas.<sup>12</sup> </font>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Los m&eacute;todos de evaluaci&oacute;n arquitect&oacute;nica,    eval&uacute;an el potencial del dise&ntilde;o arquitect&oacute;nico para alcanzar    los niveles deseados en cuanto a los requisitos de calidad,<sup>13</sup> estos m&eacute;todos    se ven asistidos de las t&eacute;cnicas de evaluaci&oacute;n arquitect&oacute;nica.    Actualmente existen diversos m&eacute;todos para realizar pruebas a la arquitectura    de software, cada uno con caracter&iacute;sticas espec&iacute;ficas, escoger    un m&eacute;todo de evaluaci&oacute;n requiere tener bien definidos los atributos    que se desean evaluar. Algunos de los m&eacute;todos de evaluaci&oacute;n son    los siguientes: </font>     <P><font size="2" face="Verdana">- M&eacute;todo de An&aacute;lisis de Arquitectura    de Software (Software Architecture Analysis Method, SAAM).    <br>   </font><font size="2" face="Verdana">- M&eacute;todo de Revisi&oacute;n Intermedio    de Dise&ntilde;o (Active Reviews for Intermediate Designs, ARID).    <br>   </font><font size="2" face="Verdana">- M&eacute;todo de An&aacute;lisis de Acuerdos    de Arquitectura de Software (Architecture Trade-off Analysis Method, ATAM).    </font>      <P><font size="2" face="Verdana">Teniendo en cuenta las dificultades que presenta la arquitectura    que se utiliza en el proyecto Vismedic, se determin&oacute; evaluar en la arquitectura    que se propone los siguientes atributos de calidad: </font>     <P><font size="2" face="Verdana">- Confiabilidad: Medida de la habilidad de un    sistema de mantenerse operativo a lo largo del tiempo.<sup>13</sup>    <br>   </font><font size="2" face="Verdana">- Escalabilidad: Grado con el que se puede    ampliar el dise&ntilde;o arquitect&oacute;nico, de datos o procedimental.<sup>14</sup>    <br>   </font><font size="2" face="Verdana"> - Funcionalidad: Habilidad del sistema    para alcanzar sus objetivos.<sup>14</sup>    <br>   </font><font size="2" face="Verdana">- Integralidad: Medida en que trabajan    correctamente componentes del sistema que fueron desarrollados separadamente    al ser integrados.<sup>13</sup>    <br>   </font><font size="2" face="Verdana">- Mantenibilidad: Alta capacidad de modificaci&oacute;n    y con bajo costo.<sup>14</sup>    ]]></body>
<body><![CDATA[<br>   </font><font size="2" face="Verdana">- Portabilidad: Habilidad del sistema para    ser ejecutado en diferentes plataformas. Estos ambientes pueden ser hardware,    software o una combinaci&oacute;n de los dos.<sup>14</sup>    <br>   </font><font size="2" face="Verdana">- Reusabilidad: Es la capacidad de dise&ntilde;ar    un sistema de forma tal que su estructura o parte de sus componentes puedan    ser reutilizados en futuras aplicaciones.<sup>13</sup> </font>      <P><font size="2" face="Verdana">Se aplicar&aacute; el m&eacute;todo de evaluaci&oacute;n ATAM,    este est&aacute; inspirado en tres &aacute;reas distintas: los estilos arquitect&oacute;nicos,    el an&aacute;lisis de atributos de calidad y el m&eacute;todo de evaluaci&oacute;n    SAAM.<sup>15</sup> Se concentra en la identificaci&oacute;n de los estilos o enfoques    arquitect&oacute;nicos utilizados y ayuda a los involucrados en el proyecto    a entender las consecuencias de las decisiones arquitect&oacute;nicas tomadas    con respecto a los atributos de calidad. </font>     <P><font size="2" face="Verdana">Se har&aacute; uso adem&aacute;s de la t&eacute;cnica de evaluaci&oacute;n    arquitect&oacute;nica basada en prototipo, esta consiste en implementar una    parte de la arquitectura de software y ejecutarla en el contexto del sistema.    Mediante esta t&eacute;cnica se obtiene un resultado de evaluaci&oacute;n con    mayor exactitud.<sup>12</sup> Entre los aspectos favorables de su uso se destaca la    confiabilidad, permite observar que tanto se afecta o no, un atributo de calidad.    De acuerdo al nivel de fidelidad con que se desarrolle el prototipo del producto    final, puede suponer desventajas el empleo de esta t&eacute;cnica, pues el tiempo    de desarrollo del prototipo puede ser largo. </font>     <P><font size="2" face="Verdana"><strong>An&aacute;lisis de la arquitectura actual</strong>    </font>      <P><font size="2" face="Verdana">El proyecto Vismedic cuenta actualmente con dos    productos (Visualizador 2D y Visualizador 3D), derivados de un per&iacute;odo    de tres a&ntilde;os de investigaci&oacute;n y desarrollo. Durante este proceso,    los cambios frecuentes de los requisitos funcionales y los atributos de calidad,    condujeron a realizar numerosas modificaciones a la arquitectura de software    del proyecto. La arquitectura sobre la que se desarrollan actualmente los productos    se basa fundamentalmente en el empleo de capas y m&oacute;dulos, con el objetivo    de agrupar las funcionalidades y delimitar las responsabilidades de los elementos    que componen las aplicaciones. Como se observa en la <a href="#fig2">figura    2</a>. la arquitectura cuenta con una capa que representa el n&uacute;cleo b&aacute;sico    (<em><strong>Core</strong></em>) para los productos a desarrollar, esta capa    se encuentra dividida en m&oacute;dulos que ofrecen funcionalidades comunes    para las aplicaciones de visualizaci&oacute;n de im&aacute;genes m&eacute;dicas    digitales. Dentro del m&oacute;dulo Plugins, perteneciente a la capa<strong><em>    Core</em></strong>, se definen las interfaces a implementar para extender las    aplicaciones mediante <strong><em>plugins</em></strong>, es necesario se&ntilde;alar    que, en estos momentos, solo el Visualizador 2D hace uso de estos. </font>      <P>      <P align="center"><img src="/img/revistas/rcim/v8n1/f0206116.jpg" width="335" height="288"><a name="fig2"></a>     <P><font size="2" face="Verdana">Luego del an&aacute;lisis realizado, se comprob&oacute;    que la arquitectura actual presenta un fuerte acople y alto nivel de dependencia    entre los componentes y m&oacute;dulos que la integran, esto se evidenci&oacute;    a la hora de adicionar nuevas funcionalidades o modificar las existentes, por    ejemplo: para adicionar un nuevo algoritmo de visualizaci&oacute;n tridimensional,    se necesita implementar la interfaz <strong>RenderAlgorithm</strong> (ubicada    en el m&oacute;dulo <strong>Visualization</strong> de la capa <strong>Core</strong>),    registrar expl&iacute;citamente el nuevo algoritmo en el contexto de visualizaci&oacute;n    de OpenGL y ubicar en la barra de herramientas principal, en caso de ser necesario,    un enlace a la ventana de configuraci&oacute;n del nuevo algoritmo. Para realizar    el despliegue con el nuevo algoritmo adicionado es necesario recompilar el producto    y posteriormente reinstalarlo en cada una de las estaciones de trabajo. La arquitectura    actual afecta, adem&aacute;s, en cierta medida, los siguientes atributos de    calidad: </font>      <P><font size="2" face="Verdana">- <strong>Portabilidad:</strong> la biblioteca    de clases DCMTK presenta problemas de portabilidad para el sistema operativo    Windows, por tanto, la primera versi&oacute;n de los visualizadores est&aacute;    disponible solo para Linux.    ]]></body>
<body><![CDATA[<br>   - <strong>Modificabilidad - Mantenibilidad:</strong> la actualizaci&oacute;n    de los componentes conlleva, como m&iacute;nimo, a repetir el proceso completo    de despliegue.    <br>   </font><font size="2" face="Verdana">- <strong>Reusabilidad - Escalabilidad:</strong>    Las interfaces definidas en el m&oacute;dulo <strong><em>Plugins</em></strong>,    perteneciente a la capa <em><strong>Core</strong></em>, solo ofrece soporte    para algoritmos de filtrado de im&aacute;genes bidimensionales. </font>     <P>&nbsp;     <P><font size="3" face="Verdana"><strong>RESULTADOS</strong> </font>      <P><font size="2" face="Verdana">A partir del estudio realizado se determin&oacute;    que las bibliotecas Voreen, VTK e ITK tienen en com&uacute;n el empleo de una    red de flujo de datos, basada en el estilo arquitect&oacute;nico tuber&iacute;as    y filtros, para el procesamiento y visualizaci&oacute;n de las im&aacute;genes.    Voreen permite adem&aacute;s la edici&oacute;n din&aacute;mica de la red de    flujo de datos, esto posibilita realizar prototipos r&aacute;pidos de nuevas    aplicaciones, y posee una arquitectura multi-capa que separa limpiamente el    sistema de visualizaci&oacute;n de la capa de interfaz gr&aacute;fica de usuario.    Estas bibliotecas no presentan un uso bien definido de plugins con el objetivo    de extender su funcionamiento, por tanto, las modificaciones que se realicen    deben ser en tiempo de compilaci&oacute;n. </font>      <P><font size="2" face="Verdana">El estudio de la especificaci&oacute;n OSGi permiti&oacute;    definir las interfaces que deben implementar los plugins que se deseen adicionar    al producto que se desarrolle, as&iacute; como gestionar de forma eficiente    las dependencias entre estos y el versionado. </font>     <P><font size="2" face="Verdana">Por tanto, se propone para el proyecto Vismedic,    una arquitectura que combina los estilos arquitect&oacute;nicos basados en capas    y en componentes, y que emplee de una red de flujo de datos (estilo arquitect&oacute;nico    tuber&iacute;as y filtros) para el proceso de visualizaci&oacute;n de las im&aacute;genes.    En la <a href="#fig3">figura 3</a> se observa la distribuci&oacute;n de las    capas presentes en la arquitectura propuesta. </font>      <P>      <P align="center"><img src="/img/revistas/rcim/v8n1/f0306116.jpg" width="412" height="232"> <a name="fig3"></a>     <P><font size="2" face="Verdana">La capa Qt Framework ofrece el soporte para el manejo de plugins    y para la interfaz gr&aacute;fica de usuario. En la capa Core se encuentran    ubicados los m&oacute;dulos y componentes comunes a todas las aplicaciones a    desarrollar. Esta capa se encuentra dividida por m&oacute;dulos, dentro de los    cuales se pueden mencionar: Plugins (contiene las interfaces a implementar por    los plugins concretos) e IO (para entrada y salida de datos). La capa Ribbon    permite emplear de forma opcional la biblioteca ribbon desarrollada en el proyecto.    Esta biblioteca posibilita crear interfaces gr&aacute;ficas de usuario empleando    una cinta de opciones similar a los productos de Microsoft Office 2007 - 2013.    La capa Entorno de Ejecuci&oacute;n provee el entorno donde se ejecutar&aacute;n    los plugins, as&iacute; como las funcionalidades de activaci&oacute;n y desactivaci&oacute;n    de estos. Por &uacute;ltimo, la capa Plugins permite la creaci&oacute;n de elementos    de extensi&oacute;n para las aplicaciones, el control de su ciclo de vida, as&iacute;    como su versionado y resoluci&oacute;n de dependencias internas, las que se    gestionar&aacute;n teniendo en cuenta lo propuesto por la especificaci&oacute;n    OSGi. </font>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana"><strong>Evaluaci&oacute;n de la arquitectura    propuesta</strong> </font>      <P><font size="2" face="Verdana">La arquitectura propuesta se evalu&oacute; utilizando    el m&eacute;todo ATAM y la T&eacute;cnica de Evaluaci&oacute;n basada en Prototipos,    espec&iacute;ficamente con la creaci&oacute;n de un prototipo funcional. (<a href="/img/revistas/rcim/v8n1/t0106116.gif">tabla    1</a>) (<a href="/img/revistas/rcim/v8n1/t0206116.gif">tabla 2</a>) </font>      <P><font size="2" face="Verdana">Luego del an&aacute;lisis de los riesgos detectados    se determin&oacute; que estos no afectan considerablemente el desempe&ntilde;o    de las aplicaciones que se pueden desarrollar con la arquitectura propuesta,    por tanto, se decide mitigar los mismos en una segunda iteraci&oacute;n de la    arquitectura. </font>      <P><font size="2" face="Verdana"><strong>Prototipo funcional </strong></font>      <P><font size="2" face="Verdana">La creaci&oacute;n del prototipo funcional permiti&oacute; evaluar,    de forma pr&aacute;ctica, los atributos de calidad de inter&eacute;s, tal es    el caso de la integralidad entre los componentes que fueron desarrollados de    forma separada y la reusabilidad y extensibilidad que se obtiene al crear los    procesadores en forma de plugins. </font>     <P><font size="2" face="Verdana">En la <a href="/img/revistas/rcim/v8n1/f0406116.jpg">figura 4</a>    se observa, en el prototipo implementado, el resultado de adicionar cinco procesadores    a la red, concatenar los mismos y ejecutar la red de procesamiento creada. A    la derecha se observa la interfaz &quot;Administrar plugins&quot; con las operaciones    que se pueden realizar sobre la misma (Adicionar, Eliminar, Habilitar o Deshabilitar    un plugin). </font>      <P><font size="2" face="Verdana"><strong>Discusi&oacute;n general de la arquitectura    propuesta</strong> </font>      <P><font size="2" face="Verdana">Luego de la aplicaci&oacute;n del ATAM y la t&eacute;cnica de    evaluaci&oacute;n basada en prototipo, se comprob&oacute; que el empleo de la    arquitectura propuesta influye positivamente en los atributos de calidad que    se ven afectados con el uso de la arquitectura actual. A continuaci&oacute;n,    se especifica el efecto de la aplicaci&oacute;n de la arquitectura propuesta    sobre los principales atributos de calidad definidos: </font>     <P><font size="2" face="Verdana">- <strong>Portabilidad:</strong> la arquitectura    propuesta solo depende del framework Qt, una de las fortalezas de este framework    es su portabilidad. El empleo de una biblioteca externa como DCMTK se delega    hacia la implementaci&oacute;n de los plugins concretos, por lo que si esta    biblioteca presenta problemas de portabilidad solo se afecta el plugin que la    emplea. </font>      <P><font size="2" face="Verdana">- <strong>Modificabilidad - Mantenibilidad:</strong>    para la actualizaci&oacute;n o adici&oacute;n de nuevas funcionalidades, no    es necesario repetir el proceso completo de despliegue, solo se necesita adicionar,    desde la interfaz visual &quot;Administrar plugins&quot;, el plugin que contiene    la funcionalidad o copiarlo al directorio <em><strong>plugins</strong></em>.    </font>      ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">- <strong>Reusabilidad - Escalabilidad:</strong>    las interfaces definidas en el m&oacute;dulo Plugins, pueden emplearse para    construir din&aacute;micamente la aplicaci&oacute;n, por tanto, la adici&oacute;n    de un plugin registra autom&aacute;ticamente sus componentes visuales en la    aplicaci&oacute;n (desencadenadores, ventanas de configuraci&oacute;n y procesadores).    </font>      <P><font size="2" face="Verdana"><strong>Aplicaci&oacute;n pr&aacute;ctica de    la arquitectura propuesta</strong> </font>      <P><font size="2" face="Verdana">Al t&eacute;rmino de la presente investigaci&oacute;n,    el software Vismedic - Illustration, encargado de generar ilustraciones a partir    de datos volum&eacute;tricos, se encuentra en fase de adopci&oacute;n de la    arquitectura propuesta y presenta una implementaci&oacute;n parcial de la misma.    En este caso, y como se observa en la <a href="#fig5">figura 5</a>, los algoritmos    de filtrado y visualizaci&oacute;n se cargan en forma de plugins y contienen    los procesadores necesarios para construir la red de flujo de datos, de esta    forma la aplicaci&oacute;n se construye autom&aacute;ticamente a partir de la    informaci&oacute;n contenida en los plugins. La adopci&oacute;n, hasta el estado    actual, de la arquitectura propuesta, favoreci&oacute; el desarrollo basado    en componentes y su posterior integraci&oacute;n, delegando a los desarrolladores    solo la implementaci&oacute;n de los procesadores concretos. </font>      <P align="center"><font size="2" face="Verdana"><img src="/img/revistas/rcim/v8n1/f0506116.jpg" width="577" height="392"></font>    <a name="fig5"></a>      <P align="center">&nbsp;     <P align="left"><font size="3" face="Verdana"><strong>CONCLUSIONES</strong> </font>      <P><font size="2" face="Verdana">Con la realizaci&oacute;n de este trabajo, se defini&oacute;    y valid&oacute; una arquitectura de software para el proyecto Vismedic, que    permite reducir los problemas de extensibilidad, reusabilidad y dependencias    que presenta la arquitectura sobre la que se desarrollan actualmente los productos    del proyecto. De esta forma se dio cumplimiento al objetivo propuesto al inicio    de la investigaci&oacute;n, adem&aacute;s: </font>     <P><font size="2" face="Verdana">- La combinaci&oacute;n de los estilos arquitect&oacute;nicos:    Arquitectura basada en capas, Arquitectura basada en componentes y Tuber&iacute;as    y filtros, permiti&oacute; desarrollar una arquitectura que satisface los atributos    de calidad reutilizaci&oacute;n y mantenibilidad.    <br>   </font><font size="2" face="Verdana">- El an&aacute;lisis de los productos Voreen,    VTK e ITK permiti&oacute; reutilizar los conceptos fundamentales asociados a    una red de flujo de datos (procesadores, puertos, tipos de datos). La incorporaci&oacute;n    de plugins en la creaci&oacute;n de la red de flujo de datos constituye el principal    aporte de la investigaci&oacute;n.    <br>   </font><font size="2" face="Verdana">- La configuraci&oacute;n din&aacute;mica    de la red de flujo de datos por parte del usuario, posibilita crear prototipos    r&aacute;pidos de aplicaciones sin necesidad de conocer el c&oacute;digo fuente    de la aplicaci&oacute;n, lo que incrementa la versatilidad de los productos    del proyecto. </font>      ]]></body>
<body><![CDATA[<P>      <P>      <P><strong><font size="3" face="Verdana">REFERENCIAS BIBLIOGRAFICAS</font> </strong>      <!-- ref --><P><font size="2" face="Verdana">1. SEI | CARNEGIE MELLON. Community Software    Architecture Definitions. [Citado: enero 10, 2013] Disponible en: <a href="http://www.sei.cmu.edu/architecture/start/glossary/community.cfm" target="_blank">http://www.sei.cmu.edu/architecture/start/glossary/community.cfm</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">2. ISO/IEC/IEEE 42010: Defining architecture.    [Citado: enero 10, 2013]. Disponible en: </font> <font size="2" face="Verdana"><a href="http://www.iso-architecture.org/ieee-1471/defining-architecture.html" target="_blank">http://www.iso-architecture.org/ieee-1471/defining-architecture.html</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">3. Fielding R.T. Architectural styles and the    design of network-based software architectures. Ph.D. dissertation. University    of California, </font> <font size="2" face="Verdana">California, 2000.     </font>     <!-- ref --><P><font size="2" face="Verdana">4. Buschmann F. Pattern oriented software architecture:    a system of patters. Ashish Raut, 1999. p. 25 - 26.     </font>      <!-- ref --><P><font size="2" face="Verdana">5. Gamma E, Helm R, Johnson R, Vlissides J. Design    Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional,    1995. 13, 94, 155, p. 249.     </font>      <!-- ref --><P><font size="2" face="Verdana">6. Szyperski A. Component software: Beyond Object-Oriented    programming. Addison-Wesley, 2002, 2nd.     </font>      <!-- ref --><P><font size="2" face="Verdana">7. De la Torre C, Zorrilla U, Calvarro N.J, Ramos    M. A, Manteiga Ch, Cort&eacute;s F, Garc&iacute;a I. Gu&iacute;a de Arquitectura    N-Capas orientada al Dominio con .NET 4.0. Krasis Press, Marzo 2010: p. 9-31.        </font>      <!-- ref --><P><font size="2" face="Verdana">8. Gevenci B, Schroeder W. VTK. En: Brown A.E,    Wilson G. The Architecture of Open Source Applications: Elegance, Evolution,    and a Few Fearless Hacks. CreativeCommons, 2011. p. 315 - 330. [Citado: marzo    15, 2013] Disponible en: <a href="http://aosabook.org/en/vtk.html" target="_blank">http://aosabook.org/en/vtk.html</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">9. Ib&aacute;&ntilde;ez L, King B. ITK. En: Brown    A.E, Wilson G. The Architecture of Open Source Applications. Volume II: Structure,    Scale, and Few More Fearless Hacks. CreativeCommons, 2012. p. 100 - 126. [Citado:    marzo 15, 2013] Disponible en: <a href="http://www.aosabook.org/en/itk.html" target="_blank">http://www.aosabook.org/en/itk.html</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">10. VOREEN - VOLUME RENDERING ENGINE. Voreen    - Volume Rendering Engine (Official Project Website). Visualization &amp; Computer    Graphics Research Group, University of M&uuml;nster, Germany. [Citado: enero    29, 2013.] Disponible en: <a href="http://voreen.uni-muenster.de/" target="_blank">http://voreen.uni-muenster.de/</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">11. OSGi ALLIANCE. OSGi Core Release 5. Tech.    rep. OSGi Alliance. [Citado: diciembre 20, 2012]. Disponible en: <a href="http://www.osgi.org/Specifications/HomePage" target="_blank">http://www.osgi.org/Specifications/HomePage</a>    </font>      <!-- ref --><P><font size="2" face="Verdana">12. Bosh J. Design &amp; Use of Software Architectures.    Adopting and evolving a product-line approach. s.l. : Pearson Education, 2000.    pp: 57-62.     </font>      <!-- ref --><P><font size="2" face="Verdana">13. Bass L, Clements P, Kazman R. Software Architecture    in Practice, Third Edition. 3. s.l. : Addison-Wesley Professional, Septiembre    2012. 4, p. 18.     </font>      <!-- ref --><P><font size="2" face="Verdana">14. Pressman R.S. Software Engineering. A Practitioner&#180;s    Approach. 7th Edition. s.l. : McGraw-Hill. Higher Education, 2010. p. 397 -    415.     </font>      <!-- ref --><P><font size="2" face="Verdana">15. Clements P, Kazman R, Klein M. Evaluating    software architectures: methods and case studies. s.l.: Addison-Wesley, 2002.    p. 28.     </font>     <P>&nbsp;     <P>&nbsp;     <P><font size="2" face="Verdana">Recibido: 15 de diciembre de 2015.    ]]></body>
<body><![CDATA[<br>   Aprobado: 8 de abril de 2016.</font>       ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<collab>SEI | CARNEGIE MELLON</collab>
<source><![CDATA[Community Software Architecture Definitions]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="">
<source><![CDATA[ISO/IEC/IEEE 42010: Defining architecture]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fielding]]></surname>
<given-names><![CDATA[R.T]]></given-names>
</name>
</person-group>
<source><![CDATA[Architectural styles and the design of network-based software architectures. Ph.D. dissertation]]></source>
<year>2000</year>
<publisher-loc><![CDATA[California ]]></publisher-loc>
<publisher-name><![CDATA[University of California]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Buschmann]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
</person-group>
<source><![CDATA[Pattern oriented software architecture: a system of patters]]></source>
<year>1999</year>
<page-range>25 - 26</page-range><publisher-name><![CDATA[Ashish Raut]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gamma]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Helm]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Johnson]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Vlissides]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Design Patterns: Elements of Reusable Object-Oriented Software]]></source>
<year>1995</year>
<volume>13</volume>
<page-range>249</page-range><publisher-name><![CDATA[Addison-Wesley Professional]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Szyperski]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<source><![CDATA[Component software: Beyond Object-Oriented programming]]></source>
<year>2002</year>
<edition>2</edition>
<publisher-name><![CDATA[Addison-Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[De la Torre]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Zorrilla]]></surname>
<given-names><![CDATA[U]]></given-names>
</name>
<name>
<surname><![CDATA[Calvarro]]></surname>
<given-names><![CDATA[N.J]]></given-names>
</name>
<name>
<surname><![CDATA[Ramos]]></surname>
<given-names><![CDATA[M. A]]></given-names>
</name>
<name>
<surname><![CDATA[Manteiga]]></surname>
<given-names><![CDATA[Ch]]></given-names>
</name>
<name>
<surname><![CDATA[Cortés]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
<name>
<surname><![CDATA[García]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
</person-group>
<source><![CDATA[Guía de Arquitectura N-Capas orientada al Dominio con .NET 4.0.]]></source>
<year>Marz</year>
<month>o </month>
<day>20</day>
<page-range>9-31</page-range><publisher-name><![CDATA[Krasis Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gevenci]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
<name>
<surname><![CDATA[Schroeder]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[VTK]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Brown]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Wilson]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<source><![CDATA[The Architecture of Open Source Applications: Elegance, Evolution, and a Few Fearless Hacks]]></source>
<year>2011</year>
<page-range>315 - 330</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ibáñez]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[King]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[ITK]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Brown]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Wilson]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<source><![CDATA[The Architecture of Open Source Applications. Volume II: Structure, Scale, and Few More Fearless Hacks]]></source>
<year>2012</year>
<page-range>100 - 126</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<collab>VOREEN - VOLUME RENDERING ENGINE</collab>
<source><![CDATA[Visualization & Computer Graphics Research Group]]></source>
<year></year>
<publisher-name><![CDATA[University of Münster]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="">
<collab>OSGi ALLIANCE</collab>
<source><![CDATA[OSGi Core Release 5. Tech. rep. OSGi Alliance]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bosh]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Design & Use of Software Architectures. Adopting and evolving a product-line approach]]></source>
<year>2000</year>
<page-range>57-62</page-range><publisher-name><![CDATA[Pearson Education]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bass]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Clements]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Kazman]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[Software Architecture in Practice]]></source>
<year>Sept</year>
<month>ie</month>
<day>mb</day>
<volume>4</volume>
<edition>3</edition>
<page-range>18</page-range><publisher-name><![CDATA[Addison-Wesley Professional]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pressman]]></surname>
<given-names><![CDATA[R.S]]></given-names>
</name>
</person-group>
<source><![CDATA[Software Engineering. A Practitioner´s Approach]]></source>
<year>2010</year>
<edition>7</edition>
<page-range>397 - 415</page-range><publisher-name><![CDATA[McGraw-Hill. Higher Education]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Clements]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Kazman]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Klein]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[Evaluating software architectures: methods and case studies]]></source>
<year>2002</year>
<page-range>28</page-range><publisher-name><![CDATA[Addison-Wesley]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
