martes, 28 de abril de 2015

Cuadro sinoptico,Modelos de calidad y Proceso de mejora continua

CUADRO SINÓPTICO DE ETAPAS DE CALIDAD

MODELOS DE CALIDAD DE SOFTWARE
La calidad está compuesta por una composición de muchas características
Un modelo de calidad describe estas características y sus relaciones. Los modelos de calidad ofrecen normas y parámetros, con pasos específicos para la creación de proyectos informático. 


Un modelo de calidad de software es un conjunto de buenas prácticas para el ciclo de vida del software, enfocadas en los procesos de gestión y desarrollo de proyectos, este indica qué hacer y no cómo hacerlo. Según la NC-ISO/IEC 9126-1 es el conjunto de características y las relaciones entre las mismas, que proveen la base para especificar requisitos de calidad y evaluar la calidad. NC-ISO/IEC 9126-1, 2005
Modelo CMMI 
Es un modelo de mejora de procesos que contiene las mejores prácticas de la industria para el desarrollo, mantenimiento, adquisición y operación de productos y servicios.
Es un modelo de aseguramiento de la calidad mediante el análisis y re-diseño de los procesos.
 Fue creado por el SEI en el año 2000.

Su principal objetivo es crear producto de calidad predecibles y consistentes, este modelo integra la disciplinas de la Ingeniería de sistemas e Ingeniería de Software que nos permite eliminar redundancias.

El modelo CMMI permite:


·         Describir los componentes del modelo y sus relaciones.
·         Comprender las áreas de proceso.
·         Localizar información relevante en el modelo.

El estado de madurez se divide en seis niveles:
·         Nivel Inicial
·         Los procesos son habitualmente caóticos 
·         El desarrollo se basa en la heroicidad y responsabilidad de los individuos.
·         Procedimientos localizados en áreas concretas.
·         No existen plantillas a nivel corporativo.
·         Nivel Repetible
·         Procesos de administración establecidos para lograr el seguimiento de los costos,tareas y funcionalidad. 
·         Proyectos planificados, realizados, medidos y controlados.
·         Se normalizan las buenas prácticas  

·          Nivel - Gestionado
·         Se incorpora actividades de administración de ingeniería en forma documentada, estandarizada eintegradas en una familia de procesos normalizados de la organización.
·         Procesos caracterizados y comprendidos.
·         Se conoce de antemano los procesos de construcción de software. 
·         Nivel - Definido
·         Métodos y plantillas bien definidas y documentados.
·         Procesos afectan a toda la organización.
·         Nivel – Administrado
·         Proyectos en forma controlada con métricas que permiten mediciones confiables de los procesos y productos.
·          Se establece objetivos cuantitativos para calidad y rendimiento. 
·         Estadísticas almacenadas para aprovechar su aportación. 
·         Identificación de motivos especiales. 
·         Nivel de Madurez 6 - Optimizado 
·         Mejora continua de procesos por medio de tecnologías a partir de la comparación y análisis de mediciones sucesivas de los proyectos.
·         Reducción de costes gracias a la anticipación de problemas y la continua revisión de procesos conflictivos

El objetivo de esta área es desarrollar y establecer una capacidad de medición para dar soporte al resto de áreas de proceso proporcionando un marco de trabajo a las organizaciones a la hora de alinear los objetivos y necesidades de medición, proporcionando resultados objetivos y útiles para la toma de decisiones y acciones correctivas. Este enfoque es consistente con las ideas de Goal, Question, Metric

Modelo TSP y PSP
PSP (Personal Software Process)

El PSP es un marco de trabajo de procesos para guiara a los desarrolladores en:

•    Definir sus propios procesos

•    Planear y dar seguimiento a su propio trabajo

•    Administrar la calidad de sus propios productos de trabajo

El PSP es un proceso personal que al estar basado en los principios de mejora,  ayuda a la gente a establecer sus metas personales, identificar qué métodos utilizarán, medir sus trabajo y analizar los resultados, para ajustar los métodos que utilizan para cumplir sus metas.



