viernes, 28 de septiembre de 2012

ARQUITECTURA DE SOFTWARE




El concepto de Arquitectura de Software es una extensión de la Ingeniería de Software para la producción y evaluación de software de alta calidad [18]; de acuerdo al Software Engineering Institute (SEI), la Arquitectura de Software se refiere a “las estructuras de un sistema, compuestas de elementos con propiedades visibles de forma externa y las relaciones que existen entre ellos”; que satisface el subconjunto de requerimientos, tales como: atributos de calidad, requerimientos funcionales primarios y restricciones, denominados drivers de la arquitectura. Ahora bien, el desarrollo de la arquitectura software se divide en las etapas de: Requerimientos, Diseño, Documentación y Evaluación. Será durante la etapa de diseño de la arquitectura de software que se tomen decisiones de diseño que definirán y guiarán el desarrollo de un sistema de software; para después crear un conjunto de estructuras que satisfagan los drivers arquitecturales. Por ende durante el desarrollo de un sistema software existirán una gran cantidad de decisiones que se entrelazan, de tal manera, que un cambio en las decisiones pueden afectar significativamente a otros aspectos del diseño, por lo que un arquitecto de software debe ser capaz de analizar y evaluar los efectos de las decisiones de diseño. Así, este proceso ha sido tradicionalmente considerado como un trabajo altamente creativo, que requiere una experiencia especial, juicio y  talento [13].  Las decisiones de diseño arquitectónico subyacen en el software arquitectura y se define como el conjunto de adiciones, sustracciones y modificaciones en la arquitectura software, así como también incluye, los fundamentos, las reglas y limitaciones de diseño, y requerimientos adicionales [14]. Como tal, las arquitecturas de software puede ser visto como el resultado de un conjunto de decisiones de diseño arquitectónico [10]. La práctica indica que la toma de decisiones es realizada a través del conocimiento arquitectural (Architectural Knowledge, AK) que engloba los conceptos de decisiones de diseño, justificación, alternativas y diseño arquitectural. Este conocimiento es expresado en términos de estilos arquitectónicos, patrones, mejores prácticas, arquitecturas de referencia, tácticas, frameworks, entre otros [13].










DESARROLLO DE UNA METODOLOGÍA PARA EL DISEÑO DE SISTEMAS EMPOTRADOS BAJO EL PARADIGMA DE MEJORA DEL PROCESO SOFTWARE

Desde el 2002, los Sistemas Empotrados (SE) están cada vez más presentes en la sociedad [Solingen, 2002], abarcando diversas áreas, como el transporte, la electrónica de consumo, la distribución de energía, la medicina, el control industrial, las estaciones de red, entre otras [Noergaard, 2005]. De acuerdo a [Graaf, Lormans & Toetenel, 2002] y [Noergaard, 2005], el campo de los SE es cada vez más amplio, variado y complejo; por lo que las inversiones en la industria de las tecnologías de Ingeniería de Software Empotrado para el desarrollo de este tipo de sistemas tenderán a aumentar considerablemente.

Regularmente es difícil describir a los SE ya que se encuentran en constante evolución por los avances tecnológicos, sin embargo, las descripciones coinciden en que se trata de “una mezcla de hardware y software dedicado a una aplicación especifica” [Graaf, Lormans & Toetenel, 2002]; que además “implica un desarrollo paralelo de software y de hardware” [Berger, 2002]. Su diseño se basa en los modelos clásicos de la Ingeniería de Sistemas (Bing-bang model, cascada, espiral, Code-and-fix model, etc.) y en dos elementos conceptuales: la arquitectura de hardware y la arquitectura de software. Lo anterior origina que el desarrollo de los SE sea interdisciplinario [Pearson, Giuma & Harris, 2008], involucrando así a ingenieros y técnicos especializados tanto en el diseño de hardware como en el diseño de software.

