Académique Documents
Professionnel Documents
Culture Documents
Presentación y objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V
2. Fase de especicación 5
3. Fase de diseño 7
4. Fase de implementación 9
5. Fases de pruebas 13
7. Metodologías de desarrollo 17
Bibliografía 21
III
ÍNDICE GENERAL ÍNDICE GENERAL
IV
Guía de estudio de la asignatura
Autores: Manuel Arias Calleja. Basado en una versión del año 2003 por Manuel Arias
Calleja y José Ramón Álvarez Sánchez.
Revisado: Octubre de 2006 por Manuel Arias Calleja y Ángeles Manjarrés Riesco
Revisión de los elementos del UML: Ángeles Manjarrés y Manuel Arias Calleja
o
Código: 55-402-4 (4 curso de la titulación: Ingeniero Informático)
Breve descripción:
Análisis y denición de requisitos. Diseño, propiedades y mantenimiento del soft-
ware.
Presentación y objetivos
V
ÍNDICE GENERAL ÍNDICE GENERAL
Ingeniería del software es una materia troncal del segundo ciclo que en la titulación
de Ingeniero en Informática, impartida por la ETSII de la Universidad Nacional de Edu-
cación a Distancia (Resolución de 21 de marzo de 2001, BOE 10 de abril), se ha dividido
en dos asignaturas obligatorias y anuales del cuarto curso, cada una de las cuales tiene
asignados 9 créditos (5 teóricos y 4 prácticos). Las denominaciones que se han dado a es-
tas dos asignaturas complementarias son Análisis, Diseño y Mantenimiento del software
(descrita como Análisis y denición de requisitos. Diseño, propiedades y mantenimiento
del software) y Análisis y Gestión del Desarrollo del Software (descrita como Análisis
de aplicaciones. Gestión de conguraciones. Planicación y gestión de proyectos infor-
máticos).
Ambas asignaturas se hayan fuertemente vinculadas, en tanto que se complementan
para proporcionar una visión general del proceso completo de la producción de software,
tanto desde un punto de vista técnico como humano, vertientes que caracterizan todo pro-
ceso de ingeniería.
El programa de la asignatura Análisis y Gestión del Desarrollo del Software está es-
tructurado en dos cuatrimestres. El primer cuatrimestre se dedica al Proceso Software
Personal (PSP), cuyo objetivo es la adquisición de una correcta disciplina personal para
el desarrollo de un software de calidad en los plazos y costes comprometidos. El segun-
do cuatrimestre está dedicado a la gestión global del proceso de desarrollo software en
el que intervienen decenas o centenares de ingenieros. Su objetivo es también obtener un
software de calidad en los plazos y costes planicados, si bien en este caso se destacan
la problemática y las técnicas asociadas al trabajo en equipo. Las asignaturas de Inge-
niería del software deberían, idealmente, ser cursadas en paralelo por los alumnos, dado
su carácter mutuamente complementario. En denitiva, el objeto de la asignatura Análisis
y Gestión del Desarrollo del Software es mostrar cómo se evalúan las técnicas de inge-
niería estudiados en la asignatura Análisis, Diseño y Mantenimiento del software, y cómo
se aplican en un contexto profesional.
VI
ÍNDICE GENERAL ÍNDICE GENERAL
Por otro lado, el alumno sólo podrá dar pleno sentido al contenido de esta materia si ha
cursado las asignaturas que se encuadran en el componente que en la sección anterior se
ha etiquetado por Fundamentos de la computación. Entre tales asignaturas se cuentan las
relacionadas con la teoría de la programación (Programación I, Programación II, Progra-
mación III, Estructura de Datos y Algoritmos y Lenguajes de Programación, todas ellas
asignaturas obligatorias del primer ciclo), y las que estudian la teoría de la computabili-
dad (Teoría de autómatas I, Teoría de autómatas II). (Obviamente, la comprensión de las
mencionadas asignaturas a su vez ha exigido del alumno los conocimientos matemáticos
que se proporcionan en las asignaturas Lógica matemática, Análisis Matemático, Álgebra,
Ampliación de Matemáticas y Matemática discreta.
Resulta asimismo altamente recomendable que el alumno haya cursado también algu-
nas asignaturas relacionadas con los temas anteriores pero de una orientación más práctica
y especíca. Es el caso de las optativas del tercer curso Programación Concurrente, Pro-
gramación Declarativa y Programación Orientada a la Inteligencia Articial (orientadas a
la programación), y Diseño y Evaluación de Conguraciones, y Conguración, Diseño y
Gestión de Sistemas Informáticos.
VII
ÍNDICE GENERAL ÍNDICE GENERAL
VIII
ÍNDICE GENERAL ÍNDICE GENERAL
Esta asignatura es anual y por lo tanto se divide en dos parciales. A los efectos de
exámenes parciales se considera que los temas del 1 al 4 pertenecen al primer parcial y los
temas del 5 al 8 pertenecen al segundo parcial.
Esquema:
• Obtención de requisitos
• Análisis de requisitos
• Representación de requisitos
• Validación de requisitos
• Bases de documentación
• Métodos de diseño
• Documentación de pruebas
IX
ÍNDICE GENERAL ÍNDICE GENERAL
• Herramientas CASE
En los siguientes capítulos de esta guía de estudio se detallan los contenidos con la
información que el alumno de educación a distancia necesita para poder estudiar la asig-
natura. Al principio de cada capítulo se incluye un Tutorial previo con los elementos que
describen el contexto, conocimiento previo, objetivos y guía de estudio para ese capítulo.
En esta asignatura se utilizará como material básico de estudio el libro [Pre05] (opcional-
mente se podrá seguir la asignatura con la edición anterior [Pre01], pero la referencia para
las preguntas de los exámenes es la sexta edición):
Este libro base cubre la mayor parte del temario. En esta guía los contenidos de cada capí-
tulo se sustituirán por la referencia (entre corchetes como [Pre05, sec. ... y cap ...]) a los
apartados del libro base, o bien se incluirán desarrollados directamente en esta guía si no
existe una correspondencia directa con el libro base. Al nal de cada capítulo se incluye
en esta guía un Tutorial posterior que contiene ejercicios o actividades propuestas adi-
cionales a las que aparecen en el libro base, para que el alumno pueda comprobar si ha
X
ÍNDICE GENERAL ÍNDICE GENERAL
logrado los objetivos del capítulo, y también información adicional para la extensión de
conocimientos para los alumnos interesados en profundizar en el tema, junto con referen-
cias alternativas sobre los mismos contenidos. Al nal de esta guía didáctica se incluye en
un apéndice el glosario de términos habituales en la Ingeniería de Software que pueden
1
aparecer en el contenido , también se incluye una recopilación de referencias bibliográ-
cas (recomendadas o referidas en el material), más un indice alfabético de referencia para
conceptos y términos que aparecen en el material.
Medios Adicionales
James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and William
Lorensen. Modelado y diseño orientado a objetos. Metodología OMT y OMT II.
Prentice Hall, 1996
Evaluación
1
Además al nal del libro base [Pre05] o [Pre01] hay un apéndice que recopila todas las siglas en ingles
y castellano usadas profusamente en Ingeniería del Software.
XI
ÍNDICE GENERAL ÍNDICE GENERAL
relevantes del temario correspondiente, más posiblemente otra parte práctica compuesta
de ejercicios con supuestos prácticos que describirán parcialmente un problema de diseño
de software sobre el cual se pedirá al alumno completar o extender algunos aspectos rela-
cionados con el temario correspondiente. La puntuación correspondiente a cada pregunta
se especicará en el enunciado. En la nota nal se tendrá en cuenta la compensación en-
tre preguntas dentro de un mismo examen parcial así como la compensación de ambos
parciales. Los parciales compensan a partir de 4 y se guardan hasta septiembre.
En algunos capítulos puede haber propuestas para realizar prácticas por el propio alum-
no, estas serán totalmente voluntarias (y que por tanto no podrán ser tenidas en cuenta para
la puntuación de la nota nal), pero se recomienda al alumno su realización para ayudarle
a una mejor comprensión de los temas.
XII
Capítulo 1
Contexto de la asignatura en la
Ingeniería de Software
Tutorial previo
Introducción
1
CAPÍTULO 1. CONTEXTO DE LA ASIGNATURA EN LA INGENIERÍA DE
SOFTWARE
Con este tema se pretende asegurar que el alumno dispone de base suciente para
abordar el estudio del resto de la asignatura. Es recomendable el repaso de las asignaturas
previas de la titulación en que se estudiaron las bases de la Ingeniería del Software y el
desarrollo de programas.
Al mismo tiempo este tema es importante por proporcionar una visión general de las
diferentes fases de un ciclo de desarrollo de software y de su coordinación en metodologías.
Para hacerse una composición de lugar sobre lo que se habla en este capítulo y en la
asignatura en general es recomendable haber desarrollado algún proyecto en un lenguaje
de programación.
Este tema es introductorio. El alumno debe comprobar que dispone de los conocimien-
tos básicos necesarios para afrontar el resto de la asignatura, entendiendo la estructura
general del desarrollo del software, así como las implicaciones y relaciones con la plani-
cación y gestión de proyectos informáticos. Para ello debe: comprender la necesidad de
utilizar una metodología en el desarrollo de aplicaciones, comprender las ventajas e in-
convenientes de los diferentes ciclos de vida para discernir cuando es adecuado usar uno u
otro, y saber utilizar (en un nivel medio) la notación UML para la especicación y diseño
de sistemas.
Es conveniente realizar una lectura inicial del tema para identicar sus contenidos y
repasar los conceptos que considere necesarios, bien acudiendo a textos de asignaturas ya
cursadas, bien estudiando las referencias proporcionadas en el apartado de extensión de
conocimientos. El capítulo tiene tres partes:
Los ciclos de vida. Se da una descripción de cada uno y una lista de ventajas e in-
convenientes. También este apartado está en la adenda y se debe extender su estudio
en el libro base [Pre05, secs. 3.1 a 3.5.3 y 3.7].
2
CAPÍTULO 1. CONTEXTO DE LA ASIGNATURA EN LA INGENIERÍA DE
SOFTWARE
3
CAPÍTULO 1. CONTEXTO DE LA ASIGNATURA EN LA INGENIERÍA DE
SOFTWARE
4
Capítulo 2
Fase de especicación
Tutorial previo
Introducción
Una vez que el proyecto ha superado tanto la decisión de desarrollarlo como su estudio
de viabilidad (estudiado en otras asignaturas) empieza la fase de especicación, donde se
emplean un conjunto de técnicas para captar requisitos y representarlos de un modo útil
para la fase posterior de diseño.
Se dice que la especicación es la fase importante mientras que el diseño es la difí-
cil. La importancia se debe al alto coste económico y de tiempo que supone un requisito
mal entendido. La realización de una buena especicación no es tan sencillo como se
puede pensar en un principio, pues muchas veces el propio cliente no tiene una imagen
clara del sistema nal o surgen nuevas necesidades a mitad del desarrollo. Este problema
puede afrontarse de varias formas: usando técnicas de comunicación efectivas, estudiando
el dominio del problema, creando modelos del problema real y, por último, revisando la
especicación creada.
Se deben documentar y registrar debidamente todas las actividades anteriores para que
en caso de que surja algún problema se pueda seguir su traza hasta los requisitos.
5
CAPÍTULO 2. FASE DE ESPECIFICACIÓN
Es necesario en esta fase separar y entender los conceptos propios de cómo especicar
un problema y cómo hacer útil esas especicaciones para posteriores fases del desarrollo.
El alumno debe ser capaz de extraer y representar un conjunto de requisitos expresados en
lenguaje natural a una representación que sirva de entrada a la fase siguiente de diseño.
6
Capítulo 3
Fase de diseño
Tutorial Previo
Introducción
Una vez que se han identicado los requisitos para el problema, es necesario idear y
componer la forma de la solución para el problema. El diseño es la fase en la que se estudia
el problema, se identican las características que tendría una solución y se analiza a su vez
cada una de esas características. En la fase de diseño es más efectivo utilizar patrones y
modelos conocidos para ir resolviendo partes del problema, es decir modularizar el prob-
lema y proyectarlo en módulos en la solución. Aunque, el proceso de diseño es en gran
medida ad hoc, es decir, no está tan formalizado como las otras fases y por tanto se apoya
bastante en la experiencia e intuición de los diseñadores.
En este tema se van a proponer las formas de diseño convencionales, una comparación
de los más utilizados y la validación o comprobación de su adecuación, junto con la parte
correspondiente de documentación de todo el proceso. Principalmente hay dos tipos de
diseño:
Diseño funcional: parte de una vista de alto nivel que se va renando progresiva-
mente. En este caso la atención se focaliza en la forma de procesar los datos.
7
CAPÍTULO 3. FASE DE DISEÑO
Para la comprensión de este tema es conveniente tener en mente los diferentes mode-
los de programación que han ido estudiando en la carrera y que se utilizarán después en la
fase del tema siguiente. También es necesario haber preparado el tema de requisitos para
entender cuáles son los elementos de entrada en el diseño. Es necesario saber: descom-
poner un problema en otros más pequeños, identicar las estructuras de datos necesarias e
identicar ujos de datos entre subsistemas y cuáles son las entradas y salidas necesarias
para cada subsistema.
Se deben obtener los conocimientos sobre las técnicas de diseño más efectivas y uti-
lizadas, junto con la comprensión de las diferencias entre esas técnicas que permitan cono-
cer cuál es el método más apropiado en cada situación. Se pretende en este tema introducir
los dos tipos de métodos que existen de diseñar un sistema y proporcionar un método
genérico para redactar la documentación.
A la vez que se estudia el contenido teórico del tema es conveniente ir siguiendo los
ejemplos propuestos y realizar algunos ejercicios simples con otros problemas, utilizando
los problemas supuestos por el alumno como ejercicios en el tema 2.
Como se ha dicho antes, la tarea de diseño es en gran medida ad hoc y depende de
la experiencia de los diseñadores. El mejor método para aprender a diseñar es realizar
todos los ejercicios propuestos (tanto explícitos, en el tutorial posterior, como implícitos o
genéricos mencionados anteriormente).
8
Capítulo 4
Fase de implementación
Tutorial Previo
Introducción
Una vez que se dispone de un diseño para la solución del problema, incluso en una
fase temprana o provisional del diseño, ya se puede comenzar a plasmar ese diseño en el
código que permita realizarlo o implementarlo. En esta fase el programador recibe las es-
pecicaciones del diseño y transforma esas especicaciones, que pueden estar en formatos
mezclados formales, semiformales o manuales, en un programa o módulo que las efectúe.
Esta tarea de modicación puede estar semi-automatizada en algunos casos o realizarse
de forma completamente manual. En cualquier caso se requiere que esa transformación
se haga de manera sistemática y coherente. Las particularidades propias de lenguajes de
programación concretos se estudian en otras asignaturas y por tanto no se incluirán en este
tema. Lo que sí se estudiarán son las técnicas o estilos de codicación formal.
9
CAPÍTULO 4. FASE DE IMPLEMENTACIÓN
ejecución correcta del módulo, por tanto interesan las pruebas que se hacen a nivel de mó-
dulo, también llamadas pruebas unitarias. Además de todo ello hay dos tipos de manuales
importantes que hay que producir en esta etapa: el manual de usuario y el manual técnico.
En este capítulo el alumno debe recordar los conocimientos sobre programación que
ha ido adquiriendo a lo largo del estudio de otras asignaturas en la carrera para enten-
der y generalizar la idea de los estilos de codicación y la depuración. Para comprender
la problemática asociada a la programación es necesario conocer muy bien al menos un
lenguaje de programación y tener alguna experiencia con él. Se puede considerar que con
las prácticas de programación de cursos pasados es suciente.
Los objetivos de este tema son resaltar la importancia de que la codicación de los
programas se haga de una forma ordenada, sistemática y documentada, así como de la
necesidad de realizar pruebas y depuración de errores propios de la implementación. Se
busca aprender algunas recomendaciones para producir código de calidad, poder entregar
el código en tiempo mínimo, poder dividir el trabajo resultante del diseño entre un grupo
de personas y tener una plantilla para redactar documentación para los manuales de usuario
y técnico.
Después del estudio del contenido teórico del tema, se deben realizar pruebas de cod-
icación con distintos estilos basándose en los mismos ejemplos mostrados, utilizando
el lenguaje de programación que mejor conozca o preera el alumno. En paralelo con el
estudio del tema podría ser de interés que se desarrollara un pequeño proyecto de progra-
mación donde se pusieran en práctica los conceptos desarrollados en el capítulo.
Para conseguir los objetivos es necesario no sólo memorizar el contenido del capítulo,
sino desarrollar hábitos que permitan utilizarlo en la práctica de la programación, lo cual
es una tarea que requiere constancia. La redacción de una documentación de calidad no es
trivial, son necesarias aptitudes pedagógicas, de estilo de escritura, etc. De todas formas,
aunque puede resultar difícil las primeras veces, se puede considerar una tarea burocráti-
ca, es decir, al nal lo que hay que hacer es seguir un manual de redacción de manuales.
10
CAPÍTULO 4. FASE DE IMPLEMENTACIÓN
11
CAPÍTULO 4. FASE DE IMPLEMENTACIÓN
12
Capítulo 5
Fases de pruebas
Tutorial Previo
Introducción
Este tema está muy relacionado con los anteriores temas 3 al 5 correspondientes a
las fases de requisitos, diseño e implementación, donde se deben distribuir las pruebas
13
CAPÍTULO 5. FASES DE PRUEBAS
Se debe extraer una idea clara de que los principios de ingeniería requieren la compro-
bación y vericación de todos los elementos intermedios en el proceso de desarrollo, en
este caso, del software. También se deben conocer técnicas que indiquen los errores que
se comenten, tanto de concepción de la tarea a realizar como de las funcionalidades que se
implementen y que esta detección ocurra lo antes posible.
Pruebas orientadas a objetos. Este apartado se debe estudiar en [Pre05, secs. 14.7 a
14.9].
14
Capítulo 6
Tutorial Previo
Introducción
Como etapa nal en el ciclo de vida del software se debe realizar la entrega de la
primera versión al cliente y considerar las posibles modicaciones posteriores de manten-
imiento. Dentro del mantenimiento se deben incluir no sólo las correcciones de errores
detectados posteriormente por el cliente, sino también las modicaciones necesarias para
la actualización, e incluso las peticiones de cambios por parte del cliente. Una vez que
se entrega el producto, no ha acabado el trabajo, en realidad, es cuando empieza (y de
hecho, existen organizaciones que viven de ello, por ejemplo las que dan soporte para
GNU/Linux y para otras aplicaciones de libre distribución). Existen varios tipos de man-
tenimiento, corregir errores es uno de ellos, otros son adaptar el sistema a nuevos entornos
o para proporcionarle nuevas funcionalidades. Es interesante medir el esfuerzo que se gas-
ta en mantenimiento, para lo que también existen sus correspondientes métricas.
La documentación describe el sistema desde la especicación de requisitos hasta la
aceptación por parte del usuario. Esta información debe estar estructurada y ser legible.
Existen herramientas CASE que automatizan esta parte (hasta donde es posible).
Este tema presenta los elementos nales del ciclo de vida del software y está relaciona-
do con la planicación general del mismo que se presentó en el primer tema y con las fases
de desarrollo en los anteriores.
15
CAPÍTULO 6. FASE DE ENTREGA Y MANTENIMIENTO
El contenido del tema es principalmente teórico por lo que la metodología está más
orientada al estudio de los contenidos y la reexión sobre los ejemplos.
16
Capítulo 7
Metodologías de desarrollo
Tutorial Previo
Introducción
Una vez que hemos visto las fases más habituales del proceso de análisis, diseño y
mantenimiento del software, es necesario estudiar algunas formas de agrupar, organizar,
secuenciar y distribuir temporalmente las tareas estudiadas, según los detalles de diferentes
metodologías. Una metodología constituye, en denitiva, el manual o guía que realmente
se pone en práctica al abordar la construcción de un sistema. Las metodologías de desar-
rollo puede decirse que consisten en poner orden en todo lo que se ha ido viendo hasta
ahora, es decir, utilizan un ciclo de vida determinado y siguen las fases de especicación,
diseño, etc. de un modo concreto; algunas incluso están apoyadas por herramientas hechas
a medida (por ejemplo el método Rational).
El tipo de metodologías que se van a ver están orientadas a objetos que son del tipo
que demanda el mercado actualmente y además dan buenos resultados. Se estudia en
primer lugar el Proceso Unicado de Rational por su amplia difusión y consideración de
metodología tradicional. A continuación se presenta una metodología alternativa muy re-
ciente, llamada Extreme Programming, que tiene características muy interesantes. A
continuación se presenta la metodología de planicación, desarrollo y mantenimiento
de sistemas de información del Ministerio de las Administraciones Públicas denomina-
da Métrica (versión 3). Finalmente se hace una aproximación hacia nuevos enfoques de
desarrollo de software surgidos a raíz del movimiento del Software Libre.
17
CAPÍTULO 7. METODOLOGÍAS DE DESARROLLO
Es necesario que el alumno haya estudiado previamente los temas 3 al 7, para que
comprenda cuáles son los elementos que conforman todo el proceso de desarrollo del
software. En este tema el alumno podrá retomar también los conceptos globales que se
dieron en el primer tema donde encajan las diferentes fases.
Este capítulo es principalmente teórico, pero tiene una vertiente práctica (ver aparta-
do de actividades) que se recomienda realizar, al menos de forma simulada imaginando
los diferentes escenarios, ya que al igual que ocurría en el capítulo dedicado a la imple-
mentación, la única manera de asimilar realmente este capítulo es realizar un proyecto
donde se ponga en práctica alguna metodología. No se debe pensar que se domina real-
mente una metodología hasta que se ha puesto en práctica dentro de un grupo de desarrol-
lo. El problema que tiene el aprendizaje de una metodología es que no se puede afrontar
fácilmente como un esfuerzo individual (como con el PSP).
18
Capítulo 8
Tutorial Previo
Introducción
Existen varias herramientas informáticas que facilitan las técnicas de la ingeniería del
software en diferentes aspectos. En este tema se estudian en primer lugar las herramientas
CASE, posteriormente veremos una herramienta muy genérica para el desarrollo de ver-
siones de cheros de forma concurrente (CVS) y nalmente algunos entornos genéricos
de programación.
En el mercado hay varios tipos de herramientas CASE (Computer Aided Software En-
gineering) para múltiples propósitos: planicación de proyectos, herramientas de análisis
y diseño, de documentación, etc. Algunas sólo tratan de un tema concreto y otras abarcan
todas las fases de una metodología.
CVS es un sistema de almacén de cheros (repository) centralizado en un servidor. El
propósito de introducir este apartado aquí es dar a conocer una herramienta que se usa en
el control de conguración. Veremos también la herramienta Subversion.
Por otra parte, hoy en día entre el 50 y el 60 por ciento de las líneas de código de una
aplicación son relativas a la interfaz de usuario, es lógico por tanto que existan algunas
herramientas dedicadas solo a este n. Las herramientas de desarrollo de interfaces son en
realidad herramientas CASE especializadas.
Aquí conviene recordar tanto las diferentes fases del desarrollo que se han estudiado
en los temas 3 al 7, puesto que esas fases reejarán la especicidad de las herramientas.
19
CAPÍTULO 8. HERRAMIENTAS DE DESARROLLO Y VALIDACIÓN
De la misma forma algunos entornos estarán inuidos por alguna metodología concreta de
las estudiadas en el tema 8.
Para entender CVS es conveniente conocer un poco el sistema UNIX y tener algu-
nas nociones de teleinformática. Para manejar una herramientas CASE, sobre todo si está
pensada para una metodología concreta como por ejemplo Rational Rose, es necesario
conocer esa metodología y es imprescindible conocer el UML.
En este tema se hace una revisión somera de algunas de los tipos de herramientas ex-
istentes. Es conveniente hacer una primera lectura directa, para después hacer pruebas con
algunas de las herramientas que estén disponibles para el alumno, que de esta forma se
puede hacer una idea más clara de cuáles son las posibilidades que aporta y cuáles son los
ámbitos de aplicación de cada una. Al ser este capítulo de contenido eminentemente prác-
tico, es recomendable probar o jugar con las herramientas recomendadas en el mismo
para hacerse una idea de lo que se está hablando.
20
Bibliografía
+
[RBP 96] James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and
William Lorensen. Modelado y diseño orientado a objetos. Metodología OMT
y OMT II. Prentice Hall, 1996.
21