En los primeros años de desarrollo de las computadoras, el hardware sufrió continuos cambios, mientras que el software se contemplaba simplemente como un añadido. La programación de computadoras era un arte para el cual existían pocos métodos sistemáticos. El desarrollo de software se realizaba virtualmente sin ninguna planificación. Durante este período se utilizaba en la mayoría de los sistemas una orientación por lotes.
Lo normal era que el hardware fuera de propósito general. Por otra parte, el software se diseñaba a medida para cada aplicación y tenía una distribución relativamente pequeña. La mayoría del software se desarrollaba y era utilizado por la misma persona u organización. La misma persona lo escribía, lo ejecutaba y, si fallaba, lo depuraba. Debido a este entorno personalizado del software, el diseño era un proceso implícito, realizado en la mente de alguien, y la documentación normalmente no existía.
Cualidades de Software: “Es
el conjunto de cualidades que determina su utilidad. Es el grado en que el
software cumple con los requisitos especificados (eficiencia, flexibilidad,
corrección, mantenimiento seguridad e integridad, entre otros). La cualidad del
software es medible y varía según el tipo de sistema y de programa, por ejemplo
no es lo mismo un software para control de viajes el cual deba ser confiable a
un nivel de cero errores que un software elaborado para la implementación de un
sistema de calidad” (EcuRed,
2015)
Dichas cualidades son las siguientes:
·
Robustez: Es la capacidad de los
productos software de reaccionar apropiadamente ante condiciones excepcionales.
La robustez viene a ser el complemento de la corrección. En implementación se
cuenta con el mecanismo de excepciones el cual garantiza el correcto flujo de
ejecución del código
·
Corrección: Un sistema es
correcto si hace lo que el cliente necesita. Dicho de otra forma, un sistema es
correcto si su resuelve el problema real que causó su desarrollo.
·
Eficiencia o Performance: tenemos
dos dimensiones posibles para medir la eficiencia (tiempo/recursos) de un
sistema:
o Recursos
necesarios para la construcción (tiempo de desarrollador)
o Recursos
necesarios para la ejecución (tiempo de usuario + hardware)
Tiene mejor
eficiencia el sistema que necesita menos recursos para realizar
una tarea determinada, por lo tanto deberíamos considerar ambas
dimensiones a la hora de medir esta cualidad.
·
Claridad: Se refiere a la posibilidad
de entender el funcionamiento de un sistema, subsistema o una porción de código
cualquiera, su objetivo y la forma de solucionar el problema; en particular por
gente que no es la que lo construyó. La claridad de un módulo afecta claramente
a las posibilidades de modificarlo.
·
Flexibilidad: es
la capacidad que tiene un sistema para reflejar cambios percibidos en el
dominio (sea por mejor comprensión del mismo o porque de verdad cambió) de una
manera simple y sencilla. Conceptos relacionados son:
o Extensibilidad: un
sistema es extensible cuando pueden incorporarse nuevas características al
mismo sin mayor impacto sobre las características actuales.
o Mantenibilidad: un
sistema o desarrollo es más mantenible cuanto menor esfuerzo requiere
para que el sistema siga funcionando en condiciones distintas a las originales
e incluso en las originales. Entre estas tareas podríamos enumerar:
-Pequeños
cambios de funcionalidad o parametrización (aquí se relaciona con la
flexibilidad)
- Posibilidad de
corregir las incongruencias producidas por los propios errores del
software
- Posibilidad
de hacer cualquier tipo de cambio sobre el sistema mientras este
sigue funcionando.
·
Consistencia: el
sistema debe comportarse siempre de la misma manera ante un mismo evento y
las tareas similares deben poder realizarse siguiendo
pasos similares.
·
Simplicidad: el sistema debe ser
simple tanto en la interfaz como en la implementación. Es más importante
la simplicidad en la interfaz que en la implementación.
·
Completitud: Un sistema es
completo cuando contempla todas las posibles situaciones a darse en la
práctica.
·
Encapsulamiento o Modularidad:
poder agrupar unidades funcionales me permite que el sistema sea cohesivo,
reduciendo la complejidad del sistema y aumentando en cierta forma su
flexibilidad.
·
Escalabilidad: la facilidad con la
que un sistema pensado originalmente para una carga determinada puede ser
adaptado para soportar una carga mayor. Las aplicaciones Web nos dan una
buena muestra de cuándo la escalabilidad puede ser importante para no
afectar 1) la imagen del usuario que da vida a nuestro sistema, 2) la
imagen corporativa del negocio que manejamos
·
Abstracción: un sistema debería
contener buenas abstracciones de la realidad. Recordemos que el sistema no
es la realidad, sino un modelo. En base a nuestras abstracciones podemos
definir:
o Reusabilidad:
la posibilidad de utilizar un sistema construido anteriormente para
resolver un problema nuevo.
o Genericidad:
Un sistema o subsistema es genérico cuando se puede aplicar a un conjunto
de situaciones similares.
En general reusabilidad
y genericidad están relacionadas, un sistema muy específico
difícilmente puede ser reutilizado.
·
Utilidad: no está de más
recordar que el sistema debe ser útil al usuario.
·
Seguridad: Un sistema seguro
debe impedir que agentes (personas u otros sistemas) no autorizados realicen
acciones sobre el sistema.
Elección de
cualidades
Al
momento de analizar y profundizar en las cualidades del software, el diseñador
del mismo debe tomar en consideración las cualidades que debería poseer un
software, más sin embargo esto depende del tipo de software a realizar y su
función. Por lo tanto se debe tomar en cuenta lo siguiente:
1.
Si estamos construyendo un sistema provisorio cuyo tiempo de vida estimado es
de 6 meses, no necesito pensar en la mantenibilidad.
2.
Si soy responsable de un sistema de control de un avión que por diseño no
va a cambiar, la flexibilidad no me parecerá importante pero la
performance será crítica.
Los
objetivos son lo que se necesita de acuerdo a las condiciones de cada proyecto,
las cualidades ayudan a lograr lo que se necesita.
Relación entre
cualidades
·
Robustez: Tener un buen
conjunto de test unitarios, reduce el desconocimiento y el miedo (tanto para
quien lo desarrolla como para quien lo usa) Aumenta la predictibilidad
del sistema por lo tanto lo hace más robusto. Por lo que aumenta
la robustez. El tratamiento adecuado de los errores no sólo me brinda más
información cuando algo falla, sino que al prever situaciones de anomalía el
sistema tolera esas fallas y se vuelve más robusto.
Algunas
consideraciones:
·
La robustez se obtiene a un costo y hay que
evaluar el costo/beneficio (testing). finalmente uno elige cuándo ser robusto y
cuándo no
·
En la tensión robustez vs. flexibilidad está
el juego de los lenguajes tipados vs. no tipados. Java valora
más la robustez, Smalltalk valora más la flexibilidad.
·
Flexibilidad:
• Pensar en conceptos como
cohesión y acoplamiento, y en hacer las cosas sólo en un lugar (once
and only once) impacta en varias cualidades, por ejemplo robustez
y flexibilidad.
• Aplicar patrones me
agrega flexibilidad, con un costo asociado que es la indirección (le
resta simplicidad a la solución)
• El
patrón Decorator calza con el concepto de extensibilidad
·
Calidad: Los lenguajes declarativos
que vieron en Paradigmas de Programación nos permiten aumentar la expresividad
diciendo las mismas cosas que en los lenguajes procedimentales pero con menor
esfuerzo. Ser más expresivo me permite comunicar las cosas en forma más simple
y clara, aunque en este aspecto también depende del lenguaje que hablen los
demás interlocutores (desarrolladores).
Modelos de calidad
Los
modelos de calidad son aquellos que a través de las cualidades de un software
permiten definir el nivel de calidad de un software, existen dos modelos más
resaltantes en el desarrollo de software, los cuales son:
·
Modelos de McCall
·
Modelos de Boehm
Modelos de McCall
El
modelo de McCall fue el primero en ser presentado en 1977. Se focaliza en
el producto final identificando atributos claves desde el punto de vista
del usuario. Estos atributos se denominan factores de calidad y son
normalmente atributos externos. Pero también se incluyen algunos atributos
posiblemente internos. 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.
Factores de Calidad
McCall
propone tres perspectivas para agrupar los factores de calidad:
·
Revisión del producto habilidad para ser
cambiado.
·
Transición del producto adaptabilidad al
nuevo ambiente.
·
Operación del producto características de
operación
Factores de Calidad de
Revisión
La revisión del producto
incluye los siguientes factores de calidad:
·
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
Factores de Calidad de
transición
La transición del producto
incluye los siguientes factores de calidad:
·
Potabilidad 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
Factores de Calidad de
Operación
La operación del producto
incluye los siguientes factores de calidad:
·
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
Modelos de Boehm
El segundo modelo de
calidad más conocido es presentado por Barry Boehm en 1978. Este
modelo introduce características de alto nivel, características de nivel
intermedio y características primitivas, cada una de las cuales contribuye al
nivel general de calidad.
Características de Alto
Nivel
Las características de alto
nivel representan requerimientos generales de uso pueden ser:
·
Utilidad per-se cuan (usable, confiable,
eficiente) es el producto en sí mismo
·
Mantenibilidad cuan fácil es modificarlo,
entenderlos y retestearlo.
·
Utilidad general si puede seguir usándose si
se cambia el ambiente
Diferencia entre
McCall y Boehm.
Ejemplo de aplicación de dichas cualidades para un portal bancario.
Los
portales bancarios poseen características adicionales de seguridad,
funcionalidad y disponibilidad que hacen más exigente al usuario del portal con
respecto a los usuarios de otros portales web. Por lo tanto cuentan con
las siguientes cualidades para su elaboración:
1. Empatía:
Se refiere a la capacidad del portal para proporcionar atención
individualizada y ayuda. Dentro de esta característica hemos
distinguido:
a.
Navegabilidad: El portal debe poder brindar a los usuarios un sistema de
navegación que les sea intuitivo y fácil de utilizar.
b.
Personalización: Se debe permitir a los usuarios personalizar sus
servicios, de manera que se logre reducir el esfuerzo necesario para el
uso del portal y se alcance una mayor satisfacción de los clientes.
2. Usabilidad:
Se define como la capacidad de un producto software de ser comprendido,
aprendido, usado, atractivo de acuerdo con las reglamentaciones y
guías de usabilidad y dentro de esta característica se
encuentra:
a.
Grado de atracción: El portal debe poder satisfacer los deseos de los usuarios,
no solo mediante la apariencia visual, sino también mediante sus
servicios, y el grado de satisfacción que los usuarios alcancen mediante
su uso.
b.
Accesibilidad: Se refiere a la libertad que tienen los usuarios para usar
datos, definir y/o refinar la forma en que la información es introducida,
procesada o presentada a ellos
c.
Capacidad de aprendizaje: Se enfoca en la cantidad de esfuerzo que necesita un
usuario para aprender a utilizar los servicios y funcionalidades presentes
en el portal.
3. Eficiencia: Capacidad
de un producto software de proporcionar un rendimiento apropiado, de acuerdo a
la cantidad de recursos utilizados y bajo condiciones
específicas. Esta característica contempla:
a.
Tiempo de respuesta: Se enfoca en los tiempos de respuesta ante una petición
del usuario. Existen varios tiempos de respuesta importantes para un
portal bancario: el tiempo que tarda la solución en indicarle al
usuario que está atendiendo su petición (barra de estado o barra de progreso) y
el tiempo que tarda la solución entregándole la respuesta final, ya sea
positiva o negativa mediante un mensaje de error.
4. Seguridad: Representa
la capacidad del producto software para lograr prevenir el acceso no
autorizado, bien sea accidental o deliberado, a programas y datos”. Para
esta característica se distingue:
a.
Integridad: El portal debe proteger los datos e información de manera que
no se presenten modificaciones mal intencionadas o no autorizadas.
b.
Confidencialidad: Se enfoca en mantener la privacidad de los
usuarios.
c.
Tolerancia a fallos: Se refiere a la capacidad de brindar una respuesta
transparente al usuario, frente a situaciones de fallos, errores o
ataques. En todo momento, el portal debe recuperarse a la mayor brevedad
y afectar lo menos posible los servicios de los usuarios.
5. Funcionalidad:
Es la capacidad de un producto software de satisfacer los requerimientos
funcionales establecidos y las necesidades implícitas de los
usuarios dentro de la cual se distingue:
a. Mantenibilidad: El
portal debe estar construido de forma que sea sencillo de mantener y
actualizar.
b.
Interoperabilidad: Se enfoca a la habilidad del portal de interactuar con
otros sistemas y servicios.
c. Servicios
disponibles: el portal debe poseer la mayor cantidad de servicios y estar
disponibles las 24 horas
CONCLUSIÓN
Es muy importante tener en cuenta las cualidades de los softwares cuando se desarrolle el mismo, pues esto permitirá obtener un software de calidad que permita satisfacer las necesidades del cliente, pudimos aprender cómo a través de las cualidades puede definirse un modelo de software para un portal web o para desarrollar un sistema de información cual sea.
La evolución del software juega un rol muy importante en las computadoras, lo cual se ha convertido en el blanco de los desarrolladores para optimizar día tras día un software, y que a su vez cuente con las cualidades necesarias para obtener un software de calidad.
Para la realización del mismo, se deben tomar las precauciones posibles en su desarrollo, como por ejemplo, que las cualidades bien definidas deben ser requeridas dependiendo del diseño del software.
BIBLIOGRAFÍA
Córdoba, J. (6 de Abril de 2007). Modelo de Calidad para Portales Bancarios. Alicante, España.
Definicionabc. (21 de Abril de 2015). Obtenido de http://www.definicionabc.com/general/cualidad.php.
EcuRed. (21 de Abril de 2015). Obtenido de http://www.ecured.cu/index.php/Calidad_de_software.
García, M. (2 de Junio de 2003). Recuperado el 21 de Abril de 2015, de http://www.saber.cic.ipn.mx/cake/SABERsvn/trunk/Repositorios/webVerArchivo/365/1
Passerini, N. (15 de Septiembre de 2005). Cualidades del Software. Recuperado el 21 de Abril de 2015, de http://tadp.wdfiles.com/local-files/material/CualidadesSoftware.pdf


0 comentarios:
Publicar un comentario