28 abril 2015

Proceso de mejora continua



La finalidad de este proceso es que, al final de cada siclo, se logren identificar las posibles mejoras que se pueden implementar en el futuro. Se buscan procesos más rápidos y eficientes de producción de productos y servicios.
También abarca la actualización, un cambio constante de las actividades ya que la necesidades también cambian con el transcurso del tiempo y el desarrollo de tecnologías.
Debe existir una planeación del proyecto, posteriormente se debe implementar el proyecto y, durante el proceso, verificar las actividades y posibles mejoras, es ahí donde se busca una mejora por mínima que sea.  Antes de implementar un cambio en el proyecto se debe hacer una estimación de todos posibles escenarios que puede haber y de ahí se considera si es conveniente realizar ese cambio o replantearse el cambio de mejora.
La importancia de este proceso es que la organización tiene más herramientas para un ambiente competitivo ya que se vuelve más productivo y tiene más posibilidades de ofrecer productos y servicios de calidad ya que cumple con una de las condiciones básicas del proceso de calidad que es la mejora continua.
Sin embargo, es importante destacar que la mejora no es únicamente de un solo proceso, si no que los cambios deben buscarse en todo el proceso ya que llega a haber una distorsión de los objetivos y se pierde la visión del proyecto. Esto conlleva a que todos los integrantes del proyecto deben participar y estar al tanto de los cambios del proceso.
Es recomendable documentar los cambios que se llevan a cabo para no perder los objetivos generales y, si llega a existir alguna falla en el proceso, identificar los posibles errores. Para identificar las mejoras se debe identificar la métrica que se implementará para registrar los cambios de la manera más objetiva posible.
Se concluye que este proceso requiere tiempo para visualizar los beneficios que se logran y debe existir experiencia de los integrantes y esto se logra únicamente con práctica y tiempo.  Todos los procesos son importantes para poder garantizar que existe una mejora continua y la comunicación en equipo es importante para agilizar este aspecto.

Fuentes:
http://www.guiadelacalidad.com/modelo-efqm/mejora-continua
http://www.eoi.es/blogs/mariavictoriaflores/definicion-de-mejora-continua/

Modelos de calidad de software



CMMI Capability Maturity Model Integration
Modelo de calidad que clasifica empresas en nivele de calidad. Los niveles sirven para conocer la madurez de los procesos que realizan para producir software. Se toma el conocimiento  situado en la organización.
Consta de cinco niveles:

Inicial o Nivel 1:
Empresas que no llevan a cabo procesos de planeación de proyectos.
No hay control sobre el estado del proyecto.

Repetible o Nivel 2:
El proyecto es controlado en el desarrollo y se pueden repetir los resultados obtenidos.
Se implementan los siguientes procesos:
·       Gestión de requisitos
·       Planificación de proyectos
·       Gestión de proveedores
·       Aseguramiento de la calidad
·       Gestión de la configuración.

Definido o Nivel 3:

El proceso para desarrollar proyectos ya está definida,  está establecida, documentada y se pueden medir datos objetivos para desarrollar objetivos concretos.
Se implementa:
·        Desarrollo de requisitos
·       Solución de técnica
·       Integración del producto
·       Verificación
·       Validación
·       Desarrollo y mejora de los procesos de la organización
·       Definición de los procesos de la organización
·       Planificación de la información
·       Gestión de riesgos
·       Análisis y resolución de toma de decisiones

Cuantitativamente Gestionado o Nivel 4:
Se usan objetivos medibles para alcanzar las necesidades de los clientes y la organización del proyecto.
Se implementan  estos procesos:
  • Gestión cuantitativa de proyectos
  • Mejora de los procesos de la organización

Optimizado o Nivel 5:
Su objetivo es la mejora de las actividades realizadas en el transcurso del proyecto. Las mejoras son incrementales e innovan los procesos que son identificados gracias a las métricas que son antes identificadas, han pasado por un proceso de evaluación y son puestas en práctica. Está muy relacionado con el Nivel 4.
Los procesos son:
  • Innovación organizacional
  • Análisis y resolución de las causas

PSP: PEROSNAL SOFTWARE PROCESS
Permite mejorar la forma en la que se construyen software. Considera aspectos de planeación, calidad, estimación de costos y productividad.
Se basa en la estimación de dichos aspectos, permite sabe cuánto y cómo se desarrollan las tareas de un proceso. Sus características principales es que se basa en métricas y estimaciones que se utilizan para la evaluación y mejora de procesos para así ser implementado en procesos futuros.
Durante cada proyecto el ingeniero debe generar un documento en donde se registran todas las actividades realizadas, estos documentos llevan el nombre de script los cuales son la base de este modelo de calidad.

TSP: TEAM SOFTARE PROCESS
Es un método de establecimiento de mejora para proyectos de desarrollo de software.
Este modelo se desarrolla en equipos y ayuda a establecer sus objetivos, planifica los procesos y se hace una revisión del trabajo con la finalidad de desarrollar productos de calidad.
La organización del trabajo es la parte más importante de este modelo y el ámbito en el que se desempeñan debe ser óptimo.
El marco que se implementa se combina con el modelo PSP, se realiza un historial de actividades y se buscan las posibles mejoras de cada integrante así como en conjunto.

