23
Ingeniería del Software 1 – Curso 2006-2007 1 INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 Guiones de clase 1. Estándares de documentación en el SDP................................................................................ 1 2. Introducción a la ingeniería de requisitos ............................................................................... 2 3. Obtención y descripción de requisitos del usuario ................................................................. 5 4. Modelado de casos de uso ...................................................................................................... 8 5. Ética y responsabilidad profesional en la ingeniería del software........................................ 10 6. Responsabilidad ética del ingeniero de software.................................................................. 12 7. Requisitos del software: tipos de requisitos ......................................................................... 13 8. Requisitos del software: propiedades y atributos ................................................................. 16 9. Requisitos del software: organización y calidad .................................................................. 19 10. Sobre la diferencia entre análisis y diseño.......................................................................... 21 11. Modelado conceptual con UML (1) ................................................................................... 22 12. Modelado conceptual con UML (2) ................................................................................... 23 13. La transición del análisis al diseño ..................................................................................... 24 14. Introducción al diseño arquitectónico................................................................................. 25 15. Modelado arquitectónico con UML ................................................................................... 27 16. Estilos arquitectónicos (1) .................................................................................................. 28 17. Estilos arquitectónicos (2) .................................................................................................. 30 18. ¿Qué es diseño orientado a objetos? ................................................................................... 32 19. Introducción al diseño detallado ......................................................................................... 34 20. Diseño detallado con UML (1) ........................................................................................... 36 21. Diseño detallado con UML (2) ........................................................................................... 37 22. Patrones de diseño (1)......................................................................................................... 38 23. Patrones de diseño (2)......................................................................................................... 40 24. Implementación de asociaciones UML en Java ................................................................. 42 1. Estándares de documentación en el SDP Presentación de IS1 Profesorado / Web de la asignatura Relación con otras asignaturas: IS1 + IS2 Objetivos de la asignatura Programa de la asignatura: teoría / Programa de la asignatura: prácticas Documentación entregada / Descripción de la práctica Formato de los documentos Programa de la asignatura: calendario Evaluación de la asignatura Bibliografía Flujos de trabajo vs. Documentos USDP vs. Clásica IEEE vs. ESA Documentos definidos en el estándar de la ESA

INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

  • Upload
    vanthu

  • View
    245

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 1

INGENIERÍA DE SOFTWARE 1 y 2

2006-2007

Guiones de clase

1. Estándares de documentación en el SDP................................................................................1 2. Introducción a la ingeniería de requisitos...............................................................................2 3. Obtención y descripción de requisitos del usuario .................................................................5 4. Modelado de casos de uso ......................................................................................................8 5. Ética y responsabilidad profesional en la ingeniería del software........................................10 6. Responsabilidad ética del ingeniero de software..................................................................12 7. Requisitos del software: tipos de requisitos .........................................................................13 8. Requisitos del software: propiedades y atributos .................................................................16 9. Requisitos del software: organización y calidad ..................................................................19 10. Sobre la diferencia entre análisis y diseño..........................................................................21 11. Modelado conceptual con UML (1) ...................................................................................22 12. Modelado conceptual con UML (2) ...................................................................................23

13. La transición del análisis al diseño .....................................................................................24 14. Introducción al diseño arquitectónico.................................................................................25 15. Modelado arquitectónico con UML ...................................................................................27 16. Estilos arquitectónicos (1) ..................................................................................................28 17. Estilos arquitectónicos (2) ..................................................................................................30 18. ¿Qué es diseño orientado a objetos?...................................................................................32 19. Introducción al diseño detallado.........................................................................................34 20. Diseño detallado con UML (1) ...........................................................................................36 21. Diseño detallado con UML (2) ...........................................................................................37 22. Patrones de diseño (1).........................................................................................................38 23. Patrones de diseño (2).........................................................................................................40 24. Implementación de asociaciones UML en Java .................................................................42

1. Estándares de documentación en el SDP

Presentación de IS1 � Profesorado / Web de la asignatura � Relación con otras asignaturas: IS1 + IS2 � Objetivos de la asignatura � Programa de la asignatura: teoría / Programa de la asignatura: prácticas � Documentación entregada / Descripción de la práctica � Formato de los documentos � Programa de la asignatura: calendario � Evaluación de la asignatura � Bibliografía

Flujos de trabajo vs. Documentos

� USDP vs. Clásica � IEEE vs. ESA � Documentos definidos en el estándar de la ESA

Page 2: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 2

2. Introducción a la ingeniería de requisitos

Qué es la Ingeniería de Requisitos � Es la rama de la ingeniería del software que se ocupa de la primera etapa en el proceso de

desarrollo del software: la comprensión y formalización de las necesidades que debe satisfacer un sistema informático.

� “Es el desarrollo sistemático de los requisitos a través de un proceso iterativo y cooperativo en el que se analiza el problema, se documenta el resultado en diversos formatos de representación, y se comprueba la exactitud de la comprensión alcanzada” (Locopoulos & Karakostas. Systems Requirements Engineering. McGraw-Hill, 1995).

� Se pueden distinguir dos fases en el proceso: o Captura: interacción cuidadosa con todos aquellos interesados en la aplicación o

sistema informático; adquisición de información, “requisitos en bruto”. o Análisis: estudio cuidadoso de la información adquirida para lograr una verdadera

comprensión de los requisitos y estructurarlos adecuadamente; expresar los requisitos de forma concreta y detallada; refinamiento, depuración, estructuración, “requisitos depurados”.

� Obtener los requisitos correctos es un proceso difícil: o Adivinar los deseos y necesidades que habitualmente el cliente no es capaz de describir

más que en forma confusa, incompleta y desordenada. o Los requisitos no se descubren, se inventan; los requisitos no están ahí esperando que

alguien los descubra, sino que son creados, construidos o inventados en un proceso interactivo entre el cliente y el ingeniero.

o La mayor parte de los defectos en el software entregado tienen su origen en el análisis de requisitos, y son en general los más difíciles de reparar.

o El éxito en el producto requiere colaboración y comunicación fluida entre clientes y desarrolladores: cuanto más completo y menos ambiguo sea el conjunto de requisitos, más probabilidades de éxito.

� El resultado del proceso es el “documento de requisitos”, que es uno de los productos (o artefactos) del proceso de desarrollo de software: modelos de diseño, código fuente, pruebas, manuales...

Un caso práctico � Agenda de compromisos: “Necesito algo para organizar mejor mis actividades, una agenda

para llevar al día mi horario, mis compromisos, etc.” � ¿Cuánto se tardaría en desarrollar esta aplicación?

o “¡Esto me lo curro yo en una semanita!” � En el momento de la entrega de la agenda el cliente no queda satisfecho:

o Quiere más, quiere otra cosa. o Colores, sonidos, funciones, copiar compromisos de un día a otro… o La divertida semanita se convierte en una pesada carga. o ¿Hasta qué punto me he comprometido?

� Antes de entregarla, quiero probarla… o ¿qué pruebo? o ¿qué porcentaje de funcionalidad he alcanzado?

� La ingeniería del software no trata de “programar bien”, sino de: o Cumplir plazos, presupuestos y expectativas. o Gestionar riesgos y recursos. o Transformar la producción artesanal en industrial.

� ¿Termina el ciclo de vida del software en la entrega del producto? Grave error: mantenimiento.

Page 3: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 3

Necesidad de la Ingeniería de Requisitos

� Para construir algo, antes hay que entender qué es ese “algo”. � Si la aplicación funciona, pero no satisface las necesidades del cliente... ¿de qué sirve? � En general, los requisitos expresan qué debe hacer una aplicación, sin decir cómo debe

hacerlo: expresan el punto de vista del cliente, que sabe lo que quiere (en el mejor de los casos), pero no tiene por qué saber cómo conseguirlo: o A menudo el cliente ni siquiera sabe lo que quiere. o Tarea del analista es ayudar a que el cliente se exprese.

� Ejemplo: o El sistema permitirá al usuario consultar el saldo de su cuenta (sí). o Los saldos de clientes se almacenarán en una tabla llamada Saldo en una base de datos

Access (no). � Excepciones: puede ocurrir que usar Access sea un requisito:

o Existen distintos niveles de abstracción en los requisitos, debido a que suelen provenir de distintas fuentes (distintos interlocutores con distinto nivel de conocimientos tecnológicos).

o Ejemplo: el informático de la empresa nos habla de los sistemas con los que deberá interactuar el nuestro, mientras que el jefe de contabilidad nos proporciona una mejor visión sobre el conjunto de procesos del área.