TSP 
(Team Software Process)

Es un modelo de referencia de ingeniería de software que provee un énfasis en los procesos, los productos y el trabajo en equipo. El TSP toma de base los principios de PSP para realizar los procesos y principios de ingeniería de software en un ambiente de trabajo en equipo.

El TSP enfatiza el trabajo en equipo porque:

•    Se deben entender las fortalezas/debilidades de cada miembro del equipo y cómo estas soportan el desempeño del mismo.


El Team Software Process no es una capacitación, usa los principios de PSP para poner en práctica lo aprendido en el mismo y ayudar a formar y poner en marcha equipos de alto desempeño para producir productos de clase mundial, de manera cíclica, es decir al término de cada ciclo, el equipo debe entregar una versión del producto que pueda ser probada (que sea un subconjunto del producto final), de tal manera que los productos de los ciclos combinados generan el producto final.
ISO
·  La Organización Internacional para la Estandarización, mejor conocida como ISO, es la agencia especializada en estandarización, conformada por representantes de los cuerpos normalizadores, fue establecida oficialmente en Febrero de 1947 con el objeto de promover la estandarización internacional, de tal manera que se facilitara el intercambio internacional de bienes y servicios casi como el desarrollo científico y tecnológico.. Actualmente abarca los estándares nacionales de 91 países. En los Estados Unidos, la representación se llama The American National Standards Institute (ANSI). 
·  Normas ISO 9000
·  Las series de ISO 9000 son un grupo de 5 individuales, pero relacionadas, estándares internacionales de administración de la calidad y aseguramiento de calidad.
·  Norma ISO 9000-3
·  Es una norma derivada de la norma ISO 9001 dedicada a el proceso de desarrollo con calidad del software.
Desde que la ISO 9001 fue escrita para ser utilizada por toda clase de industrias, es regularmente difícil interpretarla para el desarrollo de software, por lo cual se publicó la ISO 9000-3 (Guía para la aplicación de ISO 9001 para el desarrollo, implementación y mantenimiento de software)
·  Su objetivo es simple, proveer las especificaciones de cómo aplicar la ISO 9001 al desarrollo del software, implementación y mantenimiento
ISO/IEC 9126 
Es un estándar internacional para la evaluación del software. Es supervisado por el proyecto SquaRE (Ingeniería de Requisitos de Calidad de Seguridad o Security Quality Requirements Engineering) y la ISO 25000:2005, que siguen los mismos conceptos generales. 
Este surge debido a la necesidad de un modelo único para expresar la calidad de un software. Este modelo se ha desarrollado en un intento de identificar los atributos más importantes para la calidad interna y externa en un producto software.
El Modelo ISO/ IEC 15504
Este estándar SPICE trabaja con procesos de ingeniería, cliente-servidor, gestión de la organización y del soporte, fue diseñada por la alta competitividad del mercado de desarrollo de software, a la difícil tarea de identificar los riesgos, cumplir con el calendario, controlar los costos y mejorar la eficiencia y calidad, además realiza una evaluación de los procesos de software relacionando con el conocimiento y la experiencia aportado por otros modelos como: CMM, Trillium[1], Bootstrap[2] y ISO 9001 entre otros. Como vimos anteriormente el modelo CMMI, también define seis niveles de madurez. Cinco categorías de procesos y nueve atributos de procesos para medir el grado de calidad de los procesos. 
El modelo ISO/ IEC 15504, utiliza una guía para la evaluación de proyectos, que envuelve la medición de un proceso, este método de medición plantea uso de Métricas de calidad, la administración de datos (incluyendo datos históricos), y el manejo de métricas en la organización, su principal objetivo es la generación de métricas de proceso y de producto para dar soporte a la planificación efectiva y así mejorar la calidad de los productos, Este engloba un modelo de referencia para los procesos y sus potencialidades sobre la base de la experiencia de compañías grandes, medianas y pequeñas. 
McCall
Los factores de calidad son demasiados abstractos para ser medidos directamente, por lo que por cada uno de ellos se introduce atributos de bajo nivel denominados criterios de calidad 
Algunos criterios de calidad son atributos internos, reflejando la creencia de McCall que el atributo interno tiene un efecto directo en el atributo externo correspondiente 
Un nivel más de descomposición es necesario, mapeando cada criterio de calidad en un conjunto de métricas de calidad que son atributos (tanto del producto como del proceso) de muy bajo nivel, medibles directamente

