UC3M

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

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

Organización del curso

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 50+50 minutos por semana.

1. Plantilla docente

Los profesores encargados de la docencia de esta asignatura son:

Profesor Responsabilidades
Marisol García Valls (Coordinadora) Responsable del magistral y reducido 65/69/79 en inglés: GISC(EN)-2018. (Coordinadora) Responsable del grupo magistral y reducidos 66/67: GISA-2018.
María Blanca Ibáñez (Coordinadora) Responsable del grupo magistral 61/71 y grupo reducido 71: GISC(ES)-2018.
Cristina Catalán Aguirre Grupo 65/69/79 en inglés: GISC(EN)-2018.
Javier Fernandez Galván Responsable del grupo 61: GISC(ES)-2018.
Victor Seoane Mérida Grupo 71: GIT-2018.
José Sánchez Sánchez Grupo 66: GISA-2018.
Cristina Catalán García Grupo 67: GISA-2018

Las horas de consulta están publicadas en Aula Global. 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. Como regla general no se admiten consultas por correo electrónico personal.

El calendario académico correspondiente a este año se encuentra disponible en la siguiente url: Calendario Académico .

2. 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.

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.

3. 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 3 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 en C.

  • 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.

4. 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 un Ordenador y un Sistema Operativo

    1. Kernel, procesos, sistema de ficheros

    2. Bibliotecas más importantes

  4. Diseño del proyecto

    1. Análisis de requisitos

    2. Descomposición de funcionalidad a alto nivel

    3. Diseño descendente

5. Evaluación

La asignatura la evaluamos siguiendo un esquema de evaluación continua (60%) seguido de un examen final (40%). Tienes que sacar un mínimo de un 40% en el examen final para poder superar la asignatura. A lo largo del curso obtienes puntos en pruebas tanto en las sesiones de teoría (10%) como de laboratorio (50%). Opcionalmente, cada grupo puede añadir hasta un 10% adicional sobre la nota proponiendo activades extra ad-hoc que pueden variar de grupo en grupo.

El trabajo en grupo se realiza en dos modalidades. En la primera 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 típicamente utilizamos son:

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

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

  • Entrega de fragmentos de código. Se utiliza para las sesiones de prácticas y del proyecto.

Como puedes ver, la suma total de puntos sobre la que se evalúa la asignatura es de 110 en lugar de 100.

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

Condición Nota Final
Si Examen Final (EF) < 40% teórica máxima SUSPENSO
Si EF >= 40% de nota teórica máxima EF+PR (ORD.), MAX(EF+PR, EF.100%)(EXTR.)

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 y no tener en cuenta las pruebas de evaluación continua.

6. Resumen

Puntos importantes a recordar de este documento:

  • Las actividades en el curso se han concebido como si estuvieses trabajando para el departamento de desarrollo de una empresa que crea aplicaciones 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, conocer el API de 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 un 40%+60%+10% con un mínimo del 40% en la prueba final.

  • 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.