Software: El software es un ingrediente indispensable para el funcionamiento del computador. Está formado por una serie de instrucciones y datos, que permiten aprovechar todos los recursos que el computador tiene, de manera que pueda resolver gran cantidad de problemas. Un computador en si, es sólo un conglomerado de componentes electrónicos; el software le da vida al computador, haciendo que sus componentes funcionen de forma ordenada.
Ingeniería.
1. f. Estudio y aplicación, por especialistas, de las diversas ramas de la tecnología.
Cualidades del software.
Correctitud (Correctness):
Un programa es funcionalmente correcto si se comporta de acuerdo a la especificación de las funciones (especificación de requerimientos funcionales) que debería proveer. Esta definición de correctitud asume que existe una especificación de requerimientos funcionales del sistema y que es posible determinar en forma no ambigua si las cumple o no.
Confiabilidad (Reliability):
Informalmente el software es confiable si el usuario puede tenerle confianza. Formalmente la confiabilidad
se define en términos del comportamiento estadístico: la probabilidad de que el software opere como es
esperado en un intervalo de tiempo especificado. Contrariamente a la correctitud que es una cualidad
absoluta, la confiabilidad es relativa. Cualquier desviación de los requerimientos hace que el sistema sea
incorrecto, por otro lado, si la consecuencia de un error en el software no es seria, el software incorrecto
aún puede ser confiable.
Robustez (Robustness):
Un progama es robusto si se comporta en forma razonable aún en circunstancias que no fueron anticipadas
en la especificación de requerimientos; por ejemplo cuando encuentra datos de entrada incorrectos o algún
malfuncionamiento del hardware como rotura de disco. Un programa que genere un error no recuperable en
tiempo de ejecución tan pronto como el usuario ingrese inadvertidamente un comando incorrecto no será
robusto, aunque podría ser correcto si en la especificación de requerimientos no se establece la acción a
tomar si se ingresa un comando incorrecto.
Performance (también Eficciency):
En la Ingeniería de Software generalmente performance equivale a eficiencia. Un sistema de software es
eficiente si utiliza los recursos computacionales en forma económica. La performance de un sistema es
importante porque afecta su usabilidad, por ejemplo, si es muy lento reduce la productividad de los
usuarios, si usa demasiado espacio de disco puede ser muy caro de ejecutar, si utiliza demasiada memoria
puede afectar al resto de las aplicaciones que se están ejecutando o ejecutarse demasiado lentamente
mientras el sistema operativo intenta balancear el uso de la memoria por parte de las distintas aplicaciones.
Amigabilidad (Friendliness):
Un sistema de software es amigable si un usuario humano lo encuentra fácil de utilizar. Esta definición
refleja la naturaleza subjetiva de la amigabilidad: una aplicación utilizada por usuarios no experientes califica
como amigable por varias propiedades distintas a las de una aplicación utilizada por programadores
expertos, por ejemplo, los primeros apreciarían el uso de menúes mientras los segundos se sentirían más
cómodos ingresando comandos.
Verificabilidad (Verifiability):
Un sistema de software es verificable si sus propiedades pueden ser verificadas fácilmente. Por ejemplo, la
correctitud o la performance de un sistema son propiedades que interesa verificar. El diseño modular,
prácticas de codificación disciplinadas, y la utilización de lenguajes de programación adecuados contribuyen
a la verificabilidad de un sistema. La verificabilidad es en general una cualidad interna pero a veces también puede ser externa, por ejemplo, en muchas aplicaciones de seguridad crítica, el cliente requiere la verificación de ciertas propiedades.
El término mantenimiento del software es utilizado generalmente para referirse a las modificaciones que se
realizan a un sistema de software luego de su liberación inicial, siendo visto simplemente como “corrección
de bugs”. Algunos estudios han mostrado sin embargo, que la mayor parte del tiempo utilizado en
mantenimiento es para agregarle al producto características que no estaban en las especificaciones
originales o estaban definidas incorrectamente.
Reparabilidad (Reparability):
Un sistema de software es reparable si permite la corrección de sus defectos con una carga limitada de
trabajo. En otros campos de la ingeniería puede ser más barato cambiar un producto entero o una buena
parte del mismo que repararlo, por ejemplo televisores, y una técnica muy utilizada para lograr reparabilidad
es usar partes estándares que puedan ser cambiadas fácilmente. Sin embargo, en el software las partes no
se deterioran, y aunque el uso de partes estándares puede reducir el costo de producción del software, el
concepto de partes reemplazables pareciera no aplicar a la reparabilidad del software. Otra diferencia es que el costo del software está determinado, no por partes tangibles sino por actividades humanas de diseño.
Evolucionabilidad (Evolvability):
Un sistema es evolucionable si acepta cambios que le permitan satisfacer nuevos requerimientos. En otros
productos de ingeniería las modificaciones van precedidas de actividades como estudios de factibilidad,
diseño asociado, aprobaciones, evaluaciones y finalmente la introducción de la modificación. En el caso del
software, en general la implementación del cambio se comienza sin realizar ningún estudio de factibilidad,
dejando únicamente el diseño original y sin documentación a posteriori, esto es sin actualizar las
especificaciones para reflejarlo, lo que hace que cambios futuros sean cada vez más difíciles de aplicar.
Reusabilidad (Reusability):
La reusabilidad es similar a la evolucionabilidad: en la segunda se modifica un producto para construir una
nueva versión del mismo producto, en la primera se utiliza un producto, posiblemente con modificaciones
menores, para construir otro producto. Un ejemplo de un producto reusable es el shell de UNIX que además de aceptar comandos de usuario y ejecutarlos, puede ser iniciado mediante un archivo que contenga una lista de comandos del shell, lo que permite escribir programas (scripts) en el lenguaje de comandos del
shell, por lo que puede verse el programa como un nuevo producto que utiliza el shell como componente.
Puede parecer más apropiado aplicar este término a componentes del software que a productos completos,
pero es ciertamente posible construir productos que sean reusables. Aunque es una herramienta importante
para reducir los costos de producción del software, los ejemplos de reusabilidad son raros.
Portabilidad (Portability):
El software es portable si puede ser ejecutado en distintos ambientes, refiriéndose este último tanto a
plataformas de hardware como a ambientes de software como puede ser determinado sistema operativo. Si
bien se ha transformado en un tema importante debido a la proliferación de procesadores y sistemas
operativos distintos, puede ser importante incluso en una misma familia de procesadores debido a las
variaciones de capacidad de memoria e instrucciones adicionales, por lo que una forma de lograr
portabilidad es asumir una configuración mínima y utilizar un subconjunto de las facilidades provistas que se
garantiza estarán disponibles en todos los modelos de la arquitectura, como instrucciones de máquina y
facilidades del sistema operativo. También es necesario utilizar técnicas que permitan al software determinar
las capacidades del hardware y adaptarse a éstas.
Comprensibilidad (Understandability):
Algunos sistemas de software son más fáciles de comprender que otros, algunas tareas son inherentemente
más complejas que otras. Por ejemplo, un sistema que realiza predicción del clima, sin importar lo bien que
esté escrito, será más difícil de comprender que uno que imprime una lista de correo. Dadas dos tareas con
dificultad similar, se pueden seguir ciertas guías para producir diseños y escribir programas más
comprensibles.
Interoperabilidad (Interoperability):
La interoperabilidad se refiere a la habilidad de un sistema de coexistir y cooperar con otros sistemas, por
ejemplo, la habilidad de un procesador de texto de incluir gráficas producidas por un paquete de gráficos.
Aunque rara en los productos de software, la interoperabilidad abunda en otros productos de la ingeniería,
por ejemplo, estéreos de distinta marca pueden conectarse juntos y también a televisiones y
videograbadores, de hecho equipos producidos hace décadas se adaptan a nuevas tecnologías como discos
compactos, mientras que casi todos los sistemas operativos tuvieron que ser modificados – en algunos casos significativamente – antes de que pudieran trabajar con los nuevos discos ópticos.
Productividad (Productivity):
La productividad es una cualidad del proceso de producción de software, mide la eficiencia del proceso y
como se vio antes, es la cualidad de performance aplicada al proceso. Un proceso eficiente resulta en una
entrega más rápida del producto.
Oportunidad (Timeliness)
La oportunidad es una cualidad del proceso que se refiere a la habilidad de entregar un producto a tiempo.
Históricamente los procesos de producción de software no han tenido esta cualidad lo que llevó a la llamada “crisis del software” que a su vez trajo aparejada la necesidad y el nacimiento de la ingeniería de software.
Incluso actualmente muchos procesos fracasan en lograr sus resultados a tiempo.
Visibilidad (Visibility):
Un proceso de desarrollo de software es visible si todos sus pasos y su estado actual son claramente
documentados. Otros términos utilizados son transparencia y apertura. La idea es que los pasos y el estado
del proyecto están disponibles y fácilmente accesibles para ser examinados externamente.
A partir de: Fundamentals of Software Engineering – Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli.
Factores de calidad del software.
En los factores que podemos nombrar para que el cliente sienta satisfacción en todas sus necesidades en la presencia del software ya desarrollado serian;
- Corrección.
- Fiabilidad
- Eficiencia
- Seguridad
- Facilidad
Ingeniería del software.
Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software o podemos citar a Zelkovitz, el cual dice que es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software. Pero en fin solo se busca el desarrollo de un software rentable y estable para coda uso en el área de trabajo.

No hay comentarios.:
Publicar un comentario