Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Preámbulo
El principio de la asignatura es hacer comprender al alumno que el desarrollo del software es
una actividad industrial. Esto significa que se deben aplicar principios de ingeniería y buenas
prácticas de gestión.
Se debe de aprender a:
BIBLIOGRAFÍA
Ingeniería:
o Conjunto de conocimientos orientados a la invención y utilización de técnicas
para el aprovechamiento de los recursos naturales o para la actividad
industrial.
o Actividad profesional del ingeniero.
Programa:
o Conjunto de instrucciones pensadas para ser ejecutadas en un orden concreto.
Crisis del software
En la década de entre los 60’ y los 80’, había una enorme cantidad de programas que no
funcionaban, o siquiera compilaban.
A pesar de la falta de fe, las empresas dependen del software cada vez más y esto implica que:
Presupuestos ajustados
Mala comunicación con el cliente
Rotación de personal
Cambios en los sistemas de desarrollo
Desarrollo de proyectos de forma arbitraria y artesanal
No seguimiento de estándares
Escasa reutilización
Poca importancia a las pruebas
Modelo de ciclo de vida “Code & Fix” -> A lo americano (a lo loco)
Problemas derivados
Riesgos
Y lo peor…
Aportaciones de la ISW
Problema Solución ISW
Mantenimiento de alto coste y riesgo Reutilización y documentación
Dependencia del individuo Estandarización del desarrollo
Incumplimiento del plazo de entrega Planificación de proyectos
Ausencia de datos para estimaciones Gestión de proyectos
Dudosa calidad del SW Métricas de calidad
Modelos
Comentaremos modelos de procesos de software
Generación del código: Un diseño detallado simplifica enormemente la generación del código
Pruebas: Se comprueba que todos los requisitos se cumplen a riesgo de que, si el documento
de requisitos falla, la producción también.
Problemas:
Riesgos:
Puede ser complicado hacer comprender al cliente que el prototipo no es (ni mucho
menos) el producto terminado.
El desarrollador puede caer en el mismo error que el cliente
Ventajas:
Problemas
Modelo Incremental
Combina elementos del modelo “secuencial” y del modelo “prototipado”
Normalmente las primeras etapas desarrollan elementos básicos del sistema
añadiendo sobre estos
El cliente utiliza los prototipos para generar nuevos RQ
En un momento dado, se puede estar desarrollando distintos “incrementos” en
paralelo.
Es necesario un calendario de prototipos.
Los requisitos terminan reflejando las necesidades de los clientes del sistema
En la fase de análisis, una de las misiones será redactar un documento que incluya una lista con
los requisitos del sistema a construir: El documento de especificación de requisitos (SRS)
Tenemos información adicional al respecto en “Systems and Software engineering. Life cycle
processes. Requirements engineering,” en el Moodle.
Ingenieria de requisites:
Esos candidatos son refinados y evolucionan hasta que son aceptados y pasan a incluirse en la
lista de requisitos.
Los aspectos que inicialmente consideren los miembros del equipo no tienen por qué terminar
incluidos en la lista de requisitos
La ingeniería de requisitos guía a los participantes a refinar sus ideas iniciales, hasta conseguir
un conjunto final de requisitos y objetivos que resultan mejor estructurados y sean
objetivamente adecuados.
Es importante acordar los términos que van a utilizarse en el documento para indicar el alcance
de un requisito, para intentar evitar problemas de interpretación, ejemplo
Se debe utilizar una “lógica positiva”, evitando los requisitos de lógica negativa:
1. Al presentar un contrato para un proyecto software “grande”, una empresa (el cliente)
debe definir sus necesidades de forma suficientemente general como para permitir
establecer a partir de ellas, una solución
o Estos primeros requisitos deberán generarse de forma que, varios contratistas
puedan licitar formas diferentes de cumplir con las necesidades expuestas.
2. Una vez que el software se asigna, el contratista debe redactar una definición del
sistema más detallada de forma que el cliente pueda comprender y validar lo que hará
finalmente el software.
Establecen con detalle las funciones, servicios y restricciones operativas del sistema
El documento de requisitos del sistema (especificación funcional) debe ser preciso y
exhaustivo.
Debe definir exactamente qué se va a implementar
Es razonable que forme parte del contrato.
Ambos son importantes, tanto los requisitos del usuario, como los del sistema.
Deben ser comprensibles por las personas que intervienen en el proceso, sin conocimientos
técnicos especiales.
Deben evitar, en lo posible, tratar las particularidades del diseño del sistema
Por lo tanto, no deben utilizarse jerga del software ni notación formal, sino un lenguaje sencillo
y diagramas intuitivos
Utilizados por los ingenieros software como punto de partida para realizar el diseño del sistema
Pueden utilizarse como parte del contrato, aunque debe ser una especificación completa y
consistente del sistema en su conjunto.
Cuando los requisitos son muy detallados y se detalla mucho el QUE, quedan pocas variantes
del Cómo
Si el sistema debe interactuar con otros ya existentes, aparecerán restricciones que estarán
condicionando el diseño.
El desarrollador del sistema lo interpretará de forma que le facilite la vida -> Interpretación
máxima.
1. Requisitos funcionales
Declaraciones de los servicios que debe proporcionar el sistema
Indican cómo debe reaccionar el sistema antes entradas particulares
Cómo debe comportarse ante situaciones particulares.
Pueden también indicar lo que el sistema NO debe hacer
2. Requisitos NO Funcionales
Características relativas a los servicios o funciones ofrecidas por el sistema
Limitaciones de tiempo sobre el proceso de desarrollo
Por lo general, son de aplicación al conjunto del sistema
3. Requisitos de dominio
Reflejan las características del dominio de la aplicación
Pueden ser funcionales y no funcionales
Requisitos funcionales
La especificación de requisitos funcionales debe ser completa y consistente
Completitud: TODOS los servicios solicitados por el usuario deben estar definidos
En sistemas grandes puede ser difícil de conseguir llevar a la práctica, esto genera problemas
que se encuentran tarde, mal y peor.
Requisitos NO funcionales
No ser refiera a las funciones consustanciales al sistema, sino a sus propiedades características
como:
Fiabilidad
Disponibilidad
Mantenibilidad
Portabilidad
Tiempo de respuesta
Capacidad de almacenamiento
1. Requisitos de producto
Especifican el comportamiento del producto, por ejemplo, rendimiento, fiabilidad,
portabilidad, usabilidad, etc.
2. Requisitos de la organización
Derivados de políticas implantadas por la organización del cliente, por ejemplo, estándares
a cumplir, lenguajes, módulos, por ejemplo:
Insistimos
Todos los requisitos deben estar redactados de tal manera que sea posible (con facilidad) saber
si se cumplen o no.
Redacción en términos cuantitativos, que suele ser más sencillo con los requisitos
funcionales
Uso de métricas:
Son muy importantes, puesto que tratan del dominio de aplicación, y eso es necesariamente
importante.
Es deseable que, cuando competa, se asocien los requisitos a un fundamente, que expliquen el
porqué de un requisito y que indique quién “lideró” su inclusión en la lista de requisitos del
sistema.
Ventajas:
Ayuda a terceras personas a entender el contexto que motivó la aparición del requisito
en cuestión.
Se sabe a quién hay que ir a preguntar para obtener más información (antes de
eliminarlo, cambiarlo, modificarlo o incluso a la hora de implantarlo)
1
Mean Time Between Failure
El lenguaje natural
Aunque pueda ser muy útil en los requisitos de usuario, causa muchos problemas en los
requisitos de sistema
La comprensión del lenguaje natural depende de que lectores y redactores utilicen el mismo
vocabulario de la misma manera. El lenguaje natural puede ser ambiguo, y además en los
peores momentos posibles.
Ofrece como ventaja que mantiene la expresividad del lenguaje natural y asegura cierta
uniformidad en las especificaciones.
Y sigue permitiendo la inclusión de TODO aquello que ayude a mejorar el requisito, como:
Diagramas
Gráficos
Etc.
Introducción del documento IEEE 830-1998
Se establecen métodos estandarizados de comunicación cliente-trabajador para salvar errores
que se pudieran cometer de otro modo.
Para los clientes, proveedores, y otros; un buen SRS deberá proveer bastantes beneficios
específicos, como:
Establecer la base del acuerdo entre cliente y trabajador sobre lo que hay que hacer
Esto permite saber previamente si el software satisfará las necesidades del cliente
antes de empezar su implementación.
Reducir los costes de desarrollo
o un buen Sr se evita tener que hacer a posteriori revisiones de código y test
innecesarios
o una revisión del SRS puede detectar omisiones y fallos en este.
Ofrece una base de estimado de costes
o ofreciendo así una ventaja con respecto a otras empresas
Ofrece una base para validación y verificación
o que agiliza el desarrollo
o y ofrece un sitio en el que apoyarse contra quejas del cliente.
Facilidad de transferencia.
o Si vale para uno, para otro con la misma casuística o similar, también.
o De la misma manera sucede esto por parte del cliente.
Sirve de la misma manera como base para la mejora.
Puesto que el SRS hoy discute el producto y no el proyecto que lo manufacturará, sirve
para mejorar este.
Visualizar
Especificar
Construir y…
documentar los elementos de un sistema que necesite “cierta cantidad de software”
elementos
relaciones
y diagramas.
Elementos.
Estructurales: Son la parte estática del modelo, como las clases, interfaces, casos de uso,
colaboraciones, …
Relaciones
de dependencia: establecen
o Relación de uso semántico entre 2 elementos.
o Un cambio en el elemento independiente puede afectar a la semántica del
elemento dependiente.
De asociación:
o Relación estructural entre clases.
o Establece conexiones entre objetos q por ejemplo empresa empleado.
o Agregación y composición: relación estructural entre un todo y sus partes
o Se representan:
Generalización:
o Relación de especialización /generalización
o Herencia
o El hijo se basa en la estructura y funcionalidad del padre, al que puede llegar a
sustituir.
Realización
o Relación semántica entre clasificaciones
o Un extremo especifica un contrato que el otro deberá cumplir
o Lo encontraremos en interfaces/clases
De clases: Visión estática del sistema. Muestran las clases coma e interfaces y colaboraciones
existentes, así como las relaciones.
Diagrama de secuencia.
o Muestra un conjunto de objetos o roles y los mensajes que se intercambian.
o Resalta ordenación temporal de mensajes.
Diagrama de colaboración/comunicación:
o Es equivalente al anterior.
o Resalta la organización estructural de los elementos que envían mensajes.
De actividades:
o un tipo de diagrama de estados.
o Muestra un flujo de control entre objetos.
o Detallan paso a paso qué cosas suceden. Asociadas a un escenario.
De Estado:
o HP muestra una máquina de estados formada por estados coma y transiciones,
eventos y actividades.
o Hola muéstrame el comportamiento dinámico dirigido por eventos de un
objeto/subsistema/sistema.
o Hola útil en sistemas reactivos: interfaces de usuario, workflow, sistemas de
control...
Hola de componentes (composed structure diagram)
o HD define las partes del sistema y la comunicación entre ellos (vía interfaces)
HP de despliegue:
o muestra los nodos de procesamiento en tiempo y ejecución. Hoy además
también muestra los artefactos que residen en ellos.
Arquitectura Software:
La visualización, especificación, construcción y documentación de un sistema complejo con una
gran cantidad de software, requiere que sea visto desde varias perspectivas.
Usuarios finales como analistas, desarrolladores, publicistas, etcétera. Van a tener visiones
distintas sobre cómo se va a describir el software.
Vista de diseño
Vista de interacción
Vista de casos de Uso
Vista de implementación
Vista de despliegue
Elementos:
Nodos:
o Es un elemento físico
o Representa un recurso computacional
o Existe en tiempo de ejecución
o Entre ellos pueden existir relaciones de dependencia, generalización y
asociación
Artefactos:
o Elementos que van a alojarse en un nodo. Normalmente ficheros.
o Ejemplo: ficheros ejecutables o similares (.exe, .jar, .dll, …)
o Ficheros de configuración, librerías, etc.
Usos habituales:
Modificadores de acceso a los miembros: Son los modificadores que pondremos en cada una
de las líneas de una clase:
Público (+)
Privado (-)
Protegido (#)
Paquete (~)
Derivado (/)
Estático (subrayado)
También hay más tipos de componentes, como señales, tipos de datos, paquetes, interfaces,
enumeraciones, objetos, artefactos, etc.
Finalmente, a la hora de relacionar las diferentes clases que modelan nuestro sistema,
tenemos las Interacciones, estas constan de:
Asociación bidireccional:
Asociación unidireccional: