Así como la calidad en sí, la calidad del software es un proceso de
mejora continua que lleva consigo el cumplimiento de ciertos requisitos a
través de los cuales se forma una métrica correspondiente para el estudio de
esta. A continuación se explicarán, así como se propondrán ciertas ecuaciones
para su respectivo cálculo.
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 la 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.
Otro de los aspectos a considerar es la exactitud de la cual se puede decir que:
- Es la base de
un software
- Es un factor externo que se logra a través de los requerimientos
funcionales del software y tiene que lograr sus objetivos
- 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:
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.
Además, ¿Qué es indispensable
para las empresas desarrolladoras de software? Cumplir con la responsabilidad.
Por ello la puntualidad se juega un
papel imperativo.
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.
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”.
Otro concepto de gran
importancia es la funcionalidad ya
que busca hacer un balance entre las funciones necesarias para que un software
funcione y las que son innecesarias pues al enfocarse en mayor medida a éstas
pueden retrasar el avance del proyecto.
Un ejemplo muy claro
de cuando no se aplicó la funcionalidad fue en Facebook entre 2011-2012 pues se
incluyó una actualización en la presentación de las biografías de todos los
usuarios lo que dificultó a muchos sus acciones en la red social, perdiendo su
funcionalidad.
Métrica sobre la
Funcionalidad
Deberá cumplir con 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:
Pero así como hay que
tener en cuenta sólo agregar las funciones necesarias también es importante
tener en cuenta que en cualquier momento pueden surgir condiciones anormales y
para esto debemos tener presente la robustez.
La robustez se define
como la respuesta del software a eventos no planificados o fuera del uso normal
de éste, si el software no se derrumba a la hora de una acción imprevista o
ante un uso inapropiado, podremos decir que cuenta con robustez.
La reutilización juega un papel muy
importante porque al volver a utilizar funciones nuestro trabajo será menor y
así podremos dedicar más atención a aspectos como la robustez y exactitud.
Entonces ¿Qué es la
reutilización?
El concepto de
reutilización dentro del software puede aplicarse de distintas maneras al
momento de usarlo.
- 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
- Es la creación de un sistema a partir de alguno ya existente
Pero la forma de
definirla 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.
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 fórmula que establecimos como
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.
Pero ¿De qué nos
serviría todo lo anterior si nuestro software no es fácil de usar?
Podemos definir el
fácil uso como 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.
La cual se puede medir de acuerdo al tiempo que se tarde una persona con conocimientos nulos sobre el sistema.
De acuerdo con lo anterior , la ecuación queda asi:
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”.
Otro concepto no
menos importante es la compatibilidad
pues ¿Para qué queremos un software si no es compatible con nuestro sistema
tiene problemas al interactuar con otros softwares?
La compatibilidad es:
- 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.
Podemos medir la
compatibilidad de la siguiente manera:
¿Podríamos decir que
un software tiene calidad si no busca mejorar continuamente?
La extensibilidad significa
que el sistema está diseñado para incluir ganchos y los mecanismos para la
expansión/mejora del sistema con capacidades previstas sin tener que hacer
cambios importantes en la infraestructura del sistema. También puede significar
que el comportamiento de un sistema de software se puede modificar en tiempo de
ejecución, sin necesidad de recompilar o modificar el código fuente original.
Por ejemplo, un sistema de software puede tener una interfaz de programación de
aplicaciones de público que permite su comportamiento para ser ampliado o
modificado por personas que no tienen acceso al código fuente original.
La extensibilidad juega un papel importante en la calidad del software
debido a que gracias a esta se facilita el mantenimiento del software así como
futuras implementaciones o mejoras y para evitar la obsolescencia
Un ejemplo de extensibilidad es cuando hacíamos proyectos escolares en
java y trabajábamos Programación Orientada a Objetos, programábamos los
requerimientos en diferentes módulos o clases, lo que hacía que si había un
error en el programa, se tuviera que corregir solo el código de esa clase y no
tener q buscar el error en el sistema y cambiar todo el código para arreglarlo
Una forma de medir la extensibilidad es con la siguiente formula:
Por último tenemos la portabilidad que también es
indispensable pues de éste modo cualquier persona aunque tenga diferentes tipos
de hardware o software podrá utilizar el sistema.
La portabilidad es la facilidad
que tiene un software para adaptarse a distintos ambientes de software y hardware.
Un software portable es aquél
que, independientemente del sistema operativo sobre el que se esté trabajando y
el hardware con el que cuente un computador, pueda funcionar sin ningún
problema.
Los programas que realizábamos
en Java son un ejemplo de software portable, pues así fuera iOs o Windows,
dichos programas se podían ejecutar sin ningún problema, sin embargo algunas
computadoras ejecutan más rápido los programas u otras no identifican los caracteres
que otras si pueden interpretar.
En general no sólo se busca software porque si, siempre tenemos en cuenta, -aunque no tengamos conocimientos en calidad-, que sea de nuestro beneficio. Principalmente, algo en lo que siempre nos fijamos en algún software es que sea exacto, que haga lo que dice que hace, de lo contrario, ¿Para que lo descargamos?¿Para qué lo tenemos si no nos va a funcionar?. Muy pocas veces encontramos software no exacto. Después, lo segundo que nos podemos fijar es en la facilidad en la que podemos utilizar dicho software, si no le entendemos, lo más seguro es que nos aburra o nos desespere, aunado a esto está la rapidez con la que corra en nuestra computadora, etc.
En fin, conociendo poco o acerca de los factores de la calidad del software, siempre la buscamos, e incluso la exigimos. El reto es para quien desarrolla y vende software.