Please enable JavaScript.
Coggle requires JavaScript to display documents.
Cualidades del Software windows-10-actualizaciones - Coggle Diagram
Cualidades del Software
Correctitud
Es funcionalmente correcto si
Cumple requerimientos funcionales
Sin ambiguiedad
Si se presenta ambiguedad
Existen diversas dificultades
Propiedad matemática
Equivalencia entre Software y Especificación
Su evaluación es más
Sistemática
Precisa
Se evalúa con
Diversos métodos
Pruebas
Verificación formal de la correctitud
No considera
Especificaciónes incorrectas por
Inconsistencias internas
No corresponder a las necesidades
Confiabilidad
Software confiable
Informalmente
El usuario puede tenerle confienza
Formalmente
En base a un comportamiento estadístico
Probabilidad de que el software opere como es esperado en ciertos intervalos de tiempo
Es relativa
Software incorrecto aún puede ser confiable
Todos los programas confiables incluyen el conjunto de programas correctos
No a la inversa
Cumple requisitos especificados del modelo
No asegura la adecuación del mismo
Ejemplo
Aplicaciónes correctas diseñadas para requerimientos incorrectos
Correctitud no garantiza el resultado deseado
Productos de Ingeniería son confiables
No los productos del Software
Son liberados con una lista de bugs
Sintoma de inmadurez
Ejemplo
Automóviles
Robustez
Comportamiento estable
aún en situaciones no esperadas
Ejemplos
Entrada incorrecta de datos
Malfuncionamiento de hardware
Podría seguir siendo correcto si
No se especifica en los requerimientos la acción a tomar cuando un error ocurre
Difícil de definir y precisar
Fuertemente relacionado con la
correctitud
Si se incluye un requerimiento
especificado
Software correcto
Si se incluye un requerimiento
no especificado
Software robusto
Relación con la
confiabilidad
No todos los comportamientos incorrectos no son igualmente serios
Algunos comportamientos incorrectos pueden ser tolerados
Performance
Eficiencia
Trabaja con límites cambiantes de acuerdo a la tecnología actual
Lo que se considera caro cambia con los años
La potencia de las computadoras a crecido exponencialmente
Utilizar recursos de forma económica
Importancia
Afecta usabilidad
Puede reducir la productividad de los usuarios
El software puede volverse muy caro de utilizar
El software puede afectar otras apliucaciones que se estén usando
Afecta escalabilidad
Algoritmos pueden funcionar ssolo con entradas pequeñas y derrumbarse con entradas muy grandes
Amigabilidad
Es amigable si un usuario humano lo encuentra fácil de utilizar
Naturaleza ambigua
Depende totalmente del tipo de usuario
Ejemplo
Utilizar comandos para usuarios programadores
Menues para usuarios no expertos
La interfaz es muy importante
Pero no siempre necesaria
Existen sistemas en que solo se inter actua con el hardware u otros sistemas
´Puede ser más importante la facilidad con la que el sistema se configura y adapta a distintos ambientes
Ningun sistema que produzca errores será amigable
Ningun sistema que sea lento será amigable
Verificabilidad
Propiedades importantes a verificar
Correctitud
Performance
Busca que
Las propiedades sean verificadas fácilmente
Contribuyen a la verificalidad de un sistema
Codificación disciplinada
La utilización de lenguajes de programación adecuados
Diseño modular
Generalmente es una cualidad interna
Cuando es externa
El usuario requiere verificar ciertas propiedades
Mantenibilidad
Se divide en dos cualidades
Evolucionabilidad
Acepta cambios para sa
tisfacer nuevos requeriminetos
Para el software en general
Los cambios se hacen sin realizar estudios de factibilidad
Se mantienen
Diseño original
Documentación original
Especificaciones desactualizadas
Cada cambio es más difícil de implementar
Existen casos de softwares exitosos
Poseen larga duración
La 1ra liberación ya viene prevista para el futuro
Cada nueva liberación prepara la siguiente
Ocurren cuando
Se diseña y trabaja con cuidado
Se evoluaciona de buena forma
Se empieza de buena forma (evolucionable)
Pero con el pasar de los años
Se arriesga dañar características antiguas
La aplicación de cambios daña la modularidad
Cualidad del producto y del proceso
Proceso
Se adapta a nuevas técnicas de gestión
Producto
Concepto de "familias de programas"
Que fomentan la evolucionabilidad
Reparabilidad
Corrección de defectos con una carga limitada de trabajo
Generalidades de la ingeniería
Cambiar productos enteros cuando son más baratos que la reparación
Utilizar partes estandándares para reemplazar partes reduciendo costos
No aplica al software
Las partes no se deterioran
Raramente se aplica el concepto de partes reemplazables
El costo del software se determina por
Actividades humanas de diseño
Modularización
Si es adecuada
Ubica los errores a reparar en espacios más limitados
Facilitando localización y eliminación de los mismos
Muchos módulos no equivale a una buena reparabilidad
Influye mucho a la confiabilidad del software
Agregar características
No especificadas inicialmente
Especificadas de forma errónea
El mantenimiento cuesta
Un 60% del costo total del software
Se divide en 3 categorías
Correctivo
Eliminación de errores residuales
Eliminación de errores introducidos en el mantenimineto
20% del costo total de mantenimiento
Adaptativo
Ajusta aplicación a cambios en el entorno
Nuevos tipos de hardware
Una nueva versión del sistema operativo
Cambiar la base de datos
No nace por
Incapacidad de realizar determinada función requerida por el usuario
Errores residuales
Utiliza un 20% del costo total de mantenimiento
Perfectivo
Mejorar algunas de las cualidades
Agregar funcionalidades
Mejorar el performance
Facilitar utilización
Nace por
Querer mejorar el estatus del proyecto
El cliente necesita que se implementes nuevos requeriminetos
Utiliza más del 50% del costo total de mantenimiento
Reusabilidad
Diferencias con evolucionabilidad
Evolucionabilidad
Se modifica un producto para llegar a
otra versión
del mismo
Reusabilidad
Se modifica un producto de forma
menor
para llegar construir
otro producto
Se aplica más apropiadamente a
Componentes de software
Especialmente con un
diseño orientado a objetos
Los requerimientos
u
código
pueden parecidos a los desarrollados en
aplicaciones previas
Herramienta importante para reducir costos de producción
Sin embargo los ejemplos son raros
Es muy difícil
crear productos completos que sean reutilizables
Pero
no imposible
Puede afectar tanto al producto como al proceso
Ejemplo en el producto
Reusabilidad de personas
Conocimientos específicos
Dominio de aplicaciones
Entornos de desarrollo
No es un valor permanente independiente de estas
Ejemplo en el proceso
Metodologías de Software
Intentos de reutilizar el mismo proceso para construir proyectos distintos
Modelos de ciclo de vida
Reutilizar procesos de alto nivel
Enfoque "Replay"
Se reutiliza el proceso
Se modifican requerimientos y se sigue los pasados para la construcción del producto originial
Caracteriza la maduración de un área industrial
Ejemplo
Industria automotriz
Automóviles construidos con partes estandar
Usan modelos producidos por la misma industria
El proceso de manufactura es reutilizado
Se lográ indentificar la inmadurez en el área del software
Está debe evolucionar para alcanzar el nivel de disciplina ingenieril bien establecida
Portabilidad
Puede ser ejectuado en distintos ambientes
Distintos tipos de
Hardware
Mientras más caro el hardware más importa la portabilidad
Software
Sistemas operativos
Existe una proliferación de procesadores y sistemas operativos distintos
Distintas velocidades
Capacidad de memoria
Instrucciones adicionales
Se garantiza
Asumiendo una configuración miníma
El software debe detectar las capacidades del hardware y adaptarse al mismo
Usando modelos de arquitectura que permitan el uso de las facilidades disponibles
Instrucciones de máquina
Facilidades del SO
Comprensibilidad
Existen sistemas de software más fáciles de enteder que otros
Algunas tareas son más complejos que otras
Ejemplo
Predecir el clima vs Imprimir lista de correo
Si las tareas son de similar dificultad
Se pueden usar guías para facilitar su diseño y crear programas más comprensibles
Cualidad intera del producto
Ayuda a lograr
Evolucionabilidad
Verificabildad
Para el usuario el sistema es comprensible si
Su comportamiento es predecible
Es decir, un componente de la Amigabilidad
Interoperabilidad
Habilidad de un sistema para coexistir y cooperar con otros sistemas existentes
Ejemplo
Procesador de texto que permite incluir gráficas de un paquete de gráficos
Es rara en los productos de software
Se aplica a otras ramas de la ingeniería
El caso más conocido es el de UNIX
Usa interfaces estándares con operabilidad limitada
Un solo ambiente
Permite que las aplicaciones tengan una salida estándar
Y entre estas se puedan contectar disitntos sistemas
No puede operar por el mismo con otro sistema operativo
Se relaciona con el concepto de "sistema abierto"
Es una colección extendible de aplicaciones
Usada para
Cooperar funcionando de forma integrada
Facilitar el ingreso de nuevas funcionalidades por parte de otras organizaciones
Distintas aplicaciones escritas por diferentes organizaciones interoperan
Productividad
Cualidad de proceso de Software
Mide eficiencia del proceso
Más eficiencia entrega más rápida
Hacer la medición es bastante difícil
Se hace una métrica para comperar procesos
Cualidad Performance aplicada al proceso
Los ingenieros producen software a una cierta tasa
Esta varía dependiendo de las habilidades de los mismos
La productividad al trabajar en equipo es menor que la suma de las habilidades individuales
Se adoptan distintas soluciones de compromiso al momento de elegir un proceso
Especialización de indiduos
Desarrollar componentes reutilizables
Gracias a la automatización la productividad inevitablemente crece con el tiempo
Oportunidad
Es una cualidad del proceso
Habilidad de entregar el producto a tiempo
Antiguamente no existía esta cualidad
"Crisis del software"
Debido a esto nace la Ingeniería de Software
Aún asi muchos proyectos fracasan en este aspecto
Requiere
Agenda planeada cuidadosamente
Un trabajo de estimación acertado
Puntos de revisión especificados y verificables
Usar técnicas estándares de gestión es complicado en la creación de Software
Es dificíl medir el tiempo que se tarda en crear una pieza de software
Cambio continúo de requerimientos por parte del usuario
Una de estas técnicas es
Liberación incremental del producto
Se liberán subconjuntos del producto completo
Su uso ayuda a redifinir los requerimientos incrementalmente
Depende de la capacidad para partir la funcionalidades
En subconjuntos que se puedan entregar de forma incremental
Utilizando un proceso de
desarrollo incrementa
l
Un
desarrollo no incremental
no permite este tipo de producción
Visibilidad
Todos su pasos y estado actual está documentado
Disponibles además para ser examinados externamente
Incluso pasos intermediarios (Especificación de requerimientos o de diseño)
También tener visibilidad del producto
En muchos proyectos
Los mismos ingenieros desconocen el estado en el que se encuentra el proyecto
Cada uno se dedica solo a lo suyo: Programar, diseñar, testear, etc.
Los riesgos de generar problemas y retrasos son altos
Solo los trabajadores más antiguos conocen la información más crítica del proyecto
Si se va uno de ellos toda la productividad del proyecto decae
Es complicado contratar y capacitar nuevos integrantes
Permite a los ingenieros
Pesar el impacto de sus acciones
Tomar decisiones de foma guíada
Trabajar como grupo hacía una sola dirección
Ejemplo
Se diseña mientras se testea
Se desarma el código mientras se intenta armar
El equipo de trabajo choca entre si
Es una cualidad interna y externa
En el transcurso del proyecto se pedirán informas respecto a la situación actual
Presentaciones formales e informales
Sí se tiene poca visibilidad
Estos informes serán defectuosos
Se generará conflicto con el cliente u los generes del proyecto