Libro IIS
Libro IIS
Libro IIS
APROXIMACIÓN,
A LA INGENIERIA
DEL SOFTWARE
@ ;ditorial Universitaria· .
_ ~ Ramón Areces
11
Índice general
! . Introducción 17
1.1. Introducción. 17
1.2. Objetivos .. 18
1.3. ¿Qué es el software? 18
1 .3.1. Calidad del software 19
1.3.2. Tipos de software .. 21
1.4. ¡,Cómo se fabrica el software? 23
1.5. :Mitos del software 25
1.6. Conclusiones . . . . 27
1.7. Ejercicios propuestos 27
9
10 ÍNDICE GENERAL
3. Especificación de Requisitos 55
3.1. Introducción . . . . . . 55
3.2. Objetivos . . . . . . . . . . 55
3.3. Modelado de sistemas . . . 56
3.3.l. Concepto de modelo 57
3.3.2. Técnicas de modelado 57
3.4. Análisis de requisitos de software 62
3.4.1. Objetivos del análisis . . . 63
3.4.2. Tareas del análisis . . . . 66
3.5. ~otaciones para la especificación 69
3.5.1. Lenguaje natural . . . . . 70
3.5.2. Diagramas de flujo de datos . 71
3.5.3. Diagramas de transición de estados . 77
3.5.4. Descripciones funcionales. P seudocódigo 79
3.5.5. Descripción de datos . . . . . . . . 82
3.5.6. Diagrama.5 de modelo de datos .. 8-1
3.6. Documento de especificación de requisitos 87
3.7. Ejemplos de especificaciones . . . . . . . 95
3. 7.1. \'ideojuego de las minas . . . . . 95
3. 7.2. Sistema de gestión de biblioteca 100
3.b. Condm,iones . . . . 111
3.9. Ej<'rcicios propuestos . . . . . . . .. . 112
Introducción
1.1. Introducción
El sofl ware es una parle principal del enlorno humano. La cantidad de aparatos
•orlo tipo que rodean a las personas, que se usan a diario y sin los cwe cada vez
•.'Jda sería más difícil de imaginar, que están controlados por un programa, por uu
··ware que rige su comportamiento es enorme.
Teléfonos, electrodomésticos, coches o cualquier vehículo que circule por una ca-
':TP1'era, aviones, barcos, trenes, el aire acondicionado de la casa u oficina, los siste-
::r..i.s de control de edificios, aeropuertos o estaciones, las televisiones, los sistemas de
_ tión de las empresas, los robots de las fábricas de ensarnblaje, la lista es intermi-
1le. Todos estos sistemas disponen de uno o más computadores, que c.onstit11ycn
·hardware" tlel siste1na, y de los programas que gobiernan su funcionamiento, que
n mponen el "software" de los mismos.
El software está presente no sólo en los sisternas infonnáticos que realizan tareas
dt> tratamiento de información 1 sino en un sinfín de sistemas de la 1nás diversa, corn-
kjidad. Son nliles, millones de líneas de código que diariamente se programan para
e nseguir que todos estos sistemas funcionen como se desea. Esta tarea de construir
t _ software la realizan los programadores, los cuales tienen que a su vez dar rnante-
rumiento durante, en la mayoría de los casos, largo tiempo.
17
18 n•,TRODUCCI Ó.V
1.2. Objetivos
En este capítulo se da una visión inicial de lo que es el software y cómo se produce.
lgualment0 se profundiza en e] concepto de ingeniería del software. Se pretende que
el lector adquiera una idea clara de los siguientes conceptos:
El software pue<le ser <'tl sí mismo un producto que se venda, por ejemplo un
procesador de textos o un programa de tratamiento de imágenes, o tan sólo una par-
te, e11 la mayoría dc> los casos esencial, de un producto más complejo, por ejemplo el
programa que gobierna la inyf'Ccióu de gasoil en un motor diésel, o puede ser el medio
para dar un sen'icio, por ejemplo el programa que permite realizar una transferencia
banc.:aria. Lo que es indudable es que la elaboración <l<'l software ocupa a millon&:>
de personas en todo el muuc.io y se puede considerar una actividad económica en s1
misma.
- ES EL SOFTWARE? 19
ideal sería poder medir la calidad del software como se miden ciertos aspectos
c:.lidad de otros productos de ingeniería: pureza de un producto, resistencia de
material, sus dimensiones, etcétera. Desgraciadamente esto no resulta fácil, y las
-..:.as de aplicación de métricas precisas a los productos software están todavía en
ción.
en
o
\
.....
(O
<l)
"O
(O
en Cambio
Cambio
~ Cu,vasin
\ \ cambios
Tiempo
■ SOFTvVARE DE SISTEl\iIAS
Lo forman todos aquellos programas necesarios para dar soporte a otros progra-
mas, como los sistemas operativos, los compiladores o los programas de gestión
de redes. Su principal característica es su alto grado de interacción con el hard-
ware, ya que en rnuchos casos deben gestionar de forma eficiente el acceso al
hardware por parte de otros programas o usuarios.
■ SOFT\VARE DE APLICACIÓX
• SOFTvYARE I~CRUSTADO
La identificación formal del problema origina una frenética actividad para la crea-
-ión de metodologías concretas de desarrollo y, en general, en la concepción de la
ingeniería del software como disciplina. A finales de los años 60, se acuña el ter-
mino Ingeniería del Software en un congreso e.le la OTAN de manera formal. Con
esta denominación se designa el empleo en el desarrollo del software, de técnicas y
procedimientos típicos de la ingeniería en general.
El software tiene una particularidad especial frente a cualquier producto físico que
podamos imaginar: una vez diseñado, este se puede replicar con tremenda facilidad.
:,in necesidad de un proceso de fabricación propian1ente dicho. A pesar de ello, la
ingeniería del software se ha desarrollado a partir de la ingeniería industrial.
24 IIVT ROD UCCIÓ.V
En <'l capll 1110 2 de e=,te libro :,e analizan los procesos más importantes para la
producción del :,oftware y difereute5 modelos para organizarlo:-;. de forma similar a
los procesos mostrado!- en la figura 1.2 para la industria del automóYil.
~
--""
-....,00
0€~/to
00.CUCllff
,......v-,1.
Q . . . . . . . . .~
DI~
V~
La ingeniería del software amplía la visión del desarrollo del software como una
actividad esencialmente de programación. contemplando además otras acth;dades de
auáli:-;is y diseño previos y de integración y verificación posteriores. La d istribu ción
de todas estas actividades a lo largo del tiempo constituye los se ha dado en llamar
ciclo de ,;da del desarrollo de software.
...\ lo largo de estos períodos de tiempo fue surgiendo una importante comunidad
::rentífica en torno a la ingeniería de software. Dos organizaciones han liderado di-
.. comunidad, AC:'.VI e IEEE Computer Society, que han promovido activamente la
·esta en práctica de esta disciplina. IEEE ha desarrollado la guía S\YEBOK con
objeto de crear una acreditación para la profesión de ingeniero del software en
Estados {.;nidos. Dicha guía da forma a los conocimientos necesarios para dominar
~-a disciplina y los diferenciales frente a otras relacionadas con el software, como
, ciencias de la computación o la gestión de proyectos de software.
dad.hacen difícil obtener una Yisión serena y justa de la ingeniería de software, provo-
cando que por parte de lo~ usuarios e incluso de algunos profesionales se mantengan
opiniones infundadas sobre la iinportancia o influencia de determinados factores en
el éxito o calidad de un producto software.
1.6. Conclusiones
El software lo componen el conjunto de programas que gobiernan el comporta-
- to de cualquier sistema basado en computador. En muchos casos el software
e entidad en sí misma, y puede ser considerado un producto propiamente dicho.
El ciclo de vida del software, igual que el de cualquier otro producto que se pueda
aaborar, es la evolución del mismo desde el momento que se concibe hasta que se
~jade utilizar.
1. 7. Ejercicios propuestos
l. Piénsese en diez sistemas con los que se interactúe usted la vida diaria que estén
controlados por algÚn-tipo de programa. Hágase un listado e intente describir
la funcionalidad de cada uno de ellos.
2. Supóngase el diagrama de las tasas de fallos de un coche en el tiempo. ¿Qué
diferencias puede tener respecto a un producto de software?
3. Compárase el ciclo de vida de una lavadora con el de un programa de edición
de texto. Elabórese un listado con las particularidades de cada uno de ellos.
-1. Repásese las siete categorías de sofrware y dar diez ejemplos de cada una de
ellas.
0. l:na práctica muy extendida para reut ilizar software es "cortar y pegar" frag-
mentos de código. E sto puede llevar a que un trozo de código se encuentre
INTRODUCCIÓN
6. Lo~ pri11cip, 10s términos acuñados en est.e capítulo son software e ingeniería de
;e;oftware. Explíquense ra.zonada1ncnte las diferencias entre ambos térnlinos.
2. 1 . Introducción
Uno de los conceptos que se estudian en este curso es el ciclo de vida del software.
En este capítulo se va a definir qué es el ciclo de vida de un producto, cómo es
.-: ciclo de vida del software, qué fases tiene y qué posibles E>Squemas organizativos
ueden tener esas fases, dando lugar a ciclos de vida diferentes. Se presentará además
qué tipo de ciclo de vida es el más adecuado según qué proyecto o producto se esté
u esarrollando. La descripción pormenorizada de las diferentes fases del ciclo de vida
t:el sofb,vare serán descritas en posteriores capítulos de este libro.
2.2. Objetivos
El alurnno, después de leer este capítulo, debe conocer qué es el ciclo de vida
J e un producto comercial y en particular del software. Así mismo debe conocer las
:iiferentes fases que integran este ciclo de vida, la documentación resultante de cada
fase y los diferentes enfoques en la organización del ciclo de desarrollo del sofhvare.
Para completar el capítulo se presenta la fase de mantenimiento del software.
29
30 CICLO DE VIDA
El ciclo de vida en la. ingeniería pasa por etapas como prediseño o diseño preli-
minar , diseño básico , diseño ejecutivo y diseño final. También se añaden a este ciclo
de vida las acciones de diseño necesarias durante el período de explotación o funcio-
namiento del producto , acciones de mantenimiento y de mejora del product?.
Las fases en el proceso de desarrollo del software suelen ser la13 siguientes:
• Análisis
■ Diseño
• Codificación
• Integración
• .Nlantenimiento
Cada una de estas fases lleva consigo una serie de tareas que deben realizarse,
~ambién conocidas como actividades. Estas tareas generan, como resultado, docu-
mentos donde se presenta el trabajo realizado. Estas diferentes fases deben poder
rompletarse por grupos de trabajo independientes, quienes trabajarán de manera
secuencial o simultánearnente. El producto del trabajo de un grupo será utilizado
por el grupo de trabajo siguiente.
Estos documentos serán utilizados posteriormente por el cliente que los apruebe,
por la ad1flinistración que los supervise y la empresa constructora que materialice el
proyecto. Algo extremadamente importante es que estos mismos documentos servirán
para que todas las partes implicadas puedan validar sus compromisos; el arquitecto
con el propietario, el constructor con el arquitecto y con el propietario, el propietario
con la administración. El modo de hacerlo será validar que la realidad construida
coincide con lo descrito en los planos.
2.5.1. Análisis
En esta fase se procede a analizar las necesidades que tienen los usuarios del
futuro sistema software y que deben ser satisfechas mediante el funcionamiento del
mismo. El diente que realiza el encargo expone sus necesidades, requisitos que debe
cumplir el software :v la empresa que va a realizarlo los recoge y analiza. De acuerdo
con esto. la e1npresa, elabora una especificación precisa del sistema a desarrollar.
2.5.2. Diseño
Consiste en elaborar un esquema o diseño donde se contemplen los elementos
necesarios para que el sistema funcione según con lo especificado en el análisis. En
esta fase no sólo se debe diseñar el sistema para su funcionarniento, también debe
establecerse la organización del sistema para su construcción. -Cn adecuado diseño
permite la optimización de los recursos en la producción del mismo. El resultado de
la fase de diseño suele ser un documento de carácter gráfico, donde se presentan todo~
los elementos componentes del sistema y la organización pormenorizada de cada un(.
de ellos. En la fase de diseño se elaboran los planos de lo que se va a construir.
rl\IENTOS QUE SE GE.YERAX ES EL CICLO DE \ "ID_.\ 33
C odificación
En t•sta fase se produce materialmente lo que ,-a a hacer funcionar el sistema
;-are. Se construirá: por separado. cada uno de los elementos que se han definido
ta fa~c de disefio utilizando para ello las herramientas pertinentes: lenguajes de
--~3.lliación, sistemas de bases de datos. sistf'mas de información, etc. Así mismo
con:-truirán los elementos necesarios para la comprobar que lo construido funciona
tamente.
_.5.5. E xplotación
E.:.-ta fase no forma parte del ciclo de desarrollo de un producto software aunque si
uyc en el resto de las fases que se están describiendo. Esta fase comprended perío-
de funcionamiento de la aplicación. Es el objctiYo final del producto desarrollado
~ n su devenir marcará fases posteriores de desarrollo como la de mantenímiento.
Documento de Oiseilo
1
, _ _ Código Fuente
''
:'
' 1----. Sistema en explotación
1
1
1 1 1 ••
1 1 1 1 Mantennrnento
1 1 1 1
11__ _______ :t1 ______ I ' __ ______ I 1 ___ _____ _
Ingeniería de
Especificación del sistema
sistemas
1
1 Análisis Especificación del sofuvare
L_
1
1
Diseño Documento de Arquitectura del Sistema
L_
Arquitectónico
1
1 Diseño Especificaciones de módulos y funciones
l_
Detallado
1
1 Codificación Código fuente
L_
1
1 Pruebas de Módulos utilizables
l_
unidades
1
1 Pruebas de Sistema aceptado
l_
sistema
Exp!otaaón y
mantenimíento
En este diagrama ven10s cómo en las fases iniciales, en la rama izquierda desct>n-
dente, el sistema software se va descomponiendo en elementos cada vez más sencillos.
hasta llegar a las sentencias del lenguaje de programación. A partir de ahí el sistema
se va construyendo poco a poco a base de integrar los elementos que lo componen, si-
gitiendo la rama ascendente, hasta disponer del sistema completo listo para ser usado.
JS DE CICLO DE l'IDA DEL SOFTl,v:4.RE 37
Mundo Real
Análisis Explotación
i
NIVEL
Sistema
Validación
-···-·-·- -·--·-·---·- ..:►-.... ·- -·-·-···· -·-·- -·-····
Módulo
Sentencia
Mundo Real
software
Venficadóndel sistema
Sistema
Oisel',od, la
~ Venficadóndes..bs!stemas
VerifMódulos
Módulo
Sentencia
2.8. Prototipos
Qué es un prototipo Los modelos clásicos tienen el inconveniente de estar muy
orientados hacia una forma de desarrollo lineal, en que cada fase del desarrollo tiene
una duración limitada en el tiempo, de forma que una vez terminada una fase pue-
den dedicarse a otra cosa los recursos humanos o materiales que se han empleado en
ella. Esto quiere decir que no se contemplan de manera organizada las vueltas atrás
necesarias ocasionalmente al detectar algo inadecuado en una fase anterior durante
una fase posterior del desarrollo.
Estas vueltas atrás resultan así bastante costosas, por lo que los modelos clásicos
insisten mucho en las actividades de revisión del resultado de cada fase, para evitar
los retrocesos, en lo posible. Desgraciadamente hay situaciones en que no es posible
garantizar adecuadamente al concluir una fase que su resultado es correcto. Esto
ocurre, por ejemplo, en sistemas innovadores, en que no se dispone de una experien-
cia previa para contrastar si las decisiones adoptadas durante el análisis y diseño
son apropiadas. El empleo de prototipos puede solucionar, al menos en parte, este
problema.
-.oripo se desarrolla con un costo sensiblemente inferior al del sistema final, los
r ::..-.:s- cometidos en el mismo no resultarán d emasiado costosos, ya que su incidencia
limitada por el costo total del desarrollo de dicho prototipo, y normalmente será
_: ...r. ya que siempre habrá algo del prototipo que sea aprovechable para el resto
_PSa.rrollo.
Para reducir el costo del desarrollo del prototipo, con respecto al del sistema final,
puede:
2 . . l. Prototipos rápidos
Estos prototipos son aquellos cuya finalidad es sólo adquirir experiencia, sin pre-
-ender aprovecharlos como producto. Se denominan también prototipos de usar y
irar (en inglés throw-away) , y maquetas (en inglés mockup) cuando su funcionali-
dad o capacidad es muy limitada.
-----------------------------------------
Análisis
Inicial
Definición del
Prototi¡:m
1 Construcción
1 del Prototi~o
1
1
1
1_ _ _ _ _
Análisis del
Análisis 1
sistema ,1
·------------------------ --------------~ 1
L..--- Diseñt:>
Codificación
ExJ)"lotación y
mantenimiento
Cocf,f,c.ac10n
U.Ode l
prototipo
,.,.,.,óocul.2-'-
De esta manera se van construyendo sucesivas versiones del prototipo. ('arla vez
, complet as, hasta obtener el sist ema deseado. Al mismo tiempo los documento::.
especificación , diseño, etc. van siendo también desarrollados progresn:amente.
El ciclo de iteración del m odelo evolutivo se conYierte en una espiral al añadir co-
mo dimensión ramal una indicación del esfu <:'rzo rotal realizado hasta cada momento ,
que será un valor siempre creciente, tal como s(' indi< a en la figura 2. 7
42 CICLO DE VIDA
Costo acumulado
,..
, ...,•
-\
'\
EVALUACIÓN
1 /NGENJERÍA
1
--', '''
1
''~U~s sucniw'O.s
&>gún qué parte del desarrollo se decida hacer en cada ciclo, tendremos distintas
:riantes del modelo espiral, que podrá así adaptarse a cada proyecto concreto. Por
plo, sí en cada vuelta se realizase exactamente una de las fases del modelo en
~da, el modelo espiral coincidiría con dicho modelo en cascada en los aspectos de
_ niería. Si en cada vuelta se realiza lo suficiente de cada fase como para obtener
rersión parcial ampliada del sistema, el modelo espiral coincidirá con el evolutivo.
odas formas el modelo espiral siempre se distingue por las actividades de análisis
riesgo, que no aparecen en los otros modelos.
Los clientes dan por hecho, que todo lo que ellos pidan, la empresa de software
~abe hacer bien y con g~.r~ntí:=iR, aunque sea la primera vez que se haga. Si no
~ así, buscan otra empresa más rápida, mejor y más barata, "que seguro que la
encuentran". Estos planteamientos seguro que no los tienen si se trata de adquirir
maquina.ria, vehículos o construir edificios. El software es así.
El panorama puede resultar desolador, las alternativas son: mantener una meto-
dología estricta, en pos de obtener un producto con garantías, awnentando costes y
tiempo de entrega, con riesgo de perder el cliente o dejar la metodología a un lado
y atender al cliente cuanto antes y a buen precio con unos riesgos evidentes. Existe
otra alternativa: las metodologías de desarrollo ágil, entre las que se encuentra la XP.
mación extrema se centra en ello. dando por sentado que los requisitos del cliente
carnbian a lo largo del proceso y que hay que ser capaz de adaptarse a ellos de una
forma muy ágil.
Según el propio Beck, la programación extrema es "un proceso ligero , de bajo ries-
go, flexible, predecible, científico y <liYertido de desarrollar software". El equipo de
desarrollo, para lograr este proceso, tiene que basarse en cuatro valores principales,
los cuales están muy interrelacionados unos con otros:
SENCILLEZ. Sin ella no es posible crear un código ágil que se adapte de forma
rápida a las necesidades cambiantes del cliente. Se debe programar sólo aquello que
nos han pedido, sin pensar en lo que nos podrían pedir mañana. Si nos lo piden 1na-
ñana lo programamos mañana. Además, para conseguir que el software se n1antenga
sencillo , utilizaremos la recodificación de forma continua, es decir reescribir código
antiguo de otra forma que aporte más sencillez.
Rediseí'lo
< ...
Programación
por parejas
¡... J ,!IJ)
r---------------," •
;ruabas
' ... ~ ~
Prueba unitaria
"·
fe • Incremento del software • Integración continua
[ • Veloá!fad ~-lcut~_d•f,l'~ecto
Pruebas de
aceptación
Desde un punto de vista fonnal, la programación extrema propone ciclos del pro-
;e,v de software muy cortos y rápidos, realizando pruebas de unidad inmediatas y
!:::t:a integración continua. De esta forma se van creando tantas pequeñas versiones
prototipos como sea posible, las cuales son testeadas antes de continuar. Cada
n2 que se considera preciso para eliminar código obsoleto o demasiado complejo, se
cecodifica, realizando las pertinentes pruebas a continuación para eliminar posibles
Err)res o efectos secundarios del nuevo código. Igualmente se replanifica y rediseña
cor; cada nueva versión, en un proceso iterativo hasta cumplir todos los requisitos
de~ cliente. La figura 2.8 muestra un esquema básico del proceso.
malmente en repetir o rehacer part<' de las actividades de las fases anteriores pat
introducir cambios en una aplicación de software ya entregada al cliente y puesta e
explotación.
H ay varios motivos para ello, que dan lugar a distintos tipos de mantenimientc
con diferentes objetivos, entre ellos:
• l\{antenim icnto correctivo.
• 1,lantenimiento adaptativo.
■ ~Iantenimiento perfectivo.
El mantenimiento correctivo tiene como finalidad corregir errores en el producto
software que no han sido detectados y eliminados durante el desarrollo inicial del
DlÍ::,mo. Este tipo de mantenimiento no debería existir si el desarrollo inicial se hu-
biera n :alizado con las debidas garantías de calidad. Sin embargo es prácticamente
imposible evitarlo. ya que el desarrollo de sofh,·arc. como cualquier otra actividad
humana. está sujeto a errores.
.":)] el cambio a realizar afecta a la mayoría de los componentes del producto, dicho
io se puede plantear como un nuevo desarrollo, y aplicar un nuevo ciclo de vida
_..___.~ el principio, aunque aprovechando lo ya desarrollado igual que se aprovecha
prototipo.
Si el cambio afecta a una parte localizada del producto, entonces se puede orga-
___,...,,.... como simple modificación de algunos elementos. Es importante darse cuenta
que un cambio en el código del producto software debe dar lugar además a una
sión de los elementos de documentación afectados. es decir, carnbiar el código de
2t:nos módulos puede requerir además modificar los documentos de diseño o inclu-
en el caso de mantenimiento perfectivo, modificar el documento de especificación
requisitos.
El informe de problema puede ser originado por los usuarios. Este informe se
,a a un grupo de ingeniería para la comprobación y caracterización del problema,
luego a un grupo de gestión para decidir la solución a adoptar. Este grupo de
tión inicia el informe de cambio, que se pasa de nuevo al grupo de ingeniería para
- desarrollo y ejecución.
'2.11.3. Reingeniería
Con mucha frecuencia, por desgracia, es necesario mantener productos software
que no fueron desarrollados siguiendo las técnicas de ingeniería de software, sino de
48 CICLO DE VIDA
_ 12.2. Revisiones
·na revisión consiste en inspeccionar el resultado de una actividad para determi-
5.i es aceptable o, por el contrario. contiene defectos que han de ser subsanados.
- re,-isiones se aplican, fundamentalmente, a la documentación generada en cada
apa o fase del desanollo.
• Las re,·isiones deben ser realizadas por un grupo de personas. y no por un solo
individuo. E sto facilita descubrir posibles fallos, al existir diversos puntos de
vista.
• El grupo que realiza la revisión debe ser reducido, para evitar excesivas discu-
siones y facilitar la comunicación entre sus miembros. Se recomienda de tres a
cinco personas.
• La revisión no debe ser realizada por los autores del producto, sino por otras
personas diferentes para garantizar la imparcialidad <le <-riterio.
50 CICLO DE VIDA
2.12.3. Pruebas
Las pruebas o ensayos consisten en hacer funcionar un producto software o una
parte de él en condiciones determinadas, y comprobar si los resultados son los correc-
tos. El objetivo de las pruebas es descubrir los errores que pueda contener el software
ensayado.
A pesar de esta limitación, las pruebas son una técnica fundamental de garantía
de calidad. En el capítulo 8 se describen técnicas concretas para organizar y realizar
pruebas de software.
ra cubrir la doble visión del software, desde el punto de vista del usuario y del
-=_.......llador, habremos de considerar como elementos componentes de la configu-
--.. . ,J_ ~odos los que intervienen en el desarrollo, y no sólo los que forman parte del
___,..___,-ro entregado al cliente. Estos elementos serán, por ejemplo:
• Dvcumentos del desarrollo: Especificaciones, diseño, etc.
• Código fuente de los módulos
• Programas, datos y resultados de las pruebas
• ~fanuales de usuario
• Documentos de mantenimiento: informes de problemas y cambios
■ Prototipos intermedios
■ ~ armas particulares del proyecto
■ •.. etc ....
El problema de la gestión de configuración es que estos elen1entos evolucionan a
.:;argo del desarrollo y la explotación del producto software, dando lugar a diferen-
o· nfiguraciones particulares, compuestas de diferentes elementos. Los elementos
;iduales evolucionan a base de construir sucesivas versiones de los mismos.
Las líneas base constituyen configuraciones es.tables: que no pueden ser modifica-
das (se dice que están '·congeladas"). La forma de modificar una línea base es crear
otra nueva introduciendo los cambios apropiados. La antigua línea base seguirá exis-
t iend o, aunque en algún momento se podrá hacer desaparecer si se está seguro de no
necesitarla más.
DoD: son las siglas del Departamento de Defensa (Departm ent of Defense) nor-
teamericano. La norma fundamental es la DoD-STD-2167A lDoD88], que se com-
plementa con otras normas adicionales conteniendo, por ejemplo, modelos de lo::-
docurnentos a redactar. En la actualidad está en revisión y será sustituida por la
:\1IL-STD-SDD , que engloba en una sola tanto la norma principal como las comple-
mentarias de documentación.
ESA: es la Agencia Europea del Espacio (European Space Agency) . Posee una
norma general para. el d esarrollo de software [ESA91]. Esta norma se apoya en algu-
nos aspectos en las normas del IEEE citadas anteriormente.
~U establece una serie de buenas prácticas que las empresas deben cumplir
consideradas de un grado de madurez determinado a la hora de gE>nerar
SB"
• Xh·el O: Inexistente
• _-¡ye} 1: Inicial
• ~i\·el 2: Repetible
• ~ivf'l 3: Definido
• ~ivel 4: Gestionado
• ~i\·el 5: Optimizado
E:- muchos países SE' han desarrollado también normas oficiales similares a éstas,
- •J!-o interno. Entre las normas españolas encontra1nos:
2. 14 . Ejercicios propuest os
l. Plantéese el ciclo de vida de un nuevo producto) como una bebida, desde la
óptica de su diseño, su fabricación y su comercialización.
2. Preguntado un alumno de primer curso de informática por lo primero que ten-
dría que hacerse para construir una casa, respondió: "hacer un agujero)). Despué5
de leer este capítulo demuéstrese que eso no es lo más adecuado. ivlárquese las
fases que seguiría.
3. Póngase un ejemplo de proyecto para cada uno de los tipos de ciclo de vida.
4. Búsquese un ejemplo de prototipo de usar y tirar y de prototipo reutilizable en
la industria, en la construcción y en la producción de software.
5. Elabórese una lista con 5 posibles riesgos a valorar en un proyecto software.
6. P lantéese unas pautas que seguiría una empresa para ofertar el mantenimient ...
de una aplicación software que va a producir, pero que también quiere mantener
7. Búsquese información sobre los niveles de madurez del modelo CMMI.
8. lndáguese sobre la norma Nlétrica 3.
pecificación de Requisitos
Introducción
..--~te capítulo está dedicado a describir la labor de análisis y definición de los
·sitos que ha de cumplir un proyecto de software. Esta labor debe dar lugar a
,i::::,pecificación de software) en la que se concretan las necesidades que se desean
· y se fij an las restricciones con las que debe trabajar el software a desarrollar.
&)-,álisis se realiza dentro de la primera fase (fase de definición) del ciclo de vida y
una importancia decisiva para conseguir que el sistema que se construya final-
re sea realmente el que se deseaba.
. 2. Objetivos
El alumno después de leer este capítulo debe conocer el concepto de especificación
·m sistema software, obtención, análisis y validación de los requisitos. Concreta-
_ ente el lector deberá:
■ Comprender la relevancia que para la realización de un sistema software tiene
la obtención de los requisitos que tiene que cumplir para satisfacer su funcio-
namiento de manera correcta y las expectativas del cliente que lo encarga.
55
56 ESPECIFICACIÓN DE REQL7SITOS
Hay que tener presente que cuando hablamos de modelo, en este capítulo, no,
e::;tamos rf'firiendo a. un modelo completo y preciso del comportamiento u organiza-
ción del ::;i::;tema software. No hay que confundir este modelo con el correspondient
a una maqueta o prototipo parcial empleado como ayuda para realizar la activida.
<le análisu;. tal como se indicaba en el capítulo anterior.
Existen diversas metodologías para realizar el análisis de los requisitos que del
cumplir un proyecto soft-\.vare. Un aspecto común a todas ellas es que tratan dl
facilitar la obtención de uno o varios modelos que detallen el comportamiento desead
del sistema. El empleo de una u otra metodología dependerá del tipo de aplicació1
(gestión, control. cálculo, etc.) y de las preferencias del analista que elabore el model.
El estudio de metodologías concretas queda fuera del alcance de este libro y seráu
objeto de estudio eu cur::;os posteriores.
57
Concepto de modelo
carácter gen eral. un modelo conceptual es rodo aquello que nos permite
-.-:-r-re? nna abstracción lógico-matemática del mundo real y que facilita la com-
- • lo::- objetivos que se deben cubrir con los modelos he pueden concretar en los
Técnicas de modelado
La obtención de un modelo que cubra todos los objetivos anteriores no PS una
fácil. Las dificultades son de todo tipo. En primer Jugar, los sistemas a mo-
pu('(fen ser mu~ complejos. Por otro lado. es relativamentE' normal que no se
nga de ninguna referencia o experiencia anterior, dado que el sistema que SE>
a de modelar e implementar no ha sido planteado anteriormente. A continuación
mdic-an algunas técnicas que pueden re~ultar útiles para realizar el ruodelado de
,istema software.
• nómin;¡s
• :::;,¡:;.,~E:ma de facturación
•
E:::,.:e tipo de dc:-;composición se denomina horizontal y trata de descomponer fun-
cicualn::."'nte el problema. A continuación, en el análisis de cada uno de estos subsis-
tema.::, :':e pueden emplear las mismas técnicas que con el sistema global. Por tanto
e:, µasible voh·er a descomponer cada uno de estos subsistemas a su vez en otros más
simples. P or ejemplo. el sistema de nóminas se puede dividir en los siguientes:
■ Realización de nóminas
■ Pagos a la Seguridad Social
• Pagos del IRPF
•
Evidentemente, para completar el modelo se tendrán que establecer las interfases en-
tre las partes o subsistemas en que queda dividido, posibilitando el funcionamientc.
del sistema global.
Aproximaciones sucesivas
-==:::al o con
un grado de automatización menor del que se pretende lograr con el
5istcma. En este caso, se puede crear un rnodclo df' partida basado en la forma
ajo anterior. Sin embargo, este modelo sólo será preliminar y tendrá que ser
----rlo mediante aproximaciones sucesivas hasta alcanzar un modelo final.
o es fácil suponer, la depuración es una labor ardua y difícil que requiere una
experiencia del analista y en cualquier caso un estudio exhaustivo del problema
trata de resolver con el sistema software. Para lograr un buen resultado me-
e aproximaciones sucesivas, además del analista, es fundamental contar con la
ración de alguien que conozca muy bien el sistema anterior y que sea capaz de
___.,,_.,.,..,.rar mejoras dentro del nuevo sistema y discutir las ventajas e inconvenientes
a uno de los modelos intermedios elaborados.
_.\ reces puede suceder que el modelo resulte muy complejo o incluso imposible de
-...Leu. utilizando una única notación para su elaboración. En un apartado posterior
Si bien las peculiaridades de cada aplicación hacen que necesariamente deba. :,:e.
estudiada como un caso único , es irnportante analizar el dominio de la aplicacit.
para situarla dentro de un entorno mucho más global. Para realizar este análisis ,___
aconsejable estudiar los siguientes aspectos:
■ Normativa que afecte al sisterna
■ Otros sistemas sen1ejantes
lDO DE SISTEMAS 61
1gual manera, como resultado del diálogo entre el analista y el cliente, queda-
n~·enientemente matizadas cada una de las exigencias y necesidades d el sistema
~aptarlas a los medios disponibles para el proyecto. Para lograr una esp eci-
s:::;:1·tón correcta, el modelo global del sistema deberá tener las siguientes propiedades:
P or otro lado, cuando un modelo rei:mlta muy farragoso, es n1uy probable que no
se estudie en detalle y q ue r esulte difícil distinguir los asp ectos fundamen tales.
3. Si11 am bigüedades:
Exbte cierta tendencia a pensar que el anális is de requisitos es un mero trámite.
qu<' deh<' ~er pasado rápidamente para entrar de lleno en el diseño e implemen-
ración dt=>I siste1na.
Esta filosofía, que afortuuada1nente es cada día m enos habitual. da lugar a que
en < 1 análisis S<' dejf'n ciertos aspectos completamente ambiguos. Las consecuen-
cia~ d0 esta actitud son todai:; negativas:
• Difkultades en el diseño
• R etr asos y errores en la implementación
■ Imposibilidad de verificar si el siste1na cumple las especificaciones
Por ejemplo, en un sistema para la supervisión y control del nivel de gases con-
taminantes en un garaje, se dispondrán sensores de CO, CO2 y de otros gase:,
situados en diferentes puntos del garaje. Asimismo, para evacuar los gases ~
dispondrá de varios extractores situados normalmente próximos a alguno de lili
sensores. Por otro lado, el sistema debe disponer de una consola situada en 1
cabina de control en la que se muestra periódicamente la situación y en la qu
se indican mediante alarmas acústicas situaciones que requieran la intervencié-
del operador ( avería en un sensor, avería en un ventilador, nivel de contaminan-
tes alto e incontrolable, etc.). Si se quiere especificar un sistema que pueda s<r
utilizado en cualquier tipo de garaje y con cualquier tipo de sensor, es impor-
tante establecer un contexto global de funcionamiento del sistema. Aparece de:
inmediato la necesidad de especificar una función de configuración del sistcr.
para el garaje concreto en el que se instala. Esto es, indicar el número y tip
de sensores, su situación, condiciones de alarma, etc. Todos estos detalles so.
se pueden conocer si se analiza el sistema software en su contexto.
- ~ DE REQUISITOS DE SOFTlVA.RE 67
IDE:\"TIFICACIÓN DE :'-JECESIDADES
b.lcialmcnte, la actitud del cliente es solicitar del sistema todas aquellas fun-
- nes de las que en algún momento sintió la necesidad, sin pararse a pensar el
~do de utilidad que tendrán en el futuro. La labor del analista es concretar
la,.. necesidades que se pueden cubrir con los medios dis_ponibles (potencia de
cálculo, capacidad de mernoria, capacidad de disco, etc.) y dentro del presu-
uesto y plazos de entrega asignados a la realización del sistema.
Desde luego , las necesidades que finalmente se identifiquen deberán estar con-
sensuadas por todos aquellos que, junto al analista, hayan participado en el
análisis. Es labor del analista convencer a todos de que la solución adoptada es
la mejor con los medios disponibles y nunca tratar de imponer su criterio.
que cubra todas las necesidad e!-> de una forrna satisfactoria. se deben buscar so-
luciones altcrnatiYas. Con cada una dt las alternatiYas planteadas es necesario
realizar su correspondiente c•studio de -viabilidad. Estos estudios <'Onstituirá.n
una base fundamental para la toma <le decisión sobre la alternativa final1nentc
elegida. La. realización de esta tarea no siempre resulta necesaria. Solamente
en aquellos sistemas cuya complf'jidad, alto presupuesto o dificultad intrínseca
así lo aconsejen, se deberá realizar un análisis co1npJeto de diversas alternativas.
Para la elaboración del modelo se deberán utilizar todos los medios disponible:,;.
desde procesadores <le texto hasta las rnás sofisticadas herramientas CASE, pa-
sando por las más diversas herra1nientas gráficas. Todo ello debe cont.ribuir a.
simplificar la elaboración del modelo y a facilitar la comunicación entre anali::,-
ta, cliente y diseñador. E n el próximo apartado se detallan la mayoría d e la,
notaciones que se utilizan habitualmente para desarrollar el modelo del sistema
Es rnuy in1portante tener en cuenta que este documento será el que utilizar
el diseñador como punto de partida de su trabajo. Asimismo, este d ocumer
también es el encargado de fijar las condiciones de validación del sistema 1u.a
vez concluido su desarrollo e implen1cntación. Todo ello indica la transcendc, -
cía que tiene su elaboración y el cuidado que se debe poner para que sea ú · ·
tanto al cliente con10 al diseñador.
lCIOSES PARA LA ESPECIFICACIÓN 69
:_35 diversas n1etodologías de análisis, desarrolladas a lo largo de años, han ido es-
?ciendo distintas notaciones para describir el modelo global del sistema o ciertos
:j>eCtos del mismo. Debido al desarrollo paralelo de las distintas metodologías es fre-
te que una misma notación tenga significados distintos en cada metodología (por
plo: un círculo puede significar en unos casos una transformación de datos y en
~ representar un estado del sistema), o que para un mismo concepto se empleen
,::utas notaciones (por ejemplo, un estado del sistema puede indicarse mediante
círculo o mediante un rectángulo). Para evitar rnalas interpretaciones en la espe-
ación, es fundamental conocer el significado concreto de la notación que se utiliza.
(procesador de textos, software para gráficos. entornos CASE, etc.) e incluso de las
preferencias del analista o del cliente.
El lenguaje natural será la notación que se empleará siempre que sea necesario
aclarar cualquier aspecto concreto del sistema, que no sean capaces de reflejar el resto
de notaciones. En cualquier caso, siempre que se utilice el lenguaje natural es muy
importante organizar y estructurar los requisitos recogidos en la especificación. La
mejor manera de lograrlo, es concebir cada uno de los requisitos como una cláusula
de un contrato entre el analista y el cliente. Así, se pueden agrupar los requisitos
según su carácter:
1. Funcionales
2. Calidad
3. Seguridad
4. Fiabilidad
...... lenguaje natural estructurado es una notación más formal que el lenguaje na-
Fundamentalmente se trata de establecer ciertas reglas para la construcción de
~e. en las que se especifica una acción de tipo secuencia, condición o iteración.
trata de obligar a que todas las especificaciones escritas en español utilicen las
ac;::ns.5;; frases: lo que sería imposible. Se trata de lograr que dentro de una misma
----.;;..=_..._~"-· ·ación todas las frases se construyan de igual manera. Por ejemplo. en lugar
·bir en distintos apartados de la especificación:
Siendo así un sistema software se podría modelar refic•jando el flujo de datos que
tra al sistema, las transformaciones que se realizan con los dat.os de entrada y el
72 ESPECIFICACIÓN DE REQUISITOS
Con los diagra.mab de flujo d<:· datos (DFD) se pueden modelar de forma muy
sen cilla las transformaciones y los flujos de <latos u tilizando una n otación gráfica.
Como se muestra en la figura :3.1 una flecha indica un flujo de dalos e n el sentido
en el que apunta su cabeza. C011 cada flecha de un DFD se tienen que detallar s u s
Datos mediante un nombre o una descripción. U n proceso o transformación de datos
~f' indica con un círculo o burbuja.
Dentro del círculo se nombra o describe el proceso que realua. Una línea doble
indica un almacén de d atos. Estos datos almacenados pueden ser guardados p or
uno o varios procesos y asimismo pueden ser consultados o consumidos por uno o
1nás procesos. Entre las dos líneas se detalla e l nombre o desc ripción de los dato:;
que g uarda e l almacén. Finalmente, un rectángulo r epresenta una entidad externa
al sistem a software (el usuario, otro p rograina. un dispositivo hardware. etc.), qnt>
produce o consumf' sus datos.
'--...---
Entidad Entidad externa que produce o consume datos
Externa
Corno ejernplo de diagrama de DFD. supongamos el .siguient e f'mn1c ia.do e.le pro-
blc1na: Se trata de especificar un sistt>ma para C'l <'ontrol de acceso a un rc>ciut
mediante una tarjeta y una daYe de acce8o. L a tarjeta rnaguética lleYa graba<la l
datos personalt>s del propietario y la da,·e e.le accf>So. El sistema dispondrá de W::
L-\.CIONES PARA LA ESPECIFICACIÓN 73
.lado numérico para introducir la clave y un display o pant alla para escribir los
~ajes. El sistema registrará todos los intent os d e accesos aunque sean fallidos por
.-eclear correctamente la clave o por tratar de u t ilizar un tipo de tarjeta incorrecta.
Lector de
tarjetas 1 P,mna 1
Teclado Puerta
En la figura 3.2 se muestra el DFD del sistema global o DFD de contexto. En est e
~ plo, las entidades externas son el lector de las tarjetas magnét icas, el teclado para
.,_'Toducir la clave, la pantalla o display y el dispositivo para la apertura de la puerta.
El lector de tarjetas suministra a nuestro sistema los datos grabados en las mismas
_;o mbre y apellidos, clave de acceso, etc.) y mediante el teclado se lee la clave para
correspondiente comprobación. La pantalla recibe de nuestro sistema los mensajes
.:u-a poder establecer el diálogo con la persona que trata de acceder al recinto y el
spositivo de apertura de la puerta, las órdenes para abrirla.
El DFD de contexto nunca es suficiente para describir el modelo del sistema que
trata de especificar. Para refinar el modelo, los DFD se usan de forma jerarquizada
p r niveles. El DFD de contexto se denomina nivel O. A continuación, cada proceso
b urbuja se puede "explotar" y mostrar cómo se organiza interiormente, mediante
;ros DFD. En el caso de un diagrama de context o , sólo se puede explotar un único
proceso que es el proceso global del sistema y su explosión dará lugar al único DFD
e nivel l.
En el ejemplo del sistema para el cont rol de acceso, la figura 3.3 muestra el
DFD de nivel l. Como se puede observar, los fl ujos de entrada y salida al DFD de
74
------------- --- -------ESPECIPICA CIÓN DE REQUISITOS
nivd 1 corresponden cxactarnente con los que tie1w el proceso Control de Acceso d<'I
diagranrn. de contexto. esto es: Datos Tarjeta, Clave . l\Iensajes y Órdenes.
Datos
Tar,eta
Mensajes de Comprobación
Tar1eta Me nsajes
Tar,eta
Correcta
También. de acuerdo con <'l diente, el proceso Comprobar Tarjeta ser á el en car-
gado de ,·t>rificar si la t.arjeta introducida por el lector es correcta. Esta verificaci< ll
se reduce a comprobar si los datos que tiene grabados la tarjeta lo están en d or<le.
y fonuato adecuado y cou lm, controles de seguridad establecidos. En cualqni<'r ca:--
se grabarán todos los datos clt> la tarjeta l0ída para el control de acceso. E l proce,
Co1nprohar Clave es <·1 encargado de \"<'rificar si la clave tecleada es la misma que
estñ gral>nda cu la tarjc•l a. Si la da,·<• es cm-rectas<' autoriza el acceso. En cualqui( r
casu se graba 1-'I n·sult ado dd i11tento de ¡w<·<>so. LI procc·so Vis ualizar M e nsaje,
es <·1 <:>ne argado de' sacar por pantalla los lll<'llsaj<'H q u e le enYían los dos anl erior
T-lCIOJVES PARA LA ESPECIFICACIÓIV 75
E! refinamiento del DFD de nivel 1 puede continuar con cada uno de los procesos
.,,. en él aparecen. Una forma de facilitar la identificación de los ara guardar los
- - de la tarjeta que intenta acceder, y si finalmente se consigue o no. En la figura
. este almacén se ha denominado Información de Accesos.
El refinamiento del DFD de nivel 1 puede continuar con cada uno de los procesos
_e en él aparecen. Una forma de facilitar la identificación de los sucesivos DFD es
TT erar de forma correlativa los distintos procesos antes de su refinamiento. El DFD
-J.ltante de la explosión de un proceso x tendrá el número x del proceso explotado.
- procesos hijos que aparecen en él se numerarán de 1 en adelante, en la forma x.1,
~.... El único proceso del diagrama de contexto no lleva numeración, y el único
.......grama resultante de nivel 1 se designa como DFD O. De esta manera los sucesivos
~ amas se numerarán de la fonna:
... etc ..
Por otro lado, también es necesario describir las estructuras de cada uno de los
flujos de datos y las estructuras de los datos guardados en cada uno de los almace-
nes de datos. Ebta descripción tarnbién se puede r ealizar mediante lenguaje natural
estructurado o bien utilizando alguna de las notaciones para la descripción de dato~
que se estudiarán en un próximo apartado. En líneas generales, se tratará de descri-
bir mediante una tabla. todos los elementos básicos de información quf' constituyen
los diversos datos que se 1nanejan en los distintos DFD del n1odelo del sistema. Por
eje1nplo, en la figura 3.3, los datos Clave, Tarjeta Correcta o Inforrnación de Accesos.
Para finalizar esta introducción a los diagramas de flujo de datos, c-onviene pre-
cisar algunos aspectos. Principalmente, los DFD sirven para establecer un mo<lek
conceptual del siste1na que facilüa la estructuración de su c::;pecificación. El modelo
así desarrollado es fundamentalrucnt P estático dado que refleja los procesos necesario;:,
para su desarrollo y la interrelación que existe entre ellos. 1'1ediarite un DFD nunca
se pnc>de establ(•cer la dinámica o secuencia en la que se ejecutarán los procesos. P e_ r
ejen1plo. en la figura 3.3 no se c.-,tablec~ ningún orden concreto entre los flujos de
salida del proce-..o Co1nprobar Tarjeta y por tanto, se podrá producir prin1ero Gra-
bar Tarjeta. de::.pués 1\len.saje d<> Con1probación de Tarjeta y finalmente Tarjeta
Correcta o en cualquier otro orden.
iCIONES PARA LA ESPECIFICACIÓN 77
La notación básica para elaborar los diagramas de estados que se emplea habi-
almente se muestra en la figura 3.4 como se puede observar en la figura, se sugieren
:, form as distintas para representar un estado: rnediante un rectángulo o mediante
i:..= círculo. En ambas notaciones se indica rnediante el nombre que encierran en su
c:uerior el estado concreto que representan. La razón por la que existen estas dos
osi bilidades es su procedencia. Los diagramas de estado mediante círculos son los
~ás utilizados para representar autómatas de ef:tados finitos (autómatas mecánicos,
78 ESPECIFICACIÓN DE REQUISITOS
•
circuitos ellictricos o electrónicos y automatismos en general). Sin embargo, para
evitar la confusión con la notación ernpleada en la elaboración de los DFD, para lz
especificación de un sistema software se suelC' emplear el rectángulo.
Los eventos que provocan el cambio de estado se indican mediante una flecha d.
rigida desde el estado viejo al nuevo estado. Por razones estéticas se emplean flech=
en forma de arco cuando se utilizan círculos y formadas por tramos r ectos cuando
utiliza un rectt.1.Ugulo.
Cuando -.e con.c,idcre interesante destacar los estados inicial y final del sistema.
pu e hacer mcdiantf' dos círculos concéntricos.
Arranque del
Sistema Fin del acceso
Tarjeta
- - - - N o válida
Clave
Esperar Incorrecta Permitir
Tarjeta
Acceso
En los ejemplos del final del capítulo se mueslra otro diagram de estado emplean-
una notación alternativa.
Cuando la complej idad del sistema así lo requiera, serán necesarios varios día-
amas de estados. Además del diagrama de estados global del sisterna, pueden ser
esarios otros diagramas adicionales para especificar la dinámica de determinados
esos significatiYos del sistema. En estos casos, es importante elegir cuidadosa-
nte los estados y las transiciones que faciliten la comprensión del sistE>ma sin
fundizar en detalles de diseño que dcbC'rán ser concretados posteriormente.
•
80 ESPECIFICACIÓN DE REQUISITOS
•
deberá utilizar un lengua j e natural estructurado y siempre que sea posible es acon-
sejable utilizar una notación algo más precisa que denominaremos pseudocódigo.
Hay que tener cuidado al en1plear pseudocódigo para realizar una especificación
software. Si se detalla o "refina" demasiado una descripción funcional mediante pseu-
docódigo, se puede estar realizando el diseño del sistema e incluso su codificación. De
hecho, existen notaciones similares al pseudocódigo que están pensadas para realizar
el diseño. En este caso, se habla de lenguaje de descripción de programas (PDL -
Program Description Language). Estos lenguajes para el diseño, se estudiarán en el
capítulo dedicado a las técnicas generales de diseño.
A.- Selección:
<Pseudocódigo>
FIK-SI
C .- Iteración c on pre-condición:
REPETIR
<Pseudocódigo>
HASTA <Pseudocódigo de la condición >
que efectúa el <Pseudocódigo> h asta qu e se verifique la cond ición in dicada por
<Pseudocódigo de la condición> . P or ejemplo, en el sistema de con trol d e accesc
para cornprobar la clave se pueden p~rmitir hasta tres inten tos:
REPETIR
Leer Clave
HASTA Clave correcta o Tres intentos incorrectos
~aoque existen diversos formatos posibles de diccionario de datos según los dis-
- s autores o herramientas CASE que lo incorporen) en esencia todos los formatos
:J.Sejan que al menos se pueda describir la siguiente inforn1ación para cada dato:
B.- Utilidad:
.. e indicarán todos los procesos, descripciones funcionales, almacenes de datos.
en los que se utilice el dato.
C.- Estructura:
Se indicarán los elementos de los que está constituido el dato, utilizando la si-
~ente notación:
Estructura: { Dígito }4
Dígito= / Carácter numérico del O al 9 /
ellos. Aunque el modelo estará sujeto a revisionPs durante las fases de diseño y
7'\ción, como sucede con el resto de la especificación, sin embargo, es un punto
ida i1nprescindible para comenzar cualquier diseño.
Entidad/Datos relacionados
Entidad
Sentido de la relación
~ten diversas propuestas de notación para realizar los diagramas E-R, aunque
todas ellas las diferencias son mínimas. En la figura 3.6 se recogen los elementos
notación más habituales. Las entidades o datos que se manejan en el diagrama
cierran dentro de un rectángulo, por ejemplo: ciudad, país, región, etc. Las re-
es se indican mediante un rombo que encierra el t ipo de relación , por ejernplo:
pital de, tiene embajada en, está en, etc.
Las entidades y la relación que se establece entre ellas se indican uniéndolas todas
ante líneas. Opcionalmente, se puede indicar el sentido de la relación con una
a. Es conveniente utilizar la flecha sobre todo cuando únicamente con el nombre
....;. relación encerrado en el rombo no queda claro cual es su sentido.
Cardinalidad
1:1 1:N
Para explicar mejor todo esto, veamos la figura 3.8 Inicialmente la relación "C
pital" es ambigua dado que no queda claro si se trata de "es Capital de" o de "tiet
como capital". La flecha nos aclara, en este caso, que la relación principal del diagr
ma es "es Capital". Teniendo en cuenta la cardinalidad unida a la segunda entida-...
tenemos la relación: Una ciudad puede ser la capital de ningún país o s~rlo com
máximo de uno.
Ciudad País
Pueden existir otros documentos previos al SRD, tales como los estudios d e viabi-
~ o los estudios d e las diversas alternativas posibles, centrados fundamentalmente
:os aspectos de la gestión del proyecto. También es posible , cuando el proyecto es
r amplio y se prolonga mucho en el tiempo, que se elabore un documento con la
~"oria del proyecto y todas las vicisitudes habidas, de las que se podrán sacar en-
:anzas en futuros proyectos. Todos estos documentos tienen una utilidad concret a
..o no son imprescindibles. sin embargo, el SRD es un documento fundamental y
d punto de partida d el desarrollo de cualquier sistema software.
Con carácter general, el SRD debe cubrir todos los objetivos indicados en la sec-
a 3.4. Además, dado que será un documento que deberá. ser revisado con cierta
_uencia a lo largo del desarrollo de la aplicación. es muy conveniente que se re-
te de una forma fácil de modificar. Por otro lado. también debe facilitar la labor
,·erificación del cumplimiento de la.e, especificaciones. Todo esto hace que la mejor
.nera de redactar este documento sea C'n forma de un contrato con sus distintas
Jstilas organizadas y agrupadas según E>l c:aráct<'r <le los requisitos.
Son muy numerosas las propuesta-.; de organi7ación del documento SRD. Se pue-
<lecir que prácticamente cada autor proponc> uno distinto. Sin cmhargo. en líneas
neralcs todas las propuest.as son similarc-.. Div(•rsos organismos internacionales ta-
88 ESPECIFICA.CIÓN DE REQUISITOS
l. INTRODUCCIÓN
Esta sección debe dar una visión general de todo el documento SRD.
1.1 Objetivo
1.4 Referencias
Esta subsección describirá la org anización y el conteni<lo del resto del do-
cumento.
_ DESCRIPCIÓ . GE ERAL
En est a sección se dará una Yisión general del sistema. ampliando el contenido
de la sección de introducción. Constará de los siguientes apartados:
Este será probablem ente el apartado más extenso de esta sección. Del>'
describir el modelo conceptual que se propone para desarrollar el sistem
en su conjunto y para cada una de sus partes más relevantes. E ste model
se puede realizar utilizando todas las notaciones y herramientas dispoIL
bles.
3. REQUISITOS ESPECÍFICOS
Esta sección es la fundamental del documento. Debe contener una lista det
Hada y completa de los requisitos que debe cumplir el sistema a desarrollar .
Los requisitos deben exponerse en la forma más precisa posible, pero sin que
descripción de un requisito individual resulte demasiado extensa. Si fuera neo
sario: puede darse una descripción resumida y hacer referencia a un Apéndi
con la d escripción detallada.
Son los que describen las fu nciones o el Q'CÉ debe hacer el sistema y están
muy ligados al modelo conceptual propuesto. A.qui se concretarán las ope-
raciones de tratamiento de información que realiza el sistema, tales como
almacenamiento de información. generación de informes, cálculos, estadís-
ticas, operaciones. etc.
Son los referentes al uso del sistema en general e incluyen los requisitos
de la interfase de usuario (menús de pantalla, manejo de ratón , teclado ,
etc.), el arranque y parada. copias de seguridad, requisitos de instalación
y configuración.
Son los que debe cumplir el :;istema para que sea posible verificar y certi-
ficar que funciona correctamente (autotest. emulación, simulación. etc.).
92 ESPECIFICACIÓN DE REQUISITOS
Son ]os que deben cumplir las pruebas de aceptación a que se someterá e
sistema.
Son los referentes a la documentación que debe formar parte del product
a entregar.
Son los que debe cumplir el sistema para que se pueda realizar adecuadt:
mente su rnanti:>rlimiento durante la fase de explotación.
L\IENTO DE ESPECIFICACIÓN DE REQUISITOS 93
Son los que debe cumplir el sistema para evitar que los errores en el fun-
cionamiento o la operación del sistema tengan consecuencias graves en los
equipos o las personas.
- APÉNDICES
)a!-
d..
94 ESPECIFICACIÓN DE REQUISITOS
l. L,TRODCCCIÓ~
1.1 ObjetiYo
1.2 --\mbito
1.3 Definiciones. sigla.-, y abreviaturas
l A Referencias
1.5 Panorámica del documento
2. DESCRIPCIÓ~ GE~ERAL
2.1 Relación con otros proyectos
2.2 Relación con proyectos anteriores y posteriores
2.3 ObjetiYo y funciones
2.4 Consideraciones de entorno
2.5 Relaciones con otros sistemas
2.6 Restricciones generales
2. 7 Descripción del modelo
3. REQUISITOS ESPECÍFICOS
3.1 Requisitos funcionales
3.2 Requisitos de capacidad
3.3 Requisitos de interfase
3.4 Requisitos de operación
3.5 Requisitos de recursos
3.6 Requisitos de ,·erificación
3. 7 Requisitos de pruebas de aceptación
3.8 Requisitos de documentación
3.9 Requisitos de seguridad
3.10 Requisitos de transportabilidad
3.11 Requisitos de calidad
3.12 Requisitos de fiabilidad
3.13 Requisito.s de mantenibilidad
3.1-1 Requisitos de sah-aguarda
4. APÉ~DICES
Ejemplos de especificaciones
En este apartado se recogen las especificaciones completas de dos sistemas, que
trán desarrollando a lo largo del libro.
1.1 Objetivo
Se trata de realizar un videojuego denominado Juego de las Minas cuyas reglas y características
generales se detallan en los siguientes apartados de este documento.
I.a utilización de est<' videojuego deberá SN fácil de aprendor sin necesidad d<' la lectura previa
de ningún manual. E11 todo ca.t:>o, el juego dispondrá de las correspondientes ayudas para facili-
tar su aprendizaje.
1.2 Ámbito
En este proyecto se r<'ali;:1tr:\ 1111a Vl'rsión simple ci<'I videojuego que solamente utilizará pantalla
alfanum6rica y teclado.
1.3 Definiciones, siglas y abreviaturas
'.!:i!&.l&.!ll.: Elemento gráfico que se muestra Ni la pantalla del computador con forma de cuadrícula
y en el que se desarrolla el juego.
Casilla: Cada uno de los elementos de los que está formada la cuadrícula del tablero.
Mina: Elemento oculto en una casilla del tablero y que si se destapa provoca la finalización del
juego de manera infructuosa para l'i jugador.
1.4 Referencias
No aplicable.
1.5 Panorámica del documento
l::n el resto de este documento ¡¡e recogen el modelo conceptual, las reglas del juego y los requi-
sitos que debe cumplir el sistema a desarrollar.
2. DESCRIPCIÓN GENERAL
2.1 Relación con otros proyectos
Ninguna.
2.2 Relación con proyectos anteriores y poAteriores
~;n esto desarrollo se abordará una versión simple que uti li;mrá u11a interfase de usuario par
pant.alla alfa11umérica y teclado. Rn una fase posterior, se desarrollarfl una versión mfls elaber
rada que utilizará. pantalla gráfica y ratón. El desarrollo de esta versión simple y la posterior
debertl diferir solamente en los módulos rspecfficos dedicados a la interfase hombre-máquina.
2.3 Objetivo y funciones
El objetivo es realizar una versión simplificada del juego de las minas. En este juego se t ratad_
descubrir dentro del tablero la situación de las minas sin que ninguna de ellas explote y en e,
menor tiempo posible.
Las funciones básicas seráu:
• Selección del nivel de dificu ltad del juego (bajo, medio, alto)
• Desarrollo de la partida según las reglas de juego
• Blaboración y mantenimiemo de la tabla de mejorei; resultados
• Ayudas al jugador
2.4 Consideraciones de entorno
No existen.
2.5 Relaciones con otros sistemas
No existen.
2.6 H<'striccion<'s g<'nNalC's
Para la realización de este proyecto se deberán utilizar las siguientes herramientas y entorno,
Lenguaje de programación: C 1-
Metodología: Desarrollo modular basado en abstracciones
SistC'rna op1•ra1.ivo: DOS versión 3.0 o post.erior
Mflximo personal: l p<'rsona
2.7 Descripción del mod elo
En el juc&o se empica u11 tablero cuadrado d<i N casillas de lado semejante al que se muestra r-
ia ílgura M.1. En c~u· tablero 1•,;tán ocultas un 11úrrwro determinado d<' rnir111.~ que pueden cst
sit uadas 1•11 cualqu i<>r nuiilla. lniciahn<>nlí' SI' muestra el t.ablcro con todas las casillas tapadd
En el ejemplo de la 11gura :\1.1, las casillas tapadas están en blanco. El jugador l.icne qu<'
destapando las casillas para descubrir la situación de las minas. Cuando se destapa una casil"
que t.icne una rni11a, esta mina explota y s1• acaba el juego infructuosamente. El objetivo e!
juego es r11ro11t rar la siluació11 d.- ludas las miuas sin que <'xplote ninguna de ellas.
Para facilitar la búi,queda de lOdas la,, minas, el jugador podrá marcar una casilla cuando ten¡,.
• Ja certeza de que Pn Pila existe una mina. En la figura M.1 la marca ~e indica con el sírnho
:.-'IPLOS DE ESPECIFIC.4CIOl\'ES 97
"!!". Esta marca impide que pueda ser destapada la casilla por error. El jugador lambién podrA
quitar la marca de una casilla. En todo momem.o se mostrará en pantalla el número de minas
ocultas y todavía no marcadas.
El jugador podrá seleccionar el grado de dificultad del juego entre tre~ niveles: bajo, medio y
alto. En cada nivel se empleará un tamaño dist.inl.o d~ tablero y el número de minas a descubrir
Lambién será distinto. La situación de las minas en el tablero se real7ará de forma aleatoria..
1 .
2 2 1 2 2 '1
s I! 1 - 1 1 1 2
u 2 1 - 1 1 1 !I
1
.. - 3
.-
1 X 1
3 1 1 1 - . . 1 .
. !J 1
2
1 - 1- 1 i 1
11
1 • 1
1 1 1
1 1
l 1
1
r
1 '
Figura 1\11: Tablero del juego de las minas
Cada vez que el jugador destapa una casilla, se deberá indicar si tenía una mina, en cuyo caso
finaliza el juego. o el número de minas que rodean La. =;lla que ha sido destapada. En la figura
lvfl las casillas con el símbolo".:· indican que el número de minas que las rodean son cero. El
número de minas que pueden rodear una casilla. pueden ir desde O basta 8.
El juego dispondrá de un cronómetro que actualiza en pantalla cada segundo el tiempo transcu-
rrido desde el comienzo de Ja última partida. Si el jugador consigue descubrir todas las minas,
el programa registrará el tiempo invertido junt.o con eJ texto que desee poner el jugador y ac-
tualizará la lista de los mejores tiempos registrados en el nivel correspondiente: bajo, medio o
alto.
Nueva jugada
3. REQUISITOS ESPECÍFICOS
3.1 Requisitos funcionales
R.1.1.1 El juego se iniciará al destapar la. primera. casilla.
R.1.1.2 Al iniciarse el juego se pondrá. el cronómetro en marcha y se situarán de forma aleatoria
las minas en el tablero.
R.1.1.2 El cronómetro se actualizará cada segundo.
R.1.1.4 En cada paso del juego, el jugador puede destapar una casilla, marcar en una casilla la
presencia de una mina o quitar la marca puesta en cualquier paso anterior.
R.1.1.5 Al destapar una casilla que tiene una mina se acaba el juego de forma infructuosa para e
jugador y se muestra la situación de todas las minas.
R.1.1.6 Al destapar una casilla que no tiene mina se informa al jugador del número de minas qu
rodean la casilla destapada.
R.1.1.7 Cuando se destapa. una casilla que no tiene ninguna mina a su alrededor, automáticamem..-
también se destapan todas las casillas que la rodean. Este requisito se cumplirá. de form.
recursiva con las nuevas casillas destapadas.
R.1.1.8 Cuando se marca la presencia de una mina en una casilla se impide que dicha casilla pued:.
ser destapada mientras no se quite la marca.
R.1.1.9 A una casilla marcada se le puede quitar la marca
R.1.1.10 E l jugador consigue su objetivo cuando todas las casillas que no tienen mina han sid
destapadas. En este momento se para el cronómetro indicando el tiempo invenido.
R.1.2 En todo momento el jugador estará informado de los segundos transcurridos y de las mina:..
que todavía quedan por marcar del total de minas ocultas inicialmente.
R.1.3 El jugador en cualquier momento podrá cambiar el nivel de dificultad del juego entre 1
tres siguientes: bajo, medio y alto. Por defecto estará seleccionado el nivel medio. Este..
niveles representarán distintos tamaños del tablero y un número diferente de minas ocultas-
R.1.4 El jugador puede registrar el texto que quiera, junto al tiempo invertido, en la tabla de le
mejores resultados y dentro del nivel de dificultad en el que se realizó el juego.
R.1.5 E l jugador en cualquier momento podrá. finalizar el juego.
R.1.6 La tabla con los mejores resultados no se borrará nunca al apagar el computador.
R.1.7 Para reinicializar la tabla de resultados existirá una opción especial no accesible a. cua.lquir
jugador.
R.1.8 La situación inicial de las minas en el tablero será aleatoria y deberá dar lugar a un repar
aproximadamente uniforme en todo el tablero.
R.1.9 (Requisito deseable) Se dispondrá de una ayuda con las reglas del juego que podrá Sf'
consultada solamente antes de comenzar o al finalizar un juego.
R.1.10 El juego dispondrá de una ayuda simplificada que podrá ser consultada en cualquier m
mento y que explicará las teclas que se pueden utilizar durante el juego y la función
cada una
3.2 Requisitos de capacidad
R.2.1 Precisión del cronómetro s; 0.1 segundo
?.JE.\fPLOS DE ESPECIFIC.4.CIO~ES 99
Para sacar libros en préstamo el usuario debe estar dado de alta en un registro de
lectores, en el que habrá una ficha por cada usuario, conteniendo sus datos personales.
Los libros estarán catalogados. Habrá un registro de libros con una ficha por ca-
da uno, conteniendo los datos fundamentales: título, autor , materias de que trata, etc.
El sistcn1a informático se usará también como ayuda para localizar los libros so-
licitados por los usuarios, permitiendo realizar búsquedas en el catálogo de libro:::.
bien por autor, título o materia.
1. IKTRODUCCIÓ:"i
1.1 Objeiivo
El objetivo del sistema. es facilit.ar la gestión de una biblioteca mediana o pequeña, en lo referente
a la atención directa a los usuarios. Esto incluye, funda.mentalmente, el préstamo de libros. así
corno la consulta bibliográfica.
102 ESPECIFICACIÓN DE REQUISITOS
1.2 Ambito
El s istema a desarrollar se denominará BIBLI0- 1. y consistirá en un único programa que reali-
zará todas las funciones necesarias. En panicular. deberá facilitar las siguientes:
• Gestión del préstamo y devolución de libros
• Consulta bibliográfica por título. autor o materia
El sistema no ha de soportar. sin embargo. la gestión económica de la biblioteca, ni el control
de adquisición de libros, ni otra8 funciones no relacionadas directamente con la atención a los
usuarios.
El sistema facilitará la atención al público por parte de un único bibliotecario, que podrá aten-
der a todas las funciones.
Ninguna.
2. DESCRIPCIÓN GENERAL
La operación del sistema se hará mediante un sistema de menús para seleccionar la operación
deseada, y con formularios en pantalla para la entrada y presentación de datos. Las funciones
a realizar se pueden organizar en varios grupos principales, tal como se indica en el diagrama
de flujo de datos de la figura 8.2. Estos grupos de funciones se describen a continuación. La
descripción precisa de cada función se incluye en la Sección 3: Requisitos Específicos.
2. 7 .1 Gestión de libros
Estas funciones permiten mantener actualizado el registro (fichero) de libros existentes en la
biblioteca.. El desglose de las mismas se refleja en el diagrama de flujo de datos de la figura B.3
Orden listados
Respuesta
Opel'ador Impresora
Datos Fichas
Orden
libros
LIBROS
LECTORES
Gestión
Orden
de
Orden
Ficha ele 'ector
Orden
Ficha de libro
Anular
baja de
lector
Orden
-
Orden
F cha de l ector
Morosos
Prestamos de tec:tor
2.7.4 Búsquedas
Estas funciones permiten localizar libros por autor. título o materia. El desglose de las mismas
se refleja en el diagrama de flujo de datos de la figura B.6.
106 ESPECIFICACIÓN DE REQUISITOS
LECTOR
LIBRO
MATERIA
DATO DESCRIPCIÓN
LECTORES FICHA DE LECTOR
LIBROS FICHA DE LIBRO
~1ATERIAS ~1ATERIA
FICHA-DE-LECTOR CÓDIGO-DE-LECTOR - DATOS-DE-LECTOR
FICHA-DE-LIBRO CÓDIGO-DE-LIBRO - DATOS-DE-LIBRO
+ DATOS-DE-PRÉSTAMO
MATERIA / l\ombre de la materia/
CÓDIGO-DE-LECTOR / l\ úmero del lector/
CÓDIGO-DE-LIBRO / :'.'>iúmcro del libro/
DATOS-DE-PRÉSTAMO FECHA + CÓDIGO-DE-LECTOR
DATOS-DE-LECTOR / Nombre, apellidos, D:t\"1, domicilio, teléfono, .. ¡
DATOS-DE-LIBRO / Autor. título, materias, .../
ORDEN / Datos de cada orden/
RESPUESTA / Respuesta. en pantalla/
LISTADO-DE-LIBROS LIBROS
LISTADO-DE-LECTORES LECTORES
MOROSOS FECHA - / Datos del libro/ + / Datos del lector/
PRÉSTAMOS-DE-LECTOR FECHA - / Datos del libro /
Efecto: Suprime del fichero de lectores las fichas de lectores que estén dados de baja,
liberando el espacio que ocupaban.
Excepciones:
Función 2. 7 Buscar lector: localiza un lector por nombre o apellido
r Entrada: NOMBRE-O-APELLIDO
Salida: FICHA-DE-LECTOR
L"sa: LECTORES
Actualiza:
Efecto: Presenta en pantalla un listado con los datos de cada lector que contenga el nombre
o apellido indicado.
Excepciones:
3.1.2.3 Gestión de préstamos
Función 3.1 Anotar préstamo: anota. los da.tos del préstamo
Entrada.: CÓDIGO-DE-LIBRO, CÓDIGO-DE-LECTOR
Salida.:
Usa: LECTORES
Actualiza: LIBROS
Efecto: Lee por pantalla los códigos del libro y del lector. Anota en la ficha del libro los
datos del préstamo: código del lector y la fecha del día, tomada del reloj del sistema..
Actualiza. la ficha. en el fichero de libros.
Excepciones: Si no existe el libro o el lector, o el libro ya estaba prestado. o el lector tiene
ya el máximo de libros en préstamo, da un aviso.
Función 3.2 Anotar devolución: elimina los da.tos del préstamo
Entrada: CÓDIGO-DE-LIBRO
Salida:
Usa: LECTORES
Actualiza.: LIBROS
Efecto: Lee por pantalla el código del libro, y elimina. los datos de préstamo de su ficha.
Actualiza esa ficha en el fichero de libros.
Excepciones: Si el libro no existe. o no está presta.do, da un aviso.
Función 3.3 Lista de morosos: lista todos los préstamos no devueltos en el plazo fijado
Entrada:
Salida: MOROSOS
Usa: LIBROS, LECTORES
Actualiza:
Efecto: Imprime un listado con los datos de libros y lectores de todos los préstamos para
los que el plazo desde que se realizaron hasta hoy sea superior el plazo límite establecido.
Excepciones:
Función 3.4 Préstamos de lector: lista los libros que tiene en préstamo un lector dado
Entrada: CÓDIGO-DE-LECTOR
Salida: PRÉSTAMOS-DE-LECTOR
Usa: LIBROS, LECTORES
Actualiza:
Efecto: Presenta en pantalla un listado con los datos abreviados de cada libro que tenga
en préstamo ese lector, y la fecha de cada préstamo.
Excepciones: Si el lector no existe, da u11 aviso.
3.1.2.4 Búsquedas
Función 4.1 Buscar por autor: localiza los libros de un autor dado
Entrada: NOMBRE-O-APELLIDO
Salida: FICHA-DE-LIBRO
l;sa: LIBROS
Actualiza:
Efecto: Presenta en pantalla un listado con los datos de cada libro cuyo autor contenga el
nombre o apellido indicado.
Excepciones:
Función 4.2 Buscar por título: localiza los libros cuyo título contiene un texto dado
Entrada- TEXTO
Salida: FICHA-DE-LIBRO
110 ESPECIFICACIÓN DE REQUISITOS
l:sa: LIBROS
Act ualiza.:Efecto Presenta en pantalla un listad o con los da.t os de cada libro cuyo título
contenga el t exto indicado.
Exce pcio nes :
Función 4.3 Buscar po r materia: localiza. los libros que tra.tan de una materia. dada
Entra.da: MAT ERI A
Salida: FICHA- DE-LIBRO
Usa: LIBROS
Actualiza:
Efecto: Presenta en pant alla la list a de materias y permite seleccionar la materia. objeto
de la búsqueda. Presenta. en pantalla un lista.do con los datos de cada libro que trate de la
materia indicada.
Excepciones:
R.6.1 (Deseable) De ber á d isponerse de un sistema d e acceso a. los registros d e libros, lec tore--
materias, ind ep endiente de la aplicación, y q ue permita examinar su contenido, preferib
m ente o bteniendo un listado del mismo, para comprobar que la información almacen~
es la correcta.
XCLUSIONES 111
3.8. Conclusiones
A lo largo este capítulo se ha descrito la labor de análisis y definición de los re-
uisitos que ha de cumplir un proyecto de software. Esta labor no es exclusiva de la
roducción del software. Cualquier actividad productiva que tenga como objetivo la
c-eación de un sistema complejo debe pasar por esta fase.
Una partf' fundamental de este capítulo c>s la dedicada a las diferentes notaciones
empleadas para redactar de manera precisa las particularidades del sistema a de...,a-
rrollar.
apítulo 4
.l . Introducción
Con este capítulo se inicia el estudio de las etapas de desarrollo. Después de haber
~ecificado QUÉ se quiere resolver durante la especificación, las etapas de desarrollo
dedican a determinar CÓNIO se debe resolver el proyecto. La primera de estas
·apas es la de diseño, se continúa con la de codificación y se finaliza con las etapas
pruebas del software realizado. Toda esta segunda unidad didáctica está dedicada
la etapa de diseño. Concretamente, en este capítulo se abordan los fundamentos
e la etapa de diseño.
-!.2. Objetivos
113
114 F(;·:,,.-v_.t;\ lESTOS DEL DISESro DE SOFTWARE
por palabras.
Lo que trasladado al contexto del diseño de sistemas software sería la descripción
o bosquejo del sistema a desarrollar. En nuestro caso, la descripción se puede y se
debe hacer mediante otras notaciones más formales y no sólo empleando palabras
Se trata, por tanto, de definir y formalizar la estructura del sistema con el suficiente
detalle como para permitir su realización física. Cualquier producto que se crea en la
ingeniería se describe de manera precisa para su producción mediante la redacción de
los planos de su diseño. Estos planos del diseño permiten la comunicación del mismc
a todas las partes implicadas en la producción del bien.
~
simplifican mucho la labor de diseño y codificación, pero esto no es la situación
· ral. En los restantes casos, la aplicación de las técnicas no es tan sistemática y
0
En los desarrollos de sistemas software de los años 60, el objetivo del diseño era
.;..seguir la mayor eficiencia posible, dado que la memoria de los computadores era
-asa y su potencia de cálculo no muy grande. Actualmente y debido al tremen-
aumento de los costos de desarrollo, el objetivo fundamental es conseguir que el
.::ware sea fácil de mantener y si es posible que se pueda reutilizai· en futuras apli-
:iones. Para conseguir ambos objetivos, la etapa de diseño es la más importante
evia- la fase de desarrollo de software.
Durante la etapa de diseño se tiene que pasar de una forma gradual del QUÉ
peci- be hacer el sistema, según se detalla en el documento de requisitos, al CÓMO
debe hacer, estableciendo la organización y estructura física del software. En es-
transformación gradual no siempre está claramente determinado dónde acaba el
.:iálisis y dónde empieza el diseño propiamente dicho. En algunos casos se llega a
nsiderar que los requisitos forman parte del diseño externo o funcional del sistema.
: ,, cualquier manera, durante el diseño se tiene que pasar de las ideas informales re-
gidas en el SRD a definiciones detalladas y precisas paia la realización del software
2diante refinamientos sucesivos.
A lo largo del proceso de diseño se realiza ui:1 conjunto de actividades. Estas acti-
.-tlades tienen como objetivo sistematizar cada uno de los aspectos o elementos de la
-uuctura del sistema. Aunque no existe consenso ni en el número ni en la denomi-
:..ación de las actividades, con ellas se persigue un refinamiento progresivo del diseño .
...,epcndiendo de la complejidad del sistema a diseñar algunas de las activídades que-
..arán e;°globadas dentro de otras o simplemente desaparecerán. A continuación se
:=iumeran y describen actividades habituales en el diseño de un sistema:
actividad proporcionará una Yisión global del sistema y por tanto resulta esencial
para poder avanzar en las acti,·idades siguientes . Por ejemplo, para el sistema de
control de acceso del tema ant erior. no t ien e ningún sentido abordar el diseño de la
visualización de mensajes sin tener absolutament e establecidos todos los módulos del
sistema, los tipos de mensajes posibles que cada uno necesitará, la interfase con la
que se interrelacionarán los distintos módulos. etc.
También como resultado del diseño detallado, aparecen nuevos módulos que .
deben incorporar al diseño global, componentes que es razonable agrupar en un ún.
co módulo, o módulos que desaparecen por estar vacíos de contenido. Esto refleja 1
interrelación entre el diseño arquitectónico y el detallado a pesar de que pudiera.
parecer actividades puramente secuenciales. Cuando se trata de diseñar sistemas r:
muy complejos, el diseño detallado no existe como tal actividad y es simplemente lL
refinamiento del diseño arquitectónico.
ológicos.
El resultado ele todas estas actividades de diseño debe dar lugar a una especifi-
:!>n lo más formal posible de la estructura global del sistema y de cada uno de
P}ementos del mismo. Esto constituye el "producto del diseño" y se recogerá en
Documento de Diseño de Software (en inglés SDD: Software Design Document. o
bién Software Design Description). Si la complejidad del sistema así lo aconseja:
podrán utilizar varios documentos para describir de forma jerarquizada la estruc-
- global del sistema, la estructura de los elementos en un primer nivel de detalle
en los sucesivos niveles de detalle, hasta alcanzar el nivel de codificación con los
ados de los programas.
Conceptos de base
La experiencia acumulada a lo largo de los años por los diseñadores de sistemas
fr"'·are ha permitido identificar una serie de conceptos o características de los sis-
!'!llas y sus estructuras que tienen especial influencia en la calidad de un diseño de
os
4.4.1. Abstracción
Este concepto siempre resulta muy "abstracto" para los estudiantes. Con objer
de definirlo de manera precisa se irá al diccionario de la Real Academia de la Len
l. adj. Que significa alguna cualidad con exclusión del sujeto.
2. adj. Dicho del arte o de un artista: Que no pretende representar seres o co
concretos y atiende solo a elementos de forma, color, estructura, proporción, etc.
Si se consulta por la etimología (ETIJVICHIL) de la palabra quizás se encuem:.;
más luz.
La palabra abstracto viene del latín abstractus, compuesto del prefijo abs (se¡;
ración, privación) y tractus. Éste es el participio del verbo trahere, que da palab:r
como trecho y tractor. Etimológicamente sería algo como "sin trecho", pero se apL
para referirse a cualidades o elementos que no son específicos. Por ejemplo: belle
libertad, justicia, etc. El antónimo de abstracto es concreto. en
Inicialmente, todos ellos son ele1nentos abstractos y su diseño se puede realizar sin
Pner en cuenta al sistema de control de acceso concreto en el que se utilizarán. Esto
:'.'.acilitará los cambios futuros y la posibilidad de reutilizarlos en diversos sistemas.
En un segundo nivel aparecen nuevas abstracciones como: Clave, Control de Puerta,
~omprobar Clave, etc. a los que se aplicarán los mismos criterios.
120 FUNDA_\IESTOS DEL DISEÑO DE SOFTlV.4.RE
Este proceso de abstracción se puede y se debe continuar con cada elemento soft-
ware que tengamos que diseñar. El mismo procedimiento es el que se utiliza para
diseñar un coche, un avión, una casa. etc. Inicialmente tenemos como elementos abs-
tractos el motor, el chasis, las ruedas, etc. y para diseñar estos elementos a su vez
necesitamos filtros, bujías, correas, etc. que si se diseñan convenientemente se podrác
utilizar en cualquier modelo de coche. ·
En cuanto a los tipos abstractos, estos sirven para crear los nuevos tipos de da.-
que se necesitan para abordar el diseño del sistema. Por ejemplo, un tipo Tarjeta
ra guardar toda la información relacionada con la tarjeta utilizada: clase de tarje'
identificador, clave de acceso, datos personales, etc. Además , junto al nuevo tipo
dato se deben diseñar todos los métodos u operaciones que se pueden realizar con
Por ejemplo, Leer Tarjeta, Grabar Tarjeta, Comprobar Tarjeta, etc.
Modularidad
s
Casi siempre los proyectos requieren el trabajo simultáneo y C'oordinado de varias
nas. Una forma clásica de conseguir la coordinación es mediante el empleo de
..useño modular. Uno de los primeros pasos que intuitivamente parece claro que
"'be dar al abordar un diseño es <lividfr el sistema en sus correspond ientes mó-
. . o partes claramente diferenciadas. E sta división permite encargar a personas
enles el desarrollo de ,cada módulo y que todas ellas puedan trabajar simul-
•amente. Sin embargo, para conseguir la adecuada coordinación, la. división en
¿ulos no resulta trivial y además es necesario que las interfases entre todos ellos
len completamente definidas y correctamente diseñadas. En el próximo capítu-
estudiará la técnica df' descomposición modular que permite logrn,r l:'ste objc•tivo.
• CLAIUDAD: Siempre es más fácil de entender y manejar cada una <le las partes
o módulos de un sistema que tratar d e entenderlo como un todo compacto.
• REDCCCIÓ::'-J DE COSTOS: Resulta más barato desarrollar, df'purar, docu-
mentar, probar y mantener un sistema modular que otro que no lo es. Hay que
1.tc.
tener en cuenta que sj el número de módulos crece innecesariamente esta afir-
péi
mación puede no ser correcta. Cuando hay demasiados módulos se aumentan
eta
también las relaciones entre ellos y las interfases necesarias.
d
él • REUTILIZACIÓK: Si los módulos se diseñan teniendo en C'uenta otras posibles
aplicaciones resultará inmediata su reutilización.
El concepto de modularidad se debe aplicar en f'l diseño de cualquier sistC'ma, incluso
lo., n aquellos para los que existan limitaciones de tiempo o memoria quf' impidan que
1na 11 su codifiración se puedan emplear móduloH compilados por separado. Por ejemplo,
QL ,1 ciertas operaciones son críticas y se deben realizar en un tiempo muy corto, no
QL ,,, pueden empleas subrutinas con las que se gastaría un tiempo precioso en cada
ma !amada. En este caso se pueden emplear macros para sustituir a las suhrntinaH siu
ór. 1u<' esto afecte para nada al diseño.
la
es- La modularidad es un concepto <le diseño que no drbe estar ligado a la etapa de
de ·odificación y mucho menos al empleo de un d<'lcrminado lenguajf' de programación.
122 FUSD...L\IESTOS DEL DISEÑO DE SOFT\.VA.RE REFl
4.5. Refinamiento
El concepto de refinamiento resulta imprescindible para poder realizar cualquier
tipo de diseño. En un diseño, sea del tipo que sea, siempre se parte inicialmente d
una idea no muy concreta que se va refinando en sucesivas aproximaciones hasta per-
filar el más mínimo detalle. Fue ~ iklaus Wirth [\i\Tirth71) el primero que recomend
la aplicación de refinamientos sucesivos para el diseño de programas.
Estructuras de datos
La organización de la información es una parte esencial del diseño de un sistema
'.""Ware. Las decisiones respecto a que datos se manejan y la estructura de cada
o de ellos afectan de una forma decisiva al resto del diseño: abstracciones, módu-
. algoritmos, etc. Por ejemplo, una decisión errónea respecto a si un determinado
-sultado intermedio se guarda o se calcula nuevamente cada vez que se necesite 1
~ede hacer tan lento el sistema que resulte inservible. Esto mismo puede suceder
la estructura de datos elegida complica de manera excesiva la búsqueda de un
.:>terminado dato.
• Arboles
• Grafos
■ Tablas
• Ficheros
Es labor del diseñador- la búsqueda, a partir de estas estructuras básicas, de la combi-
nación más adecuada para lograr aquella estructura o estructuras que den respuesta
a las necesidades del sistema planteadas en su especificación. Como siempre, resulta
trascendental la experiencia acumulada de diseños anteriores.
4 .5.2. Ocultación
Para poder utilizar correctamente un programa no es necesario conocer cuál e;
su estructura interna. Por ejemplo, el usuario de un procesador de textos puede ser
cualquier persona que no posea absolutamente ningún conocimiento de informática
y mucho menos de la estructura interna del programa.
De forma semejante se puede pensar respecto a cada uno de los módulos en los qu
se divide el programa en su diseño. Al programador "usuario" de un módulo desa-
rrollado por otro programador del equipo puede quedarle completamente oculta l..
organización de los datos internos que maneja y el detalle de los algoritmos que eIL-
plea.
Con cará.cter general, se trata de ocultar al "usuario" todo lo que pueda ser susce.
tible de cambio en el futuro y además es irrelevante para el uso (hardware, sisten:.
operativo, con1pilador, idioma, etc.). Sin embargo, se muestra en la interfaz sé.
aquello que resultará invariable con cualquier carr1bio. Las ventajas de aplicar e:-
concepto son las siguientes:
prueba que verifiquen y depuren cada módulo por separado en base a lo que
hacen sin tener en cuenta cómo lo hacen.
■ :\iIA:'-JTEKil\IIEN'TO: Cualquier modificación u operación de mantenimiento
que se necesite en un módulo concreto no afectará al resto de los módulos del
sistema. Si se cambian el hardware, el sistema operativo, etc. sólo se tiene que
modificar el módulo encargado de ocultar estos detalles. El resto de módulos
que usen el módulo modificado permanecerán sin cambios.
-mque el concepto de ocultación se puede y se debe aplicar con cualquier meto-
!ogía o lenguaje de programación, estructuras como los packages de ADA o los
.ODULE de ~;fodula-2 y, por supuesto, los lenguajes de programación orientados
Jbjetos, tienen la ventaja de facilitar de manera considerable la labor de diseño
Jan<lo se aplica el concepto de ocultación.
Para ilustrar este concepto con un ejemplo, supongamos que se trata de diseñar ,
.n sistema operativo multitarea que necesita atender las órdenes que le llegan de los
..:istintos terminales. Una de las órdenes habituales será imprimir por una cualquiera
Je las impresoras disponibles. Por otro lado. es normal que desde varios terminales
,;multáneamente se necesite acceder a ficheros o bases de datos compartidas. Cada
J11a de estas actividades necesita de un módulo gestor para decidir en qué orden se
.1tienden las peticiones.
La forma más sencilla de gestión es poner en cola las órdenes, peticiones de impre-
)-
,ión o peticiones de acceso a ficheros o bases de datos compartidas. Inmediatamente
,urge la necesidad de una estructura genérica en forma de cola para la que se necesi-
~an también unas operaciones genéricas tales como poner en cola, sacar el primero.
:e iniciar la cola, ver cuántos hay en cola, etc.
de las distintas colas necesarias y si para alguna de ellas es conveniente utilizar prio-
ridades; lo que daría lugar a operaciones específicas.
Con estos lenguajes es necesario definir un tipo distinto de cola para cada tipo de
elemento a almacenar i y aunque las operaciones sean esencialmente idénticas para
los distintos datos almacenados, también es necesario implementar como operaciones
distintas las destinadas a manejar cada tipo de cola. Esto es, sí tenemos los tipos:
' I
Cola de enteros
Cola de reales
Cola de caracteres
es necesario implementar las operaciones:
Poner entero (en la cola de enteros)
Poner real (en la cola de reales)
Poner caracter (en la cola de caracteres)
Sacar entero
Sacar real
esta solución, que es la única posible en estos lenguajes, desvirtúa de forma evident
la genericidad propuesta en el diseño.
Ahora, es posible obtener los procedimientos para cada tipo de dato almacena<!
en la cola de la siguiente forma:
Las clases de objetos genéricos se pueden denominar clases genéricas, ya que re-
~resentan a todas las clases que se pueden construir cuando se sustituye los tipos
:enéricos por tipos de datos existentes. Cuando hablamos de genericidad en el len-
;uaje C-+, estamos hablando de clases y funciones genéricas, es decir, de clases y
c.J.nciones que están definidas en base a tipos de datos genéricos, parámetros forma-
~ que son tipos de datos que se traducen en tiempo de compilación. En el caso del
.-nguaje C++ se habla de templates o plantillas.
4.5.4. Herencia
Otro enfoque posible del diseño cuando hay elementos con característ icas comunes
.es establecer una clasificación o jerarquía entre es¿s elementos del sistema partiendo
de un elemento "padre" que posee una estructura y operaciones básicas.
Los elementos "hijos" heredan del "padre" su estructura y operaciones para am-
pliarlos, mejorarlos o simplemente adaptarlos a sus necesidades. A su vez los elemen-
tos "hijos" pueden tener otros "hijos" que hereden de ellos de una forma semejante. De
manera consecutiva se puede continuar con los siguientes descendientes hasta donde
sea necesario. Esta es la idea fundamental en la que se basa el concepto de herencia.
nada entre varios, etc. Facilitar esta labor es uno de los objetivos fundamentales del
concepto de herencia.
Si tratamos de realizar un software para dibujo asistido por computador, las fi-
guras que se manejan se podrían clasificar del siguiente modo:
FIGURAS:
ABIERTAS:
TRAZO RECTO:
LÍ~EA RECTA
TRAZO GCRVO: ,
SEGtvIENTO DE CIRCUNFERENCIA
CERRADAS:
ELIPSES:
CÍRCULOS
POLÍGONOS:
TRIÁNGULOS:
EQUILÁTEROS
RECTANGULOS:
CUADRADOS
Aquí, el elemento <'padre" será FIGURAS. Las operaciones básicas con cualquier tip
de figura podrían ser:
■ Desplazar
■ Rotar
■ Pintar
Aunque estas operaciones las heredan todos los tipos de figura, normalmente de-
berán ser adaptadas en cada caso. Así, Rotar los CÍRCULOS significa dejarlos t -
cual están.
Por otro lado. al concretar los elen1entos "hijos" aparecen nuevas operaciones q·
no tenían sentido en el elemento "padre". Así, la operación de calcular el Períme---;-
solo tiene sentido para figuras CERRADAS. De fonna semejante sólo los POLÍGl
XOS tendrán una operación csp<'dfica para determinar la posición de sus Vértir..-
sólo en los RECTA~Gl-LOS se puede hablar de las longitudes de sus lados L
Uno y LacloDos y de su Diagonal. etc.
rcncia simple entre un "hijo" y un único "padre'·, es posible realizar diseños en los
~e se tengan en cuenta herencias múltiples de varios ··padres". En esencia se trata
lle aprovechar elementos ya desarrollados para producir otro nuevo que combine si-
::Lultáneamente las estructuras y propiedades de más de un elemento anterior.
4.5.5. Polimorfismo
La definición de polimorfismo que encontramos en el diccionario es la siguiente:
En algunos casos, no hay anulación real dado que no tiene sentido diseñar e 4.5.6
implementar una operación general que abarque todas las posibles situaciones
que se puedan plantear con todos los posibles descendientes. Para estos casos Le
aprov
se plantea un polimorfismo Diferido en el cual se plantea la necesidad de la
operación para el element o "padre", pero su concreción se deja diferida para el tie1
curre:
que cada uno de los elementos "hijos'' concrete su forma específica. Este es el
caso de la operación Rotar FIG"CRAS que resultaría muy compleja y además de a¡:
los e1
probablemente inútil.
casos
.-vent
3. Por último, existe otra posibilidad de polimorfismo que se conoce como So-
brecarga. En este caso quienes adquieren múltiples forrti.as son los operadores. e
l'Il Cl
funciones o procedimientos.
l.
El ejemplo clásico de polimorfismo por sobrecarga lo constituyen los operadores
matemáticos: + , * y / . Estos operadores son similares para operaciones entre
enteros, reales, conjuntos o matrices. Sin embargo, en cada caso el tipo de ope-
ración que se invoca es distinto: la suma entre enteros es mucho más sencilla
y rápida que la suma entre reales y por otro lado con el mismo operador + se
indica la operación suma entre valores numéricos o la operación de unión entre 2.
dos conjuntos o la suma de matrices.
Concurrencia
Los computadores disponen de una gran capacidad de proct"~c;o que no se debe dcs-
rovechar. lVIientras el operador decide la siguiente tecla que debe pulsar o durante
tiempo en que se está imprimiendo, el computador puede realizar de manera con-
-;:rrentc otras tareas. Sobre todo en los sistemas de tiempo real existe la necesidad
p aprovechar toda la capacidad de proceso del computador para atender a todos
5 eventos que se producen y en el mismo instante en que se producen. En estos
"1..'-0 S normalmente se establecen tiempos máximos de respuesta ante determinados
--entos (alru·mas, fallos, errores, etc.).
~s.
Cuando se trata de diseñar un sistema con restricciones de tiempo se debe tener
'Il cuenta lo siguiente:
l. TAREAS CONCURRE~TES: Determinar qué tareas se deben ejecutar en pa-
ralelo para cumplir con las restricciones impuestas. Se deberá prestar especial
atención a aquellas tareas con tiempos de respuesta más críticos y aquellas otras
que se ejecutarán con mayor frecuencia. Al diseño y codificación de ambos gru-
la pos de tareas se debe prestar especial cuidado, pues de ello depende que se
;e cumplan finalmente las restricciones.
·e 2. SI~CROKIZACIÓK DE TAREAS: Determinar los puntos de sincronización
entre las distintas tareas. ~ormalmente las tareas nunca funcionan cada una
por separado sin tener en cuenta a las demás. Cuando una tarea Ti se encarga
de obtener un resultado que debe utilizar otra T2, ambas se deben sincronizar.
n
La tarea T2 esperará hasta que Ti tenga disponible un nuevo resultado y en el
e
caso de que T2 no haya utilizado el anterior resultado es Ti la que debe esperar.
:1
Para la sincronización entre tareas se pueden utilizar semáforos o mecanismos
r
de tipo rendezvous disponibles en los sistemas operativos o en lenguajes de
programación concurrentes (Ada, Pascal Concurrente, etc.).
3. CO:MCKICACIÓN ENTRE TAREAS: Determinar si la cooperación se basa
en el empleo de datos compartidos o mediante el paso de mensajes entre las
r
tareas. En cualquier caso, el diseñador debe concretar la estructura de los datos
L
compartidos o de los mensajes que se intercambian. También se debe concretar
qué tareas serán las productoras de los datos y qué otras serán las consumidoras.
En el caso de utilizar datos compartidos se tendrá que evitar que los datos
puedan ser modjficados en el momento de la consulta, lo que daría lugar a errores
muy difíciles de detectar. En este caso, es necesario utilizar mecanismos como
semáforos, monitores: regiones críticas, etc. para garantizar la exclusión mutua
entre las distintas tareas que modifican y consultan los datos compartidos.
Estos mecanismos están disponibles en los sistemas operativos o en lenguajes
de programación concurrente.
132 F"CND.4..,IESTOS DEL DISEÑO DE SOFTlV.4.RE se
Según el a8pecto del sistema que se trata de describir es acom,ejablc emplear una.
,_ :nra clase <le notación. De acuerdo con este criterio, dasifkaremos las notaciones
a los siguientes grupos:
• Notacion0s estructnr alcs
■ ~otacioncs estáticas o de organización
>r ■ l'iotaciones dinámicas o de comportamiento
!él
■ Notaciones híbridas
;e
le El lenguaje natural como notación queda fuera de esta clasificación puesto que se
.a . ucde utilizar para cubrir cualquier aspecto del sistema. Siempre que se utilice, sc>
.eherán tener en cnenta las recomendaciones dadas en el capítulo anterior v en todo
abO, se procurará utilizar solamente como complemento a otras notaciones.
A
1-
1.
TI
)s
le
1-
'Il
:l.
;e
)-
Je
D
o
a
1- Figura 4.1: Diagrama de bloque:,
o,
a
-
4.6.1. N ota ciones estructurales
E::,tas notaciones sirven para cubrir un primer nivel del diseño arquitectónico y
con ellas se trata de desglosar y estructurar el sistema en sus partes f undamentale::..
y En principio 1 cualquier notación informal utilizada en otras ac-tividade::. de ingeniería
a \ que permita describir la estructura global de uu sistema, puede ser válida. Una
-
notación habitual para desglosar un sistema en su~ partes es el empleo de diagrama..._
de bloque..
134 FUSD.-L\!ESTOS DEL DISEÑO DE SOFTW,tR.E NOj
En la figura 4.1 se muestra el diagrama <le bloques de un sistema que está dividjdo I
en cuatro bloques y en el que además se indican las conexiones que existen entre ellos. trod
En algunos casos estas conexiones también pueden reflejar una cierta clasificadón ady,
o jerarquía de los bloques. Cuando la notación es informal , es necesario concretar que
explícitamente si con el diagrama se indica algo más que la simple conexión existente que
entre los bloques.
(
arq1
sub:
Capa 1
par:
1 Pr,
Capa 2 má.'
Capa 3
P1
Capa 4
E P2 s
T
Capa 5
Capa 6
Capa 7
(a) (b)
E F
Diagramas de estructura
■ LÍKEA: une a dos rectángulos e indica que el módulo superior llama o utiliza
al módulo inferior. A veces la línea acaba en una _flecha junto al módulo inferior
al que apunta.
■ RO:\ifBO: se sitúa sobre una Línea e indica que esa llamada o utilización es
opcional. Se puede prescindir de este símbolo si en la posterior descripción
del módulo superior, mediante pseudocódigo u otra notación) se indica que el
módulo inferior se utiliza sólo opcionalmente.
■ ARCO: se sitúa sobre una Línea e indica que esa llamada o utilización se efectúa
de manera repetitiva. Se puede prescindir de este símbolo si en la posterior
descripción del módulo superior, mediante pseudocódigo u otra notación, se
indica que el módulo inferior se utiliza de forma repetitiva.
• CÍRCULO CON FLECHA: se sitúa en paralelo a una línea y representa el
envío de los datos, cuyo nombre acompaña al símbolo, desde un módulo a otro.
El sentido del envío lo marca la flecha que acompaña al círculo. Para indicar
que los datos son una información de control se utiliza un círculo relleno. Una
información de control sirve para indicar SI/ KO, o bien un estado: Correcto /
Repetir / Error / Espera / Desconectado /
En el capítulo siguiente se verán técnicas de diseño que permiten obtener el dia-
grama de estructura a partir de la especificación. Cuando el diseño realizado es
razonablemente correcto, el resultado es un diagrama en forma de árbol mostrando
la jerarquización de los módulos. Como sucede en la figura 4.3 es normal que varios
módulos superiores utilicen un mismo módulo inferior, lo que significa que ese mó-
dulo se reutiliza en varios puntos del sistema.
utiliza • El módulo F no devuelve nada a ninguno de sus módulos superiores. Eso ocurre,
inferior por ejemplo 1 si se encarga de realizar la salida de los datos que se le envían
(impresora, pantalla, etc.).
ción es • El módulo D se utiliza opcionalmente por A y recibe de este último el dato X
ripción que a su vez A recibió de B.
que el
• El diagrama es estrictamente jerarquizado y no existen Líneas entre módulos
de un mismo nivel.
efectúa
>sterior
ión, se
A o.o
enta el
a otro. 1
indicar
o. "Cna B 1.0
e 2.0
D
3.0
recto/
l 1 1
1 1 1 1
el dia-
ado es E F G H 1 J K 3.3
1.2 2-1 2.2 3.1 3.2
1.1
tra.ndo
varios
se mó- Figura 4.4: Diagrama. HIPO de contenidos
La figura 4.4 muestra un diagrama HIPO de contenidos que se utiliza para estable-
elve al
cer la jerarquía entre los módulos del sistema. Como se puede observar, es asimilable
a un diagrama de estructura simplificado en el que no se indican los datos que se in-
) pro- tercambian los módulos. Cada módulo tiene un nombre (A, B, C, ... ) y una referencia
al correspondiente diagrama HIPO de detalle (O.O, 1.0, .... ).
FüSD.-1:-.fESTOS DEL DISEÑO DE SOFTlVARE NO
138
Dia
p o
Datos_A Pseudocódigo del (Ja
Proceso de
Datos- N
tre;
Con referencias a
otros diagramas
de detalle: L(k,m)
Datos- M
Datos- B
Diagrama: a.b
PARA: M(K,I)
rrtulo del diagrama: A Q(m,n)
En la figura 4.5 tenernos el diagrama HIPO de detalle del módulo cuyo nombre
es A y referencia (a.b). Los diagramas de detalle constan de tres zonas: Entrada (I).
Proceso (P), Salida (O). En las zonas de entrada y salida se indican respectivamente
los datos que entran (Datos_A y Datos_B) y salen (Datos_N y Datos_M) del
módulo. En la zona central se detalla el pseudocódigo del proceso con referencia a
otros diagramas de detalle de nivel inferior en la jerarquía. La lista de los diagramas
referenciados se listan a continuación de la partícula PARA: Por la parte superior y
a continuación de la partícula DE: se indica el diagrama de detalle de nivel superior:
N(iJ).
A B e
l o
* o
X y z u V
Diagramas de Jackson
La metodología Jackson está englobada dentro de las de Diseño Dirigido por los
Datos. que ha sido utilizado fundamentalmente para diseñar sistemas relath·amente
pequeños de procesamiento de datos.
Di
A 1
B·
I
A- B-C+ D ii
C= [ E I F] e
E= G d
F =H + I u
e
Diccionario de datos
C'on esta notación se detalla la estructura interna <le los <latos que maneja el
. -.tema. Las características de esta notación ya han sido descritas en el apartado
_ descripción de datos del capítulo de especificación de software. Para el diseño
partirá del diccionario de datos incluido en el documento SRD y mediante los
n finamientos necesarios se ampliará y completará hasta alcanzar el nivel de detalle
DP(.'Csario para iniciar la codificación. En el próximo capítulo se estudiarán las técnicas
~ra realizar esta labor.
Diagramas Entidad-Relación
Esta notación permite definir el modelo de datos. las relaciones entre los datos y en
..,""11eral la organización de la información. Esta notación está descrita en el apartado
ie diagramas de modelo de datos del capítulo de especificación de software. Para
~a fase de diseño se tomará como punto de partida el diagrama propuesto en el
documento SRD, que se completará y ampliará con las nuevas entidades y relaciones
entre las mismas, que aparezcan en la fase de diseño del sistema.
na
,a-
~ otaciones dinámicas
Notaciones híbridas
Por tanto, se podría considerar como una notación híbrida. Tam_bién la metodolo-
gía de diseño orientada a los datos de \Varnier-Orr posee una notación que se pucd..-
considerar híbrida por las mismas razones: se parte de la organización de los dato-
para diseñar los procedimientos. Para un estudio en detalle de esta metodología ::,
pueden consultar (\Varnier81] ~- [Orr8ll.
"iDTA.CIOJVES PARA EL DISEÑO 143
!>iagramas de abstracciones
de
SC'
de
Como ya hemos visto en este mismo capítulo, el concepto de abstracción es fun-
~ amental para la estructuración de sistemas complejos. La notación que aquí se des-
cnbe fue propuesta originalmente por Liskov [Liskov80) para describir la estructura
de un sistema software compuesto por elementos abstractos. En la propuesta original
so
.o.
contemplaban dos t ipos de abstracciones: las funciones y los tipos abstractos de
ó ltos. A ellos se han añadido con símbolo propio [Cerrada00] los datos encapsulados.
,Je
es
te Dada la afinidad existente entre los tipos abstractos de datos y las clases de obje-
' '>S. al tiempo que se presenta la notación para describir abstracciones, se aprovecha
para establecer una cierta analogía entre la programación basada en abstracciones y
!a programación orientada a objetos.
á-
e. Según se muestra en la figura 4.8 (a), en una abstracción se distinguen tres partes
o elementos claramente diferenciados:
Nombre Nombre
Contenido Atributos
. .. .... ....... e
....... ·ión
.......
de 1
Operaciones Métodos
Ol
....... ....... ecl
(a) (b)
Los tipos abstractos de datos permiten crear nuevos tipos de datos, además de
los predefinidos en el lenguaje de implementación. Todos los datos concretos que se
manejen en un programa deben aparecer como constantes o variables de algún tipo ,
sea predefinido o definido como tipo abstracto. Para operar con un dato en particular
se invocará alguna de las operaciones definidas sobre su tipo, indicando a qué dato
en particular queremos aplicarla. Por ejemplo, si tenemos el tipo abstracto Tarjeta
y se declara:
LeerTarjeta( tarjeta4B );
0 Abstracción funcional
anto
mas: ~ Tipo Abstra cto de datos
m
ias).
:ción Dato Encapsulado
está
ComprobarTarjeta;
pa- En la figura 4.9 se muestra la notación gráfica para indicar la forma de abstracción
que se está empleando. En la figura 4.10 tenemos el diagrama de estructura de un
146 FUNDA~IEXTOS DEL DISEÑO DE SOFT\.V..4.RE so
sistema. En este caso los módulos son abstracciones en sus distintas formas posibles
y la relación entre abstracciones es jerárquica e implica que la abstracción superior
utiliza a la inferior. Así, la abstracción funcional A utiliza el dato encapsulado D y
el tipo abstracto B. Al dato encapsulado D también lo utilizan B y la abstracción
funcional C. A su vez, la abstracción funcional C también es utilizada por B.
Diagramas de objetos
ABSTRACCIOKES OBJETOS
Contenido Atributos
Operaciones - - :\ilétodos
Padre
- ···
··-····
- ··
- ···
·-··"·
_ ,,
/"'-..
1 1
Hijo_Uno Hijo_Dos Hijo_Tres
- - -·-· -
······- ·-····· --··
--· - ·· - ·
_,, -
--·
-··-·- ,.-..., - -···
-·-- -- ··- ·
I
Con la relación de herencia no es necesario indicar la cardinalidad entre las di.;:
de objetos, que está implícita en el diagrama. ya que en él aparece expresam'-
cada relación de herencia entre clases. I
JTACI01'"ES E4RA EL DISE5to 149
Estructura
-
--
-
-
·--
-
◊
6 ...... l
Elemento_1 Elemento- 2 Elemento_3
-- - -
·--- - -- -·-···
-·- - -·
- - -·
- ·- --··
·- - -
.
La relación de composición permite describir un objeto mediante los elemen-
tos que lo forman. En la figura 4.12 se muestra la relación de composición
con la notación O~IT. El rombo indica. que el objeto Estructura está com-
puesto de Elemento_ l, Elemento_ 2 y Elemento_ 3.
4. 7. Documentos de diseño
l. INTRODUCCIÓN
Esta sección debe dar una visión general de todo el documento ADD. Los ..
tenidos de sus apartados (Objetivo, Ámbito, Definiciones: siglas y abreviattc
y Referencias) st>rán similares a los descritos en el capítulo anterior para el
cumento SRD pero referidos al sistema tal como se ha diseñado. Siempre q~
considere interesante se puede y se debe hacer referencia a los correspondí
apartados del documento SRD.
Esta secrión debe dar una visión general de los requisitos funcionales r
otro tipo) del sistema que ha de ser diseñado. haciendo referencia al docu
SRD.
:)fENTOS DE DISENO 151
l. INTRODUCCIÓ~
1.1 Objetivo
1.2 Ámbito
1.3 Definiciones, siglas y abreviaturas
1.4 Referencias
1.5 Panorámica del documento
2. PA::--IORÁ\flCA DEL SISTEMA
3. CONTEXTO DEL SISTE1'v1A
Esta sección describe el nivel superior del dü,eiío. en que se considera el sistema
en su conjunto y se hace una primera estrucrnra.ción en cornponentes.
152 FL'SDAJJENTOS DEL DISEÑO DE SOFT1V:ARE DOC(
5.n.l Tipo
5.n.2 Objetivo
5.n.3 Función
5.n.4 Subordinados
5.n.5 Dependencias
5.n.6 Interfases
Se describe cómo otros componentes interactúan con éste. Se tienen que esta-
blecer las distintas formas de interacción y las reglas para cada una de ellas:
paso de parámetros, zona común de memoria, mensajes, etc. También se indi-
carán las restricciones tales como rangos, errores, etc.
5.n.7 Recursos
Se describen los elementos usados por este componente que son externos a este
diseño: impresoras, particiones de disco, organización de la memoria, librerías
matemáticas, servicios del sistema operativo. tamaño de "buffers". posibilida-
des de interbloqueos, etc.
5.n.8 Referencias
5.n.9 Proceso
Finalmente, en esta sección se muestra una matriz poniendo en las filas todo
los requisitos y en las columnas todos los componentes. Para cada requisito ~
marcará el componente o componentes encargados de que se cumpla.
Este documento irá creciendo con el desarrollo del proyecto. En proyectos grar.
des puede ser conveniente organizarlo en varios volúmenes. Como se puede ver en
cuadro 4.3, el formato de este documento es bastante similar al ADD. La diferena.
entre ambos es el nivel de detalle al que se desciende. En este documento exist
un mayor nfunero de componentes y para cada uno de ellos se baja incluso hasta
nivel de codificación. Los listados fuente se recogen dentro del documento como
apéndice.
_-cLUSIONES 155
Conclusiones
En este capítulo se ha presentado en qué consiste el diseño de un sistema software
los conceptos necesarios para realizar un diseño, corno son:
156 FL-NDA_\IEXTOS DEL DISENO DE SOFTWARE
• Abstracción
■ \ Iodularidad
1
• Refinamiento
• Estructuras de datos
• Ocultación
• Genericida.d
• Herencia
■ Polimorfismo
• Concurrencia
También se presentan notaciones para realizar el diseño de los sistemas software
Tanto desde un punto de vista estático, qué elementos tiene el sistema, corno des<i
un punto de vista dinámico, qué evolución t ienen esos elementos cuando el sistem:
funciona.
En un principio sirven también para mostrar a los lectores qué tipo de cosas
quieren representar en el diseño y qué diferentes alternativas de representación ha-
Se presentan diferentes notaciones.
Introducción
El diseño de software es una actividad que requiere tener cierta experiencia pre-
:a. que es difícil de adquirir sólo a través del estudio de las técnicas de diseño. Sin
..:ibargo, un conocimiento detallado de dichas técnicas es esencial para poder abor-
~ la tarea de diseño con perspectivas de éxito.
5.2 . Objetivos
En este capítulo se hace un repaso a las técnicas más importantes de diseño que
... emplean habitualmente. Todas ellas tratan de facilitar la realización del diseño.
Jasadas en una o varias de estas técnicas se han desarrollado metodologías comple-
.as de diseño y en algunos casos tambi6n las correspondientes herramientas CASE
ara diseño asistido por computador. El estudio de cualquiera de estas metodologías
• ieda fuera del alcance de este libro. Además, ceñirse a una metodología concreta
...:nita bastante la capacidad del diseñador a la hora de intentar enfoques alternativos
e diseño. Por otro lado, existen libros enteros dedicados exclusivamente a la presen-
.ación y estudio de cada una de las metodologías y sus correspondientes herramientas.
Con carácter general, todas las técnicas tratan de conseguir como objetivos in-
_¡iediatos del diseño los siguientes:
. La descomposición modular del sistema. Se trata de aplicar el concepto de modu-
laridad y obtener una división del sistema en partes o módulos.
157
158 TÉCNICAS GENER4.LES DE DISEÑO DE SOFTlVA.RE DEt
Independencia funcional
ma-
En la matriz REQUISITOS/ COJvIPOXENTES del final de los documentos ADD
- DDD es necesario indicar qué componente (módulo) se encargará de realizar cada
.mo delos requisitos (funciones) indicados en el documento SRD. Como primer paso
160 TÉCXICAS GEXERALES DE DISEÑO DE SOFTR'"4.RE DES
Si el análisis está bien hecho y las funciones son independientes, estos módul~
tendrán independencia funcional entre ellos. Posteriormente y en sucesivos pasos d
refinamiento del diseño se agruparán funciones afines en un rn.ismo módulo o 'Se sub-
dividirán ciertos módulos en otros varios más sencillos. Para llevar a cabo esta tare¡
es necesario tener muy en cuenta los conceptos de abstracción, ocultación, generici-
dad, etc. explicados en el capítulo anterior.
]
Para que un módulo posea independencia funcional debe realizar una función con
creta o un conjunto de funciones afines, sin apenas ninguna relación con el resto d
los módulos del sistema. Aunque resulta absurdo, el mayor grado de independencí
se consigue cuando no existe ninguna relación entre los distintos módulos.
Para medir de una forma relativa la independencia funcional que hay entre varir
módulos se utilizan fundamentalmente dos criterios: acoplamiento y cohesión. EfiL
criterios fueron sugeridos por Stevf'ns, Constantine y Mycrs en [Stevens74] dentro e
la metodología de diseño estructurado, pero son igualmente validos para realizar ~
descomposición funcional de un sistema utilizando cualquier otro tipo de técnica
metodología.
Acoplamiento
Para manejar esta escala hay que saber el significado de cada tipo de acoplamiento
·uándo se produce. Con ella se trata de conocer lo que se debe hacer para conseguir
Sto acoplamiento débil y lo que se debe evitar para que no exista un acoplamiento
denc ~ rte entre módulos. No se trata de situar con precisión el resultado de la descompo-
- 1ón final de un sistema dentro de esta escala, dado que esto no resulta de especial
terés y además resulta difícil delimitar las fronteras entre los tipos consecutivos.
P r el contrario, el objetivo es que durante el diseño se tenga en cuenta la escala
'OOra buscar descomposiciones con acoplamiento débil o. a lo sumo, moderado. En la
:¡gura 5.1 se muestran gráficamente situaciones que dan lugar a la existencia de un
·oplamiento fuerte entre módulos.
a7 1 A l_, B
~
A 1
Zona
común
zar
e 1 C I D
(a) (b)
Figura 5.1: Acoplamiento fuerte: (a) por c-ontenido; (b) común o externo
~
,._L 7 ~ ,.-L, B
~---' L__ J
En este caso, una señal (s) o dato de control que se pasa desde un módulo (A
otro (B) es lo que determina la línea de ejecución que se debe seguir dentro de e~r }
último (B). Con este tipo de acoplamiento dentro de un mismo módulo se puede:-
tratar distintos casos o situaciones. Por ejemplo, es razonable que un módulo puec
generar o no una señal acústica al alcanzar un nivel de alarma y en general qllf'
:.'ESCOMPOSICIÓN 1'10DULAR 163
B e
o E
C ohesión
t Cohesión abstraccional
ALTA 1 Cohesión funcional
1 Cohesión secuencial
:\IIEDIA 1 Cohesión ele comunicación
1 Cohesión temporal
BAJA 1 Cohesión lógica
1 Cohesión coincidcntal
Por cohesión de comunicación se entiende aquella que se produce cuando todos los
meneos del módulo operan con el mismo conjunto de datos de entrada o producen
mismo conjunto de datos de salida. Esto se da, por ejemplo cuando un módulo
,-a!iza operaciones diversas, pero siempre con la misma tabla de datos, y también
.1ando un módulo de exportación de información empaqueta distintas da.ges de da-
s pero generando siempre el mismo fichero de salida.
Con una cohesión f\.1EDIA se puede reducir el número de módulos. Sin embargo,
-sto no se debe realizar a costa de aumentar el grado de acoplamiento entre módulos.
Por ejemplo, no se deben unir dos módulos con acoplamiento DÉBIL para obtener
la- ..!DO único con acoplamiento :tvIODERADO, en el que se requiere pasar una serial
an ;>ara indicar con cual de los dos antiguos submódulos se quiere trabajar.
de
de En un módulo con cohesión funcional cada elemento está encargado de la rea-
ue jza.ción de una función concreta y específica. Con las técnicas de diseño funcional
::le descendente este nivel de cohesión es el máximo que se puede lograr dentro de un
módulo. Por tanto, con estas técnicas el objetivo será que todos los módulos tengan
una cohesión funcional.
os
so
166 TÉCXICAS GESERALES DE DISE}\'O DE SOFTl-VARE DEt
Con la técnica de diseño basado en abstracciones, un módulo con cohesión funcio- Cor.
Estos criterios serán siempre orientati\·os debido tanto a las deficiencias intrínsecas
propias de cualquier descripción que se realiza en lenguaje natural como también .1
la. dificultad de delimitar las fronteras entre los distintos niveles de cohesión. Así, con
una descripción detallada: "medir temperatura. humedad y presión" se puede pensa:-
en una cohesión secuencial y con una más concisa: 11 medir sensores.en una cohesiot.
funcional. Está claro que la palabra ·'sensores·' resulta más imprecisa que las tres -
las que sustituye. Por otro lado. el diseñador es el encargado de matizar la necesida.
de un tratamiento específico para cada tipo de sensor o si todos los sensores se deber:.
tratar como un único tipo abstracto de datos. Esto último daría lugar a una cohesi'"'
abstraccional. En resumen. la descomposición modular con una mayor independencu.
funcional se logra con un acoplamiento DÉBIL entre sus módulos y una cohesi
ALTA dentro de cada uno de ellos.
~ ESCOlv.CPOSICIÓN :VIODULA.R 167
ARE
:lCIO-
Comprensibilidad
lo se La dinámica del proceso de diseño e implementación de un sistema hace que los
ccio- :ambios sean más frecuentes de lo que sería deseable. Posteriormente, los cambios
!l.sos. ontinúan durante la fase de mantenimiento hasta que se sustituye el sistema por
pon- tro nuevo. A menudo los cambios deben ser realizados por personas que no parti-
le la -iparon ni en el diseño ni en a implementación. Para facilitar e incluso posibilitar
1r en t:Stos cambios es necesario que cada módulo sea comprensible de forma &islada. Ko
rnte- ~iene ,sentido que a veces el esfuerzo de comprensión de un módulo sea mayor que el
tlecesario para su realización.
estará muy mediatizada por el objetivo concreto del diseño. Esto dificulta bastante
la adaptabilidad del diseño a otras necesidades y la posible reutilización de algunos
de sus módulos. Sin embargo, es inevitable que un sistema en mayor o menor medida
se adapte a los nuevos requisitos que va imponiendo el «cliente".
ece-
5.4. 1. Desarrollo por refinamiento progresivo
Esta técnica corresponde a la aplicación en la fase de diseño de la metodología
·e programación conocida como programación estructurada, [Dijkstra68], [Dahl72l
- que condujo a la construcción de programas mediante refinamientos sucesivos
-\"irth71].
par;
anteriormente, cuyos elementos serán a su vez operaciones. Por ejemplo, considere-
mos un programa para obtener las raíces de una ecuación de segundo grado. Los
primeros refinamientos podrían ser:
Obtener
raíces
•'
:1ara construir la estructura del programa en forma dE>scendente. Se utilizan los dia-
sidere-
.o. Los gramas específicos descritos en el capítulo anterior para representar tanto la estruc-
~ura del programa como la de los datos con los que opera. Ko hay que confundir esta
=::ictodología de diseño de programas con la denominada JSD: Jackson Systcm Deve-
opment , del mismo autor, descrita en [Jackson83l, y que presenta algunas analogías
,:on las técnicas de desarrollo orientadas a objetos.
Como técnica de diseño los pasos significativos son los dos primeros, mientras que
el tercero corresponde más bien a la fase de codificación. Ilustraremos esta técnica
:nediante un ejemplo, consistente en un programa para "justificar" un texto, es decir,
reagrupar las palabras en líneas e intercalar los espacios apropiados para que las
Jneas del texto se ajusten a los márgenes establecidos. En este ejemplo se pretende,
lo los
además, respetar la forma de separar los párrafos en el texto original. Si consideramos
;iones
Pl texto inicial:
dular
figura Texto de entrada
se ha
Este párrafo y los dos siguientes son un
ctura ejemplo del texto que se
pretende ajustar. Este es el primer
ación párrafo.
Y este es el segundo párrafo, que está
separado del anterior
sólo por el sangrado.
Este tercer ~árrafo no tiene sangrado, y la
separación viene dada
por una línea en blanco.
c:kson
stric-
ts re-
se trataría de obtener como resultado algo similar a:
isivos
172 TÉCNIC...\S GE1\"ERALES DE DISEÑO DE SOFTWARE TE
Texto de salida
El
Este párrafo y los dos siguientes son un ejemplo
del texto que se pretende ajustar. Este es el
primer párrafo.
Y este es el segundo párrafo, que está
separado del anterior sólo por el sangrado.
[
En el PASO 1 del diseño identificamos las estructuras de los datos de entrada v
salida. En el texto de entrada los espacios en blanco y los saltos de línea sólo soL
significativos en la separación entre párrafos. Podríamos describir la estructura com
una iteración de elementos, bien palabras o separadores.
Texto de Telttode
entrada salida
Token• línea•
o . o o
Separ. de Palabra
o linea Línea O Linea en
párrafo ajustada finol blanco
ENTRADA SALIDA
Sepa.r de
o
Palabras
J)Mrafo
En este caso lo que se puede hacer es buscar una un idad superior de información
que englobe a las unidades de datos de la entrada y de la salida, y usarla como uni-
dad de t ratamiento en el programa. Esta unidad superior sería el párrafo, que podría
adaptarse a ambas en la forma:
texto = { párrafo }
párrafo de entrada = separador de párrafo + { palabra }
párrafo de salida = { línea en blanco }
+ { línea ajustada } + línea final
Con esta perspectiva podemos redefinir las estructuras de los datos de entrada y
de salida, tal corno se indica en la figura 5.6. Ahora ya se puede derivar con relativa
facilidad la estructura del programa, mediante un sencillo análisis de las operaciones
a realizar con cada elemento de datos.
justificando e imprimiendo las línea<; que ¡,e llenen. La operación de terminar párrafo
imprime la línea final, sin ajustar.
Por ejemplo, considerando un caso muy sencillo con sólo dos operaciones o proce-
sos (Figura5.6 (A), cada uno de los cuales materializamos como un módulo separado.
tenemos tres posibilidades de organización modular según cómo establezcamos la je-
rarquía de control entre ellos.
X z
(A)
UNO DOS
Módulo de
... leer x._ ...escribir z Coordinación
DOS UNO
UNO DOS
•. escribir z ...leer x...
-leer x ... ... escribir z
:ión
Para establecer una jerarquía de control razonable entre las diferentes operacio-
nes descritas en los diagramas de flujo de datos, la técnica de diseño estructurado
recomienda hacer ciertos análisis del flujo de datos global.
1 --------------------------,
'' ''
' '
/ :
'
'
1-------ol
1 ------------------- ------- 1
,__.._
: ---+
TrWlUIC.ÓOMS
Í
,
~f'!VOCH
lt'WISICC:lotl
: -------------------------------------~
''
¡
'
:'
:
--------------------------------------~'
91
~l
:a
le Ejemplo: Sist e ma de gestión de biblioteca
tr
Se describe aquí como ejemplo un posible diseño del caso práctico especificado
.e en el capítulo 3 con el nombre de "Sistema de Gestión de Biblioteca", empleando la
a técnica de diseño estructurado, por ser la más ajustada a la forma de especificación
mediante diagramas de flujo de datos usada en el SRD de este ejemplo. El primer
e paso será analizar los tipos de flujo de datos que circulan por el sistema. Podemos
.s rcformular el diagrama de primer nivel DFD.O prescindiendo, para simplificar, de
L- los almacenes de información, en la forma que se indica en la figura 5.10. En este
O diagrama se aprecia claramente una estructura de transacciones, en la que el centro
n de transacción no se corresponde con un proceso concreto, sino simplemente con la
a ramificación del flujo de órdenes de entrada. De aquí podemos derivar un primer
e nivel de estructura del sistema tal como el que aparece en dicha figura.
178 TÉCNICAS GEJ\'ERALES DE DISENO DE SOFTVV.ARE TÉ
Gestión de
-
o ...~
--
biblioteca
material
1ec
:Ull
..... listar ~
Listar
.... Buscar por
....
Baja _ - Baja L-
Devolución
autor
Actualizar 1-
Buscar
1-
de lector
El proceso puede repetirse con cada uno de los subsistemas (gestión de libros) de
lectores) etc ... ), para refinar aún más la estructura del sistema. El análisis de cada
subsistema nos vuelve a mostrar un esquema de flujo de transacción, ya que cada
uno de ellos es una agrupación de funciones más sencillas, que se han asociado el!
un mismo proceso o diagrama por la afinidad de los datos sobre los que operan. E,
inmediato. por tanto, llegar a la estructura final de la figura 5.11, en que aparece ur:
segundo nivel de descomposición del sistema.
Ax
2 C
+ B x + = O =;, X =
-B ± J (B2
A
- 4AC)
2
podemos definir sobre dichos tipos abstractos las siguientes operaciones necesarias
para la aplicación:
Para obtener las raíces se usarán _las operaciones definidas sobre números comple-
jos. La estructura modular del progran1a podría la representada en la figura 5.12
180 TÉCNICAS GE!\-ERA.LES DE DISEÑO DE SOFT\iv'ARE TJ
D]
Programa
dt
principal rn
o
ne
Ecuación
E
22 grado d,
Número
complejo
Al reorganizar las listas hay que depurarlas eliminando los términos irrelevantes
;-;inónimos, y completarla con los elementos implícitos en la descripción, pero que
o se mencionaban expresamente.
A partir de este marcado elaboramos w1a doble lista. con los elementos correspondientes
>re- a datos y a operaciones. En estas listas se han man-arlo con el signo ·'=" los términos con-
siderados sinónimos. También se han distinguido. comentándolos, los términos homónimos
pero con diferente significado.
182 TÉCNICAS GENERALES DE DISEÑO DE SOFTWARE TÉ
DATOS OPERACIO~ES
textos impresos ajustado
- salida = ajustar
margen derecho - ajuste
= margen - intercalando (espacios)
palabra.e; recomponen
texto de entrada = texto inicial quepan
separación en párrafos ser impreso
- forma de separar párrafos
líneas en blanco
sangra.do
- espacio en blanco
(comienzo de línea)
párrafo
líneas de salida
final de párrafo
espacios en blanco
(entre palabras de salida)
Ajustar
o g
dat
ha~
Párrafo ~o
ab:
:,,i
Palabra
En este ejemplo se detecta la omisión de una función para leer las palabras del
'f'xto de entrada y reconocer la separación entre párrafos. El diseño resultante podría
--er el indicado en la figura 5.13. El tipo ··separador de párrafo" no se ha materializado
·n un módulo separado, ya que no hay operaciones df'finidas sobre él y su contenido de
:nformación se reduce a un par de números enteros {líneas de separación y sangrado).
~ i,:: 3
::> .a. . Ejemplo: Vide ojuego de las minas
Este ejemplo ha sido descrito en el capítulo 3, donde se encuf'ntra incluso el do-
~umento de espE>cifica.ción de requisitos, cornpk•to. Para. realizar el diseño basado en
abstracciones debemos empezar por recopilar toda la información disponible. Pnf'<le
considerarse que la información es bastant<' precisa, <' incluye ya la identificación de
\·arias funciones y tipos de datos importantf's. l · u primer repaso del docnmf'nto de
Pspecificación de requisitos. al que podemos aplicar la técnica <le Abbot para identi-
'icar elementos significativos, nos conducirfa a una primera lista df' tipos df' datos y
operaciones asociadas, por ejemplo:
184 TÉCNICAS GESERALES DE DISEÑO DE SOFT\VARE TE
En esta lista se han incluido algunos tipos abstractos de datos. así como un par
de abstracciones funcionales, correspondientes al programa principal ( el juego de las
minas) y a la invocación de la ayuda en pantalla. El siguiente nivel de refinamiento
exige idear de manera. más precisa la forma de realizar ciertas operaciones. Por ejem- El
plo, se tiene el problema de cómo actualizar el cronómetro en pant,alla rnientras sP ple
está desarrollando el juego. y en particular mientras se está esperando que el juga- Ca]
dor pulse alguna teda. Otros problemas son cómo conservar los mejores resultado}-.
de una sesión para otra. y cómo actualizar un elemento en pantalla sin alterar la
presentación de otros. -
.:> .
REPETIR
Leer tecla
SI tecla no nula ENTONCES
responder a la tecla
F I~-SI
Leer tiempo
SI ha pasado el plazo E~TONCES
actuar por tiempo
FIN-SI
HASTA fin del juego
Esto nos lleva a diseñar un módulo de cronómetro del juego, de alto nivel, que se
.poya en otro de bajo nivel para leer el reloj del computador, así como otro módulo
.,e bajo nivel para leer del teclado sin espera. El cronómetro sería un dato encapsu-
1!.ado, definido de la siguiente manera:
DATO: Cronómetro
Atributos:
tiempo transcurrido 1 en segundos
Operaciones:
iniciar
pa: actualizar, si ha pasado un segundo
las parar
nto
im- El resultado final del diseño se recoge en el documento que aparece como ejem-
: se plo de documento completo de diseño arquitectónico, más adelante en este mismo
ga- "apítulo.
:io:-
· la
5. 6. Técnicas de diseño orientadas a objetos
le- Se han descrito una gran variedad de metodologías particulares en este campo
Jo. ICoad90l, [Booch94], [Rumbaugh91], etc. Toda.s Pilas tienen muchos elementos en
llo común, y se distinguen sobre todo en la aparienda de los diagramas empleados para
na describir el diseño. Esta situación es análoga a la que ocurrió en su momento con las
le- metodologías de análisis y diseño estructurado. basadas en los diagrainas de flujo de
e.latos.
186 TÉCNICAS GENERALES DE DISEÑO DE SOFTlVARE TÉ
Si tras estos pasos el diseño del sistema no está suficientemente refinado, se vucl
ven a repetir, aplicándolos a las clases y objetos poco detallados, hasta conseguir e::
diseño aceptable, listo para ser codificado. A continuación se detalla algo más cae
uno de los elementos de esta técnica general.
-:ÉCNICAS DE DISEÑO ORIENTADAS A OBJETOS 187
)S a 3.3 APLICAR HEREN CIA. Una vez identificados los objetos y sus opera-
ciones asociadas, hay que detectar analogías entre ellos, si las hay, y esta-
blecer las relaciones de herencia apropiadas, reformulando las descripciones
1el- de los objetos si es necesario. Estas relaciones de herencia se incluirán en
un el diagrama de modelo de objetos que se va desarrollando.
:l.da 3.4 DESCRIBIR LAS OPER ACIONES. Esta es una manera de verificar
que el diseño es consistente. Cada operación se describe de manera informal
o en pseudocódigo, haciendo referencia únicamente a operaciones o clases
188 TÉCNICAS GENERALES DE DISEÑO DE SOFT\-\:4.RE TÉG.
L
lé
Como ya se ha indicado, hay que analizar si el diseño modular resultante e:-
apropiado para pasar a la fase de codificación. Si algún módulo es todavía demasiadc
complejo, o no está definido con suficiente precisión: se repetirán los pasos anteriore:- e
t,
de diseño para ese módulo, con objeto de refinarlo.
Para ello se dispone de dispositivos de medida que aceptan las siguientes órden
básicas:
ÉCNICAS DE DISEÑO ORIENTADAS .4 OBJETOS 189
Termómetro:
lectura de la temperatura en ese instante
Anemómetro:
lectura de la velocidad de viento en ese instante
Veleta:
lectura de la dirección de viento en ese instante
Barómetro:
lectura de la presión atmosférica en eHe instante
Pluviómetro:
iniciar medición ( vaciar el depósito)
lectura de la lluYia calda desde el inicio anterior
• Reloj
lectura de la hora en ese instante
poner el reloj en hora
• 11odem
recibir un mensaje
transmitir un mensaje
TÉt
190 TÉCNICA.S GESERALES DE DISERO DE SOFTl,V,ARE
El diseño orientado a objetos puede realizarse siguiendo los pasos indicados ante-
riormente:
l. Estudiar y comprender el problema. Requiere leer con atención las especifica-
ciones y consultar todos los puntos dudosos que se encuentren. En particular
habrá que conocer el formato de los mensajes a enviar y recibir.
2. Desarrollar una posible solución. En este caso se puede optar por mantener en
memoria los datos necesarios para ir componiendo la información que habrá
que enviar cada hora. Esta información será:
■ Para la temperatura, presión, velocidad y dirección de viento, la suma de
las medidas y el número de ellas, para obtener la media al final.
• Para la temperatura, presión y velocidad de viento, el máximo y el mínim
hasta cada momento, que serán finalmente los de toda la hora.
■ Para la dirección de viento, cada una de las muestras, para poder seleccio-
nar al final de la hora las que se desvíen más del límite.
Los valores finales se calcularán al cabo de la hora, y se pondrán a cero ,~
registros. Los valores finales se mantendrán almacenados en espera de transm.-
tirlos a la estación central, al mismo tiempo que se va realizando la recogid
de datos de la hora siguiente. Al completar una nueva hora, los nuevos date.-
totales se almacenan reemplazando a los de la hora anterior, aunque éstos n
hayan podido ser trasmitidos a la estación central.
3.a Identificar las clases y objetos. Según la técnica de Abbott, marcando los té:-
minos clave como se ha hecho en la descripción informal inicial, se pued(
confeccionar las siguientes listas de elementos significativos:
..:.CNICAS DE DISEI~O ORIENTADAS A OBJETOS 191
DATOS OPERACIOJ.\"ES
Dispositivo de medida
lectura
máximo
mínimo
media
lecturas que se desvían
Jv!ensaje
hora
datos meteorológicos
fin de transmisión
Reloj
hora
Estación
S no
: tér-
eden
192 TÉCNICAS GE,\TERALES DE DISENO DE SOFTH~4RE TÉ<
3.b Identificar las operaciones sobre los objetos. A partir de la lista de operaciones
se van asignando los diferentes elementos a las clases reconocidas. En este caso.
podemos llegar a la siguiente distribución: Dispositivo de medida leer iniciar
medición obtener máximo obtener mínimo obtener media Nlensaje enviar recibir
Dispositivo de medida
leer
iniciar medición
obtener máximo
obtener mínimo
obtener media
:Mensaje
enviar
recibir
3.,
Reloj
leer
poner en hora
Estación
arrancar
detener
3.c Aplicar herencia. En este caso se puede observar que no todas la operacionec
sobre dispositivos de medida son aplicables a cada uno de los dispositivos. Per
demos identificar medidores especializados, con operaciones particulares. A~
llegamos al siguiente esquema superclase/subclases:
:t\Iedidor
:t\Iedidor con máximo, mínimo y media
:t\Iedidor con media y lecturas que se desvían
:t\Iedidor con puesta a cero inicial
1Iedidor leer
(lectura simple)
iniciar medición
3.d Describir las operaciones. Ahora hay que comprobar que cada operación es
realizable, bien directamente o en función de las otras. Por ejemplo, la clase
"fvledidor" y la subclase "J\iledidor con máximo, mínimo y media" se podrían
definir, en pseudocódigo, en la forma siguiente:
CLASE 1-'Iedidor
ATRIBUTOS
lectura: Tipo:Nledida
OPERA.CION Leer
tomar una nueva 'lectura'
FII\-CLASE
Las operaciones que dan problemas son las de "Arrancar" y "Detener:' la esta- 3.e l
ción. Con un poco de reflexión se puede comprender que en realidad la estación
sólo tiene una operación que realizar, que es el trabajo normal, y que podemos
redefinir como "Operar". El flujo de control de esta operación puede adoptar la
forma clásica de monitor cíclico, lo que conduce al siguiente pseudocódigo:
CLASE Estación
OPERACIOK Operar
iniciar la estación
REPETIR
SI hay mensaje ENTQ_ CES
recibir mensaje
poner en hora le reloj
componer mensaje con datos de la hora anterior
enviar el mensaje
FI~-SI
FIN-SI
HASTA tecla de parada pulsada
FIK-CLASE
Esta descripción nos lleva a descubrir que necesitamos dos operaciones adi-
cionales sobre la clase "Nlensaje", correspondientes a detectar si ha llega.do u.e
nuevo mensaje, y a componer el mensaje para enviarlo. Con el resultado d-
todos estos pasos del diseño se puede ya confeccionar un diagrama de objf'tc¿
del software de la estación meteorológica, tal como el que se representa en lo
figura Un objeto "Estación'· se compone de un gestor de ":tvlensajes" (modem
un "Relof, y una colección de medidores de las clases indicadas. Los medidore:
son especializaciones de la clase genérica '·:Yiedidor".
ItC_VICAS DE DISENO ORIENTA.DAS A OBJETOS 195
...e Establecer la estructura modular. Ahora se agrupan los elementos del diseño
en módulos, y se construye el diagrama de estructura de la aplicación, con las
relaciones de uso entre módulos. La forma más sencilla de hacerlo es asignar un
módulo a cada clase de objetos. Con ello se llega a la arquitectura representada
en la figura 5.14 Las relaciones de herencia de la figura 5.14 se traducen ahora
a relaciones de uso. Una subclase utiliza el código de su superclase.
Medidor Estaci6n
lectura
Leer Operar
◊
Á
1 1
1 1 1
Estación
1 ----==
Medidor Medidor con Medidor con Mensaje
Reloj
con máximo desviación puesta a cero (modem)
to::.
Lla
/
n) Medidor
re.<:
S
5.8. Diseño de bases de dat os r elacionales ad
;aria
Partiendo del modelo Entidad-Relación o bien del 11odelo de Objetos, es posib -.il
dar reglas prácticas, relativamente sencillas, para obtener los esquemas de las tabl~ ode
I::,EIVO DE B.\SES DE DATOS REL.-1CIOX.4.LES 197
una base de datos relacional que reflejen la ,isión lógica de los datos, y que sean
ptablemente eficientes. En [Rumbaugh9ll se $iStf'111atizan bien esas recomenda-
ión e nes, que nos guían sobre la forma de traducir a esquemas de tablas los a.tributos
m Ul. las entidades. y las relaciones entre ellas. incluyendo las de composición y herencia
es he ...~re objetos.
sin·e
3enta, En Pl modelo relacional, los aspectos de eficiencia se contemplan desde dos puntos
se a.- , ista. Por una parte se establecen las llamadas formas normales, que tienden a
1tar redundancias en los datos almacena.dos. Por otra parte se estudia el empleo
índices para mejorar la velocidad de acceso a los datos.
es en
é\.::, d 5.8.1. Fo rmas normales
Las formas normales de Codd definen criterios para establecer esquemas de tablas
tC' s0an claros y no redundantes. Estos criterios se numeran correlativamente, de
=ieuor a mayor nivel de restricción. dando lugar a las formas normales 1ª, 2ª. 3ª.
c. Una tabla que cumpla con una cierta forma nonnal cumple también con las
1.nt<•riores.
Para ilustrar las definiciones de estas formas normales, consideraremos como ejem-
:lato lo una tabla en que se recoge información sobre la organización de las clases pre-
nplo senciales en un determinado centro educativo. En cada curso hay varios grupos de
lasC' y en cada grupo se imparten varias asignaturas. Cada asignatura es impartida
ror uno o varios profesores. cada uno de los cuales se encarga de esa asignatura
~pen en uno o varios grupos. Cada asignatura tiene, además, un profesor coordinador,
m -; <'tlW puede ser, o no, uno de los profesores que la imparten. Cada profesor tiene asig-
!Ser· nado un despacho. En la figura 5.16 se recoge toda esta información en una sola tabla.
lo 3
Grupo Asignatura Profesor DE>spacho Coordinador
ad€ .
11,12 Cálculo F .Díaz D-23 R.Pérct
}. S.
13 Cálculo A.García D-27 R.Pérf'z
)las
11 Álgebra C.l\forales D-34 F.Arranz
;apd
12 Álgebra ~LCampo'> D-21 F.Arranz
13 1 AlgE>bra 1 F.Arranz 1 D-32 F.Arranz
en tantas filas como valores hay en la misma casilla. tal como se indica en la figura
5.17.
7
Grupo Asignatura Profesor Despacho Coordinador
11 Cálculo F.Díaz D-23 R.Pérez
12 Cálculo F.Díaz D-23 R.Pérez
13 Cálculo A.García D-27 R.Pérez
11 Álgebra e.Morales D-34 F.Arranz
12 Álgebra M.Campos D-21 F.Arranz
13 Álgebra F.Arranz D-32 F.Arranz
Se dice que una tabla está en 2ª forma normal si está en 1ª forma normal y
además hay una clave primaria (una columna o combinación de varias) que distingue
cada fila, y cada casilla que no sea de la clave primaria depende de toda la clave
primaria. En la tabla de la figura 5.17 la clave primaria es la combinación de las
dos primeras columnas. La tabla no está en 2ª forma normal porque el dato del
coordinador de la asignatura no depende de toda la clave primaria, sino sólo de
parte de ella (depende de la asignatura, pero no del grupo). Se puede conseguir la
segunda forma normal suprimiendo este dato de la tabla principal, y usando una
tabla auxiliar para relacionar la asignatura con el coordinador, tal como se hace en
las tablas de la figura 5.18
Existen criterios aún más restrictivos que definen las formas normales 4ª y si-
;uientes, que se aplican poco en la práctica.
1aJ y
ngue 5.8.2. Diseño de las entidades
:lave
e las En el modelo relacional cada entidad del modelo E-R se t raduce en una tabla por
•ada clase de entidad, con una fila por cada elemento de esa clase y una columna
> del
o de por cada atributo de esa entidad.
1ir la
una Si una entidad está relacionada con otras, y se quiere tener una referencia rápida
:e en zntre las entidades relacionadas, se puede incluir además una columna conteniendo
un cód igo o número de referencia que identifique cada elemento de datos, es decir,
cada fila de la tabla. En el modelo de objetos, esto corresponde a almacenar explíci-
~amente en la tabla el identificador del objeto.
cardinalidad, incluyendo N-1\. La referencia a las entidades relacionadas se hará me- 5.8
diante la clave primaria de cada una. La figura 5.20 (a) recoge esta idea.
rela
Si la cardinalidad es 1-~, es decir, la cardinalidad de un lado de la relación está ubj
limitada a 1, es posible incluir los datos de la relación en la misma tabla de una de ind
las entidades relacionadas, tal como se indica en la figura 5.20 (b). Si la relación es
1-1. es decir, la cardinalidad está limitada a 1 en cada lado, se pueden fundir las
tablas de las dos entidades en una sola, tal como se hace en la figura 5.20 (c). 5.8
~-A~f----<0>-----i~_B~
a) relación N--N
t 1 1 t
b) relación 1· N
e) relación l • l
t
Tabla A+ 8 +R
---------~--~
Figura 5.20: Tablas para relaciones de asociación
EÑO DE BASES DE DATOS RELACIONALES 201
Tratamiento de la herencia
Cuando una clase de objetos (entidad genérica) tiene varias subclases (entidades
-7ecíficas) se pueden adoptar tres formas de almacenar en tablas la información de
, entidades, tal como se recoge en la figura 5.21. En el caso (a) se usa una tabla para
superclase, con los atributos comunes, heredados por las subclases, más una tabla
r cada subclase, con sus atributos específicos. En el caso (b) se han repetido los
ributos comunes en las tablas de cada subclase, por lo que desaparece la tabla de
superclase. En el caso (c) se prescinde de las tablas separadas para cada subclase,
se amplía la tabla de la superclase con todos los atributos de cada una de las
-ibclases, en forma de campos o columnas con valores opcionales, según cuál sea la
-;ibdase del objeto almacenado en cada fila de la tabla.
Diseño de Índices
Los índices permiten acceder rápidamente a un dato concreto, reduciendo así el
iempo de acceso. Pero esto es a costa de aumentar el espacio necesario de almace-
::amiento y, lo que es más importante, aumentar el tiempo necesario para almacenar
--ada nuevo dato y más aún para modificar el valor de un atributo indexado (la mo-
jjficación equivale a suprimir el elemento del índice y luego reinsertarlo con el nuevo
•-alor).
En general, si hay que acceder a datos a través de sus relaciones con otros. será
conveniente mantener índices sobre las claves primarias y columnas de referencia de
las entidades relacionadas. Aparte de esto, no es fácil dar criterios generales sencillos
para decidir cuándo conviene o no establecer índices adicionales sobre campos no
rlave.
X
a) tablas de superclase y de subclase
Ref.X Atrib.X
1
l
l
1 1
l
y z I
i
1 1 :
Relación de herencia
r---------
' Ref.X Atrib.X Atrib.Y Atrib.Z
r--------·
'
XXlCl yyyy
:<Xlft zzzz
'''
'
'----------
Figura 5.21: Tablas para relaciones de herencia
-:SEÑO DE BASES DE D.4TOS REL4CIONALES 203
La razón para desglosar la lista de materias de las fichas de libro es para permitir
::,¡e dicha lista de materias ("thesaurus", en la terminología de los bibliotecarios) sea
ermanente, y todas las materias estén reseñadas aunque no haya ningún libro que
~ te de alguna de ellas en un momento dado.
LECTOR
LIBRO
MATERIA
AUTOR
Domicilio da
Teléfono
de
Las relaciones TRATA-DE y ACT OR-DE son de cardinalidad N-X, y se traducen en
en una tabla adicional para cada una. :;e
El
de
TRATA-DE AUTOR-DE rel
NºRef.Libro l\"ºRef.Libro
~ºReí.Materia :.'\ºReí.Autor
-
. ).
En general pueden adoptarse dos enfoques en el d iseño físico con estas bases de
_,,_tos. El primer enfoque resulta apropiado cuando la base de datos de objetos per-
::::ute usar una gran variedad de estructuras. En estt> caso el diseño se puede hacer
rno para las estructuras de datos en memoria. El sistema de gestión de base de
natos aporta como complemento la persistencia de los datos.
m que se establece implícitamente una tabla por cada clase de objetos. En este caso
..,p seguirían las recomendaciones ya dadas para el diseño sobre el modelo relacional.
de Las dos principales características que debe cumplir un patrón son la efectividad
to~ a la hora de resolver el problema descrito y la capacidad para ser reutilizado en
multitud de ocasiones. La correcta documentación del patrón es imprescindible para
lograr la reutilizabilidad. En [Gam95] se describen los patrones a través de una
plantilla común compuesta, entre otros, de los siguientes campos:
■ C sos conocidos
• Ejemplos
Cada vez son más las aplicaciones de los patrones dentro de la in,geniería de soft-
ware, algunas de ellas son: f
.
ListaAbstracta
,
Cliente , lterador
" +primero()
+creartterador()
+siguiente()
+contar()
+hayMas())
+añadir(Elemento)
+elementoActual()
+borrar( Elemento)
+,..()
6 <<crear>> 6
1
r----------------,y
1
El problema de introducir este objeto iterador reside en que los clientes nece-
sitan conocer la estructura para crear el iterador apropiado. Esto se soluciona
ms- generalizando los distintos itera.dores en una abstracción y dotando a las es-
tructuras de datos de un método de fabricación que cree un iterador concreto.
Agregado ,--
1 Qiente
1 .- lterador
1 1 +primero()
+crearlterador{)
+siguiente()
+hayMas:())
6 +elementoActual()
l~
AgregadoConcreto
«reartterador() ,,
,
lteradorConcreto
,
,, .
: <<crear>> ~
'' ------------------------------------------------------·'
''
return new tteradorConcreto(this);
r,
el
para que el cliente recorra la estructura paso a paso, o un iterador interno que
ofrece un método de actuación sobre la estructura que, de manera transparente
al cliente, la recorre aplicándose a todos sus elementos) .Y definirse el recorrido. A
mayores se podrían implementar operaciones adicionales en el iterador o definir
la estructura de éste de una manera más robusta ante cambios en la estructura.
Hay que tener especial cuidado en la implementación de iteradores con accesos
privilegiadosi iteradores para estructuras compuestas o iteradores nulos.
Ejemplo de uso
:o-
public {tatic void main(String argv[)) {
az Vector2 vector a nev Vector2(5);
//Creación del iterador
IteradorVector iterador • vector.iterador( );
/ /Recorrido con el iterador
el vhile (iterador.haaNext())
System.out.println(iterador.next());
los }
210 TÉCNICA.S GENERALES DE DISEÑO DE SOFTR:4.RE EJE
En java ya existe una interfaz it(!rator que hace a las veces de abstracción. Todos
los iteradores utilizados en sus librerías cumplen esta interfaz , lo que permite tratarlos
a todos ellos de manera uniforme. Hacer que nuestro IteradorVector implementase
Iterator permitiría que fuese utilizado por otras librerías y programas dffmanera
transparente.
l. 11\TRODvCCTÓ~
l.1. Objetivo
Se trata de realizar un vidcojuego denominado "Juego de las Minas" cuyas reglas y característ"
generales se detallan en el documento de requisitos del software: '.\HN'AS-SRD-99. En lí
generale~. en este juego se trata de descubrir dentro del tablero la situación de las minas oc
y situadas aleatoriamen te' sin que ninguna de ellas explote y en el menor tiempo posiblf'.
E.JE,vIPLOS DE DISEJVOS 211
1.2. Ambito
En este desarrollo se abordará una versión simple que utilizará una interfase hombre-máquina
para pantalla alfanumérica y teclado. En una fase posLerior, se desarrollará una. versión más
elaborada que utilizará pantalla gráfica y ratón. El desarrollo de esta versión simple y la posterior
deberá diferir solamente en los módulos específicos dedicados a la interfase hombre-máquina.
1.3. Definiciones siglas y abreviaturas
Tablero: Elemento gráfico que se muestra en la pantalla del computador con forma de cuadrícula
y en el que se desarrolla el juego.
Casilla: Cada uno de los elementos de los que está formada la cuadrícula del tablero.
Mina: Elemento ocul,o en una casilla del tablero y que si se destapa provoca la finalización del
juego.
1.4. Referencias
MIXAS-S RD-99, OOCUME:STO DE REQUISITOS DEL SOFTWARE d•l VIDEO JUEGO OE LAS MINAS.
2 2 1 2 2
5 11 1
- 1 2
.
11 2 1 .. 1 11
1
4 1 - X 1 3
3 1 1 .. .. 1
4 11 2 .. .. 1
11 4 1 1 1
'
1
1 '
1
'
Para facilitar la búsqueda de todas las mina:,. el jugador podrá. marcar una casilla cuando tenga
la certeza de que en ella existe una mina. En la figura M. l la marca se indica con el símbok
"!!". Esta marca impide que pueda ser destapada la casilla por error. El jugador también podrá
quitar la marca de una casilla. En todo momento se mostrará en pantalla el número de minas
ocultas y todavía no marcadas.
El jugador podrá seleccionar el grado de dificultad del juego entre tres nive les: b.fjo, medio ,
alto. En cada nivel se empleará un tamaño distinto de tablero y el número de minas a descu-
brir también será dis~into. La si Luación de las minas en el tablero se realizará. de forma aleatoria.
Cada vez que el jugador destapa. una casilla., se deberá. indicar si tenía. una mina, en cuyo case
finaliza el juego, o el número de minas que rodean la. casilla que ha sido destapada. En la figura
M.l las casillas con el símbolo".." indican que el número de minas que las rodean son cero. P
número de minas que pueden rodear una casilla. pueden ir desde O hasta 8.
El juego dispondrá. de un cronómetro que actualizará en pantalla. cada segundo el tiempo trans-
currido desde el comienzo de la última partida en juego. Si el jugador consigue descubrir toda:,
las minas, el programa registrará el tiempo invertido junto con el texto que desee poner el j u-
gador y actualizará la lista de los mejores tiempos registrados en el nivel correspondiente.
Minas
T~blero
Casilla
El diagrama de estructura del sisLema utiliza un módulo para cada una de estas abstracciones, ;,, ...
se muestra en la figura .M.2. El módulo principal encargado del control del juego es Minas. que ul
y coordina al resLo de módulos. El dato encapsulado Tablero utiliza el tipo abstracto de dato Ca.s
Además, en la figura se muestra.u varios módulos encargados de adaptar los módulos de librería
los distintos compilador¡,s a las necesidades de este sistema. Estos módulos son:
STElHPLOS DE DISEÑOS 213
5. DESCRIPCIÓI\ DE COMPONEKTES
A continuación se describen cada uno de los módulo::. indicados en el diagrama de estructura del
sistema.
l!jugada
cambio de dificultad o
fin de juego sin mejor resultado Nueva Jugada
dificultad
mejor resultado
Operación: Parar
Proceso:
Devolver segundos
Poner segundos a ce ro
Operación: Actualizar
Proceso:
Leer reloj del computador
Si Tiempo transcurrido - l segundo ENTONCES
Incrementar segundos
Actualizar segundos en pantalla
F IN-SI
5.4.1 O. Datos
Los atributos del cronómetro son los siguientes:
Segundos
5.5. Módulo: AYUDA
5.5.1. Tipo: Abstracción funcional (procedimiento)
5.5.2. Objetivo Este módulo es el encargado de proporcionar la información de ayuda a.l jugador.
5.5.3. Función La función de este módulo es presentar en pantalla la información de ayuda al
jugador.
5.5.4. Subordinados: Pantalla
5.5.5. Dependencias: Minas
5.5.6. Intetfases
Operación: Presentar ayuda
Entrada:
Salida:
Presenta en pantalla texto de ayuda
5.5.7. Recursos: Ninguno
5.5.8. Referencias: Ninguna
5.5.9. Proceso
Operación: Presentar ayuda
Proceso:
Presentar en pantalla el texto de ayuda
5.5.10. Datos
Texto a presentar, codificado en la. propia función.
5.6. Módulo: RESULTADOS
5.6.1. Tipo: Dato encapsulado
5.6.2. Objetivo
Este módulo es el encargado de gestionar la tabla de los mejores resultados obtenidos por
los distintos jugadores.
5.6.3. Función
Las operaciones sobre la tabla de resultados son las siguientes:
• Borrar resultados de un nivel de dificultad
• Comprobar si hay mejor resultado en un nivel de dificultad
• Grabar resultado en un nivel de dificultad
• Presentar mejores resultados de un nivel de dificultad
5.6.4. Subordinados: Pantalla, Fichero
5.6.5. Dependencias: Minas
5.6.6. intetfases: Por cada. operación:
Operación: Borrar
Entrada: Nivel de dificultad
Salida:
Operación: Comprobar
Entrada: Nivel de dificultad, Segundos
Salida: SJ/)10 mejor resultado, posición ocupada
Operación: Grabar
Entrada: Texto a. grabar, posicion ocupada.
Salida:
Operación: Pre.5enta.r
Entrada: Nivel de dificultad
Salida.: Presentación en pantalla de mejores resultados del nivel
5.6.7. Recursos:
Un fichero en disco para almacenar 1;1 tabla de resuJLados.
218 TÉCNICAS GE:YERALES DE DISEJVO DE SOFT,VARE
5.8.2. Objetivo Este módulo es el encargado de proporcionar tocias las operaciones necesarias
para el manejo del tecla.do e independizar al resto del sistema de un compilador o sistema
operativo concretos.
5.8.3. Función
Este módulo encapsula todas las operaciones que se pueden necesitar del tecla.do. Las
operaciones previstas son las siguientes:
• Leer tecla con espera
■ Leer tecla sin espera
■ Leer ristra con espera
5.8.4. Subordinados: Ylódulos predefinidos del compilador
5.8.5. Dependencias: Minas
5.8.6. Interfases: Por cada operación: Operación: Leer tecla con espera Entrada: Salida: Carácter
ASCII de la tecla pulsada Operación: Leer tecla sin espera Entrada: Carácter ASCII testigo
Salida: Carácter ASCII testigo o de la tecla pulsada Operación: Leer ristra con espera
Entrada: Salida: Ristra leida
5.9. Módulo: RELOJ
5.9.1. Tipo: Dato encapsulado
5.9.2. Objetivo Este módulo es el encargado de proporcionar todas las operaciones necesarias
para el manejo del reloj e independizar al resto del sistema de un compilador o sistema
operativo concretos.
5.9.3. Función Este módulo encapsula la operación de lectura de reloj siguiente:
■ Leer segundos
5.9.4. Subordinados: Módulos predefinidos del compilador
5.9.5. Dependencias: Crono
5.9.6. Interfases: Por cada operación: Operación: Leer segundos Entrada: Salida: Segundos leídos
en el reloj del computador
5.10. :Módulo: AZAR
5.10.1. Tipo: Dato encapsulado
5.10.2. Objetivo Este módulo es el encargado de proporcionar todas las operaciones necesarias
para generar números aleatorios e independizar al resto del sistema de un compilador o
sistema operativo concretos.
5.10.3. Función Este módulo encapsula las operaciones para generar números aleatorios siguientes:
■ Iniciar semilla
■ Obtener un nuevo número
5.10.4. Subordinados: Módulos predefinidos del compilador
5.10.5. Dependencias: Tablero
5.10.6. interfases: Por cada operación:
Operación: Iniciar semilla
Entrada:
Salida:
Operación: Obtener un nuevo número
Entrada: Rango de validez del número
Salida: ~uevo número
5.10.7. Datos
El atributo es el siguiente:
■ ~úmero anterior
5.11. Módulo: FICHERO
5,U.l. Tipo: Tipo abstracto de datos
5.11.2. Objetivo Este módulo es el encargado de proporcionar todas las operaciones necesarias
para el manejo de ficheros e independizar al resto del sistema de un compilador o sistema
operativo concretos.
tir del ,.A,.11.3. Función
Este módulo encapsula todas las operaciones que ~ pueden necesitar para el manejo de
ficheros. Las operaciones previstas :;on lai, sigui<'ntes:
• Abrir
• Cerrar
■ Leer tabla de resultados
■ Escribir tabla de resultados
220 TÉCNIC.45 GESERA.LES DE DISENO DE S OFTWARE EJE1
El programa puede ejecutarse en una máquina tipo PC de gama baja. La configuración mínima esti-
mada es:
■ Procesador: 80486
■ ~1emoria RA:\.f: 512 Kb
• Pantalla: :\lodo texto de 25 x 80 caracteres, rooI1ocromo o color
Se recoge en la figura M.4. En ella se pueden observar requisitos no ligados a ningún componente.
Son de dos clases.
Los marcados con asterisco (*) son requisitos que no se cumplen. Los demás son requisitos no fun-
cionales que se satisfacen con otros elementos del sistema distintos de los módulos establecidos en e
diseño.
'JE>.IPLOS DE DISEl'~·OS 221
MÓDULOS
1/l
o
o
oa:
1/l
e( w
_,
oz e(
o ~
::,
5
_,
z eo oa: ::, 1/l ¡;:¡
REQU ISITOS ~ ...
e(
u ~
w
o::
e(
u
R.1.1 X X X X X X
R.1.1.1 X
R.1.1.2 X X X
R.1.1.3 X
R.1.1.4 X X
R.1.1.5 X
R.1.1.6 X
R.1.1.7 X
R.1.1.8 X
R.1.1.9 X
R.1.1.10 X X
R.1.2 X X
R.1.3 X
R.1.4 X X
R.1.5 X
R.1.6 X
R.1.7 X
R.1.8 X
* R.1.9
R.1.10 X X
R.2.1 X
R.2.2 X
R.2.3 X
R.3.1
R.4.1 X
R.4.2 X
R.4.3 X
R.4.4 X
R.4.5 X
R.5.1
* R.6.1
R.8.1 X
* R.9.1
l. l.'lTRODUCCIÓK
l. l. Objetivo
El objetivo del sistema es facilitar la gestión de una bibliotE'ra mediana o pequeña, en lo r<'ft•re
te a la atención directa a los usuarios. Esto incluye, fundamentalmente. el préstamo de libr
a._-,¡ como la consulta bibliográfica
1.2. Ambito El sistema a. desarrollar consistirá en un único programa que realizará t.odas las funno1
nece:sarias. En particular, deberá facilitar las siguientes:
• Gestión del préstamo y de,olución d«> libro:,
■ Consulta bibliográfka por tit.ulo, autor o materia
Fl sistema no ha de soportar, sin t>mba.rgo. la gE'stión económica de la biblioteca, ni el com
cfp adquisición de libro:,, ui otra-; funciones no relacionadas directamente con la atención a
usuarios
Fl s1Stema facilitará la at<'nción al públiro por pant> de un único bibliotecario, que podrá at
clcr a todas las funciones.
1.4. Referencias
BIBLlO-SRD-99: DOCt;'-tENTO DE REQUISITOS DEL SOFTWARE d•I SISTEMA DE CESTIÓ~ DB BIBLIO-
TECA.
Función 3.3 Lista de moro80s: lista todos los préstamos no devueltos en el pla.z
fijado
Función 3.4 Préstamo:. de lector: lista los libros que tiene en préstamo un lecto= 4
dado
2.2.4. Búsquedas
Estas funciones permiten localizar libros por autor, título o materia. Las funciones de bú:-
queda son las siguientes:
Función 4.1 Buscar par autor: localiza los libros de un autor dado
Función 1.2 Buscar por título: localiza los libros cuyo título contiene un lt>xt
dado
Función 1.3 Buscar por materia: localiza los libro:; que tratan de una ma1eni.
dada
LECTOR
LIBRO
MATERIA
AUTOR
• Número de referencia
• Título
• Autor(c:.¡
• Colección
• Editorial
• ~lateria(s)
E:JElvIPLOS DE DISEÑOS 225
La Ficha de Lector es una. visión externa que incluye los datos de un lector alma.cena.dos en
la tabla LECTORES, para ;;er presenta.da en pantalla o impresa corno ficha o como líneas de
detalle en un lista.do.
E]
Figura B2: Arquitectura del sistema
El módulo BaseDatos está realizado ñsi camente por el SGBD comercia.! que se utiliza.
5. DESCRIPCIÓN DE COMPONENTES
5.1.2. Objetivo: Este módulo contiene la base de datos relacional que a.lma.cena la. información
persistente del sistema.
5.1.3. Función Alma.cenar los da.tos que se indican.
5.1.4. Subordina.dos: Ninguno
■ Tabla: LECTORES
Campo Tipo Long. Indice Descripción
• Tabla: MATERIAS
Campo Tipo Long. Indice Descripción
NumRef Kum 3 Sí ::'llúmero de referencia de la materia
nombre Texto 20 l\o Nombre de la materia
(término o palabra clave que la identi-
fica)
• Tabla: AUTORES
Campo Tipo Long. Indice Descripción
• Tabla: AUTOR DE
Campo Tipo Long. Indice Descripción
Libro Num 4 Sí Número de referencia del libro
Autor Kum 4 No ::'llúmero de referencia. del autor
• Tabla: TRATA-DE
Campo Tipo Long. Indice Descripción
Libro ::'llum 4 Sí l\úmero de referencia del libro
Materia Num 3 :-lo :Número de referencia de la. materia
5.1.7. Recursos: :Ninguno
5.1.8. Referencias: Ninguna
5.1.9. Proceso: ~inguno
5.1.10. Datos (ver Interfases)
5.2. :vlódulo: BIBLIO
5.2.9. Proceso
Iniciar la sesión
REPETIR - Presentar menú principal
Elegir opción
CASO opción DE
Gestión de libros:
Presentar menú de gestión de libros
Elegir opción
CASO opción DE
Alta de libro: Realizar alta
Baja de libro: Realizar baja
FIN-CASO
Gestión de lectores:
· óéstión de préstamos: Búsquedas:
FIN-·c.ÁSO
HASTA fin de sesión
Terminar la sesión
5.2.10. Datos (ver BASEDAT0S)
5.3. Módulo: GESTIONLIBROS
5.3.1. Tipo: Abstracción funcional (colección de funciones)
5.3.2. Objetivo: Realizar las funciones de mantenimiento del registro de libros disponibles en la
biblioteca..
5.3.3. Función: Las funciones realizadas por este módulo son las siguientes:
Función ALTALIBRO: registra un nuevo libro
Entrada:
Salida:
Usa: 11ATERIAS
Actualiza: LIBROS, AUTORES, AUTOR-DE, TRATA-DE
Efecto:Compone una nueva fi eha d e libro asignan . d o có d.1go automáticamente
. y
leyendo los datos del libro por pantalla (las materias se seleccionarán de
entre la lista de materias registradas). Registra la ficha en el fichero de
libros, y además la imprime.
Excepciones:
Proceso: . . d fi . al .b
- As1gnar numero e re erenc1a nuevo 1I ro
- Editar la ficha del libro mediante un formulario en pantalla
- El autor o autores se seleccionan de la lista de autores, añadiendo
nuevos nombres o editando los existentes, si es necesario
- La materia o materias se seleccionan de la lista de materias, pero no se
pueden añadir o modificar las materias existentes
- Pedir confirmación
- SI se confirma ENTONCES
- Regisf,rar la ficha del libro en las tablas de LIBROS,
AUTOR-DE y TRATA-DE
- Imprimir la ficha del libro SI-~O
- Anular la asignación de nuevo número de referencia y las
modificaciones en las tablas
FIN-Sl
Función BAJALIBRO: marca un libro como dado de baja
Entrada:
Salida:
Usa: AUTORES, ~ifATERIAS, Al:TOR-DE, TRATA-DE
Actualiza: LIBROS
Efecto:Lee el código del libro por pantalla, y marca la. ficha de ese libro
en el fichero de libros como dada de baja.
Excepciones: Si no existe el libro con el código indicado, o ya estaba dado de
baja, da un aviso.
Proceso:
- Lee el número del libro por pantalla
- Busca el libro en la tabla LIBROS
- SI el libro no existe ENTO:'lCES
- Da mensaje de que no exist.l'
SI-KO
- Presenta la ficha del libro C'n pantalla.
- Pide confirmación de la baja - SI se confirma
E:'lTONCES
- Marca el libro corno borrado en la. tabla LIBROS
FTJ\-SI
FIK-ST
228 TÉCNICA. S GE.\'ER.,\LES DE DISEÑO DE SOFTWARE
Esta aplicación puede ejecutarse ea una máquina tipo PC de gama baja. Los recursos mínimos esl.i-
mados son los siguientes:
• Procesador: 80486
TÉCiYIC...\S GESERA.LES DE DISEÑO DE SOFT"~E C0,'\1
230
• Disco duro:
4 Mb para. el SGBD
l Mb para los programas de la aplicación
4 :\lb para los datos de la. aplicación (10.000 libros y 10.000 lectores)
MÓDULOS
"'
...o
"'...CII
...ou ... ....."'"'
o
E
..
"'
o .&J
:::;
e:
CII
....J
e:
CII
Q.
e:
.."'
~
CII
e _g o o o :,
REQUISITOS .."'
CII
CD
:¡;
iii
.:;
"'
CII
l.:>
t;
CII
l.:>
t:
CII
1:)
a
"'
:,
Cl0
R.1.1 X
R.1.2 X
F.1.1 X
F.1.2 X
F.1.3 X
F.1.4 X
F.1.5 X
F.1.6 X
F.1.7 X
F.2.1 X
R.2.1 X
R.2.2
R.2.3
R.2.4
R.4.1 X
R.4.1.1 X
R.4.2 X
* R.4.3
* R.4.4
R.4.5
R.4.6
R.4.7 X X X X
R.4.8 X
R.5.1
R.6.1 X
R.7.1
R.8.1
* R.8.2
• R.9.1
R.9.2 X
R.10.1
5.12. Conclusiones
En este capítulo se hace un repaso a las técnicas más importantes de diseño que
se emplean habitualmente:
• Técnicas por refinamiento progresivo
232 TÉCNlC.-lS GESERA.LES DE DISENO DE SOFTU'.ARL
Ql
6
,
Capítulo 6
6 .1. Introducción
6.2. Objetivos
233
234 UAIL, LENGC-AJE UNIFICADO DE .MODELADO 01
El lenguaje unificado de modelado (U:ML, por sus siglas en inglés, lJnified 11[ode-
ling Language) es el lenguaje de modelado de sistemas de software más conocido y
ex
utilizado en la actualidad. Es un lenguaje gráfico para visualizar, especificar, cons-
truir y documentar un sistema. ül\!IL ofrece un estándar para describir un ''plano" de
ba
del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de ne-
gocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de
Ja
m,
programación, esquemas de bases de datos y compuestos reciclados.
de-
o ,. La notación "Cl\1L deriva y unifica las tres metodologías de análisis y diseño más
1ns- extendidas: metodología de Grady Booch [Booch94] para la descripción de conjuntos
no de objetos y sus relaciones, técnica de modelado orientada a objetos de James Rum-
ne- baugh (Olv1T: Object - ~odelling Technique)[Rumbaugh91] y aproximación de lvar
. de Jacobson (OOSE: Object- Oriented Software Engineering)[Jacobson92] mediante la
metodología de casos de uso (use case).
car El desarrollo de UML comenzó a finales de 1994 cuando Grady Boocb y Jim
llar Rumbaugh de Rational Software Corporation empezaron a unificar sus métodos. A
se finales de 1995, Ivar Jacobson y su compañía Objectory se incorporaron a Rational
en su unificación, aportando el método OOSE.
dar
De las tres metodologías de partida, las de Booch y Rumbaugh pueden ser des-
:to--
critas como centradas en objetos, ya que sus aproximaciones se enfocan hacia el
modelado de los objetos que componen el sistema, su relación y colaboración. Por
otro lado, la metodología de Jacobson es más centrada a usuario, ya que todo en su
ica
método se deriva de los escenarios de uso. CML se ha ido fomentando y aceptando
lad
como estándar desde el Object l\lianagement Group (0~1G).
da.
ión
eso Diversas organizaciones y empresas colaboraron en la elaboración de la primera
versión del lenguaje. Entre ellas Digital Equipment Corporation, Hewlett-Packard,
1-Logix, lntellicorp, IBl\1, ICON Computing, l\lICI Systemhouse, l\!Iicrosoft, Oracle,
;ar. Rational, Texas Instruments y Unisys.
ler.
ns-
En 1997 UML 1.1 fue aprobada por la OJVIG convirtiéndose en la notación es-
tándar de facto para el análisis y el diseño orientado a objetos. Como prueba de
su validez como lenguaje de modelado; U:ML es el primer método en publicar un
di- meta-modelo en su propia notación, incluyendo la notación para la mayoría de la
tos
información de requisitos, análisis y diseño. Se trata pues de un meta-modelo auto-
ex-
referencial (cualquier lenguaje de modelado de propósito general debería ser capaz
de modelarse a sí mismo).
ar Desde el año 2005, Ul\11L es un estándar aprobado por la ISO corno ISO /IEC
19501:2005 Information technology, Open Distributed Processing Cnified l\!Iodeling
los Language (U1v1L). Con el paso de los años el lenguaje ha ido evolucionando, incorpo-
mo rando nuevas funcionalidades para conseguir una mayor unificación integrando todas
las posibles tecnologías de desarrollo de software. La versión más actual es la 2.5.
236 UA1L, LESGC.:.4.JE UNIFICADO DE MODELADO
■ Cubrir las cuestiones relacionadas con el tamaño inherentes a los sistemas com-
plejos y críticos.
■ Crear un lenguaje de modelado utilizable tanto por las personas como por 1~
máquinas.
:vlediante el fomento del uso de UlVIL, 01\/IG pretende alcanzar los siguiente::
objetivos:
• Defensa/industria aerospacial
• Comercio
• Electrónica médica
• Ambito científico
■ Servicios distribuidos en la vVeb
)m-
6.6. Estructura de U ML
Los conceptos y modelos de Gl\iIL pueden agruparse en las siguientes áreas con-
ceptuales:
1. Estructura estática:
tili- Cualquier modelo preciso debe primero definir su universo, esto es, los concep-
tos clave de la aplicación, sus propiedades internas, y las relaciones entre cada
una de ellas. Este conjunto de construcciones es la estructura estática.
ón. Los conceptos de la aplicación son modelados como clases, cada una de las cua-
les describe un conjunto de objetos que almacenan información y se comunican
para implementar un comportamiento.
3. Construcciones de implementación:
Los modelos m ,11 tienen significado para el análisis lógico y para la implemen-
tación física. Un componente es una parte física reemplazable de un sistema y
es capaz de responder a las peticiones descritas por un conjunto de interfaces.
Un nodo es un recurso computacional que define una localización durante la
ejecución de un sistema. Puede cont ener componentes y objetos.
4. Mecanismos de extensión:
UML tiene una limitada capacidad de extensión pero que es suficiente para
la mayoría de las extensiones que requiere el día a día sin la necesidad de un
cambio en el lenguaje básico.
La información del modelo debe ser dividida en piezas coherentes, para que lo:,
equipos puedan trabajar en las diferentes partes de forma concurrente. El cono-
cimiento humano requiere que se organice el contenido del modelo en paquetes
de tamaño modesto. Los paquetes son unidades organizativas, jerárquicas y de
propósito general de los modelos de -CJVIL. Pueden usarse para almacenamiento.
control de acceso, gestión de la configuración y construcción de bibliotecas que
contengan fragmentos de código reutilizable.
6. Elementos de anotación:
Los elementos de anotación son las partes explicativas de los modelos Ul'vIL. Sor.
comentarios que se pueden aplicar para describir, clasificar y hacer observacio-
nes sobre cualquier elemento de un modelo. El tipo principal de anotación es la
not a que simplemente es un símbolo pai·a mostrar restricciones y comentarios
junto a u n elemento o un conjunto de element os.
ESTRUCTURA DE Ul\rIL 239
7. Relaciones:
Existen séis tipos de relaciones entre los elementos de un modelo Ul\/IL. Depen-
dencia, asociación, generalización, realización, agregación y composición estas
se describen a continuación.
■ Dependencia
aaseA Clase B
•l
Impresora 000.lmento
·)
-texto:stmg
tmprimir +getTexto():string
(documento:Oocumento)
■ Asociación
Multiplicidad Significado
1 uno y sólo uno
0 .. 1 cero o uno
N .. M desde ~ hasta M
* cero o varios
o.. * cero o varios
l..* uno o varios
(almenos uno
,____Clase_A_----11----------->ijl---Clase-B----I
Taxi O.Oler
1 1 ..•
-choffer:Chofer 1
-nombre:Stnng
•matricula:Matricula
1
+prlntChofe,(~Stnng ' +getNombre(~
+printMatriwla{}:string
1 Matric:ula
-numero: Slnlg
+getNumero(}:String
tipo ■ Generalización
lase
dos Es una relación de especialización / generalización en la cual los objetos
.r la del elemento especializado (el hijo) pueden sustituir a los objetos del ele-
ima mento general (el padre). De esta forma, el hijo comparte la estructura y el
den comportamiento del padre. Gráficamente, la generalización se representa
con una línea con punta de flecha vacía.
)Stá
sita
mla
due8
Moto
• Realización
<<interface»
Clase B
ClaseA
r<l
<<intefface>>
Viaje
Registrable
+Crearnuevo Vlaje():void
k}
• Agregación
aa.es
r
Clase.A
spe-
1
der.
as~
r
Agenda Contacto
cio-
rltre
1
una
■ Composición
Tenemos una clase Silla. un objeto Silla está a su vez compuesto por cuatro
objetos del tipo Pata. El tiempo de vida de los objetos Pata depende del
tiempo de vida de Silla, ya que si no existe una Silla no pueden existir sus
Patas.
ClaseA ciases
-
-
Silli Pata
lad
.Se
tay
de
I· 1
IBe
Figura 6. 7: Relación de composición
244 UlvlL, LEi\-GUAJE UNIFICA.DO DE 1WODEL.4DO
8. Diagramas
Es importante resaltar que los diagramas de casos de uso no están pensados para
representar el diseño y no puede describir los elementos internos de un sistema. Lo::,
diagramas de casos de uso sirven para facilitar la comunicación con los futuros usua-
rios del sistema, y con el cliente, y resultan especialmente útiles para determinar las
características necesarias que tendrá el sistema. En otras palabras, los diagramas de
casos de uso describen qué es lo que debe hacer el sistema, pero no cómo.
Actor
"Cn actor es una entidad externa (de fuera del sistema) que interacciona con el
sistema participando (y normalmente iniciando) en un caso de uso. Los actores pue-
den ser gente real (por ejemplo, usuarios del sistema), otros sistemas o eventos.
Los actores no representan a personas físicas o a sistemas, sino su rol. Esto significa
que cuando una persona interactúa con el sistema de diferentes maneras (asumiendo
diferentes papeles) , estará representado por varios actores. Por ejemplo, una perso-
na que proporciona servicios de atención telefónica a clientes y realiza pedidos para
los clientes est.aría representada por un actor "equipo de soporte" y por otro actor
'·representante de ventas".
DIAGRAA1AS UNIL 245
C aso de uso
Un caso de uso describe, desde el punto de vista de los actores, un grupo de ac-
tividades de un sistema que produce un resultado concreto y tangible.
Los casos de uso son descriptores de las interacciones típicas entre los usuarios
de un sistema y ese mismo sistema. Representan el interfaz externo del sistema y
¡ra-
especifican qué requisitos de funcionamiento debe tener éste ( únicamente el qué,
nunca el cómo).
Cuando se trabaja con casos de uso, es importante tener presentes algunas senci-
llas reglas:
• Cada caso de uso está relacionado como mínimo con un actor.
■ Cada caso de uso es un iniciador (es decir, un actor).
■ Cada caso de uso lleva a un resultado relevante (un resultado con "valor intrín-
seco")
ma
de-
ISO.
ara
C,os
ua- Actor
las
de
Figura 6.8: Actor y caso de uso
Cajero automático
co
dE
6.
Cliente con tarjeta Empleado del banco
y
gi
CC
c1
ir
-----~
Caje<o Automático
t
<<extend> ,,•
......·
~ o
<<ft"Jude>
A
Efflpleadode.Jbanco
OientecontWJe"la
Las descripciones de casos de uso son reseñas textuales del caso de uso. Kormal-
mente tienen el formato de una nota o un documento relacionado de alguna manera
con el caso de uso, y explica los procesos o actividades que tienen lugar en el caso
de uso.
Clase
Una clase define los atributos y los métodos de una serie de objetos. Todos los
objetos de esta clase (instancias de esa clase) tienen el mismo comportamiento y
el mismo conjunto de atributos (cada objeto tiene el suyo propio). En ocasiones se
utiliza el término tipo en lugar de clase, pero recuerde que no son lo mismo, y que
el término tipo tiene un significado más general.
■ Atributos
■ Operaciones
Las operaciones (métodos) también se muestran al menos con su nombre, y
pueden mostrar sus parámetros y valores de retorno. Las operaciones, al igual
que los atributos, aparecen calificados en el diagrama dependiendo de su acceso
como::
Las clases pueden tener plantillas o templates, un valor usado para una clase
no especificada o un tipo. El tipo de plantilla se especifica cuando se inicia una
clase (es decir cuando se crea un objeto).
Asociaciones de clases
Las clases se puede relacionar, (estar asociadas), con otras de las siguientes posi-
bles formas:
■ Generalización
• Asociación
■ Realización
■ Agregación
■ Composición
Los diagramas de clases pueden contener más componentes aparte de clases. Estos
pueden ser:
■ Interfaces
Las interfaces son clases abstractas, esto es, instancias que no pueden ser creadas
directamente a partir de ellas. Pueden contener operaciones, pero no atributos.
Las clases pueden heredarse de las interfaces pudiendo así realizarse instancias
a partir de estos diagramas.
DIAGRA.i\íAS U!v1L
■ Tipo de datos
■ Enumeraciones
Las enumeraciones son simples listas de valores. Un ejemplo típico de esto sería
una enun1eración de los días de la semana. Al igual que los tipos de datos, no
pueden relacionarse con las clases, pero las clases sí pueden hacerlo con ellos.
■ Paquetes
listacliemes
E'! Em resa
Attnbutu
- nombre : String
- d,recc,on : String
es na
§ Helado
Art.ribc,,te-.s
- sabor : Suing
- precio : String
1 • - codigo : Stnng
§:!Persona 0-s
A ttribul' ~s
- nombre : Smng § Compra
- ~ula : String Antiburn uene
- cantidad : String
1
- totalcompra : String
Optn1io.ns
1 a • Aplicacion 1
~v-•_ve_n_ta_n_ª~I ~l_b_:_B-□t_□_n~
... Draw()
''
' DraW() ''
'
-' Paint()
,~
,;' 1
.,
-'
'''
''
- ''
,
Los mensajes pueden ser o bien síncronos, el tipo normal de llamada del mensaje
DO DI.4..GRA.l\L4..S U~1L 251
donde se pasa el control a objeto llamado hasta que el método finalize, o asíncro-
nos donde se dev71elve el control directa.mente al objeto que realiza la llamada. Los
. ec
mensajes síncronos tienen una caja vertical en un lateral del objeto invocante que
nas
1~
muestra el flujo del control del programa.
~se
ey
en-
ttal
'"•adOI"
1 · Mu.-.e pieza □ □□
1
1
1.1 mu- pieza
1
1
1
- 1
1
1
1
1
t
l ,.I'r.í1 ¿Esvalido?
1
1
i el 1 1.2· Refr•sc.ar pantalla 1
1
IJ .....
1
1
1 2· Que mueva el ordenado~ 1
los i
1
)re 1 1.2 1 Mahzar tablero
En las figuras 6.14 y 6.15 pueden verse los diagrams de secuencia y el respectivo
de colaboración del caso de uso de alta de un préstamo en una biblioteca.
'
1 , : &11:uentra
'
1
•: !ncuentn: en l
~
1: Encuentra Titulo()
3: Encuentra Artócuio()
5: !dentidad Presta!(}
:Bíblictecario
~
6: Enroentra(S~
Los diagramas de estado ven a los objetos como máquinas de estado o autómatas
finitos que pueden estar en un conjunto de estados finitos y que pueden cambiar su
estado a través de un estímulo perteneciente a un conjunto finito. Todos los objetos
tienen un estado pero no todos los objetos son susceptibles de generar un diagrama
de estados. Sólo aquellos que que presenten "estados interesantes", es decir tres o más
estados, deberán ser modelados en su diagrama de estados.
■ Transición entre estados: dibujado con una línea terminada con punta de flecha
abierta
Hay dos tipos especiales de estados: inicio y fin. Son especiales en el sentido de
que no hay ningún evento que pueda devolver a un objeto a su estado de inicio: y de
la misma forma no hay ningún evento que pueda sacar a un objeto de su estado de
fin.
En las figura 6.16 puede verse el diagrama de transición de estados de un teléfono.
254 Ul\JL, LESGUAJE UNIFICADO DE MODELADO
Estado
lnieiaJ ( Hab,ando )1------)@
colgar f
co'9llr y
descolgar/
Tono
Uamando
colgar y
descot9ar /
marcar/
Espet"ondo
ocupado/
~ Estado
Í..__F_in_a_1_ .....
En las figura 6.17 puede verse el diagrama de transición de estados del acceso con
tarjeta con dos puntos de bifurcación.
Arranque del
sistema
Esperar
tarjeta
Esperar
dave
[no)
¿clave
Correcta?
Permitir
acceso
Actividad
Una actividad es un único paso de un proceso. Una actividad es un estado del sis-
tema que t iene actividad interna y, al menos , una transición saliente. Las actividades
también pueden tener más de una transición saliente, si tienen diferentes condiciones.
~on
Las actividades pueden formar jerarquías, lo que significa que una actividad pue-
de estar formada de varias actividades "de detalle", en cuyo caso las transiciones
entrantes y salientes deberían coincidir con las del diagrama de detalle.
Los diagramas de actividad son indicados para modelar procesos de alto nivel.
Son indicados para modelizar el proceso de negocio de una compañía. Su complejidad
técnica es menor y son más fáciles de entender por quien no tiene muchos conoci-
mientos técnicos de computación.
Los elementos para definir un diagrama de actividades son similares a los usados
en los diagramas de secuencia. Círculo relleno de inicio: rectángulos con los bordes
redondeados para determinar las actividades, flechas conectoras para unir las ac-
tividades, puntos de decisión con círculo huecos. Cómo elemento distinto aparecen
las líneas divisorias o calles para establecer las responsabilidades entre los distintos
objetos del sistema.
Realizar
Pedido
Tomar
Ped ido
Preparar
Pago
Pedido
Distribuir
Pedido
Recoger
Ped ido
6. 7. 7. Diagramas de componentes
Los diagramas de componentes muestran los componentes del software (ya sea
las tecnologías que lo forman como Kparts, componentes CORBA, Java Beans
simplemente secciones del sistema claramente distintas) y los artilugios de que est ...
compuesto como los archivos de código fuente, las librerías o las tablas de una base
de datos.
Los componentes pueden tener interfaces (es decir clases abstractas con operacio-
nes) que permiten asociaciones entre componentes.
Los Diagramas de Componentes ilustran las piezas del software, controladore:,
embebidos, etc. que conformarán un sistema. Un diagrama de Componentes tiene ur:
nivel más alto de abstracción que un diagrama de clase. Usualménte un componem
se implementa por una o más clases (u objetos) en tiempo de ejecución. Estos so&
bloques de construcción, como eventualmente un componente puede comprender nna
gran porción de un sistema.
DIAGRAMAS Ui\iL 257
Product
Ordec Cus.tomer
Payment
,_
,_
Account:Oetsíl-s
Aeco:unf
}-
W ~ J ..,..._ _
·•.
··k,~.
r ª''""*
- · · -· · .. . . . ,. i-~ -·~:-~
~--,... ·- . . . ;;;__ ¡
=-Cllll.
db1.,,,,.....- , 082 6111_,._ : --1
6.8. Conclusiones
En este capítulo se ha presentado el lenguaje UML, sus orígenes, sus objetivo,
y sus principales elementos para la especificación y diseño de sistemas softwar<'. E
reco1Tido realizado facili ta al lector unos conocimientos mínimos que le permitru
aplicar E'Sta notación para las tareas de especificación y diseño que se han abordad
en los capítulos anteriores.
'05
El
an
do
Capítulo 7
7. 1. Introducción
La fase codificación constituye el núcleo central de cualquiera de los modelos de
desarrollo de software: ciclo de vida, uso de prototipos, modelo en espiral. Gna vez
especificado y diseñado, de forma parcial o total, un determinado programa llega el
momento de construir el código, es decir de prograJnar. Hasta el década de los 70,
en el desarrollo de software prácticamente todo el trabajo se centraba en la fase de
codificación. Actualmente, también sucede lo mismo al desarrollar pequeños sistemas
que son realizados enteramente por una única persona en un plazo de tiempo muy
breve. Simplificando, se puede decir que las etapas previas de análisis y diseño tienen
como misión fundamental la de organizar y traducir los requisi tos del cliente en
•unidades o módulos de programa que puedan ser codificados de forma independient e
y sencilla. La importancia de la fase de codificación dentro del desarrollo de software
es evidente si se tiene en cuenta que en ella se elabora el producto fundamental de
todo el desarrollo: los programas fuente.
7.2. Objetivos
Codificar es el proceso de expresar un programa de computadora en un lenguaje
de programación. Sin embargo construir un programa no es sólo codificar, también
implica las tareas de verificación, depuración y pruebas de ese programa. En este ca-
pítulo nos centraremos en estudiar únicamente la tarea de codificación. Los objetivos
específicos son los siguientes:
261
262 L.4 CODIFICACIÓN DEL SOFTWARE
• Estudiar los recursos de programación que nos ofrecen los leguajcs y las técnicru,
de implementación a las que dan lugar.
• Repasar algunos de los criterios habitualmente utilizados para elegir un deter-
minado lenguaje de programación.
aplicación. (
é
• Lenguajes "script" o también llamados macros o ficheros por lotes (·'batch").
j
• Lenguajes de programación propiamente dichos, que nos permiten construir un- I
aplicación completa y son muy flexibles. Nos centraremos en este apartado ec
ellos. (
se puede ignorar en parte la organización interna <le la memoria del computador µar a
pasar a. trabajar con variables simbólicas rlf' distintos tamaños y estructurac., ( vecto-
res o matricf's) según las necesidades de cada programa. Además se dispone de la.'-
primcras estructuras de control para la definición <le bucles genéricos o la selección
entrf' \·arios caminos alternativos de ejecución, etC'. Todo esto l1izo que estos leuguajc>:-
alcanzaran inmediatamente una amplia difusión y que se utilizaran de forma masi,·a.
TodaYía hoy se utilizan estos nlisrnos lenguajes o alguno de sus descendientes direc-
tos de la tercera generación. Algunos de los lenguajes más representativos de f'sta
generación son FORTRAK, COBOL, ALGOL y BASIC.
• FORTRAN (FOfunula TRANslator): 7
Es un lenguaje que fue pensado para programar fundamentalmente aplicacioue--
científicas o técnicas en las que tiene una gran importancia el cálculo nun1éri-
n
co. Con el paso de los afios se han sucedido diversas versiones: FORTRAN-!\.
FORTRAX-66, FORTRAK-77, FORTRAN-90 quf' han ido corrigiendo df'fi-.
n
ciencias anteriores y se han adaptado a las nuevas propuestas rnetodológica.--
d
incorporadas por otros lenguajes. Desde el punto de vista metodológico, un,.
p
deficiencia importante que todavía conserva FORTRAN es el manejo casi di-
H
recto de la memoria mediante la sentencia CO~IlVIOI\".
A pesar de su origf'n científico, FORTRAK se ha utilizado y se continúa uti- p
lizando en el desarrollo de una amplia rama de aplicaciones de todo tipo que lE
incluyen la realización de sistemas df' gestión de bases de datos, sistema::, en
tiempo real, etc. v,
• COBOL (Cümmon Business-Orientf'd Lenguage): d
Es el lengua.je con el que están escritos casi todos los sistemas para el procf'Sa-
miento de información ( contabilidad, nominas; facturación, control de almact i .
etc). Hay que tener en cuenta que este tipo <le sistemas supone más del 70
de todo el software que se desarrolla. Aunque actualmente se continúa utiliza.1-
do COBOL pa1·a estos desarrollos, los lenguajes df' la cuarta gf'nf'ración f'sta::.,
consiguiendo despla:,,arlo pa.ulatinament,e.
■ ALGOL:
Se considera el precursor de muchos de los lenguajes de la tercera generació1.
espf'cialmente de Pascal y todos sus descendientes, tales como ;\fodula.-2 y AcL
Se puede decir que es el primer lenguaje que da una gran importancia a la t1:-
ficación de datos. También en este caso existen divf'rsa.c., versiones: ALGOL6 l
ALGOL-68, aunque su difusión a nivf'I industrial o comercial no ha sido ax:_
importante como t->n el e-aso de FORTRAX.
• BASIC:
Fue pt->nsado para la enseñanza de la programación y f'S <lf' destacar su sencill
y facilidad de aprendizaje, Gracias a los escasos recursos que necesitaba
:.OS LENGUA.JES DE PROGRA.AIACIÓN 265
:sa- ■ PASCAL
én.
Aparece en 1971 y se puede considerar el primer lenguaje de esta gencración.
)
Aunque fue diseñado fundamentalmente para la enseñanza de la programación
an- estn1cturada, su sencillez y buenas prestaciones hizo que pronto se utilizara
tár
también para el desarrollo de todo tipo de aplicaciones científic-o-técnicas o de
sistemas. Pascal permite la estructuración del código mediante procedirnicntos
o funciones que se pueden definir de manera recursiva La tipificación de datos es
ny
bastante rígida y no se contempla en forma apropiada la compilación separada.
da ■ MODULA-2
,pi-
50. Es el descendiente más directo de Pascal :-· con su diseño se trataban de pa-
tau liar las carenc-ias más importantes de su pn'<lecesor. Ambos lenguajes han sido
diseñados por Kiklaus ,virth. Las deficiencias fundamentales de Pascal se de-
ben a que no fue pensado coma un lcnguaje para el desarrollo de software a
gran escala, En ~odula-2 se incorpora la estructura de módulo y queda sepa-
llez rada la especificación del módulo de su r<'aJi.,,ación concreta. Esto facilita una
un compilación segura y permite la ocultación de los detalles ele implementación.
266 L...\ CODIFICACIÓN DEL SOFT\VARE
•e
Aparece en 1975 y su desarrollo es prácticamente paralelo a Pascal. Original-
mente fue diseñado para la codificación del sistema operativo U~IX. Poste-
riormente ha sido utilizado ampliamente para desarrollar software de sistem~
y aplicaciones científico-técnicas de todo t ipo. A pesar de su consideración de
lenguaje de alto nivel, posee ciertas características que le hacen muy flexible ~
capaz de optimizar el código tanto como si se utilizara un lenguaje ensamblador
Por otro lado, esto mismo hace que deba ser utilizado con bastante cuidadc.
Por ejemplo, la importancia de los punteros dentro del lenguaje y su íntima
relación con vectores, matrices y en general con el manejo casi directo de 1~
memoria, puede tener resultados desastrosos si no se toman las debidas pre-
cauciones. También posee un conjunto de operadores muy amplio que permiv·
hacer cualquier cosa con cualquier tipo de dato sin apenas ninguna restricción.
Esto puede dificultar bastante la depuración de un programa cuando se utiliza!:
indiscriminadamente.
■ ADA
Es el lenguaje patrocinado por el Departamento de Defensa de los EEUu, priL.-
cipal consumidor de software del mundo, para imponerlo como estándar ~
todos sus desarrollos de sistemas con computador englobado ("embedded com--
pnter systems") y de tiempo real. Es un descendiente de Pascal mucho ma.:-
potente y complejo. Aunque desde principios de los 80 se viene hablando ck
las ventajas de Ada coma lenguaje universal, todavía no está suficientemcnr,...
extendido. Esto se ha debido fundamentalmente a la dificultad de aprendiza_;
de un lenguaje tan complejo y a que la puesta a punto de los compiladores h..
requerido más tiempo del previsto. Los packages de Ada facilitan la codificaciór
de un diseño modular y la aplicación de los conceptos de abstracción y oculta-
ción. Ada permite la definición de elementos genéricos y dispone de mecanism~
para la programación concurrente de tareas y la sincronización y cooperació::.
entre ellas.
Dentro de esta misma generación y de forma paralela, se han ido desarrollanC:.-
lenguajes asociados a otros paradigmas de programación o modelos abstracto--
de computo (orientación a objetos, funcional o lógico) como enfoques alternan-
vos a la programación imperativa representada por Pascal , C, Nlodula-2 y Ad&.
Los lenguajes que soportan estos paradigmas tienen una aplicación bastanr_
LOS LENGUAJES DE PROGRANIACIÓN 267
'E
[r
orientada hacia el campo para el cual han sido diseñados. Algunos de los más
s. representativos son los siguientes:
10
■ SMALLTALK
le
Este lenguaje es el precursor de los lenguajes orientados a objetos. Aunque las
primeras versiones son de principios de los 70, los entornos de trabajo disponi-
bles eran deficientes y su difusión fue muy limitada. Durante la década de las
80 las estaciones de trabajo con pantallas gráficas y procesadores más poten-
J- tes permitieron disponer de entornos más amigables y las nuevas ,.-ersiones d el
e- lenguaje alcanzan mayor difusión .
le • e++
y Es un lenguaje que incorpora al lenguaje C los mecanismos básicos de la pro-
,r. gramación orientada a objetos: ocultación, clases, herencia y polimorfismo. Con
o. este lenguaje se trata de aprovechar la amplia difusión que tiene C y facilitar su
la utilización cuando se emplean técnicas de análisis y diseño orientadas a objetos.
la
e- ■ JAVA
te El lenguaje de programación Java fue originalmente desarrollado en 1995 por
n. Sun Microsystems (la cual fue adquirida posteriormente por la compañía Ora-
lil cle). Su sintaxis deriva mucho de C y C- f-, pero tiene menos facilidades de
bajo nivel que cualquiera de ellos. Las aplicaciones de Java son generalmente
compiladas a un pseudocódigo que puede ejecutarse en cualquier máquina vir-
tual Java (JV~1) sin importar la arquitectura de la computadora subyacente.
[1-
Es un lenguaje de programación de propósito general, concurrente, orientado
m a objetos y basado en clases que fue diseñado específicamente para tener tan
[1-
pocas dependencias de implementación como fuera posible. Su intención es per-
á.s mitir que los desarrolladores de aplicaciones escriban el programa una vez y lo
ie ejecuten en cualquier dispositivo (conocido en inglés como \VORA., o "write
te once: run anywhere"), lo que quiere decir que el código que es ejecutado en
Je
una plataforma no tiene que ser recompilado para correr en otra. Java es, a
la partir de 2012, uno de los lenguajes de programación más populares en uso,
)Il
particuJarmente para aplicaciones de cliente-servidor de web.
a- ■ EIFFEL
:)S
Este lenguaje de finales de las 80 supone probablemente el intento más serio de
in
diseño de un lenguaje completamente nuevo orientado a objetos, tomando como
estructura básica de partida un lenguaje imperativo estructurado. Eiffel permite
lo la definición de clases genéricas, herencia múltiple y polimorfismo. Aul).que su
:)S difusión todavía no es muy grande es previsible que la adquiera en un futuro
próximo.
a.
te
268 L.-1 CODIFICA.CIÓ2V DEL SOFTl-l~4.RE
• LISP
Es el precursor de 105 lenguajes funcionales. Las primeras versiones aparecie-
ron junto a los lenguajes de 2ª generación. Aunque actualmente compiten con
él un gran número de lenguajes funcionales, continúa siendo uno de los má.,
utilizados en aplicaciones de inteligencia artificial y sistemas expertos. En LISP
todos los datos se organizan en forma de listas y para su manejo se emplean
exclusivamente funciones, que normalmente son recursivas LISP está pensado
especialmente para la manipulación de símbolos, demostración de teoremas y
resolución de problemas teóricos.
■ PROLOG
Este lenguaje es el representante más importante de los lenguajes lógicos y se
utiliza fundamentalmente para la construcción de sistemas expertos. En el desa-
rrollo de la propuesta de 11 quinta generación'1, el lenguaje PROLOG se tomó
como un punto de arranque. Los elementos fundamentales que utifüm son: he-
chos y reglas; ambos constituyen la base de la representación del conocimiento.
A partir de ellos se pueden inferir nuevos hechos o reglas que se incorporan a la
base del conocimiento. Cuando el número de hechos y reglas crece) el proceso
de inferencia puede resultar tremendamente costoso y lento.
Existen en el mercado una gran variedad de lenguajes de marcas. Estos lengua-
jes no son propiamente lenguajes de programación, aunque suele confundirse
con ellos. Estos lenguajes permit~n codificar un documento con una serie de eti-
quetas o marcas que aportan información adicional o estructural al documento.
El ejemplo más conocido es el HTlv1L, que permite crear páginas web a tra-
vés de documentos con marcas que son interpretadas por el navegador. ExistPn
1nuchos otros tipos, especialmente para la edición de textos como el TEX, perc
también para aplicaciones gráficas, matemáticas, de música, etc.
Desde hace más de veinte años han venido surgiendo lenguajes o herramientas.
1e- La amplia difusión de los computadores personales de altas prestaciones (potencia
011
de cálculo, pantalla gráfica, etc), así corno el uso generalizado de Internet y la consi-
l~
guiente necesidad de aplicaciones 11 web'1 , han sido determinantes para su desarrollo
3P más amplio. Sería tremendamente prolijo hacer una relación de herramientas (la
at
mayoría de ellas tienen marcas comerciales) e incluso resulta difícil establecer una
do clasificación. t:na posible agrupación según su aplicación concreta sería la siguiente:
■ BASES DE DATOS
Estos lenguajes permiten acceder y manipular la información de la base de
datos mediante un conjunto de órdenes de petición (Qt:ERY) relativamente
sencillas. Con estas órdenes se pueden establecer condiciones para el simple
se
acceso a determinados datos, se pueden agrupar datos que verifican una deter-
;a-
minada relación entre ellos, se pueden efectuar cálculos entre los datos u otras
nó
operaciones mucho más sofisticadas. La ventaja fundamental de estos lenguajes
1e-
es que dotan de una gran versatilidad a la base de datos y permiten que pueda
:o.
ser el propio usuario quien diseñe sus propios listados, informes, resúmenes,
la
cálculos, etc., cuando las necesite.
so
■ GENERADORES DE PROGRAMAS
a- Con ellos se pueden construir elementos abstractos fundamentales en un cierto
se campo de aplicación sin descender a los detalles concretos que se necesitan en
ti- los lenguajes de la tercera generación. La generación de los correspondientes
º· programas, en algún lenguaje de la tercera generación, se realiza de acuerdo a
a- un conjunto de reglas que se establecen a priori y que dependen del lenguaje
destino. Evidentemente, el programa generado se puede modificar o adaptar
ro cuando la generación automática no resulta completamente satisfactoria. Con
la utilización de estos lenguajes siempre se produce un ahorro considerable de
tiempo de desarrollo. La mayoría de los generadores de programas sirven para
realizar aplicaciones de gestión y el lenguaje destino es COBOL. Sin embargo,
también se han desarrollado herramientas CASE para diseño orientado a objeto
Lll que se pueden utilizar para aplicaciones de sistemas y que generan programas
1- en C, C-+ ó Ada.
'l.r
)S
■ CÁLCULO
)- Existe una amplia gama de herramientas de cálculo destinadas a simplificar
~s las más diversas tareas científicas o técnicas. Inicialmente estas herramientas
tr fueron simplemente aplicaciones más o menos sofisticadas que ofrecían distin-
:n tos métodos o algoritmos para resolver un problema concreto en el campo de
;e la estadística. la investigación operativa. el control, etc. Sin embargo, algunas
de estas herramientas han evolucionado de tal manera que se han converti-
do en verdaderos L4G. Con ellos se puede programar prácticamente cualquier
270 L.4. CODIFICACIÓN DEL SOFT\iVARE
■ OT ROS
En este grupo se pueden englobar todo tipo de herranüentas que permitan
una programación de cierta complejidad y para ello utilicen un lenguaje. Como
ejemplos concretos se pueden citar las herramientas para la especificación y veri-
ficación formal de programas, lenguajes de simulación; lenguajes de prototipos,
etc.
■ TIPO DE APLICACIÓN
Aunque con las prestaciones de cualquier lenguaje de última generación se pue-
den realizar aplicaciones para los más diversos campos, no parece muy realista
pensar en un lenguaje universal que sirva para todo. Por el contrario cada día
aparecen nuevos lenguaje-S orientados a un campo de aplicación concreta. Sólo
en aplicaciones de tiempo real muy crítico (robótica, aeroespaciales, etc.) opa-
ra hardware muy especial, sin compiladores de lenguajes de alto nivel, estaría
CRITERIOS DE SELECCIÓN DEL LENGUA.JE 271
■ DISPOKIBILIDAD Y ENTORNO
Desde luego no existen compiladores de todos los lenguajes para todos los
computadores. Por tanto, como paso previo, es necesario comprobar que com-
piladores existen para el computador elegido. Normalmente, el número de ellos
será bastante reducido. Puede resultar interesante realizar un estudio compa-
rativo de los compiladores disponibles en cuento a la memoria y tiempo de
ejecución del código que generan para un programa sencillo de prueba. En este
sentido se debe tener en cuenta si el código generado se ejecuta directamente o
se interpreta posteriormente.
■ EXPERIE~CIA PREVIA
Aunque se supone que el equipo de programadores posee una buena metodología
de trabajo y se adaptaría rápidamente a un nuevo lenguaje y entorno, siempre
que sea posible es más rentable aprovechar la experiencia previa. Cuando las
condiciones de trabajo no se modifican el rendimiento aumenta y se disminuyen
L las posibilidades de error. En la mayoría de las empresas de software están
L establecidos tanto el lenguaje de programación que utilizan preferentemente,
como su entorno de desarrollo y, en todo caso , a lo largo del tiempo se van
actualizando con nuevas versiones. Hay que tener en cuenta que la formación
L de todo el personal es una inversión muy importante.
272 L.-l CODIFIC.4CIÓN DEL SOFTWARE
• REUSABILIDAD
Este aspecto es importante tanto por la posibilidad de utilizar software ya rea-
lizado como por el hecho de dejar disponibles para otros proyectos partes del
software desarrollado.
Así, por un lado, es muy interesante conocer exhaustivamente las librerías dis-
ponibles, y por otro, resulta muy conveniente disponer de herramientas dentro
del entorno del lenguaje para la organización de dichas librerías en las que se
facilite la búsqueda y el almacenamiento de los módulos reutilizables. Este tipo
de herramientas todavía no están muy e:x.1:endidas, pero es previsible que se
utilicen mucho en un futuro muy próximo.
■ TRAKSPORTABILIDAD
Los desarrollos se realizan para un computador concreto, pero a lo largo del
tiempo este se queda obsoleto. Por esta y otras razones, es bastante habitual
que se traten de trasladar las aplicaciones de unos computadores a otros. Para
facilitar esta labor es muy interesante que el lenguaje utilizado sea transporta-
ble.
bajo de todo el equipo sea completamente homogéneo. Es habitual que las empresas
dedicadas al desarrollo de software tengan ya establecidas un conjunto de normas
que con carácter general aplican a todos sus proyectos.
Casi todos los lenguajes permiten un formato libre en la escritura de sus senten-
cias e ignoran los espacios en blanco redundantes y los comentarios. Así, al mismo
texto de un programa se le pueden dar distintos formatos que pueden resultar muy
significativos desde el punto de vista del lector humano, al tiempo que son irrelevan-
tes desde el punto de vista del compilador.
No se trata de proponer el mejor estilo posible puesto que este sería muy difícil
de establecer y provocaría muchas discusiones estériles. Lo más importante es fijar
un estilo concreto y que todo el equipo lo adopte y lo respete. Para fijar un estilo de
codificación se deberán concretar al menos los siguientes puntos:
■ Formato y contenido de las cabeceras de cada módulo
• Identificación del módulo
• Descripción del módulo
• Autor y fecha
• Revisiones y fechas
•.. .
■ Formato y contenido para cada tipo de comentario
• Sección
• Orden
• Al margen
• ....
■ Utilización de encolumnado
• Tabulador = N' espacio
• Máximo indentado
• Formato selección
• Formato iteración
•
274 LA. CODIFICACIÓN DEL SOFTlVARE
■ Elección de nombres
• Convenio para el uso de mayúsculas y minúsculas
• Kombres de ficheros
• Identificadores de elementos del programa
•
En el libro de Fundamentos de Programación [Cerrada00) se concretan estos pun-
tos para configurar el estilo de todos los programas escritos a lo largo del texto.
Además del estilo, en las normas se deben incluir todas aquellas restricciones o reco-
mendaciones que puedan contribuir a mejorar la claridad del código y a simplificar
su mantenimiento posterior. Por ejemplo, se pueden fijar las siguientes restricciones
de carácter general:
■ El tamaño máximo de las subrutinas no debe superar P páginas.
■ Las subrutinas tendrán un máximo de N argumentos.
■ Se deben incluir en un fichero todas las ristras de caracteres que utilice el
programa. Esto facilitará la personalización y los cambios.
■ Evitar el anidamiento excesivo de sentencias IF.
Con los mismos fines , también se puede limitar el empleo de algunas sentencias
del lenguaje. Por ejemplo, si se utiliza el lenguaje C para la codificación se pueden
dar normas como las siguientes:
adoptar como solución tabular dicho cálculo y simplemente consultarlo cada vez que
se necesite.
7.6. Conclusiones
La programación o construcción del softwarf> es la etapa en la que, después df'
análisis, especificación y diseño, elaboramos el producto. La elección del lenguaje de
programación más adecuado no es sencilla, depende de múltiples factores como el
tipo de aplicación, el bagaje de la empresa u organización que lo construye, la plata-
forma hardware elegida, etc. En este capítulo se han dado algunos consejos para la
correcta elección del lenguaje, y se ha dado un breve repaso a los distintos lenguajes
de programación. Existen cientos de lenguajes disponiblE>s en el mercado. La calidad
final del producto una vez terminado depende mucho de haber seguido una correcta
metodología durante la programación. En las organizaciones más desarrolladas exis-
ten estrictas normas sobre el uso de lenguajes y compiladores. Aquí se han revisado
algunos de los aspectos metodológicos más importantes que sirven de base para su
elaboración.
E.TERCICIOS PROPUESTOS 281
7. 7. Ejercicios propuestos
1. Elahórese un conjunto de reglas para la cn•ación de los nombre de los identifica-
dores de un programa. Elíjase el lenguaje de programación que mejor conozca.
¿Cree que obligar a cumplir dichas reglas es una pérdida de tiempo? Razone su
respuesta.
2. Escríbase una rutina en C que calcule términos de la sucesión de números ente-
ros conocida como la serie de Fibonaci sin utilizar la sentencia GOTO. \'uelYa
a escribirla utilizando la sentencia GOTO. ¿Qué ventajas o inconvenientes ve
entre ambos métodos?
1
3. Piénsese en los dos lenguajes de programación que mejor conozca. Elabórese
una lista de Yentajas e inconvenientes que \·e en cada uno de ellos para la
programación de una aplicación que gestione una gasolinera.
-1. Búsquese información sobre la popularidad de los diferentes lenguajes <le pro-
3 gramación e intente elaborar una lista de los 20 más utilizados.
5. Consúltese la guía S\\.EBOK y descubra., según ella, cuáles son los principios
fundamentales de la construcción del software.
1
?
-
a
s
i
a
Capítulo 8
Pruebas de Software
8.1. Introducción
A lo largo del proceso de elaboración del soft"vare se introducen de manera inad-
vertida múltiples errores de todo tipo e incorrecciones respecto a las especificaciones
del proyecto. Todo ello debe ser detectado y corregido andes de entregar al cliente el
programa acabado.
Como sucede con cualquier otro producto (mecánico, electrónico, etc), para ga-
rantizar su calidad es necesario someter al programa a diversas pruebas dcstmadas a
detectar errores o verificar su funrionamiento correcto. Según la utilización final df'l
programa, las pruebas pueden ser más o menos exhaw,tivas.
P ara evitar el caos de una p rueba única. se deben hacer pruebas a cada unidad o
módulo según se avanza en la codificación dcl proyecto. Esto facilitará enormemente
las posteriore~ pruebas de integración entrf' módulos y las prueba..., del sistema total
que deben realizarse en cualquier caso.
283
284 PRUEBAS DESOFT ~V.4RE
Con frecuencia, la fase de pruebas requiere más esfuerzo que cualquier otra de la
ingeniería del software. Una correcta planificación puede ahorrarnos mucho tiempo
dentro del proyecto y evitar que un menor porcentaje de errores pase desapercibido.
8.2. Objetivos
Se analiza a lo largo de este capítulo los distintos tipos de pruebas que se deben
o pueden realizar a un software para garantizar de forma razonable su correcto fun-
cionamiento. Se reüsan además las técnicas más utiliza.das en función del tipo de
lenguaje de progTamación.
• Pruebas de unidades
• Pruebas de integración
• Pruebas de validación
• Prueba.e, de sistema
ESl'EOFICAOÓN
"'Cna vez ensan1blados todos los módulos correctamente y eliminados los errores
de interacción entre ellos, comienza la fase de verificación de que software realiza
aquello para lo que ha sido especificado. Estamos en las pruebas de validación. A.ho-
ra lo relevante es la interacción del usuario con el programa, el cual debe obtener los
resultados deseados ante las diferentes peticiones que pueda requerir.
ESPACJO ESPACIO
DE DE
PRUEBA EJECUCIÓN
Para garantizar unos resultados fiables, además del juego de casos de prueba, es
esencial que todo el proceso de prueba se realice de la manera más automática posi-
ble. Esto exige crear un entorno de prueba que asegure unas condiciones predefinidas
y estables para las sucesivas pasadas, que necesariamente se deben efectuar después
de corregir los errores detectados en cada pasada anterior.
::>le bación de la especificación entrada-salida del software. Se trata de verificar que todos
Ilé' los requisitos impuestos al programa. como a cualquier otro producto 1 se cumplen.
ISO Esta es la única estrategia que puede adoptar el cliente o cualquier persona ajena al
de desarrollo del programa.
CASOS
DE e=) RESULTADOS
PRUEBA
probando una función que realiza la raíz cuadrada, será suficiente con probar
cualquier número positivo, el cero y cualquier número negativo, o tal vez sea más
adecuado probar con un cuadrado perfecto positivo, un valor positivo sin raíz
exacta, el cero, un cuadrado perfecto negativo y un valor negativo arbitrario.
De una forma tenemos tres clases de equivalencia y de otra cinco.
ESPACIO
DE
Los pasos que se deben seguir con este método son los siguientes:
Se deben proponer casos o datos de pruebas válidos e inválidos para cada una
de las clases definidas en el paso anterior. Con este método, si las clases se eligen
adecuadamente, se reduce bastante el número de casos que se necesitan para
descubrir e] defecto. Según cómo se caractericen las clases de equivalencia, se
pueden emplear las siguientes directrices:
A Rango de valores.
Ejemplo: O < - edad < 120años
Casos válidos: 1 dentro del rango 33 años
Casos inválidos: 1 mayor y 1 menor -5 y 132 años
B Valor específico.
Ejen1plo: Clave - OGCLTA
Casos válidos: 1 igual OGCLTA
Casos inYálidos: 1 distinto Otra578
C Conjunto de valores.
Ejemplo: Operaciones = compra, venta, cambio
PRUEB,4S DE UNIDADES 289
RE
>ar
Casos válidos: 1 por elemento compra, venta, cambio
tás
Casos inválidos: 1 fuera del conjunto regalo
9.ÍZ
10.
Hay que tener en cuenta que un caso de prueba válido para una clase puede
ser también un caso de prueba inválido para otra y, asimismo, puede ocurrir
que un caso de prueba bien elegido sea válido para varias clases. Así, para la
elaboración del juego de casos de pruebas, se pueden refinar los pasos indicados
anteriormente:
2. Definir una prueba que cubra tantos casos válidos como sea posible de
cualquier clase.
3. rvtarcar las clases cubiertas y repetir el paso anterior hasta cubrir todos los
casos válidos de todas las clases.
El método de análisis de los valores límite (en inglés boundary analysis), como
se muestra en la figura 8.5, hace un especial hincapié en las zonas del espacio
de ejecución que están próximas al borde. Este método es complementario del
anterior y, también en éste, se deben proponer casos válidos y casos inválidos.
Por ejemplo, para el rango de edades indicado en el apartado anterior, los casos
válidos de prueba serían:
Límite inferior: -1 O 1
Límite superior: 119 120 121
290 PRUEBAS DE SOFTWARE
ESPAOO
DE
ESPACIO
DE
EJECUCIÓN
\ ESPAOO
DE
PRUEBA
Los errores en los límites pueden tener consecuencias más graves de lo normal,
debido a que se puede provocar la necesidad de unos recursos extra que no
estaban previstos. Por ejemplo, si un sistema de control de una central nuclear
debe poder atender 20 alarmas simultáneamente, en las pruebas se podrán
provocar 21, 22 e incluso 30 alarmas, comprobando que se detecta esta situación
y se avisa al operador sin abortar el programa y producir la parada del sistema
por violación de memoria. En este caso, las directrices a seguir en la elaboración
de casos de prueba serían las siguientes:
l. Entradas: probar con los mismos valores límite y justo fuera de límites.
Por ejemplo, si la precisión en los cálculos = 5 cifras, probar 5 y 6.
2. Salidas: probar con los mismos valores límite y justo fuera de límites. Por
ejemplo: para listados con Nº líneas/página= 70, probar 70 y 71.
3. l\.1emoria: probar con tamaños nulos, límite y superior al límite de todas
las estructuras de información. Por ejemplo, para pilas, colas tablas, etc.,
probar los casos vacío, lleno, y sobrelleno (un elemento más de lleno).
4. Recursos: probar con ningún recurso, límite de recursos y superior al límite.
Por ejemplo, si máximo ~o de terminales= 30, probar O, 30 y 31.
5. Otros: pensar en otras situaciones límite y establecer la pruebas.
Ente método también se puede utilizar con la estrategia de caja transparente
en la medida que se conozcan las estructuras internas del programa.
COMPAR ACIÓN D E V ER SIONES
Cuando una unidad o módulo es especialmente crítico se puede hacer un desa-
rrollo multi-versión (en inglés ~-version), encargando ia codificación de dife-
rentes versiones a distintos programadores. Todos ellos utilizarán las mismas
especificaciones de partida y deberían obtener módulos completamente inter-
cambiables. Sin embargo, esto no suele ocurrir debido a variaciones en los algo-
ritmos empleados, diferencias de matiz en la interpretación de la especificación,
PRUEBAS DE UNIDADES 291
diferentes precisiones, etc. Por otro lado, se elaborará un juego de casos de prue-
ba mediante los métodos habituales. Hay que tener en cuenta que no siempre
se conocen de forma completamente exacta los resultados esperados y que, en
algunos casos, como sucede en los sistemas de tiempo real, resulta casi imposi-
ble conocer a priori cuáles serán esos resultados.
CASOS DE
i "Correcto THEN RESULTADOS
PRUEBA CLS[ Operar
(NO Corregh_datos
n
J ~
RESULTADOS
INTERNOS
En principio puede parecer que las únicas pruebas que realmente son necesarias
son las que sirven para demostrar el funcionamiento según las especificaciones y esto
se puede lograr con una estrategia de caja negra. Sin embargo, un programa es una
entidad de una complejidad muy superior a la del más sofisticado artilugio mecánico,
hidráulico o electrónico, para los que si suele ser suficiente con someterlos a pruebas 1
de caja negra. Como ejemplo se puede decir que un sencillo bucle, que se pueda 1
J
ejecutar entre O y 10 veces y que tenga en su interior sólo 5 caminós diferentes, se
puede ejecutar de casi 10 millones de formas diferentes. ,,
bastante reducido de todos los caminos posibles, pero también es cierto que no re-
sulta fácil prever a priori qué caminos se ejecutarán y cuáles no. Cuando se elaboran
las pruebas de caja negra pueden quedar perfectamente inexplorados caminos que
en un funcionamiento habitual no serán muy frecuentados, pero que sí son decisivos
en situaciones concretas y que, si no han sido probados convenientemente, pueden
producir un error en el peor momento.
• Cubrimiento lógico
• Pruebas de bucles
• Empleo de la intuición
- -
PRUEBAS DE UNIDADES 293
:o
s-
,Il
1e
)S
n
s
y 7 8
lS
a
,S
10
7 8
menos una vez todos los caminos básicos, cada uno de ellos por separado .
• NIVEL II. Se trata de elaborar casos de prueba para que se ejecuten todas
las combinaciones de caminos básicos por parejas. En el ejemplo de la figura
8.8 serían necesarios 7 caminos para probar las combinaciones por parejas.
Estos caminos podrían ser:
Camino 1: O - 1 - 11
Camino 2: O - 1 - 2 - 3 - 5 - 6 - 7 - 1 - 11
Camino 3: O - 1 - 2 - 3 - 5 - 6 - 8 - 1 - 11
Camino 4: O - 1 - 2 - 3 - 5 - 9 - 10 - 1 - 11
Camino 5: O - 1 - 2 - 4 - 5 - 6 - 7 - 1 - 11
Camino 6: O - 1 - 2 - 4 - 5 - 6 - 8 - 1 - 11
Camino 7: O - 1 - 2 - 4 - 5 - 9 - 10 - 1 - 11
Desde luego, el juego de pruebas sólo ejercita el módulo en una parte de sus
posibilidades y siempre pueden quedar situaciones sin explorar. P ara tener una esti-
mación del número de defectos que quedan sin detectar se puede utilizar la siguiente
estrategia:
l. Anotar el número de errores que se producen inicialmente con el juego de casos
de prueba El (por ejemplo El = 56).
2. Corregir el módulo hasta que no tenga ningún error con el mismo juego de casos
de prueba.
3. Introducir aleatoriamente en el módulo un número razonable de errores EA (por
ejemplo EA = 10) en los puntos más diversos. Esta labor deberá ser realizada
por alguien que no conozca el juego de casos de prueba.
4. S01neter el módulo con los nuevos errores al juego de casos de prueba y hacer
de nuevo el recuento del número de errores que se detectan ED (por ejemplo
ED = 95).
PRUEBAS DE UNIDADES EN PROGRAA1ACIÓN ORIENTADA A OBJETOS 297
Las secuencias de prueba de una clase se diseñan para probar las operaciones más
relevantes de ella, y es examinando los valores de los atributos de la clase donde
comprobaremos si existen errores. Existen varios métodos para probar una clase:
• Pruebas basadas en fallo. el objetivo es descubrir fall ,::. que durante el diseño se
hayan detectado o valorado como probables. Los casos de prueba se crean con
el fin de detectar dichos posibles fallos. Obviamente la efectividad dependerá
del esfuerzo e interés dedicado durante el diseño en analizar las posibles causas
de fallo.
Paso 1
,f Paso 2
n
Paso 3
Paso4
.e
Paso 1
Módulo O
Paso2
Módulo C
Módulo a
Paso3
Módulo C
Módulo a
La mejor solución es utilizar una integración ascendente con los módulos de nivel
más bajo y una integración descendente con los de nivel más alto. Esto se denomina
integración sandwich.
8. 7. Pruebas de validación
t Una vez culmina la integración y sus pruebas asociadas, y con el software com-
pletamente ensamblado, el siguiente paso consiste en asegurar que el producto ob-
tenido cumple la especificación bajo la que se construyó. La validación del software
se consigue a través de una serie de pruebas que comprueban la conformidad con los
requerimientos, no sólo en cuanto a funcionalidad, sino también en cuanto a rendi-
miento, ergonomía y documentación.
302 PRUEBAS DE SOFTl V.4.RE
Posteriormente, en las pruebas beta, uno o varios usuarios trabajan con el siste-
ma en su entorno normal, sin apoyo de nadie, y anotando cualquier problema que se
presenta. En algunos sistemas pueden quedar registradas automáticamente las últi-
mas operaciones que han dado lugar al problema. Sin embargo es muy importante
que sea el usuario el encargado de transmitir al equipo de desarrollo cuál ha sido el
procedimiento de operación que le llevó al error. Esta información resulta vital para
abordar la corrección.
8.9. Conclusiones
Probar es parte inevitable del desarrollo de cualquier sistema de software, de he-
n cho, las pruebas de software representan la parte más importe dentro del esfuerzo
~, técnico en el proceso de software. Incluso en los sistemas más pequeños es necesario
-
marcar la estrategia para planificar y ejecutar las pruebas sistemáticas que garanti-
cen la calidad del producto final.
De forma global, la estrategia de pruebas comienza por las partes más pequeña
_ con entidad propia o unidades, las cuales se integran hasta componer el programa
completo. Una vez integrado, se comprueba que> ~E' cumplen los requisitos que se
e especificaron. Finalmente se realizan pruebas para mejorar otros aspectos tales como
el rendimiento, la integrabilidad o la documentación.
304 PRUEBAS DE SOFTlVARE
>as
l a
Bibliografía
>as lAbbott83] R.J. Abbott: Pro gram Design by Infmmal English Descriptions..
Comm.ACl\.I, V.26 , N.11, )Jov.1983:
[Collado87] 11. COLLADO. R. l'vfüRALES , J .J. ~lo CU:..'•~ rocturas de Datos: Ra:.-
lización en Pascal, EdicioneR Diaz de Santos. : -
305
306 BIBLIOGRAFÍA
....
ISBN-13: 978-84-9961-003-1