Question
Asked 20th Jun, 2023

How do we assess the quality of a software design? What is software architecture?

answer both questions

Most recent answer

Yoslenys Roque
University of Information Sciences
El diseño del software ayuda a modificar elementos que se utilizan para armar la estructura y presentación que tendrá el sistema o la solución, la importancia del diseño del software se puede definir con la palabra: calidad.
El diseño es la manera de materializar con precisión los requerimientos del cliente.
Existen 4 elementos de diseño que son necesarios a tener en cuenta:
  1. El diseño de los datos: Define la relación entre cada uno de los elementos estructurales del programa.
  2. El diseño arquitectónico: Describe cómo se comunica el software consigo mismo, con los sistemas que operan junto con él y con los operadores y usuarios que lo emplean.
  3. El diseño de la interfaz: Describe la forma como el sistema interactúa con el usuario más que la apariencia del sistema.
  4. El diseño a nivel de componente o de procedimientos: Es una descripción procedimental de cada una de las partes que fueron especificadas en el diseño arquitectónico.
Por tanto para lograr una adecuada calidad en el diseño se deben tener en cuenta aspectos como:
  1. La implementación de todos los requisitos contenidos en el modelo de análisis, debe ser una guía que puedan leer y entender tanto los que construyan el código, como los que prueban y mantienen el software.
  2. Debe proporcionar una completa idea de lo que es el software, enfocando los dominios de datos, funcionamiento y comportamiento desde el punto de vista de la implementación.
  3. Se deben establecer criterios técnicos.
  4. Debe presentar una organización jerárquica que haga uso inteligente del control entre los componentes del software.
  5. Debe ser modular, es decir, se debe hacer una partición lógica del software en elementos que realicen funciones y sub-funciones específicas.
  6. Debe contener abstracciones de datos y procedimientos.
  7. Debe producir módulos que presenten características de funcionamiento independiente.
  8. Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los módulos y el entorno exterior.
  9. Debe producir un diseño usando un método que pueda repetirse según la información obtenida durante el análisis de requisitos de software.
Por otra parte la Arquitectura de software se refiere a la estructuración del sistema desde etapas tempranas del desarrollo. Esta estructuración representa un diseño de alto nivel del sistema que tiene dos propósitos primarios: satisfacer los atributos de calidad (desempeño, seguridad, modificabilidad), y servir como guía en el desarrollo. De acuerdo al Software Engineering Institute (SEI), la Arquitectura de software se refiere a: “las estructuras de un sistema, compuestas de elementos con propiedades visibles de forma externa y las relaciones que existen entre ellos.

All Answers (10)

