Tipos de Software y sus Cualidades

Anuncio
Tipos de Software y sus Cualidades
Tipos de software y su desarrollo
• Para realizar una tarea en una computadora, es necesario
darle instrucciones a través del software. Software es el
nombre asignado a las aplicaciones o programas que se
ejecutan en la computadora.
• El contenido y el determinismo de la información son
factores importantes a considerar para determinar la
naturaleza de una aplicación de software. El contenido se
refiere al significado y a la forma de la información de
entrada y salida.
• Algunas veces es difícil establecer categorías genéricas para
las aplicaciones del software que sean significativas.
2
Tipos de software y su desarrollo
•
•
•
•
•
•
•
•
Software de Sistemas
Software de Tiempo Real
Software de Gestión
Software de Ingeniería y científico
Software empotrado
Software de computadoras personales
Software basado en Web
Software de Inteligencia Artificial
3
Software de Sistemas
• Programas que han sido escritos para servir a otros programas.
• Se caracterizan por una fuerte interacción con el hardware de la
computadora
• Compartir recursos
• Sofisticada gestión de procesos
• Estructuras de datos complejas
• Múltiples interfaces externas
• Ejemplo: compiladores, editores y utilidades de gestión de archivos,
ciertos componentes del sistema operativo, utilidades de manejo
de periféricos, procesadores de telecomunicaciones, etc.
4
Software de Tiempo Real
• Coordina/analiza/controla sucesos del mundo
real conforme ocurren.
• Integra diferentes componentes:
–
–
–
–
–
Recolección de datos
Dar formato a la información recibida del exterior
De análisis para transformar la información
De Control/salida que responda al exterior
De Monitorización que coordine a todos los
componentes
– En un tiempo de entre 1 milisegundo a 1 segundo.
5
Software de Gestión
• El proceso de la información comercial constituye la
mayor de las áreas de aplicación del software.
• Han evolucionado hacia el software de sistemas de
información de gestión (SIG) que accede a una o más
bases de datos que contienen información comercial
• Por ejemplo: nóminas, cuentas de haberes-débitos,
inventarios, etc.
• Se realizan tareas convencionales de procesamientos
de datos
6
Software de Ingeniería y científico
• Está caracterizado por los algoritmos (conjunto finito de
instrucciones o pasos que sirven para ejecutar una tarea o resolver
un problema ) de manejo de números
• Ejemplo: Astronomía, vulcanología, análisis de la presión de los
automotores, dinámica orbital de las lanzaderas espaciales, biología
molecular, fabricación automática.
•
• Pero las nuevas aplicaciones del área de ingeniería se han alejado
de los algoritmos convencionales numéricos. El diseño asistido por
computadora (del inglés CAD), la simulación de sistemas y otras
aplicaciones interactivas, han comenzado a coger características del
software de tiempo real e incluso del software de sistemas.
7
Software empotrado
• Reside en memoria de sólo lectura
• Se utiliza para controlar productos y sistemas
de los mercados industriales y de consumo
• Ejecuta funciones muy limitadas
• Ejemplo: El control de las teclas de un horno
de microondas, control de la gasolina de un
automóvil, sistemas de frenado, etc.
8
Software de computadoras personales
• El mercado del software de computadoras personales
ha germinado en las pasadas dos décadas.
Aplicaciones que pertenecen a esta categoría:
–
–
–
–
–
–
–
–
El procesamiento de textos
Hojas de cálculo
Los gráficos por computadora
Multimedia
Entretenimientos
Gestión de bases de datos
Aplicaciones financieras, de negocios y personales
Redes o acceso a bases de datos externas
9
Software basado en Web
• Las páginas Web buscadas por un explorador son
software que incorpora instrucciones ejecutables
(por ejemplo, HTML, Perl, o Java), y datos (por
ejemplo, hipertexto y una variedad de formatos
de audio y visuales).
• En esencia, la red viene a ser una gran
computadora que proporciona un recurso
software casi ilimitado que puede ser accedido
por cualquier persona con un MODEM.
10
Software de Inteligencia Artificial
• Este tipo de Software hace uso de algoritmos
no numéricos para resolver problemas
complejos para los que no son adecuados el
cálculo o el análisis directo.
• Ejemplos:
• Los sistemas expertos, reconocimiento de
patrones (imágenes y voz), redes neuronales
prueba de teoremas y juegos.
11
Características que diferencian a un
software de otro.
• Complejidad
• Significado y forma de la información de
entrada y salida.
• Compartir recursos
• La interacción con el Hardware (HW)
• El objetivo para lo que fueron diseñados
12
Cualidades del Software
• ¿Qué es un buen software?
Clasificación de las cualidades
• Externas: son visibles a los usuarios.
• Internas: son visibles a los desarrolladores.
• Del producto: son observables en los distintos
productos y subproductos del ciclo de vida.
• Del proceso: describen a la forma en que el
producto es producido.
Cualidades del Software
•
•
•
•
•
Correcto (Correctness)
Confiable (Reliability)
Robusto (Robustness)
Eficiente (Eficciency)
“Amigable”
(Friendliness )
• Verificable (Verifiability)
• Reusable (Reusability)
• “Portable” (Portability)
• Interoperable
(Interoperability)
• Productivo (Productivity)
• A tiempo (Timeliness)
• Visible (Visibility)
• Cohesivo
• Desacoplado
• Comprensible
(Understandability)
• “Mantenible”
(Maintainability)
Correcto
• Un software es correcto si se
comporta de acuerdo a su
especificación
• La definición supone:
Especificación de
Requerimientos
– La existencia es una especificación de
requisitos.
– La posibilidad de determinar sin
ambigüedad la correspondencia entre
la especificación y el diseño.
• Lo correcto del software puede
probarse ejecutándolo o mediante
análisis.
Diseño
Confiable
• El software se comporta de acuerdo con
lo esperado por el usuario.
• A diferencia de la corrección, la
confiabilidad es algo relativo.
• El mercado puede admitir algunos
errores en el software siempre que en
general se comporte en forma esperada.
• La confiabilidad es relativa: un SW puede
aún ser confiable si la consecuencia de un
error no es seria; o si la cantidad de
errores por unidad de tiempo no es alta.
Correcto
Confiable
Robusto
• Un software es robusto si se comporta en forma
razonable aún en situaciones no anticipadas.
– Datos de entrada incorrectos o fallas de hardware son
las situaciones mas frecuentes.
– La cantidad de código que se dedica a
hacer el software robusto depende de
la experiencia de los usuarios o lo crítico
de su misión.
– Si algo se especifica como requerimiento, cumplirlo es
cuestión de corrección; si no está en los
requerimientos es cuestión de robustez.
Eficiencia-Performance
• Muy lento baja la
productividad de los
usuarios.
• Usa mucho disco
puede ser muy caro
ejecutarlo.
• Usa mucha memoria
puede afectar la
performance de otros
sistemas
• Los criterios de
eficiencia varían con la
tecnología y el tiempo.
• Métodos de evaluación
de performance:
– Monitoreo
– Análisis
– Simulación
Amigable
• La interfaz con los
usuarios es parte
esencial de ser
amigable
• Depende de los
usuarios:
– Novicios: lo mejor son
largos mensajes
explicativos
– Expertos aprecian los
atajos.
• Otros factores
importantes para lograr
esta cualidad son la
facilidad en la
configuración y el
proceso para realizar
una tarea.
Verificable
El software es verificable si sus propiedades pueden ser
comprobadas.
•
•
La corrección y el
performance
pueden verificarse
fácilmente
La verificación
puede hacerse
mediante el análisis
o testing.
• También se verifica:
• Monitoreos de código
• Diseño modular
• Disciplina en la
codificación
• Lenguaje de
programación
adecuado.
“Reusable”/Re-utilizable
Software ya construido se usa con pocos o
ningún cambio.
• La reutilización es mas apropiada para componentes
que para sistemas completos
• Las bibliotecas (librerías) científicas FORTRAN son los
ejemplos más conocidos y Java API’s son ejemplos más
nuevos.
• Debe apuntarse a ella desde el diseño.
• La reutilización es una cualidad difícil (imposible) de
conseguir a posteriori.
• La orientación a objetos tiene potencial para mejorar la
reutilización y la evolución.
Portable
Un SW es portable si puede ejecutarse en distintos
ambientes (hardware, sistemas operativos, etc.)
•
Una forma de lograr portabilidad es suponer la
mínima configuración.
•
Esto penaliza los sistemas que podrían
ejecutarse mejor haciendo uso del ambiente
disponible.
•
Otra opción es determinar sobre la marcha las
disponibilidades del ambiente.
Interoperable
Un sistema es interoperable si puede
coexistir y cooperar con otros
sistemas.
• Las componentes reutilizables son interoperables.
• La estandarización de las interfaces promueve la
interoperabilidad.
•
Los sistemas abiertos son casos típicos de
sistemas interoperables.
Productivo
La productividad es la eficiencia del proceso de
desarrollo del software.
•
La productividad de un equipo de desarrollo es
generalmente menor que la suma de las
productividades individuales.
•
Existen métricas para medir la productividad
(LOCK, puntos de función, etc.)
• La automatización y el soporte del software de
desarrollo aumenta la productividad.
Visible
Un proceso de desarrollo de software es
visible si todos sus pasos están claramente
documentados, y se puede saber su estado de
avance en cada momento.
• Diseño,
testing,
codificación
e
integración
pueden
suceder
simultáneamente,
pero
deben
coordinarse.
• La visibilidad ayuda a evaluar el impacto
de las decisiones.
• También es esencial cuando existe
rotación en el personal.
Cohesión
Medida de la relación entra las partes de un
componente.
Diferentes tipos:
• Coincidental: No
relacionados.
• Lógica: Funciones
similares.
• Temporal: Ejecución
simultanea.
• Procedural: Secuencia de
control.
• Comunicacional: Comparten el
Input (emtrada).
• Secuencial: Output de uno es
input de otro.
• Funcional: Todas las partes son
necesaria para la función.
• Objeto: Todas las acciones
actúan sobre los mismos datos
del objeto.
Acoplamiento
Medida de la interdependencia
de distintas componentes.
Módulo
Módulo
A
B
Módulo
Módulo
C
D
Área de
datos
compartidos
• Sistemas muy acoplados
• Comparten variables o
información de control.
Módulo A
Datos A
• Sistemas desacoplados
• Interfaces definidas con
listas de parámetros.
Móulo B
Datos B
Módulo D
Datos D
Módulo C
Datos C
Comprensible
Un sistema es comprensible si es fácil de
comprender cómo funciona.
• Características que afectan la comprensibilidad del sistema
• Cohesión y acoplamiento
• Nombres
• Documentación
• Complejidad
• Si un sistema es comprensible, es también más Mantenible y
verificable.
• Desde un punto de vista del usuario, ser comprensible es ser
amigable y robusto.
Mantenible
Un sistema es Mantenible si es fácil
modificarlo.
• Tipos de mantenimiento:
• Condiciones
• Correctivo (aprox. 20%)
• Número de componentes,
• Adaptativo (aprox. 20%)
• Acoplamiento
• Perfectivo (aprox. 50%)
• Documentación: Completa,
Comprensible o al día.
• Software Mantenible:
• Reparable : que permite
corregir defectos,
• Evolucionable: facilita la
introducción de nuevas
funcionalidades
• Uso de componentes
estándar
• La evolucionabilidad decrece
con cada versión del software.
Evolucionabilidad
• Un SW es evolucionable si permite cambios
que lo hacen capaz de satisfacer nuevos
requerimientos.
• Se logra mediante modularización; los
sucesivos cambios tienden a reducir la
modularización.
• El diseño original y cada cambio deben
hacerse con esta cualidad en mente.
A tiempo
El proceso de desarrollo debe obtener su producto en
el tiempo planeado.
• Tener el producto a tiempo da una mejor oportunidad comercial,
y a veces hace que el producto sea útil o inútil.
• Tener un producto a tiempo sin confiabilidad o eficiencia tampoco
es útil.
• Requiere:
• Planificación
• Estimación del trabajo
• Hitos verificables (metas parciales)
Descargar