jueves, 23 de abril de 2015

Cualidades del Software

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