Kunal Roy
Durgapur Institute of Advanced Technology and Management
In order to determine a software design's efficacy, maintainability, and adherence to predetermined principles, it is necessary to evaluate a number of design-related factors. Although there are many different viewpoints on what makes a high-quality design, the following elements are frequently taken into account:
1. Functional Suitability: The design should accurately and fully satisfy the functional requirements stated for the software system.
2. Componentization and Modularity: Well-designed software should be modular, with discrete, easily identifiable components that can be created, tested, and maintained separately. Reusability and complexity management are made easier by modularity.
3. Maintainability: The plan need to be simple to comprehend, alter, and expand. It must be designed in such a way that it may be efficiently maintained and improved in the future without having unforeseen consequences.
4. Design should be adaptable and extensible.
On the other hand, a software system's overall structure and organisation are referred to as its "software architecture." It outlines the core elements, their connections, and the guiding principles for how they interact. A high-level view of the system is provided by software architecture, which focuses on the important design choices that influence the system's attributes and behavior.
1 Recommendation
Daniel Viñales
University of Information Sciences
La calidad de un diseño de software puede ser evaluda de diversas maneras, pero en general, se busca que el diseño cumpla con ciertas características que lo hagan eficiente, escalable, seguro y que cumpla con los requisitos y expectativas del cliente.
Las siguientes son algunas de las formas de evaluar la calidad de un software:
*Cumplimiento de los requisitos: El diseño debe de cumplir con los requisitos funcionales y no funcionales establecidos para el proyecto.
*Eficiencia: el diseño debe de ser eficiente en términos de uso de recursos como memoria, capacidad de procesamiento y almacenamiento.
*Mantenibilidad: El diseño debe de ser fácil de mantener y actualizar en el futuro.
*Seguridad: El diseño debe de ser seguro y proteger los datos y la información del usuario.
*Escalabilidad: El diseño debe de ser escalable para poder manejar grandes volúmenes de datos o usuarios.
La arquitectura de software, no es más que la estructura subyacente que sostiene el sistema de software, incluyendo componentes, módulos y las relaciones entre ellos. La arquitectura de software proporciona una visión general del sistema de software y ayuda a los desarrolladores a entender cómo deben interactuar los diferentes componentes para cumplir con los requisitos del sistema. La arquitectura de software también ayuda a los desarrolladores a identificar los riesgos y problemas potenciales y a tomar decisiones informadas sobre cómo se deben diseñar y desarrollar los diferentes componentes del sistema. Una arquitectura bien diseñada puede mejorar la calidad del software, la seguridad, el rendimiento, la escalabilidad y la facilidad de mantenimiento.
1 Recommendation
Yunia Muñoz Pelegrín
University of Information Sciences
¿Cómo evaluamos la calidad de un diseño de software?
Pruebas de software: Las pruebas de software son una forma efectiva de evaluar la calidad de un software. Se pueden utilizar diferentes tipos de pruebas, como pruebas de unidad, pruebas de integración, pruebas de sistema y pruebas de aceptación, para evaluar diferentes aspectos del software.
La importancia radica principalmente en entregar productos de calidad esperada, en donde se previenen riesgos a futuro. Así mismo, todo software puede tener fallos que terminen siendo responsables de grandes pérdidas de dinero para la empresa.
Cada perspectiva considera diversas características, y a su vez cada característica puede tener una o más subcaracterísticas.
Características y subcaracterísticas de calidad interna:
  • Adecuación funcional: funcionalidad adecuada, funcionalidad correcta, funcionalidad completa.
  • Confiabilidad: madurez, disponibilidad, tolerancia a fallos, recuperabilidad.
  • Eficiencia de rendimiento: tiempo de respuesta, utilización de recursos, capacidad.
  • Operabilidad: reconocimiento de funcionalidad adecuada, facilidad de uso, facilidad de aprendizaje, protección contra errores de usuario, accesibilidad, estética de la interfaz de usuario.
  • Seguridad: confidencialidad, integridad, no rechazo, responsabilidad, autenticidad.
  • Compatibilidad: interoperabilidad, capacidad de coexistencia.
  • Mantenibilidad: modularidad, reusabilidad, capacidad de ser analizado, capacidad de ser modificado, capacidad de ser verificado/probado.
  • Transmisibilidad/Portabilidad: instalabilidad, adaptabilidad, reemplazabilidad.
Características y subcaracterísticas de calidad externa:
  • Satisfacción de uso: utilidad, confianza, placer, comodidad.
  • Seguridad de uso: mitigación de riesgos económicos, mitigación de riesgos para el usuario, mitigación de riesgos ambientales.
  • Flexibilidad de uso: cobertura del contexto, flexibilidad.
  • Efectividad de uso.
  • Eficiencia de uso.
