La calidad funcional del software refleja qué tan bien cumple o se ajusta a un diseño determinado, en función de los requisitos o especificaciones funcionales . [1] Ese atributo también puede describirse como la idoneidad para el propósito de un software o cómo se compara con los competidores en el mercado como un producto que vale la pena . [2] Es el grado en que se produjo el software correcto .
La calidad estructural del software se refiere a cómo cumple con los requisitos no funcionales que respaldan la entrega de los requisitos funcionales, como la solidez o la facilidad de mantenimiento. Tiene mucho más que ver con el grado en que el software funciona según lo necesario .
Muchos aspectos de la calidad estructural pueden evaluarse solo de manera estática a través del análisis de la estructura interna del software, su código fuente (ver Métricas de software ), [3] a nivel de unidad y a nivel de sistema (a veces denominado prueba de extremo a extremo [4] ), que es en efecto cómo su arquitectura se adhiere a los principios sólidos de la arquitectura de software delineados en un documento sobre el tema por Object Management Group (OMG). [5]
Algunas cualidades estructurales, como la usabilidad , pueden evaluarse solo de forma dinámica (los usuarios u otras personas que actúan en su nombre interactúan con el software o, al menos, con algún prototipo o implementación parcial; incluso la interacción con una versión simulada hecha en cardboard representa una prueba dinámica porque dicha versión puede considerarse un prototipo). Otros aspectos, como la confiabilidad, pueden involucrar no solo al software sino también al hardware subyacente, por lo tanto, puede evaluarse tanto de forma estática como dinámica ( prueba de estrés ). [ cita requerida ]
La calidad funcional se suele evaluar de forma dinámica, pero también es posible utilizar pruebas estáticas (como revisiones de software ). [ cita requerida ]
Históricamente, la estructura, clasificación y terminología de los atributos y métricas aplicables a la gestión de la calidad del software se han derivado o extraído de la norma ISO 9126 y la posterior norma ISO/IEC 25000. [7] Con base en estos modelos (ver Modelos), el Consorcio para la Calidad del Software de TI (CISQ) ha definido cinco características estructurales deseables principales necesarias para que un software proporcione valor comercial : [8] Fiabilidad, Eficiencia, Seguridad, Mantenibilidad y Tamaño (adecuado). [9] [10] [11]
La medición de la calidad del software cuantifica en qué medida un programa o sistema de software se clasifica en cada una de estas cinco dimensiones. Se puede calcular una medida agregada de la calidad del software mediante un esquema de puntuación cualitativo o cuantitativo o una combinación de ambos y luego un sistema de ponderación que refleje las prioridades. Esta visión de la calidad del software, que se sitúa en un continuo lineal, se complementa con el análisis de los "errores críticos de programación" que, en circunstancias específicas, pueden provocar interrupciones catastróficas o degradaciones del rendimiento que hacen que un sistema determinado no sea adecuado para su uso, independientemente de la calificación basada en mediciones agregadas. Estos errores de programación que se encuentran a nivel de sistema representan hasta el 90 por ciento de los problemas de producción, mientras que a nivel de unidad, aunque sean mucho más numerosos, los errores de programación representan menos del 10 por ciento de los problemas de producción (véase también la regla del noventa por ciento ). En consecuencia, la calidad del código sin el contexto de todo el sistema, como lo describió W. Edwards Deming , tiene un valor limitado. [ cita requerida ]
Para visualizar, explorar, analizar y comunicar mediciones de calidad de software, los conceptos y técnicas de visualización de información proporcionan medios visuales e interactivos que resultan útiles, en particular, si se deben relacionar varias mediciones de calidad de software entre sí o con componentes de un software o sistema. Por ejemplo, los mapas de software representan un enfoque especializado que "puede expresar y combinar información sobre el desarrollo de software, la calidad de software y la dinámica de sistemas". [12]
La calidad del software también juega un papel en la fase de lanzamiento de un proyecto de software. En concreto, la calidad y el establecimiento de los procesos de lanzamiento (también procesos de parches ), [13] [14] la gestión de la configuración [15] son partes importantes de un proceso general de ingeniería de software. [16] [17] [18]
Motivación
La calidad del software está motivada por al menos dos perspectivas principales:
Gestión de riesgos : Los fallos de software han causado más que inconvenientes. Los errores de software pueden causar muertes humanas (véase, por ejemplo: Lista de errores de software ). Las causas han variado desde interfaces de usuario mal diseñadas hasta errores directos de programación , [19] [20] [21] véase, por ejemplo, el caso del Boeing 737 o los casos de aceleración no intencionada [22] [23] o los casos del Therac-25 . [24] Esto dio lugar a requisitos para el desarrollo de algunos tipos de software, en particular e históricamente para el software integrado en dispositivos médicos y de otro tipo que regulan infraestructuras críticas: "[Los ingenieros que escriben software integrado] ven programas Java que se detienen durante un tercio de segundo para realizar la recolección de basura y actualizar la interfaz de usuario, y visualizan aviones cayendo del cielo". [25] En los Estados Unidos, dentro de la Administración Federal de Aviación (FAA), el Servicio de Certificación de Aeronaves de la FAA proporciona programas de software, políticas, orientación y formación, centrándose en el software y el hardware electrónico complejo que tiene un efecto en el producto aéreo (un "producto" es una aeronave, un motor o una hélice). [26] Las normas de certificación como DO-178C , ISO 26262 , IEC 62304 , etc. proporcionan orientación.
Gestión de costes : como en cualquier otro campo de la ingeniería, un producto o servicio de software regido por una buena calidad de software cuesta menos de mantener, es más fácil de entender y puede cambiar de forma más rentable en respuesta a las necesidades empresariales más apremiantes. [27] Los datos de la industria demuestran que una mala calidad estructural de las aplicaciones en las aplicaciones empresariales básicas (como la planificación de recursos empresariales (ERP), la gestión de relaciones con los clientes (CRM) o los grandes sistemas de procesamiento de transacciones en los servicios financieros) da como resultado costes, excesos de programación y crea residuos en forma de retrabajo (véase Muda (término japonés) ). [28] [29] [30] Además, la mala calidad estructural está fuertemente correlacionada con interrupciones empresariales de alto impacto debido a datos corruptos, interrupciones de las aplicaciones, violaciones de seguridad y problemas de rendimiento. [31]
Los informes del CISQ sobre el costo de la mala calidad estiman un impacto de:
2,08 billones de dólares en 2020 [32] [33]
2,84 billones de dólares en 2018
El Informe sobre el costo de una violación de datos de 2020 de IBM estima que los costos globales promedio de una violación de datos: [34] [35]
3,86 millones de dólares
Definiciones
YO ASI
La calidad del software es la "capacidad de un producto de software para cumplir con los requisitos". [36] [37] mientras que para otros puede ser sinónimo de creación de valor o de cliente [38] [39] o incluso de nivel de defectos. [40] Las mediciones de calidad del software se pueden dividir en tres partes: calidad del proceso, calidad del producto que incluye propiedades internas y externas y, por último, calidad en uso, que es el efecto del software. [41]
Aseguramiento de la calidad
ASQ utiliza la siguiente definición: La calidad del software describe los atributos deseables de los productos de software. Existen dos enfoques principales: la gestión de defectos y los atributos de calidad. [42]
Instituto Nacional de Estándares y Tecnología (NIST)
El Software Assurance (SA) cubre tanto la propiedad como el proceso para lograrla: [43]
Confianza [justificable] de que el software está libre de vulnerabilidades, ya sea diseñadas intencionalmente en el software o insertadas accidentalmente en cualquier momento durante su ciclo de vida y que el software funciona de la manera prevista
El conjunto planificado y sistemático de actividades que garantizan que los procesos y productos del ciclo de vida del software se ajusten a los requisitos, estándares y procedimientos.
PMI
La Guía "Software Extension" del PMBOK del Project Management Institute no define la "calidad del software" en sí, sino la Garantía de Calidad del Software (SQA) como "un proceso continuo que audita otros procesos de software para asegurar que esos procesos se están siguiendo (incluye, por ejemplo, un plan de gestión de calidad del software)", mientras que el Control de Calidad del Software (SCQ) significa "ocuparse de aplicar métodos, herramientas y técnicas para asegurar la satisfacción de los productos de trabajo con respecto a los requisitos de calidad para un software en desarrollo o modificación". [44]
Otros generales e históricos
La primera definición que la historia de la calidad nos recuerda es la de Shewhart, de principios del siglo XX: “Hay dos aspectos comunes de la calidad: uno de ellos tiene que ver con la consideración de la calidad de una cosa como una realidad objetiva independiente de la existencia del hombre. El otro tiene que ver con lo que pensamos, sentimos o percibimos como resultado de la realidad objetiva. En otras palabras, hay un lado subjetivo de la calidad.” [45]
Kitchenham y Pfleeger, informando además sobre las enseñanzas de David Garvin, identifican cinco perspectivas diferentes sobre la calidad: [46] [47]
La perspectiva trascendental se ocupa del aspecto metafísico de la calidad. En esta perspectiva, la calidad es “algo por lo que luchamos como ideal, pero que tal vez nunca podamos implementar por completo”. [48] Es difícil definirla, pero es similar a lo que un juez federal comentó una vez sobre la obscenidad: “Lo reconozco cuando lo veo”. [49]
La perspectiva del usuario se ocupa de la idoneidad del producto para un contexto de uso determinado. Mientras que la visión trascendental es etérea, la visión del usuario es más concreta y se basa en las características del producto que satisfacen las necesidades del usuario. [48]
La perspectiva de la fabricación considera la calidad como conformidad con los requisitos. Este aspecto de la calidad se destaca en normas como la ISO 9001, que define la calidad como "el grado en el que un conjunto de características inherentes cumple los requisitos" (ISO/IEC 9001 [50] ).
La perspectiva del producto implica que la calidad puede apreciarse midiendo las características inherentes del producto.
La perspectiva final de la calidad se basa en el valor. [38] Esta perspectiva reconoce que las diferentes perspectivas de la calidad pueden tener diferente importancia o valor para las distintas partes interesadas.
El problema inherente a los intentos de definir la calidad de un producto, casi de cualquier producto, fue planteado por el maestro Walter A. Shewhart. La dificultad de definir la calidad es traducir las necesidades futuras del usuario en características mensurables, de modo que se pueda diseñar y fabricar un producto que proporcione satisfacción a un precio que el usuario esté dispuesto a pagar. Esto no es fácil, y tan pronto como uno se siente medianamente exitoso en el empeño, descubre que las necesidades del consumidor han cambiado, han entrado competidores, etc. [51]
La calidad es una decisión del cliente, no de un ingeniero, ni de marketing, ni de la dirección general. Se basa en la experiencia real del cliente con el producto o servicio, medida en relación con sus requisitos –expresados o no, conscientes o meramente intuidos, técnicamente operativos o totalmente subjetivos– y siempre representa un objetivo en movimiento en un mercado competitivo. [52]
La palabra calidad tiene múltiples significados. Dos de ellos predominan en el uso de la palabra: 1. La calidad consiste en las características del producto que satisfacen las necesidades de los clientes y, por lo tanto, proporcionan satisfacción con el producto. 2. La calidad consiste en la ausencia de deficiencias. Sin embargo, en un manual como éste es conveniente estandarizar una definición breve de la palabra calidad como "aptitud para el uso". [53]
Tom DeMarco ha propuesto que "la calidad de un producto es una función de cuánto cambia el mundo para mejor". [ cita requerida ] Esto puede interpretarse en el sentido de que la calidad funcional y la satisfacción del usuario son más importantes que la calidad estructural a la hora de determinar la calidad del software.
Otra definición, acuñada por Gerald Weinberg en Quality Software Management: Systems Thinking, es "La calidad es valor para alguna persona". [54] [55]
Otros significados y controversias
Uno de los desafíos a la hora de definir la calidad es que "todos sienten que la entienden" [56] y otras definiciones de calidad del software podrían basarse en la ampliación de las diversas descripciones del concepto de calidad utilizado en los negocios.
La calidad del software también suele confundirse con la garantía de calidad o la gestión de resolución de problemas [57] o el control de calidad [58] o DevOps . Se superpone con las áreas mencionadas anteriormente (consulte también las definiciones de PMI), pero se distingue porque no se centra únicamente en las pruebas, sino también en los procesos, la gestión, las mejoras, las evaluaciones, etc. [58]
Medición
Aunque los conceptos presentados en esta sección son aplicables tanto a la calidad estructural como a la funcional del software, la medición de esta última se realiza esencialmente a través de pruebas de software . [59] Las pruebas no son suficientes: según un estudio, "los programadores individuales tienen una eficiencia inferior al 50% a la hora de encontrar errores en su propio software. Y la mayoría de las formas de prueba tienen una eficiencia de sólo el 35%. Esto dificulta determinar la calidad [del software]". [60]
Introducción
Relación entre las características deseables del software (derecha) y los atributos mensurables (izquierda)
La medición de la calidad del software consiste en cuantificar en qué medida un sistema o software posee características deseables. Esto se puede realizar a través de medios cualitativos o cuantitativos o una combinación de ambos. En ambos casos, para cada característica deseable, existe un conjunto de atributos mensurables cuya existencia en un software o sistema tiende a estar correlacionada y asociada con esa característica. Por ejemplo, un atributo asociado con la portabilidad es la cantidad de declaraciones dependientes del objetivo en un programa. Más precisamente, utilizando el enfoque de implementación de la función de calidad , estos atributos mensurables son los "cómo" que se deben aplicar para permitir los "qué" en la definición de calidad del software anterior.
La estructura, clasificación y terminología de los atributos y métricas aplicables a la gestión de la calidad del software se han derivado o extraído de la norma ISO 9126-3 y del posterior modelo de calidad ISO/IEC 25000:2005. El enfoque principal se centra en la calidad estructural interna. Se han creado subcategorías para gestionar áreas específicas como la arquitectura de aplicaciones empresariales y características técnicas como el acceso y la manipulación de datos o la noción de transacciones.
El árbol de dependencia entre las características de calidad del software y sus atributos medibles se representa en el diagrama de la derecha, donde cada una de las 5 características que importan para el usuario (derecha) o propietario del sistema empresarial depende de atributos medibles (izquierda):
Prácticas de arquitectura de aplicaciones
Prácticas de codificación
Complejidad de la aplicación
Documentación
Portabilidad
Volumen Técnico y Funcional
Las correlaciones entre los errores de programación y los defectos de producción revelan que los errores básicos de código representan el 92 por ciento de los errores totales en el código fuente. Estos numerosos problemas a nivel de código representan, en última instancia, solo el 10 por ciento de los defectos en producción. Las malas prácticas de ingeniería de software a nivel de arquitectura representan solo el 8 por ciento de los defectos totales, pero consumen más de la mitad del esfuerzo dedicado a solucionar los problemas y conducen al 90 por ciento de los problemas graves de confiabilidad, seguridad y eficiencia en producción. [61] [62]
Análisis basado en código
Muchas de las medidas de software existentes cuentan elementos estructurales de la aplicación que resultan del análisis del código fuente en busca de instrucciones individuales [63], tokens [64], estructuras de control ( Complejidad ) y objetos. [65]
La medición de la calidad del software consiste en cuantificar hasta qué punto un sistema o software se clasifica en función de estas dimensiones. El análisis se puede realizar utilizando un enfoque cualitativo o cuantitativo o una combinación de ambos para proporcionar una visión global [utilizando, por ejemplo, promedios ponderados que reflejen la importancia relativa entre los factores que se miden].
Esta visión de la calidad del software en un continuo lineal debe complementarse con la identificación de errores críticos de programación discretos. Estas vulnerabilidades pueden no fallar en un caso de prueba, pero son el resultado de malas prácticas que, en circunstancias específicas, pueden provocar interrupciones catastróficas, degradaciones del rendimiento, brechas de seguridad, datos corruptos y una miríada de otros problemas [66] que hacen que un sistema determinado sea de facto inadecuado para su uso, independientemente de su calificación basada en mediciones agregadas. Un ejemplo bien conocido de vulnerabilidad es la Enumeración de debilidades comunes [67] , un repositorio de vulnerabilidades en el código fuente que exponen las aplicaciones a brechas de seguridad.
La medición de las características críticas de la aplicación implica la medición de los atributos estructurales de la arquitectura, la codificación y la documentación en línea de la aplicación, como se muestra en la imagen anterior. Por lo tanto, cada característica se ve afectada por atributos en numerosos niveles de abstracción en la aplicación y todos los cuales deben incluirse en el cálculo de la medida de la característica si se pretende que sea un predictor valioso de los resultados de calidad que afectan al negocio. El enfoque en capas para calcular las medidas de las características que se muestra en la figura anterior fue propuesto por primera vez por Boehm y sus colegas en TRW (Boehm, 1978) [68] y es el enfoque adoptado en las normas de las series ISO 9126 y 25000. Estos atributos se pueden medir a partir de los resultados analizados de un análisis estático del código fuente de la aplicación. Incluso las características dinámicas de las aplicaciones, como la fiabilidad y la eficiencia del rendimiento, tienen sus raíces causales en la estructura estática de la aplicación.
El análisis y la medición de la calidad estructural se realizan a través del análisis del código fuente , la arquitectura , el marco de software y el esquema de la base de datos en relación con los principios y estándares que, en conjunto, definen la arquitectura conceptual y lógica de un sistema. Esto es distinto del análisis de código básico, local y a nivel de componentes que suelen realizar las herramientas de desarrollo , que se ocupan principalmente de consideraciones de implementación y son cruciales durante las actividades de depuración y prueba .
Fiabilidad
Las causas fundamentales de la baja confiabilidad se encuentran en una combinación de incumplimiento de las buenas prácticas arquitectónicas y de codificación. Este incumplimiento se puede detectar midiendo los atributos de calidad estáticos de una aplicación. La evaluación de los atributos estáticos subyacentes a la confiabilidad de una aplicación proporciona una estimación del nivel de riesgo comercial y la probabilidad de posibles fallas y defectos que la aplicación experimentará cuando se ponga en funcionamiento.
Para evaluar la confiabilidad es necesario comprobar al menos las siguientes prácticas recomendadas de ingeniería de software y atributos técnicos:
Prácticas de arquitectura de aplicaciones
Prácticas de codificación
Complejidad de los algoritmos
Complejidad de las prácticas de programación
Cumplimiento de las mejores prácticas de programación estructurada y orientada a objetos (cuando corresponda)
Relación de reutilización de componentes o patrones
Programación sucia
Manejo de errores y excepciones (para todas las capas: GUI, lógica y datos)
Cumplimiento de diseño multicapa
Gestión de límites de recursos
El software evita patrones que conducirán a comportamientos inesperados
El software gestiona la integridad y la consistencia de los datos
Nivel de complejidad de la transacción
Dependiendo de la arquitectura de la aplicación y los componentes de terceros utilizados (como bibliotecas o marcos externos), se deben definir verificaciones personalizadas siguiendo las líneas trazadas en la lista anterior de mejores prácticas para garantizar una mejor evaluación de la confiabilidad del software entregado.
Eficiencia
Al igual que con la confiabilidad, las causas de la ineficiencia del rendimiento suelen encontrarse en violaciones de las buenas prácticas arquitectónicas y de codificación, que pueden detectarse midiendo los atributos de calidad estáticos de una aplicación. Estos atributos estáticos predicen posibles cuellos de botella en el rendimiento operativo y futuros problemas de escalabilidad, especialmente para aplicaciones que requieren una alta velocidad de ejecución para manejar algoritmos complejos o grandes volúmenes de datos.
Para evaluar la eficiencia del rendimiento es necesario comprobar al menos las siguientes prácticas recomendadas de ingeniería de software y atributos técnicos:
Prácticas de arquitectura de aplicaciones
Interacciones apropiadas con recursos costosos y/o remotos
Rendimiento del acceso a los datos y gestión de datos
La calidad del software incluye la seguridad del software . [70] Muchas vulnerabilidades de seguridad son resultado de prácticas de codificación y arquitectura deficientes, como la inyección SQL o los scripts entre sitios. [71] [72] Estas vulnerabilidades están bien documentadas en listas mantenidas por CWE, [73] y el SEI/Computer Emergency Center (CERT) en la Universidad Carnegie Mellon. [69]
Para evaluar la seguridad es necesario comprobar al menos las siguientes prácticas recomendadas de ingeniería de software y atributos técnicos:
Implementación, gestión de un proceso de desarrollo consciente y reforzado de la seguridad, por ejemplo, Security Development Lifecycle (Microsoft) o Secure Engineering Framework de IBM. [74]
Prácticas de arquitectura de aplicaciones seguras [75] [76]
Cumplimiento de diseño multicapa
Mejores prácticas de seguridad (validación de entrada, inyección SQL, secuencias de comandos entre sitios, control de acceso, etc.) [77] [78]
Prácticas de programación seguras y buenas [69]
Manejo de errores y excepciones
Mantenibilidad
La mantenibilidad incluye conceptos de modularidad, comprensibilidad, modificabilidad, capacidad de prueba, reutilización y transferibilidad de un equipo de desarrollo a otro. Estos no toman la forma de problemas críticos a nivel de código. Más bien, la mala mantenibilidad es típicamente el resultado de miles de infracciones menores con las mejores prácticas en documentación, estrategia para evitar la complejidad y prácticas básicas de programación que marcan la diferencia entre código limpio y fácil de leer y código desorganizado y difícil de leer. [79]
Para evaluar la mantenibilidad es necesario comprobar las siguientes prácticas recomendadas de ingeniería de software y atributos técnicos:
Prácticas de arquitectura de aplicaciones
Documentación de arquitectura, programas y código incrustado en el código fuente
Limpieza de la organización de archivos de código fuente
La mantenibilidad está estrechamente relacionada con el concepto de deuda técnica de Ward Cunningham , que es una expresión de los costos resultantes de la falta de mantenibilidad. Las razones por las que la mantenibilidad es baja se pueden clasificar como imprudentes vs. prudentes y deliberadas vs. inadvertidas, [80] [81] y a menudo tienen su origen en la incapacidad de los desarrolladores, la falta de tiempo y objetivos, su descuido y las discrepancias en el costo de creación y los beneficios de la documentación y, en particular, el código fuente mantenible . [82]
Tamaño
Para medir el tamaño del software es necesario recopilar correctamente todo el código fuente, incluidos los scripts de estructura de la base de datos, el código fuente de manipulación de datos, los encabezados de los componentes, los archivos de configuración, etc. Básicamente, existen dos tipos de tamaños de software que se deben medir: el tamaño técnico (huella) y el tamaño funcional:
Existen varios métodos de dimensionamiento técnico de software que se han descrito ampliamente. El método de dimensionamiento técnico más común es el número de líneas de código (#LOC) por tecnología, número de archivos, funciones, clases, tablas, etc., a partir de los cuales se pueden calcular los puntos de función que generan errores.
El método más común para medir el tamaño funcional es el análisis de puntos de función . El análisis de puntos de función mide el tamaño del software entregable desde la perspectiva de un usuario. El dimensionamiento de los puntos de función se realiza en función de los requisitos del usuario y proporciona una representación precisa tanto del tamaño para el desarrollador/calculador como del valor (funcionalidad a entregar) y refleja la funcionalidad empresarial que se entrega al cliente. El método incluye la identificación y ponderación de entradas, salidas y almacenes de datos reconocibles por el usuario. El valor del tamaño está entonces disponible para su uso junto con numerosas medidas para cuantificar y evaluar la entrega y el rendimiento del software (costo de desarrollo por punto de función; defectos entregados por punto de función; puntos de función por mes de personal).
El estándar de dimensionamiento del análisis de puntos de función cuenta con el respaldo del Grupo Internacional de Usuarios de Puntos de Función ( IFPUG ). Se puede aplicar en las primeras etapas del ciclo de vida del desarrollo de software y no depende de líneas de código como el método Backfiring, que es un tanto impreciso. El método es independiente de la tecnología y se puede utilizar para realizar análisis comparativos entre organizaciones y sectores.
Desde el inicio del análisis de puntos de función, han surgido diversas variantes y la familia de técnicas de dimensionamiento funcional se ha ampliado para incluir medidas de dimensionamiento como COSMIC, NESMA, puntos de caso de uso, FP Lite, FP rápidos y tempranos y, más recientemente, Story Points. El punto de función tiene un historial de precisión estadística y se ha utilizado como una unidad común de medición del trabajo en numerosos proyectos de gestión de desarrollo de aplicaciones (ADM) o de subcontratación, y actúa como la "moneda" con la que se prestan los servicios y se mide el rendimiento.
Una limitación común de la metodología de puntos de función es que se trata de un proceso manual y, por lo tanto, puede requerir mucha mano de obra y ser costoso en iniciativas de gran escala, como el desarrollo de aplicaciones o los contratos de subcontratación. Este aspecto negativo de la aplicación de la metodología puede ser lo que motivó a los líderes de TI de la industria a formar el Consorcio para la Calidad del Software de TI, centrado en la introducción de un estándar de métricas computables para automatizar la medición del tamaño del software, mientras que el IFPUG sigue promoviendo un enfoque manual, ya que la mayor parte de su actividad se basa en certificaciones de contadores de puntos de función.
CISQ define el dimensionamiento como una estimación del tamaño del software para respaldar la estimación de costos, el seguimiento del progreso u otras actividades relacionadas con la gestión de proyectos de software. Se utilizan dos estándares: puntos de función automatizados para medir el tamaño funcional del software y puntos de mejora automatizados para medir el tamaño del código funcional y no funcional en una sola medida. [83]
Identificación de errores críticos de programación
Los errores críticos de programación son malas prácticas arquitectónicas y/o de codificación específicas que resultan en el mayor riesgo de interrupción del negocio, inmediato o a largo plazo. [84]
Estos suelen estar relacionados con la tecnología y dependen en gran medida del contexto, los objetivos comerciales y los riesgos. Algunos pueden considerar que es fundamental respetar las convenciones de nomenclatura, mientras que otros (por ejemplo, quienes preparan el terreno para una transferencia de conocimientos) lo considerarán absolutamente fundamental.
Los errores críticos de programación también se pueden clasificar según las características de CISQ. A continuación se muestra un ejemplo básico:
Fiabilidad
Evite patrones de software que conduzcan a un comportamiento inesperado ( variable no inicializada , punteros nulos, etc.)
Los métodos, procedimientos y funciones que realizan operaciones de inserción, actualización, eliminación, creación de tabla o selección deben incluir la gestión de errores.
Las funciones multiproceso deben ser seguras para subprocesos, por ejemplo, los servlets o las clases de acción de struts no deben tener campos estáticos de instancia o no finales.
Eficiencia
Garantizar la centralización de las solicitudes de los clientes (entrantes y de datos) para reducir el tráfico de la red
Evite las consultas SQL que no utilizan un índice en tablas grandes en un bucle
Seguridad
Evite campos en clases de servlet que no sean estáticos finales
Evite el acceso a los datos sin incluir la gestión de errores
Verifique los códigos de retorno de control e implemente mecanismos de manejo de errores
Asegúrese de la validación de entrada para evitar fallas de secuencias de comandos entre sitios o fallas de inyección SQL
Mantenibilidad
Se deben evitar los árboles de herencia profundos y la anidación para mejorar la comprensión.
Los módulos deben estar acoplados de forma flexible (fanout, intermediarios) para evitar la propagación de modificaciones.
Aplicar convenciones de nombres homogéneas
Modelos de calidad operacionalizados
Las propuestas más recientes de modelos de calidad, como las de Squale y Quamoco [85], promueven una integración directa de la definición de atributos de calidad y su medición. Al desglosar los atributos de calidad o incluso definir capas adicionales, los atributos de calidad complejos y abstractos (como la confiabilidad o la facilidad de mantenimiento) se vuelven más manejables y medibles. Esos modelos de calidad se han aplicado en contextos industriales, pero no han recibido una adopción generalizada.
Asociación de Gestores Marítimos de Tecnologías de la Información y las Comunicaciones (AMMITEC). Directrices de calidad del software marítimo. Septiembre de 2017
Capers Jones y Olivier Bonsignour, "La economía de la calidad del software", Addison-Wesley Professional, 1.ª edición, 31 de diciembre de 2011, ISBN 978-0-13-258220-9
CAT Lab - Laboratorio de herramientas de análisis de código del CNES (en GitHub)
Girish Suryanarayana, Proceso de software versus calidad de diseño: ¿un tira y afloja? [86]
Ho-Won Jung, Seung-Gweon Kim y Chang-Sin Chung. Medición de la calidad de los productos de software: un estudio de la norma ISO/IEC 9126. IEEE Software , 21(5):10–13, septiembre/octubre de 2004.
Organización Internacional de Normalización. Ingeniería de software: calidad del producto. Parte 1: Modelo de calidad . ISO, Ginebra, Suiza, 2001. ISO/IEC 9126-1:2001(E).
Medición de la calidad de los productos de software: la serie ISO 25000 y CMMI (sitio SEI)
MSQF: un marco de calidad del software basado en mediciones Biblioteca de la Universidad de Cornell
Omar Alshathry, Helge Janicke, "Optimización del aseguramiento de la calidad del software", compsacw, págs. 87–92, Talleres de la 34.ª Conferencia Anual sobre Aplicaciones y Software Informático del IEEE, 2010.
Robert L. Glass. Software de calidad de la construcción . Prentice Hall, Upper Saddle River, Nueva Jersey, 1992.
Roland Petrasch, "La definición de 'calidad del software': un enfoque práctico", ISSRE, 1999
Spinellis, Diomidis (4 de abril de 2006). Calidad del código: la perspectiva del código abierto. Upper Saddle River, Nueva Jersey, EE. UU.: Addison-Wesley Professional. ISBN 978-0-321-16607-4.
Stephen H. Kan. Métricas y modelos en ingeniería de calidad de software . Addison-Wesley, Boston, MA, segunda edición, 2002.
Stefan Wagner. Control de calidad de productos de software. Springer, 2013.
Referencias
Notas
^ "Aprendiendo de la historia: El caso de la Ingeniería de Requisitos de Software – Revista de Ingeniería de Requisitos". Aprendiendo de la historia: El caso de la Ingeniería de Requisitos de Software – Revista de Ingeniería de Requisitos . Consultado el 25 de febrero de 2021 .
^ Pressman, Roger S. (2005). Ingeniería de software: un enfoque práctico (sexta edición internacional). McGraw-Hill Education. pág. 388. ISBN0071267824.
^ "Acerca de la especificación de medidas de calidad del código fuente automatizadas versión 1.0". www.omg.org . Consultado el 25 de febrero de 2021 .
^ "Cómo realizar pruebas de extremo a extremo". smartbear.com . Consultado el 25 de febrero de 2021 .
^ "Cómo ofrecer sistemas de TI resilientes, seguros, eficientes y fáciles de modificar de acuerdo con las recomendaciones de CISQ" (PDF) . Archivado (PDF) desde el original el 28 de diciembre de 2013 . Consultado el 18 de octubre de 2013 .
^ Fundamentos de la arquitectura de software: un enfoque de ingeniería . O'Reilly Media. 2020. ISBN978-1492043454.
^ "ISO/IEC 25010:2011". ISO . Consultado el 23 de febrero de 2021 .
^ Armour, Phillip G. (1 de junio de 2012). "Una medida de control". Comunicaciones de la ACM . 55 (6): 26–28. doi :10.1145/2184319.2184329. ISSN 0001-0782. S2CID 6059054.
^ Voas, J. (noviembre de 2011). "La salsa secreta del software: las "-ilidades" [calidad del software]". IEEE Software . 21 (6): 14–15. doi :10.1109/MS.2004.54. ISSN 1937-4194.
^ "Estándares de calidad del código | CISQ - Consorcio para la calidad de la información y el software". www.it-cisq.org . Consultado el 25 de febrero de 2021 .
^ "Estándares de dimensionamiento de software | CISQ - Consorcio para la información y la calidad del software". www.it-cisq.org . Consultado el 25 de febrero de 2021 .
^ J. Bohnet, J. Döllner Archivado el 27 de abril de 2014 en Wayback Machine , "Monitoreo de la calidad del código y la actividad de desarrollo mediante mapas de software". Actas del taller IEEE ACM ICSE sobre gestión de la deuda técnica, págs. 9-16, 2011.
^ "IIA - Guía de auditoría tecnológica global: Gestión de cambios en TI: fundamental para el éxito organizacional". na.theiia.org . Consultado el 26 de febrero de 2021 .
^ Boursier, Jérôme (11 de enero de 2018). «Consecuencias de Meltdown y Spectre: persisten los problemas de parcheo». Malwarebytes Labs . Consultado el 26 de febrero de 2021 .
^ "Mejores prácticas para actualizaciones de software - Configuration Manager". docs.microsoft.com . Consultado el 26 de febrero de 2021 .
^ Wright, Hyrum K. (25 de agosto de 2009). "Procesos, modelos y métricas de ingeniería de versiones". Actas del simposio doctoral de ESEC/FSE en Simposio doctoral . Simposio doctoral ESEC/FSE '09. Ámsterdam, Países Bajos: Association for Computing Machinery. págs. 27–28. doi :10.1145/1595782.1595793. ISBN978-1-60558-731-8. Número de identificación del sujeto 10483918.
^ van der Hoek, André; Hall, Richard S.; Heimbigner, Dennis; Wolf, Alexander L. (noviembre de 1997). "Gestión de lanzamientos de software". Notas de ingeniería de software de ACM SIGSOFT . 22 (6): 159-175. doi : 10.1145/267896.267909 . ISSN 0163-5948.
^ Sutton, Mike; Moore, Tym (30 de julio de 2008). "7 formas de mejorar la gestión de lanzamiento de software". CIO . Consultado el 26 de febrero de 2021 .
^ Clark, Mitchell (24 de febrero de 2021). "iRobot dice que pasarán algunas semanas hasta que pueda solucionar el problema de la última actualización del software de Roomba". The Verge . Consultado el 25 de febrero de 2021 .
^ "Los 25 errores de software más comunes". www.sans.org . Consultado el 25 de febrero de 2021 .
^ "'Apagarlo y encenderlo de nuevo cada 149 horas' es una solución preocupante para el error de software de un avión Airbus de 300 millones de dólares". Gizmodo . 30 de julio de 2019 . Consultado el 25 de febrero de 2021 .
^ "MISRA C, Toyota y la muerte de la Tarea X" . Consultado el 25 de febrero de 2021 .
^ "Actualización sobre Toyota y la aceleración involuntaria «Barr Code». embryogurus.com . Consultado el 25 de febrero de 2021 .
^ Dispositivos médicos: Therac-25* Archivado el 16 de febrero de 2008 en Wayback Machine , Nancy Leveson, Universidad de Washington
^ Software integrado Archivado el 5 de julio de 2010 en Wayback Machine , Edward A. Lee, Para aparecer en Advances in Computers ( Marvin Victor Zelkowitz , editor), Vol. 56, Academic Press, Londres, 2002, Revisado a partir del Memorando UCB ERL M01/26 Universidad de California, Berkeley, CA 94720, EE. UU., 1 de noviembre de 2001
^ "Software de certificación de aeronaves y hardware electrónico de a bordo". Archivado desde el original el 4 de octubre de 2014 . Consultado el 28 de septiembre de 2014 .
^ "El costo de la mala calidad del software en los EE. UU.: un informe de 2020 | CISQ - Consorcio para la información y la calidad del software". www.it-cisq.org . Consultado el 25 de febrero de 2021 .
^ "¿Qué es el desperdicio? | Agile Alliance". Agile Alliance | . 20 de abril de 2016 . Consultado el 25 de febrero de 2021 .
^ Matteson, Scott (26 de enero de 2018). "Informe: una falla de software causó pérdidas financieras por 1,7 billones de dólares en 2017". TechRepublic . Consultado el 25 de febrero de 2021 .
^ Cohane, Ryan (16 de noviembre de 2017). "Costo financiero de los errores de software". Medium . Consultado el 25 de febrero de 2021 .
^ Eloff, Jan; Bella, Madeleine Bihina (2018), "Fallas de software: una descripción general", Investigación de fallas de software , Cham: Springer International Publishing, págs. 7–24, doi :10.1007/978-3-319-61334-5_2, ISBN978-3-319-61333-8, consultado el 25 de febrero de 2021
^ "La mala calidad del software le costó a las empresas 2 billones de dólares el año pasado y puso en riesgo la seguridad". CIO Dive . Consultado el 26 de febrero de 2021 .
^ "Investigación CISQ patrocinada por Synopsys estima el costo de la mala calidad del software en los EE. UU. en 2,08 billones de dólares en 2020". finance.yahoo.com . Consultado el 26 de febrero de 2021 .
^ "¿Cuánto cuesta una filtración de datos en 2020?". Digital Guardian . 2020-08-06 . Consultado el 2021-03-08 .
^ "Informe sobre el costo de una filtración de datos 2020 | IBM". www.ibm.com . 2020 . Consultado el 8 de marzo de 2021 .
^ "ISO - Familia ISO 9000 - Gestión de la calidad". ISO . Consultado el 24 de febrero de 2021 .
^ "ISO/IEC/IEEE 24765:2017". ISO . Consultado el 24 de febrero de 2021 .
^ ab "Dominar el software automotriz". www.mckinsey.com . Consultado el 25 de febrero de 2021 .
^ "ISO/IEC 25010:2011". ISO . Consultado el 24 de febrero de 2021 .
^ Wallace, DR (2002). "Modelado práctico de confiabilidad de software". Actas del 26.º Taller anual de ingeniería de software Goddard de la NASA . Greenbelt, MD, EE. UU.: IEEE Comput. Soc. pp. 147–155. doi :10.1109/SEW.2001.992668. ISBN978-0-7695-1456-7. Número de identificación del sujeto 57382117.
^ "ISO/IEC 25023:2016". ISO . Consultado el 6 de noviembre de 2023 .
^ "¿Qué es la calidad del software? | ASQ". asq.org . Consultado el 24 de febrero de 2021 .
^ "Página principal del proyecto SAMATE - Software Assurance Metrics And Tool Evaluation". NIST . 3 de febrero de 2021 . Consultado el 26 de febrero de 2021 .
^ Extensión de software para la guía PMBOK. Project Management Institute (5.ª ed.). Newtown Square, Pensilvania. 2013. ISBN978-1-62825-041-1.OCLC 959513383 .{{cite book}}: CS1 maint: falta la ubicación del editor ( enlace ) CS1 maint: otros ( enlace )
^ Shewart, Walter A. (2015). Control económico de la calidad de productos manufacturados. [Lugar de publicación no identificado]: Martino Fine Books. ISBN978-1-61427-811-5.OCLC 1108913766 .
^ Kitchenham, B. ; Pfleeger, SL (enero de 1996). "Calidad del software: el objetivo elusivo [sección de números especiales]". IEEE Software . 13 (1): 12–21. doi :10.1109/52.476281. ISSN 1937-4194.
^ Garvin, David A. (1988). Gestión de la calidad: la ventaja estratégica y competitiva. Nueva York: Free Press. ISBN0-02-911380-6.OCLC 16005388 .
^ ab B. Kitchenham y S. Pfleeger, "Calidad del software: el objetivo elusivo", IEEE Software, vol. 13, núm. 1, págs. 12–21, 1996.
^ Kan, Stephen H. (2003). Métricas y modelos en ingeniería de calidad de software (2.ª ed.). Boston: Addison-Wesley. ISBN0-201-72915-6.OCLC 50149641 .
^ Organización Internacional de Normalización, "ISO/IEC 9001: Sistemas de gestión de calidad -- Requisitos", 1999.
^ WE Deming, "Salir de la crisis: calidad, productividad y posición competitiva". Cambridge University Press, 1988.
^ AV Feigenbaum, "Control de calidad total", McGraw-Hill, 1983.
^ JM Juran, "Manual de control de calidad de Juran", McGraw-Hill, 1988.
^ Weinberg, Gerald M. (1991). Gestión de software de calidad: Volumen 1, Pensamiento sistémico. Nueva York, NY: Dorset House. ISBN0-932633-22-6.OCLC 23870230 .
^ Weinberg, Gerald M. (1993). Gestión de software de calidad: Volumen 2, Medición de primer orden. Nueva York, NY: Dorset House. ISBN0-932633-22-6.OCLC 23870230 .
^ Crosby, P., La calidad es gratuita , McGraw-Hill, 1979
^ "SUP.9 – Gestión de resolución de problemas - Kugler Maag Cie". www.kuglermaag.com . Consultado el 25 de febrero de 2021 .
^ ab Hoipt (2019-11-29). "Las organizaciones suelen utilizar los términos 'garantía de calidad' (QA) frente a 'control de calidad' (QC)…". Medium . Consultado el 25 de febrero de 2021 .
^ Wallace, D.; Watson, AH; Mccabe, TJ (1 de agosto de 1996). "Pruebas estructuradas: una metodología de pruebas que utiliza la métrica de complejidad ciclomática". NIST .
^ Bellairs, Richard. "¿Qué es la calidad del código? Y cómo mejorarla". Perforce Software . Consultado el 28 de febrero de 2021 .
^ "Libro blanco de OMG | CISQ - Consorcio para la calidad de la información y el software". www.it-cisq.org . Consultado el 26 de febrero de 2021 .
^ "Cómo ofrecer sistemas de TI resilientes, seguros, eficientes y ágiles en línea con las recomendaciones de CISQ - Documento técnico | Object Management Group" (PDF) . Archivado (PDF) desde el original el 28 de diciembre de 2013 . Consultado el 18 de octubre de 2013 .
^ "Medición del tamaño del software: un marco para contar las declaraciones de origen". resources.sei.cmu.edu . 31 de agosto de 1992 . Consultado el 24 de febrero de 2021 .
^ Halstead, Maurice H. (1977). Elementos de la ciencia del software (serie sobre sistemas operativos y de programación). EE. UU.: Elsevier Science Inc. ISBN978-0-444-00205-1.
^ Chidamber, SR; Kemerer, CF (junio de 1994). "Un conjunto de métricas para el diseño orientado a objetos". IEEE Transactions on Software Engineering . 20 (6): 476–493. doi :10.1109/32.295895. hdl : 1721.1/48424 . ISSN 1939-3520. S2CID 9493847.
^ Nygard, Michael (2007). Release It!, un safari de O'Reilly Media Company (1.ª ed.). Pragmatic Bookshelf. ISBN978-0978739218.OCLC 1102387436 .
^ "CWE - Enumeración de debilidades comunes". cwe.mitre.org . Archivado desde el original el 10 de mayo de 2016. Consultado el 20 de mayo de 2016 .
^ Boehm, B., Brown, JR, Kaspar, H., Lipow, M., MacLeod, GJ y Merritt, MJ (1978). Características de la calidad del software. Holanda Septentrional.
^ abc "Estándares de codificación SEI CERT - Codificación segura CERT - Confluence". wiki.sei.cmu.edu . Consultado el 24 de febrero de 2021 .
^ "Calidad y seguridad del código: ¿cómo se relacionan? | Synopsys". Blog de integridad del software . 2019-05-24 . Consultado el 2021-03-09 .
^ "Informe sobre el costo de una filtración de datos 2020 | IBM". www.ibm.com . 2020 . Consultado el 9 de marzo de 2021 .
^ "Conclusiones clave del informe sobre el costo de una filtración de datos de 2020". Bluefin . 2020-08-27 . Consultado el 2021-03-09 .
^ "CWE - Enumeración de debilidades comunes". Cwe.mitre.org. Archivado desde el original el 14 de octubre de 2013. Consultado el 18 de octubre de 2013 .
^ Seguridad en el desarrollo: El marco de ingeniería segura de IBM | IBM Redbooks. 30 de septiembre de 2016.
^ Arquitectura de seguridad empresarial con soluciones de seguridad IBM Tivoli | IBM Redbooks. 30 de septiembre de 2016.
^ "Definiciones de diseño de arquitectura segura | CISA". us-cert.cisa.gov . Consultado el 9 de marzo de 2021 .
^ "Fundación OWASP | Fundación de código abierto para la seguridad de aplicaciones". owasp.org . Consultado el 24 de febrero de 2021 .
^ "Los 25 mejores de CWE". Sans.org . Consultado el 18 de octubre de 2013 .
^ IfSQ Nivel 2 Un estándar de nivel básico para el código fuente de programas informáticos Archivado el 27 de octubre de 2011 en Wayback Machine , segunda edición, agosto de 2008, Graham Bolton, Stuart Johnston, IfSQ, Instituto para la Calidad del Software.
^ Fowler, Martin (14 de octubre de 2009). «TechnicalDebtQuadrant». Archivado desde el original el 2 de febrero de 2013. Consultado el 4 de febrero de 2013 .
^ "Calidad del código: una preocupación para las empresas, los resultados y los programadores empáticos". Stack Overflow . 2021-10-18 . Consultado el 2023-12-05 .
^ Prause, Christian; Durdik, Zoya (3 de junio de 2012). "Diseño arquitectónico y documentación: ¿Desperdicio en el desarrollo ágil?". Conferencia internacional sobre software y procesos de sistemas (ICSSP) de 2012. IEEE Computer Society. págs. 130–134. doi :10.1109/ICSSP.2012.6225956. ISBN.978-1-4673-2352-9.S2CID15216552 .
^ "Estándares de dimensionamiento de software | CISQ - Consorcio para la información y la calidad del software". www.it-cisq.org . Consultado el 28 de enero de 2021 .
^ "Por qué falla el software". IEEE Spectrum: Noticias sobre tecnología, ingeniería y ciencia . 2 de septiembre de 2005. Consultado el 20 de marzo de 2021 .
^ Wagner, Stefan; Goeb, Andrés; Heinemann, Lars; Klas, Michael; Lampasona, Constanza; Lochmann, Klaus; Mayr, Aloïs; Plösch, Reinhold; Seidl, Andreas (2015). "Evaluación y modelos de calidad de productos operativos: el enfoque Quamoco" (PDF) . Tecnología de la información y software . 62 : 101-123. arXiv : 1611.09230 . doi :10.1016/j.infsof.2015.02.009. S2CID 10992384.
^ Suryanarayana, Girish (2015). "Proceso de software versus calidad de diseño: ¿un tira y afloja?". IEEE Software . 32 (4): 7–11. doi : 10.1109/MS.2015.87 . S2CID 9226051.
^ "Software Quality Professional | ASQ". asq.org . Consultado el 28 de enero de 2021 .
^ "Software Quality Journal". Springer . Consultado el 28 de enero de 2021 .
Bibliografía
Albrecht, AJ (1979), Medición de la productividad del desarrollo de aplicaciones. En Actas del Simposio conjunto SHARE/GUIDE IBM sobre desarrollo de aplicaciones. , IBM
Ben-Menachem, M.; Marliss, GS (1997), Calidad del software: producción de software práctico y consistente , Thomson Computer Press
Boehm, B.; Brown, JR; Kaspar, H.; Lipow, M.; MacLeod, GJ; Merritt, MJ (1978), Características de la calidad del software , Holanda Septentrional.
Chidamber, S.; Kemerer, C. (1994), Un conjunto de métricas para el diseño orientado a objetos. IEEE Transactions on Software Engineering, 20 (6) , págs. 476–493
Ebert, Christof; Dumke, Reiner, Medición de software: establecer - extraer - evaluar - ejecutar , Kindle Edition, p. 91
Garmus, D.; Herron, D. (2001), Análisis de puntos de función , Addison Wesley
Halstead, ME (1977), Elementos de la ciencia del software , Elsevier North-Holland
Hamill, M.; Goseva-Popstojanova, K. (2009), Fallos comunes en los datos de fallas y errores de software. IEEE Transactions of Software Engineering, 35 (4) , págs. 484–496
Jackson, DJ (2009), Un camino directo hacia un software confiable. Comunicaciones de la ACM, 52 (4).
Martin, R. (2001), Gestión de vulnerabilidades en sistemas en red , IEEE Computer.
McCabe, T. (diciembre de 1976), Una medida de complejidad. IEEE Transactions on Software Engineering
McConnell, Steve (1993), Código completo (Primera edición), Microsoft Press
Nygard, MT (2007), Release It! Diseñe e implemente software listo para producción , The Pragmatic Programmers.
Park, RE (1992), Medición del tamaño del software: un marco para contar las declaraciones de origen. (CMU/SEI-92-TR-020). Instituto de Ingeniería de Software, Universidad Carnegie Mellon
Pressman, Roger S. (2005). Ingeniería de software: un enfoque práctico (sexta edición internacional). McGraw-Hill Education. ISBN 0071267824.
Spinellis, D. (2006), Calidad del código , Addison Wesley
Enlaces externos
Wikimedia Commons tiene medios relacionados con Calidad del software .
Cuando el código es el rey: cómo dominar la excelencia en el software automotriz (McKinsey, 2021)
Calidad del software de sistemas integrados: ¿por qué es tan a menudo terrible? ¿Qué podemos hacer al respecto? (por Philip Koopman)
Estándares de calidad de código de CISQ ™
Blog del CISQ: https://blog.it-cisq.org
Guía para el aseguramiento de la calidad del software (ESA)
Guía para la aplicación de los estándares de ingeniería de software de la ESA a pequeños proyectos de software (ESA)
Descripción general de los servicios de garantía de productos de software de la ESA (NASA/ESA)
Nuestro enfoque de calidad en Volkswagen Software Dev Center Lisboa
Guías de estilo de Google
Garantizar la calidad de los productos en Google (2011)
Garantía de software de la NASA
Grupo de calidad de software del NIST
Puntos de función automatizados OMG/CISQ (ISO/IEC 19515)
Estándar de deuda técnica automatizada OMG
Garantía de calidad automatizada (artículo publicado en IREB por Harry Sneed)
Pruebas estructuradas: una metodología de pruebas que utiliza la métrica de complejidad ciclomática (1996)
Análisis de la calidad de las aplicaciones mediante herramientas de análisis de código (Microsoft, Documentación, Visual Studio, 2016)