Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2011 - Enero 2012

Organización de la asignatura

La asignatura de Arquitectura de sistemas se imparte en el primer cuatrimestre del segundo curso de las titulaciones de Grado en Ingeniería Telemática, Sistemas Audiovisuales y Sistemas de Comunicación. Tiene una carga de 6 créditos, y se imparten dos sesiones de 90 minutos por semana.

1. Plantilla docente

Los profesores encargados de la docencia de esta asignatura son:

Profesor Horas de consulta Responsabilidades
Abelardo Pardo Lunes, Martes, Viernes 10:00 - 11:00. Coordinador de la asignatura, responsable de grupo magistral 65/69/79/95, responsable de grupo magistral 71/72, responsable del grupo de prácticas 65/69/79.
Iria Estévez Ayres Lunes 12:00 - 14:00, Martes15:00 - 16:00 Responsable del grupo magistral 91/92, responsable de los grupos de prácticas 66 y 91.
Pablo Basanta Val Jueves 10:00 - 12:00 Responsable del grupo de prácticas 71.
Pedro J. Muñoz Merino Lunes 16:30-18:30, Miércoles 12:30-14:30 Responsable del grupo magistral 61/62.
Hugo A. Parada Gálvez Miércoles 15:00-17:00 Responsable del grupo magistral 66/67 y responsable del grupo de laboratorio 67
Damaris Fuentes Lorenzo Martes y Miércoles 11:00-13:00 Responsable de los grupos de prácticas 62 y 72.
Miguel Ángel Correyero García Viernes 18:00 - 20:00 Responsable del grupo de prácticas 61.
Antón Gómez Alvedro Viernes 16:00 - 18:00 Responsable del grupo de prácticas 90.
Derick Antonio Leony Arreaga Martes y Jueves 10:00-11:00, Responsable del grupo de prácticas 95.
Mar Pérez Sanagustín Martes 15:00-17:00 Responsable del grupo de prácticas 92.

Se ofrecen dos alternativas para las consultas. En persona a la hora de consultas definida por cada profesor (y que te pedimos que respetes), o a través del foro. No se admiten consultas por correo electrónico personal.

2. Grupos, horarios y aulas

La asignatura se imparte en nueve grupos que se concentran en cinco para las sesiones magistrales. Los horarios y aulas para cada grupo se muestran en la siguiente tabla.

Grupo Sesión magistral Sesión de laboratorio
61 Martes 14:30 - 16:00 Viernes 16:15 - 17:45
62 Martes 14:30 - 16:00 Viernes 14:30 - 16:00
65 Lunes 16:15 - 17:45 Viernes 14:30 - 16:00
66 Jueves 12:30 - 14:00 Viernes 9:00 - 10:30
67 Jueves 12:30 - 14:00 Viernes 10:45 - 12:15
69 Lunes 16:15 - 17:45 Viernes 14:30 - 16:00
71 Martes 16:15 - 17:45 Jueves 14:30 - 16:00
72 Martes 16:15 - 17:45 Jueves 14:30 - 16:00
79 Lunes 16:15 - 17:45 Viernes 14:30 - 16:00
90 Martes 16:15 - 17:45 Miércoles 18:00 - 19:30
91 Martes 10:45 - 12:15 Viernes 10:45 - 12:15
92 Martes 10:45 - 12:15 Miércoles 09:00 - 10:30
95 Lunes 16:15 - 17:45 Miércoles 14:30 - 16:00

Consulta con frecuencia el calendario detallado de sesiones, así como el material de cada sesión.

3. Escenario del curso

El curso consta de un conjunto de actividades cuyo hilo conductor se situa en el siguiente escenario.

La empresa SAUCEM S.L. se especializa en el desarrollo de aplicaciones para dispositivos móviles de última generación. Sus productos incluyen tanto plataformas y programas para ejecutar en los dispositivos móviles actuales, como aquellas que se ejecutarán en los dispositivos del futuro. En la actualidad cuenta con un número de aplicaciones muy populares y con una cuota de mercado en crecimiento.

