Subscribe:

TECNOLOGIA

TECNOLOGIA
El software es como la entropía: difícil de atrapar, no pesa, y cumple la Segunda Ley de la Termodinámica, es decir, tiende a incrementarse

Sample Text

Sample text

Social Icons

Sample Text

INGENIERIA DE SOFTWARE


Principios de Ingeniería de Software

 
Apuntan al proceso de ingeniería y el producto final: el proceso correcto ayudará a obtener el producto correcto. Asimismo, el producto afectará la elección de qué proceso usar.
 
Los principios son afirmaciones abstractas que describen propiedades deseables del proceso y del producto. Para aplicarlas, los ingenieros deben contar con métodos y técnicas que incorporen dichos principios.
 
Ø  Métodos: guías para la ejecución de alguna actividad, aproximaciones rigurosas, sistemáticas y disciplinadas.
Ø  Técnicas: son más mecánicas que los métodos y tienen aplicabilidad más restringida.
 
Ambos se usan como sinónimos.
 
Los métodos y técnicas se encapsulan para crear metodologías, que sirven para promover una aproximación a la solución de problemas, preseleccionando los métodos y técnicas a usar.
 
Las herramientas son desarrolladas para apoyar la aplicación de los 3 niveles anteriores.
 


 
Lo que se busca con este análisis es la confiabilidad de las aplicaciones. También se supone que las aplicaciones serán lo suficientemente grandes para descomponerlas en partes manejables.
 
Todo esto hace que la confiabilidad y la evolución sean importantes y que afirmemos que la elección de principios y técnicas son determinantes para las metas de calidad del software.
 
  1. Rigor y formalidad.

El rigor es un complemento de la creatividad en la ingeniería. Con la aproximación rigurosa podremos tener productos más confiables y mejores controles (de tiempo, costos, etc.). El rigor mejora la creatividad, optimizando la confianza en los resultados creativos, una vez analizados en base a una planificación rigurosa.
 
Hay varios grados de rigurosidad. El más alto es la formalidad, que es un requerimiento más restrictivo que el rigor, que exige que el proceso de soft sea dirigido y evaluado con leyes matemáticas. La formalidad implica rigor, pero uno puede ser riguroso e informal.
 
En ingeniería, el proceso de diseño son pasos bien definidos y con bases sólidas. En cada paso el ingeniero sigue algún método o técnica basados en resultados teóricos de un modelado formal de la realidad o en ajustes empíricos de fenómenos no considerados por el modelo, o en reglas heurísticas que dependen de la experiencia. Todo está resuelto en una aplicación rigurosa y sistemática (metodología), fácilmente explicada y aplicada una y otra vez.
 
El ingeniero debe saber cómo y cuándo ser formal, además de entender el nivel de rigurosidad y formalidad a alcanzar, dependiendo de la dificultad de la tarea y su criticidad. Ej.: podemos ser muy formales para las partes críticas de un problema y para las partes estandarizadas aplicar una aproximación más simple.
 
La formalidad aventaja al rigor en el sentido de que la primera puede ser la base para mecanizar procesos. La única fase del desarrollo de software donde se usa aproximación formal es en la programación. Los programas son objetos formales, escritos en lenguajes cuya sintaxis y semántica están definidos. Estas operaciones mecánicas, posibles por usar la formalidad, pueden mejorar la confiabilidad y verificabilidad de los productos software.
 
El rigor y la formalidad benefician también la mantenibilidad, reusabilidad, portabilidad, comprensión e interoperabilidad del software. Ej.: la documentación nos permite prever la evolución del proyecto, los recursos a usar, etc., así como nos ayuda a mantener el producto, al usarla para cualquier modificación que se requiera; y por último nos permite monitorear el software en forma precisa, para garantizar el cumplimiento de los puntos de control y mejorar la productividad.
 
  1. Separación de intereses.
 
Es involucrarse con distintos aspectos de un problema para concentrarse en ellos separadamente. En cada proyecto debemos separar aspectos: primero, aislar los factores relacionados más débilmente y luego considerar los factores en la medida en que impactan el análisis.
 
Ø  Separación en base al tiempo: permite planificar las actividades de manera precisa.
Ø  Separación en términos de calidades: manejar separadamente la eficiencia y la corrección de un programa, diseñando software cuidadoso y estructuradamente, tal que su corrección esté garantizada a priori y luego reestructurada para mejorar su eficiencia.
Ø  Separación por vistas: separar los datos que fluyen de una actividad a otra en el flujo de control que gobierna la sincronización de las actividades.
 
La separación implica separación de responsabilidades para tratar los distintos aspectos. Es la base para la asignación del trabajo en asignaciones específicas para distintas personas con distintas habilidades.
 
  1. Modularidad.
 
División de un sistema en partes más simples (módulos). Esto nos permite separar los contextos en fases: cuando relacionamos cada módulo aislado y cuando relacionamos todos los módulos globalmente, analizando sus conexiones e integración.
 
Objetivos de la modularidad:
 
