Diseño de Software
Por Alicia Durango
()
Información de este libro electrónico
El diseño facilita actividades que son esenciales en el ciclo de vida de un sistema de software. Como posibilitar la evaluación del sistema contra sus objetivos antes aún de ser construido.
La relevancia de proyectar - o hacer diseño de software - puede ser explicada por la complejidad creciente de los sistemas de software. Debido a esa complejidad, el riesgo de construirse un sistema que no alcance sus objetivos es eminente.
Alicia Durango
Con experiencia en el mundo de formación desde el año 2010, Alicia empieza a escribir libros y a crear cursos online de informática para sus alumnos. Con una amplia experiencia laboral, Alicia Durango es una profesional con formación en Desarrollo de Aplicaciones Informáticas y Administración de Sistemas Informáticos, con más de 8 años de experiencia en el mundo de la informática, con amplia experiencia en los sectores de formación, publicidad y desarrollo web, llevando a cabo tareas de gestión, diseño gráfico, programación web y Directora de publicidad.
Lee más de Alicia Durango
Las Redes Sociales Calificación: 2 de 5 estrellas2/5Diseño Web con CSS Calificación: 5 de 5 estrellas5/5Curso de Programación y Análisis de Software Calificación: 4 de 5 estrellas4/5Ingeniería y Arquitectura del Software Calificación: 3 de 5 estrellas3/5Curso de Marketing Online Calificación: 0 de 5 estrellas0 calificacionesDiseño de Software Calificación: 0 de 5 estrellas0 calificacionesCurso de Programación con Java Calificación: 4 de 5 estrellas4/5Curso de Programación con Java - 2ª Edición Calificación: 5 de 5 estrellas5/5Mercadotecnia en los Medios Sociales - Tercera Edición Calificación: 0 de 5 estrellas0 calificacionesCurso de Programación y Análisis de Software - Tercera Edición Calificación: 0 de 5 estrellas0 calificacionesCurso de Programación y Análisis de Software - 2ª Edición Calificación: 0 de 5 estrellas0 calificacionesLa Guía Rápida del Comercio Electrónico Calificación: 0 de 5 estrellas0 calificacionesLa Guía Rápida de Comercio Electrónico Calificación: 4 de 5 estrellas4/5Mercadotecnia en los Medios Sociales Calificación: 0 de 5 estrellas0 calificaciones
Relacionado con Diseño de Software
Libros electrónicos relacionados
Diseño de Software Calificación: 0 de 5 estrellas0 calificacionesDesarrollo de Software Calificación: 0 de 5 estrellas0 calificacionesCurso de Ingeniería de Software Calificación: 4 de 5 estrellas4/5Curso de Programación y Análisis de Software - 2ª Edición Calificación: 0 de 5 estrellas0 calificacionesDiseño de arquitecturas .NET orientadas a microservicios Calificación: 3 de 5 estrellas3/5Desarrollo de Software: Requisitos, Estimaciones y Análisis Calificación: 0 de 5 estrellas0 calificacionesAprende a Desarrollar con Spring Framework Calificación: 3 de 5 estrellas3/5Backbone JS. JavaScript Framework. 2ª Edición Calificación: 0 de 5 estrellas0 calificacionesFundamentos de Programación y Bases de Datos: 2ª Edición Calificación: 0 de 5 estrellas0 calificacionesDesarrollo Web en Java Calificación: 3 de 5 estrellas3/5Curso de Introducción a la Administración de Bases de Datos Calificación: 3 de 5 estrellas3/5Fundamentos de Programación y Bases de Datos Calificación: 0 de 5 estrellas0 calificacionesScrum - ¡Guía definitiva de prácticas ágiles esenciales de Scrum! Calificación: 4 de 5 estrellas4/5Aprende a Programar ASP .NET y C# - Segunda Edición Calificación: 0 de 5 estrellas0 calificacionesEl Libro Práctico Del Programador Ágil Calificación: 5 de 5 estrellas5/5Conexión SQL SERVER & C# (Manual para principiantes) Calificación: 1 de 5 estrellas1/5Curso de Programación de Apps. Android y iPhone Calificación: 5 de 5 estrellas5/5Desarrollo de Software Ágil: Extreme Programming y Scrum Calificación: 5 de 5 estrellas5/5El Libro Negro del Programador Calificación: 4 de 5 estrellas4/5HTTP - Lo mínimo que todo desarrollador web debe saber Calificación: 5 de 5 estrellas5/5Cómo construir Microservicios : Los diez principales trucos para modelar, integrar y desplegar microservicios Calificación: 4 de 5 estrellas4/5Metodologías ágiles para el desarrollo de software Calificación: 0 de 5 estrellas0 calificacionesCiclo de vida de desarrollo ágil: de software seguro Calificación: 0 de 5 estrellas0 calificacionesBackbone JS Calificación: 0 de 5 estrellas0 calificacionesAnálisis y diseño de algoritmos: Un enfoque práctico Calificación: 0 de 5 estrellas0 calificacionesGuía práctica de Kubernetes: Proyectos para crear aplicaciones de éxito con Kubernetes Calificación: 0 de 5 estrellas0 calificacionesJEE 7 a Fondo: Diseño y desarrollo de aplicaciones Java Enterprise Calificación: 0 de 5 estrellas0 calificacionesCalidad en el desarrollo de software Calificación: 0 de 5 estrellas0 calificacionesUF2406 - El cliclo de vida del desarrollo de aplicaciones Calificación: 0 de 5 estrellas0 calificacionesProgramación y Lógica Proposicional Calificación: 4 de 5 estrellas4/5
Desarrollo e ingeniería de software para usted
Design Thinking para principiantes: La innovación como factor para el éxito empresarial Calificación: 4 de 5 estrellas4/5Autocad 2017 Curso Práctico: APLICACIONES GRÁFICAS Y MULTIMEDIA Calificación: 3 de 5 estrellas3/5El Libro Negro del Programador Calificación: 4 de 5 estrellas4/5El Libro Práctico Del Programador Ágil Calificación: 5 de 5 estrellas5/5Desarrollo Web en Java Calificación: 3 de 5 estrellas3/5Desarrollo de Software Ágil: Extreme Programming y Scrum Calificación: 5 de 5 estrellas5/5Aprende sobre la Ingeniería de Software Calificación: 0 de 5 estrellas0 calificacionesThe Coder Habits: Los 39 Hábitos Del Programador Profesional Calificación: 5 de 5 estrellas5/5Diseño mecánico con Solidworks 2015: Gráficos y modelado en 3D Calificación: 5 de 5 estrellas5/5Desarrollo Global de Software Calificación: 0 de 5 estrellas0 calificacionesDirección y gestión de proyectos de tecnologías de la información: Liderazgo del cambio para transformar las Empresas de la Sociedad Digita Calificación: 0 de 5 estrellas0 calificacionesGestión de Proyectos (GRADO SUPERIOR) Calificación: 0 de 5 estrellas0 calificacionesProgramación shell. Aprende a programar con más de 200 ejercicios resueltos: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 5 de 5 estrellas5/5Desarrollo de Aplicaciones IOS con SWIFT: SISTEMAS OPERATIVOS Calificación: 0 de 5 estrellas0 calificacionesScrum para No Informáticos Calificación: 5 de 5 estrellas5/5Métodos numéricos para ingeniería Calificación: 0 de 5 estrellas0 calificacionesTeoría, diseño e implementación de compiladores de lenguajes.: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 5 de 5 estrellas5/5Aprende a Desarrollar con Spring Framework Calificación: 3 de 5 estrellas3/5El Proceso de Desarrollo de Software Calificación: 0 de 5 estrellas0 calificacionesElectrocardiograma desde una visión digital Calificación: 4 de 5 estrellas4/5Aprende sobre la Ingeniería del Software Calificación: 0 de 5 estrellas0 calificacionesDesarrollo de Software: Requisitos, Estimaciones y Análisis Calificación: 0 de 5 estrellas0 calificacionesSoftware ERP - Análisis y Consultoría de Software Empresarial Calificación: 0 de 5 estrellas0 calificacionesSketchUp Pro 2013 paso a paso en español Calificación: 5 de 5 estrellas5/5Revit MEP 2018 Curso Práctico: Diseño asistido por ordenador (CAD) Calificación: 3 de 5 estrellas3/5Curso de Introducción a la Administración de Bases de Datos Calificación: 3 de 5 estrellas3/5Control de Versiones de Software con GIT - 2º Edición Calificación: 0 de 5 estrellas0 calificacionesAgile Calificación: 5 de 5 estrellas5/5Hibernate. Persistencia de objetos en JEE.: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 0 de 5 estrellas0 calificacionesEl Proceso de Desarrollo de Software: 2ª Edición Calificación: 0 de 5 estrellas0 calificaciones
Comentarios para Diseño de Software
0 clasificaciones0 comentarios
Vista previa del libro
Diseño de Software - Alicia Durango
TABLA DE CONTENIDOS
TABLA DE CONTENIDOS2
NOTA DEL AUTOR7
DEDICACIÓN8
INTRODUCCIÓN AL DISEÑO DE SOFTWARE9
QUE ES EL DISEÑO DE SOFTWARE13
CARACTERÍSTICAS DEL DISEÑO DE SOFTWARE15
ELEMENTOS DEL PROCESO DE DISEÑO DE SOFTWARE 19
OBJETIVOS21
RESTRICCIONES23
ALTERNATIVAS25
REPRESENTACIONES27
SOLUCIONES31
NIVELES DE DISEÑO DE SOFTWARE33
PRINCIPIOS Y TÉCNICAS DE DISEÑO DE SOFTWARE 34
DIVISIÓN Y CONQUISTA35
ABSTRACCIÓN37
ENCAPSULAMIENTO38
MODULARIZACIÓN39
SEPARACIÓN DE PREOCUPACIONES39
ACOPLAMIENTO Y COHESIÓN40
SEPARACIÓN DE DECISIONES DE EJECUCIÓN DE ALGORITMOS 42
SEPARACIÓN DE INTERFACES DE SUS IMPLEMENTACIONES 42
RESUMEN43
REFERENCIAS44
TEORÍA EN DISEÑO DE SOFTWARE44
PROCESO DE DISEÑO44
TÉCNICAS Y HERRAMIENTAS45
FUNDAMENTOS DE LA ARQUITECTURA DE SOFTWARE 46
MOTIVACIÓN PARA DESARROLLAR MEJORES SISTEMAS 47
LA ARQUITECTURA DE SOFTWARE49
LA DEFINICIÓN DE ARQUITECTURA DE SOFTWARE DE PERRY Y WOLF
49
ARQUITECTURA DE SOFTWARE POR GARLAN Y SHAW 53
ARQUITECTURA DE SOFTWARE POR BASS ET AL 55
DESCOMPONIENDO LA DEFINICIÓN DE ARQUITECTURA DE SOFTWARE 62
ELEMENTOS ARQUITECTURALES62
DECISIONES ARQUITECTURALES66
ATRIBUTOS DE CALIDAD75
VISIONES DE LA ARQUITECTURA82
EL DOCUMENTO DE ARQUITECTURA85
BENEFICIOS85
DIFICULTADES88
RESUMEN97
REFERENCIAS98
HISTÓRICO DEL ÁREA98
EVOLUCIÓN DEL SOFTWARE99
ELEMENTOS DE UNA ARQUITECTURA99
STAKEHOLDERS101
¿QUIENES SON LOS INTERESADOS EN UN SISTEMA DE SOFTWARE?
102
IMPORTANCIA DE LOS INTERESADOS107
TIPOS DE STAKEHOLDERS Y SU RELACIÓN CON LOS ATRIBUTOS DE CALIDAD 109
ATENCIÓN A LOS REQUISITOS COMO MEDIDA DE ÉXITO 111
CONFLICTOS ENTRE REQUISITOS Y ATRIBUTOS DE CALIDAD 113
RESPONSABILIDADES DE LOS STAKEHOLDERS115
RESUMEN120
ATRIBUTOS DE CALIDAD122
REQUISITOS FUNCIONALES Y NO-FUNCIONALES 123
DIFERENCIAS ENTRE REQUISITOS FUNCIONALES Y NO- FUNCIONALES 130
CONFLICTOS ENTRE REQUISITOS132
EXPRESANDO REQUISITOS NO-FUNCIONALES134
ATRIBUTOS DE CALIDAD135
LÍMITES A LAS FUNCIONALIDADES140
RELACIONES ENTRE ATRIBUTOS DE CALIDAD141
A QUIEN INTERESA LOS ATRIBUTOS DE CALIDAD142
MODELO DE CALIDAD143
ESTÁNDAR ISO/IEC 9126-1:2001143
CONFLICTOS ENTRE ATRIBUTOS DE CALIDAD160
ATRIBUTOS DE NEGOCIO161
MERCADO-BLANCO161
TIME-TO-MARKET162
COSTE Y BENEFICIO162
VIDA ÚTIL162
AGENDA DE LANZAMIENTO163
DISEÑO ARQUITECTURAL PARA CALIDAD DE SOFTWARE 164
REFERENCIAS165
REQUISITOS FUNCIONALES Y NO-FUNCIONALES165
DIFERENCIAS ENTRE REQUISITOS FUNCIONALES Y NO- FUNCIONALES 165
ATRIBUTOS DE NEGOCIO166
TÉCNICAS DE DISEÑO ARQUITECTURAL168
PRINCIPIOS Y TÉCNICAS DE DISEÑO ARQUITECTURAL 169
ABSTRACCIÓN170
SEPARACIÓN DE PREOCUPACIONES172
ESTÁNDARES Y ESTILOS ARQUITECTURALES174
TÁCTICAS DE DISEÑO178
RENDIMIENTO Y ESCALABILIDAD180
SEGURIDAD187
TOLERANCIA A FALLOS189
COMPRENSIBILIDAD Y MODIFICABILIDAD192
OPERABILIDAD193
RESUMEN195
REFERENCIAS196
ABSTRACCIÓN Y SEPARACIÓN DE PREOCUPACIONES196
ESTÁNDARES Y ESTILOS ARQUITECTURALES197
TÉCNICAS ARQUITECTURALES197
DOCUMENTACIÓN DE LA ARQUITECTURA199
REFERENCIA BIBLIOGRÁFICA201
ACERCA DEL AUTOR202
NOTA DEL AUTOR
Esta publicación está destinada a proporcionar el material útil e informativo. Esta publicación no tiene la intención de conseguir que usted sea un maestro de las bases de datos, sino que consiga obtener un amplio conocimiento general de las bases de datos para que cuando tenga que tratar con estas, usted ya pueda conocer los conceptos y el funcionamiento de las mismas. No me hago responsable de los daños que puedan ocasionar el mal uso del código fuente y de la información que se muestra en este libro, siendo el único objetivo de este, la información y el estudio de las bases de datos en el ámbito informático. Antes de realizar ninguna prueba en un entorno real o de producción, realice las pertinentes pruebas en un entorno Beta o de prueba.
El autor y editor niegan específicamente toda responsabilidad por cualquier responsabilidad, pérdida, o riesgo, personal o de otra manera, en que se incurre como consecuencia, directa o indirectamente, del uso o aplicación de cualesquiera contenidos de este libro.
Todas y todos los nombres de productos mencionados en este libro son marcas comerciales de sus respectivos propietarios. Ninguno de estos propietarios ha patrocinado el presente libro.
Procure leer siempre toda la documentación proporcionada por los fabricantes de software usar sus propios códigos fuente. El autor y el editor no se hacen responsables de las reclamaciones realizadas por los fabricantes.
DEDICACIÓN
Este libro se lo dedico a mi familia y a mis compañeros por ayudarme y ser el empujón que me hace en esos días en los que uno piensa que ya no puedes más.
INTRODUCCIÓN AL DISEÑO DE SOFTWARE
Antes de comenzar el estudio y la práctica en la disciplina de la Arquitectura de Software, es apropiado que sepamos donde encaja a lo largo del Cuerpo de Conocimiento en Ingeniería de Software (Software Engineering Body of Knowledge). El diseño arquitectural, o proyecto de la arquitectura, es la primera de las dos actividades que componen el área de conocimiento de Diseño de Software (Software Design Knowledge Area). La actividad siguiente es el diseño detallado. Por ser una actividad de Diseño, el diseño arquitectural se hace con una mezcla de conocimiento y creatividad. Como la creatividad es algo que se obtiene a través de la experiencia, no es nuestro objetivo enseñarla. Sin embargo, buscamos a lo largo de ese libro transmitir el conocimiento necesario para la creación de arquitecturas de sistemas de software.
Ciertamente, una base conceptual en Diseño de Software es necesaria para una mejor comprensión de ese libro. De esa manera, este capítulo busca fundamentar el conocimiento del lector en esa área, de forma que su importancia y sus beneficios proporcionados sean reconocidos. En otras palabras, ese capítulo hará que el lector sea capaz de:
• Reconocer los conceptos básicos de diseño de software
• Describir problemas de diseño a través de sus elementos fundamentales
• Identificar principios de diseño de software y explicar sus beneficios
• Diferenciar diseño de bajo-nivel (detallado) de diseño de alto- nivel (arquitectural) y saber cuando aplicar cada uno.
DISEÑO DE SOFTWARE
La relevancia de proyectarse – o hacer diseño de software – puede ser explicada por la complejidad creciente de los sistemas de software. Debido a esa complejidad, el riesgo de construirse un sistema que no alcance sus objetivos es eminente.
Para evitar tal riesgo, la práctica común de cualquier ingeniería para construir un artefacto complejo, un sistema de software complejo en nuestro caso, es construirlo de acuerdo con un plan. En otras palabras, proyectar el sistema antes de construirlo. El resultado de esa actividad, también conocida como actividad de diseño, es también llamado diseño. El diseño facilita dos actividades que son esenciales en el ciclo de vida de un sistema de software. Primero, él posibilita la evaluación del sistema contra sus objetivos antes aún de ser construido. De esa manera, aumenta la confianza de que el sistema construido, de acuerdo con el diseño, alcanzará sus objetivos. Obviamente, una vez que en ese punto está sólo el modelo del sistema – el diseño –, la evaluación no será completa, pero eso tampoco quiere decir que ella no ofrezca resultados importantes que lleven al éxito del sistema. De esta forma, otra actividad beneficiada por el diseño es la propia construcción del sistema, dado que también sirve como guía para la implementación del software.
A continuación, mostramos un ejemplo de como el diseño permite la evaluación del software. Se muestra parte de la primera versión del diseño de un sistema distribuido de
almacenamiento, el HBase y, a través de una breve evaluación de ese diseño, observamos una grave limitación del software.
EJEMPLO: El HBase es un sistema de almacenamiento distribuido. Eso quiere decir que los datos sometidos a él no serán guardados en un único servidor, sino en varios. De forma simplificada, el diseño del HBase define dos tipos de entidades en el sistema: el data nodo, que es el subsistema que almacena los datos, y el master nodo, que es el subsistema que sabe en que data nodos los datos fueron escritos y pueden ser recuperados. En la primera versión del HBase, sólo existía un master nodo que coordinaba todos los data nodos. Así, para recuperar o escribir datos en el HBase, un cliente realizaba los siguientes pasos: primero, el cliente se comunicaba con el master nodo a fin de conseguir, de acuerdo con una clave, la dirección del data nodo en que él puede realizar la operación deseada (lectura o escritura). Enseguida, el master nodo, que coordina donde los datos deben quedar, devuelve la dirección del data nodo que debería poseer los datos para la referida clave. A partir de ahí, el cliente, ya con la dirección, se comunicaba directamente con el data nodo y realizaba la operación deseada (escritura o lectura).
Si evaluáramos este diseño, podemos percibir dos características del HBase. La primera, es que no adopta el uso de un cliente flaco (thin client). Con eso, la implementación y configuración del cliente se hace más compleja, una vez que el cliente necesita conocer el protocolo de escritura y lectura del HBase, además de necesitar acceder tanto al master nodo como a los data nodos. Esto dificulta el desarrollo, la operabilidad y la eventual evolución del software, una vez que
los cambios en el protocolo afectan a clientes y a servidores. Además de eso, por poseer sólo un master nodo, la funcionalidad del HBase queda condicionada a su disponibilidad. Finalmente, si el master nodo no es accesible, ningún cliente podrá leer o escribir en el sistema, lo que lo hace un punto único de fallos.
––––––––
QUE ES EL DISEÑO DE SOFTWARE
Para definir el diseño de software, algunos autores lo hacen en dos sentidos distintos: cuando el diseño de software es usado como producto y cuando es usado como proceso. Cuando es usado en el primer sentido, el término diseño de software indica el producto que emerge del acto (o proceso) de proyectar un sistema de software y siendo así algún documento u otro tipo de representación del deseo del director de proyecto (o diseñador). Ese producto es el resultado de las decisiones del diseñador para formar una abstracción del sistema que es deseado en el mundo real. Existen diversas formas de representar esa abstracción del sistema. Podemos citar, por ejemplo, dibujos usando cajas y flechas, textos descriptivos, o incluso el uso de lenguajes o herramientas creadas para este propósito, como lenguajes de modelado de software, redes, pseudocódigo, etc.
Por otro lado, cuando el término es usado en el segundo sentido, hacer diseño indica el proceso seguido para obtenerse un proyecto. Ese es un proceso que forma parte del proceso de las diversas partes interesadas en el desarrollo y que es
orientado a los objetivos del software. Él debe ser realizado teniendo en mente el sistema y debe ser fundamentado en el conocimiento del diseñador sobre el dominio del problema.
A partir de la visión de diseño como artefacto, podemos observar que él debe describir diversos aspectos del software para que, así, posibilite su construcción. Entre estos aspectos, están:
• la estructura estática del sistema, incluyendo la jerarquía de sus módulos;
• la descripción de los datos a ser usados;
• los algoritmos a ser usados;
• el empaquetamiento del sistema, en términos de como los módulos están agrupados en unidades de compilación; y
• las interacciones entre módulos, incluyendo las reglas de cómo ellas deben ocurrir y porque ocurren.
Podemos percibir que, a pesar de que los ejemplos anteriores describan sólo parte del diseño de dos sistemas, muestran buena parte de los aspectos que esperamos en el diseño de un software.
Por fin, citamos una definición de diseño que engloba todos estos aspectos:
Definición de diseño de software: es tanto el proceso de definición de la arquitectura, módulos, interfaces y otras características de un sistema como el resultado de ese proceso.
CARACTERÍSTICAS DEL DISEÑO DE SOFTWARE
Proyectar los diversos aspectos de un sistema de software es un proceso muy trabajoso. Sin embargo, puede proporcionar diversos beneficios.
El diseño de software permite la evaluación previa. Como desarrollar software cuesta tiempo y dinero, no parece