¿Por qué?
|
|
] |
Complejidad del Proyecto Software
Complejidad | Disciplina |
---|---|
|
|
|
|
|
|
|
|
|
|
Hace tan sólo unas décadas, los programas en lenguaje ensamblador de sólo unos pocos miles de líneas de código subrayaron los límites de nuestras capacidades de ingeniería de software. |
Hoy en día, no es raro encontrar sistemas entregados cuyo tamaño se mide en cientos de miles o incluso millones de líneas de código, y todo eso en un lenguaje de programación de alto nivel |
Los problemas en los proyectos se pueden remontar a alguien que no dijo a otro algo importante. La mala comunicación no sucede por casualidad
— Kent Beck
eXtreme Programming |
El software es un problema de comunicación … como todo!!!: |
|
|
||
Expectations vs Reality of Client + Business Analyst + Developer = Coding |
¿Qué?
Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como desarrollo de software o producción de software
— Bohem
1976 |
El software es sagrado
— Booch
|
y lo importante requiere de un ritual
— sentido común / sabiduría popular
... |
Las Disciplinas son contenedores usadas para organizar las actividades del proceso que representan una partición de todos los roles, artefactos y actividades en agrupaciones lógicas por áreas de asuntos o especialidades
— Booch
|
|
Disciplinas técnicas | Disciplinas de soporte | |
---|---|---|
|
|
|
¿Para qué?
No se convierte en un maestro del software aprendiendo una lista de heurísticas. El profesionalismo y la maestría provienen de valores que impulsan las disciplinas
— Martin Fowler
Refactoring |
|
|
¿Cómo?
Disciplina de Requisitos
Objetivo principal | Objetivos |
---|---|
dirigir el desarrollo hacia el sistema correcto al describir los requisitos del sistema así que pueda alcanzarse un acuerdo entre los clientes, usuarios y desarrolladores sobre lo que el sistema debería hacer: |
|
Requisitos funcionales | Requisitos no funcionales |
---|---|
|
|
Artefactos
Diagramas de Casos de Uso y de Estados | Historias de Usuario |
---|---|
|
|
Prototipo de Interfaz | Interfaz de Comunicaciones |
---|---|
|
|
Disciplina de Diseño
Sin diseño/análisis |
Con diseño/análisis |
||
|
|
|
|
Ágil |
Iterativo |
||
|
|
|
|
Análisis | Diseño |
---|---|
|
|
Disciplina de Análisis
Objetivo principal | Objetivos |
---|---|
analizar los requisitos a través de su refinamiento y estructura para realizar una compresión más precisa de los requisitos, una descripción de los requisitos que es fácil de mantener y ayuda a estructurar el sistema: |
|
Artefactos
Diarama de Clases MVC | Diagrama de Colaboración |
---|---|
|
|
|
|
Comparativa entre Requisitos y Análisis
Requisitos | Análisis |
---|---|
Descrito usando el lenguaje del cliente |
Descrito usando el lenguaje de los desarrolladores (diagramas de clases) |
Visión externa del sistema |
Visión interna del sistema |
Estructurado por requisitos, da estructura a la vista externa |
Estructurado por clases estereotipadas y paquetes, da estructura a la vista interna |
Usado principalmente como contrato entre los clientes y los desarrolladores sobre lo que el sistema debería hacer |
Usado principalmente por desarrolladores para [yellow]render qué forma debería tener el sistema* |
Contiene muchas redundancia, inconsistencias, .. entre los requisitos |
No debería contener redundancias, inconsistencias, … entre los requisitos |
Captura la funcionalidad del sistema, incluyendo funcionalidad arquitectónica significativa |
Esboza cómo realizar la funcionalidad en el sistema, incluyendo la funcionalidad arquitectónica significativa; |
Disciplina de Diseño
Objetivo principal | Objetivos |
---|---|
desarrollar enfocados en los requisitos no funcionales y en el dominio de la solución para preparar para la implementación y pruebas del sistema: |
|
Artefactos
Diagramas de Despliegue | Diagramas de Secuencia |
---|---|
|
|
Comparativa entre Diseño y Análisis
Análisis | Diseño |
---|---|
Modelo conceptual porque es una abstracción del sistema y evita cuestiones de implementación |
Modelo físico porque es un esbozo de la implementación |
Menos formal |
Más formal |
Diseño genérico, aplicable a varios diseños concretos |
No es genérico sino específico para una implementación |
Tres estereotipos conceptuales en las clases: modelo, vista, controlador |
Cualquier número de estereotipos físicos en las clases, dependiendo del lenguaje de implementación |
Menos costoso para el desarrollo (1:5 frente al diseño) |
Más costoso para el desarrollo (5:1 frente al análisis) |
Pocas capas arquitectónicas |
Muchas capas arquitectónicas |
Puede no ser mantenido a través de todo el ciclo de vida del software |
Debería ser mantenido a través de todo el ciclo de vida del software |
Principalmente creado en trabajo de campo, talleres y similares |
Principalmente creado por “programación visual” (ingeniería directa e inversa) |
Define la estructura que es la entrada esencial para dar forma al sistema, incluyendo la creación del modelo de diseño |
Dar forma al sistema mientras intenta preservar la estructura definida por el modelo de análisis |
Enfatiza la investigación del problema y sus requisitos |
Enfatiza en la solución conceptual que cubra los requisitos más que en su implementación |
Enfocado en los requisitos funcionales, en hacer lo correcto |
Enfocado en los requisitos no funcionales, en hacerlo correctamente |
Disciplina de Implementación
Objetivo principal | Objetivos |
---|---|
implementar el sistema en términos de componentes, p.ej. código, scripts, ficheros binarios, código ejecutables: |
|
Disciplina de Pruebas
Objetivo principal | Objetivos |
---|---|
comprobar el resultado de la implementación al probar cada versión, incluyendo internas e intermedias, y versiones finales del sistema a entregar: |
|
Disciplina de Despliegue
Objetivo principal | Objetivos |
---|---|
permtir el acceso a los usuarios finales a los componentes software en el entorno de producción para su explotación: |
|
Gestión del Ecosistema
|
|
Disciplina | Necesidad | Herramienta |
---|---|---|
Requisitos |
Se requiere un entorno colaborativo con editores, historial, autoría, respaldos, … donde los especificadores de requisitos (casos de uso / historias de usuario) puedan escribir y el resto del equipo de desarrollo (analistas/diseñadores, programadores, probadores y desplegadores) puedan leer dichos requisitos centralizados |
Wiki de GitHub |
Análisis y Diseño |
Se requiere de una herramienta CASE *(Computer Aided Software Engineering) que facilite la edición de *diagramas de análisis y diseño (diagramas de casos de uso, clases,objetos, paquetes, secuencia, colaboración, estados y actividades, implementación y despliegue) junto con su trazabilidad |
MagicDraw |
Análisis y Diseño |
Se requiere de una herramienta de métricas del software que determine automáticamente el grado de bondad de los componentes de la arquitectura del software |
SonarQube |
Programación |
Se requiere un entorno de desarrollo integrado para la edición, compilación, ejecución, … del código en desarrollo en la máquina local |
Eclipse |
Programación |
Se requiere ayudas para el cumplimiento de las reglas de estilo (formato, identificadores, …) dadas en la arquitectura del software |
Eclipse, Checkstyle, PMD, FindBugs y Sonarqube |
Programación |
Se requiere, en el contexto de metodologías ágiles, ayudas para automatizar en lo posible la refactorización del código (renombrado de identificadores, nombrar constantes, mover métodos, …) |
Eclipse |
Programación |
Se requiere un sistema de registro para gestionar (escritura, destino, avisos, …) los mensajes de trazas, depuración, errores, …) durante la ejecución |
Log4j |
Programación |
Se requiere de un sistema de control de versiones del repositorio de código común del proyecto para facilitar la gestión (actualizaciones, vuelta atrás, mezclas, …) de la rama de desarrollo, la rama de entregas, la rama de producción |
GitHub |
Pruebas |
Se requiere un sistema para la gestión de pruebas que facilite la edición, ejecución, evaluación, … de la pruebas |
Junit, Selenium, … |
pruebas |
Se requiere de un sistema de integración continua para comprobar que el código y las pruebas funcionan tras cualquier cambio |
Travis |
Pruebas |
Se requiere un sistema de cobertura de pruebas que facilite la misión y estrategias de pruebas |
SonarQube |
Despliegue |
Se requiere un gestor de proyectos para la automatización, en lo posible, de la construcción de entregables (compilación, pruebas, reglas de estilo, empaquetado, …) |
Maven |
Gestión |
De proyectos se requiere una herramienta para gestión de tickets que permitan la asignación de tareas con su tiempo estimado y real, finalización por parte del asignado y cierre tras la comprobación por el emisor de la tarea |
Tickets de GitHub |
Síntesis
Disciplinas técnicas | Disciplinas de soporte | |
---|---|---|
|
|
|
Relación | Disciplina | Enfoque |
---|---|---|
|
Modelo del Dominio |
Sistema de información del mundo real |
Requisitos |
Sistema informático como caja negra |
|
Análisis |
Sistema informático como caja blanca sin decisiones tecnologicas |
|
Diseño |
Sistema informático como caja blanca con decisiones tecnologicas |
|
Implementación |
Sistema informático como caja blanca con tecnologías |
|
Pruebas |
Sistema informático como caja blanca y/o negra con tecnologías |
|
Despliegue |
Usuario con sistema informático |
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ponente
|
|
|