Por qué es necesario escribir los requisitos

� Es obvio incluso para el novato, pero con demasiada frecuencia se ignora o deja pasar. � Tarea descuidada durante mucho tiempo: trivial, “literaria”, poco tecnológica... � ¿No quedan bien expresados en el código fuente? No, no funciona. � Sin requisitos escritos, el equipo de desarrollo:

o No sabe cuál es su objetivo. o No puede inspeccionar su trabajo. o No puede probarlo (¡y las pruebas sí se consideran esenciales!). o No puede analizar su productividad. o No puede reflexionar sobre sus prácticas. o No puede predecir el tamaño y esfuerzo del siguiente trabajo. o No puede satisfacer a sus clientes. o Brevemente, no hay ingeniería profesional sin requisitos escritos.

� Una forma de NO escribirlos es no mantener las versiones, o no publicarlas. � Cada uno de los requisitos debe ser...

o Expresado con propiedad. o Fácilmente accesible para todo el personal involucrado. o Numerado de forma unívoca. o Acompañado por pruebas que lo verifiquen. o Tenido en cuenta en el diseño y el código. o Probado aisladamente y con otros requisitos. o Validado por las pruebas al finalizar la construcción de la aplicación.

� Sin requisitos escritos sería imposible hacer todo esto.

The Chaos Report � Estudios de Standish Group International (1994, 1996, 1998, 2000, 2003):

o Exitoso: termina bien (tiempo, dinero, requisitos). o Completo pero deficiente: termina y funciona (+ tiempo, + dinero, – requisitos). o Cancelado: no termina.

� Conclusiones: la adecuada gestión de los requisitos es el factor más importante de éxito en un proyecto, por encima de las pruebas, el diseño, la programación...

Page 4: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 4

Dos niveles en los requisitos � ¿Del cliente o del sistema, del usuario o del software?

o Puente a medio camino: del cliente para el desarrollador. � Primer nivel: requisitos del usuario (o del cliente):

o Deseos y necesidades del cliente, expresados en lenguaje comprensible por él. o Audiencia primaria: cliente – Audiencia secundaria: desarrollador.

� Segundo nivel: requisitos del software (o del sistema, del desarrollador, detallados...): o Forma estructurada y específica, carácter mucho más técnico. o Audiencia primaria: desarrollador – Audiencia secundaria: cliente.

� La finalidad última es la misma. La distinción entre los dos niveles no es muy clara: o Forma: no estructurada / estructurada. o Audiencia: cliente / desarrollador. o Contenido: mayor o menor nivel de detalle, precisión y formalidad. o Texto / Texto + Diagramas. o Requisitos en bruto � Requisitos depurados.

� Distintas nomenclaturas y clasificaciones, misma idea de fondo: o Clásica/IEEE:

� Una única fase: Análisis de Requisitos. � Único documento Especificación de Requisitos con los requisitos C y D.

o USDP/ESA: � Dos fases: Requisitos + Análisis. � Dos documentos: Requisitos del Usuario+ Requisitos del Software.

Dificultades de la Ingeniería de Requisitos

� El precio pagado: un defecto en los requisitos es 20-50 veces más caro de reparar si se desliza en el resto del proceso de desarrollo (aparte del daño que sufre el prestigio del desarrollador).

� La inversión es tanto más valiosa cuanto mayor sea el proyecto. � Si el beneficio es tan grande, ¿por qué tan a menudo se omite el análisis de requisitos?

o Los clientes normalmente no tienen claro lo que quieren al principio, sólo una idea vaga, y esto convierte el análisis de requisitos en una tarea más difícil.

o Solución: sucesivas iteraciones Requisitos-Diseño-Implementación. � Es una necesidad, no un lujo (“voy despacio porque tengo prisa”, “no puedo permitirme el

lujo de gastar tan poco”). � Muchas organizaciones no logran escribir los requisitos: esto no significa que no los usen,

sino que sólo existen en las mentes de los ingenieros. Otro peligro: la rotación de personal. No es extraño que muchos proyectos nunca terminen.

� Un problema más sutil: escribir sólo la primera versión de los requisitos, pero sin mantenerlos al día en sucesivas iteraciones. Para poder actualizar el documento de requisitos es necesario que esté bien organizado. Gestión de requisitos cambiantes. Herramientas.

� Escribir es pensar. Escribir código prematuramente es como echar cemento sin saber cómo va a ser el puente. Documentar no es sólo registrar decisiones, es pensar por escrito.

� El rechazo o desgana para escribirlos no es porque sea una tarea trivial e inútil, sino porque es demasiado difícil. La profesionalidad lo exige.

La Ingeniería de Requisitos en el contexto del proyecto � Los requisitos tienen valor contractual, establecen los límites de la aplicación. � Pueden estar sujetos a normas de confidencialidad y propiedad intelectual. � Son la base para los estudios de viabilidad: ¿merece la pena realizar el proyecto? � La mejor comprensión de los requisitos facilita refinar las estimaciones de esfuerzo necesario. � La obtención de requisitos afecta a la planificación del proyecto. El proceso puede ser

iterativo, pero con ciertos límites: el cliente quiere saber el coste antes de empezar, el desarrollador no quiere comprometerse al menos hasta congelar los requisitos.

Page 5: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 5

3. Obtención y descripción de requisitos del usuario

Las fuentes de los requisitos � Restricciones naturales (físicas, químicas, biológicas, sociológicas...) � Documentos (leyes, documentos organizativos de la empresa...) � Personas: deseos y necesidades � Expertos del dominio � Otras aplicaciones en uso en el dominio

Plan de trabajo para obtener los requisitos

� Identificar al usuario (usuarios posibles, seleccionar entre ellos) � Entrevistar al usuario (antes, planificar la entrevista) � Escribir los requisitos del usuario (sucesivas versiones) � Revisar los requisitos con el usuario � Repetir los pasos hasta que el usuario firme el “conforme” del documento

Identificación de stakeholders (interesados: usuarios, clientes, propietarios, etc.)

� ¿Quiénes tienen interés en el producto? (Ejemplo: sitio web de comercio electrónico) o Los usuarios (pueden ser millones... y saber mucho más que nadie del tema) o Los propietarios o Los administradores o Incluso los desarrolladores (negociar requisitos para protegerse)

� ¿Quién es el cliente? o La persona que te contrata. o El departamento de Marketing, que diseña un producto para un cliente ideal. o Aplicaciones a medida, aplicaciones genéricas (product lines).

� Los distintos interesados pueden tener intereses contrapuestos y generar requisitos contradictorios (¿puede un profesor ver el expediente académico de un alumno?) o Ejemplo: El cliente de Aula Global es la Universidad, pero los usuarios principales son

los profesores y alumnos, que no fueron consultados... � Negociar el equilibrio requisitos-presupuesto-planificación: tarea del director del proyecto,

que requiere habilidades de gestión, personales, negociadoras y políticas. � El cliente confía en el ingeniero de requisitos para aclarar sus necesidades (como en un

arquitecto para definir la casa que quiere construir). � Trabajo conjunto para determinar los deseos del cliente: idea general, estudio del problema,

descubrir matices, tomar decisiones clave.

El punto de vista del cliente � El gran desafío es averiguar y expresar claramente lo que los clientes necesitan. � A veces bastan las palabras, pero otras veces las figuras o tablas son de gran ayuda. � El cliente suele tener una idea vaga, inconsciente e incompleta de lo que espera de su

aplicación (punto de vista del cliente). � Diferentes personas pueden concebir de modo muy distinto lo que implica un sistema. � Ejemplo: una “aplicación meteorológica” puede significar:

o Una utilidad para presentar gráficamente información recibida en bruto del servicio meteorológico.

o Un sistema en tiempo real para predecir el tiempo. o Una aplicación para alertar a los usuarios de anomalías climáticas.

Page 6: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 6

Cómo llevar adelante una entrevista � La entrevista es un recurso caro:

o Consume un tiempo significativo de más de una persona. o � Requiere una planificación cuidadosa.

� Es importante escuchar con atención, pero no basta con escuchar pasivamente: o Hay que saber preguntar, el cliente necesita ayuda. o Ganarse la confianza del cliente. o El resultado es producto del trabajo conjunto.

� Escribir los requisitos y validarlos por escrito; continuar las reuniones hasta lograr el acuerdo. � Antes de la entrevista:

o Enumerar y priorizar los entrevistados. o Planificar la hora de comienzo y finalización de cada entrevista. o Enumerar los puntos que es necesario tratar en la entrevista.

� Durante la entrevista: o Asistir al menos dos personas del equipo de analistas: es preferible que haya dos

entrevistadores (uno pregunta, otro anota); uno solo puede verse desbordado. o Usar cinta grabadora (pedir permiso). o Concentrarse y escuchar. o No ser pasivo: preguntar y animar. o Insistir hasta entender los deseos y las necesidades. o Utilizar diagramas (si son útiles y según la formación de los entrevistados). o Tomar notas detalladas. o Concretar la siguiente entrevista.

� Después de la entrevista: o Redactar el borrador de requisitos. o Revisar entre los dos entrevistadores. o Enviar a los clientes para comentar y aprobar.

Técnicas para la obtención y descripción de requisitos del usuario

� Textuales: relativamente accesibles a un cliente sin formación específica o Texto en prosa común y corriente, tablas, etc. o Texto estructurado, lenguaje técnico o Casos de uso

� Describir los requisitos como interacciones entre la aplicación y agentes externos. � Expresan el punto de vista del usuario de cómo debe funcionar la aplicación. � Más adecuados para obtener requisitos funcionales que no-funcionales.

� Gráficas: requieren un cierto grado de formación técnica en el cliente; tienen el peligro de convertir el análisis de requisitos en diseño de la aplicación o Diagramas de flujo de datos

� Para requisitos que se describan de modo natural como un flujo de datos (flechas) entre elementos de procesamiento (nodos).

� La utilidad de los DFD’s depende del tipo de aplicación. o Diagramas de actividad

� El énfasis no se pone en el flujo de datos sino en el flujo de control entre acciones. o Diagramas de estados

� Dividir la aplicación en estados, de modo que el sistema siempre se encuentre exactamente en uno de ellos.

� Útiles para aplicaciones dirigidas por eventos. � Prototipos: no confundir con diseño, valorar la inversión

o Interfaces de usuario o Prototipado rápido

Page 7: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 7

Interfaces de usuario � Diseño de la interfaz de usuario: ¿requisitos o diseño? � Visualizar la GUI ayuda a los clientes a concebir y describir la aplicación. � Al ver los bocetos, el cliente se da cuenta de que necesita más o quiere algo diferente. � Tarea de un profesional especializado (especialmente el diseño detallado). � Once pasos para desarrollar la GUI (ver Braude, pp. 151-157).

Prototipos

� Prototipado rápido: o Implementación parcial, con un componente GUI importante. o Muy útil para extraer requisitos del cliente y para identificar, y tal vez eliminar, partes

arriesgadas de un proyecto. o Una comprensión más profunda ahorra trabajos futuros de corrección.

� El beneficio del prototipo depende de su coste y de su valor para el proyecto. � ¿Debe transformarse el prototipo en la aplicación? Decisión planificada, no accidental,

porque, en caso contrario, puede darse un empeoramiento de calidad. o Contruidos rápidamente, mal documentados (no será necesario mantenerlos)… o Implementados en lenguajes que rápidamente obtienen resultados, pero tal vez

inadecuados para la aplicación final: seguridad, fiabilidad... o Desventaja: el cliente puede impresionarse y pensar que estamos cerca del final. o ¿Transformarías un prototipo de casa con balas de paja en la casa final?

� Beneficios: extraer requisitos, ensayar soluciones.

Los Requisitos del Usuario en el Estándar ESA � Lo que dice cada uno de los documentos:

o ESA software engineering standards (PSS-05-0) o Guide to applying the ESA SE-Std to projects using OO Methods (BSSC98-1) o Guide to the software requirements definition phase (PSS-05-03)

� Nociones importantes: o Alcance del software: objetivo general que se persigue con la aplicación. o Entorno operacional: contexto en el que debe operar el software. o Requisitos de capacidad: funciones y operaciones requeridas por los usuarios para

resolver un problema o alcanzar un objetivo; describe una operación, o secuencia de operaciones, que el software debe ser capaz de realizar.

o Requisitos de restricción: restricciones impuestas por los usuarios sobre la manera en que el problema es resuelto o el objetivo es alcanzado; restringe la manera en que el software es construido o funciona, sin alterar o describir las capacidades del software.

o Atributos de cada requisito: identificador, descripción, necesidad (esencial, conveniente, opcional), estabilidad (estable, inestable), fuente (personas, grupos, documentos...).

� Contenido del documento � Importante: definir bien el alcance del software, el entorno operacional, los tipos de usuarios,

etc. (esto marca una diferencia importante con los requisitos del software).

Preguntas más frecuentes � Ver web de la asignatura.

Page 8: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 8

4. Modelado de casos de uso

Introducción � Propósito: describir las interacciones entre la aplicación y los agentes externos, con el fin de

obtener los requisitos de la aplicación. o Normalmente, las personas encuentran más fácil dar ejemplos de la vida real que

descripciones abstractas. Pueden comprender y criticar un escenario de cómo podrían interactuar con un sistema software.

o Los ingenieros de requisitos pueden utilizar la información obtenida de esta discusión para formular los requisitos reales del sistema.

o Los escenarios son descripciones de ejemplos de sesiones de interacción. o A pesar de enorme número de ejecuciones potenciales, la mayoría de las aplicaciones se

conciben en términos de un número relativamente pequeño de interacciones típicas. La descripción de interacciones cuasi-lineales, o usos típicos, ayuda a entender los requisitos funcionales del sistema, aunque el sistema final, con toda seguridad, no funcionará de forma cuasi-lineal.

� Definición: un caso de uso es la descripción de un uso típico del sistema o aplicación, que proporciona un resultado valioso para el usuario. o Definición alternativa: un caso de uso es la especificación de una funcionalidad o

servicio ofrecido por la aplicación, descrito en forma de interacción usuario-sistema.

Casos de uso y extracción de requisitos � Los casos de uso expresan el punto de vista del usuario sobre cómo debe funcionar la

aplicación: el cliente explica de manera sencilla lo que espera del sistema, por medio de la descripción de una interacción con el mismo, incluyendo la información suministrada, los cambios observables en el sistema, y la respuesta esperada.

� Por su forma de “historia” son útiles para comunicarse con los clientes (y describir o descubrir requisitos): proporcionan una vista muy reveladora de la aplicación, tal como el usuario o cliente piensa acerca de ella. o Los términos usados sirven para descubrir los conceptos fundamentales del dominio. o No obstante, la descripción de historias (escenarios) es útil para ilustrar usos típicos,

pero es bastante limitada para especificar requisitos de modo completo. � El requisito no es la interacción (o escenario), sino el objetivo:

o Ejemplo: agencia de viajes por internet. o Descripción inicial � Patrón de comportamiento � Objetivo. o Lo que el usuario realmente requiere del sistema (el verdadero requisito que hay que

extraer) no es la interacción, sino el resultado observable, u objetivo. o Describir la historia debe ser un medio para llegar a determinar el objetivo. o La historia sirve para entender el requisito, pero no para especificarlo.

� Los casos de uso pueden usarse para organizar los requisitos de usuario. o Requisitos identificados como (objetivos de) casos de uso. o Requisitos subordinados a casos de uso (por ejemplo, información intercambiada). o Otros requisitos, típicamente no-funcionales.

El modelo de casos de uso

� Ejemplo: feria de subastas. � Diagrama de casos de uso: sistema, actores, casos de uso y asociaciones. � Actores: no identificar los actores con “categorías de usuarios”. � Casos de uso: colección de escenarios con un objetivo común. � Actores cooperativos: aplicación a la feria de subastas (“Consultar lista de artículos”). � Include y Extend: aunque mucha gente las usa, su significado está poco claro.

Page 9: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 9

Especificación textual de casos de uso � Nombre, actores y objetivo. � Escenario básico, o escenario principal con éxito (main success scenario).

o Frases simples en la medida de lo posible. � Escenarios alternativos

o Esquemas de numeración de las acciones. � Pre- y post- condiciones

o Describir el estado del sistema, con énfasis en la diferencia originada por el caso de uso. o Relaciones de precedencia entre casos de uso.

� Dos niveles de detalle según las necesidades o Requisitos del usuario: nombre, actores, objetivo y escenario básico. o Requisitos del software: escenarios alternativos, pre- y post- condiciones, etc.

Casos de uso y operaciones del sistema

� No confundirlos: o las operaciones del sistema son respuestas a eventos externos individuales. o un caso de uso es un uso coordinado de operaciones del sistema (varios eventos).

� Típicamente, un caso de uso contiene más de una operación del sistema (protocolo, diálogo). � Ejemplo: acceso al sistema (login), ¿operación del sistema o caso de uso?

o ¿cuál es el objetivo del usuario? � Los pasos de un escenario se pueden agrupar en bloques de acciones, cada bloque

corresponde a una operación del sistema (petición-validación-cambio de estado-respuesta). � Las operaciones del sistema se pueden especificar con contratos más detallados.

Especificación gráfica de casos de uso

� Diagramas de actividad

Casos de uso y procesos de negocio � Un proceso de negocio (business process) es una secuencia de acciones conjuntas en las que

participan uno o más agentes, de acuerdo con ciertas reglas de negocio (business rules). � Los agentes pueden ser una o varias personas, y uno o varios sistemas informáticos.

o Entre todos ellos cooperan para sacar adelante el proceso. o Cada uno de ellos tiene un rol distinto en el proceso, su propia responsabilidad.

� Ejemplo: comprar una casa con hipoteca. o Localizar la casa (vendedor, comprador, web inmobiliaria). o Obtener una hipoteca (comprador, representante del banco, SI del banco). o Formalizar la compra (vendedor, comprador, representante del banco, sistema

informático del banco, notario, sistema informático del registro de la propiedad). � Un caso de uso es una forma de describir la contribución (el rol, la responsabilidad) de un

sistema a una acción conjunta (proyección de la acción conjunta sobre el sistema); describe el comportamiento del sistema en cada parte del proceso de negocio.

� Aplicación al ejemplo: identificar los casos de uso de la web inmobiliaria, del sistema informático del banco, y del sistema informático del registro de la propiedad.

� Consecuencia: el caso de uso sólo describe acciones del sistema. o Entradas de información desde los actores (parecen acciones de los actores). o Salidas de información hacia los actores. o Acciones internas cuyos efectos pueden ser observados o inferidos por los actores (qué,

no cómo – sin detalles innecesarios). o Prohibido: acciones internas de otros actores o sistemas, comunicación de los actores

con otros sistemas, etc. � En cada caso de uso pueden participar uno o varios actores (y alguno puede representar en

realidad otro sistema informático).

Page 10: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 10

5. Ética y responsabilidad profesional en la ingeniería del software

Introducción � Nuestro trabajo comprende responsabilidades más amplias que la mera aplicación de

habilidades técnicas. � Trabajamos con y para personas – la persona es la clave del comportamiento ético.

Qué es la ética

� Ética y moral, ethos y mos: la ética trata del comportamiento, de las (buenas) costumbres. � El problema de la ética es el problema de la libertad: sin libertad no hay ética.

o Si no podemos elegir, entonces no hay bien ni mal, no hay responsabilidad. o Ser libre significa no estar sometido a los instintos (ética ≠ gen-ética). o La ética trata de lo no instintivo, de lo no programado genéticamente. o Actuar por instinto equivale a no ser libre, responsable de los actos.

� Los animales depredadores no son “crueles”. � Racionalidad de la ética (la ética como ciencia).

o “No se puede argumentar racionalmente, todo es opinión y preferencia.” o Sin embargo, el hombre es un ser que se mueve por motivos entendidos:

� La sensibilidad ante la belleza o fealdad de las acciones. � La reflexión sobre la dignidad de la persona. � La experiencia histórica, la tradición cultural, el debate social.

o Que sea difícil alcanzar un acuerdo no implica que la ética sea irracional. o Lo natural en el hombre es ser educado: es necesario aprender la ética.

� Creatividad de la ética (la ética como arte). o “Es un conjunto de (molestas) obligaciones o prohibiciones.” o Más que un código de conducta, es una forma de valorar la vida: educación.

� ¿Obstáculos a la eficacia? � ¡la eficacia no lo es todo! o La ética es ante todo creatividad y libertad, inventar formas de hacer el bien.

� Hacer cosas buenas – arte, producción de un objeto externo. � Hacer las cosas bien. � Hacernos personas buenas – arte de vivir, crecimiento personal.

o Por ser arte, lo natural es: preceptos negativos concretos, preceptos positivos abiertos.

El principio fundamental de la ética � Cada persona es un fin en sí misma, nunca un puro medio para conseguir otra cosa. � Haz el bien, todo el que puedas, y no te canses.

Los tres pilares de la ética (análisis..., ¡y que no falte la síntesis!)

PILAR valor intrínseco prototipo extremismo

(aislamiento de los otros dos pilares: deshumanización)

aportación a los otros dos

pilares

VIRTUD (Séneca)

entrenamiento autodominio

crecimiento personal caballero fortaleza insensible

facilita interioriza

NORMA (Kant)

racionalidad vivir según la razón

la voz de la conciencia militar

rigorismo inhumano normativismo hipócrita

interpela racionaliza disciplina

BIEN (Epicuro)

felicidad disfrutar de la vida

vividor egoísmo materialista

indisciplinado

atrae da sentido

abre al exterior

Page 11: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 11

Lo ético y lo legal

� tipos de leyes: internacionales, estatales, estatutos de una asociación... � la ley no nos hace buenos, sólo el deseo libre de hacer el bien

o “el que hace la ley, hace la trampa” � no obstante, la ley tiene una función educadora � primacía de lo ético

o posibilidad de leyes injustas (“esto está mal aunque la ley lo permita”) o la ética inspira el desarrollo de la ley

� no se debe prohibir todo lo que no sea ético, ni mandar todo lo que sea ético o negar el saludo a un vecino, no ceder el asiento en un medio de transporte... o prohibirlo todo o mandarlo todo sería asfixiante, ahogaría la libertad creativa

� el comportamiento ético no se puede encerrar en un código de conducta

Problemas éticos específicos de la ingeniería del software � ética general: veracidad, honestidad, solidaridad... � ética de los negocios: relaciones jefe-empleado, relaciones cliente-desarrollador... � ética de las tecnologías de la información: uso inapropiado de los ordenadores, propiedad

intelectual, protección de datos y confidencialidad, sistemas militares y nucleares, terrorismo y privacidad...

� ética de la ingeniería del software: confidencialidad del cliente o empleador, responsabilidad indirecta por el (mal) funcionamiento de los sistemas...

El código ético de ACM/IEEE (v5.2, 1999) � preámbulo

o papel central y creciente de los ordenadores en la sociedad o papel de los ingenieros de software en el desarrollo de sistemas software o oportunidades significativas de hacer el bien o causar daño o comprometerse consigo mismos para hacer de la ingeniería del software una profesión

beneficiosa y respetada o obligaciones fundadas en la humanidad del ingeniero de software, con especial cuidado

debido a las personas afectadas por el trabajo de los ingenieros de software, y los elementos únicos de la práctica de la ingeniería del software

o no es simple un algoritmo ético que genere decisiones éticas (¿leyes de la robótica?): para actuar éticamente siempre se requiere el juicio ético personal

o ayuda a definir las acciones éticamente impropias de un ingeniero software o pretende educar e inspirar a los ingenieros de software para que desarrollen un

comportamiento ético en el ejercicio de su profesión � ocho principios o aspiraciones generales, ilustradas con detalles y ejemplos

o sin las aspiraciones, los detalles se vuelven legalistas y tediosos o sin los detalles, las aspiraciones se vuelven sonoras pero vacías

� es un compromiso de los miembros de ACM/IEEE

Bibliografía adicional � ACM/IEEE, Software Engineering Code of Ethics and Professional Practice, Version 5.2,

1999 (www.acm.org/serving/se/code.htm). � D. Gotterbarn, K. Miller, S. Rogerson. “Software Engineering Code of Ethics is Approved”.

Communications of the ACM, 42(10):102-107, October 1999. � F. Bott et al. Professional Issues in Software Engineering. Taylor & Francis, 2000. � D.G. Johnson. Ética informática. Universidad Complutense de Madrid, 1996. � R. Escolá, J.I. Murillo. Ética para ingenieros. Eunsa, 2002. � R. Spaemann. Ética: Cuestiones fundamentales. Eunsa, 1998.

Page 12: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 12

6. Responsabilidad ética del ingeniero de software

A1. ¿Cuál es la diferencia esencial entre el deontologismo moderado y el consecuencialismo moderado?

El consecuencialista moderado no reconoce reglas absolutas. El deontologista moderado reconoce algunas reglas absolutas, aunque no todas lo sean.

A2. Razone si es adecuado el análisis puramente consecuencialista de la responsabilidad en el diseño de sistemas complejos.

