domingo, 26 de abril de 2015

Etapas de la calidad // Modelos de calidad de software // Proceso de mejora continua

Etapas de la calidad - Cuadro sinóptico

























*Dar click a la imagen para ver en grande

Referencia:

"Evolución de la calidad" Sitio web: http://www.alconet.com.ar/ISO/menu.html

Modelos de la Calidad de Software

MODELO CMMI


El CMMI es un enfoque de mejora de procesos que provee a las organizaciones de los elementos esenciales para un proceso efectivo.

El CMMI es el Modelo de Madurez de Capacidades Integrado. 

Fue desarrollado por el SEI (Software Enginnering Institute).

Mide la madurez del desarrollo del software en una escala del 1 al 5.

Nivel 1 CMMI (Inicial). 

Este es el nivel en donde están todas las empresas que no tienen procesos. Los presupuestos se disparan, los proyectos se entregan fuera de las fechas, hay apresuros al final de la entrega. No existe un control sobre el estado del proyecto.


Nivel 2 CMMI (Administrado). 

Es posible obtener el éxito en los resultados varias veces.La principal Durante este nivel el proyecto es gestionado y controlado durante el desarrollo del mismo. El desarrollo no es opaco y se puede saber el estado del proyecto en todo momento.

Los procesos que hay que implantar para alcanzar este nivel son:
*  Gestión de requisitos
*  Gestión de proveedores
* Aseguramiento de la calidad
*  Seguimiento y control de proyectos
* Gestión de la configuración
* Planificación de Proyectos


Nivel 3 CMMI (Definido).

La gestión e ingeniería de los proyectos está establecida documentada, y existen métricas para llegar a los objetivos concretos

Los procesos que hay que implantar para alcanzar este nivel son:
º Desarrollo de requisitos
º Verificación
º Definición de los procesos de la organización
º Planificación de la formación
º  Validación
º Desarrollo y mejora de los procesos de la organización
º  Gestión de riesgos
º  Análisis y resolución de toma de decisiones

La mayoría de las empresas que llegan al nivel 3 aquí se quedan, debido a que es un nivel de confort que proporciona muchos beneficios y cubre la mayoría de las necesidades que tiene la empresa.


Nivel 4 CMMI (Administrado Cuantitativamente).

Los proyectos utilizan objetivos que pueden medir para intentar  satisfacer las necesidades de los clientes y tener una mejor organización, utilizando métricas para gestionar esta organización.

Hay 2 procesos fundamentales que son necesarios para alcanzar este nivel.

·      *   Mejora de los procesos de la organización
·       *  Gestión cuantitativa de proyectos


Nivel 5 CMMI (Optimizado).

El proyecto se enfoca en la mejora continua, hay mejoras incrementales e innovadoras de los procesos que mediante métricas son identificadas, evaluadas y puestas en práctica.



MODELO TSP && PSP


PSP (Personal Software Process):

El PSP ayuda a los desarrolladores a definir sus propios procesos, planear su trabajo y administrar la calidad de sus propios productos.

Está basado en los principios de mejora, ayuda a la gente a establecer metas personales, mide y analiza sus resultados, ajustando las maneras que utilizan para lograr sus objetivos.

En resumen, el PSP es un proceso definido para ayudar a realizar el trabajo, reportando datos precisos, mejorando el proceso individual para aumentar el desempeño de todo el equipo.


TSP (Team Software Process):

Es un modelo de ingeniería de software que hace énfasis en el trabajo en equipo, realiza loos trabajos en un ambiente de colaboración, se deben de entender las fortalezas y bajas de cada miembro del equipo y como éstas ayudaran al desempeño de éste.

Los equipos trabajan juntos de una manera coordinada si se tienen metas en común, se acuerdan los planes de trabajo y se establecen las responsabilidades, dando un seguimiento al avance.


El Team Software Process , usa los principios de PSP para poner en marcha equipos de alto rendimiento. Cada miembro del equipo, en un desarrollo TSP planea sus actividades, establece un seguimiento y reporte de sus avances, y se involucra en la toma de decisiones del equipo. 


Proceso de Mejora Continua


La mejora continua, debe ser el objetivo de la organización. Para realizarla se utiliza un ciclo llamado PDCA, el cual se base en el principio de mejora continua de la gestión de la calidad: “Mejorar todos los días”.