Dentro de la empresa el departamento de desarrollo tiene un grupo que se especializa en el terminal Nokia N810. Las aplicaciones que se desarrollan están orientadas a sacar el mayor provecho de un terminal que tiene conexión wifi, cámara, una capacidad multimedia muy potente, y una pantalla con una resolución alta para un dispositivo móvil.

La empresa ha decidido que los mejores lenguajes de programación para desarrollar aplicaciones en este dispositivo son C, C++ y Python, y ha dividido el departamento en tres equipos de trabajo, uno para cada lenguaje. Los procesos de desarrollo utilizan varias herramientas tales como controladores de versiones, entornos integrados de desarrollo y herramientas de compilación cruzada.

Tu trabajo en este curso se incluye en el grupo de programación en C de la empresa. Tu responsabilidad consiste en aprender a desarrollar aplicaciones en lenguaje C, utilizar las herramientas más típicas de desarrollo, adquirir experiencia en el trabajo en equipo (orientado, obviamente, al desarrollo de aplicaciones para este dispositivo), y adquisición de la capacidad de auto-aprendizaje.

Para ello, el plan de formación que financia la empresa incluye la asistencia a sesiones de trabajo como las que se imparten en la asignatura tanto teóricas como prácticas y a las que la asistencia es obligatoria.

4. Resultados de aprendizaje

Los resultados de aprendizaje a obtener en este curso son:

  1. El estudiante debe ser capaz de diseñar un sistema software utilizando el lenguaje de programación C. El sistema debe contener estructuras de datos no triviales, gestión dinámica de memoria y utilizar técnicas de ingeniería para traducir un conjunto de restricciones de alto nivel, derivadas de un hipotético escenario industrial, en una aplicación robusta.

  2. El estudiante debe ser capaz de utilizar con soltura las siguientes herramientas utilizadas en entornos industriales: un compilador con las opciones para generar diferentes versiones para depuración y analizar los mensajes que se obtienen mientras se desarrolla una aplicación, un entorno de desarrollo integrado para implementar el sistema software, un programa de control de versiones para manejar los flujos de desarrollo, un compilador cruzado para crear versiones de una aplicación para los diferentes dispositivos y realizar experimentos de compatibilidad, y herramientas de análisis del comportamiento de memoria en una aplicación.

  3. El estudiante debe ser capaz de: trabajar de forma efectiva en un equipo en la ejecución de un proyecto consistente en el diseño de una aplicación software para un dispositivo móvil, generar ideas de forma colaborativa en un equipo y optimizar su rendimiento para cumplir con los requisitos del proyecto, y dividir las tareas de forma efectiva entre los miembros del equipo.

  4. El estudiante debe ser capaz de: aprender de forma autónoma, manipular las diferentes fuentes de información, generar información concisa sobre las tareas conseguidas, manejar el tiempo de trabajo personal, y presentar de forma efectiva los resultados derivados de su trabajo.

Cada uno de estos resultados de aprendizaje a su vez consta de una lista de objetivos más concretos. Una descripción más detallada se incluye en el documento Resultados de aprendizaje y objetivos de la asignatura .

La organización y metodología seguida en el curso está orientada a que consigas los resultados de aprendizaje descritos en la sección 4 mediante un esquema de evaluación continua. Para que consigas estos objetivos hemos asumido lo siguiente:

  • Sabes escribir programas con múltiples funciones o métodos en múltiples ficheros.

  • Estás familiarizado con estructuras de datos no triviales y sabe programar operaciones básicas sobre ellas.

  • No tienes experiencia alguna en el desarrollo de aplicaciones para dispositivos móviles.

  • No tienes conocimiento previo del entorno de trabajo Linux (pero si lo conoces, esto facilitará la curva de aprendizaje en el curso).

  • Dedicarás dos horas de preparación a cada una de las sesiones de la asignatura. Durante esas horas, realizarás las actividades propuestas y si surgen dudas o problemas las solventarás en las horas de consulta o en el foro de la asignatura.

  • Sabes distribuir las horas de trabajo en la asignatura de forma efectiva a lo largo de la semana y conseguir que ese tiempo sea verdaderamente productivo.

  • Te motiva el contenido de la asignatura y estás dispuesto a acometer el esfuerzo de trabajo semanal que conlleva.

  • Si decides participar en el esquema de evaluación continua, lo haces de manera continua hasta el final del curso.

