¿Cómo evaluamos la calidad de un diseño de software?

Gracias por la A2A

Como cualquier evaluación de calidad, comienzas con métricas.

Debe definir las métricas adecuadas para obtener la información correcta de su esfuerzo de calidad. Si utiliza métricas que no están alineadas con lo que desea, no se acercará a su objetivo.

Es por eso que encontrará muchas formas diferentes de evaluar la calidad del diseño del software, dependiendo de la metodología que esté utilizando. Desafortunadamente, el más utilizado es el binario: ¿se hace el diseño, sí / no? E incluso entonces “hecho” está vagamente definido.

Como ejemplo: para una aplicación comercial, utilizando un escenario clásico en cascada, primero realizó un análisis adecuado, documentando todos los casos de uso y logrando que los accionistas firmen dichos requisitos; luego produce un diagrama de base de datos ER, un diagrama de módulo / clase y algunas especificaciones para la lógica de flujo de trabajo principal. Suponiendo esta metodología y escenario, puede medir la cobertura de sus casos de uso según estén relacionados con la implementación propuesta; medir la normalización de su modelo de base de datos; y métricas de complejidad como la complejidad ciclomática.

Complejidad de programación

Luego, puede comparar varios diseños propuestos, o comparar sus métricas con una línea base de los valores que desea orientar a lo largo del tiempo. Como cualquier medida que pueda implementar en un proceso, comenzará a medir su proceso tal como está hoy, luego usará la medida para mejorar.

Pero si estaba diseñando un juego en línea, tendrá una metodología y un conjunto de métricas completamente diferentes. La complejidad del código sería muy similar, pero en lugar de un proceso / diseño centrado en la base de datos, puede tener métricas sobre la velocidad gráfica o la experiencia del usuario.

Creo que todos respondieron su pregunta en función del “valor” del software en lugar de la “calidad” del diseño del software, lo cual es razonable porque la calidad tiene que pasar a un segundo plano para valorar muy a menudo dados los requisitos y recursos disponibles. Los recursos son dinero y tiempo. Intentaré responder la pregunta sin tener en cuenta los recursos. Sé que no es realista que se considere la “calidad” sobre los recursos, pero por mi interpretación de la pregunta, voy a responder de esta manera.

Diseño de software de calidad:

Utiliza software de código abierto.

Básicamente, su código no reescribe la rueda. Si necesita algo de seguridad, vea si ya existe una solución antes de escribirla usted mismo. Las opciones sobre las que usa generalmente son un buen factor en la calidad de su diseño.

Cumple con una arquitectura de software específica.

Elija una arquitectura de software que funcione para el software. La mayoría de los casos, MVC o marcos de múltiples niveles funcionan bien.

Sigue los principios estándar de la base de datos.

Utilice y refuerce las restricciones de clave externa en cualquier lugar aplicable y elimine la lógica empresarial de la base de datos a menos que sea absolutamente necesario.

Además del diseño, también espero que el diseño se implemente estrictamente o, de lo contrario, el diseño terminaría siendo inútil.

Escribí una respuesta a una pregunta relacionada aquí:

La respuesta de Lewis Nakao a ¿Cómo escribo un código hermoso?

La calidad del diseño está directamente determinada por qué tan bien satisface los requisitos de su negocio.

Por lo tanto, el valor de un diseño MS-DOS de software de 30 años que me ahorra 100 horas hombre por semana es muy superior a una oferta SaaS basada en la nube implementada en .net mobile que me ahorra 10 horas hombre por semana.

Para que pueda ver, no descubrirá la calidad a menos que primero comprenda los costos y el esfuerzo asociados con los problemas que el software está diseñado para abordar.

Software para ayudar al personal de mi sala telefónica a ingresar pedidos de ventas más rápido, ¡eso es genial! Software para permitir que el cliente ingrese por sí mismo para que no necesite una sala de teléfono; evaluaría esa calidad un poco más.

Vamos a enumerarlos más o menos en orden de importancia (para mí):

  1. ¿Satisface los requisitos de su negocio?
  2. ¿Satisface los requisitos de su negocio con un mínimo de alboroto?
  1. es decir, ¿es lo suficientemente rápido, lo suficientemente ligero y requiere poco mantenimiento continuo?
  • ¿Satisface los requisitos de su negocio de forma intuitiva?
    1. ¿Tiene que perder horas o días capacitando a los empleados en el sistema? ¿Tuviste que pasar tanto tiempo entrenando? ¿O fue intuitivo desde el principio?
  • ¿Resuelve problemas que no sabías que tenías o que no esperabas resolver?
    1. ¿Agregó ese pequeño detalle adicional para facilitarle la vida ahora o en el futuro?
  • ¿Existe una forma definitivamente mejor de resolver este problema?
    1. Basado en 1-4, ¿existe una solución alternativa claramente superior?

    Es por eso que necesita requisitos documentados. Sus requisitos deben declarar sus indicadores de éxito en términos inequívocos, lo que hace que sea muy fácil determinar la calidad: ¿qué tan bien satisface sus requisitos, que conducen directamente a lo que ya definió como éxito?

    Si sus requisitos no se alimentan directamente en sus indicadores de éxito, falló antes de comenzar. Si sus requisitos no son inequívocos, falló antes de comenzar. Si los plazos y los presupuestos no son claros en función de sus requisitos, falló antes de comenzar.

    Es raro que el funcionamiento del software sea el problema a menudo descrito como “mala calidad”. Muy a menudo, es la falta de comprensión de los requisitos reales o la falta de prioridad a la experiencia del usuario lo que lleva a que el software se describa de esa manera. Si no se prioriza la experiencia del usuario, el software se vuelve lento, engorroso o confuso, lo que a menudo se describe como “mala calidad” a pesar de cumplir completamente con los requisitos descritos.

    More Interesting

    ¿Cómo funcionan las aplicaciones de múltiples mandatos como Jira?

    Cómo implementar HP UFT en un proceso ágil

    Tecnología: ¿Los valores decrecientes de las acciones tecnológicas, como Linkedin o Tableau, indican que la 'burbuja tecnológica' estalla?

    ¿Qué piensan los ingenieros de software que tienen títulos reales de CS / EE / Math de desarrolladores que son autodidactas y / o no tienen un título de CS / EE / Math?

    ¿Cuál es la mejor manera de asegurarse de que agregar nuevas funciones en un software no afecte las funciones existentes?

    Cómo mantener a un compañero de equipo irresponsable alejado de un proyecto de software

    ¿Los problemas del Proyecto Euler valen la pena para alguien que esté únicamente interesado en el desarrollo de software?

    ¿Cuál es la diferencia entre los entornos estándar y flexibles para Google App Engine (GAE)?

    ¿Para qué se usa UML?

    ¿Qué razones tienen las personas para comprar software comercial de control de versiones en lugar de usar los gratuitos? Los sistemas de control de versiones que mis compañeros y yo más disfrutamos son SVN y Git. A pesar de esto, todavía hay compañías que venden software.

    ¿Qué es mejor, NUST ingeniería de software o BSCS rápido?

    ¿Qué tan difícil sería hacer un generador de música EDM artificial?

    ¿Es realmente posible que el FBI acceda a la cámara de una Mac sin encender el indicador?

    ¿Compartes una prueba de qa un equipo de desarrollo?

    ¿Se puede descifrar todo software?