La autoevaluación es fundamental para la mejora continua, en ésta detectamos puntos que hay que tratar de mantener y se localizan áreas de mejora.

El ciclo PDCA de mejora continua se basa en los siguientes apartados:

Planificar  (Plan)

º  Organización del trabajo de manera lógica
º  Identificación del problema y planificación.
º  Se establecen objetivos a alcanzar.
º  Establecimiento de indicadores de control.
º  Observaciones y análisis.

Hacer (Do)

§  Las tareas que se planean se realizan de manera correcta
§  Se verifica la aplicación
§  Preparación sistemática de lo previsto.

Comprobar (Check)

º  Comprobamos  los logros obtenidos
º  Verificación de los resultados de las acciones realizadas.
º  Comparación de los objetivos cumplidos con los objetivos propuestos.

Ajustar (Adjust)

§  Podemos extender aprendizajes y experiencias adquiridas en otros casos.
§  Análisis de datos obtenidos.
§  Estandarización y consolidación.
§  Se prepara la siguiente etapa del plan
§  Proponer alternativa de mejora.
.

La perfección en todos los aspectos se alcanza mediante un proceso de mejora continua. Una mejora en la eficiencia de los recursos, en las relaciones públicas, una mejora dentro de la organización, todo esto reflejado en una mejora de la calidad del producto o servicio que ofrecemos.
El alcance de los mejores resultados no se logra en un dia, es un proceso progresivo donde no pueden existir los retrocesos, deben de cumplirse todos los objetivos y mentalizarse para próximos retos.

Referencias:


All Soft. Noviembre 2008."El Modelo CMMI (for Development)" Obtenido de: http://www.allsoft.com.mx/recursos/ElModeloCMMI.pdf

Alava, M. (2012). Guía de la Calidad. Sitio Web: http://www.guiadelacalidad.com/modelo-efqm/mejora-continua

Kernel. "Metodologia PSP /TSP"  Sitio web: http://www.kernel.com.mx/documentos/psp_tsp.pdf


martes, 21 de abril de 2015

Ensayo - Calidad de Software

Alumno: Victor Cuauhtemoc Vargas Ramírez
Especialidad: Programación   
Grupo: 4IM8  
Profesor: Juan Manuel Cruz Mendoza
TÉCNICAS DE PROGRAMACIÓN PERSONAL CON CALIDAD
Miércoles 22 de Abril del 2015



INTRODUCCIÓN.


Durante la clase de Técnicas de Programación Personal con Calidad se analizaron los factores internos y externos que nos permiten evaluar la calidad del software, obteniendo que la calidad del software es mejor descrita como una combinación de varios factores.


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.
Sin embargo, todos ellos para que puedan funcionar y destacar, tienen que estar en un cierto nivel de calidad, 



Todos queremos que nuestros sistemas de software sean rápidos, útiles y sencillos de usar, de tal manera que el usuario detecte estas características y juzgue de una manera mas objetiva el nivel de calidad que posee el software que se le brindó.



DESARROLLO.

Siempre para que nuestro usuario pueda analizar y evaluar nuestro sistema toma en cuenta los factores externos de acuerdo a su percepción, ya que, ellos debido a su falta de conocimientos acerca del código y temas acerca de la programación, no podrían evaluar nuestro nivel de programación de acuerdo al código.

Veamos ahora, los factores mas importantes:

1. Exactitud

 Es lo más trascendente dentro un software.
 Es un factor externo que se satisface a través de los requerimientos funcionales del software y tiene que lograr con los objetivos planteados.

 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 de software.

Un ejemplo software exacto podría ser WinRaR, ya que aparentemente, cumple con todo lo que nos ofrece.

Podríamos establecer una métrica:

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. 

2. Robustez



La robustez en software se define como la capacidad de responder ante algún evento que pueda comprometer la funcionalidad de este. 

Al terminar de programar un sistema siempre se presentan situaciones que no se contemplan y la robustez nos asegura que estas no causaran eventos catastróficos que dañen la integridad de nuestro programa, de esta manera la robustez hará un despliegue de mensajes de error apropiados en donde pueda terminarse la ejecución de manera limpia manteniendo los datos seguros.


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


3. 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.   Podemos afirmar que  es la creación de un sistema a partir de alguno ya existente.

Sin embargo la definición 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.

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:

Porcentaje de reutilización = (Software reutilizado/Software total) x 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.


