La calidad del software se evalúa mediante factores externos e internos. Los factores externos, como corrección, eficiencia, portabilidad y facilidad de uso, son perceptibles para los usuarios y son cruciales para la satisfacción del cliente.
Beneficios esperados de la reutilización del software
Beneficios de reutilizar software:
*Aumento de la productividad
*Disminuye el esfuerzo de mantenimiento
*Aumenta la fiabilidad y eficiencia
Beneficios de producir software reutilizable:
*Preservar la experiencia de los mejores desarrolladores
PROBLEMAS DE REUTILZACIÓN No técnicos:
Cautela respecto al uso del código desarrollado por otros
Se requiere una mayor inversión.
Técnicos:
A pesar de la naturaleza repetitiva de la programación, hacemos las mismas cosas pero no de la misma forma.
Difícil capturar las similitudes.
Se debe permitir la adaptación (P. Abierto-Cerrado)
Requisitos del código reutilizable
Variación de tipos
El algoritmo de búsqueda debería ser aplicable a muchos tipos diferentes de elementos (enteros, reales, etc.)
Variación en estructuras de datos y algoritmos, variación de implementación
El tipo Colección[T] puede estar implementado de diferentes formas (Tabla, Lista, etc.)
Comenzar, Avanzar, Actual, EsUltimo puede estar ligado a diferentes rutinas según sea el tipo de la colección
Agrupar rutinas relacionadas
Definir en un mismo módulo las operaciones de un tipo
Factorizar comportamiento común
Ejemplo: “Una secuencia es un caso particular de colección que puede ser implementada como un array, una lista enlazada, un fichero secuencial, ..”
Evitar repeticiones de código en una familia de módulos relacionados.
Definición incremental: Esquema General y Añadir propiedades específicas.
Requisitos del código reutilizable
Ejemplo: algoritmo de búsqueda de un elemento en una colección secuencial:
NOMBRE: Jordan Arevalo Choez CURSO: 5-4
CALIDAD DEL SOFTWARE
Factores de calidad Internos
Ocultación de Información
“El diseñador de cada módulo debe seleccionar un subconjunto de propiedades de un módulo como información oficial para ponerla a disposición de los autores de módulos clientes ”
Consiste en ocultar los detalles de la implementación al código cliente
*INTERFAZ
parte pública visible a los
clientes
*IMPLEMENTACIÓN
Parte privada visible sólo
dentro del módulo
Auto-documentación: “El diseño de un módulo debería esforzarse para lograr que toda la información relativa al módulo forme parte del propio módulo ”.
Útiles herramientas que generan la documentación de usuario a partir de los módulos documentados
Principio de acceso uniforme
Sea c una variable representando una cuenta bancaria y saldo un servicio proporcionado por el módulo de cuentas bancarias,
c.saldo -> saldo es un campo
saldo(c) -> saldo es una función
Necesitamos constructores sintácticos que nos permitan expresar de la misma manera el acceso a una función y a un atributo.
Cohesión: En el diseño orientado a objetos hay tres tipos de módulos: clases, métodos y paquetes. Con los métodos, podemos adoptar las mismas definiciones que para los procedimientos y funciones del diseño estructurado.
Las clases tendrán alta cohesión cuando se refieran a una única entidad. Podemos garantizar una fuerte cohesión disminuyendo al mínimo las responsabilidades de una clase
Acoplamiento: El acoplamiento mide el grado de relacionamiento de un módulo con los demás. A menor acoplamiento, mejor: el módulo en cuestión será más sencillo de diseñar, programar, probar y mantener.
Una clase, en cambio, tendrá bajo acoplamiento cuando tenga la menor dependencia posible de otras clases. Esta dependencia significa que – si bien puede haber muchas clases que dependen de una – debería haber pocas dependencias hacia otras clases desde una sola.
Principios de diseño modular: Ocultación de Información
Auto-documentación
Acceso Uniforme
Abierto-Cerrado
Elección Única
Factores de calidad externos
6. Eficiencia:
Es la capacidad de un sistema software de requerir la menor cantidad posible de recursos hardware.
7. Portabilidad:
Es la facilidad de transferir productos software a diferentes plataformas (entornos hw y sw)
8.Facilidad de uso: Es la facilidad con la que personas con diferentes niveles de experiencia pueden aprender a usar los productos software y aplicarlos a resolver problemas. También incluye la facilidad de instalación, operación y supervisión.
9.Funcionalidad:
*Conjunto de posibilidades ofrecido por un sistema
*Evitar añadir propiedades de forma incontrolada *Mantener constante el nivel de calidad
10.Oportunidad: Es la capacidad de un sistema software de ser lanzado cuando los usuarios lo desean, o antes
1.Corrección: Es la capacidad de los productos de software de realizar con exactitud su tarea, tal y como es definida en la especificación.
2.Robustez: Es la capacidad de los productos de software de reaccionar adecuadamente ante situaciones excepcionales
3. Extensibilidad: Es la facilidad de adaptación de los productos software a los cambios en la especificación. La dificultad de adaptación es proporcional al tamaño del sistema. Principios esenciales para facilitar la extensibilidad Simplicidad de la arquitectura del software Descentralización: módulos autónomos
4. Reutilización: Es la capacidad de un producto software de ser utilizado en la construcción de diferentes aplicaciones
Se escribe menos software, luego se puede dedicar mas tiempo a mejorar otros factores como la fiabilidad (corrección y robustez)
5. Compatibilidad: Es la facilidad de combinar unos elementos software con otros
EI término ingeniería de software fue acuñado en 1968 como una respuesta al nivel de progreso desolador del objetivo de desarrollar software de calidad a tiempo y dentro del presupuesto.
No se era capaz de definir objetivos concretos, predecir los recursos necesarios para lograr esos objetivos.
Con mucha frecuencia se prometía la luna y la construcción de un vehículo lunar, y se entregaba un par de ruedas cuadradas.
Factores externos:
*Pueden ser detectados por los usuarios
*Calidad externa es la que realmente preocupa
Factores internos:
*Sólo lo perciben los diseñadores e implementadores
*Medio para conseguir la calidad externa.
Problemas en la creación de software
A finales de los 60 se acuñó el término crisis del software:
*Los proyectos no cumplían los plazos y presupuestos.
Dificultades inherentes a la naturaleza del software:
* Complejidad
* Dificultad de enumerar todos los estados posibles del programa.
*Dominios de aplicación complejos
*Dificultad de comunicación entre los miembros del equipo
Sujeto a continuos cambios
Fallas de la Ing. Software
Error del año bisiesto
A un supermercado le pusieron una multa de 1,000 dólares por tener carne que había caducado por un día, el 29 de febrero de 1988. El programa de computadora que imprimió la fecha de caducidad en las etiquetas de la carne no tomó en cuenta que 1988 era año bisiesto. Entrega a tiempo
Después de 18 meses de desarrollo, se entrego un sistema de 200 millones de dólares a una compañía de seguros de salud en Wisconsin en 1984. Sin embargo, el sistema no funcionó en forma correcta: se expidieron 60 millones de dólares de pagos extras. Se necesitaron tres años para componer el sistema.
Cada una de las fallas descritas antes se debió a un problema relacionado con software. En algunos casos los desarrolladores no anticiparon situaciones que ocurren rara vez (una persona que vive más de cien años, años bisiestos que tienen un impacto en las fechas de caducidad).