lunes, 27 de abril de 2015

Calidad del software y modelos

Calidad del Software
La calidad del software es el conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia, La calidad es sinónimo de eficacia, flexibilidad, corrección, confiabilidad, mantenibilidad, portabilidad, usabilidad e integridad.
La calidad del software es medible y varía de un sistema o programa a otro. Un software hecho para ejecutarse una sola vez no requiere el mismo nivel de calidad mientras que un software para ser explotado durante un largo necesita ser confiable, mantenible y flexible para disminuir los costos.
La calidad del software puede medirse después de elaborado el producto . Pero esto puede resultar muy costoso si se detectan problemas deriva dos imperfecciones en el diseño, por lo que es imprescindible tener  en cuenta tanto la obtención de la calidad como su control durante todas las etapas del ciclo de vida del software
Modelos
CMMI: 
Es una fusión de modelos de mejora de procesos para ingeniería de sistemas, ingeniería del software, desarrollo de productos integrados y adquisición del software.
Modelo de evaluación de los procesos de una organización. En ingeniería de software y el desarrollo organizacional es u enfoque de mejora de procesos que proporciona las organizaciones con los elementos esenciales para la mejora de procesos eficaces.
Fue creado por el SEI con el fin de unir la gran cantidad de modelos creados y otras organizaciones a lo largo de los años.
Es uno de los modelos más utilizados en la industria del software, disminuye o elimini el trabajo, aumenta la fiabilidad en la predicción de costos, aumenta el reuso de productos y procesos, disminuye costos debido a múltiples evaluaciones y programas de mejoras de procesos.
Provee asistencia para desarrollo de procesos. No son descripciones de procesos, las áreas de proceso no se vinculan una a una con los procesos de una organización
TSP:
Es una metodología para dirigir el trabajo de mejora y desarrollo de software además de establecer un entorno donde el trabajo efectivo de equipo sea normal y natural.
Conjunto de procesos estructurados que indican qué hacer en cada fase del desarrollo del proyecto y muestra cómo conectar cada fase para construir un producto completo.


martes, 21 de abril de 2015

Elementos necesarios para la calidad


  • Robustez

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, basándose en las normas vigentes y los requerimientos solicitados.
La Real Academia Española define la calidad como la "propiedad o conjunto de propiedades inherentes a algo, que permiten juzgar su valor".
Pero, enfocar este concepto a un software es difícil de definir, debido a que es subjetivo en la mayoría de los casos, ya que depende de los requerimientos en los que se basó y para quien va a ser dirigido el producto.
Por ejemplo, cierto software puede hacer funciones como sumar, restar, multiplicar y dividir sin tener fallas o retrasos, este podría ser considerado de calidad si su alcance es para educación primaria, sin embargo si se usara para educación secundaria, seguiría haciendo sus procesos de manera correcta, pero se debería de modificar sus funciones como el poder hacer ecuaciones, para poder seguir siendo de calidad en su campo.
Pero, ¿Qué es calidad de software?, personalmente la defino como el conjunto de los rubros de calidad de software que son cumplidos al ser evaluados (Puntualidad, Funcionalidad, Portabilidad, Etc.), mientras sean más, el software tendrá más calidad. Sin embargo, esta definición es totalmente subjetiva, ya que como se trató anteriormente, para alguien ciertos rubros serán más importantes que otros, por lo que si este dice que si el rubro X es más importante que el rubro Y, su calidad estará basada en como cumple con X, sin importar como realice Y o Z.
Algunos sitios web y autores explican que al hablar de calidad de software, inmediatamente se debe de tratar una métrica para poder medir algún rubro que se evalúa en calidad de software como Robustez o Exactitud. " En informática, el término métrica hace referencia a la medición del software en base a parámetros predeterminados, como puede ser el número de líneas de código de que consta o el volumen de documentación asociada. A veces en vez de hablar de métrica se usa el término “Indicadores” del software. Algunos ingenieros lo usan como sinónimos mientras que otros les atribuyen significados distintos."
Por ejemplo, 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.
También se utilizan normas para la calidad de software, siendo la más común la ISO 9000 la cual "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."