4. Extensibilildad


Es la facilidad de adaptar los productos del software a los cambios que el cliente especifique.


5. Compatibilidad


Es la 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.

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


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.

6. 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:

Eficiencia = resultados / recursos

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.

Recursos = memoria utilizada + tiempo empleado

7. Portabilidad

El esfuerzo necesario para transferir el programa de un entorno de hardware o software a otro.

8. Fácil de usar


Es la simplicidad con la cual las personas de varios conocimientos y cualidades tienen la capacidad de aprender a usar un software, aplicándolo para resolver problemas.

En la calidad del software es fundamental la facilidad de uso de tu sistema, ya que normalmente el usuario que requerirá tu sistema no tiene tantos conocimientos 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 sus 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”.

Podríamos calcularlo por medio del tiempo que tarda en aprender a usar el software una persona con conocimientos muy básicos de computación, a menor tiempo, mayor facilidad de uso.


9. Funcionalidad


Es la característica en la cual se incluyen las características necesarias para un software, sin incluir funciones innecesarias de software que complican al usuario realizar su acción.

Por ejemplo en el año de 2011-2012 Facebook  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 

Aspectos importantes acerca de 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  numero de errores
  • Sus actualizaciones no afectan a la calidad de software



10. 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 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.

Finalmente la calidad de software es importante para cualquier sistema, ya que compromete al programador a entregar un producto de calidad, en base a las especificaciones requeridas e intentando o pretendiendo cubrir los factores que evalúan su calidad.

Como anteriormente se mencionó, un software siempre será de calidad cuando cumpla todos los factores que la miden, sin embargo será cuestión del usuario si le agrada o no, y el le podrá poner una evaluación de manera subjetiva.



REFERENCIAS.

  • Resumen Capitulo 1 de: "Object Oriented Software Construction" 2da Edition. Bernard Meyer
  • Interpretaciones de alumnos del grupo 4IM8 de la Especialidad de Programación del CECyT 9. Abril 15, 2015.

martes, 7 de abril de 2015

LA CALIDAD DEL SOFTWARE

Alumno: Victor Cuauhtemoc Vargas Ramírez

Especialidad: Programación   

Grupo: 4IM8  

Profesor: Juan Manuel Cruz Mendoza
TÉCNICAS DE PROGRAMACIÓN PERSONAL CON CALIDAD

Introducción


Actualmente, la tecnología es fundamental en nuestra vida cotidiana, ya que mediante aplicaciones (software) se satisfacen ciertas necesidades que  actualmente las personas tienen. Por ejemplo los mensajes del WhatsApp son muy útiles para comunicarse sin costo alguno, de forma rápida y eficiente con la persona que deseamos,  a través de la red 3G que nos brinde nuestra compañía telefónica. Es ahí donde nos damos cuenta que utilizamos algo llamado "software" que es aquella parte intangible de nuestra computadora o aparato, que nos ayuda a satisfacer una necesidad.

Entonces nos cuestionamos, ¿Existe la calidad dentro del software? -Por supuesto que sí, reflexionemos.

Para comenzar a desarrollar aspectos básicos referentes a la calidad de software, retomemos el concepto de calidad.

Según Cuauhtemoc Vargas, la calidad: "Es el grado de satisfacción que ofrecen las características de un producto de acuerdo a las exigencias planteadas por el que lo consume".


Entonces analicemos: ¿Cómo podríamos observar la calidad dentro de un software?; utilizando nuestra lógica y el concepto anteriormente citado, podríamos decir que un software de calidad es aquel en el que su contenido y funcionalidad están basados en las exigencias planteadas por la persona o empresa que lo requiere, y a su vez les provoca satisfacción, ya que ofrecen las características que en principio planteó la persona que lo consume.


Desarrollo


En la introducción elaboramos una pequeña definición acerca de la calidad del software, sin embargo la calidad en el software es un concepto diferente que no podríamos compararlo directamente con la calidad de un producto. En la actualidad, el software se ha convertido en uno de los principales objetivos estratégicos de las organizaciones debido a que, cada día, los procesos mas importantes de las organizaciones y su supervivencia dependen del funcionamiento del software.


Para entender y medir con eficacia la calidad, debe ser expresada por términos que tengan sentido para el usuario. En el caso del software estos factores son el medio por el cual la calidad se traduce al lenguaje de las personas que manejan la tecnología.