Las necesidades de las sociedades actuales, han ocasionado que los SE incrementen su complejidad y que por ende se destine mayor importancia al tiempo de desarrollo de los mismos. Ahora bien, durante el proceso de desarrollo es necesario considerar que los requisitos de los SE son únicos e impactan directamente sobre los métodos y herramientas utilizadas para su desarrollo [Ibrahim, Zhao & Kinghorn, 2006], además de la importancia que el software tiene en la funcionalidad del sistema [Liggesmeyer & Trapp, 2009].

El cambio constante en los requisitos y la complejidad variante provocaron que las metodologías de diseño actuales ya no fueran suficientes [Sangiovanni & Martin, 2001], pues los sistemas modernos exigían nuevos enfoques para su especificación, diseño y desarrollo. Debido a esto, las organizaciones que participan en el diseño, desarrollo y logística de los SE deben cambiar fundamentalmente la manera en que los desarrollan, gestionando adecuadamente la complejidad operativa y ambiental [Srinivasan, Dobrin & Lundqvist, 2009].

Con el objetivo de aumentar la calidad del producto, reducir el tiempo de comercialización, y reducir los costos de desarrollo, en [Liggesmeyer & Trapp, 2009] se recomienda que las metodologías empleadas para el desarrollo de SE deben integrar correctamente los paradigmas esenciales del diseño de software y hardware, evitando así los problemas que actualmente se presentan durante la etapa de integración [Srinivasan, Dobrin & Lundqvist, 2009].

De acuerdo a [Srinivasan, Dobrin & Lundqvist, 2009], las metodologías utilizadas actualmente en la industria de los SE no son específicas del dominio de éstos y no se encuentran estandarizadas. Es decir, estos sistemas carecen de una metodología eficaz por lo que en la industria, la sensación general es que la práctica actual de desarrollo de software y SE es insatisfactoria.

En este sentido, Graaf, Lormans y Toetenel estudiaron a siete empresas europeas en [Graaf, Lormans & Toetenel, 2003] para determinar el estado de la práctica de la Ingeniería de Software Empotrado. Una de las conclusiones clave del estudio fue que “los sistemas de decisión de ingeniería son en gran parte impulsados por las limitaciones de hardware, que a su vez, impactan los esfuerzos de software en dos etapas del ciclo de vida cuando se desarrollan los requisitos de software a nivel componente”. A pesar de que el estudio no indica de forma concisa cuáles son estas dos etapas del ciclo de vida que son afectadas, los datos ofrecidos en el estudio permiten identificar que se refieren a la Especificación de Requisitos y Diseño. Sin embargo, es claro que desde el 2000 han existido propuestas que intentan agregar formalidad al proceso de desarrollo. Algunas de estas propuestas han proporcionado metodologías para el desarrollo de SE, tales como: PROFES [Birk et al., 1998], BOOTSTRAP [Kuvaja & Bicego, 1994], REMES [Seceleanu, Vulgarakis & Petterson, 2009], PECOS [Genßler et. al., 2002], POLIS [Kang, Kwon & Lee, 2005], Métodos Ágiles [Greene, 2004], entre otros.

Desafortunadamente, las metodologías disponibles para el desarrollo de software (adaptadas al desarrollo de SE) no consideran las necesidades específicas de este tipo de sistemas [Srinivasan, Dobrin & Lundqvist, 2009].

Por todo lo anteriormente expuesto, resulta evidente que el problema actual de los SE no es la falta de normas o modelos para su desarrollo, sino la falta de una estrategia eficaz para aplicarlas con éxito. Si a esto le sumamos la extensa variedad de herramientas y métodos para desarrollar los SE, el problema se dificulta todavía más. Por lo que resulta necesario establecer una metodología de desarrollo propia para los SE; que considere la estrecha relación que existe entre el software y el hardware; que proporcione una fácil integración en el menor tiempo posible, y que refleje la calidad adecuada.

Tesis de M.C., disponible en:   jupiter.utm.mx/~tesis_dig/11487.pdf