UNIDAD 2: ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE (SQA)


UNIDAD 2:
ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE (SQA)


2.1 Relación de la Ingeniería del software con SQA.

La concordancia con los requerimientos funcionales y de rendimiento explícitamente establecidos, con los estándares de desarrollo explícitamente documentados y con las características implícitas que se espera de todo software se define como:

Los requerimientos del software son los fundamentos desde los que se mide la calidad.

La falta de concordancia con los requerimientos es una falta de calidad.

Los estándares especificados definen un conjunto de criterios de desarrollo que guía la forma en se aplica la ingeniería del software; si no se siguen ciertos criterios, casi siempre se dará una falta de calidad.

Existe un conjunto de requerimiento implícitos (el deseo de buen mantenimiento). Si el software se ajusta a sus requerimientos pero falla en alcanzar los requerimientos implícitos del software queda en entre dicho.

La calidad del software es una compleja mezcla de ciertos factores que varían para las diferentes aplicaciones y los clientes que las solicitan.

La garantía de calidad es una actividad esencial en cualquier empresa que produce productos que van a ser usados por otros. Antes del siglo veinte, la garantía de calidad era responsabilidad única de la persona que construía el producto. La primera función de control y de garantía de calidad formal fue introducida por los laboratorios Bell en 1916 y se extendió rápidamente por todo el mundo de las manufacturas. Hoy en día, cada compañía tiene un mecanismo que asegura la calidad de sus productos de hecho, durante la pasada década, se han usado ampliamente como tácticas de mercado la declaración explícita de mensajes que ponían de manifiesto la calidad ofrecida por las compañías.

La historia de la garantía de calidad en el desarrollo de software ha sido paralela a la historia en la fabricación de hardware. Durante los primeros años de información (los 50 y los 60), la calidad era responsabilidad únicamente del programador.

La SQA forma parte de una función más amplia de garantía de calidad y engloba actividades que desbordan muchas disciplinas técnicas.
 El alcance de la responsabilidad de la garantía de calidad se puede garantizar de la mejorforma parafraseando un popular anuncio de automóviles " la calidad es el trabajo # 1". Lo que esto implica en el desarrollo de software es que la responsabilidad de la garantía de calidad del software corresponde a muchos constituyentes de una organización – Ingenieros de software, gestores del proyecto, clientes, comerciales y las personas que trabajan dentro del grupo de SQA.

El grupo de SQA sirve como representación del cliente dentro de la casa. O sea, la gente que lleva a cabo la SQA deba mirar el software desde el punto de vista del cliente ¿satisfacer de forma adecuada el software los factores de calidad?.
La garantía de calidad del software es la guía de preceptos de gestión y de las disciplinas de diseño de la garantía de calidad para el espacio tecnológico y la aplicación de la ingenieria de software. La capacidad de garantizar la calidad es la medida de la madurez de la disciplina de ingenieria . Al finalizar de seguir esa guía antes mencionada, lo que se obtiene es la madurez de la ingenieria de software. (documents, 2015)
 https://vdocuments.mx/21-relacion-de-la-ingenieria-del-software-con-sqa.html


2.2 DEFINICION Y PROPOSITO DEL SQA

La garantía de calidad del software (SQA, Software Quality Assurance) es una actividad de protección que se aplica a lo largo de todo el proceso del software.
El aseguramiento de la calidad del software (SQA) por Presman, R.S. (s.f.) “es el conjunto de actividades planificadas y sistemáticas necesarias para aportar
la confianza en que el producto (software) satisfará los
requisitos dados de calidad”.
• Aumenta las posibilidades de éxito del proyecto.
• Ayuda a definir los parámetros de medición de la calidad del software.
• Verifica que los estándares sean aplicados correctamente.
• Define un plan de monitoreo del proceso de desarrollo del software (ciclo de vida).
• Reducción de los tiempos de desarrollo, principalmente en el tiempo de trabajo


2.3 La SQA abarca Problemas que resuelve