Aunque algunas de estas características se pueden medir de manera objetiva, la mayor parte requieren una evaluación subjetiva. Esto hace que la manera más utilizada, más rápida, menos costosa y quizá la que más refleja la realidad, sea la utilización de la experiencia de los empleados de una organización. Sin embargo, esto no permite realizar comparaciones objetivas y presenta algunos otros problemas como que le pertenece al experto y no a la organización, no se puede replicar sistemáticamente y no contribuye a la madurez de la ingeniería de software.
¿Qué es la arquitectura de software?
La arquitectura, referida al software, es un concepto que surge ya en los años 60 y se refiere a una planificación basada en modelos, patrones y abstracciones teóricas, a la hora de realizar una pieza de software de cierta complejidad y como paso previo a cualquier implementación. De esta forma se dispone de una guía teórica detallada que nos permite entender cómo van a encajar cada una de las piezas de nuestro producto o servicio.
Por tanto, en arquitectura llamamos patrón a cualquier solución general y reutilizable para problemas recurrentes en ingeniería del software en un contexto dado.
Lo misma tiene como importancia, nos permite planificar a priori nuestro desarrollo y elegir el mejor conjunto de herramientas para llevar a cabo nuestros proyectos.
Darelys Peña Castellanos
University of Information Sciences
La evaluación de la calidad de un diseño de software puede implicar varios factores, como el cumplimiento de los principios de diseño, la escalabilidad, la capacidad de mantenimiento, la reutilización y el rendimiento. También puede implicar revisar el diseño con respecto a los requisitos del proyecto y garantizar que cumpla con la funcionalidad y la experiencia del usuario deseadas.
La arquitectura de software se refiere a la estructura y organización general de un sistema de software. Implica tomar decisiones de diseño de alto nivel, como elegir los componentes de software apropiados y definir sus interacciones e interfaces. La arquitectura de software sirve como modelo para el equipo de desarrollo y ayuda a garantizar que el producto final sea escalable, mantenible y cumpla con los requisitos de rendimiento y funcionalidad deseados.
Arleen Vilas
University of Information Sciences
To ensure the quality of software in order to reach a final product that satisfies the functionalities agreed with the customer, it can be separated into two categories: internal and external quality.
Internal quality characteristics and sub-characteristics:
Functional adequacy: adequate functionality, correct functionality, complete functionality.
Reliability: maturity, availability, fault tolerance, recoverability.
Performance efficiency: response time, resource utilization, capacity.
Operability: recognition of adequate functionality, ease of use, ease of learning, user error protection, accessibility, user interface aesthetics.
Security: confidentiality, integrity, non-repudiation, accountability, authenticity.
Compatibility: interoperability, coexistence capability.
Maintainability: modularity, reusability, ability to be analyzed, ability to be modified, ability to be verified/tested.
Transmissibility/Portability: installability, adaptability, replaceability.
External quality characteristics and sub-characteristics:
Satisfaction of use: utility, reliability, confidence, pleasure, comfort.
Safety of use: economic risk mitigation, user risk mitigation, environmental risk mitigation.
Flexibility of use: context coverage, flexibility.
Effectiveness of use.
Efficiency of use.
The software architecture forms the backbone for building a software system and is largely responsible for enabling or disabling certain quality attributes of the system, including software reliability and performance, and is a reusable abstract model that can be transferred from one system to another and represents a means of communication and discussion among project participants, allowing interaction and exchange among developers with the ultimate goal of establishing an exchange of knowledge and points of view among them.
Michel Pedrera Suen
University of Information Sciences
The quality of a software design can be assessed in a number of ways, often arising from the context and specific requirements of the project. Here are some common ways to assess the quality of a software design:
  • Requirements Fulfillment: The design must meet all the requirements specified for the software system. If the design does not meet the requirements, the software may not work properly or meet the needs of the user.
  • Modularity: The design must be modular, which means that the different components of the system must be well separated and have a clear separation of responsibilities. Modularity allows for greater ease of maintenance and software evolution.
  • Cohesion and coupling: Design components must be cohesive, which means that related components will likely be together in the design. Also, the storage between components should be as low as possible, which means that changing one component should not affect other components.
  • Scalability: The design must be scalable, which means that it should be possible to add new functionality or increase the capacity of the system without having to completely redesign the software.
  • Reliability: The design must be reliable, which means that the software should work correctly and without errors in different situations and conditions.
  • Maintainability: The design should be maintainable, which means that it should be possible to find and fix bugs in the software efficiently.
  • Usability: The design should be easy for end users to use and understand, and it should meet usability standards.
  • Efficiency: The design must be efficient in terms of resource usage, such as memory and processing, to ensure good performance and scalability.
  • Reusability: Reusability refers to the ability of a software component to be used in different contexts and in different projects. A reusable software component is one that can be used without having to be modified or adapted. Reusing software components can save software development time and resources by not having to redevelop the same component multiple times. For a software component to be reusable, it must be well documented, have a clear interface, and be designed in a modular way.
  • Portability: Portability refers to the ability of a software to be executed on different platforms and operating systems without having to be modified. Portable software can be successfully run in different environments without the need for adaptation to the specific system. Portability is important because it allows software to be used in different contexts and by different users, without having to be rewritten for each platform. For software to be portable, it must be designed using standards and technologies that are common and compatible across different platforms.
  • Interoperability: Interoperability refers to the ability of different systems and software components to communicate and work together effectively. Interoperability is important in environments where there are multiple systems and applications that need to work together to achieve a common goal. For a software system or component to be interoperable, it must use common standards and protocols for communication, and have a clear and well-defined interface. Interoperability allows different systems and applications to work together efficiently and seamlessly.