McCall propone tres perspectivas para agrupar los factores de calidad:


1.-Revisión del producto habilidad para ser cambiado



·         Mantenibilidad: Esfuerzo requerido para localizar y corregir fallas
·         Flexibilidad: Facilidad de realizar cambios
·         Testeabilidad: Facilidad para realizar el testing, para asegurarse que el producto no tiene errores y cumple con la especificación
2.-Transición del producto adaptabilidad al nuevo ambiente 



·         Portabilidad: Esfuerzo requerido para transferir entre distintos ambientes de operación
·         Reusabilidad: Facilidad de reusar el software en diferentes contextos 
·         Interoperabilidad: Esfuerzo requerido para acoplar el producto con otros sistemas


3.-Operación del producto características de operación



·         Correctitud: El grado en el que el producto cumple con su especificación
·         Confiabilidad: La habilidad del producto de responder ante situaciones no esperadas
·         Eficiencia: El uso de los recursos tales como tiempo de ejecución y memoria de ejecución
·         Integridad: Protección del programa y sus datos de accesos no autorizados
·         Usabilidad: Facilidad de operación del producto por parte de los usuarios
Boehm

Este modelo introduce características de alto nivel, características de nivel intermedio y características primitivas
Características altas
Las características de alto nivel representan requerimientos generales de uso:

Mantenibilidad: Cuan fácil es modificarlo y reutilizarlo.
Características intermedias
Las características de nivel intermedio representan los factores de calidad de Boehm: 

Portabilidad (utilidad general)
Confiabilidad
 Eficiencia
Usabilidad

Facilidad de entendimiento (mantenibilidad) modificabilidad o flexibilidad (mantenibilidad)
Características primitivas
El nivel más bajo corresponde a características directamente asociadas a una o dos métricas de calidad:


·         De portabilidad: Independencia de dispositivos auto-contención
·         De confiabilidad:Auto-contención, exactitud, completitud, consistencia, robustez/integridad
·         De eficiencia:Accesibilidad,eficiencia de uso de dispositivos
·         De usabilidad:Robustez/integridad, accesibilidad, comunicación
·         De testeabilidad:Comunicación, auto descripción, estructuración




IT Mark
Es un servicio internacional de certificación que estudia los procesos técnicos y de negocio, diseñado especialmente para PYMES del sector Ti, para medir el reconocimiento de Excelencia en Tecnologías de la Información.

Este método es adaptado para PYME, ayuda al mejoramiento de procesos de software y a la mejora de otros procesos importantes de empresas que desarrollan y mantienen soluciones en TI. 

Este modelo está diseñado principalmente para pequeñas empresas y micro empresas, aun que también es aplicable para grandes organizaciones

Proceso de Mejora Continua
La mejora continua de la capacidad y resultados, debe ser el objetivo permanente de la organización. Para ello se utiliza un ciclo PDCA, el cual se basa en el principio de mejora continua de la gestión de la calidad.
La base del modelo de mejora continua es la autoevaluación. En ella detectamos puntos fuertes, que hay que tratar de mantener y áreas de mejora, cuyo objetivo deberá ser un proyecto de mejora.
El ciclo PDCA de mejora continua se basa en los siguientes apartados:
Plan
·         Identificación del problema y planificación.
·         Observaciones y análisis.
·         Establecimiento de objetivos a alcanzar.