Ø  Capacidad de descomposición de un sistema complejo: división del problema original en subproblemas y luego dividir cada subproblema.
Ø  Composición de un sistema a partir de componentes existentes: partir de componentes elementales hasta llegar al sistema terminado. Cuando un componente falla, se reemplaza por uno nuevo. Podemos usar módulos de una biblioteca, que al ser reutilizables, aceleran el proceso de construcción.
Ø  Comprensión del sistema mirándolo en partes: Nos facilita la reparación y modificación, al buscar los errores en un componente en particular.
 
Para lograr los tres objetivos, los módulos deben tener:
 
Ø  Alta cohesión: sus elementos internos están muy relacionados y agrupados por razones lógicas.
Ø  Bajo acoplamiento: es la relación entre módulos y mide la interdependencia entre 2 módulos. La idea es lograr que los módulos tengan un nivel bajo.
 
Las estructuras que cumplan esto nos permiten ver los módulos como cajas negras cuando describimos la estructura total y verlos separadamente cuando analizamos la funcionalidad de cada uno.
 
  1. Abstracción.
 
Es identificar los aspectos importantes de un fenómeno e ignorar los detalles. Esto depende de cada persona o de cada enfoque o propósito que se le dé a un problema.
 
Los modelos que construimos son abstracciones de la realidad, válidas también para modelos de software.
 
Los lenguajes de programación son abstracciones que nos permiten construir sin preocuparnos por los detalles de hardware.
 
Este principio es importante para aplicarlo a productos y procesos software. Cuando la documentación de un programa o procedimiento se analiza, se supone que suministra toda la información necesaria para entender las otras partes del programa que usan ese procedimiento.
 
  1. Anticipación al cambio.
 
Se refiere a la mantenibilidad. Es poder predecir los cambios y trabajar para que los cambios futuros sean fáciles de aplicar.
 
Esto es importante en el software, ya que los productos están en ambientes donde permanentemente surgen nuevos requerimientos.
 
La reusabilidad también se ve afectada por esto. Un componente es reusable si se puede emplear para generar un nuevo producto o si solo requiere pequeños cambios para ello. La reusabilidad es la capacidad de evolucionar que tienen los componentes.
 
Para anticiparse al cambio debemos contar con herramientas de administración de versiones y revisiones de software. Debemos poder almacenar y recuperar información, módulos fuente y objetos, todo desde una base de datos central.
 
Asimismo se afecta al proceso de soft, al considerar el mantenimiento de una aplicación y asignando estructura y costos para apoyar la evolución del software.
 
  1. Generalidad.
Poder descubrir un problema más general en la resolución de un primer problema. Este puede ser menos complejo y proveer soluciones reutilizables. Puede surgir de un paquete ya existente o lo podemos crear nosotros.
 
Sin embargo, puede ser más costoso en términos de velocidad de ejecución, requerimientos de memoria o tiempos de desarrollo.
 
Este principio es fundamental si se busca desarrollar herramientas software para uso amplio en el mercado.
 
Si el problema puntual se puede reformular como una instancia de un problema general, es conveniente adoptar el paquete en vez de una solución específica.
 
  1. Incrementalidad.
Desarrollar paso a paso con incrementos, logrando aproximaciones sucesivas. Esto nos da un proceso evolutivo.
 
Debemos identificar subconjuntos primarios útiles para desarrollar y distribuir a los clientes, de manera de obtener realimentación temprana. Esto nos permite que la aplicación evolucione de manera controlada, en casos donde los requerimientos iniciales no se comprendieron bien.
 
Las etapas intermedias son prototipos del producto final, lo cual beneficia el entendimiento de los requerimientos y permite usar un modelo de desarrollo iterativo más flexible.
 
Debemos tener mucho cuidado en la manipulación de documentos, programas, datos de prueba y todo lo que usemos en las distintas versiones. Cada paso incremental significativo debe ser registrado.

 

¿Qué es el software?

 
Programas, estructuras de datos, documentación y más.
 
Características:
 
Ø  desarrollo, no manufactura.
Ø  Desgaste, no gasto.
Ø  Principalmente desarrollado a medida.
Ø  Mantenibilidad: debe poder evolucionar y seguir cumpliendo sus especificaciones.
Ø  Confiabilidad: no debe causar daños físicos ni económicos en caso de fallos.
Ø  Eficiencia: no debe desperdiciar los recursos del sistema.
Ø  Utilización adecuada: debe contar con una interfaz adecuada y documentación.
Ø  Actúa como un diferenciador en los negocios, es estratégico.
Ø  Captura información, produce información y es información en sí mismo.
 
Productos Software
 
Ø  Genéricos: son producidos por una organización para venderlos en el mercado.
Ø  A medida: desarrollados bajo pedido a un desarrollador específico.
 
La mayor parte del gasto del software es en productos genéricos, pero hay más esfuerzo en el desarrollo a medida.
 
Componentes:

 
Mitos del software:
 
Ø  Estándares y procedimientos bastan.
Ø  Tecnología de punta basta.
Ø  Más gente para ponerse al día.
Ø  Programación inmediata.
Ø  Fácil acomodo de los cambios.
Ø  Programación: fin del trabajo.
Ø  Calidad: solo del ejecutable.
Ø  El código es el único producto.
Evolución del software:

 
Software vs. Hardware:

 
Blogger Templates