De estas condiciones se deduce que si no has aprobado los dos cursos de programación de primero, no debes cursar Arquitectura de Sistemas. Puede que conozcas a compañeros que lo hayan hecho con éxito, pero el esfuerzo que supone y las probabilidades de éxito hacen desaconsejable esta estrategia.

5. Temas del curso

Los temas en los que se divide la asignatura son los siguientes:

  1. El lenguaje de programación C

    1. Tipos de datos básicos, funciones y construcciones de flujo

    2. Estructura de una aplicación C. El pre-procesador, división de ficheros, creación de un ejecutable.

    3. Manipulación de punteros.

  2. Gestión dinámica de memoria en C

    1. Estructuras de datos dinámicas

    2. Fugas de memoria

    3. Herramientas de detección de fugas

  3. Arquitectura de la plataforma Nokia N810 Maemo

    1. Kernel, procesos, sistema de ficheros

    2. Bibliotecas más importantes

    3. El entorno de compilación cruzada

  4. Diseño del proyecto

    1. Análisis de requisitos

    2. Descomposición de funcionalidad a alto nivel

    3. Diseño descendente

6. Las sesiones

Tal y como se ha descrito en la sección 5, el material del curso está dividido en cuatro bloques, y cada bloque consta a su vez de sesiones de dos tipos: teóricas y de laboratorio. El material para todas las sesiones tiene la misma estructura. Un conjunto de actividades previas que necesitas hacer para luego resolver las actividades de clase.

Las actividades previas a una sesión han sido pensadas para que le dediques 120 minutos (2 horas) y se asume que tendrás que consultar detalles de los ejercicios con los profesores. Las actividades en clase estan diseñadas para los 90 minutos que dura la sesión.

La asignatura está organizada tal que es esencial que hagas las actividades previas para aprobar el curso. En la sección 7 se describe con detalle el esquema de evaluación que se utiliza, pero la idea es valorar el trabajo sostenido a lo largo de todas las semanas, y la forma de comprobarlo es mediante pruebas derivadas de material de las actividades previas.

6.1. Sesiones de teoría

Las clases de teoría están basadas en tu participación y en el material incluido en las actividades previas. En estas sesiones revisaremos los conceptos nuevos introducidos en estas actividades previas, plantearemos ejercicios para resolver tanto individualmente como por grupos e introduciremos nuevos conceptos. En algunas de estas sesiones realizaremos pruebas de evaluación anunciadas.

Esperamos, por tanto, que vengas a estas sesiones de teoría con el material preparado y dispuesto a trabajar en los conceptos e ideas que en ese material se cubren. Un comportamiento pasivo en estas sesiones redundará en un efecto negativo en el curso.

6.2. Sesiones de laboratorio

En las sesiones prácticas de este curso utilizaremos un entorno de desarrollo adaptado al dispositivo móvil Nokia N810 (que se muestra en la siguiente figura).

Este entorno require no sólo el dispositivo en sí, sino también un ordenador personal con una herramienta especial que emula el comportamiento del dispositivo. En este ordenador se diseñan las aplicaciones y una vez están listas, se transfieren al dispositivo para probarlas.

Esto significa que tu trabajo se realiza en un ordenador con un conjunto de herramientas especiales instaladas. Las sesiones de laboratorio, al igual que las magistrales, tienen también actividades previas, y por tanto, debes utilizar este entorno de desarrollo fuera del laboratorio. Para facilitar tu trabajo se ha creado una máquina virtual que contiene todas las herramientas de este entorno para que la puedas ejecutar en tu propio equipo.

Esta máquina es como un programa más que instalas en tu ordenador pero es capaz de simular la ejecución de una maquina completa (de ahí el nombre de máquina virtual) como otra aplicación en tu ordenador (que se llama, para diferenciar, la máquina real). Si dispones de tu ordenador personal, es recomendable que te instales esta máquina virtual, pues con ella podrás trabajar en las actividades de la asignatura.