Fuente:

Mapa Conceptual




21 abril 2015

Calidad del Software



Hipótesis
Si alguna característica de la calidad del software es desequilibrada o no se implementa de manera correcta con las demás, el software carecerá de ésta.


Argumentación
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.
Métrica:
Exactitud = Número de requerimientos – Número de requerimientos cumplidos

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.

Robustez
La robustez se define como la capacidad de responder ante algún evento que pueda comprometer la funcionalidad de este en otras palabras es la capacidad de responder ante sucesos inesperados.
Existen diversos tipos de software a lo largo del mundo, todos ellos cumplen una función específica, es decir, es el fin con el que fueron creados.
Este es importante ya que si el software tiene exactitud, antes definido y pasa algo fuera de estos, el sistema deja de funcionar  dañando el contenido que tenía; dejando su objetivo el cual es realizar cualquier función, por lo mismo se convierte en un sistema inservible y sin calidad.
Para poder calificar la robustez se utiliza una determinada métrica o indicadores.
También se utilizan normas para la calidad de software, siendo la más común la  ISO 9000 la cual [3]"Pone a disposición de un auditor o certificador los procesos internos, de forma que este indique si cumple o no la normativa al 100%, audita el sistema; Si los resultados son positivos se emite la certificación y cada cierto tiempo se tiene que renovar; La certificación es costosa, a consecuencia de costes que ocasionan la lejanía y el tiempo de duración de proceso (aprox. 6 meses). Se certifica la empresa y la metodología para el desarrollo de la aplicación."
Una métrica propuesta por un compañero nuestro fue 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= #veces funcionó bien/#veces errores que hayan ocurrido

En mi opinión modificaría esta métrica como la división del número de veces en las cuales fallo entre el número de veces en las cuales respondió bien ante esta falla, va obteniendo mayor robustez mientras vaya aumentando el resultante.
Robustez=#veces fallidas/#veces que respondió bien ante fallas
Fácil de Usar (Usabilidad)
Se define cómo la simplicidad con la que el usuario con sus conocimientos y aptitudes conviven con el software de manera adecuada y logrando un aprovechamiento del mismo. En otras palabras, que el esfuerzo y entrenamiento del usuario sea solo el necesario para que este pueda interactuar con el sistema de manera óptima y el proceso implementado sea el adecuado.
La usabilidad comienza desde la instalación hasta la aplicación del sistema.
Este factor es importante cuando hablamos de calidad de software debido a que al inicio el usuario debe tener una idea de cómo funciona el sistema, de lo contrario, es muy complicado que lo siga implementando o que al utilizarlo no logre aprovechar los alcances del sistema o incluso puede causar confusión y frustración al usuario lo que provocaría que este dude de la calidad del software. El programa debe considerar toda gama  de usuarios, desde los usuarios “principiantes” hasta los que tienen más experiencia en la implementación del software. Al mismo tiempo se debe considerar el siguiente principio “No pretendas que conoces al usuario; no lo conoces” para que el sistema sea flexible ante cualquier tipo de usuario.
Se propuso la siguiente métrica:
Usabilidad = (Nivel de conocimiento del usuario)(Tiempo que tardó en aprender a usar el software)
Portabilidad
Lo podemos definir como la capacidad necesaria para trasladar el programa de un sistema hardware-software a otro de una manera eficiente y efectiva, y con el número mínimo de modificaciones.
Podemos decir que se refiere a tener las capacidades de adaptar su software en el entorno distinto, instalar el software y reemplazar atributos en el cambio de sistema, pero  sin contar aplicaciones distintas del sistema.
Contextualización
Un sistema que se encuentra en un local tiene la capacidad de ser instalado en otra computadora con otro sistema operativo y con un pequeño esfuerzo en modificarlo debe ser capaz de tener las mismas funciones iniciales.
Métrica
Una fórmula que podemos ocupar para medir es:
Portabilidad = 1 – (RM / RA)

Dónde:        *RM son los recursos necesarios para mover el sistema al nuevo entorno
                    *RA son los recursos necesarios para adaptar el sistema en el nuevo entorno residente.
Extensibilidad
La extensibilidad se define como la facilidad de adaptación del sistema hacia los cambios de especificación, un ejemplo es cuando estás haciendo un tenga, con tan solo un bloque que muevas se puede caer toda la torre, si lo trasladamos a un software quiere decir que modifiques alguna cosa y cuando lo haces se cae todo tu software es una clara muestra de que no cumple con la extensibilidad.
Como en el ejemplo, es algo importante que debe tener un software, ya que vivimos en un mundo que cambia constante mente y más si se trata de tecnología, y de negocios; los cuales serán dedicados la mayoría de softwares.
Para erradicar este problema una de las opciones es trabajar los softwares de manera individual, como en POO (Programación Orientada a Objetos).
En algunos textos dicen que los principios de extensibilidad son:
·       Diseños simples( simple arquitectura)
·       Descentralización (independientes)
Una métrica que utilizaría para evaluar la extensibilidad sería:
Extensibilidad= #modificaciones/#modificaciones bien respondidas