No es adecuado, porque las consecuencias son especialmente difíciles de prever dada la complejidad de los sistemas software, y porque ningún ser humano puede ser responsable de todas las consecuencias de sus actos.

B1. ¿Por qué es irracional el consecuencialismo extremo?

Porque las consecuencias se extienden en un periodo de tiempo ilimitado, porque las consecuencias futuras son siempre hasta cierto punto inciertas, y porque al final hacen falta reglas para valorar las consecuencias.

B2. Describa brevemente las características de los códigos éticos actuales en ingeniería del software, en particular el de ACM/IEEE.

Deontologismo moderado. Centralidad del interés público. Preeminencia de ciertos valores humanos absolutos, junto con la necesidad de considerar las consecuencias de los actos. Valores que afectan a la verdad de la información y reglas empíricas que recogen la experiencia de muchos años de profesión.

C1. ¿Por qué es irracional el deontologismo extremo?

Es imposible definir una acción sin considerar sus efectos precisos: actuar significa producir efectos. Por tanto, el deontologismo extremo no puede proponer reglas prácticas de conducta.

C2. Explique las implicaciones de la complejidad de los sistemas con respecto a la responsabilidad ética de los desarrolladores.

Responsabilidad compartida, debe estar claramente distribuida entre los distintos profesionales implicados. Consecuencias más difíciles de predecir, por lo que resulta inadecuado el análisis consecuencialista de la responsabilidad. Los sistemas se prueban, pero no se demuestran.

D1. Diferencia entre responsabilidad moral y responsabilidad legal.

La responsabilidad legal es la exigida por la ley (acciones legales o ilegales), mientras que la responsabilidad moral deriva de la consideración de la dignidad humana (acciones buenas o malas). No coinciden exactamente: a veces la responsabilidad legal va más allá de la moral, y lo más frecuente es que la responsabilidad moral sea más amplia que la legal.

D2. Explique brevemente las nociones de “consecuencias predecibles” y “consecuencias directas” en el contexto de la responsabilidad en la ingeniería del software.

Predecibles: consecuencias que pueden ser razonablemente predichas y de las cuales el agente será considerado responsable. Impone la obligación de prever, no despreciar, las consecuencias de los actos. Directas: consecuencias que se derivan de la propia naturaleza de los actos. Las consecuencias indirectas (no directamente queridas) no deben tenerse en cuenta para valorar la responsabilidad, incluso aunque hayan sido correctamente previstas. Juzgar las consecuencias directas que pueden ser razonablemente predichas requiere un buen conocimiento de la profesión.

Page 13: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 13

7. Requisitos del software: tipos de requisitos

Qué son los Requisitos del Software � Es el único lugar donde se pone por escrito la naturaleza exacta de la aplicación.

o Se elaboran a partir de los requisitos del usuario. o Son la base para el diseño y la implementación.

� Diversas denominaciones: del software, del desarrollador, detallados, específicos... � El nivel de detalle debe ser completo, pero no redundante.

o Lista completa de propiedades específicas y funcionalidad de la aplicación. o A cada requisito se le sigue la pista hasta la implementación.

� Diferencia con los requisitos del usuario: o Punto de vista del cliente, del desarrollador.

� Audiencia primaria, el desarrollador. El cliente puede estar interesado en ellos e incluso entenderlos y hacer observaciones.

� Anéctoda: en 1999 la NASA perdió un satélite porque se asumió que ciertos datos de control estaban en unidades métricas en lugar de anglosajonas; el defecto se identificó pocos días después del desastre... (podía haberse identificado durante el análisis).

� No es una tarea estúpida: organizar todos los requisitos bien detallados es una tarea difícil que requiere saber organizar personas y documentación.

Clasificación de requisitos del software � Requisitos inversos: lo que la aplicación no debe hacer (son infinitos...).

o Pueden aclarar posibles malentendidos, el alcance del sistema. o Seleccionar aquellos que sirven para aclarar los verdaderos requisitos. o Ejemplo: la aplicación no asesorará al usuario sobre... o ¿Dónde? Alcance del software (RU/RS). Anotación a un requisito concreto.

� Requisitos funcionales (derivados de los requisitos de capacidad – decir el qué). o Especifican la funcionalidad o servicios que la aplicación debe proporcionar.

� Ejemplo: un tiempo de respuesta no es un requisito funcional. o Acompañados de un modelo de análisis (Platform Independent Model - PIM).

� Modelo conceptual: requisitos de información. � Modelo de casos de uso: requisitos de operación. � Modelos de comportamiento que sean necesarios.

� Requisitos no funcionales (derivados de los requisitos de restricción – restringir el cómo). o Imponen restricciones: en el producto desarrollado, en el proceso de desarrollo. o Características distintivas:

� Como debe realizar algo el software, NO qué debe realizar. � Requieren operacionalización, pero eso no significa que sean funcionales. � Cortan transversalmente a los requisitos funcionales. � Son negociables hasta cierto punto, dentro de límites aceptables. � La medida de satisfacción (o verificación) no es todo/nada, sino gradual.

o A veces denominados requisitos de calidad, o requisitos de diseño. � “La funcionalidad se presupone, la calidad satisface (o no)”.

o Ejemplos: consumo de recursos, rendimiento, fiabilidad y disponibilidad, seguridad, portabilidad, mantenibilidad, modificabilidad, reusabilidad, interfaces, amigabilidad, manejo de errores, uso de estándares, verificación...

o Habitualmente peor analizados y documentados. � Descritos de modo vago, informal, ambiguo (dificultan la verificación). � Repetidos en muchos lugares (transversalidad). � Peor contemplados en los modelos.

Page 14: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 14

Consumo de recursos (Resource expenditure) � Especifican la cantidad de recursos que la aplicación requiere. � Ejemplos:

o Uso de memoria (volátil / permanente; o primaria / secundaria). o Capacidad de tráfico, líneas de atención simultánea, etc.

Rendimiento (Performance)

� Especifican restricciones temporales que la aplicación debe cumplir. � Son críticas en los sistemas de tiempo real.

o Ejemplos: velocidad, tiempo de respuesta, etc.

Fiabilidad y disponibilidad (Reliability and availability) � En estos dos factores se reconoce que las aplicaciones difícilmente son perfectas, pero sí se

exige en ellas un nivel de calidad mínimo y cuantificable. � Fiabilidad: cuantifica los errores permisibles y su gravedad.

o Ejemplo: “el sistema no sufrirá más de dos fallos de nivel uno al mes”. � Disponibilidad: cuantifica el tiempo en que la aplicación estará operativa para los usuarios.

o Ejemplo: “la aplicación no estará operativa como máximo durante 10 horas en cualquier periodo de 30 días, y como máximo durante 2 horas seguidas”.

Manejo de errores (Error handling)

� Cómo debe responder la aplicación a errores de su entorno, o a errores internos. o Ejemplo: cómo reaccionar ante un mensaje en formato no reconocido.

� No se debe abusar del manejo de errores internos, que no deben existir (no debemos cubrir nuestros errores con un código interminable de manejo de errores). o Ejemplo: determinar lo que hay que hacer si una función es llamada con parámetros

equivocados; esto sólo se debe hacer si es preferible manejar el error a la terminación de la aplicación.

Requisitos de interfaz (Interface requirements)

� Describen el formato con el que la aplicación se comunica con su entorno. o Ejemplo (comunicación con usuarios): El coste del envío se mostrará en la esquina

inferior derecha. o Ejemplo (comunicación con otras aplicaciones): Los pedidos se transmitirán en formato

XML utilizando la plantilla DTD detallada en el anexo IV.

Restricciones (Constraints) � Describen límites o condiciones sobre cómo diseñar o implementar la aplicación. � Estos requisitos no deben suplantar el proceso de diseño, simplemente especifican

condiciones impuestas en el proyecto por el cliente, el entorno, u otras circunstancias. � Ejemplos:

o Exactitud, precisión: las tarifas aplicadas se medirán en diezmilésimas de euro. o Lenguaje, herramienta, plataforma: se empleará el lenguaje Fortran, el gestor de base de

datos SQLServer, la aplicación deberá funcionar sobre Windows 95. o Arquitectura: se emplearán tecnologías de intranet y cliente-servidor. o Estándares: los informes generados se ajustarán al estándar XX-123.

Seguridad (Security / Safety)

� Security: seguridad del sistema frente a amenazas externas (confidencialidad, integridad, disponibilidad, etc.).

� Safety: seguridad de las personas frente a fallos del sistema.

Page 15: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 15

