Académique Documents
Professionnel Documents
Culture Documents
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
2
2
2
3
3
4
5
8
9
10
10
11
13
20
24
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
28
30
30
31
32
32
34
3. Fase de requisitos
3.1. Obtencin de requisitos . . . . . . . . . . .
3.1.1. Introduccin . . . . . . . . . . . .
3.1.2. Tcnicas de obtencin de requisitos
3.2. Anlisis de requisitos . . . . . . . . . . . .
3.3. Representacin de requisitos . . . . . . . .
3.4. Anlisis orientado a objetos . . . . . . . . .
3.5. Validacin de requisitos . . . . . . . . . . .
3.6. Bases de documentacin . . . . . . . . . .
Ejercicios y actividades . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
35
36
36
44
44
44
44
44
48
4. Fase de diseo
4.1. Conceptos y elementos del diseo .
4.2. Diseo estructurado . . . . . . . . .
4.3. Diseo orientado a objetos . . . . .
4.4. Validacin y confirmaci del diseo
4.4.1. Revisin del diseo . . . . .
4.4.2. Verificaci del diseo . . .
4.4.3. Validacin del diseo . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
50
50
50
50
50
50
50
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ndice general
IV
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
53
54
54
57
59
61
67
69
69
69
70
71
6. Fases de pruebas
6.1. Verificaci y validacin a lo largo del ciclo de vida
6.2. Tcnicas y mtodos de prueba . . . . . . . . . . .
6.3. Documentacin de pruebas . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
. 5
. 6
. 6
. 6
. 7
. 7
. 7
. 8
. 8
. 9
. 10
. 12
. 13
Captulo 1
Notaciones de especificacin y diseo (UML): La mejor forma de asimilar esta parte consiste en ir haciendo ejemplos.
En esta gua se incluye este apartado a estudiar junto con el apartado del libro base [Pre01, sec. 22.5]. Tambin puede ser
conveniente una lectura somera del captulo 20 en el mismo [Pre01, cap. 20].
1.1.1. Sistemas
La Ingeniera de Sistemas es el contexto genrico en el que se pueden situar las herramientas y metodologas usadas para
crear sistemas. Un sistema puede estar formado por subsistemas de diferentes tipos. La ingeniera de sistemas es el primer paso
que se da y proporciona una visin global del sistema en su conjunto, posteriormente, se analiza cada subsistema con la rama de
la ingeniera adecuada. Una de esas ramas es la ingeniera del software.
La Ingeniera del Software trata, segn Bauer [Bau72], del establecimiento de los principios y mtodos de la ingeniera,
orientados a obtener software econmico, que sea fiable y funcione de manera eficiente sobre mquinas reales.
El sistema es un conjunto de elementos que cooperan entre s para proporcionar una funcionalidad. En el caso de un sistema
informtico hay dos tipos de elementos: Hardware y Software.
Gestionar
Altas/Bajas
Peliculas
Disponibles
Gestionar
Pedidos
Pedido
pelicula
Gestionar
Devoluciones
Devolucion
Pelicula
5
Entrada
Etapa
Salida
Diseo
Codificacion
Pruebas
Mantenimiento
Descripcin
Este modelo admite la posibilidad de hacer iteraciones, es decir, durante las modificaciones que se hacen en el mantenimiento
se puede ver por ejemplo la necesidad de cambiar algo en el diseo, lo cual significa que se harn los cambios necesarios en la
codificacin y se tendrn que realizar de nuevo las pruebas, es decir, si se tiene que volver a una de las etapas anteriores al
mantenimiento hay que recorrer de nuevo el resto de las etapas.
Despus de cada etapa se realiza una revisin para comprobar si se puede pasar a la siguiente.
Trabaja en base a documentos, es decir, la entrada y la salida de cada fase es un tipo de documento especfico. Idealmente,
cada fase podra hacerla un equipo diferente gracias a la documentacin generada entre las fases. Los documentos son:
Anlisis: Toma como entrada una descripcin en lenguaje natural de lo que quiere el cliente. Produce el S.R.D. (Software
Requirements Document).
Diseo: Su entrada es el S.R.D. Produce el S.D.D. (Software Design Document)
Codificacin: A partir del S.D.D. produce mdulos. En esta fase se hacen tambin pruebas de unidad.
Pruebas: A partir de los mdulos probados se realizan la integracin y pruebas de todo el sistema. El resultado de las
pruebas es el producto final listo para entregar.
Ventajas
La planificacin es sencilla.
La calidad del producto resultante es alta.
Permite trabajar con personal poco cualificado.
Inconvenientes
Lo peor es la necesidad de tener todos los requisitos al principio. Lo normal es que el cliente no tenga perfectamente
definidas las especificaciones del sistema, o puede ser que surjan necesidades imprevistas.
Analisis
Nivel de
abstraccion
Diseo
Verficacion
Mantenimiento
Pruebas
Codificacion
Tiempo
7
Concepto
Analisis
Diseo arquitectonico
Diseo detallado
Codificacion
Pruebas
Analisis
Diseno
preliminar
Iteracion 1
Iteracion n
Diseno
detallado
Diseno
detallado
Codificacion
y pruebas
. . . .
Mantenimiento
Codificacion
y pruebas
Mantenimiento
Analisis de riesgos
Analisis de riesgos
Prototipo 4
Prototipo 3
Analisis de riesgos
Analisis
de riesgos
Prototipo 2
Prototipo 1
Plan de desarrollo
Diseno
Producto Sw.
Validacion de
requisitos
Codigo
Prueba de
aceptacion
Diseno detallado
Pruebas
unitarias
Integracion
y prueba
Al entregar productos desde el final de la primera iteracin es ms fcil validar los requisitos.
El riesgo en general es menor porque, si todo se hace mal, slo se ha perdido el tiempo y recursos invertidos en una
iteracin (las anteriores iteraciones estn bien).
El riesgo de sufrir retrasos es menor, ya que al identificar los problemas en etapas tempranas hay tiempo de subsanarlos.
Inconvenientes
Es difcil evaluar los riesgos.
Necesita de la participacin continua por parte del cliente.
Cuando se subcontrata hay que producir previamente una especificacin completa de lo que se necesita, y esto lleva tiempo.
Dnde es adecuado
Sistemas de gran tamao.
Proyectos donde sea importante el factor riesgo.
Cuando no sea posible definir al principio todos los requisitos.
Madurez
Periodos
Crecimiento
Fases
Mejora 1
Planificacion
ConstruccionLiberacion
del negocio
Actividades
Planificacion
ConstruccionLiberacion
del negocio
Mejora 2
Planificacion
ConstruccionLiberacion
del negocio
10
1.3.1. Introduccin
Modelos
La construccin de todo sistema de ingeniera requiere un estudio previo que consiste en la identificacin de sus componentes
y de las relaciones entre stas, la comprensin de sus propiedades, y la concepcin de su comportamiento dinmico. El resultado
de este estudio es un modelo o representacin del sistema. Un modelo es una representacin de la realidad donde se abstrae lo
no esencial. La abstraccin permite gestionar la complejidad y experimentar con diferentes soluciones. Para un mismo sistema se
puede definir ms de un modelo diferente en funcin del aspecto que interese destacar o el nivel de detalle deseado. El modelado
permite pues ver un sistema desde diferentes perspectivas, haciendo as ms sencillo su entendimiento y desarrollo. Finalmente,
los modelos juegan un papel esencial en la comunicacin con el cliente y entre los profesionales que forman parte del equipo de
desarrollo.
UML, siglas de Unified Modeling Language es un lenguaje concebido, como su nombre indica, para expresar modelos. No
es nada ms que eso, no indica cmo se deben hacer el desarrollo y ni siquiera el anlisis orientados a objetos y, en consecuencia,
no es una metodologa de desarrollo. Es importante tener bien claro que tan slo se trata de una notacin; ahora bien, es la
notacin que se ha convertido en el estndar de facto de la mayor parte de las metodologas de desarrollo orientado a objetos que
existen hoy en da.
El UML se utiliza para la especificacin, visualizacin, construccin y documentacin de sistemas software. De esta frase,
la palabra visualizacin es la ms importante; UML es un lenguaje grfico, esto es, basado en diagramas, y est pensado para
entrar por los ojos, tanto de los desarrolladores como de los clientes. Se busc en l un lenguaje fcil de aprender pero rico en
significado, estndar, estable, configurable e independiente de lenguajes de programacin o procesos de desarrollo particulares.
Al mismo tiempo se pretendi que soportara conceptos de desarrollo de alto nivel tales como colaboraciones, armazones (frameworks), patrones y componentes, y permitiera abordar aspectos clave del desarrollo de software actual tales como escalabilidad,
concurrencia, distribucin, ejecutabilidad, etc.
El UML soporta todo el ciclo de vida del desarrollo de software y en distintas reas de aplicacin (sistemas distribuidos, tiempo real, aplicaciones monoproceso, sistemas de informacin corporativos, banca/finanzas, telecomunicaciones, defensa/espacio,
electromedicina, ciencia, ...). Diferentes herramientas CASE orientadas a objeto que dan soporte al desarrollo basado en UML
(Rational Rose, Together, Objecteering, Paradigm Plus, ...) proliferan en el mercado del software.
Este captulo no pretende ser exhaustivo, debe entenderse ms bien como una introduccin inicial abreviada a este lenguaje
de modelado.
Historia
Grady Booch, Jim Rumbaugh e Ivar Jacobson (los apodados "tres amigos") desarrollaron los tres mtodos de desarrollo
orientado a objetos ms seguidas de la industria. De la unificacin del OMT (Object Modeling Technique) de Rumbaugh y el
mtodo de Booch naci la primera versin del UML en el ao 1994. Posteriormente, se incorporaron el mtodo OOSE (ObjectOriented Software Engineering) de Jacobson y algunos conceptos de otros lenguajes de modelado. En la actualidad el UML es
un estndar abierto del grupo OMG (Object Management Group) y se halla en su versin 2.0.
Elementos del lenguaje UML
A continuacin se presenta una clasificacin general de los elementos del lenguaje UML. En las secciones siguientes se
explica cmo estos elementos se combinan para construir diferentes tipos de modelos, y se definen algunos elementos adicionales
que intervienen especficamente en estos modelos.
En el lenguaje UML se distinguen bsicamente tres tipos de elementos:
1. Bloques de construccin: Pueden ser Entidades, Relaciones o Diagramas.
2. Mecanismos comunes: Entre ellos se distinguen Especificaciones, Adornos y Mecanismos de extensin.
3. Reglas de combinacin
Los bloques de construccin se definen como abstracciones y tienen manifestaciones concretas denominadas Instancias. Las
instancias ms comunes son las instancias de clase (Objetos) y las instancias de asociacin (Enlaces). Las instancias pueden
identificarse mediante un nombre o bien ser annimas.
En cuanto a las Entidades, pueden ser:
Estructurales: Entre ellas se distinguen Casos de uso, Clases, Componentes y Nodos. Un tipo particular de clases son
las Interfaces.
11
De agrupamiento: Son los Paquetes. Tipos particulares de paquetes son los Modelos y los Subsistemas. Entre los modelos se distinguen Modelos de casos de uso, Modelos estructurales estticos, Modelos de comportamiento y Modelos
estructurales de implementacin.
De comportamiento: Son, principalmente, las Acciones, los Estados, las Transiciones y los Mensajes.
Las Relaciones, se clasifican principalmente en:
Dependencias
Asociaciones
Generalizaciones
Se distingue entre Diagramas de:
Casos de uso
Clases
Objetos
Secuencia
Colaboracin
Estados
Actividades
Componentes
Despliegue
Como veremos en las seciones siguientes, los modelos de casos de uso se describen mediante diagramas de casos de uso y
diagramas de secuencia; Los modelos estructurales estticos mediante diagramas de clases y de objetos, los modelos de comportamiento mediante diagramas de secuencia, diagramas de colaboracin,diagramas de estados y diagramas de actividades; y los
modelos estructurales de implementacin mediante diagramas de componentes y diagramas de despliegue.
En cuanto a los Mecanismos comunes se clasifican en:
Especificaciones: Descripciones textuales detalladas de la sintaxis y semntica de un bloque de construccin.
Adornos: Elementos grficos y textuales que pueden aadirse a la notacin grfica bsica para proporcionar detalles
adicionales de la especificacin (smbolos de visibilidad, compartimentos adicionales, notas, roles, representacin de clases
y caractersticas especiales - abstracta, raz, hoja - etc).
Mecanismos de extensin: Posibilidades de extensin controlada del lenguaje para adecuarse a aplicaciones, procesos o
dominios de aplicacin concretos. Se distingue entre Estereotipos, Valores etiquetados y Restricciones.
En las secciones siguientes explicamos los diferentes tipos de modelos que pueden definirse en UML, describiendo al mismo
tiempo los elementos que intervienen en los correspondientes diagramas. Hemos optado por describir estos elementos a medida
que se hace referencia a ellos por entender que en un contexto de modelado concreto se pueden entender mejor su utilidad y
significado. Por lo general no distinguiremos entre los diferentes tipos de adornos o mecanismos de extensin que estos elementos
constituyen, por no considerarlo relevante en el nivel de estudio del lenguaje exigido para esta asignatura. Los smbolos grficos
que los denotan aparecen ilustrados en las figuras de esta seccin, o bien en las figuras del captulo 2 (Descripcin de ejemplos
gua). Las antes mencionadas reglas de combinacin estn implcitas en la descripcin de los diferentes diagramas.
12
Relaciones
En los modelos de casos de uso pueden estar implicadas relaciones de los tres tipos principales:
Asociacin: Indica la participacin de un actor en un caso de uso (vase la figura 1.9), esto es, la comunicacin de una
instancia de un actor con instancias del caso de uso o de otro actor que interviene en el caso de uso.
Generalizacin: Muestra una taxonoma entre casos de uso o actores generales, y casos de uso o actores ms especficos.
Dependencia: Puede indicar que el comportamiento de un cierto caso de uso extiende el de un caso de uso base, cualificndose con un estereotipo extend, o bien que el comportamiento de un caso de uso incluye el de un caso de uso base,
cualificndose con un estereotipo include (vase la figura 1.10). Cuando un caso de uso extiende a otro, aade algunos
pasos a la secuencia de interacciones por l especificada. Cuando un caso de uso incluye a otro, significa que contiene la
secuencia de interacciones por l especificada. Este ltimo concepto se identifica con el de llamada a subrutinas: Cuando
dos o ms casos de uso tienen una parte significativa en comn, es til definir casos de uso elementales que representan las
secuencias repetidas.
LLamar ascensor
Realizar venta
pedido
Comprobar
producto
<<extend>>
<<include>>
Relizar venta
producto
Diagramas
En la figura 1.9 se ilustra un diagrama de casos de uso elemental. En cuanto a los diagramas de secuencia, que completan los
modelos de casos de uso, se vern en detalle en la seccin posterior Modelado de comportamiento.
Mecanismos comunes
Como especificaciones de los casos de uso se utilizan las denominadas Descripciones de casos de uso, obtenidas al cumplimentar una plantilla donde se detallan los actores implicados, las precondiciones y postcondiciones, la secuencia normal de
acciones emprendidas por los actores y respuestas asociadas del sistema, y los posibles escenarios alternativos y excepcionales. La informacin contenida en estas especificaciones tiene una traduccin diagramtica en los diagramas de casos de uso y
diagramas de secuencia.
Modelado de casos de uso
Al modelar casos de uso es importante asegurarse de que cada caso definido describe una parte significativa del funcionamiento del sistema. Para evitar la definicin de un nmero excesivo de casos de uso, hay que tener presente que un caso de uso
no es un paso, operacin o actividad individual de un proceso, sino un proceso completo que incluye varios pasos.
Otro aspecto importante a tener en cuenta es la utilidad de los casos de uso en la comunicacin entre analistas, desarrolladores
del software y expertos del dominio de aplicacin: deben se entendibles por todos y constituir una descripcin de alto nivel del
sistema que no incorpore conceptos de diseo.
Para identificar casos de uso es recomendado comenzar por modelar el contexto con que habr de relacionarse, fase que
implica los siguientes pasos:
1. Identificacin de los actores que interactan con el sistema.
2. Organizacin de estos actores.
3. Especificacin de la correspondientes vas de comunicacin.
13
A continuacin, para cada uno de estos actores, habrn de identificarse los procesos que inician o en los que participan. Los
casos de uso resultantes deben constituir un modelo de requisitos del sistema.
Los siguientes pasos a seguir en la definicin de casos de uso sern pues:
1. Identificacin de las necesidades de los actores.
2. Designacin de estas necesidades como casos de uso.
3. Identificacin de los casos de uso que pueden ser especializaciones de otros y bsqueda de secuencias parciales comunes
en los casos de uso ya encontrados.
Un enfoque alternativo consiste en prestar inicialmente atencin a los Eventos relevantes que condicionan respuestas del
sistema, y buscar despus qu actores y casos de uso estn relacionados con estos eventos.
Ascensor
<<Info de identificacion>>
Estereotipo
marca:String = SYBSA
modelo:String
numeroSerie:String
<<Info de posicionamiento>>
Restriccion
pisoActual:integer
estadoActual:String
Clase abreviada
Alcance
...
Publico
+ Mover(int,int)
Protegido
# CalcularRuta(integer)
Privado
AlarmaExcesoPeso()
{estadoActual=subiendo
bajando, parado
...
Mueve gente de un piso a otro
Responsabilidades
Calcula ruta que optimiza tiempo
1. Nombre: Distingue a la clase del resto de clases en el mbito del modelo. Consiste en una cadena de cualquier longitud
que puede contener letras, nmeros y signos de puntuacin (exceptuando y ::). Aparece en cursiva en el caso de
las clases abstractas (clases que carecen de instancias). El nombre de clase puede aparecer opcionalmente precedido del
nombre del paquete en que la clase se utiliza; su sintaxis se define pues, en notacin BNF: [paquete::]nombre-simple.
14
2. Atributos: Representan propiedades caractersticas compartidas por todos los objetos de la clase. Una clase puede tener
cualquier nmero de atributos. Un nombre de atributo consiste en una cadena de cualquier longitud que puede contener
letras y nmeros. Sobre ellos pueden proporcionarse diferentes informaciones:
a) Tipo: Atributo:Tipo
b) Valor inicial: Atributo:Tipo=Valor Atributo=Valor
c) Restricciones: Condiciones semnticas que pueden expresarse utilizando cualquier lenguaje, incluido el lenguaje natural, si bien UML tiene un lenguaje semi-formal asociado para expresar restricciones: el lenguaje OCL. Se encierran
siempre entre corchetes. llaves
d) Visibilidad o Alcance: Determina en qu medida otras clases pueden hacer uso del atributo. Un atributo pblico (+)
es visible para cualquier clase externa; un atributo protegido (#) es visible para cualquier descendiente en la jerarqua
de herencia; y un atributo privado (-) es slo visible para la propia clase. El valor por defecto de la visibilidad es
siempre pblico.
e) mbito: Puede ser de dos tipos:
Alcance
AscensorA : Ascensor
Interfaces Las interfaces son conjuntos de operaciones que especifican parte de la funcionalidad (un servicio) proporcionada
por una clase o componente, con independencia de su implementacin. Pueden verse como contratos entre los clientes de la
15
interfaz y sus implementaciones; el programador responsable de la interfaz puede optar por implementar una nueva o bien
adquirir o reutilizar otra implementacin, con tal de que el estipulado contrato se cumpla.
Una interfaz y la clase que la implementa estn relacionadas mediante una realizacin (un tipo particular de relacin de
dependencia), donde una clase puede realizar varias interfaces y una interfaz puede realizarse por ms de una clase. Por otro
lado, una clase cliente puede usar varias interfaces con las que estar relacionada mediante una relacin de uso (otro tipo de
relacin de dependencia).
Las interfaces establecen conexiones entre los componentes de una aplicacin, y representan los principios de modularidad y
ocultacin necesarios en diseos orientados a objetos de calidad.
En cuanto a su representacin diagramtica, las interfaces se muestran como clases sin atributos mediante dos representaciones alternativas que se muestran en la figura 1.14: como clases con estereotipo interfaz y, en forma abreviada, sin mostrar
las operaciones. Al tratarse de un tipo particular de clases, entre las interfaces pueden darse relaciones de herencia. Todas las
operaciones de una interfaz son pblicas.
Dibujable
<<Interfaz>>
Dibujable
ObjetoGrafico
ObjetoGrafico
Dibujar()
Relaciones
Asociacin Es una relacin conceptual, que no es inherente a la naturaleza de las clases sino al papel que juegan en el modelo.
Especifica que las instancias de una clase estn conectadas con las de otra. No se trata de una relacin fuerte, es decir, el tiempo
de vida de dos objetos relacionados es independiente (a menos que exista una restriccin asociada a la relacin que indique lo
contrario).
La representacin grfica de una asociacin (vase la figura 1.15) es bsicamente una lnea que conecta las clases, pero puede
incluir opcionalmente un nombre que da idea de su interpretacin en el dominio de la aplicacin, as como otros adornos en sus
extremos tales como:
Un tringulo relleno que indica su direccin (cuando la asociacin no es simtrica).
Un nombre de rol que cualifica el papel que juega cada una de las partes en la asociacin (una clase puede desempear
distintos roles en distintas asociaciones).
Una indicacin de Navegabilidad, propiedad del rol que consiste en la posibilidad de ir desde el objeto origen al objeto
destino, es decir, implica la visibilidad de los atributos del objeto destino por parte del objeto origen. Por defecto la
navegabilidad es bidireccional, En la figura 1.17 se ilustra una asociacin no bidireccional: dada una password, no se
puede acceder directamente al usuario a que pertenece (al menos en principio).
Un valor de multiplicidad que especifica por cada clase de la asociacin el nmero de objetos que se relacionan con un
solo objeto de la clase asociada.
Una Calificacin, atributo de la asociacin que permite localizar una cierta instancia cuando la multiplicidad de la asiciacin es mayor que la unidad en el extremo considerado. (vase la figura 1.18).
Un smbolo de Agregacin, que indica una asociacin de tipo todo/parte y se representa con un smbolo de diamante
(vase la figura 1.19). Sirve para modelar elementos que se relacionan utilizando expresiones como: es parte de, tiene
un, consta de, etc. Una asociacin de agregacin fuerte, donde las partes (componentes) no pueden existir independientemente del todo que las integra (entidad compuesta), se denomina (Composicin), y se denota mediante un diamante
negro.
Nombre de la relacion
Empresa
Trabaja para
Empleador
Programador
Empleado
16
matriculado en
1..*
Alumno
1..11
Asignatura
*
hace practicas con
0,1
Profesor
Un alumno puede estar matriculado como mnimo en una asignatura (si no est en ninguna no es alumno) y como mximo
en 11.
En una asignatura se puede matricular un nmero ilimitado de alumnos pero tiene que haber al menos un matriculado, o
de lo contrario la asignatura no existe.
Un alumno puede estar haciendo o no el proyecto fin de carrera. En caso afirmativo tendr un profesor asignado como
coordinador.
Existen asignaturas que tienen prcticas y algunas de ellas se realizan entre varios alumnos. Un alumno puede estar asociado con un nmero variable de compaeros para realizarlas, realizarlas individualmente, con un compaero, con dos,
...
Login
Password
Estudiante
1..*
Cursa
1..11
1
Estudiante
Asignatura
Cursa
N. Matricula
1..11
Asignatura
17
Continente
1
1..*
Pais
Motor
Ascensor
Cable
1
1
Cabina
Profesor
P.Asociado
P.Ayudante
P.Interino
P.Titular
Catedratico
T.Completo
T.Parcial
Figura 1.21: Herencia; los nombres de las clases abstractas se escriben en cursiva
18
Pantalla
ObjetoGrafico
DibujarObjeto
Portada
1..1
Titulo
Autor
Paginas
Ver
Idioma
Texto
1..1
Ver
*
referencia a
Consultar
Abrir
Leer
Cerrar
1..1
1..1
> traducido en
> citado en
Libro
traducido
Diccionario
Libro hipermedia
Leer pagina
*
Diccionario
multivolumen
1..1
1 . . 1000
Anexo
video
CDROM
Anexo
Editorial
Anexo
Sonido
Enlace
Contenido
Pagina
destino
Escuchar
Volumen
Rango (AZ)
Activar
hiperenlace
Mecanismos comunes
En los modelos estructurales estticos suele utilizarse todo tipo de mecanismos comunes del UML. Algunos de ellos han
sido mencionados en las secciones anteriores, donde se ha explicado cmo se aaden a las notaciones bsicas de los bloques de
construccin para enriquecer la representacin (smbolos de visibilidad, estereotipos, etc) Definimos brevemente a continuacin
el sentido preciso de los dos ms comnmente utilizados:
Estereotipos. Suponen una extensin del metamodelo del UML, esto es, del conjunto de conceptos (metaconceptos) predefinidos (tales como clase, atributo, caso de uso, etc.) en trminos de los cuales se definen los modelos. Definir un nuevo
estereotipo supone aadir un nuevo concepto por herencia, de modo que constituya un caso particular de algn concepto
19
: Motor
miCoche : Coche
matricula = WWW 1234
modelo = Citroen ZX 1.9 D
color = verde
: AsientoDelantero
: AsientoDelantero
: AsientoTrasero
: Carroceria
: Salpicadero
AWT
Button
Canvas
Label
Checkbox
Figura 1.25: Paquete inluido en las libreras estndar de Java para la implementacin de interfaces grficos
Ascensor
No se tiene en cuenta
el coeficiente de seguridad
del cable
Modelado estructural
Los modelos estructurales son tiles tanto cuando anlisis y diseo se abordan con una perspectiva ascendente (bottom-up)
como cuando se abordan con una perspectiva descendente (top-down). En el primer caso, el objetivo del modelado estructural
ser especificar la estructura de alto nivel del sistema, para lo que se utilizarn clases con significado arquitectural y entidades de
agrupamiento para gestionar la complejidad (paquetes y subsistemas). En el segundo caso, se tratar de especificar la estructura
de bajo nivel, que se ir refinando a medida que progrese el desarrollo (aadiendo detalles, reclasificando, definiendo nuevas
relaciones, etc.).
Para comenzar un desarrollo especificando el modelo estructural esttico es preciso conocer bien el dominio de aplicacin.
De otro modo, ser ms adecuado utilizar, p.e., un mtodo dirigido por casos de uso, y el modelo estructural habr de definirse
en coherencia con los casos de uso o colaboraciones ya especificados.
Un buen modelo estructural debe constituir un esqueleto extensible y refinable a medida que se profundiza en el conocimiento del dominio de aplicacin. En las primeras fases de definicin siempre es preferible limitarse a utilizar las notaciones
20
ms bsicas, dejando las ms avanzadas para aadir detalles en fases posteriores. En particular, es importante evitar limitar los
modelos iniciales aadiendo aspectos propios de fases de implementacin. Tambin debe evitarse mezclar en un mismo diagrama
entidades descritas en niveles de abstraccin diferentes. Finalmente, constutiye tambin una buena prctica organizar las clases
en paquetes cuando empiezan a resultar numerosas.
21
obj 1: Clase A
obj 2: Clase B
obj 3: Clase C
[X] msg
[no X] msg
:Lista
*[hayMasElementos()]siguiente():Elemento
obj2:Clase 1
obj3:Clase 2
mensaje 1
mensaje 2
create
mensaje self
obj4:Clase 3
destroy
22
1:r1:=lanzar()
Jugador
d1:Dado
2:r2:=lanzar()
d2:Dado
bajar
Bajando
Parado
Subiendo
llegar
subir
bajar_stano
timeout
Stano
llegar
Bajando al
stano
Diagrama de actividades Representan asimismo un caso particular de mquinas de estado donde las transiciones entre estados
no son motivadas por eventos externos, sino que tienen lugar espontneamente cuando concluyen las actividades a ellos asociadas.
Modelan el comportamiento del sistema haciendo nfasis en la participacin de los objetos en ese comportamiento. Se centran en
mostrar el flujo de control y datos entre objetos y su comportamiento interno (las acciones que conllevan sus operaciones y cmo
se ven afectados por ellas), en lugar de mostrar su respuesta a eventos. Las mquinas de estado representadas por los diagramas
de actividades soportan tambin concurrencia.
Para disearlos se sugiere seguir la siguiente estrategia:
1. Identificar una clase que participa en el comportamiento que se desea modelar, cuyas actividades de proceso deban ser
especificadas.
2. Identificar las distintas actividades cuyo modelado es de inters.
3. Identificar estados, flujos y objetos.
Este tipo de diagrama es til para modelar el flujo de trabajo de un negocio a alto nivel (vase el ejemplo de la figura 1.32).
Los diagramas de actividades constan de los siguientes elementos:
1. Punto inicial. Representa el estado inicial. Se denota mediante un crculo negro.
2. Punto final. Representa el estado diana. Se denota mediante un crculo negro rodeado exteriormente por otro crculo.
3. Actividades. Estados de actividad donde se ejecutan conjuntos de acciones que pueden describir parcial o totalmente una
operacin de clase o acciones de usuario. Un estado de actividad puede expandirse en un nuevo diagrama de actividades
que suponen una descomposicin funcional de la actividad principal. Se simbolizan mediante rectngulos con bordes
redondeados.
4. Transiciones. Suponen el paso de una actividad a otra. Se representan mediante flechas.
5. Actividades concurrentes. Se representan mediante sus correspondientes actividades y una barra negra de la que parten
las transiciones que las inician.
23
Ducha
Desayuno
Ver tele
Cerrar puerta
Esperar 30 segundos
[Deportista]
Ir andando
[Sedentario]
Pulsar apertura
garaje
Abrir puerta
Abrir puerta
Abrir puerta
Conducir
24
Componente
Interface
<<library>>
listas.dll
1. Se identifican los componentes y posibles particiones del sistema en susbsistemas, determinndose cules son susceptibles
de ser reutilizados, se agrupan por nodos y se realiza un diagrama por cada nodo que se desee modelar.
2. Se identifica cada componente con su correspondiente estereotipo.
3. Se relacionan los componentes entre s.
Cdigo fuente Modelar estos componentes es til para expresar las dependencias que existen entre los mdulos, con vistas a
componer libreras o programas ejecutables (vase el ejemplo en la figura 1.35).
<<file>>
A.h
<<file>>
B.h
<<file>>
Agenda.h
<<file>>
Agenda.exe
25
Diagrama de despliegue
Este diagrama refleja la organizacin del hardware. Su entidad central es el nodo. Los nodos pueden o no tener capacidad
para ejecutar componentes. Un nodo lleva asociado un nombre y un conjunto de componentes (que pueden representarse slo
mediante sus nombres o bien mediante un diagrama de componentes). Cada nodo puede estar fsicamente conectado a otros
nodos. La utilidad principal de este tipo de diagramas es la modelizacin de redes (vase el ejemplo de la figura 1.36).
Servidor
BD
Oracle
Cliente
Palencia
Ap. Ventas
Cliente
Madrid
Cliente
Barcelona
Ap. Ventas
Ap. Ventas
Tutorial posterior
Resumen de contenidos
ste es el captulo introductorio donde se aborda cmo es la divisin en fases de un proyecto (ciclos de vida), las caractersticas de las metodologas que ordenan esas fases y una notacin muy habitual actualmente que se utiliza a lo largo de todo el ciclo
de vida de un proyecto.
1. Metodologas: Es una justificacin del porqu de la ingeniera del software. Se define lo que se entiende por sistema y
por metodologa (una forma podra decirse burocrtica de producir un sistema con costes y tiempos controlados). Se
establece tambin una clasificacin de las metodologas que, al igual que como se ver con los ciclos de vida, pertenecen
a dos tipos principales: estructurada y orientada a objetos.
2. Ciclos de vida: Se explica lo que es un ciclo de vida, las fases de las que se compone y la forma en la que se ordenan estas
fases. Hay una clasificacin de los distintos ciclos de vida que se pueden dar en un proyecto. Bsicamente, hay dos tipos
principales que son: el ciclo de vida en cascada (el ms antiguo y preferido en la metodologa estructurada) y el ciclo de
vida en espiral (el ms nuevo, preferido en la metodologa orientada a objetos) que se dividen a su vez en varios subtipos
para cumplir diferente propsitos. Los ciclos de vida son:
a) Ciclo de vida en cascada. Subtipos: ciclo de vida en V, Sashimi, cascada con subproyectos, cascada incremental y
cascada con reduccin de riesgos.
b) Ciclo de vida en espiral. Subtipos: Fuente y adems los subtipos cascada incremental y cascada con reduccin de
riesgos que tambin se pueden considerar como ciclos de vida en espiral.
c) Notaciones de especificacin y diseo (UML): Se da una introduccin breve a la notacin UML. Existen libros muy
completos al respecto, aqu solo se dan nociones bsicas para comprender un diagrama. El motivo de explicarlo en
este tema es que se trata de una notacin que se puede seguir a lo largo de todas las fases del ciclo de vida.
26
3.
4.
5.
6.
cual est en un continente o como mucho en dos (p. ej Rusia). En una casa viven personas y el nmero de personas que
viven en una casa puede ser cualquier nmero. Una persona puede vivir en ms de una casa (por ejemplo, durante el verano
en una y en el invierno en otra). Una casa es poseda por una o varias personas.
Represente la siguiente situacin en UML:
Una persona pertenece a tres posibles grupos: Estudiante, Trabajador o Jubilado. Un trabajador puede tener empleo o no
y puede cambiar entre cualquiera de estos casos siendo despedido si est trabajando o siendo contratado si est parado.
Cuando llega a los 65 aos pasa a estar jubilado, a su vez, un estudiante pasa a ser un trabajador cuando acaba sus estudios.
Un jubilado no cambia de estado (y si cambia, mal asunto).
En el ejercicio anterior con los tres grupos de personas, Cmo representara en un diagrama de clases a un estudiante que
trabaja al mismo tiempo?
Represente la siguiente descripcin en UML:
Un paracaidista se tira desde un avin, momento a partir del cual est cayendo deprisa. Pueden pasar dos cosas: el paracadas se abre o no se abre. Si no se abre existe un segundo paracadas de emergencia que se despliega tirando de una anilla.
Nuevamente pueden pasar dos cosas. Si todo sale bien, tanto con el primero como con el segundo se pasa al estado de
cayendo despacio. Se puede estar cayendo deprisa un mximo de 30 segundos y cayendo despacio un tiempo que oscila
entre 0 y 5 minutos en funcin del momento en el que se abra uno de los paracadas. Al final el paracaidista llega al suelo.
Represente esta situacin en UML:
Un objeto A (cliente) hace una llamada a un objeto B (interfaz) que se encarga de crear un objeto C (servidor) si no existe
ninguna instancia de C. En caso contrario no hace nada, es decir, slo puede existir una instancia de C. En cualquier caso
devuelve a A una referencia al objeto C, entonces A invoca una funcin de C, tras lo cual A imprime un mensaje y se
autodestruye.
Extensin de conocimientos
Este tema tambin se puede estudiar en [Som98, cap. 1], [Haw98, caps. 1 al 3] [Sch92, caps. 1 y 2]. Se pueden refrescar
conocimientos previos en [CCEG00] y otros libros especficos de asignaturas previas o simultneas sobre Ingeniera del Software,
por ejemplo en [Hum95] [Hum01].
La revista en lnea Software Development http://www.sdmagazine.com/, puede ser una buena fuente para encontrar
artculos (en ingls) sobre temas de IS en general. Dentro de The Collection of Computer Science Bibliographies. Tambin
puede ser interesante la gua al SWEBOK (Software Engineering Body of Knowledge) en http://www.swebok.org/ que es una
iniciativa conjunta del IEEE y la ACM para expresar el conjunto de conocimientos bsicos en Ingeniera del Software.
Sobre el lenguaje UML se pueden extender conocimientos en varios libros especficos del tema como [JBR00a, JBR00b,
Fow97] [Sch01b], o bien a travs de las pginas de Internet: http://www.omg.org/technology/uml/ del Object Managenemt Group (OMG).
Hay una herramienta de libre distribucin para la representacin mediante diversos mtodos (incluido UML) en http:
//wwwhome.cs.utwente.nl/~tcm/ llamada TCM (Toolkit for Conceptual Modeling). En http://argouml.tigris.org/ se
puede encontrar A RGO UML que es una herramienta libre (implementada en Java y licencia BSD) especfica para la representacin en UML. Tambin se puede encontrar informacin en http://uml.sourceforge.net/index.php sobre el programa UML Object Modeller (para KDE en GNU/Linux) para dibujar diagramas de UML. La herramienta Eclipse, en http:
//www.eclipse.org tiene plugins para UML y algunos son gratuitos. Se pueden encontrar en http://eclipse-plugins.2y.
net/eclipse/index.jsp.
Captulo 2
28
Uno de los requisitos de la aplicacin es que sea segura, es decir, que no puedan existir terceras personas escuchando, para
ello se puede utilizar el protocolo https. La aplicacin tiene dos partes:
Oferta
1. Cada producto tiene: Foto, descripcin, Cdigo, PVP.
2. Ofertas (p. ej.: Lleve dos y pague tres, etc): Las ofertas son diferentes en funcin de que el cliente sea una persona o una
empresa, y tambin dependiendo de si es o no un buen cliente, por tanto hay que guardar toda la informacin relativa a
cada venta.
3. Forma de hacer pedidos: Se rellena un formulario. Si es la primera vez que se hace el pedido, el cliente rellena un formulario
de datos personales y bancarios que se almacenan en una base de datos.
Demanda
1. Hay una lista de artculos demandados con el mximo nmero de unidades que se admiten y que los mayoristas pueden
consultar.
2. La oferta de un mayorista consiste en una lista de:
a) Nombre de artculo.
b) Precio unitario.
c) Cantidad de artculos a partir de la cual se tiene ese precio unitario. (Cuantos ms artculos se compren menor es ese
precio)
3. Una vez hecha una oferta se almacena en una base de datos.
4. Existe la posibilidad de que el mayorista ofrezca artculos que no estn en la base de datos (novedades).
Cada una de estas ofertas es un lote de productos que el mayorista vende juntos. Un mayorista puede hacer mltiples ofertas. En
funcin de las ofertas de los proveedores se toman las decisiones de seleccionar uno u otro. Las ofertas pueden ser complejas,
pudiendo ofertar un mismo artculo a precios diferentes en funcin de la cantidad de artculos o en ofertas que consisten en un
lote de productos.
29
Base de datos
Servidor
Clientes
Una aplicacin en el lado del proveedor que dialoga con la nuestra
En el cliente estaran todos los formularios y se mandara el contenido en la forma de los objetos adecuados al servidor.
Caso de uso: Actualizando contenidos
Actor: Gestor
Curso normal
Alternativas
1) El gestor se identifica correctamente
1.1 ) El gestor no se identifica
correctamente. Se anota la
incidencia. Fin
2) El gestor introduce nuevos elementos
en la B.D. de productos con sus cantidades
y precios de venta al pblico. Cambia las
cantidades de algunos productos
3) El sistema actualiza la B.D. de
productos y registra fecha, gestor, y
cambios realizados
Cuadro 2.5: Caso de uso para actualizar contenido de pgina
30
Personas
31
Empresa
chips
Aptitudes
Productos
Tareas
Produccion
Pedidos
Clientes
Produccion
Productos
Tareas
Gestion
Almacen
1
Gestion
Personas
2
Pedidos
Clientes
Aptitudes
Personas
32
Los datos se pueden guardar de dos formas: en una base de datos o en ficheros. Ambos mtodos tienen sus ventajas e
inconvenientes. En cualquier caso los datos que se guarden como secretos deben ser cifrados (usando alguno de los algoritmos
criptogrficos que hay publicados) con la clave que se pide al usuario para de esa forma evitar cualquier tipo de intrusin.
En algn lugar de la interfaz de usuario hay que poner un reloj (no se especifica si analgico o digital) y la fecha. El reloj
tiene precisin de segundos.
Al igual que antes, los casos de uso para libros, discos, etc seran idnticos a este.
33
Borrado
En este caso necesitamos hacer una bsqueda primero y luego un borrado.
Veamos cmo se borrara una persona. Puede hacerse de dos formas, como en el buscar persona.
Caso de uso: Borrar persona 1.
1.
2.
3.
4.
5.
Como estos dos casos de uso son prcticamente idnticos podramos pensar en utilizar la parte comn.
Divisin del sistema
Veamos cmo sera la divisin del sistema. Las entidades externas seran los usuarios (ver figura 2.3). Los procesos que hay
que hacer son:
Insercion
Consulta
Borrado
Modificacion
Agenda
Usuario
Creacion
Borrado
Acceder como
34
Consulta
Insercion
Gestion
Libros
Consulta
Borrado
Gestion
Musica
Borrado
Modificacion
Modificacion
Nuevo Usuario
Borrar Usuario
Gestion
Usuarios
Usuario
Acceder Como
Insercion
Insercion
Consulta
Gestion
Videos
Consulta
Gestion
Personas
Borrado
Borrado
Modificacion
Modificacion
Tutorial posterior
Resumen de contenidos
Este captulo consiste simplemente en un conjunto de tres ejemplos que se plantean, tanto en su descripcin, como en el
diseo o preparacin de plantillas de su posible solucin. Estos ejemplos podrn ser utilizados a lo largo del resto de los temas
para ilustrar algunos aspectos de los mismos.
Los ejemplos elegidos son: una aplicacin de comercio en Web, la gestin de proceso en una fbrica de productos elctricos
y una agenda electrnica personal.
Extensin de conocimientos
En [Pre01, sec. 28.5] se encuentra una descripcin de un sistema de comercio electrnico, que puede usarse para extraer ms
informacin y descripciones para el primer ejemplo de este captulo. En el apndice A.3 del libro [Som98], se puede encontrar
un conjunto de ejemplos gua alternativos desarrollados en las diferentes fases que pueden resultar muy tiles.
Hay una aplicacin para tienda electrnica de libre distribucin (fuentes incluidos), desarrollado en modo open source (licencia GPL) por O NRICA por encargo de BANESTO, en http://www.cibertienda.org/ que puede servir de gua para el ejemplo
aqu presentado.
Captulo 3
Fase de requisitos
Tutorial previo
Introduccin
El primer paso para atacar un problema es conocerlo con detalle, es decir, cuales son los requisitos funcionales que se deben
cumplir y qu restricciones hay que tener en cuenta que no forman parte de los requisitos funciales. La extraccin u obtencin
de requisitos es el primer paso, que va seguido del anlisis de esos requisitos en base a un modelo del problema. De ese anlisis
obtendremos una especificacin de requisitos que debemos validar frente a las especificaciones iniciales.
Esta fase es la primera que se acomete en el desarrollo del proyecto y es la ms importante porque las consecuencias de un
error en la etapa inicial de un proyecto tiene un coste muy alto en tiempo y dinero. La realizacin de una buena especificacin
no es tan sencillo como se puede pensar en un principio, pues muchas veces el propio cliente no tiene una imagen clara del
sistema final o surgen nuevas necesidades a mitad del desarrollo. Para hacer frente a estos problemas hay que: comunicarse de
forma efectiva con el cliente para obtener los requisitos, comprender el problema a resolver, crear un modelo del problema real
y, por ltimo, revisar la especificacin creada. Todos estos pasos deben dejar un rastro que se pueda seguir en caso de problemas
posteriores (trazabilidad), por lo cual se debe empezar a documentar todo (guardar registro de todas las actividades) desde el
principio.
36
Fase de requisitos
y los lenguajes ms formales en ingeniera. Por lo tanto la obtencin de los requisitos es un paso complejo y que no tiene una
solucin sencilla. Se suelen utilizar los mtodos de pregunta-respuesta o los de cuestionarios plantilla para perfilar la versin
inicial, pero se requieren sucesivas iteraciones (incluso con otras fases de desarrollo) antes de obtener unas especificaciones
adecuadas.
3.1.1. Introduccin
Un requisito es una capacidad que el sistema debe tener porque el cliente lo ha pedido explcita o implcitamente, lgicamente, la determinacin del conjunto de requisitos es el primer paso a dar en la construccin de una aplicacin. Existen dos subtareas
en la obtencin de los requisitos antes de pasar a la fase de diseo:
Anlisis: El problema a resolver es la comprensin del problema del cliente para, de este modo, conseguir una lista de las
caractersticas que debe tener el producto.
Especificacin: Consiste en traducir los requisitos a un documento con un formato concreto que pueda servir de entrada a
la fase siguiente.
La obtencin de requisitos es difcil por varias razones:
La naturaleza de los requisitos es cambiante.
Surgen nuevos requisitos en cualquier momento.
El cliente puede no tenerlos claros.
Pueden existir malos entendidos debidos a:
Falta de conocimientos por parte del equipo desarrollador sobre el problema.
Falta de conocimientos tcnicos (informticos) por parte del cliente para expresarse con claridad.
Anlisis
La clave es la comunicacin con el cliente. Para facilitar esta comunicacin se han desarrollado varias tcnicas: entrevistas,
prototipos, desarrollo conjunto de aplicaciones (Joint Application Development, JAD), planificacin conjunta de requisitos (Joint
Requirements Planning, JRP) y casos de uso del UML.
Especificacin
El resultado que se persigue aqu es un documento que especifica todos los requisitos, este documento tiene que tener estas
propiedades:
Completitud: Estn todos los requisitos.
Concisin: Es importante no hacer una novela, hay que contar lo que hay pero pensando que quien se lea el documento
cobra por horas.
Legibilidad: Es similar al punto anterior, pero el sentido de este es la claridad.
Consistencia: No existen contradicciones internas.
Facilidades de prueba: De algn modo se debe poder comprobar cada uno de los requisitos.
Facilidades de cambio: Es bastante probable que el documento cambie a lo largo del ciclo de vida.
Facilidades de seguimiento: Debe ser posible comprobar si se van cumpliendo los objetivos.
Factibilidad: Los objetivos definidos deben ser conseguibles a un coste razonable.
Tipos de requisitos
Requisitos funcionales: Dicen qu debe hacer el sistema, en el sentido de servicios proporcionados al usuario.
Requisitos no funcionales: Hablan de caractersticas del sistema, como pueda ser la fiabilidad, mantenibilidad, sistema operativo, plataforma hardware, etc.
Preparacin
37
En general para cualquier entrevista hay cuatro temas que se han de tener en cuenta:
1. Documentacin: El entrevistador se informa acerca del tema a tratar. Puede hacerlo de varias formas:
Estudiar la bibliografa sobre el tema.
Estudiar documentos sobre proyectos similares.
Inmersin dentro de la organizacin para la que se desarrolla el proyecto
2. Personal: Se seleccionan las personas a las que se va a entrevistar.
Directivos: Dan una imagen de alto nivel de la empresa. Puede ser til para determinar la estructura arquitectnica
de la aplicacin.
Empleados: Dan una imagen de un grano ms fino. Son los que pueden concretar las funciones a implementar.
3. Determinar el objetivo de la entrevista. Previamente a la entrevista se pueden distribuir a los entrevistados cuestionarios
sobre el tema a tratar y una introduccin.
4. Logstica: Temas prcticos acerca de como discurre la entrevista: lugar, hora, minimizar interrupciones, encontrar un
momento en el que todos puedan ir, etc.
Desarrollo Hay tres etapas [PV96]:
1. Apertura: El entrevistador se presenta e informa al entrevistado de cuales van a ser los puntos tratados en la entrevista.
2. Desarrollo: No debe durar ms de dos horas. El entrevistado debera hablar el 80 % del tiempo.
Tcnicas utilizadas:
Preguntas abiertas, tambin conocidas como de contexto libre. No se pueden contestar con Si o No. Por ejemplo: Cul es la lista de pasos para dar de baja un producto?. Ms tarde se pasa a preguntas ms concretas.
Forma de expresarse: Se deben evitar los tecnicismos que el entrevistado pueda no conocer.
Psicologa: El problema fundamental de las entrevistas es que se trata con personas en vez de con mquinas, por eso
la informacin conseguida puede tener omisiones o imprecisiones. Hay que tener en cuenta las siguientes reglas entre
muchas otras de la comunicacin no verbal.
No insinuar que el entrevistado debera saber algo que no sabe para que no se ponga a la defensiva. Tambin
hay que dejar claro que los intereses del entrevistador son nicamente la adquisicin de requisitos, no hacer un
examen de conocimientos, y por tanto las lagunas que pueda tener no trascendern a sus superiores.
Lenguaje del cuerpo: Dicen los psiclogos que el 90 % de la comunicacin es no verbal. Se debe estar atento a
los signos que puedan denotar inseguridad en algunos temas para preguntar a otras personas.
Usar tcnicas para mantener la atencin del entrevistado.
3. Terminacin: Se hace un resumen de la informacin recogida (para validar que es correcta) y, de ser necesario, se cita
para la siguiente entrevista. En cualquier caso se debe poder contactar de nuevo con el interesado, por ejemplo para aclarar
algunos puntos. Se agradece al entrevistado que nos haya dedicado su tiempo.
Anlisis Se trata de ver como utilizar los conocimientos adquiridos. Para ello las actividades son:
1. Burocracia, como por ejemplo, pasar a limpio la entrevista.
2. Asimilacin de la informacin: Se contrasta con otras entrevistas, bibliografa, etc. Se llega a conclusiones.
3. Evaluacin de la entrevista: Qu se quera conseguir y qu se ha conseguido?
Para validar una vez ms la entrevista se puede mandar la documentacin generada al entrevistado.
Desarrollo conjunto de aplicaciones (JAD)
En el apartado anterior se vio una somera introduccin a una entrevista clsica desde el punto de vista de que existe un
entrevistador y un entrevistado. Ahora se contempla un tipo de entrevista desarrollada por IBM que se apoya en la dinmica de
grupos. Consiste en un conjunto de reuniones en un periodo de entre dos y cuatro das. Se basa en cuatro principios:
1.
2.
3.
4.
Dinmica de grupo.
Uso de ayudas audiovisuales: Diagramas, transparencias, pizarras, etc.
Modo de trabajo sistemtico.
Filosofa de documentacin WYSIWYG (What You See Is What You Get).
Existen dos tipos de sesiones JAD: JAD/Plan, para obtencin de requisitos y JAD/Design, para el diseo. Veremos el primero.
38
Fase de requisitos
39
1. Iniciacin: Se delimita el alcance del plan de sistemas de informacin, unidades organizativas afectadas y perfiles necesarios para la reunin.
2. Bsqueda: Se identifican objetivos, situacin actual e informacin al respecto.
3. Lugar: Es importante que al igual que en la sesin JAD sea fuera de la organizacin para evitar interrupciones. La sala
de reuniones debe ser adems confortable y equipada con el mobiliario adecuado. Las ayudas audiovisuales pueden ser
pizarras, proyectores, etc. Se debe contar adems con ordenadores equipados con herramientas CASE, procesadores de
texto, hojas de clculo y herramientas de prototipado.
4. Seleccionar a los participantes. Los perfiles son los siguientes:
Jefe JRP: Debe tener las mismas aptitudes que en el caso del JAD.
Patrocinador: El que respalda econmicamente el proyecto.
Director del proyecto
Consultores: Traduce los requisitos de usuario a informacin estructurada inteligible por los usuarios.
Especialista en modelizacin: Elabora los modelos en la reunin.
Usuarios de alto nivel: Definen los procesos organizativos y los sistemas de informacin afectados por el plan de
sistemas de informacin y las prioridades de implantacin.
5. Redactar la agenda de asuntos a tratar. Esta agenda debe ser planificada asignando tiempos para cada cuestin.
6. Realizacin: Discurre igual que la sesin JAD.
Brainstorming
Este es otro tipo de entrevista de grupo. A diferencia del JAD que est fuertemente estructurada, el brainstorming (tormenta de
ideas) se caracteriza precisamente por lo contrario, porque aunque existe un jefe del grupo, su funcin es meramente anecdtica.
El objetivo es la generacin de ideas novedosas para la resolucin de un problema. Su utilizacin es adecuada al principio del
proyecto, pues puede explorar un problema desde muchos puntos de vista.
Ventajas del brainstorming:
1. Es fcil (la nica norma es que vale todo y no se puede criticar a nadie).
2. No est tan formalizado como el JAD.
Inconvenientes:
1. No proporciona resultados con mucho nivel de detalle.
2. Es difcil reunir a todo el mundo.
Fases del Brainstorming:
1. Preparacin
Se selecciona a las personas involucradas, es decir: Jefe de la reunin, usuarios y desarrolladores.
Se les convoca a una hora y en un lugar determinados.
2. Desarrollo: El jefe expone el problema a resolver, entonces cada persona expone sus ideas para la solucin. El jefe da la
palabra a una persona u otra. Cuando se han generado suficientes ideas se termina la reunin. Normas a seguir:
No se permite la crtica a ningn participante, diga lo que diga.
Se promueven las ideas ms creativas aunque no sean factibles para estimular la creatividad del resto del grupo.
Cuantas ms ideas salgan mejor.
Los participantes pueden aadir ideas propias a las ideas de otros.
3. Consolidacin: Es similar a la fase de anlisis en la entrevista individual o la fase de organizacin de la documentacin de
JAD. Se divide en tres partes
Clasificar ideas para agruparlas o fusionarlas.
Descartar ideas peregrinas o poco factibles.
Priorizar ideas en funcin de su importancia.
4. Documentacin: El jefe pone por escrito la informacin que sale de la fase de consolidacin.
40
Fase de requisitos
Prototipos
Un prototipo es una versin reducida de la aplicacin final. Se puede construir con dos filosofas[Som98]:
1. Prototipos de desarrollo rpido. Sirven para obtener y validar requisitos. Cuando han cumplido esta finalidad se desechan.
2. Prototipo inicial: Se desarrolla el sistema de un modo incremental partiendo de una versin inicial.
El segundo caso se ha discutido ya en el captulo dedicado a ciclos de vida. El primer caso sigue el proceso indicado en la figura
3.1.
Requisitos
iniciales
Desarrollo
prototipo
Evaluacion
Especificacion
Desarrollo
sistema
Validacion
41
2. Los componentes existen, pero no son exactamente lo que se necesita y hay que adaptarlos.
El desarrollo de prototipos con reutilizacin se puede hacer a dos niveles:
1. Nivel de aplicacin: Los sistemas que componen la aplicacin pueden ser compartidos por otras aplicaciones. Por ejemplo:
se puede insertar un grfico desarrollado con una aplicacin en otra. Las aplicaciones actan como si estuvieran conectadas
entre si al estilo de las tuberas de Unix.
2. Nivel de componente: Los componentes estn integrados en un armazn estndar, como puede ser un lenguaje de desarrollo de componentes, por ejemplo: P YTHON o P ERL o algo ms general como CORBA, DCOM o JAVA B EANS.
JAVA B EANS es un ejemplo de componentes reutilizables. Son un tipo de componentes escritos en Java, que generalmente tienen
algn tipo de interfaz grfica (Enterprise-JavaBeans sin embargo no es as, pues se ocupa ms de la lgica de la aplicacin). Sus
caractersticas son:
1. Tienen un constructor predeterminado sin parmetros (es decir, un bean es una clase que cumple una serie de restricciones)
2. Son persistentes. La persistencia es la capacidad de un objeto de convertirse en un flujo de bytes para por ejemplo poder
ser escrito en disco o recuperado del mismo.
3. No son nunca clases abstractas, es decir, siempre se pueden crear instancias de ellos.
4. Para escuchar un evento se usan estas dos funciones:
public void addEventListenerType(EventListenerType evento)
public void removeEventListenerType(EventListenerType evento)
5. La forma de dar valor o conocer el valor de una propiedad es con mtodos de la forma: getX() y setX(Propiedad
propiedad). Si la propiedad es booleana en vez de getX() se usa isX(). Si la propiedad es indexada se utiliza: getX(int
index) getX() que devuelve un array y los mtodos para asignar valor seran: setX(int index, propiedad)
setX(Propiedad[] propiedad).
Casos de uso
Son una forma de especificar los requisitos de un sistema. Un caso de uso consiste en una interaccin de algo externo al
sistema y el sistema. Fueron introducidos por Jacobson en 1992. Aunque es una tcnica definida dentro del ambiente del anlisis
orientado a objetos no tiene que ver con objetos, se podra utilizar perfectamente dentro del anlisis estructurado. Ms adelante
veremos la tcnica de los casos de uso con el ejemplo gua (ver tema 2) de la aplicacin web. Un caso de uso:
Describe la interaccin entre un actor externo al sistema y el sistema con texto en lenguaje natural.
Representa los requisitos funcionales desde el punto de vista del usuario y por lo tanto produce un resultado observable
por l.
Es iniciado por un nico actor.
Realiza una funcionalidad concreta.
Los objetivos de los casos de uso son:
Comprender la funcionalidad del sistema.
Discutir con el usuario nuestra visin de esa funcionalidad.
Identificar conceptos del sistema, clases, atributos y operaciones.
Validar el anlisis y el modelo del diseo.
Proporcionar informacin para las pruebas del sistema y de aceptacin.
Existen dos tipos de elementos:
1. Actores: El actor puede ser tanto una persona como otro sistema que juega un rol en la interaccin con el mismo. Un
mismo rol puede ser desempeado por varias personas y una persona puede desempear ms de un rol. Un usuario no es
un actor, sino que asume un rol cuando interacta con el sistema y por lo tanto funciona como un tipo de actor.
2. Caso de uso: Es la interaccin que se quiere modelar. Pueden agruparse en paquetes y tener relaciones entre ellos.
Identificar actores Un caso de uso se compone de actores y de interacciones de esos actores sobre el sistema. por lo tanto, lo
primero es buscar actores. Teniendo en cuenta lo que es un actor, hay que encontrar la siguiente informacin:
1. Identificar los usuarios del sistema. Para ello tener en cuenta para quien se est diseando o con que personas va a
interactuar de un modo directo (actores principales) y quienes va a tener un papel de supervisin o mantenimiento del
sistema (actores secundarios).
2. Identificar los roles que juegan esos usuarios desde el punto de vista del sistema. Hay varios tipos, gestores de alto nivel,
gente que introduce datos, etc.
3. Identificar otros sistemas con los cuales exista comunicacin. Estos sistemas tambin se consideran como actores dado
que son algo externo a nuestro sistema.
42
Fase de requisitos
Identificar operaciones Una vez que se tienen los actores se trata de encontrar los casos de uso, como lo que tenemos en este
momento son los actores, partimos de esta base para encontrar la informacin que falta. Los actores interactuaran con el sistema
realizando un conjunto de tareas que tendremos que enumerar y manejarn informacin, tanto la que suministren al sistema
como la que el sistema les suministre a ellos. Una vez que se dispone de los actores y de los casos de uso hay que encontrar las
relaciones que hay entre ellos. Las relaciones que hay entre casos de uso son de dos tipos:
Aquellas en las que uno extiende a otro: Son muy parecidos (comparten muchos pasos) pero tienen ligeras diferencias
adaptadas a la forma particular en la que se realiza una tarea.
Aquellas en las que uno usa a otro: En esta situacin un caso de uso es similar a una funcin o subrutina que es llamada
por otro.
Otra forma de hallar casos de uso es hacer una lista de eventos. Un evento es una ocurrencia a la que el sistema tiene que
responder. No supone un dilogo como un caso de uso porque ocurre de un modo atmico. Los pasos a seguir en este caso son
por un lado identificar todos los eventos a los que el sistema tiene que responder y luego relacionarlos con los actores adecuados.
Una vez identificados estos casos de uso podemos sacar otros nuevos de varias formas:
1. Por variaciones respecto a casos de uso existentes si:
Existen diferentes actores que puedan utilizar un mismo caso de uso pero con variaciones significativas.
Existen diferentes versiones del mismo caso de uso con variaciones significativas.
2. Buscando el caso de uso opuesto a uno dado, por ejemplo, si tengo dando de alta cliente podra existir el caso de uso dando
de baja cliente
3. Preguntarnos que tiene que ocurrir para que se cumplan las precondiciones de un caso de uso, por ejemplo, para hacer un
pedido es necesario que el cliente entre con su password, con lo que tiene que existir un caso de uso para dar de alta.
Dar detalle a los casos de uso descritos Esto que se ha descrito hasta ahora es la forma de construir un armazn de casos de
uso, veamos como se pueden concretar un poco ms. Para cada caso de uso hay que:
Describir la informacin de entrada y de salida.
La descripcin detallada del caso de uso contiene:
Una descripcin textual de su objetivo.
Variantes posibles para realizar este caso de uso. Diagramas de interaccin de detalle (de secuencia o colaboracin).
Errores y excepciones posibles.
Relacionar el caso de uso con la interfaz de usuario que lo representa.
Especificar el dilogo que da solucin al caso de uso.
La descripcin de un caso de uso consta de los siguientes elementos:
1.
2.
3.
4.
Aplicacin al Ejemplo A del captulo 2: Veamos primero el caso de uso Dando de alta cliente del ejemplo A en el captulo 2
(ver tabla 3.1). El cliente se relaciona con el sistema con un navegador y lo hace desde su empresa. Una vez terminado, el cliente
queda registrado en la base de datos de la empresa propietaria de la pgina web.
En este ejemplo vemos un caso de uso que opcionalmente puede utilizar a otro (Recogiendo pedido de cliente). En el ejemplo
de la aplicacin web los casos de uso podran ser: Dando de alta cliente, Dando de alta proveedor, Recogiendo pedido de cliente,
Recogiendo oferta de proveedor, Actualizando contenido de la pgina, Solicitando reposicin y Seleccionando proveedor. El
caso de uso seleccionando proveedor puede ser utilizado por otro caso de uso o por el actor Gerente. En la figura 3.2 tenemos la
representacin de las relaciones entre casos de uso.
Actores y casos de uso abstractos
Un caso de uso que slo exista para ser utilizado por otros casos de uso se dice que es abstracto. Como ese caso de uso no
tiene un actor que lo utilice, nos inventamos un actor ficticio (abstracto). En el ejemplo A del captulo 2 tenemos el caso de
uso abstracto Seleccionando proveedor. El actor abstracto que creamos para este caso le damos el nombre: Seleccionador de
43
Extiende
Extiende
Actualizando contenidos
Cliente
Proveedor
Solicitando reposicion
Gestor
Seleccionador de
proveedor
Proveedor
44
Fase de requisitos
Definicin
La validacin de los requisitos comprueba que estos son correctos. Esta fase debe realizarse o de lo contrario se corre el
riesgo de implementar una mala especificacin, con el costo que eso conlleva.
Los parmetros a comprobar por la especificacin son [Som01]:
1. Validez: No basta con preguntar a un usuario, todos los potenciales usuarios pueden tener puntos de vista distintos y
necesitar otros requisitos.
2. Consistencia: No debe haber contradicciones entre unos requisitos y otros.
3. Completitud: Deben estar todos los requisitos. Esto es imposible en un desarrollo iterativo, pero, al menos, deben estar
disponibles todos los requisitos de la iteracin en curso.
4. Realismo: Se pueden implementar con la tecnologa actual.
5. Verificabilidad: Tiene que existir alguna forma de comprobar que cada requisito se cumple.
El contenido de este apartado se completa con [Pre01, sec. 11.6].
45
El documento de especificacin de requisitos SRS (Software Requirements Specification) es como el contrato oficial que se
establece entre los desarrolladores y los clientes. Incluye tanto los requisitos funcionales como los no funcionales. Una recoleccin correcta y completa es crucial para el desarrollo de un sistema de informacin exitoso. Para alcanzar el mayor grado de
calidad es esencial que el SRS sea desarrollado de un modo sistemtico e inteligible, en cuyo caso reflejar las necesidades del
usuario y ser til para todos. Lo que sigue es una plantilla del SRS segn el estndar IEEE 830.
En la portada se indican: Nombre de la empresa, Nombre del proyecto, Nmero de versin y Fecha.
El ndice debe constar de las siguientes secciones: Introduccin, Descripcin general, Requisitos especficos, Gestin del
cambio del proceso, Aprobacin del documento e Informacin de soporte. El desarrollo del ndice anterior debe contener la
siguiente informacin:
1. Introduccin. Las siguientes subsecciones dan una visin general del documento.
a) Propsito: Identifica el propsito del documento y el perfil de usuario al que est dirigido.
b) Alcance. En esta subseccin:
Se identifica el nombre de los productos software que se van a desarrollar.
Se explica lo que hacen los productos y lo que no hacen.
Se describen las aplicaciones del software especificado, incluyendo beneficios y objetivos.
Se debe ser consistente con especificaciones similares de ms alto nivel si existen, es decir, en el caso de que
estas sean las especificaciones de un subsistema.
c) Definiciones, acrnimos y abreviaturas: Es un listado de las definiciones de todos los trminos, acrnimos y abreviaturas necesarios para interpretar correctamente el SRS. La informacin puede ser proporcionada con referencias a
apndices.
d) Referencias:
Se da la lista completa de todos los documentos referenciados en cualquier lugar de la SRS.
Se identifica cada documento por ttulo, versin, fecha y responsable de su redaccin.
Se especifican las fuentes desde las que se pueden obtener las referencias.
e) Visin de conjunto: Describe la organizacin general de la SRS.
2. Descripcin general: Describe los factores generales que afectan al producto y sus requisitos. No se definen requisitos
especficos (seccin 3), slo su contexto.
a) Perspectiva del producto: Relacin del producto con otros similares. Si el producto es independiente y autocontenido
se debe decir aqu. Si es un componente de un sistema mayor aqu deben estar los requisitos para que el sistema mayor
lo pueda utilizar e identifica las interfaces entre el sistema y el software. Se puede poner un diagrama de bloques para
mostrar las interconexiones del sistema con otros e interfaces externas.
b) Interfaces del sistema: Identifica la funcionalidad del software y la descripcin de la interfaz. Especifica:
Caractersticas lgicas de cada interfaz entre el producto y sus usuarios.
Todos los aspectos relativos a la optimizacin de la interfaz con los usuarios.
1) Interfaces hardware: Se especifican las caractersticas de cada interfaz entre el producto y los componentes
hardware. Incluye la configuracin, dispositivos soportados, cmo son soportados y protocolos.
2) Interfaces software: Es una lista de otros productos software e interfaces con otras aplicaciones.
a Para cada producto se debe incluir: Nombre, Mnemnico, Nmero de versin y Fabricante.
b Para cada interfaz se debe desarrollar en: Motivos para interactuar con el producto y Definicin de la interfaz
acerca de contenido de los mensajes y formatos.
3) Interfaces de comunicaciones. Por ejemplo protocolos de comunicaciones.
c) Restricciones de memoria.
d) Operaciones normales y especficas tales como:
1)
2)
3)
4)
46
Fase de requisitos
Tutorial posterior
Resumen de contenidos
En este captulo se ven las formas de captura de requisitos y su representacin. La finalidad de esta fase es producir un
documento que represente los requisitos y que sirva de entrada para la fase de diseo. El anlisis es la forma de conseguir los
47
48
Fase de requisitos
Extensin de conocimientos
Sobre la obtencin, anlisis y representacin de requisitos tambin se puede estudiar en [Som98, cap. 2 y 3], [Haw98, caps.
5 al 10] [Sch92, caps. 3 y 4]. Sobre el anlisis orientado a objetos tambin se puede ver [RBP+ 96].
El libro [GW89] completo es especfico sobre requisitos.
O UTREACH P ROJECT T OOL es una plataforma de libre distribucin para gestin de proyectos a travs de Web muy orientada
al manejo de los requisitos y la comunicacin entre desarrolladores y clientes. Ver en http://outreach.sourceforge.net/
(hay enlace a una demo interactiva).
Captulo 4
Fase de diseo
Tutorial Previo
Introduccin
Una vez que se han identificado los requisitos para el problema, es necesario idear y componer la forma de la solucin para
el problema. El diseo es la fase en la que se estudia el problema, se identifican las caractersticas que tendra una solucin y
se analiza a su vez cada una de esas caractersticas. En la fase de diseo es ms efectivo utilizar patrones y modelos conocidos
para ir resolviendo partes del problema, es decir modularizar el problema y proyectarlo en mdulos en la solucin. Aunque, el
proceso de diseo es en gran medida ad hoc, es decir, no est tan formalizado como las otras fases y por tanto se apoya bastante
en la experiencia e intuicin de los diseadores.
En este tema se van a proponer las formas de diseo convencionales, una comparacin de los ms utilizados y la validacin
o comprobacin de su adecuacin, junto con la parte correspondiente de documentacin de todo el proceso. Principalmente hay
dos tipos de diseo:
Diseo funcional: Parte de una vista de alto nivel que se va refinando progresivamente. En este caso la atencin se focaliza
en la forma de procesar los datos.
Diseo orientado a objetos: Se entiende el sistema como un conjunto de objetos. Para distinguirlos se identifican los tipos
de datos, sus operaciones y atributos asociados. Los objetos se comunican entre ellos envindose mensajes.
La validacin del diseo comprueba si se siguen las especificaciones del diseo y se cumplen requisitos de calidad. La mejor
forma de redactar la documentacin consiste en seguir una plantilla de un documento estndar rellenando varias secciones.
50
Fase de diseo
51
Tutorial posterior
Resumen de contenidos
El diseo es la fase que sigue a la especificacin y el anlisis. Consiste en aadir a la representacin anterior los detalle
necesarios para pasar a la implementacin. Al igual que en el captulo anterior, existen 2 tipos de diseo: orientado a objetos y
estructurado. Tambin existen diferentes formas de realizarlo en funcin de caractersticas del sistema (tiempo real, distribuido,
etc.)
Diseo arquitectnico: Independientemente del tipo de diseo (estructurado u orientado a objetos) existe una primera fase que
consiste en la divisin del sistema en subsistemas. Los apartados a tener en cuenta son:
1. Descomposicin estructural: Descomposicin en subsistemas
2. Intercambio de informacin entre subsistemas: Hay dos opciones: con una base de datos central o por medio de
mensajes.
3. Forma de realizar el control: Centralizado o basado en eventos.
Sistemas distribuidos: Son un tipo especial de sistema que merece un tratamiento aparte debido a que parece ser la tendencia
actual. Hay varios tipos de arquitecturas:
1. Arquitectura cliente-servidor: Puede ser de dos o de tres capas.
2. CORBA: Es un sistema de objetos distribuidos. Utiliza IDL como lenguaje de definicin de interfaces. {ATENCIN: CORBA No se trata en este curso, ver en [Pre01, cap. 28]}
Diseo estructurado
Es el anlisis clsico. Esta basado en el flujo de los datos a travs del sistema. En una primera fase se hace un diseo
preliminar y posteriormente un diseo detallado. Objetivos: Comprensin, mantenibilidad, facilidad de pruebas e integracin
con otras aplicaciones. Principios: Abstraccin, modularizacin, independencia, arquitectura, ocultamiento de la informacin y
refinamiento paso a paso. Sus elementos importantes son:
1.
2.
3.
4.
5.
Diseo detallado: Es una especificacin con mayor nivel de detalle de las estructuras de datos y algoritmos.
Otras notaciones que forman parte de metodologas pensadas en torno al diseo estructurado son:
1. Diagramas HIPO: Muestran entradas, salidas y funciones. Muestran lo que hace el sistema pero no el cmo. {ATENCIN: los diagramas HIPO No se tratan en este curso}
2. Diagramas de Warnier-Orr: Son una representacin jerrquica de los programas, sistemas y estructuras de datos. Puede
representar iteraciones, secuencias y alternativas.
3. Diagramas de Jackson: Produce un programa a partir de su especificacin. Las entradas y salidas son secuenciales al
igual que el proceso.
52
Fase de diseo
Cules son las principales diferencias entre el diseo estructurado y el orientado a objetos?
Por qu el diseo arquitectnico es el primer paso?
Cules son los tipos de modelos cliente-servidor de tres capas?
{Este ejercicio no se tratar en este curso} Qu es necesario para que un objeto pueda invocar los servicios de otro en
CORBA?
5. {Este ejercicio no se tratar en este curso} Cul es la secuencia de pasos que ocurre cuando un cliente utiliza los servicios
de un servidor en CORBA? Podra el servidor ser cliente de su cliente?
6. Qu nivel de acoplamiento hay entre dos mdulos A y B donde A utiliza una funcin de B pero ambos manipulan el
mismo conjunto de variables globales?
Extensin de conocimientos
Los contenidos de este tema tambin pueden estudiarse en [Som98, cap. 4], [Haw98, caps. 11 al 14] [Sch92, caps. 5 al 8].
Se puede profundizar en el diseo orientado a objetos, por ejemplo, en los libros [RBP+ 96, Mey98, Boo94, Jac92, WBWW90].
En http://www.nist.gov/dads/ se puede encontrar una recopilacin en forma de diccionario (en ingls) de descripciones
y enlaces sobre algoritmos, estructuras de datos y problemas.
Se puede encontrar informacin sobre CORBA (Arquitectura comn de distribucin de objetos) en [Pre01, sec. 28.9.5] y
tambin un tutorial en la pgina web http://java.sun.com/developer/onlineTraining/corba/corba.html, aparte, por
supuesto, de la pgina propia de CORBA http://www.corba.org/.
Captulo 5
Fase de implementacin
Tutorial Previo
Introduccin
Una vez que se dispone de un diseo para la solucin del problema, incluso en una fase temprana o provisional del diseo,
ya se puede comenzar a plasmar ese diseo en el cdigo que permita realizarlo o implementarlo. En esta fase el programador
recibe las especificaciones del diseo y transforma esas especificaciones, que pueden estar en formatos mezclados formales,
semiformales o manuales, en un programa o mdulo que las efecte. Esta tarea de modificacin puede estar semi-automatizada
en algunos casos o realizarse de forma completamente manual. En cualquiera de los casos se requiere que esa transformacin
se haga de manera sistemtica y coherente. Las particularidades propias de lenguajes de programacin concretos se estudian en
otras asignaturas y por tanto no se incluirn en este tema. Lo que s se estudiarn son las tcnicas o estilos de codificacin formal.
Durante la implementacin se escribe el cdigo de la aplicacin. Existen una serie de "vicios" en el estilo de codificacin que
pueden hacer que el cdigo sea confuso para terceras personas y en consecuencia difcil de mantener; adems, algunas prcticas
pueden inducir errores. Es especialmente recomendable para esta parte seguir las recomendaciones del PSP (Personal Software
Process). Para realizar el trabajo este debe ser dividido en pequeos mdulos que se reparte entre individuos o pequeos grupos
atendiendo a un grfico de dependencias entre tareas y con la idea en mente de paralelizar tanto trabajo como sea posible. A
medida que se van haciendo los mdulos hay que comprobar que cumplen con una cierta calidad, para ello existen varios tipos de
pruebas. En este capitulo se estudia la necesidad de comprobar la ejecucin correcta del mdulo, por tanto interesan las pruebas
que se hacen a nivel de mdulo, tambin llamadas pruebas unitarias. Adems de todo ello hay dos tipos de manuales importantes
que hay que producir en esta etapa: el manual de usuario y el manual tcnico.
54
Fase de implementacin
class Punto
{
private:
// Aqu se definen las variables y mtodos privados.
// Ninguna otra clase puede acceder a ellos.
int x; // Variables privadas
int y;
protected:
55
56
Fase de implementacin
Existe un puntero this que hace referencia al propio objeto. Si se recibe un parmetro con el mismo nombre que una variable
definida en el objeto, se puede acceder a la variable del objeto utilizando ese puntero this:
void Punto::DesplazarHorizontalmente(int x) {
this->x = this->x + x;
}
Invocacin de mtodos en Java
p.DesplazarHorizontalmente(10);
Uso de la herencia
La herencia es esttica si se determina en el momento de la compilacin, como ocurre en la mayora de los lenguajes, es
implcita si el comportamiento de un objeto depende de su clase y no se puede cambiar y es por grupos si las caractersticas de
herencia se especifican para una clase, no para objetos concretos.
Herencia en C++ Una clase puede heredar de varias clases que se especifican en la declaracin. La subclase se llama derivada.
La forma de heredar puede ser privada, protegida o pblica. El resultado de esto es que los mtodos y variables de la clase
antecesora se heredan con el tipo de acceso de menor grado, por ejemplo, una variable pblica que pertenece a una clase que se
hereda de modo protected se convierte en protected. Ejemplo de la sintaxis:
class Punto: public ObjetoGrafico { ... }
Herencia en Java Est mucho ms limitada. Slo existe herencia simple, aunque una clase puede implementar mltiples
interfaces y las interfaces pueden heredar de mltiples interfaces. Ejemplo:
class Punto extends ObjetoGrafico { ... }
Implementacin de asociaciones
Existen dos formas: punteros y objetos de asociacin. Lo normal es que el lenguaje no tenga definida esta ltima opcin.
Ejemplo: Supongamos que tenemos definido un objeto Recta, que se forma a partir de dos objetos Punto que define el usuario
pinchando en la pantalla, y queremos asociar los dos puntos a la recta. El objeto recibe los dos puntos en su constructor (ver
figura 5.1).
Recta
Consta de
1
Punto
Implementacin en C++
objetos Punto recibidos:
En la implementacin del constructor se copian a los dos punteros de la clase las direcciones de los
class Recta {
private:
Punto *p1,*p2;
public:
Recta(Punto *p1,Punto *p2) {this->p1=p1; this->p2=p2; };
...
}
Implementacin en java El puntero est en el lado de la asociacin que necesita acceder a la otra clase, es decir, si es
navegable en ambos sentidos estar en ambas clases:
class Recta {
Punto p1,p2;
Recta(Punto p1,Punto p2) this->p1=p1; this->p2=p2; }
...
}
El problema ahora es: Qu se hace si se tiene una relacin con una cardinalidad indeterminada, o lo que es lo mismo, puede
haber muchos objetos en el otro lado relacionados con una clase dada?.
La respuesta es que si la cardinalidad es alta pero est acotada se puede implementar con un array de punteros. Si no est
acotada se puede tener un conjunto de punteros en una clase contenedora que puede crecer de forma arbitraria.
57
58
Fase de implementacin
B() { ... }
}
Delegacin. Si se tiene que ejecutar un mtodo en una clase A que ya est implementado en la clase B, heredar de B slo
para poder utilizar su mtodo es un error, en vez de eso se delega enviando la operacin a B desde A.
Cdigo externo encapsulado. Si se utiliza cdigo de otra aplicacin con una interfaz diferente, en vez de hacer llamadas
directas a ese cdigo es mejor hacer un mtodo o una clase que se encargue de ello. De esta forma, si hay que hacer
modificaciones, estas estarn ms localizadas.
Extensibilidad
Consiste en aadir nuevas funcionalidades al cdigo. Veamos un conjunto de normas a seguir para facilitarla.
Encapsular las clases. Esto significa que slo una clase puede acceder a sus propios datos e implementacin.
Ocultar las estructuras de datos. El motivo es que las estructuras de datos son propias de los algoritmos. Si se hacen
pblicas ser ms difcil cambiar el algoritmo ms adelante.
Ley de Demeter : Evitar recorrer mltiples enlaces o mtodos. Si a travs de las asociaciones un mtodo llega a una clase
vecina, no deben utilizar los enlaces de sta para acceder a una tercera clase, ms bien debera utilizar un mtodo de su
clase vecina para esta operacin, de esta forma no es necesario que el mtodo tenga conocimiento de todas las asociaciones
del modelo, slo de las clases relacionadas con la propia.
Evitar sentencias case basadas en el tipo de objeto. En su lugar se pueden utilizar mtodos. Solo se deben usar esas
sentencias si van a tener en cuenta los atributos de cada objeto.
Distinguir los mtodos pblicos de los privados. Se debe minimizar el nmero de mtodos pblicos para disminuir la
complejidad de la interfaz y porque si se modifican esto afectar a las clases que los utilicen, por eso deben ser diseados con ms cuidado. Los mtodos privados aaden modularidad, dependen de la implementacin de la clase y pueden
modificarse sin que cause efectos secundarios fuera de la clase.
Robustez
Un mtodo es robusto si no falla incluso ante parmetros incorrectos. Directrices para construir programas robustos:
Proteccin contra errores. Debe tenerse en cuenta que el usuario puede producir entradas incorrectas. El sistema debera
dar un mensaje de error y no colgarse. El sistema operativo, el hardware u otra librera pueden contener errores tambin,
para lo cual se deben instalar comprobaciones internas. Las comprobaciones de errores aumentan el tamao y la lentitud
del cdigo. Las relativas al usuario deberan estar siempre, las dems pueden eliminarse en la versin final que se entregue.
Optimizar despus de que funcione el programa.
Evitar los lmites predefinidos. Es decir, utilizar memoria dinmica en vez de estructuras de datos de tamao fijo. Esto da
ms flexibilidad (y algn que otro error).
Disponer el programa para la depuracin y la monitorizacin del rendimiento. En funcin de las facilidades suministradas por la herramienta de programacin, tendremos que aadir sentencias de depuracin, que se ejecutan en funcin
de una variable que indique el nivel de depuracin. Tambin es posible aadir cdigo que recoja estadsticas sobre por
ejemplo el nmero de invocaciones a una funcin.
Grandes sistemas
No es lo mismo trabajar solo que en un grupo, hay que pensar en que son otras personas las que van a utilizar, depurar,
modificar o mantener el cdigo. Las directrices que se indican son aplicables tambin para un proyecto unipersonal.
No empezar a programar de forma prematura. Es decir, antes de empezar el proceso de implementacin hay otras cosas
como la especificacin o el diseo.
Crear mtodos comprensibles. Un mtodo es comprensible si terceras personas pueden entender lo que hace.
Hacer que los mtodos sean legibles. Esto significa:
Que los nombres de las variables sean significativos (mejor no utilizar abreviaturas).
Evitar un nivel de anidamiento excesivo.
No utilizar una misma variable temporal para diferentes propsitos en lugares diferentes.
Comprobar la ortografa de los nombres.
59
Utilizar normas comunes de programacin. En referencia a cosas tales como la indentacin de prrafos, forma de hacer
los comentarios, poner todos los nombres en minsculas, etc.
Documentar las clases y mtodos. Deben existir comentarios en la cabecera de cada clase o mtodo para explicar su
cometido, precondiciones y postcondiciones. As mismo debe haber aclaraciones dentro de cada mtodo acerca de los
pasos seguidos en los algoritmos.
En los apartados siguientes se presentan una serie de normas de estilo para lenguajes concretos.
60
Fase de implementacin
Comentarios
Cuando el cdigo y los datos se contradicen probablemente ambos estn mal - Norm Schryer
1. Los comentarios deben describir qu est pasando, cmo se est haciendo, qu significan los parmetros, qu variables
globales se estn usando y cualquier restriccin o error. Los comentarios cortos (una lnea) son para expresar el qu. El
cmo se escribe en unas cuantas lneas que preceden al algoritmo.
2. Los comentarios deben justificar el cdigo que parezca errneo o poco razonable.
3. Las descripciones de estructuras de datos o algoritmos deben hacerse en bloques de comentario de esta forma:
/*
* Comentario
*/
4. Los comentarios dentro de una funcin deben estar correctamente indentados con el cdigo que comentan. Pueden usarse
tanto comentarios de una lnea como de varias. Si el comentario es muy corto se puede poner seguido a una lnea de cdigo,
y si aparecen varios comentarios de este tipo deben estar a la misma altura.
Declaracin de variables
1. Las declaraciones globales se ponen en la primera columna. Las declaraciones externas de datos deben ir precedidas por
la palabra extern. Los lmites de los arrays hay que repetirlos en la declaracin extern.
2. El * de la declaracin de punteros debe estar junto a la variable y no en el tipo.
Mal: char* s,t,v;
Bien: char *s, *t, *v;
3. Las declaraciones de cosas que no tengan que ver entre s deben hacerse por separado.
4. Las llaves para abrir { deben ir en la misma lnea que en los struct typedef y la llave para cerrar } en la lnea
siguiente. Ejemplo:
struct complejo {
real a, b;
};
5. Las variables que deban tener un valor inicial se deben inicializar todas de forma explcita.
6. Cuando un fichero es parte de un todo en vez de ser un programa autocontenido se debe utilizar la palabra static para hacer
las funciones y las variables locales a los ficheros. Una variable debe poder ser accedida desde otro fichero slo cuando
sea realmente muy necesario y se deber comentar.
7. Los tipos ms importantes deben ser remarcados usando typedef.
8. El tipo de retorno se debe declarar siempre.
Declaracin de funciones
Cada funcin debe llevar un prlogo que indique lo que hace la funcin y cmo usarla. Tambin es conveniente aclarar
decisiones de diseo no triviales.
Se debe poner un tipo de retorno para cada funcin. No usar el tipo int por defecto. Si hay que explicar ese tipo, se hace en
el prlogo.
Los diez mandamientos para los programadores en C
Estas son una serie de normas para no cometer (demasiados) errores.
1. Se debe utilizar alguna herramienta como lint1 de vez en cuando.
2. Comprobar siempre si un puntero es NULL.
3. Siempre se debe hacer un casting de los argumentos de las funciones a los tipos esperados, incluso cuando creas que no es
necesario.
4. Se debe declarar con mucho cuidado los tipos de retorno de las funciones en los ficheros .h.
5. Comprobar que el tamao de las cadenas es lo suficientemente grande como para que quepa cualquier cosa (si se prueba
una cadena con hola ten la seguridad que llegar el da en el que alguien escribir supercalifragilisticoespialidoso.
6. Si una funcin puede devolver un cdigo de error, lo comprobars cada vez que llames a esa funcin, aunque tripliques el
tamao del cdigo.
7. Estudiars las libreras para asegurarte de no inventar nada que ya exista, as tu cdigo ser corto y legible.
8. Indentars (sangrars) correctamente tus programas para que su estructura sea clara.
1 Utilidad para programadores en C en UNIX que permite detectar declaraciones no usadas, inconsistencias entre tipos, uso de variables antes de su definicin,
cdigo no alcanzable, caminos de ejecucin sin retorno, etc
61
9. Los identificadores externos debern ser nicos desde sus primeros seis caracteres.
10. Escribirs cdigo independiente del hardware de la mquina especfica en la que programes, porque los das de esa mquina
llegarn a su fin antes que los de tu programa.
Reglas:
Las extensiones de los mismos tipos de ficheros sern siempre las mismas. Ejemplo: Include: .h .hh, fuente: .cc,
ficheros inline: .icc. Excepcin: Cuando se utilicen mdulos de C, que no tienen las mismas extensiones.
Los ficheros de implementacin tienen la extensin .cc. Excepcin: Hay compiladores que slo aceptan la extensin
.c.
Los ficheros de definicin inline tienen la extensin .icc.
La finalidad es dar una visin uniforme de los nombres de fichero y distinguir entre los diferentes tipos, entre los de C y los de
C++ y entre los de definicin y los de implementacin. Recomendaciones:
Un fichero include no debe contener ms de una definicin de clase.
Dividir la definicin de las funciones miembro entre tantos ficheros como sea posible.
Colocar el cdigo dependiente de la mquina en un mdulo aparte.
Nombre de los ficheros
Dar siempre nombre de ficheros que sean nicos en un contexto tan grande como sea posible.
El nombre de un fichero include de una clase debera ser: NombreClase + extensin. Respetar las maysculas y minsculas
del nombre de la clase en el nombre del fichero.
Comentarios
Reglas:
Cada fichero con cdigo fuente debe tener una introduccin con informacin sobre el contenido de ese mdulo.
Todos los ficheros deben tener copyright.
Todos los comentarios se deben escribir en Espaol.
Recomendaciones:
Escribir un breve comentario antes de cada funcin.
Es mejor usar // para los comentarios.
Hay que tener en cuenta que los comentarios de los ficheros include van dirigidos a los usuarios de las funciones o clases, y los
de los ficheros de implementacin a los que mantienen el cdigo.
62
Fase de implementacin
Ficheros include
Reglas:
Todos los ficheros include tienen que contar con algn medio que impida mltiples inclusiones de ese archivo.
Los siguientes tipos de definiciones deben estar en ficheros include separados:
Clases que se usan como clases base.
Clases que se usan como variables miembro.
Clases que aparecen como tipos de retorno o como tipos de argumento en prototipos de funciones o funciones
miembro.
Prototipos de funciones para funciones o funciones miembro usados en funciones inline miembro que estn definidas
en el fichero.
Las definiciones de clases a las que slo se accede va puntero (*) o referencia (&) no sern incluidas como include.
Nunca especificar las rutas completas en las directivas #include.
Cada fichero de implementacin deber incluir:
Declaraciones de tipos y funciones usados en las funciones que se implementen en el fichero.
Declaraciones de variables y funciones miembro usados en las funciones que se implementen en el fichero.
Recomendaciones:
Usar la directiva #include nombre_de_fichero.hh para los include definidos por el usuario.
Usar la directiva #include <nombre_de_fichero.hh> para los include de las libreras.
Cada fichero de implementacin debera declarar una constante con una variable de cadena que describa el fichero, as, en
un sistema UNIX el comando what podr ser usado para obtener informacin del fichero.
Nunca incluir otros ficheros en un fichero inline.
Asignacin de nombres
Un identificador consta de: Prefijo, Nombre y Sufijo. El prefijo y el sufijo son opcionales. El sufijo suele ser utilizado por
herramientas que generan cdigo. Reglas:
El identificador de cada clase, tipo enumerado, funcin, constante o variable globales en una librera de clases debe empezar
con un prefijo que sea nico para cada librera.
Los nombres de las variables, constantes y funciones deben empezar en minsculas.
Los nombres de los tipos abstractos de datos, estructuras, typedef y tipos enumerados deben empezar en maysculas
Los nombres que consistan en ms de una palabra, las palabras deben ir juntas y la inicial de cada palabra debe ir en
maysculas.
No usar identificadores que comienzan con _.
Si un nombre comienza por mayscula aparece despus de un prefijo.
Si un nombre no empieza por mayscula estar separado de su prefijo por _.
Recomendaciones:
No usar nombres que slo difieran en que una letra sea mayscula o minscula.
Los nombres no deben incluir abreviaturas que no sean aceptadas por todo el mundo.
Una variable visible en un trozo grande de cdigo debe tener un nombre largo.
Los nombres de las variables deberan recordar para qu sirven.
Se debe escribir el cdigo de forma que sea fcil cambiar los prefijos de los identificadores globales.
Encapsular en una clase: las variables y constantes globales, tipos enumerados y typedef.
Estilo
Clases
Reglas:
Las partes de una clase de declaran en este orden: Pblico, protegido y privado. Este es adems el orden que interesa a
la gente. La parte privada la va a leer cualquiera que use la clase, la parte protegida quien quiera heredar y la privada en
general nadie.
No se definen funciones miembro dentro de la definicin de la clase.
Funciones
63
Recomendaciones:
Recomendacin: Los corchetes que delimitan el comienzo ({) o el final (}) de un bloque deben ir en lneas aparte.
Sentencias de control de flujo Recomendacin: Todas las sentencias de control de flujo (if, else, while, for) deben ir
seguidas de un bloque incluso aunque sea vaco. Ejemplo:
for (char *c=charCadena; *c!=A && *c; c++)
{
}
Punteros y referencias Recomendacin: Los operadores * y & deben estar conectados directamente con el tipo de la
variable y no con la variable misma. Ntese que la recomendacin para el lenguaje C es justamente la contraria.
Miscelnea
Clases
Derechos de acceso
Regla: No especificar nunca un dato como pblico o protegido. Los motivos son que:
Recomendacin: Las funciones amigas estn para proporcionar funciones adicionales que estn mejor fuera
Reglas:
Una funcin miembro que no cambie las variables de instancia de un objeto se debe declarar const.
Si el comportamiento de un objeto depende de datos externos al objeto, estos datos no deben ser modificados por funciones
miembro const.
Constructores y destructores
Reglas:
Una clase que use new para crear instancias gestionadas por la clase debe definir un constructor de copia. Excepciones: Si
una clase tiene un rea de datos compartida no es necesario tener un constructor de copia, tan slo hay asegurarse de que
no se destruya el rea mientras haya punteros que la referencien.
Todas las clases que sean usadas como clase base y que tengan funciones virtuales deben definir un destructor virtual.
No usar objetos globales en constructores y destructores.
64
Fase de implementacin
Operadores de asignacin
Reglas:
Una clase que usa new para crear instancias gestionadas por la clase debe definir un operador de asignacin. Excepcin:
Si los objetos de una clase tienen un rea de datos compartida no es necesario definir un operador de asignacin. Hay que
asegurarse de que el rea de datos no se destruye mientras haya punteros que la referencien.
Un operador de asignacin que hace una operacin destructiva debe protegerse de realizar esta accin en el objeto en el
que est operando.
Recomendacin: Un operador de asignacin debe devolver una referencia const al objeto que est siendo asignado.
Sobrecarga de operadores
Recomendaciones:
Regla: Los nombres de los argumentos de las funciones tienen que ser los mismos en la definicin y
65
Objetos temporales Recomendacin: Minimizar el nmero de objetos temporales que son creados como valores de retorno de
funciones o como argumentos a funciones.
General Recomendacin: Evitar funciones largas y complejas.
Constantes
Reglas:
Las constantes deben ser definidas con const o enum. Nunca usando #define
En lugar de utilizar valores numricos en el cdigo usar valores simblicos. La excepcin seran los valores numricos
comnmente utilizados y con significado claro tales como 0, 1, true false.
Variables
Reglas:
Las variables deben ser declaradas con el mnimo alcance posible.
Cada variable debe ser declarada en una sentencia distinta.
Se debe dar un valor a cada variable que sea declarada antes de usarla.
Si es posible usar siempre la inicializacin en vez de la asignacin.
Excepcin: Cuando se asigna a una variable el valor de una expresin complicada puede no ser necesario dar un valor
inicial.
Punteros y referencias
Reglas:
No comparar un puntero con NULL o asignar NULL a un puntero. Usar 0 en su lugar.
Deben evitarse en la medida de lo posible los punteros a punteros.
Usar typedef para simplificar la sintaxis cuando se declaren punteros a funciones.
Conversiones de tipos
Reglas:
Nunca usar conversiones explcitas de tipo (cast). Excepciones:
Una conversin explcita es preferible a una conversin implcita.
Para convertir un puntero a una clase base a un puntero a una clase derivada en un contenedor implementado en una
clase contenedora heterognea.
Se debe usar para convertir una corriente de bits a un objeto. Ocurre cuando se desempaqueta un mensaje en un buffer.
Como regla general la generacin explcita de tipos es necesaria para leer la representacin externa de un objeto.
No escribir cdigo que dependa de funciones que usen conversiones implcitas de tipos.
Nunca convertir punteros a objetos de una clase derivada a punteros a objetos de una clase base virtual. Excepcin: Si
una clase base virtual contiene una funcin virtual pura que convierte un puntero a clase base virtual a un puntero a clase
derivada, esto puede funcionar definiendo la funcin en la clase derivada. Esto significa que todas las clases derivadas
deben ser conocidas en la clase base virtual.
Nunca convertir un const a un no const.
Estructuras de control de flujo
Reglas:
El cdigo que va despus de un case siempre debe terminar con un break.
Las sentencias switch siempre deben tener una rama default para tratar casos inesperados.
Nunca usar goto.
Recomendaciones:
La eleccin del tipo de bucle (for, while, do-while) debe depender de las siguientes consideraciones:
for: Se usa cuando hay una variable que se incrementa en una cantidad constante cada iteracin y la terminacin
depende de una expresin constante.
while: Cuando la condicin de terminacin se evala al principio de la iteracin.
66
Fase de implementacin
Recomendaciones:
Recomendaciones:
Sea cuidadoso cuando haga conversiones de tipo desde uno corto a uno ms largo.
No suponer que los punteros y los enteros tienen el mismo tamao.
Usar conversiones explcitas de tipo para operaciones aritmticas usando valores con signo y sin signo.
Representacin de datos
Recomendaciones:
No suponer que los operandos de una expresin van a ser evaluados en un orden definido.
No suponer que se conoce como han sido implementados los mecanismos de invocacin de una funcin.
No asumir que un objeto es inicializado en un orden concreto en los constructores.
No asumir que los objetos estticos son inicializados en ningn orden concreto.
Objetos temporales
67
Recomendacin: No escribir cdigo que dependa del tiempo de vida de un objeto temporal.
68
Fase de implementacin
Declaraciones
La recomendacin en este sentido es que no se declare ms de una variable por lnea, poniendo el nombre de la variable
indentada y con un comentario. Deben estar localizadas al principio del bloque. Ejemplo:
int numPuntos = 3; // Puntos que definen la figura
Es conveniente inicializar las variables en el lugar en el que se declaran, a menos que esta inicializacin dependa de un clculo
posterior.
Las clases e interfaces deben usar la siguiente convencin:
No se ponen espacios entre el nombre de los mtodos y el parntesis (.
La llave de apertura { aparece en la misma lnea que el nombre del mtodo o clase.
La llave de cierre de bloque } aparece en una lnea a parte del bloque, excepto cuando el bloque est vaco.
Los mtodos se separan por una lnea en blanco.
Ejemplo:
class Punto extends ObjetoGrafico {
int x;
int y;
Punto(a,b) {
x=a;
y=b;
}
Sentencias
Debe haber una y slo una sentencia por lnea. Si hay un bloque de sentencias, ste debe ser sangrado con respecto a la
sentencia que lo genera y debe estar entre llaves aunque slo tenga una sentencia para de este modo evitar errores cuando
se aaden otras sentencias al bloque. Ejemplo:
if (x>1) {
y++;
z=CalcularZ(x,y);
}
else {
y=y-2;
}
Sentencias if-else, if else-if else. A los bloques definidos por estas sentencias se les aplican las normas definidas en puntos
anteriores. Todos los bloques tienen el mismo nivel de sangrado.
Bucles. Definen un bloque, que sigue las normas anteriores. Si el bucle es vaco (no tiene sentencias) no se abren ni se
cierran llaves.
Las sentencias return no deben usar parntesis.
Separaciones
Incrementan la legibilidad del cdigo. La regla general es que cuanto ms importante sean las partes a separar tanto mayor
debe ser la separacin. En este sentido el criterio es:
Dos lneas: Entre clases e interfaces.
Una lnea: Entre mtodos, declaraciones de variables y la primera instruccin, secciones lgicas diferentes de un mtodo
y antes de un comentario de lnea o de bloque.
Un carcter en blanco: Entre una palabra y un parntesis, despus de una coma, los operadores binarios menos el ., las
expresiones del for, y entre un cast y la variable.
Ejemplo:
class X {
...
}
class Y extends X{
/* Declaraciones */
int x;
int y;
/** Desplaza la figura pixel a pixel horizontalmente */
69
int desplazarHorizontal(int h) {
int inc;
if (h<0) {
h = -h;
inc = -1;
}
else {
inc = 1;
}
for (int i=0; i<h; i++) {
x = x + inc;
if (!Dibujar()) {
return -1;
}
}
return 0;
}
/** Desplaza la figura pixel a pixel verticalmente */
int desplazarVertical(int h) {
...
Nombres
Las normas de asignacin de nombres son:
Paquetes: Nombres en minsculas separados por puntos. Ejemplo: java.io.
Clases e interfaces: Dos o tres nombres con la primera letra en maysculas, sin usar abreviaturas. Ejemplo: ObjetoGrafico.
Mtodos: La primera palabra debera ser un verbo y en minsculas. Ejemplo: desplazarHorizontal.
Variables: Deben ser cortas (pueden ser de una letra) y significativas. Si son varias palabras la primera en minscula.
Ejemplos: i, j, k, unTriangulo.
Constantes: Se escriben en maysculas y si son varias palabras van unidas por un carcter de subrayado. Ejemplo:
MAX_LONG = 1000
70
Fase de implementacin
Explicativo: Aclaraciones acerca de partes del cdigo. Hay dos tipos: de lnea y de bloque.
Las ventajas de los comentarios de bloque es que estn localizados en un punto concreto y no dispersos por varias lneas
entre el cdigo, con lo que adems son fciles de modificar. Los comentarios de una lnea deben ponerse en la misma lnea
del cdigo que se esta comentando y se usan para explicar sentencias complicadas.
Los tipos de comentarios segn cmo estn redactados son estos cinco (de peor a mejor):
Repetir el cdigo: Consiste en expresar el cdigo de otra forma pero sin aadir informacin significativa. Este tipo de
comentarios son innecesarios.
Explicacin del cdigo: Ayudan a comprender el cdigo. Es mejor reescribir el cdigo de modo que sea ms inteligible
que utilizar este tipo de comentarios.
Marcadores: Son notas temporales para la gente que trabaja en el proyecto. Se eliminan cuando el proyecto finaliza.
Resumen del cdigo: Explica en pocas palabras la funcin de un trozo de cdigo.
Descripcin de la finalidad: Explica el por qu. Es el ms fcil de entender.
Tutorial posterior
Resumen de contenidos
La implementacin en teora se puede hacer de un modo totalmente automatizado a partir del diseo. Pero como esto en
realidad no es as, se dan una serie de consejos para pasar el diseo a cdigo y como redactar este cdigo en un conjunto de
lenguajes.
Traduccin del diseo a la implementacin
Ingeniera inversa: Consiste en averiguar las especificaciones de un sistema a partir de su funcionamiento. Se dan algunas heursticas para averiguar los casos de uso de un sistema: definiciones de clases, creacin y destruccin de objetos, invocacin
de mtodos, herencia e implementacin de asociaciones.
Estilo de programacin orientado a objetos: Son un conjunto de consejos para conseguir: reusabilidad, reconocer la herencia,
construir mtodos extensibles, cdigo robusto y trabajo en grupo eficaz.
Normas para programadores en C: Son un conjunto de normas que cubren todos los apartados de la codificacin, tanto del
tamao de los ficheros, como de la eleccin de nombres (quizs lo ms importante), indentacin, etc.
Normas para programadores en C++: Es una recopilacin similar para el lenguaje C++. Es ms extenso debido a la complejidad del lenguaje. Estas normas fueron compiladas por Ellmentel Telecomunications System Laboratories.
Normas para programadores en Java: Es un resumen de las normas publicadas por S UN para el lenguaje Java.
Tcnicas de depuracin
Consiste en un conjunto de tcnicas para descubrir errores de codificacin. Incluye tambin un pequeo apartado para procesos concurrentes.
Documentacin del cdigo
Al igual que el diseo el anlisis producen documentos segn una plantilla estndar, el cdigo tiene que tener una documentacin interna. Se distinguen los tipos de comentarios (Directorio, prlogo y explicativo), donde se colocan, que informacin se
incluye en cada uno de ellos y la forma de redaccin de la informacin.
71
Extensin de conocimientos
Tambin se puede estudiar parte de los contenidos de este tema en [Som98, caps. 5 y 6], [RBP+ 96], [BMP87, caps. 10 al 15]
[Sch92, caps. 9 y 10].
La herramienta de anlisis y modelado de software A LMA http://www.desnoix.com/guillaume/alma/, permite el anlisis de cdigo fuente orientado a objetos para su representacin y modelado o su transformacin a otros lenguajes. Esta herramienta, A LMA, es muy interesante y al estar implementada en Java es fcilmente instalable en cualquier entorno.
Es interesante hacer notar que existen ciertos lenguajes de programacin que facilitan y promueven con su sintaxis una
codificacin ms clara, ordenada, sistemtica y autodocumentada. Tal es el caso, por ejemplo, del lenguaje P YTHON que,
normalmente, es interpretado pero que auto-precompila cada fichero fuente ejecutado y reutiliza esa versin precompilada
(preanalizada) si no cambia el fuente. Este lenguaje es muy til para hacer prototipos rpidos, pero tambin para aplicaciones ms grandes (por ejemplo vase Z OPE http://www.zope.org/). Prcticamente todas las implementaciones de P YTHON son de libre distribucin. Se puede ver ms informacin en las siguientes pginas Web: http://www.python.org/,
http://www.freenetpages.co.uk/hp/alan.gauld/spanish/ es una traduccin al espaol del libro [Gau01] (un tutorial bsico), el libro de libre distribucin (licencia FDL) [DEM02] en http://www.ibiblio.org/obp/thinkCSpy/ o un libro en lnea
http://diveintopython.org/es/ (traduccin al castellano de Dive into Python) con varias referencias a otra informacin
en espaol, aparte de la pgina http://users.servicios.retecal.es/tjavier/python/Un_poco_de_Python-2.html sobre P YTHON de Toms Javier Robles Prado.
Existe una tcnica de escribir la documentacin incluida dentro del cdigo fuente, conocida por el nombre en ingls de
Literate Programming. Se puede encontrar extensa informacin sobre este tema en la FAQ especfica: http://shelob.ce.
ttu.edu/daves/lpfaq/faq.html. Adems hay algunas otras herramientas de ayuda en la generacin de referencias cruzadas
y documentacin a partir del cdigo fuente, como por ejemplo C XREF http://www.gedanken.demon.co.uk/cxref/, la ms
reciente y completa D OXYGEN http://www.doxygen.org/ (que se puede utilizar para otros lenguajes adems de C). Tambin
es interesante ver el ejemplo de cmo un proyecto enorme, como es el kernel del sistema operativo Linux, tiene un sistema de
referencias cruzadas: http://lxr.linux.no/.
Captulo 6
Fases de pruebas
Tutorial Previo
Introduccin
Este tema incluye en su denominacin Fases, en plural, debido a que realmente no hay una nica fase de pruebas, sino que
las pruebas se van realizado en todas las dems fases. Las pruebas en este caso consisten en la comprobacin de que la salida
obtenida en cada fase corresponde a las especificaciones de entrada correspondientes. Las pruebas consumen mucho tiempo,
pero deben hacerse de un modo sistemtico para asegurar que el resultado cumple con el grado de calidad exigido (densidad
de errores por KLDC, etc). Para medir esta calidad existen algunas mtricas. En esta parte del desarrollo se trata de encontrar
errores, no slo de codificacin, sino tambin los relativos a la especificacin o el diseo, en este sentido se puede distinguir entre
verificacin y validacin. La verificacin trata de comprobar si se est construyendo el producto correctamente, la validacin si
es el producto correcto. Las pruebas que se van haciendo durante el ciclo de vida son: ingeniera del sistema (prueba del sistema),
especificacin (prueba de validacin), diseo (prueba de integracin) y codificacin (prueba de unidad). Los tipos de pruebas
tienen naturaleza diferente y en consecuencia, las tcnicas para cada una de ellas son diferentes; tambin se har un recorrido por
cada una de ellas. Inevitablemente tambin hay que aadir la correspondiente documentacin de las pruebas realizadas.
Fases de pruebas
Plan de pruebas
Son un conjunto de actividades que pretenden demostrar que el producto cumple con lo estipulado en el contrato. En el plan
de pruebas se especifica:
1. Identificador del plan: Debera ser una palabra que lo identificase con su alcance. Hay que incluir adems la versin y
fecha.
2. Alcance: Tipo de prueba y propiedades del software a ser probado.
3. Items a probar: Configuracin a probar y condiciones que se deben satisfacer para ello.
4. Estrategia: Tcnica y herramientas a utilizar. Hay que indicar el nmero mnimo de casos de prueba a realizar y el grado
de automatizacin tanto en la generacin de casos de prueba como en la ejecucin
5. Categorizacin de la configuracin: Condiciones bajo las cuales el plan debe ser:
Suspendido: Si se presentan demasiados defectos o fallos.
Repetido.
Dado por terminado: Si se cumple el nmero mnimo de casos de prueba.
6. Documentacin: Segn el estndar IEEE 829-1983 hay que producir los siguientes documentos:
Plan de prueba.
Especificacin de los requerimientos para el diseo de los casos de prueba.
Casos de prueba. Para cada uno se especifican: Descripcin del procedimiento de prueba y Descripcin del tem a
probar.
Bitcora de pruebas.
Informe de incidentes de prueba.
Resumen de pruebas.
7. Procedimientos especiales: Grafo de las tareas necesarias para preparar y ejecutar las pruebas, as como habilidades
necesarias.
8. Recursos: Pueden ser muy variados
Caractersticas de hardware y software.
Software necesario para hacer las pruebas.
El software a ser probado.
Configuracin del software de apoyo.
Recursos humanos necesarios para el proceso.
Requerimientos especiales: Actualizacin de licencias, espacio de oficina, tiempo de mquina, seguridad, etc.
9. Calendario: Hitos del proceso y grafo de dependencias.
10. Riesgos: Riesgos del plan, acciones para mitigarlos y planes de contingencia.
11. Responsables: Lista de personas y tareas asignadas.
Existen cuatro tipos de pruebas que deben superarse
Pruebas funcionales: Se realizan con los datos de entrada normales en el uso diario del sistema. Se comprueban sobre
todo valores en los lmites de las variables y un poco ms all de los lmites. Tambin algunos valores especiales.
Pruebas de desempeo: Miden el rendimiento del sistema. Tiempos de respuesta, utilizacin de la memoria, trfico
generado en las comunicaciones, etc. Estas pruebas nos van a indicar donde estn los cuellos de botella del sistema.
Pruebas de tensin: Se trata de sobrepasar los lmites de tolerancia del sistema de varias maneras: Conectar ms usuarios
al sistema de los permitidos, si tiene que gestionar x mega-bits por segundo de una lnea de comunicaciones probar a
aumentar ese ancho de banda, etc.
Pruebas estructurales: Es un anlisis de la lgica interna de un programa.
Tutorial posterior
Resumen de contenidos
Verificacin y validacin
La Verificacin y validacin se debe llevar a cabo a lo largo de todo el ciclo de vida. Verificacin es comprobar si el producto se
est construyendo correctamente. Validacin es comprobar si estamos construyendo el producto que se nos ha pedido. Se abordan
un conjunto de actividades y tareas para garantizar que se da una respuesta positiva a esas dos cuestiones. Uno de los puntos
importantes es que la V&V debe ser independiente, es decir, no pueden hacerlo las mismas personas que estn construyendo el
producto. Esta independencia se debe dar tanto en la gestin como en la financiacin. Las tareas de V&V se contemplan desde
tres perspectivas: sistemas genricos, sistemas expertos y software reutilizado, y en todas y cada una de las etapas del ciclo de
vida.
Tcnicas y mtodos de prueba
Se trata en esta seccin de realizar las pruebas que den una garanta acerca del cdigo. Se introducen los conceptos de Error,
Defecto y Fallo. Se definen un conjunto de principios que debe seguir toda prueba:
Casos de prueba: Es un conjunto de entradas y salidas esperadas para ellas. Existen dos tipos de pruebas: de caja blanca y de
caja negra. Existe un mtodo para crear casos de prueba para casos de uso.
Pruebas de caja blanca. Tcnicas y medidas: grafo de flujo, complejidad ciclomtica y criterios de cobertura del grafo.
Pruebas de caja negra. Tcnicas: particiones o clases de equivalencia y anlisis de valores lmite.
Cleanroom: Es una metodologa de desarrollo pensada para producir software muy fiable.
Revisiones sin ejecucin de cdigo: wallthroughs, inspecciones y auditoras,
Calidad del software: El modelo de McCall tiene en cuenta una serie de factores de calidad.
Documentacin de pruebas
Como en los dems captulos este es el apartado donde se pone sobre el papel el trabajo realizado con un documento llamado
plan de pruebas que es un documento que pretende demostrar que el producto cumple con lo estipulado en el contrato.
Ejercicios
1. Cules son los motivos por los que es conveniente que las actividades de V&V sean realizadas por un equipo independiente?
2. Cundo es mejor hacer la V&V, despus de construir el producto, antes, despus de una etapa concreta, ...?
3. Dado el programa de la figura 6.1:
Represntelo en algn lenguaje de programacin.
Halle los valores de a y b para cobertura de sentencias, decisiones, condiciones y decisin/condicin.
Hay algn bucle? De qu tipo? Cuntas veces conviene ejecutarlo?
Extensin de conocimientos
Este tema tambin se puede consultar en [Som98, cap. 7] [BMP87, cap. 16 y 17].
Sobre calidad, pruebas y evaluacin del software, el NIST en Estados Unidos mantiene una pgina muy interesante: http:
//hissa.nist.gov/.
Fases de pruebas
a=a3*b
si
a>1000
no
a<100
no
b<3
si
si
msg="a es pequeo y b da igual"
no
Write(msg)
Captulo 7
5. Custodia de los programas del sistema, incluyendo planes de recuperacin y de contingencia por desastres.
6. Instalacin.
7. Las responsabilidades y obligaciones del personal encargado de informtica y de los usuarios finales deben definirse
teniendo en cuenta lo siguiente:
Acceso a las instalaciones del nuevo usuario.
Disponibilidad y acceso a los sistemas y equipo del usuario final.
Disponibilidad de personal experto en las reas correspondientes.
La necesidad de validacin como parte de cada instalacin debe ser determinada.
Se debe validar el funcionamiento de todo el sistema despus de cada instalacin.
Un procedimiento formal para aprobar cada instalacin al complementarla.
7.1.1. Aceptacin
Se dice que el proyecto ha finalizado cuando todas las actividades tcnicas han terminado o se ha agotado su plazo y se han
facturado todos los conceptos al cliente (se hayan cobrado o no). Para evitar problemas en el momento en el que se pide al cliente
su aceptacin se debe redactar un documento que especifique claramente los requisitos (lgicamente este documento se redacta
en la fase de especificacin). Una vez que el cliente lo firma acepta que est conforme.
Porcentaje de endeudamiento interno (propio): Son los gastos que en caso de impago la empresa debera satisfacerse
a si misma. Es el complementario del anterior. Porcentaje de endeudamiento externo + Porcentaje de endeudamiento
propio = 1.
Valor actual neto del proyecto:
n
Fi
VA =
(7.1)
(1
+
r)i
i=1
Donde: Fi son los flujos monetarios del proyecto, n es el nmero de aos o meses desde que se produjo el flujo
monetario y r es la inflacin anual o mensual acumulada desde entonces.
Tasa de rendimiento (R) interno del proyecto.
R=
(7.2)
3. Indicadores de ocupacin laboral. Indican la cantidad de personal para cada proyecto, su tasa de ocupacin y como consecuencia si sobra o falta personal.
Carga de trabajo: Nmero de horas para realizar un trabajo.
Nmero de personas necesarias para el proyecto.
ndice de ocupacin.
4. Indicadores de gestin. Hay cuatro indicadores de la calidad de este apartado:
Plazo de ejecucin.
Coste (global y por partidas)
Margen.
Contingencias.
10. Especificaciones de la base de datos: Descripcin fsica y lgica de la base de datos junto a las especificaciones de
seguridad y control.
11. Pruebas: Estrategia de pruebas del sistema, con especificaciones detalladas, descripciones y procedimientos, as como
datos de prueba y criterios de evaluacin.
12. Manual de usuario: Describe las funciones del sistema. No debe usar jerga tcnica.
13. Manual de operacin: Descripcin del software y del entorno operativo para que pueda funcionar el software.
14. Manual de mantenimiento: Informacin acerca del cdigo fuente, sistemas y subsistemas para que el equipo de mantenimiento pueda entender el funcionamiento del programa y hacer cambios.
15. Plan de instalacin: Una vez que el sistema haya superado todas las pruebas est listo para ser instalado. Este manual
describe como se realiza el proceso en diferentes entornos.
16. Anlisis de la prueba e informe de evaluacin de seguridad: Son el resultado de las pruebas. Se muestran las fortalezas
y debilidades del sistema. Debe incluir un informe de evaluacin de seguridad para certificar el sistema.
Que el usuario sepa introducir los datos de entrada y obtener los de salida.
Que el usuario pueda interpretar correctamente los mensajes de error.
Es deseable que una parte del mismo pueda servir como tutorial del sistema.
Una parte debe ser un manual de referencia.
Es importante tener en cuenta a qu personas va dirigido el manual, no se redacta igual para un directivo, que probablemente
est ms interesado en una visin general del sistema que no va a usar directamente que a un empleado de base que se dedica
a introducir algunos datos o que un miembro administrativo que usar el sistema para por ejemplo sacar estadsticas de ventas.
Como existen diferentes perfiles de utilizacin el manual de usuario deber reflejar esto estructurndose en mdulos dirigidos a
tipos diferentes de personas.
Dentro de cada uno de los mdulos deberan existir procedimientos especficos para funcionalidades concretas. Un procedimiento sera una lista ordenada de acciones para conseguir algo. Las posibles bifurcaciones de cada procedimiento respecto al
camino principal debern documentarse igualmente.
Existen estndares de documentacin que especifican el ndice del manual (y algunos como el de GNU incluso el formato,
que debe ser T EXINFO para as poder ser traducido automticamente a otros formatos). En cualquier caso, el ndice deber
contener los siguientes puntos:
1. Instalacin del producto. Se indicarn los requisitos, tanto software como hardware.
2. Configuraciones posibles, teniendo en cuenta los diferentes perfiles de usuario.
3. Si el manual tiene varios mdulos en funcin de los perfiles de usuario, para cada uno de ellos:
Se indica un procedimiento para obtener cada funcionalidad. Debe indicarse la secuencia en la que se ejecutan las
acciones y las posibles bifurcaciones.
Cada procedimiento se entiende mucho mejor si tiene ejemplos.
Es deseable que exista un tutorial, ya sea en la aplicacin o en el manual.
Si se manejan documentos de entrada y/o salida se dar si ha lugar una breve explicacin sobre su nombre, formato,
origen, localizacin, usuarios que lo manejan y procesos de backup.
10
Objetivos
Documentar en forma detallada las caractersticas de cada componente de la arquitectura tcnica del sistema.
Servir como base para el mantenimiento futuro de los procesos y programas del sistema.
Contenidos
1. Descripcin general del sistema
Identificacin del sistema: Nombre y siglas que lo identifican.
Objetivos: Descripcin breve del objetivo general del nuevo sistema, incluyendo referencia a las funciones del negocio
(planificacin, gestin, etc) qu cubre y cmo lo hace.
Alcance: Diagrama de contexto que muestre la interaccin del sistema con el resto de los sistemas de la organizacin.
Caractersticas generales. Descripcin breve de las siguientes especificaciones funcionales y/o tcnicas:
Polticas relacionadas con su uso. Siguiendo las polticas, normas y estndares vigentes, se debern adjuntar:
Identificacin del responsable de los datos.
Identificacin de informacin confidencial y pblica para su tratamiento.
Principales sectores usuarios.
11
Nmero de evento.
Descripcin.
Origen de la informacin.
Destino de la informacin.
Flujo de datos.
Procesos del sistema: Contiene el inventario y la descripcin general de cada una de las opciones de la aplicacin,
incluyendo imgenes de las pantallas utilizadas.
Dilogo del sistema: Muestra la comunicacin entre las distintas pantallas de la aplicacin identificando las condiciones que provocan la navegacin entre las mismas.
Modelo de procesadores: Muestra de manera grfica los distintos dispositivos fsicos requeridos, la asignacin de
tareas y la conectividad entre ellos.
Esquema de mdulos:Esquema donde se visualice el sistema como un conjunto de bloques, cada uno de los cuales
representa un mdulo o subsistema del mismo.
3. Especificaciones de los mdulos. Por cada mdulo deber tenerse la siguiente informacin:
Nombre del mdulo.
Descripcin detallada del mdulo y sus funciones.
Diagrama general del mdulo.
Flujo de pantallas (si corresponde)
Lista de componentes que lo implementan.
Lista de bases de datos.
Lista de archivos y tablas que utiliza.
Lista de las vistas lgicas de los datos.
Lista de los informes que genera.
4. Especificaciones de los procesos
Inventario general de procesos del sistema: Es una lista de todos los procesos, la cual contendr los siguientes datos:
Nombre del proceso, Descripcin breve y Mdulo al que pertenece mdulos que incluye.
Dejar documentado que para obtener informacin particular de cada proceso se deber relacionar este manual con el
manual de operaciones.
5. Especificaciones de programacin: Para cada componente de programacin del sistema (dependiendo del lenguaje a
utilizar: programa, subrutina, procedimiento o funcin), deber incluirse la siguiente informacin:
Nombre del componente.
Descripcin y objetivos.
Diagrama general del componente.
6. Especificaciones de los datos
Modelo conceptual de datos: Permite visualizar las entidades de datos requeridas por el sistema y sus relaciones. Se
debern adjuntar:
Diagrama general.
Diagrama de las distintas vistas (si fuese necesario).
Definicin de las entidades.
Diccionario de datos.
12
Diseo lgico de base de datos: Documenta la base de datos segn la perspectiva de los desarrolladores de aplicaciones y los usuarios finales, sin preocuparse por su implementacin fsica en un DBMS (Database Management
System) particular. Se debern adjuntar:
Diagrama de tablas y sus relaciones.
Diagrama de las distintas vistas (si fuese necesario).
Definicin de atributos y dominios.
Diseo fsico de base de datos: Contiene las definiciones detalladas de todos los archivos y/o bases de datos del sistema y cada uno de sus componentes (tablas, columnas, claves, ndices, integridad referencial, triggers, etc). Adjuntar
la forma en que cada programa los accede y procesa sus datos, su localizacin fsica y la descripcin de su sistema de
backup. Para aquellos que tengan proceso de mantenimiento independiente del sistema, se deber adjuntar la forma
de acceso al men correspondiente y las instrucciones para su uso.
Tutorial posterior
Resumen de contenidos
Finalizacin del proyecto
El objetivo llegados a este punto consiste en entregar el producto al cliente y ponerlo en condiciones de funcionar. La
aceptacin ocurre cuando han terminado todas las actividades. Se adjunta una plantilla para el informe de cierre del proyecto.
Los indicadores del proyecto son un conjunto de medidas para evaluar de un modo objetivo los resultados. Son de varios tipos:
econmicos, financieros, de ocupacin laboral y de gestin.
Planificacin de revisiones y organizacin del mantenimiento
Se definen los 4 tipos de mantenimiento (perfectivo, correctivo, adaptativo y preventivo) y la problemtica asociada. Se define
el concepto de cdigo heredado (legacy code) y se da una descripcin de como se debe gestionar el mantenimiento. Se define
a su vez una plantilla de documento para esta tarea. El objetivo de la planificacin del mantenimiento es asignar recursos
lo antes posible para que estn disponibles en su momento, para ello se define un plan de mantenimiento. Las tcnicas de
mantenimiento son: ingeniera inversa, identificacin de componentes funcionales, reestructuracin y reingeniera.
13
Extensin de conocimientos
Los contenidos de este tema tambin se puede estudiar en [Som98, cap. 8], [Haw98, cap. 19] [Sch92, cap. 11].