Enseñanza del concepto de arquitectura de tres capas integrado con UML Marta E. Calderón y Allan Cedeño Escuela de Ciencias de la Computación e Informática Universidad de Costa Rica [email protected], [email protected] 1 Introducción El programa de Bachillerato en Computación e Informática de la Universidad de Costa Rica incluye en su pensum los cursos Ingeniería de software 1 e Ingeniería de software 2. El objetivo de estos cursos es introducir métodos, técnicas, herramientas y estándares modernos de ingeniería de software orientado a objetos, para resolver problemas de 1) análisis de requerimientos y diseño de sistemas de información en el curso Ingeniería de software 1 y 2) diseño arquitectónico, programación y pruebas de sistemas de software en el de Ingeniería de software 2. A lo largo de los dos cursos, los estudiantes llevan a cabo a un proyecto, el cual consiste en el desarrollo de un sistema de software. Durante el año 2011, los autores impartimos dos grupos de Ingeniería de software 1 en el primer semestre y dos grupos de Ingeniería de software 2 durante el segundo semestre. Durante el primer curso, introducimos la notación UML, incluidos todos los modelos que creemos suficientes para plantear la especificación de requerimientos y el diseño del sistema. Empezamos con el diagrama de casos de uso y la descripción detallada de estos. Continuamos con la identificación de las entidades necesarias y con ellas creamos un modelo estático conceptual. El modelo estático conceptual es un diagrama de clases de UML en el cual todas las clases son entidades. A partir de las descripciones detalladas de los casos de uso y del modelo estático conceptual, enseñamos a los estudiantes a extraer el diagrama detallado de clases y el modelo dinámico de UML. En el modelo dinámico tomamos en cuenta en diagrama de secuencia, el de actividades y de estados, aunque empezamos por el de secuencia. En este punto y pese a que el tema de arquitectura de sistemas de software corresponde al segundo curso, debimos tomar una decisión para evitar a los estudiantes doble trabajo. Consideramos que era importante introducir en este momento una arquitectura y no esperar al segundo curso, con el fin de que tanto el diagrama detallado de clases como el modelo dinámico fueran hechos desde el principio tomando en cuenta la arquitectura del sistema. En (Pressman, 2010) se recomienda que la arquitectura del sistema sea considerada lo más temprano que se pueda en el ciclo de desarrollo. Decidimos introducir la arquitectura de 3 capas por las ventajas que ofrece sobre facilidad de mantenimiento y posibilidades de crecimiento del software. El problema con que nos encontramos es que no existe material en el que pudiéramos apoyarnos para ayudar a la población estudiantil a asimilar y dominar el concepto de arquitectura de 3 capas. Por esta razón, nos dimos a la tarea de plantear una metodología para enseñar a nuestros estudiantes, a un nivel muy detallado, cómo se modela una arquitectura de tres capas con los modelos estáticos y dinámicos que ofrece el UML. 2 Metodología Para desarrollar la metodología de enseñanza de los conceptos de arquitectura de tres capas, tuvimos que optar por crear una versión simplificada de una arquitectura de tres capas utilizada comercialmente. Se definieron las clases que se requieren en cada capa y sus funciones y relaciones con otras clases. Posteriormente planteamos un sistema de información muy sencillo, y generamos el modelo de clases (modelo estático de UML) específico para este sistema y distintos escenarios o casos de uso comunes, tales como inserción, borrado y actualización de entidades. Estos escenarios fueron representados por medio de diagramas de secuencia (modelo dinámico de UML), de modo que fuera más fácil para nuestra población estudiantil comprender el concepto de la arquitectura de tres capas. Casos de uso más complejos son, por lo general, combinación de casos de uso sencillos como los que planteamos. La arquitectura de tres capas simplificada que utilizamos consta de la capa de presentación, la de lógica de negocio y la de acceso a datos, tal como se muestra en la Figura 1. La capa de presentación también es conocida como el Front end. Las capas de lógica de negocio y de acceso a datos constituyen el Back end. Para que los estudiantes practicaran y asimilaran los conceptos de la arquitectura antes de trabajar en su proyecto, se generaron varias prácticas de laboratorio. La arquitectura podría ser utilizada en otros cursos, como los de programación o bases de datos, pues se adapta al conocido patrón arquitectónico de software modelo-vista-controlador, conocido como MVC (Buschmann et al., 1996). Figura 1. Arquitectura de 3 capas 3 Componentes de la arquitectura El Front End está compuesto por objetos de cuatro clases principales: form, process, validator y helper, como se ve en la Figura 1. Los forms son los componentes de interfaz. Que muestran información al usuario. Los objetos de la clase process procesan las solicitudes realizadas en los componentes de interfaz. Los objetos de la clase validator permiten validar información del usuario. Los objetos de la clase helper son auxiliares que facilitan resolver una solicitud, como por ejemplo un formateador de fecha. El Back End representa las capas de lógica de negocio y de acceso a datos. En la capa de lógica de aplicación se encuentran los objetos de la clase action, que se encargan de llevar el control de la ejecución de una solicitud. Otras clase en la capa de lógica de negocio son service, view y converter. Un service contiene la lógica de negocio, pues implementa las operaciones que se muestran en los distintos Front Ends de la aplicación. Un objeto de la clase view proporciona el medio de comunicación entre la capa de lógica de negocios y la capa de presentación. La view es una clase de propiedades, o sea que no contiene lógica implementada, sino solo atributos y métodos get y set. La clase converter se utiliza para convertir un objeto de la clase view en uno de la clase DTO de la capa de acceso a datos, y viceversa. La capa de acceso a datos se compone por objetos de las clases DAO y DTO. DAO es la sigla de data access object y DTO de data transfer object. Un objeto de la clase DAO permite el acceso a los datos. La clase DTO representa una entidad de un modelo de clases conceptual de UML. 4 Evaluación Evaluar el éxito que tuvimos en conseguir nuestro objetivo de transmitir a nuestros estudiantes el concepto de arquitectura de tres capas no es fácil. Los estudiantes de los dos grupos se organizaron en 8 grupos para efectos de desarrollar el proyecto. Todos los grupos utilizaron la arquitectura que les suministramos, lo cual fue ya un gran logro. Sin embargo, también hicimos, al finalizar el segundo curso, una breve evaluación individual que nos permitiera determinar el grado de comprensión que habían alcanzado los estudiantes. Participaron 26 de los 27 estudiantes inscritos en ambos grupos. En la evaluación planteamos preguntas teóricas sobre la arquitectura y planteamos un escenario para un caso de uso en el que se valida una tarjeta de crédito o bien se realiza un pago con una tarjeta de crédito. El escenario se les presentó como un diagrama de secuencia en el que participan objetos de varias clases de las distintas capas de la arquitectura. Queríamos evaluar qué tanto dominan los conceptos de la arquitectura en términos prácticos. A la pregunta sobre cómo podría llamarse el caso de uso que se representa con el diagrama de secuencia, 100% de los 26 estudiantes que tomaron la evaluación acertaron la pregunta. Referencias Buschman, F., Meunier, R., Rohnert, H., Sommerlad, P. y Stal, M. (1996) Pattern-Oriented Software Architecture: A System of Patterns. Primera edición. West Sussex, Inglaterra, John Wiley & Sons Ltd. Pressman, R.S. Ingeniería del software: Un enfoque práctico. (2010) Sétima edición. México, McGraw-Hill.