Michel Pedrera Suen
University of Information Sciences
Software architecture refers to the overall structure of software and the way it provides conceptual integrity for a system. One of the goals of software design is to obtain an architectural representation of a system, which serves as a framework from which more detailed design activities are carried out. There are properties that must be specified as part of an architectural design, including structural properties, extra-functional properties, and families of related systems. Architectural design can be represented using a number of different models, including structural models, framework models, dynamic models, process models, and functional models. Several different architectural description languages (ADLs) have been developed to represent these models. There is some debate about the role of architecture in design, with some researchers arguing that software architecture derivation should be separate from design, while others believe it is an integral part of the design process.
Software engineers can reuse design-level concepts by using a set of architectural patterns. These patterns represent common solutions to recurring design problems and can be applied to different systems to improve their quality and efficiency. Some researchers argue that software architecture derivation should be separated from design to allow for a more systematic and rigorous approach to architecture development. Others believe that architecture is an integral part of the design process and should be developed concurrently with detailed design.
Dariel Rodriguez Díaz
University of Information Sciences
When reviewing the bibliography it is possible to verify the existence of abundant definitions of software architecture. There is general agreement that it refers to the relationship between the system components, which include the protocols for communication, synchronization and access to data, their physical distribution, the assignment of functionalities to design elements and this composition.
Reinier Fernández Coello
University of Information Sciences
El diseño de software es un proceso iterativo a través del cual los requisitos se traducen en un “modelo” para construir el software. Es decir, el diseño se representa en un alto nivel de abstracción, un nivel que se puede rastrear directamente al objetivo del sistema específico y más detallado requisitos de datos, funcionales y de comportamiento. Para evaluar la calidad de una representación de diseño,se deben establecer criterios técnicos para un buen diseño, donde se debe considerar las siguientes pautas: 1. Un diseño debe exhibir una arquitectura que (a) haya sido creada usando reconocimiento estilos o patrones arquitectónicos apreciables, (b) se compone de componentes que exhiben buenas características de diseño (estos se discuten más adelante en este capítulo), y (c) puede implementarse de manera evolutiva,2 facilitando así implementación y pruebas. 2. Un diseño debe ser modular; es decir, el software debe ser lógicamente dividido en elementos o subsistemas. 3. Un diseño debe contener distintas representaciones de datos, arquitectura, interfaces y componentes. 4. Un diseño debe conducir a estructuras de datos que sean apropiadas para las clases a implementarse y se extraen de patrones de datos reconocibles. 5. Un diseño debe conducir a componentes que exhiban funciones independientes características. 6. Un diseño debe conducir a interfaces que reduzcan la complejidad de las conexiones entre componentes y con el ambiente externo. 7. Un diseño debe derivarse usando un método repetible que sea impulsado por información obtenida durante el análisis de requisitos de software. 8. Un diseño debe representarse usando una notación que comunique efectivamente su definición. Además considero que se debe medir la escalabilidad, la capacidad de mantenimiento, la reutilización y el rendimiento, así como el bajo acoplamiento la menor cantidad de pruebas, de forma tal que facilite la implementación, partiendo de algunas métricas que existen. La arquitectura de software se refiere “la estructura general del software y las formas en que esa estructura proporciona integridad conceptual para un sistema”, o sea, la arquitectura es la estructura u organización de los componentes del programa, las formas en que estos componentes interactúan y la estructura de los datos que se utilizan los componentes. Además comprende toda la vista de datos, de sistema y las tecnologías a utilizar para el desarrollo del software. Cómo engranaje es importante mencionar la definición de las buenas prácticas de diseño para garantizar la no presencia de problemas que se pueden dar durante del diseño del producto.
Yoslenys Roque
University of Information Sciences
El diseño del software ayuda a modificar elementos que se utilizan para armar la estructura y presentación que tendrá el sistema o la solución, la importancia del diseño del software se puede definir con la palabra: calidad.
El diseño es la manera de materializar con precisión los requerimientos del cliente.
Existen 4 elementos de diseño que son necesarios a tener en cuenta:
  1. El diseño de los datos: Define la relación entre cada uno de los elementos estructurales del programa.
  2. El diseño arquitectónico: Describe cómo se comunica el software consigo mismo, con los sistemas que operan junto con él y con los operadores y usuarios que lo emplean.
  3. El diseño de la interfaz: Describe la forma como el sistema interactúa con el usuario más que la apariencia del sistema.
  4. El diseño a nivel de componente o de procedimientos: Es una descripción procedimental de cada una de las partes que fueron especificadas en el diseño arquitectónico.