Trazabilidad hacia atrás: RS RU (u otras fuentes) � La relación es típicamente uno-a-pocos. Todo RU debe ser desarrollado por al menos un RS,

pero puede haber un RS cuya fuente no sea un RU (PSS-05-03, pp. 3 y 47): o No confundir con el caso de nuevos RU que se descubren durante el desarrollo de los

RS, y que deberán ser validados por el usuario: nueva versión URD. o Verdadero RS sin RU: todo RS debe tener una buena razón para existir, con mayor

razón si no existe su correspondiente RU: el cliente no querrá pagar por cosas que no ha solicitado.

o Es más fácil que ocurra con NFRs: requisitos impuestos por el analista al diseñador.

Trazabilidad hacia delante: requisitos ���� diseño / implementación � Una forma de conseguirla es relacionar cada requisito funcional con una función específica en

el lenguaje destino. o Esta técnica es poco generalizable y limitada; produce excesivo acoplamiento entre la

estructura de los requisitos y la estructura de la implementación. o En OO no es trivial preguntarse qué clase es responsable de qué función:

� Función con un solo parámetro: F(x) � x.F( ) � Función con dos o más parámetros: G(x, y) � ¿x.G(y) / y.G(x)?

o La transición Análisis-Diseño no es sencilla ni tiene por qué serlo. � La trazabilidad es necesaria para poder comprobar que la aplicación satisface los requisitos,

para afrontar que los requisitos cambian, y para gestionar su evolución: o Si la gestión de la trazabilidad es difícil y lleva demasiado trabajo, los desarrolladores

tenderán a evitar la actualización del documento de requisitos e irán directamente a hacer cambios al código: en consecuencia el documento de requisitos se hace inútil para las pruebas y la validación.

o Si además el documento no es fiable por culpa de algunos miembros del equipo menos responsables, entonces ni siquiera los más responsables se tomarán la molestia de mantenerlo al día.

o Por tanto, el sistema para hacer corresponder requisitos con diseño y código debe ser claro y concreto.

� Son muy útiles las matrices de trazabilidad de requisitos: o Dos matrices: hacia atrás / hacia delante o No confundir con la matriz de referencias cruzadas entre requisitos, que se usa para

gestionar la consistencia entre ellos (conflictos, acoplamientos y redundancias). � Un requisito puede corresponderse con varias partes del código (clases, funciones), que a su

vez pueden implementar varios requisitos cada una: o Por tanto, antes de cambiar el código para adaptarse a un cambio en un requisito, hay

que comprobar que otros requisitos no quedan comprometidos. o La correspondencia Requisito-Función es muchos-a-muchos; si no puede ser uno-uno,

al menos puede intentarse que sea pocos-pocos. o El diseño juega un papel fundamental en establecer esta correspondencia.

Trazabilidad de requisitos no funcionales

� La correspondencia con elementos del diseño y de la implementación es mucho más difícil, ya que depende en mayor medida de la colaboración entre varios elementos.

� La validación de estos requisitos es más complicada, normalmente requiere un mayor nivel de integración del sistema (no es fácil validar NFRs en componentes aislados).

� Ejemplo: rendimiento. o Identificar los elementos que consumen más tiempo o memoria. o La mayor parte de los recursos son consumidos por un número reducido de elementos,

de modo que esta tarea es provechosa para mejorar el rendimiento. o Bucles, gráficos y comunicaciones suelen ser los que más tiempo consumen.

Page 16: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 16

8. Requisitos del software: propiedades y atributos

PROPIEDADES deseables de los requisitos del software � Propiedades que deben tener todos los requisitos para estar bien especificados. � Al inspeccionar los requisitos deben cuestionarse estas propiedades.

o Utilizar cuestionarios de validación para inspeccionar requisitos. � Dos tipos:

o Propiedades globales: completitud, consistencia... o Propiedades individuales: tamaño, claridad, comprobabilidad, condiciones de error…

� No confundir con los atributos de los requisitos: toman un valor distinto en cada caso. o Necesidad, prioridad, estabilidad, riesgo…

Tamaño

� Para manejar con mayor facilidad un requisito, deberá tener un tamaño adecuado: o Ni tan grande que sea inmanejable. o Ni tan pequeño que no valga la pena seguirle la pista por separado.

� Es posible aplicar los principios de modularidad y anidamiento a los requisitos. o Paquetes y subpaquetes de requisitos (áreas temáticas). o Requisitos y subrequisitos.

� Nivel de granularidad: la misma cantidad de información puede repartirse en un número grande/pequeño de requisitos (grano fino/grueso).

� Nivel de detalle: los requisitos contienen más detalles, globalmente hay más información.

Completitud � Significa que no hay omisiones que comprometan la integridad de los requisitos.

o No faltan requisitos (propiedad global). o No faltan detalles en la especificación de cada requisito (propiedad individual).

� Es una propiedad difícil de determinar (tan sólo podemos alcanzar una aproximación). o Contrastar con el cliente. o Comparar con proyectos semejantes.

� Buscar la visión de conjunto, detectar huecos o partes infra-especificadas. o Para cada requisito, comprobar que están presentes los demás requisitos relacionados.

� La buena organización facilita la detección de faltas. o Ejemplo: organización por tipos de requisitos.

� Técnicas estadísticas para estimar el número de requisitos aún no descubiertos. o Ritmo temporal de creación/modificación de requisitos. o Ajustar la “nube de puntos” (tiempo-requisitos conocidos) a una curva monótona

creciente acotada (¿hipérbola?). o Dificultad: estas técnicas se ven afectadas por el propio ritmo de trabajo de los analistas.

Consistencia (o coherencia)

� Significa que no hay contradicciones entre requisitos (ni acoplamientos-redundancias). � Contradicción ≠ Ambigüedad, pero las ambigüedades difultan detectar contradicciones. � Es más difícil de comprobar si el número de requisitos crece. � Una buena organización facilita la detección de contradicciones. � Ejemplo: matriz de referencias cruzadas, que además facilita la detección de requisitos

afectados por la modificación de uno dado: o Conflicto: contradicción, no se pueden satisfacer simultáneamente. o Acoplamiento: hablan de lo mismo (si cambia uno, puede afectar al otro). o Redundancia: dicen lo mismo (sobra uno de los dos). o Independencia.

� En la versión final no puede haber Conflictos ni Redundancias, sí Acoplamientos.

Page 17: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 17

Claridad � Significa que no hay ambigüedad en la especificación de cada requisito. � Utilizar un vocabulario controlado, y tabla de términos equivalentes (sinónimos). � Para cualquier labor de escritura:

o Tenga siempre a mano diccionarios (normal, sinónimos, estilo, idiomas, corrector ortográfico y sintáctico).

o Escribir, corregir, escribir, corregir… y hacerlo entre varios (uno escribe, otro corrige). o Respetar normas ortográficas, sintácticas, gramaticales, estilísticas… no es un capricho:

lo que no está bien escrito no se entiende. o Estructurar bien, proceder con orden, proporcionar las referencias necesarias. o Sintetizar, resaltar ideas importantes, resaltar más lo menos obvio.

Comprobabilidad

� Incluye dos tipos distintos de defectos que se desea descubrir y eliminar: o Validación: defectos de interpretación (do the right thing) – taburete en lugar de mesa. o Verificación: defectos de implementación (do the thing right) – mesa coja.

� Muchos defectos se pueden descubrir y eliminar mediante pruebas, pero salvo que se usen métodos formales, las pruebas no garantizan que todos los defectos desaparecen.

� Atención: las pruebas de verificación no sirven como pruebas de validación – la mesa. � La validación requiere interacción con el cliente: pruebas con prototipos, etc. � Para validar y verificar un requisito es necesario que éste sea comprobable (testable). Un

requisito no comprobable o ambiguo tiene escaso valor y debe ser rechazado. � Ejemplos:

o El sistema mostrará la diferencia entre el valor observado y la media mundial (no comprobable).

o El sistema mostrará la diferencia entre el valor observado y el valor publicado por Naciones Unidas (¿cuándo? todavía es ambiguo).

o El sistema mostrará la diferencia entre el valor observado y el último valor publicado por Naciones Unidas en su página web.

� Conviene asegurar que no es ambiguo, ni siquiera si se interpretase mal a propósito. � Esbozar una prueba específica que establecería la verificación del requisito. � La definición de pruebas ayuda a clarificar el sentido de cada requisito.

Condiciones de error

� Para estar completa, la especificación del requisito debe tener en cuenta las condiciones de error, es decir, qué ocurre con el requisito en una situación con errores.