Los factores que afectan a la calidad se dividen en 2 grupos:

1. Los que MIDEN directamente (defectos hallados en las pruebas).
2. Los que SE MIDEN directamente (facilidad de uso)

Para tener un indicio sobre la calidad debemos comparar al software con algún conjunto de datos, presentando una medición.

En 1977 McCall, Richards & Walters, propusieron una clasificación de los factores que afectan directamente a la calidad del software, concentrándolos en 3 aspectos importantes que debe cubrir un software:

  • Características operativas.
  • Capacidad para sufrir cambios.
  • Capacidad de adaptarse en nuevos entornos.

Entonces, describiremos brevemente algunos de los factores fundamentales para medir la calidad en un software:

  1. Exactitud.

    Es la forma en la que el software cumple con los requerimientos del sistema, que trabaje correctamente, la eficacia de su trabajo.


  2. Robustez.

    Es la capacidad que tiene un software para reaccionar de manera correcta ante condiciones que se encuentren fuera del alcance del software, condiciones excepciones.

    Al terminar de realizar un software de alta calidad siempre se presentaran situaciones que no contemplarás y la robustez nos asegura que éstas no causarán eventos catastróficos, si se presentan errores en tu software, la robustez hará un despliegue de mensajes de error apropiados, en donde pueda terminarse la ejecución de manera limpia y mantenga los datos seguros.


  3. Reutilización.

    Es la capacidad que tiene un programa o las partes de éste para poder volverse a emplear en otras aplicaciones.


  4. Extensibilidad.

    Es la facilidad de adaptar los productos del software a los cambios que el cliente especifique.


  5. Compatibilidad.

    Es la capacidad que tiene los elementos software para combinarse con otros, que logren comprenderse e interpretarse correctamente para no causar errores inesperados en la ejecución del sistema.


  6. Eficiencia.

    Es la cantidad de recursos informáticos y de código que se necesitan para que el programa pueda realizar sus funciones, reflejándose en la manera como el software cumple su trabajo.
    Es el grado en el que el software hace óptimo el uso de los recursos del sistema.


  7. Portabilidad.

    El esfuerzo necesario para transferir el programa de un entorno de hardware o software a otro.

  8. Usabilidad.

    Es la facilidad de manejo de un programa, es el esfuerzo que necesitamos para aprender a manejar los datos de entrada y reconocer las salidas de un programa.


  9. Funcionalidad.

    La podemos valorar a través de las características y las capacidades que posee el sistema, la generalidad de las funciones que realiza y la seguridad global que posee el programa. Podríamos decir que es el grado en el que el software satisface las necesidades como la conformidad, interoperatividad, seguridad, etc.


  10. Puntualidad.

    Es el cumplimiento de los tiempos que se acordaron con el cliente, normalmente se plantean fechas por cada módulo del sistema, de esta manera se cumple con el compromiso y se obtiene una mayor satisfacción del usuario.

  11. Corrección.

    Es hasta donde satisface un programa su especificación y logra los objetivos del cliente.



Conclusión

Creo que al trabajar en la Programación es fundamental tomar en cuenta todos estos aspectos anteriormente mencionados, por que considero que es importante trabajar un software con alta calidad, ya que estos sistemas presentan muchos errores y excepciones , de tal manera que al no trabajar cuidadosamente con éstos, nuestro programa sería un fracaso.

Pienso que es importante realizar un análisis detallado, y un diseño previo antes de comenzar con el código, ya que sabiendo los módulos, los requerimientos y teniendo los casos de uso nos será mas fácil codificar, ya que tenemos un referente y un objetivo establecido para elaborar un software de calidad.

Me parece que un software de calidad nos exige mucho esfuerzo y trabajo, ya que al trabajar con calidad en la programación podremos hacer sistemas aún más complejos y a futuro lograr destacar en el campo laboral por la excelencia de nuestros proyectos.




Referencias Bibliográficas y Electrónicas


  • José Luis Cendejas Valdéz (2014) "Modelo de Desarrollo de Software Integral Colaborativo" 07/04/15. Sitio web:http://www.eumed.net/tesis-doctorales/2014/jlcv/calidad-software.htm
  • Pressman S. Roger, Ingeniería de Software: Un enfoque práctico. 5ta. Edición, MacGraw Hill, 2002.