Por tanto para lograr una adecuada calidad en el diseño se deben tener en cuenta aspectos como:
  1. La implementación de todos los requisitos contenidos en el modelo de análisis, debe ser una guía que puedan leer y entender tanto los que construyan el código, como los que prueban y mantienen el software.
  2. Debe proporcionar una completa idea de lo que es el software, enfocando los dominios de datos, funcionamiento y comportamiento desde el punto de vista de la implementación.
  3. Se deben establecer criterios técnicos.
  4. Debe presentar una organización jerárquica que haga uso inteligente del control entre los componentes del software.
  5. Debe ser modular, es decir, se debe hacer una partición lógica del software en elementos que realicen funciones y sub-funciones específicas.
  6. Debe contener abstracciones de datos y procedimientos.
  7. Debe producir módulos que presenten características de funcionamiento independiente.
  8. Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los módulos y el entorno exterior.
  9. Debe producir un diseño usando un método que pueda repetirse según la información obtenida durante el análisis de requisitos de software.
Por otra parte la Arquitectura de software se refiere a la estructuración del sistema desde etapas tempranas del desarrollo. Esta estructuración representa un diseño de alto nivel del sistema que tiene dos propósitos primarios: satisfacer los atributos de calidad (desempeño, seguridad, modificabilidad), y servir como guía en el desarrollo. De acuerdo al Software Engineering Institute (SEI), la Arquitectura de software se refiere a: “las estructuras de un sistema, compuestas de elementos con propiedades visibles de forma externa y las relaciones que existen entre ellos.

Similar questions and discussions

Related Publications

Conference Paper
Software architecture has been identified as a main tool for high quality system development. Software architecture provides the basis for the reuse in a software product line. Unfortunately the potential benefits of a well designed software architecture can be lost if the software architecture is not followed in the design of the products. We sug...
Conference Paper
Full-text available
The construction of dependable software systems is recognized as a complex task: the system developer has to address the usage of fault tolerance techniques in addition to the design of the functional aspects that are specific to the system. This paper proposes a framework aimed at easing the development of dependable systems by providing software...
Article
This paper describes the service design, software architecture, and implementation of a personal Multimedia multipoint teleconference system over N-ISDN (PMTC/N-ISDN) for highly productive desktop teleconferencing. PMTC is a distributed multimedia desktop teleconference system that offers three types of virtual conference spaces by using the combin...
Got a technical question?
Get high-quality answers from experts.