El entorno de desarrollo que utilizaremos en el curso requiere bastante espacio en disco y una importante potencia de cálculo para su ejecución. Esto, combinado con el uso de una plataforma de gestión de versiones que almacenará todos tus ficheros de prácticas en un servidor remoto hace que el uso de un ordenador portátil, sea recomendable, aunque no imprescindible. Por tanto, si dispones de tal equipo y quieres utilizarlo, no hay ningún problema.

6.3. El trabajo en equipo

Tal y como se ha mencionado en la sección 4, uno de los resultados de la asignatura es la aplicación de técnicas de trabajo en equipo. El curso comienza con sesiones de laboratorio que realizarás con una pareja que tú escoges. Pero en la segunda mitad del curso las prácticas las harás en un grupo de cuatro personas creado por el equipo docente.

El trabajo en equipo se ha identificado como una destreza que cada vez es más necesaria en el mercado laboral actual. Trabajar en equipo no quiere decir simplemente que hagas un trabajo con unos amigos. Está demostrado que bajo ciertas condiciones de funcionamiento, un equipo es capaz de obtener resultados mucho más ambiciosos que los que se obtienen combinando las individualidades. Pero conseguir las condiciones óptimas para el funcionamiento de un equipo también está demostrado que no es fácil.

En la asignatura hemos incluido sesiones especiales para analizar qué quiere decir que un equipo funciona correctamente, cómo se detectan anomalías y mecanismos para corregirlos.

6.4. Tu semana

A la vista de la metodología del curso y de la carga de trabajo que ha sido planificada, una posible estructura del trabajo que esta asignatura te supondrá a lo largo de una semana se muestra en la siguiente figura.

Las actividades previas a una sesión, al ser tan importantes para lo que en ella se trata, conviene que las empieces a resolver con cierta antelación para incluir, si lo necesitas, una sesión de clarificación de dudas con el profesor (ya sea en horas de consulta o a través del foro).

La duración de las actividades es orientativa, pero te tiene que servir para evaluar cómo está siendo tu desempeño. Si una actividad la resuelves en mucho más tiempo del que se sugiere, analiza el por qué. Si es porque no has hecho un uso productivo del tiempo (demasiadas interrupciones, falta de concentración, etc) asegúrate de que reconduces la situación. Si es porque no entiendes el material, vete urgentemente a hablar con el profesor para revertir la situación. Cuanto antes pongas remedio a esta situación, más aumentas tus posibilidades de acabar el curso con éxito.

Aunque las actividades más relacionadas con el desarrollo de programas suelen estar planificadas antes de las sesiones de laboratorio, es muy recomendable que utilices el entorno de desarrollo (esto es, la máquina virtual) también para los ejercicios que se cubren en las sesiones teóricas. En múltiples ocasiones se pedirá el diseño de una estructura de datos, o analizar el comportamiento de un programa bajo ciertas circunstancias, y las pruebas de corrección se pueden hacer facilmente utilizando el compilador o el depurador. Es recomendable, por tanto, que tengas este entorno disponible cada vez que te pones a trabajar con cualquier material de la asignatura.

En la segunda mitad del curso, cuando estemos trabajando en equipo, las actividades serán más complicadas de planificar y requerirán que te reunas con tu equipo. Es muy importante que sepas organizar tu trabajo para combinar ambas actividades.

7. Evaluación

La asignatura la evaluamos siguiendo un esquema de evaluación continua. A lo largo del curso obtienes puntos en múltiples pruebas tanto en las sesiones de teoría como en la de prácticas. El trabajo en el curso se hace tanto de forma individual como en grupo. Como consecuencia, tendrás una nota nota teórica (TE) y una Nota de práctcas (PR). La distribución de estos puntos entre los diferentes bloques la puedes ver en la siguiente tabla.

Bloque Teórica (TE) Práctica (PR) Total
El lenguaje de programación C (DSP) 15 (10 + 5) 2 17
Gestión dinámica de memoria en C (MMC) 15 (10 + 5) 10 25
Arquitectura de la plataforma Nokia N810 Maemo (MSA) 5 (5 + 0) 3 8
Diseño del proyecto(PRJ) 10 + 10 + 10 10 + 15 + 5 60
Total 65 45 110

