Post on 13-Dec-2015
description
ASEGURAMIENTO DE CALIDAD DE SOFTWARE Y TECNICAS ASOCIADAS
Las actividades para la garantía de calidad (QA) garantizan que pocos, o ningún defecto en el
sistema de software exista cuando se entregue a sus clientes o se lance al mercado. Además,
queremos asegurarnos de que estos defectos restantes causarán daños o interrupciones
mínimas.
ACTIVIDADES DE CONTROL DE CALIDAD
Podemos ver diferentes actividades de control de calidad como intentar prevenir, eliminar,
reducir o contener diversos problemas específicos con diferentes aspectos de defectos.
Podemos clasificar estas alternativas de control de calidad en las siguientes tres categorías
genéricas:
Defecto de prevención a través de error de bloqueo o eliminación de código de error: Dado
que los errores son las acciones humanas falte o sea incorrectas que conducen a la inyección
de fallas en los sistemas de software, podemos directamente corregir o bloquear estas
acciones o eliminar las causas subyacentes para ellos. Por lo tanto, prevención de defecto
puede hacerse de dos maneras genéricos:
Eliminar ciertas fuentes de error, tales como eliminar ambigüedades o corregir errores
humanos, que son la raíz causas de los errores.
Bloquear estas acciones humanas faltantes o son incorrectas. Este grupo de técnicas
rompe a la relación causal entre las fuentes de errores y fallas mediante el uso de
algunas herramientas y tecnologías, aplicación de ciertas normas de proceso y
producto.
Detección de fallas y eliminación: QA estas alternativas detectar y eliminar ciertas fallas, una
vez que han sido inyectados en los sistemas de software. De hecho, las actividades de control
de calidad más tradicionales entran en esta categoría. Por ejemplo,
Inspección directa detecta y elimina los errores del código de software, diseño, etc.
Eliminar errores basados en observaciones de error relacionados durante la ejecución
del programa.
Contención de defecto por incumplimiento de prevención y contención: estas medidas de
contención se centran en los fracasos que los contengan áreas locales por lo que no hay
errores observables de forma global para los usuarios, o limitar los daños causados por fallas
en el sistema software. Por lo tanto, contención de defecto puede hacerse de dos maneras
genéricos:
Algunas alternativas de control de calidad, tales como el uso de técnicas de tolerancia
a fallos, rompen a la relación causal entre fallas y errores para que fallas locales no
causará fallas globales, por lo tanto "tolerar" esas fallas locales.
Una extensión relacionada con tolerancia a errores de medidas de contención para
evitar consecuencias catastróficas, como la muerte, lesiones personales y propiedad
grave o daños ambientales, en caso de fallas. Por ejemplo, contención de fracaso para
el software de control en tiempo real utilizado en reactores nucleares puede incluir
muros de hormigón que rodean y contienen material radiactivo de reactor de fusión
abajo debido a fallas de software, a fin de evitar daños al medio ambiente y la salud de
las personas.
Tratar con defectos de previo y posterior al lanzamiento
Diferentes alternativas de control de calidad pueden verse como un esfuerzo concertado para
hacer frente a errores, fallos o errores, a fin de lograr el objetivo común de calidad y mejora.
Prevención de defectos y las actividades de reducción de defecto tratan directamente con los
procesos durante el proceso de desarrollo de software.
Después del lanzamiento del producto, las fallas observadas y problemas notificados por los
clientes y los usuarios también deben corregirse, esto a su vez, podría conducir a la reducción
de defectos y generar un producto calidad. Sin embargo, no se debe renunciar a actividades de
prevención y reducción de defectos, porque el costo de corregir defectos después de lanzar el
producto es mucho mayor al producto en desarrollo. Además, el daño a la reputación de los
proveedores de software puede ser devastador.
Educación y formación
La educación y formación proporcionan soluciones basadas en el personal para la eliminación
de origen del error. Se ha observador que los profesionales de software son el factor más
importante que determina la calidad y, en última instancia, el éxito o el fracaso de la mayoría
de los proyectos de software. Educación y formación de profesionales de software pueden
ayudarles a controlar, administrar y mejorar su forma de trabajar. La eliminación de los errores
humanos ayudará a impedir que ciertos tipos de errores ingresen en el producto de software.
Conocimiento de producto y el dominio especifico. Si las personas involucradas no
están familiarizadas con el dominio de aplicación o tipo de producto, hay una buena
posibilidad de que se apliquen mal las soluciones. Por ejemplo, los desarrolladores
familiarizados con software integrado pueden diseñar software sin tener en cuenta sus
limitaciones ambientales, provocando a diversos problemas de la interfaz y la
interacción entre el software y su entorno físico.
Conocimiento en el desarrollo de software y experiencia, desempeña un papel
importante en el desarrollo de productos de software de alta calidad. Por ejemplo, la
falta de experiencia con la especificación de análisis y requisitos de producto
generalmente conduce a muchos problemas y afectan en posterior diseño,
codificación y pruebas de actividades.
Conocimientos sobre metodología, tecnología y herramientas de desarrollo también
desempeña un papel importante en el desarrollo de productos de software de alta
calidad. Por ejemplo, en una implementación de la tecnología de contorsionista (Mills
et al., 1987b), si los desarrolladores no están familiarizados con los componentes clave
de verificación formal o pruebas estadísticas, hay pocas posibilidades para la
producción de productos de alta calidad.
Conocimiento del proceso de desarrollo. Si el personal de proyectos no tienen un buen
conocimiento del proceso de desarrollo, es poco probable que el proceso pueda
aplicarse correctamente. Por ejemplo, si las personas involucradas en el desarrollo de
software incremental no saben cómo encajan los esfuerzos de desarrollo individuales
para los diferentes incrementos puede llevar a muchos problemas de interfaz o
interacción.
Método formal
Métodos formales proporcionan una forma para eliminar ciertas fuentes de error y para
comprobar la ausencia de fallos relacionados. Los métodos de desarrollo formal, incluyen la
especificación formal y verificación formal. Especificación formal se ocupa de producir un
conjunto claro de especificaciones del producto para los requerimientos del cliente, así como
las limitaciones ambientales e intenciones de diseño, estén correctamente reflejadas, lo que
reduce las posibilidades inserción de errores accidentales. Verificación formal comprueba la
conformidad de diseño de software o código contra estas especificaciones formales,
garantizando así que el software está libre de errores con respecto a sus especificaciones
formales.
El método oficial más antiguo y más influyente es el enfoque axiomático. En este
enfoque, el "significado" de un elemento de programa o la interpretación formal de los
efectos de su ejecución se resumieron en un axioma. Reglas y axiomas adicionales se
usan para conectar diferentes piezas. Un conjunto de condiciones formales que
describe el estado del programa antes de su ejecución llamado pre condiciones y el
conjunto después de la ejecución del programa llamados pos condiciones. Este
método comprueba que un determinado programa satisfacen las precondiciones y
postcondiciones
Otras técnicas de verificación formal influyentes incluyen la transformación de
predicados basado en ideas de condición más débiles (Dijkstra, 1975; Gries, 1987), y
cálculo de programa o enfoque funcional basado en funciones matemáticas y
ejecuciones simbólicas (Mills et al, 1987a). Las ideas básicas son similares al enfoque
axiomático, pero los procedimientos de pruebas son algo diferentes.
Varios otros limitado alcance o también existen técnicas semiformales, que
compruebe para determinadas propiedades en lugar de probar la corrección completa
de programas. Por ejemplo, técnicas control de modelo están ganando popularidad en
la comunidad de investigación de ingeniería de software (Ghezzi et al., 2003). Varios
métodos semiformales basados en formularios o tablas, como (Parnas y Madey, 1995),
en lugar de lógica formal o funciones matemáticas, han encontrado también
aplicaciones importantes.
Hasta ahora, el mayor obstáculo para métodos formales es el alto costo asociado con
la difícil tarea de llevar a cabo estas actividades intensivas humanas correctamente sin
suficiente apoyoautomatizado. Este hecho también explica, en un grado, la creciente
popularidad de alcance limitado y enfoques semiformales.