� Las condiciones de error son especialmente importantes para realizar las pruebas, ya que al probar un requisito se fuerzan condiciones de error, y es necesario prever qué debe ocurrir en estos casos.

� Caso típico: datos de entrada incorrectos. o Ejemplo: clasificar un triángulo a partir de las coordenadas de sus tres vértices.

� No confiar en que no se producirán condiciones de error: esto aumenta la dependencia entre módulos (un módulo confía en la detección de errores de otro módulo). o Pero recordar que no se debe abusar del manejo de errores internos.

� Redundancia para promover la seguridad. � Determinar lo que hay que hacer en situaciones no previstas (prever lo imprevisto). � Prevenir posibles errores de programación en lugares críticos.

Page 18: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 18

ATRIBUTOS definibles en cada requisito � Los atributos son los “campos” de la “plantilla” usada para los requisitos. � El número y tipo de atributos dependen del proyecto concreto. � Ejemplo (si se usa una herramienta de gestión de requisitos):

o Atributos automáticos: identificador, creador, fecha de creación… o Atributos obligatorios en todo proyecto: tipo, descripción breve. o Atributos opcionales, dependiendo del proyecto u organización: descripción detallada,

fuente, estado, necesidad, prioridad, estabilidad, complejidad, riesgo, coste… Necesidad y prioridad

� Para negociar entre funcionalidad, planificación, presupuesto y nivel de calidad, es conveniente que los requisitos funcionales tengan asignado un nivel de necesidad (tres o cuatro categorías: esencial, deseable, opcional...), así como un nivel de prioridad temporal (dos o tres categorías: alta, baja...).

� La necesidad de un requisito hace referencia al interés de los usuarios/clientes en que la aplicación lo realice, y hasta qué punto estarían dispuestos a pasarse si él.

� La prioridad de un requisito hace referencia al orden temporal: indica en qué fase de construcción del sistema se incluirá la funcionalidad que realice el requisito.

� Si el 20% de la aplicación proporciona el 80% de su valor... no más del 20% de los requisitos deberían ser “esenciales”.

Estabilidad � Un requisito no estable o variable es aquel que está sujeto a posibles modificaciones, ya sea

por el propio cliente o bien por otros factores que pueden afectar a nuestra aplicación. � Tener en cuenta esta posibilidad es fundamental para reducir riesgos: prever la posibilidad de

que un requisito cambie desde las fases iniciales del proyecto ayudará a tomar las medidas oportunas para evitar costes innecesarios en caso de que finalmente cambie.

� Pero cuidado: muchos requisitos del cliente pueden cambiar, sin embargo se trata de marcar como inestables sólo aquellos en los que hemos acordado con el cliente esta posibilidad, porque ya desde el principio es previsible la inestabilidad (porque el cliente no acaba de decidirse, porque depende de una Ley que se sabe va a cambiar próximamente, etc.).

Riesgo � Cada requisito debería ir acompañado de una estimación del riesgo que supone realizarlo

(relacionado con la dificultad de implementarlo). Ej.: alto, moderado, bajo. � Seguir la pista con especial atención a los de mayor riesgo.

Para escribir un requisito: resumen

� Enunciado breve del mismo, numerado. � Explicación detallada. � Atributos y propiedades tal como se han discutido hasta aquí, por ejemplo:

o Necesidad, Prioridad y Riesgo. o Condiciones de error. o Pruebas de validación y verificación requeridas.

� Matrices de trazabilidad hacia requisitos de usuario y hacia diseño/implementación. � Matriz de referencias cruzadas entre requisitos: conflicto, acoplamiento, redundancia. � Usar un formato que permita distintos niveles de visibilidad:

o Sólo enunciado o Sólo enunciado y descripción o Enunciado, descripción y propiedades...

Page 19: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 19

9. Requisitos del software: organización y calidad

ORGANIZACIÓN – Métodos para organizar los requisitos del software � Una buena organización de los requisitos del software es esencial, porque si no están

organizados no se pueden manejar (localizar, actualizar, aplicar, comprobar...). � Técnicas ya mencionadas:

o Matriz de trazabilidad hacia requisitos de usuario (o hacia diseño, en ADD). o Matriz de referencias cruzadas (consistencia): conflicto, acoplamiento, redundancia. o Principios de modularidad y anidamiento a los requisitos (estructuración).

� Organizarlos tomando como pauta el modelo del sistema (ver la nomenclatura de modelos). � Utilizar tablas para representar explícitamente las relaciones entre los requisitos y el modelo,

y entre distintas partes del modelo, por ejemplo: o Casos de uso – requisitos derivados del caso de uso o Requisitos – clases derivadas del requisito o Casos de uso – clases mencionadas en el caso de uso

Organización de los requisitos por casos de uso

� Estructurar los requisitos en torno a los servicios requeridos por los usuarios, descritos como secuencias de operaciones. Cada caso de uso agrupa: o Un requisito principal descrito en el objetivo del caso de uso o Uno o varios requisitos subordinados, que estarán relacionados con:

� Las clases de objetos que se mencionan (elementos de información). � Las operaciones individuales de que consta el caso de uso.

� Ejemplo: caso de uso “alquilar una película de videoclub”: o Las películas alquilables tienen título, director, actores, duración... o Las películas alquilables son ordenables o filtrables según distintos criterios...

Organización de los requisitos por clases

� Estructurar los requisitos en unidades atómicas de información y comportamiento. � Las clases resultantes de la organización de los requisitos pueden tener mucho o nada que ver

con las clases del diseño y la implementación. Si la relación es estrecha... o Ventajas: trazabilidad, una de las banderas de la OO; las clases próximas a conceptos

del mundo real es más probable que sean reutilizadas. o Desventajas: acoplamiento análisis-diseño, selección de clases de diseño antes de

tiempo, simular innecesariamente la estructura del mundo real en el diseño. � Procedimiento:

o Identificar y enumerar las clases de análisis: las que mencionan los requisitos. o Para cada clase, describir la funcionalidad requerida de la aplicación que pertenezca

principalmente a esa clase, en forma de atributos y operaciones: � Atributos: unidades de información. � Operaciones: unidades de comportamiento, reacciones frente a eventos (es mucho

más fácil repartir los atributos que repartir las operaciones). Uso de herramientas para el análisis de requisitos

� Las herramientas pueden ayudar a... o Capturar y gestionar los requisitos: ordenación, priorización, asignación, seguimiento… o Valorar el estado del análisis de requisitos.

� Son especialmente útiles los hipervínculos: o Desde requisitos hacia otros requisitos (trazabilidad, consistencia). o Desde requisitos hacia otros documentos relevantes del proyecto (modelos, diseño). o Desde el código hacia los requisitos que implementa.

Page 20: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 20

CALIDAD – Qué sentido tiene realizar medidas de calidad en los requisitos del software � Los requisitos deben cumplir determinados criterios de calidad (cuantificables). � Si no se exige que los requisitos cumplan los criterios de calidad, entonces más adelante no se

podrá comprobar que la aplicación satisface estos mismos criterios (es decir, no se podrá buscar la calidad en fases posteriores del proyecto).

� La calidad de los requisitos debe ser medida por personas distintas de los autores. � Toda medición (o métrica) tiene un coste añadido en dinero y tiempo para obtenerla,

almacenarla, analizarla e informar acerca de ella. o Se trata de optimizar la relación coste/beneficio, lo cual depende de muchos factores:

cultura de la organización, estado del proyecto, naturaleza del proyecto, etc. o No se trata de obtener mediciones sin saber para qué. o Idea general: clasificar las mediciones en tres categorías (bien, regular, mal).

� Las medidas son más útiles cuando sus valores esperados se especifican por adelantado. o Ejemplo: basados en experiencias anteriores, los requisitos se consideran “completos”

cuando la tasa de creación y modificación es menor del 1% semanal.

Métricas de calidad: cómo de bien están escritos los requisitos � Grado de completitud (estimado a partir del ritmo de creación/modificación; aunque

probablemente es imposible en la práctica decir cuál es el “último” requisito). � Grado de consistencia (número de conflictos entre requisitos). � Porcentaje de requisitos:

o Ambiguos o Mal clasificados (asignados a un caso de uso o a una clase equivocados) o No trazables o No priorizados o Sin riesgo estimado o No comprobables o Sin condiciones de error

Métricas de calidad: cómo de efectivos son los procesos

� Medidas de la efectividad de la inspección de requisitos: o Número de requisitos que faltan o son defectuosos, encontrados por hora de inspección.