El trabajo en grupo se realiza en dos etapas. En la primera (que cubre los tres primeros bloques) las actividades se hacen con un compañero que tú escoges. En la segunda parte, que abarca la realización del proyecto, la plantilla docente crea equipos de cuatro o cinco personas. La siguiente figura muestra estas dos modalidades de trabajo combinada con la distribución de puntos en bloques.

Los métodos de evaluación que utilizamos son:

  • Examen con preguntas tipo test. Utilizado en las sesiones magistrales para las pruebas anunciadas.

  • Examen escrito en el que tienes que escrbir un fragmento de código (estructura de datos y/o funciones).

  • Entrega de fragmentos de código a través del controlador de versiones. Se utiliza para las sesiones de prácticas y del proyecto.

Como puedes ver, la suma total de puntos sobre la que se evalua la asignatura es de 110 en lugar de 100. Esto está pensado para que, si debido a algún imprevisto, no te puedes presentar a una prueba, su efecto sea tal que todavía puedas sacar la máxima nota en la asignatura. La razón de esta política es para que la ausencia a la prueba de evaluación no la tengas ni que anunciar ni que justificar. Si tu trabajo en la asignatura es satisfactorio, su impacto será nulo.

La nota final del curso se obtiene mediante las fórmulas que se muestran en la siguiente tabla:

Condición Nota Final
Si TE < mitad de nota teórica máxima (95*TE/65) + (15*PR/45)
Si TE >= mitad de nota teórica máxima MAX((95*TE/65) + (15*PR/45), (45*TE/65) + (65*PR/45))

El curso lo tienes aprobado si la nota final es igual o superior a 50. Con esta política el trabajo individual se valora más que el desarrollado en grupo, a no ser que se obtenga cierto nivel en el primero, en cuyo caso, se considera una segunda ponderación de las notas y se selecciona la más alta de las dos.

Además de la evaluación continua, también puedes optar por presentarte directamente la examen de la convocatoria ordinaria (en el que la normativa establece que sólo se opta al 60% de la nota) y no tener en cuenta las pruebas de evaluación continua. La decisión sobre cual de estas dos vías de evaluación seguir las puedes tomar hasta justo antes del comienzo del trabajo en el proyecto. Consideraremos que si te comprometes con el grupo y firmas ese documento, estarás optando por la evaluación continua (y por tanto no tendrás derecho a hacer el examen final).

8. Resumen

Puntos importantes a recordar de este documento:

  • Las actividades en el curso se han concebido como si estuvieses trabajando para el departamento de desarrllo de una empresa que crea aplicaciones móviles escritas en C.

  • Como las sesiones tienen tareas previas, contamos con que harás uso extensivo o del foro o de las sesiones de consultas.

  • Los objetivos del curso son: programar en C, utilizar herramientas de desarrollo industrial, trabajar de forma colaborativa y fomentar la capacidad de autoaprendizaje.

  • Te recomendamos encarecidamente que si no has aprobado los dos primeros cursos de programación no intentes cursar esta asignatura pues los objetivos serán mucho más difíciles de alcanzar.

  • El curso consta de sesiones de teoría, y sesiones de laboratorio. En las primeras se estudian conceptos y se resuelven ejercicios y en las segundas se practican las técnicas aprendidas.

  • Se recomienda que tengas tu propio entorno de desarrollo (pantalla de comandos + editor) siempre listo para probar código, escribir fragmentos de programa, comprobar la solución de un ejercicio, etc.

  • Las sesiones de laboratorio se harán en grupos. La primera mitad en parejas que escoges tú, y la segunda en equipos de cuatro personas formados por el equipo docente.

  • Debes planificar meticulosamente las sesiones de estudio personal durante la semana para llegar a las clases con el material preparado.

  • El esquema de evaluación consta de pruebas teóricas y prácticas. La nota final pondera 95/110 a las primeras y 15/110 a las segundas. Si el nivel en las pruebas teóricas llega a un cierto umbral, se considera una segunda forma de evaluación en la que cuenta más el trabajo en grupo. En este caso, la nota final es la más alta que se obtenga de los dos esquemas.

  • Durante el curso se harán ejercicios y problemas que requieren escribir código. Se recomienda que siempre se disponga de la máquina virtual con el entorno de desarrollo listo para verificar los resultados.