Para controlar la calidad del software es necesario, ante todo, definir los parámetros, indicadores o criterios de medición. Otros autores identifican la calidad con el nivel de complejidad del software y definen dos categorías de métricas:
•Complejidad de programa o código
•Complejidad de sistema o estructura.
• Disminución del costo de mantenimiento, ya que se generan aplicaciones más seguras
• Aumento de la permeabilidad al cambio y facilidad para medir el impacto del mismo
• Asegurar el cumplimiento de los requerimientos
• Promueve el seguimiento de los estándares
• Provee información sobre la calidad del proyecto, los desarrollos se vuelven más predecibles.
la gestión de calidad, las tecnologías de la ingeniería del software que se pueden aplicar, revisiones técnicas formales, estrategias de prueba, el control de la documentación del software y de los cambios realizados, un procedimiento que asegure un ajuste a los estándares de desarrollo del software y mecanismos de medición.
 (https://prezi.com/u-hjtqgmps7f/definicion-y-proposito-sqa-problemas-que-resuleve-sqa/, 2012)

2.4 Calidad del software en el ciclo de vida del mismo.

El ciclo de vida básico de un software consta de los siguientes procedimientos:
Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.
Estos programas se originan en el hecho de que es MUY COSTOSO rectificar los errores que se detectan tarde dentro de la fase de implementación.
 Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.

Ciclo de vida del software
Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.
El propósito de este programa es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación y verificación de los procedimientos de desarrollo:
 se asegura de que los métodos utilizados son apropiados.

 Diseño general: requisitos generales de la arquitectura de la aplicación.
Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones. 
Diseño en detalle: definición precisa de cada subconjunto de la aplicación. 
Marco de referencia que contiene los procesos, las actividades y las tareas involucradas en el desarrollo, la explotación y el mantenimiento de un producto de software, abarcando la vida del sistema desde la definición de los requisitos hasta la finalización de su uso (norma ISO 12207-1) [ISO/IEC, 1995].

Modelo de ciclo de vida
Integración: para garantizar que los diferentes módulos se integren con la aplicación. Éste es el propósito de la prueba de integración que está cuidadosamente documentada.

Calidad del software en el ciclo de vida del mismo.
El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final.
 El ciclo de vida permite que los errores se detecten lo antes posible y por lo tanto, permite a los desarrolladores concentrarse en la calidad del software, en los plazos de implementación y en los costos asociados.

Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales. 
Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.

(2012)
 Resultado de imagen para ciclo de vida del software png

https://prezi.com/w7utaeaanzhy/calidad-del-software-en-el-ciclo-de-vida-del-mismo/

2.5 Roles y responsabilidades de los equipos de desarrollo

Un equipo de desarrollo puede ser una sola persona, o 50, pero en cualquier equipo existen una serie de roles(funciones), que pueden ser identificados. En un equipo pequeño, puede que una persona cubra múltiples roles, mientras que en equipos más grandes, es más común tener funciones dedicadas.

El Cliente
Se puede pensar que tratar al cliente como parte del equipo de desarrollo es extraño, pero en realidad, no lo es: El cliente es un factor importante en el éxito de un proyecto, tanto como cualquier otro miembro del equipo, por eso es importante contar con la participación activa del cliente dentro del proyecto.

También es importante entender quién es en realidad “El Cliente”. Tanto si se desarrolla software para clientes actuales, como si se desarrolla para uno mismo, o para la propia empresa u organización, siempre hay un rol de cliente. El cliente, es en esencia, quien pone en marcha el proyecto, paga las cuentas, o define el resultado final. Aun si no se tiene literalmente un “cliente”, es bueno entender que aun así existe un rol “cliente” en su proyecto.

El Analista
El analista es alguien que es responsable de entender las necesidades del cliente, y asegurarse de que la solución que está siendo desarrollada se ajusta a esas necesidades.

Las actividades típicas de un analista incluyen la elicitación de requisitos, reuniones con clientes y la redacción de especificaciones funcionales.

El Arquitecto de Software
El papel del arquitecto de software es traducir los requisitos, tal como se define por el analista, en una solución técnica. Él puede crear un diseño técnico, o simplemente algunos bocetos a mano alzada, de cómo el sistema va a estar estructurado. En cualquier caso, es la responsabilidad del arquitecto a pensar en el sistema antes de que se desarrolle. Si se hace bien, durante la fase de diseño que se abordarán correctamente todos los problemas que se enfrenten en el desarrollo de la solución.

El Arquitecto del Sistema
Al igual que el arquitecto de software, el Arquitecto del Sistema es responsable de pensar el sistema antes de construirlo. Asi como el  arquitecto de software es responsable para el software, un arquitecto del sistema es responsable del hardware. Muchas aplicaciones ejecutan completamente en un único servidor. Muchos otros sin embargo se ejecutan en grupos de servidores, con servidores dedicados de bases de datos, servidores web y balanceadores de carga. Un arquitecto del sistema tiene en cuenta los requisitos de rendimiento y disponibilidad, el número de usuarios / visitantes, etc. y en base a esto, diseña una infraestructura de servidores y una red.

El Desarrollador de Software
El desarrollo efectivo de una aplicación es hecha por los desarrolladores del equipo. Pero un desarrollador tiene más responsabilidades que solo escribir código. Él es a menudo responsable de hacer el seguimiento de su propio progreso, e informar al jefe de proyecto de los problemas a los que se enfrenta. Él es también quien implementa las ideas del arquitecto, y como tal, puede tener que discutir las (in)posibilidades de la implementación con el arquitecto.

La Documentación de Código tiene como objetivo el explicar a otros desarrolladores aquellas cosas que no resulten evidentes o claras a partir de la lectura del propio código en sí. Se debe dar una idea de por qué un fragmento de código es de la manera que es. El desarrollador es el único que conoce los pensamientos e ideas detrás del código que escribe, lo cual lo convierte en el candidato perfecto para documentarlo.

El Jefe de Desarrolladores
Un desarrollador líder, que tiene las mismas responsabilidades que los otros desarrolladores, pero también tiene añadidas algunas más. Un desarrollador líder debe entrenar a los otros desarrolladores, y ayudarles a resolver los problemas que puedan enfrentar. Este desarrollador, que suele ser el miembro del equipo más experimentado, también será capaz de asegurarse de que la ejecución sigue de cerca al diseño planteado, y no se dé lugar a lo que se denomina “invasión de características” durante el desarrollo. El desarrollador líder tiene una gran influencia en la calidad del código.

El Diseñador Gráfico
“Lo de dentro es lo que cuenta.”, es tan cierto, como que también la percepción de los usuarios depende mucho de la mirada y la sensación que le produce una aplicación o sitio web. No importa lo buena que la aplicación sea, si la interfaz es inconsistente, se sentirá menos robusto. Incluso si el diseño está determinado por los desarrolladores, es una responsabilidad importante crear un diseño consistente en toda la aplicación.

El Tester
Las pruebas son una parte importante para asegurar que el software funciona de la manera que debería. El papel de ‘tester’ se realiza a menudo por los desarrolladores para los aspectos técnicos y los usuarios para los aspectos funcionales. Un problema que surge de hacer a los desarrolladores probar su propio código es que, no importa lo bueno que sean, se ven influidos por la forma de su código fue creado. Si se prueba código de otra persona, se puede pensar en escenarios que la otra persona no los pensó. Así que incluso si no se tiene un equipo de Testers dedicado, es una buena idea que cada desarrollador pruebe código de otro desarrollador, en lugar del suyo propio.

El Gerente del Proyecto
Un gerente de proyecto tiene muchas responsabilidades. Es responsable de la planificación del proyecto, de mantener el proyecto dentro del presupuesto, y de la solución de problemas. Muchas de las tareas del gerente del proyecto tienen que ver con la comunicación, la comunicación al cliente sobre el progreso del proyecto y la comunicación con todos los miembros del equipo. Incluso en los proyectos de desarrollo que no cuentan con un gerente de proyecto, es conveniente asignar el rol de gerente de proyecto a alguien, para que quede claro quién es responsable de la ejecución del mismo.

El Administrador de Cuentas
Si usted desarrolla proyectos para clientes, sus proyectos pueden beneficiarse de las funciones de un Administrador de Cuentas. Un administrador de cuentas cultiva la relación con el cliente. Aunque la gestión de proyectos y administración de cuentas se hace a menudo por la mismo persona dentro de un proyecto, hay situaciones en las que ayuda a dividir estos roles. Un administrador de cuentas puede mantener una relación más independiente con el cliente, y avisar si el cliente no está contento con la forma en que se ejecuta el proyecto por parte del gerente del proyecto.

El Administrador de sistemas
El sistema en que la aplicación será instalada es creado por un administrador del sistemas.
Se arman los servidores, se instala el sistema operativo, un servidor web, PHP, una base de datos y cualquier software adicional que se requiera.

El Administrador de Código
El Código es importante y debe ser tratado como tal, el código necesita ser gestionado. Si varios de los desarrolladores están trabajando en conjunto, el código que escriben deben integrarse en algún momento, independientemente del sistema de control de versiones utilizado.

El Capacitador
Cuando un proyecto se haya completado, los usuarios pueden necesitar ser capacitados, en particular si en el proyecto se desarrollado una aplicación. El Capacitador relaciona las soluciones que se han creado con el usuario final. Una importante responsabilidad del Capacitador es explicar cómo la aplicación resuelve el problema del cliente y, como tal, juega un papel importante en asegurar que las expectativas del cliente sobre el software están en línea con lo que ha sido creado.



2.6 Habilidades y capacidades del personal SQA

Es responsable de asegurar la calidad de los productos generados en el proyecto y del proceso utilizado. Para asegurar la calidad debe revisar la calidad de los entregables de planificación del proyecto y los entregables de valoración del proyecto. Además revisa el nivel de apego al modelo de proceso de desarrollo de software y a los planes de Verificación, Gestión de Proyecto y Gestión de Calidad, documentando las desviaciones encontradas.
Debe conocer los conceptos y técnicas de Gestión de Calidad del Software. Debe identificar las propiedades de calidad que deben cumplir los productos del proyecto.
Centralizar y revisar las entregas que se realizan durante el ciclo de vida del proyecto. Realiza las Revisiones Técnicas Formales con los responsables de los productos a revisar.

El Responsable de SQA debe:


  • Asegurarse de que se desarrollen prototipos para probar y eliminar riesgos técnicos que hagan fracasar el proyecto así como también disminuir la calidad del mismo.
  • Asegurarse de que se realicen estudios de factibilidad

  • Realizar mediciones para comprobar la calidad del proyecto
  • Asegurarse de que se realice la actividad de implementación y se haga según los estándares de calidad propuestos
  • Evitar el desperdicio de esfuerzo en conjunto con el Administrador y el Arquitecto
  • Registrar las métricas de aceptación tomando en cuenta el Documento de Validación con el Cliente.

https://itpnli.es.tl/Calidad-Unidad-2.html

2.7 Actividades del SQA

Para poder lograr una buena adherencia con los estándares se debe medir cuantitativamente, donde sea posible, los aspectos de calidad (por ejemplo complejidad, confiabilidad, mantenimiento, seguridad, defectos, número de problemas) utilizando métricas bien establecidas. Para cumplir con esto, se deben realizar chequeos de:
- Administración.
- Documentación.
- Estándares, prácticas, convenciones y métricas.
- Revisiones e intervenciones.
- Actividades de testeo.
- Reporte de errores y acciones correctivas.
- Herramientas, técnicas y métodos.
- Control del código
- Control de medios.
- Colección de registros, mantenimiento y retención.
- Control de los proveedores
- Entrenamiento.
- Administración del riesgo.

2.8 Métodos y herramientas

Entrevistas y Cuestionarios.
Las entrevistas y cuestionarios se emplean para reunir información proveniente de personas o de grupos. Durante la entrevista, el analista conversa con el encuestado; el cuestionario consiste en una serie de preguntas relacionadas con varios aspectos de un sistema.
Por lo común, los encuestados son usuarios de los sistemas existentes o usuarios en potencia del sistema propuesto. En algunos casos, son gerentes o empleados que proporcionan datos para el sistema propuesto o que serán afectados por él.

Las preguntas que deben realizarse en esta técnica, deben ser preguntas de alto nivel y abstractas que pueden realizarse al inicio del proyecto para obtener información sobre aspectos globales del problema del usuario y soluciones potenciales.

Con frecuencia, se utilizan preguntas abiertas para descubrir sentimientos, opiniones y experiencias generales, o para explorar un proceso o problema. Este tipo de preguntas son siempre apropiadas, además que ayudan a entender la perspectiva del afectado y no están influenciadas por el conocimiento de la solución.

Las preguntas pueden ser enfocadas a un elemento del sistema, tales como usuarios, procesos, etc. El siguiente ejemplo muestra algunos tipos de preguntas abiertas.

Del Usuario

·      ¿Quién es el cliente?

·      ¿Quién es el usuario?

·      ¿Son sus necesidades diferentes?

·      ¿Cuáles son sus habilidades, capacidades, ambiente?

Del Proceso

·      ¿Cuál es la razón por la que se quiere resolver este problema?

·      ¿Cuál es el valor de una solución exitosa?

·      ¿Cómo usted resuelve el problema actualmente?

·      ¿Qué retrasos ocurren o pueden ocurrir?

Del Producto

·      ¿Qué problemas podría causar este producto en el negocio?

·      ¿En qué ambiente se usará el producto?

·      ¿Cuáles son sus expectativas para los conceptos fácil de usar, confiable, rendimiento?

·      ¿Qué obstáculos afectan la eficiencia del sistema?

El éxito de esta técnica combinada, depende de la habilidad del entrevistador y de su preparación para la misma. Los analistas necesitan ser sensibles las dificultades que algunos entrevistados crean durante la entrevista y saber cómo tratar con problemas potenciales. Asimismo, necesitan considerar no sólo la información que adquieren a través del cuestionario y la entrevista, sino también, su significancia.

Lluvia de Ideas (Brainstorm)

Este método comenzó en el ámbito de las empresas, aplicándose a temas tan variados como la productividad, la necesidad de encontrar nuevas ideas y soluciones para los productos del mercado, encontrar nuevos métodos que desarrollen el pensamientocreativo a todos los niveles, etc. Pero pronto se extendió a otros ámbitos, incluyendo el mundo de desarrollo de sistemas; básicamente se busca que los involucrados en un proyecto desarrollen su creatividad, promoviendo la introducción de los principios creáticos.

Prototipos

Los prototipos permiten al desarrollador crear un modelo del software que debe ser construido.

Al igual que todos los enfoques al proceso de desarrollo del software, el prototipado comienza con la captura de requerimientos. Desarrolladores y clientes se reúnen y definen los objetivos globales del software, identifican todos los requerimientos que son conocidos, y señalan áreas en las que será necesaria la profundización en las definiciones. Luego de esto, tiene lugar un "diseñorápido". El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles al usuario (por ejemplo, entradas y formatos de las salidas). El diseño rápido lleva a la construcción de un prototipo. El prototipo es evaluado por el cliente y el usuario y utilizado para refinar los requerimientos del software a ser desarrollado. Un proceso de iteración tiene lugar a medida que el prototipo es "puesto a punto" para satisfacer las necesidades del cliente y permitiendo al mismo tiempo una mejor comprensión del problema por parte del desarrollador.

Existen principalmente dos tipos de prototipos:

Prototipo rápido (o concept prototipe): El prototipado rápido es un mecanismo para lograr la validación pre-compromiso. Se utiliza para validar requerimientos en una etapa previa al diseño específico. En este sentido, el prototipo puede ser visto como una aceptación tácita de que los requerimientos no son totalmente conocidos o entendidos antes del diseño y la implementación. El prototipo rápido puede ser usado como un medio para explorar nuevos requerimientos y así ayudar a "controlar" su constante evolución.

Prototipo evolutivo: Desde una perspectiva diferente, todo el ciclo de vida de un producto puede ser visto como una serie incremental de detallados prototipos acumulativos. Tradicionalmente, el ciclo de vida está dividido en dos fases distintas: desarrollo y mantenimiento. La experiencia ha demostrado que esta distinción es arbitraria y va en contra de la realidad ya que la mayor parte del costodel software ocurre después de que el producto se ha entregado. El punto de vista evolutivo del ciclo de vida del software considera a la primera entrega como un prototipo inicial en el campo. Modificaciones y mejoras subsecuentes resultan en nuevas entregas de prototipos más maduros.

Entrevista

Es tal vez la forma más productiva de obtener información, si el analista cuenta con la confianza del entrevistado. Debe entrevistarse a todo el personal que se considere conveniente, independientemente del nivel jerárquico del puesto que desempeñen.

Elementos que forman la calidad del Software:
·      Metodologías
·      Medidas
·      Personas
·      Herramientas y técnicas

Metodologías

*RUP: Diseñada para entornos dinámicos y equipo pequeño.

*XP
-Comunicación verbal
-Diseño
-Entregas pequeñas
-Uso de estándares
-Cliente implicado
·      Se centran en el equipo de desarrollo y sus interacciones
·      Buscan un Software funcional
·      Una estrecha colaboración con el cliente
·      Responder a cambios aunque implique cambiar el plan


(2 de octubre de 2012). Obtenido de https://prezi.com/w7utaeaanzhy/calidad-del-software-en-el-ciclo-de-vida-del-mismo/

documents. (26 de junio de 2015). Obtenido de documents: https://vdocuments.mx/21-relacion-de-la-ingenieria-del-software-con-sqa.html

https://prezi.com/u-hjtqgmps7f/definicion-y-proposito-sqa-problemas-que-resuleve-sqa/. (3 de octubre de 2012). prezi. Obtenido de prezi.

prezi. (s.f.). Obtenido de prezi:
https://itpnli.es.tl/Calidad-Unidad-2.htm

Comentarios