� Medidas de la efectividad del proceso de análisis de requisitos: o Coste por requisito específico:

� Coste medio total (tiempo total / número de requisitos). � Coste marginal (coste de obtener uno más). � Ritmo al que los requisitos son: modificados / eliminados / añadidos.

Los Requisitos del Software en el Estándar ESA

� Lo que dice cada uno de los documentos o ESA software engineering standards (PSS-05-0) o Guide to applying the ESA SE-Std to projects using OO Methods (BSSC98-1) o Guide to the software requirements definition phase (PSS-05-03)

� Nociones importantes: nomenclatura de modelos (PSS-05-0, 3.3.1; BSSC98-1, 3.4.1) o Modelo de lo que necesita el usuario, independiente de la implementación o Nomenclatura: modelo lógico / modelo del sistema modelo del entorno

� modelo de requisitos / modelo de casos de uso modelo de negocio � modelo de análisis / modelo conceptual modelo de dominio

� Contenido del documento

Page 21: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 21

10. Sobre la diferencia entre análisis y diseño

1ª entorno-sistema, 2ª descripción-especificación, 3ª vista lógica-física, 4ª nivel de detalle.

A1. Explicar brevemente en qué se diferencian la segunda y la tercera dimensiones. La segunda se refiere al propósito del modelo, la tercera a la perspectiva adoptada en el

modelo. Las dos dimensiones pueden combinarse: descripción lógica o física, especificación lógica o física. A2. Explicar la primera dimensión.

Caracterizada por el tipo de realidad representada en el modelo: entorno o sistema. Modelo del mundo real, modelo del universo del discurso, modelo de negocio, modelo de dominio. Correspondencia entre entorno y sistema: ¿simulación? Problema-solución.

B1. Explicar brevemente en qué se diferencian la tercera y la cuarta dimensiones.

La tercera se refiere a la perspectiva adoptada en el modelo, la cuarta al nivel de abstracción o detalle. Aunque ambas sean graduales, no deben confundirse. Las dos dimensiones pueden combinarse: vista lógica más o menos detallada, vista física más o menos detallada. B2. Explicar la segunda dimensión.

Caracterizada por el propósito del modelo: descripción o especificación. Ingeniería directa e ingeniería inversa, modelo-original y modelo-copia, síntesis y análisis. Caso típico: modelo descriptivo del entorno y modelo especificativo del sistema.

C1. Explicar brevemente en qué se diferencian la primera y la segunda dimensiones.

La primera se refiere a la realidad representada en el modelo, la segunda al propósito del modelo. Las dos dimensiones pueden combinarse: descripción o especificación del entorno, descripción o especificación del sistema. C2. Explicar la tercera dimensión.

Caracterizada por la perspectiva adoptada en el modelo: vista lógica o vista física. Qué y cómo, requisitos de usuario-solución software, diseño lógico-físico, especificación-implementación. Vista externa-vista interna, caja negra-caja blanca. Casos de uso y requisitos como modelos del sistema.

D1. Explicar brevemente en qué se diferencian la primera y la tercera dimensiones.

La primera se refiere a la realidad representada en el modelo, la tercera a la perspectiva adoptada en el modelo. Las dos dimensiones pueden combinarse: vista lógica o física del entorno, vista lógica o física del sistema. D2. Explicar la cuarta dimensión y la noción de transformación de modelos.

Caracterizada por el nivel de abstracción en el modelo: más o menos detalles. Gradualidad. El proceso de desarrollo de software como trayectoria de transformaciones en el espacio de modelado. Complejidad conceptual de las transformaciones en cada dimensión.

Page 22: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 22

11. Modelado conceptual con UML (1)

Qué significa “modelo conceptual” (modelo especificativo lógico del sistema) � Qué NO representa el modelo conceptual:

o Mundo real o “universo del discurso” � modelo de dominio. o Implementación o “vista tecnológica” � modelo de diseño.

� Qué representa (“modelo del sistema”): o Vista conceptual del sistema: conceptos que debe manejar el sistema. o Abarca aspectos estáticos (estructura) y dinámicos (comportamiento).

� Cómo lo representa (“modelo lógico”): o Omite la implementación: sin “tecnología”, sin artefactos de diseño. o Recoge el vocabulario del dominio (a partir del “modelo de dominio”).

Objetos y clases

� Dos niveles de abstracción. La relación de clasificación / instanciación. En análisis y diseño. � Notación básica de objetos y clases: supresión opcional de compartimentos. � Tipos de clases según los objetos representados: físicos, lógicos, históricos… � Caso especial: objetos objetos que representan una colección, familia o tipo de cosas. Un

mismo concepto del mundo real puede ser modelado como objeto o clase según el contexto: o “Pastor Aleman”:

� clase cuyas instancias son Friedrich, Wolfgang y Heinz (nombres de perros). � objeto que es instancia de la clase “Raza Perruna”.

o “Lata de Atún”: � clase cuyas instancias son lata1, lata2... (todas ellas latas de atún “tangibles”). � objeto que es instancia de la clase “Productos que vendo en mi supermercado”.

o “El Lenguaje Unificado de Modelado”: � clase cuyas instancias son los diversos ejemplares del libro en la Biblioteca. � objeto que es instancia de la clase “Títulos de libros registrados en la biblioteca”.

Atributos

� Definición: propiedad compartida por los objetos de una clase � Atributos derivados � Notación: definida en UML, pero más importante ajustarse al lenguaje de implementación

o elementos opcionales, propiedades predefinidas, ejemplos

Operaciones � Definición: función o transformación que puede aplicarse a los objetos de una clase � Diferencia entre “operación” y “método” � Notación: definida en UML, pero más importante ajustarse al lenguaje de implementación

o elementos opcionales, propiedades predefinidas, ejemplos

Asociaciones � Definición: especificación de un conjunto de conexiones entre instancias (enlaces) que

representan la estructura y posibilidades de comunicación del sistema. � Propiedades básicas:

o Nombres o Multiplicidad o Navegabilidad

� Relación con otros elementos: o Asociación vs. Atributo: equivalencia parcial con asociación unidireccional. o Asociación vs. Operación: invocación de operaciones a través de la asociación.

Page 23: INGENIERÍA DE SOFTWARE 1 y 2 2006-2007 … · Modelado conceptual con UML (1).....22 12. Modelado conceptual con UML (2).....23 13. La transición del análisis al diseño.....24

Ingeniería del Software 1 – Curso 2006-2007 23

12. Modelado conceptual con UML (2)

Generalizaciones � Definición: relación entre un elemento general y un elemento específico, donde el elemento

específico puede añadir información y debe ser consistente con el elemento general. � Generalización y clasificación � Generalización y especialización � Jerarquías de clases � Dimensiones de especialización � Generalización múltiple vs. Clasificación múltiple � Subclase vs. Atributo: en análisis es posible modelar mediante generalización múltiple,

clasificación múltiple o clasificación dinámica determinados aspectos del problema que resultan “naturales” en el dominio, pero que no tienen traducción directa en los lenguajes de programación habituales, por lo que en diseño a veces hay que usar atributos como solución.

Diagramas � Diagramas de clases y diagramas de objetos

o No es correcto que “un diagrama de objetos es una instancia de un diagrama de clases”. � Restricciones y notas

o Pueden afectar a propiedades, clases, o relaciones. � Restricciones en asociaciones

Asociaciones especiales

� Asociaciones actor-sistema y clase-clase: o El actor modela un elemento del entorno, la clase modela un elemento del sistema.

� Asociaciones reflexivas: o Asimetría esencial de toda asociación, que dificulta especialmente el modelado de

relaciones de equivalencia (asociaciones reflexivas, simétricas y transitivas). � Ciclos de asociaciones y asociaciones derivadas:

o Los ciclos de asociaciones son prácticamente inevitables, y hay que tener claro su significado en cada caso.

� Agregación, composición y anidamiento: o Contrariamente a lo que pueda parecer, la relación todo-parte en UML no implica

encapsulamiento ni acceso restringido (necesidad de acceder a las partes a través del todo, imposibilidad de acceder directamente a las partes).

o Tampoco debe confundirse con el anidamiento entre clases. � Clase-asociación:

o El problema de los enlaces repetidos. o Transformación en clase intermedia.

� Asociación n-aria: o En opinión de muchos autores, no son verdaderamente orientadas a objetos. o Cuidado con la tendencia a ver asociaciones n-arias donde no las hay. o Multiplicidad engañosa o Transformación en clase intermedia.