Al cumplir con la norma, los clientes tendrán más confianza al pedir sus requerimientos, ya que certifica la calidad con la que sus procesos son realizados.

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, por ejemplo, si es agradable estéticamente pero sus procesos no son realizados en el tiempo estipulado, a menos que el cliente no haya pedido como requerimiento que sus tareas sean hechas en el menor tiempo posible, no será de calidad para el usuario. Al final, es subjetivo para cualquiera.


  • 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: Exactitud = Numero de requerimientos - Numero 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.


  • 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

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.


  • 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


  1. Cumple las funciones necesarias
  2. Tienes los diseños (adornos)
  3. necesarios para que se haga un
  4. software amigable
  5. Sus métodos tienen el mínimo #errores o ninguno
  6. Sus actualizaciones no afectan a la
  7. calidad de software


Ecuación para calcular la funcionalidad
Funcionalidad=(#metodos*métrica)/#errores

El concepto de reutilización dentro del software puede aplicarse de distintas maneras al momento de usarlo.
  • 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:
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.

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.


  • Fácil 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”.


viernes, 3 de abril de 2015

Calidad del Software

Introducción:
En el momento de crear un software con calidad y lo necesario para que este cumpla con la calidad es que tenga los requisitos que el cliente solicita y para esto siempre hay unos que se suelen usar para la calidad, Exactitud, Robustez, Extensibilidad, Reutilización, Compatibilidad, Eficacia, Portabilidad, Usabilidad, Funcionabilidad y Puntualidad, en esta investigación se harán las definiciones de cada uno para facilitar su uso en creación de un software de calidad.
Desarrollo:
Para poder sacar los conceptos de lo necesario para que un software tenga calidad primero se tiene que definir Qué es la calidad del software.
¿Qué es la calidad del software?
La calidad del software es el conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia. La calidad es sinónimo de eficacia, flexibilidad, corrección, confiabilidad, portabilidad, usabilidad, seguridad e integridad.
La calidad del software es medible y varía de un sistema o programa a otro. Un software hecho para ejecutarse una sola vez no requiere el mismo nivel de calidad mientras que un software para ser explotado durante un largo necesita ser confiable, mantenible y flexible para disminuir los costos.
La calidad del software puede medirse después de elaborado el producto. Pero esto puede resultar muy costoso si se detectan problemas deriva dos de imperfecciones en el diseño, por lo que es imprescindible tener en cuenta tanto la obtención de la calidad como su control durante todas las etapas del ciclo de vida del software.
  • Definiciones:
Exactitud: La información ha de ser exacta. La exactitud se mide en términos de porcentaje de error. Es una medida del alejamiento de la realidad. También aquí la aplicación concreta marcará en cada caso la exactitud que ha de exigirse. No podrá obtenerse la exactitud suficiente si los datos de partidas son incorrectos o erróneos.
Robustez: Capacidad de los productos software de reaccionar apropiadamente ante condiciones excepcionales. La habilidad del sistema para manejar elegantemente entradas inválidas, no debería de ser posible para ninguna entrada del usuario abortar el sistema o corromper la información, incluso si la entrada del usuario es anormal o maliciosa.
Extensibilidad: En informática, la extensión de archivo es una cadena de caracteres anexados al final de un nombre de archivo separados por un punto. Las extensiones suelen determinar el tipo de formato del archivo al que pertenecen y así poder ser reconocido por el sistema operativo o por el programa que lo ejecuta (además de poder ser reconocido los propios usuarios).
Reutilización: En programación, es el uso de software existente para desarrollar un nuevo software. La reutilización de código ha sido empleada desde los primeros días de la programación para sacar partes como plantillas, funciones o procedimientos
Compatibilidad: La compatibilidad se entiende en el ámbito de la informática y la tecnología como la capacidad que tienen dos sistemas de trabajar uno con otro simultáneamente. Y por sistemas entendemos tanto hardware como software, de modo que podemos hallarnos frente a compatibilidad entre dos programas, entre programa y hardware, o directamente entre hardware.
Eficacia: Uso racional de los recursos con que se cuenta para alcanzar un objetivo predeterminado. A mayor eficiencia menor la cantidad de recursos que se emplearán, logrando mejor optimización y rendimiento.
Portabilidad: Capacidad de un sistema de ejecutarse en diferentes plataformas o arquitecturas con mínimas modificaciones
Usabilidad: El término usabilidad es empleado para denotar la facilidad con que las personas pueden utilizar una herramienta en particular. Usabilidad también puede hacer referencia al método de medida de la usabilidad y el estudio de los principios de la elegancia y efectividad de los objetos. La usabilidad tanto de sistemas informáticos, programas, sitios web, y objetos electrónicos, es fundamental y es muy estudiaba por las empresas que los comercializan. Cometer errores en esta área puede llevar al fracaso total de un producto. En informática, la usabilidad suele referirse a la elegancia y claridad con los usuarios pueden interactuar con un programa de computadora, un sitio web, un periférico o un sistema. La usabilidad también hacer referencia al grado de facilidad con que una aplicación, sitio web, periférico o sistema, se adapta a sus usuarios (incluso a usuarios con capacidades disminuidas, ver Tecnología de Asistencia). La usabilidad puede estar relacionada incluso a la Ergonomía, y a la potabilidad de un dispositivo.
Funcionabilidad: En programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento. Una función puede llamarse múltiples veces e incluso llamarse a sí misma (función recurrente). Las funciones pueden recibir datos desde afuera al ser llamadas a través de los parámetros y deben entregar un resultado. Se diferencian de los procedimientos porque estos no devuelven un resultado. En general las funciones deben tener un nombre único en el ámbito para poder ser llamadas, un tipo de dato de resultado, una lista de parámetros de entrada y su código.
Flexibilidad: Respecto a la calidad de un programa, la flexibilidad hace referencia a establecer en qué medida el programa es susceptible de ser cambiado.
Puntualidad: La oportunidad de los datos producidos se refleja en el tiempo transcurrido entre su disponibilidad y el evento o fenómeno que ellos describen, pero considerado en el contexto del período de tiempo que permite que la información sea de valor y todavía se pueda actuar acorde con ella. El concepto aplica igualmente a los datos de corto plazo o de coyuntura, como a los estructurales, la única diferencia es el marco temporal considerado.

Conclusión:
En la construcción del software siempre debe de haber calidad para que este tenga un orden y sea agradable trabajar con el teniendo como base las ideas ya definidas. Una vez teniendo las definiciones será más fácil trabajar con estas ideas aplicándolas a un software para que tenga lo básico de calidad, una vez teniéndolas este software podrá ser productivo para la empresa o el cliente.


GARCIA L.. (2012). DEFINICION DE CALIDAD Y CALIDAD DE SOFTWARE. marzo 3, 2015, de Calidad del software Sitio web: http://es.slideshare.net/lidizzg/definicion-de-calidad-y-calidad-de-software

LEANDRO A. (2014). Diccionario de palabras de Informática. marzo 03, 2015, de INFORMÁTICA Y TECNOLOGÍA Sitio web: http://www.alegsa.com.ar/
VERGARA K. (2007). Nociones básicas de la Informática. MARZO 03, 2015, de INFORMÁTICA Y TECNOLOGÍA Sitio web: http://www.bloginformatico.com/nociones-basicas-de-la-informatica.php
DEVIA W. (2013). Integridad, robustez y estabilidad.. marzo 03, 2015, de INFORMÁTICA Y TECNOLOGÍA Sitio web: http://es.slideshare.net/memodevia/integridad-26651262



Calidad del software Documento