Compatibilidad
Se refiere a la capacidad del software para compartir o convivir con otro sistema, que el programa sea capaz de compartir información con uno o más sistemas que se encuentren en su mismo entorno mientras realiza las funciones por la que es requerido. Para esto se requiere generalizar el programa y homogenizar sus aspectos, con esto se logra que al juntarse no haya discrepancia ante requerimientos específicos que impidan la convivencia.
Es casi imposible que existan sistemas aislados, por muy bueno que sea un programa, si no puede convivir con el entorno en el que se encuentra, el sistema no se podrá desarrollar como se fue requerido.
Se propuso la siguiente métrica:
Compatibilidad = Sistemas con los que es capaz de trabajar en conjunto/1+Número de cambios en el sistema para interactuar
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 más 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.
Contextualización
Un software que aplique la reutilización permite que el desarrollo sea más eficiente, incremente su productividad y sea rápido, los tiempos se reducen y permite el avance en algún otro aspecto del sistema como eficiencia, exactitud, etc.
Métrica
La reutilización dentro de un sistema puede ser medida a través de una fórmula que establecimos como:
Porcentaje de reutilización=(software reutilizado/Software total)(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.
Ejemplo
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.
Funcionalidad
Se define como el número de posibilidades que  proporciona un sistema.
En un software de calidad se  deben incluir solo la característica necesaria para su diseño e implementación, por lo cual no se deben de incluir funciones innecesarias que puedan complicar  al usuario la implementación del sistema.
Contextualización
La calidad de Software requiere esta característica debido a que si un sistema es funcionarle, éste permite que se cumpla el objetivo de resolver una problemática y no se desvíe  por “solucionar” otras.
Ejemplo
En el 2011, Facebook actualización el muro, donde el usuario escribía o recibía comentarios,  cambiándolo a biografía, lo que dificultó a muchos usuarios sus acciones en la red social, perdiendo su funcionalidad.
Métrica
Características
SI
No
Cumple con las funciones necesarias.


Tiene el diseño necesario para que ser un software amigable.


Sus métodos tienen el mínimo  núm. de errores o ninguno.


Sus actualizaciones no afectan a la calidad de software.



Ecuación para calcular la funcionalidad:
Funcionalidad=#métodos * métrica aciertos/#errores
Eficiencia
La eficiencia se entiende como la cantidad de recursos computacionales y de código requeridos por un producto de software para llevar a cabo las funciones encomendadas, en otras palabras, es la capacidad del software para hacer buen uso de los recursos de hardware que manipula. El concepto de eficiencia puede ser confundido con eficacia en ocasiones, pero se debe tener en cuenta que son dos significados distintos; la eficiencia busca cumplir con la funcionalidad de la manera más “sutil” posible, mientras que la eficacia solo se enfoca alcanzar el resultado esperado. La eficiencia en un Software es imprescindible para la obtención del máximo beneficio.
La métrica propuesta para medir la eficiencia está dada por la siguiente ecuación:
Eficiencia = resultados/recursos
Donde a su vez, los recursos pueden ser definidos como:
recursos= memoria utilizada + tiempo
Por lo tanto, la ecuación que devuelve el valor de la eficiencia es:
eficiencia= resultados/(memoria utilizada + tiempo empleado)
En términos más vanos, se refiere al uso de los recursos involucrados en la realización de una meta, o más específicamente a la relación entre los recursos aplicados y el resultado obtenido. Cuando decimos por ejemplo: "Él es una persona eficiente" queremos manifestar que hace su trabajo muy rápido, sin demoras, es decir hace un buen uso del recurso tiempo con relación al resultado. Este concepto de eficiencia se aplica a cualquier otro recurso, siempre vinculado, por supuesto a un resultado definido. Al referirnos a la eficiencia en el Software, implícitamente hace presencia el desempeño, siendo casi sinónimos. Una actividad eficiente hace un uso óptimo de los recursos y, por tanto, tiene el menor costo posible.
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 sí 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 día 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”.
Conclusión
A manera de retomar el concepto, la calidad en el software se define como el conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia. Es necesario estar conscientes de que la calidad en el software es medible, por lo tanto se establecen métricas para determinar esta cualidad, además las métricas que se utilizan varían dependiendo de cada una de las características la integran. Como se observó con anterioridad, para cada una de estas cualidades se propusieron distintos criterios a evaluar, y cada uno de estos era introducido en ecuaciones que arrojaban un rango de valores para los que la calidad era aceptable. Tomando en cuenta lo anterior, podemos concluir que todas estas características dependen una de la otra, es decir, si en algún momento falta alguna o su valor es inferior al admisible, todas las demás se verán afectadas en mayor o menor medida, dependiendo de la correlación que exista entre ellas. En adición, es recomendable tener en cuenta tanto la obtención de la calidad como su control durante todas las etapas del ciclo de vida del software, ya que desperfectos posteriores podrían causar graves daños y costos extra de reparación.