Do
·         Correcta realización de los trabajos
·         Verificación de la aplicación.
Check
·          Comprobación de los logros que se obtuvieron.
·          Comparación con los objetivos planteados anteriormente.


Adjust
·         Analizar los datos obtenidos.
·         Proponer alternativa de mejora.
·         Preparación de la siguiente etapa del plan.


La excelencia ha de alcanzarse mediante un proceso de mejora continua. Mejora, en todos los campos, de las capacidades del personal, eficiencia de los recursos, de las relaciones con el público, entre los miembros de la organización, con la sociedad y cuanto se le ocurra a la organización, que pueda mejorarse en dicha organización, y que se traduzca en una mejora de la calidad del producto o servicio que prestamos.

martes, 21 de abril de 2015

Ensayo: Conceptos de calidad de Software

Introduccion

En la entrada pasada expusimos los conceptos base de la calidad de software, en esta entrada trabajaremos mas a fondo los mismos conceptos; De cada uno desarrollaremos varios aspectos como lo son, la ejemplificacion y una metrica que proponemos para conseguir una medida aproximada del resultado de la calidad. Plantear cada uno de estos conceptos nos ayudara a mejorar nuestro entendimiento de las metricas y de la calidad de software.

Reutilización
El concepto de reutilización dentro del software puede aplicarse de distintas maneras al momento de usarlo.
1. Consiste en la capacidad de un sistema (software) de ser utilizado en algún otro con el cual haya alguna similitud ya sea de código, diseño o especificación
2. Es la creación de un sistema a partir de alguno ya existente
Pero la forma de definirlo de manera mas adecuada es:
Elementos de software creados en desarrollos anteriores que son empleados en un sistema nuevo que simplifica el proceso de desarrollo y a su vez otorga mayor calidad.
Un software que aplique la reutilización permite que el desarrollo sea mas eficiente, incremente su productividad y sea rápido, por lo los tiempos se reducen y permite el avance en algún otro aspecto del sistema como eficiencia, exactitud, etc.
La reutilización dentro de un sistema puede ser medida a través de una formula que establecimos como:
𝑃𝑜𝑟𝑐𝑒𝑛𝑡𝑎𝑗𝑒 𝑑𝑒 𝑟𝑒𝑢𝑡i𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛=(𝑆𝑜𝑓𝑡𝑤𝑎𝑟𝑒 𝑟𝑒𝑢𝑡𝑖𝑙𝑖𝑧𝑎𝑑𝑜𝑆𝑜𝑓𝑡𝑤𝑎𝑟𝑒 𝑡𝑜𝑡𝑎𝑙) 100
La reutilización no es lo mismo que la herencia o la copia del código en algún sistema. La reutilización normalmente puede ser dada en diversos programas mediante la importación, es decir, es una característica que solo se da en programación orientada a objetos.
En Java es fácil notar esta reutilización al momento de hacer uso de las librerías que nos brinda, se importa la clase de esa librería y se puede hacer uso de su contenido en el nuevo código.
FACIL DE USAR
Es la simplicidad con la cual las personas de varios conocimientos y cualidades tienen la capacidad de aprender a utilizar un software, aplicándolo para resolver problemas.
Tenemos que tomar en cuenta también la facilidad de instalación, de operar el software y de monitorearlo.
En la calidad del software es fundamental la facilidad de uso de éste, ya que normalmente el usuario que requerirá tu sistema no tiene conocimientos tan amplios acerca de éste, motivo por el cual es necesario hacerlo a un nivel de interpretación fácil para que el usuario pueda darle un uso efectivo. Si tu software no es fácil de usar, el usuario tendrá complicaciones al utilizarlo y de esta manera no satisfaces las necesidades planteadas, entonces podría dudarse de su calidad.
Un ejemplo de un software “Usable” es Facebook, ya que la mayoría de las personas poseen las herramientas necesarias para comprenderlo y utilizarlo para su conveniencia.
Es importante que el software proporcione orientación para los usuarios principiantes y al mismo tiempo no aburre a las personas con mayor cantidad de conocimientos en el tema, siendo muy útiles las interfaces de usuario, éstas se rigen por el siguiente principio: “No pretendas que conoces al usuario; no lo conoces”.
Funcionalidad
Es en el cual se incluye las características necesaria para un software, sin incluir funciones innecesarias de software que complican al usuario realizar su acción
Ejemplicar el concepto
Facebook en 2011-2012 incluye una actualización sobre cambiar tu perfil por biografía lo que dificulto a muchos usuarios sus acciones en la red social, perdiendo su funcionalidad
Metrica sobre la Funcionalidad
Cumple las funciones necesarias
Tienes los diseños (adornos)
necesarios para que se haga un
software amigable
Sus métodos tienen el mínimo
#errores o ninguno
Sus actualizaciones no afectan a la
calidad de software
Ecuación para calcular la funcionalidad
Funcionalidad=(#metodos*métrica)/#errores
Puntualidad
Es la habilidad de un sistema de ser entregado según la fecha prefijada o antes de que los usuarios lo esperen.
La economía acompaña este punto siendo la habilidad de un sistema para ser terminado exactamente o por debajo de su presupuesto original.
Las presiones de puntualidad podrían tentarnos a usar técnicas de “Desarrollo Rápido de Aplicaciones” cuyos resultados pueden no poseer mucha extensibilidad.
Métrica
Para esto debemos tener en cuenta que debemos medir el retraso pues es así como nos puede ayudar a mejorar a ese punto y darle más calidad.
R: retraso
T: Tiempo dado en horas en que es dado el software de acuerdo a lo prefijado.
P: Tiempo prefijado dado en horas.
R=T-P
Siendo que si R es cero el retraso es nulo y fue entregado a tiempo, si es positivo hubo un retraso lo que indica que se necesita hacer una mejora en cambio si es negativo quiere decir que fue entregado antes que puede hablar bien.
Ejemplo:
En una escuela es pedido un software que se necesita ser entregado para su evaluación final dentro de 36 horas, uno de los equipos entrega su trabajo en 40 horas por lo que se aplica la métrica.
R=T-P; R=40-36; R=4
El resultado quiere decir que hubo un retraso de 4 horas que hizo que su calificación fue menor por lo que se necesita un proceso de mejora para obtener una mejor calificación.
Este punto es importante pues en una gran empresa puede significar el que pidan o no pidan sus proyectos pues hoy en dia el mundo se mueve en tiempos exactos y lo que menos quieren es perder tiempo ya que a ellos aplica el dicho: “el tiempo es oro”.
EXACTITUD
o Es la base de un software
o Es un factor externo que se logra a través de los requerimientos funcionales del software y tiene que lograr sus objetivos.
o En la exactitud, todo va concatenado en función del software, tomando en cuenta que todos los elementos involucrados deben estar verificados, garantizados y asegurados por el desarrollador.
EJEMPLO: WinRaR.
Métrica: 𝐸𝑥𝑎𝑐𝑡𝑖𝑡u𝑑=𝑁ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑟𝑒𝑞𝑢𝑒𝑟𝑖𝑚𝑖𝑒𝑛𝑡𝑜𝑠𝑁ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑟𝑒𝑞𝑢𝑒𝑟𝑖𝑚𝑖𝑒𝑛𝑡𝑜𝑠 𝑐𝑢𝑚𝑝𝑙𝑖𝑑𝑜𝑠
En donde, si la exactitud es = 0, el software es de calidad y conforme la exactitud > 0, va decreciendo ésta.
La exactitud, como ya lo hemos mencionado, es la parte fundamental del software que, sin ella, el software simplemente sería nefasto. No importa si la interfaz es hermosa, si su capacidad es mayor o tenga algo extra, si no cumple con los requerimientos exactos.
Eficiencia
Se entiende que la eficiencia es la capacidad del software para hacer buen uso de los recursos que manipula con respecto al hardware. A diferencia de la eficacia, la eficiencia no busca solo cumplir con la funcionalidad, sino que va más allá de eso. Un software de calidad debe ser eficiente para que se obtengan el máximo beneficio o por lo menos un beneficio conveniente por parte de los involucrados en su desarrollo haciendo que haya un buen rendimiento del hardware de computadora.
Se propuso una métrica para la eficiencia de la siguiente manera: 𝑒𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑖𝑎= 𝑟𝑒𝑠𝑢𝑙𝑡𝑎𝑑𝑜𝑠𝑟𝑒𝑐𝑢𝑟𝑠𝑜𝑠
Y a partir de esta se tomaron en cuenta como recursos la memoria y el tiempo que ocupa un software en realizar sus funciones y como resultados una evaluación de pruebas del software 𝑟𝑒𝑐𝑢𝑟𝑠𝑜𝑠=𝑚𝑒𝑚𝑜𝑟𝑖𝑎 𝑢𝑡𝑖𝑙𝑖𝑧𝑎𝑑𝑎+𝑡𝑖𝑒𝑚𝑝𝑜 𝑒𝑚𝑝𝑙𝑒𝑎𝑑𝑜
El SAES del IPN es un software relativamente eficaz, sin embargo en muchas ocasiones poco eficiente pues algo que los usuarios (los estudiantes) notamos a menudo es la tardanza con que realiza sus funciones. Seguramente lo que hace que éste software no logre solucionar esta problemática es porque el análisis que se necesita para la mejora continua no es de las principales prioridades.
Cuando se está comenzando un proyecto, se tiene presente con cumplir aquello que venga en los requerimientos, sin embargo, entregar algo que no se quede en ese nivel sino que trascienda es lo que hace la diferencia.
COMPATIBILIDAD
Conceptualización:
*Facilidad para combinar un elemento de software con otro.
*Interacción de grupos de información a través de un lenguaje de software.
El que no haya compatibilidad no significa que los sistemas no funcionen o estén defectuosos, simplemente que no pueden trabajar juntos, que son incompatibles. La incompatibilidad se puede deber a varias causas, pero principalmente porque un sistema está obsoleto con respecto al otro o porque se ha diseñado para usar con un sistema en particular y no funciona con otros.
Contextualización:
Es importante generalizar software para que aumente su concepto y utilización en diferentes contextos, aquí se basa lo vital que es su papel y su respectiva evaluación
Ejemplificación:
Un ejemplo muy importante de compatibilidad, es el de las páginas web que son creadas a través de lenguajes como Javascript y HTML5; éstos se pueden reproducir y pueden correr en todos los exploradores web existentes y cualquier tipo de página web se puede visualizar al cien por ciento.
Compatibilidad=  Sistemas con los que es capaz de trabajar en conjunto / 1 + Numero de cambios que requiere el sistema para interactuar con el otro en cuestión

ROBUSTEZ

La robustez en software se define como la capacidad de responder ante algún evento que pueda comprometer la funcionalidad de este, como algún cálculo erróneo, una métrica aproximada sería dividir el número de veces que el software funcionó bien entre el número de errores que hayan ocurrido, si es mayor a 1 el resultante, el software tiene robustez.

Robustez= Numero de errores / numero de errores en los que el programa reacciono de forma correcta

Conclusion

Saber estos conceptos es muy importante para nosotros, si es que nos queremos meter más a fondo en nuestra carrera de programación o si vamos a continuar estudiando una carrera similar a esta. Pero algunos de estos puntos también se pueden aplicar a cualquier actividad o proyecto que realicemos en la escuela, ya que así ya nos definimos algunos requerimientos que necesitamos para presentar un trabajo de calidad, y para ello tendremos que superar los parámetros establecidos.