miércoles, 10 de septiembre de 2014

ESTE BLOG FUE CREADO CON LA FINALIDAD DE PODER AYUDARTE EN TU DESARROLLO ACADÉMICO AQUÍ PODRÁS ENCONTRAR CADA UNO DE LOS TEMAS DE LA MATERIA DE INGENIERÍA DE SOFTWARE, O PODRÁS A PORTAR UN ARTÍCULO QUE  SEA RESPECTO AL TEMA.





martes, 9 de septiembre de 2014

1.1 CONCEPTOS BÁSICOS.

Objetivos

  • Definir la Ingeniería de Software y explicar su importancia. 
  • Discutir los conceptos de producto de software y proceso de  software
  •  Introducir la noción de responsabilidad profesional.
  •        La economía de todos los países desarrollados es dependiente del software
  • Actualmente cada vez mas sistemas son controlados por software

  • La Ingeniería de Software concierne a teorías, métodos y
  • herramientas para el desarrollo profesional de software
  • El gasto en la Ingeniería de Software, representa un alto porcentaje del PIB de los países desarrollados
¿Qué es software?

  • Programas de cómputo y su documentación asociada: requerimientos, modelos de diseño y manuales de usuario.
  • El software puede ser desarrollado para un cliente en particular o para un mercado general
  • El software puede ser:
  • Genérico: desarrollado para venderse a múltiples clientes (Excel,Word, etc.)
  • A la medida: desarrollado bajo demanda del cliente a un desarrollador específico
  • El software nuevo puede ser creado desarrollando nuevos programas, configurando sistemas de software genérico o reutilizando software existente.


¿Qué es la Ingeniería de Software?

Una disciplina de la Ingeniería que concierne a todos los aspectos de la producción de software

Los Ingenieros de Software deben:

  • Adoptar un enfoque sistemático para llevar a cabo su trabajo
  • Utilizar las herramientas y técnicas apropiadas para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y a los recursos disponibles.

¿Cuál es la diferencia entre Ingeniería de Software y Ciencias Computacionales?
  • Las Ciencias Computacionales conciernen a la teoría y fundamentos de cualquier sistema de cómputo (hardware o software)
  • La Ingeniería de software concierne los aspectos prácticos del desarrollo y puesta en marcha de productos útiles de software.
  • La Ingeniería de Software aún está lejos de ser considerada una ciencia como los son la química o la física.
¿Cuál es la diferencia entre Ingeniería de Software e Ingeniería de Sistemas?
  • La Ingeniería de Sistemas concierne a todos los aspectos del desarrollo de sistemas basados en cómputo incluyendo hardware, software y la ingeniería de procesos.
  • La Ingeniería de Software es una parte de este proceso que  comprende el desarrollo de software, control, aplicaciones y bases de datos del sistema.
  • Los ingenieros de software son los encargados de la  especificación del sistema, del diseño de la arquitectura, la integración y la puesta en marcha.
¿Qué es un proceso de software?
  • Un conjunto estructurado de actividades cuya meta es el  desarrollo o evolución de un software
  • Algunas actividades genéricas en todos los procesos de software son:
Especificación, qué debe hacer el software y cuáles son sus
  • especificaciones de desarrollo
  • Desarrollo, producción del sistema de software
  • Validación, verificar que el software cumple con lo solicitado por el cliente
  • Evolución, cambiar/adaptar el software a las nuevas demandas
Estas actividades varían dependiendo de la organización y del tipo de sistema a desarrollarse 

¿Cuáles son los costos de la Ingeniería de Software? 
El costo total de un software esta dividido aproximadamente de la siguiente forma:
  • 60% costos de desarrollo
  • 40% costos de pruebas
  • En el software a la medida los costos de evolución a menudo  exceden los costos de desarrollo
  • Los costos dependen del tipo de sistema que se desarrolla y de los requerimientos del mismo tales como desempeño y confiabilidad
  • La distribución de los costos depende del modelo de desarrollo empleado. 
¿Qué son los métodos de Ingeniería de Software?
  • Enfoques estructurados para el desarrollo de software que
incluye:
  • Descripciones del modelo, descripciones de modelos gráficos que deben ser producidos
  • Reglas, restricciones aplicadas a los modelos de sistemas
  • Recomendaciones, para realizar un diseño efectivo
  • Administración del proceso, que actividades deben realizarse y en qué orden
¿Qué es CASE?
  • CASE es Computer-Aided Software Engineering
  • Programas que son usados para dar soporte automatizado a las  actividades del proceso de software:
  • Análisis de requerimientos, modelado del sistema, pruebas y  depuración (debugging)
  • Las herramientas CASE son comúnmente usadas para dar soporte a los métodos de software
  • Editores para la notación del método
  • Módulos de análisis que verifican que las reglas del método se  cumplan
  • Generadores de reportes que facilitan la creación de la  documentación del sistema 
  • Generadores de código a partir del modelo del sistema.

¿Cuáles son los atributos del software de calidad?
  • El software debe proveer la funcionalidad y desempeño  requeridos por el usuario y debe ser mantenible, confiable y aceptable
  • Mantenible, el software debe poder evolucionar para continuar cumpliendo con las especificaciones
  • Confiable, el software no debe causar daños físicos o económicos  en el caso de que falle
  • Eficiente, el software no debe desperdiciar los recursos del sistema
  • Aceptable, el software debe ser aceptado por los usuarios para los  que fue diseñado. Debe ser entendible, utilizable y compatible con otros sistemas
¿Cuáles son los retos de la Ingeniería de Software?
  • Heterogeneidad
  • Desarrollar técnicas para construir software que pueda hacer frente  a plataformas y ambientes de ejecución heterogéneos (diferentes tipos de Hw y Sw)
  • Tiempos de entrega
  • Desarrollar técnicas que permitan reducir los tiempos de entrega  del software sin comprometer la calidad
  • Confianza 
  • Desarrollar técnicas que permitan que los usuarios confíen plenamente en el software 
Responsabilidad ética y social
  • La Ingeniería de Software comprende responsabilidades que van más allá de la simple aplicación de habilidades técnicas
  • Los ingenieros de Software deben actuar de manera honesta y ética si desean ser respetados como profesionales
  • Una conducta ética es más que sólo respetar la ley

Responsabilidad ética y social...
  • Responsabilidad profesional
  • Confidencialidad
  • Competencia
  • Derechos de propiedad intelectual
  • Mal uso de la computadora
BIBLIOGRAFIA
bibliografia:http://www.tamps.cinvestav.mx/~ertello/swe/sesion01.pdf

1.2 EL PAPEL EVOLUTIVO DEL SOFTWARE.

El software es tanto un producto como el vehículo para su entrega. Es el transformador de la información. El papel del software de computadora ha experimentado un cambio significativo en un periodo un poco mayor a 50 años. Las mejorías sustanciales en el desempeño del hardware, los cambios profundos en las arquitecturas de cómputo, los enormes incrementos en las capacidades de memoria y almacenamiento, y la amplia variedad de opciones de salida y de entrada han propiciado el surgimiento de sistemas más elaborados y complejos basados en computadoras. Nadie sabe en realidad el futuro de los sistemas que día a día se construyen, más sin embargo sin importar el lugar en el que resida el software, ya sea en un celular o dentro de una computadora central, el software realiza la producción, el manejo, la adquisición, la modificación, el despliegue o la transmisión de la información que puede ser tan simple como un solo bit o tan compleja como una  presentación multimedia. En su papel de vehículo para la entrega de un producto, el software actúa como la base para el control de la computadora (sistemas operativos), la comunicación de información (redes) y la creación y el control de otros programas (utilerías de software y ambientes)
El software entrega el producto más importante de nuestro tiempo: información. Transforma los datos personales, por ejemplo las transacciones financieras de un individuo, de modo que los datos sean más útiles en un contexto local. Maneja información de negocio para mejorar la competitividad, proporciona una vía para las redes de información alrededor del mundo (Internet) y proporciona los medios para adquirir información en todas sus formas (páginas web).




ERA
AÑOS
CARACTERÍSTICAS
1ª
      1950- 1965
·       Se trabajaba con la idea de “Codificar yCorregir”.
·                     No existía un planteamiento previo.
·                     No existía documentación de ningún tipo.
·                     Existencia de pocos métodos formales y pocos creyentes en ellos.
·                     Desarrollo a base de prueba y error.
1965 - 1972
·                     Se busca simplificar código.
·                     Aparición de Multiprogramación y Sistemas Multiusuarios.
·                     Sistemas de Tiempo Real apoyan latoma de decisiones.
·                     Aparición de Software como producto. (Casas de Software).
·                     INICIO DE LA CRISIS DEL SOFTWARE.
·                     Se buscan procedimientos para el desarrollo del Software.
1972 - 1989
·                     Nuevo Concepto: Sistemas Distribuidos.
·                     Complejidad en los Sistemas de Información.
·                     Aparecen: Redes de área local y global, y Comunicadores Digitales.
·                     Amplio Uso de Microprocesadores.
1989 - ¿?
·                     Impacto Colectivo de Software.
·                     Aparecen: Redes de Información, Tecnologías Orientadas a Objetos.
·                     Aparecen: Redes Neuronales, Sistemas Expertos y SW de Inteligencia Artificial.
·                     La información como valor preponderante dentro de las Organizaciones.




Bibliografia:


1.3 ETAPAS DEL DESARROLLO DEL SOFTWARE

La ingeniería de software requiere llevar a cabo numerosas tareas agrupadas en etapas, al conjunto de estas etapas se le denomina ciclo de vida . Las etapas comunes a casi todos los modelos de ciclo de vida son las siguientes:

Etapa de Análisis:
Es el proceso de investigar un problema que se quiere resolver. Definir claramente el Problema que se desea resolver o el sistema que se desea crear. Identificar los componentes principales que integrarán el producto.

Etapa de Diseño:
Es el proceso de utilizar la información recolectada en la etapa de análisis al diseño delproducto. La principal tarea de la etapa de diseño es desarrollar un modelo o las especificaciones para el producto o Componentes del Sistema.

Etapa de Desarrollo:
Consiste en utilizar los modelos creados durante la etapa de diseño para crear los componentes del sistema.

Etapa de Pruebas o Verificación Prueba:
Consiste en asegurar que los componentes individuales que integran al sistema o producto, cumplen con los requerimientos de la especificación creada durante la etapa de diseño.

Etapa de Implementación o Entrega Implantación:
Consiste en poner a disposición del cliente el producto.


Etapa de Mantenimiento:
Consiste en corregir problemas del producto y re- liberar el producto como una nueva versión o revisión (producto mejorado).

Etapa final EOL (End-of-Life) :


El fin del ciclo del producto consiste en realizar todas las tareas necesarias para asegurar que los clientes y los empleados están conscientes de que el producto ya no será vendido ni soportado. 

BIBLIOGRAFIA:

1.4 CLASIFICACIÓN DE LA TECNOLOGÍA EN EL DESARROLLO DE SOFTWARE (TECNOLOGÍA ESTRUCTURADA Y ORIENTADA A OBJETOS)


El Desarrollo de Software es una necesidad latente en todas las regiones del país, ya que de su impulso depende el avance económico y la integración del conocimiento a escala local, nacional y mundial.
El país requiere personal que se capacite en Desarrollo de Software porque todas las empresas, tanto de servicio como de producción, están buscando mejorar sus procesos teniendo como aspecto clave el software, que sirve para optimizar los procesos de automatización y les permite manejar altos niveles de calidad y eficiencia.
El país puede contar con una industria como es la de Desarrollo de Software, porque lo básico está en la motivación de cada persona para la creación de proyectos que permitan desarrollar el pensamiento lógico, siempre y cuando las universidades, el gobierno y las empresas se comprometan a potenciar y crear los mecanismos para el desarrollo del talento humano en estos aspectos de la formación.
Tecnologia estructurada
Programación Estructurada es una técnica en la cual la estructura de un programa, esto es, la interpelación de sus partes realiza tan claramente como es posible mediante el uso de tres estructuras lógicas de control:

·Secuencia: Sucesión simple de dos o mas operaciones.
·Selección: bifurcación condicional de una o mas operaciones.
·Interacción: Repetición de una operación mientras se cumple una condición.
Estos tres tipos de estructuras lógicas de control pueden ser combinados para producir programas que manejen cualquier tarea de procesamiento de información.
Un programa estructurado esta compuesto de segmentos, los cuales puedan estar constituidos por unas pocas instrucciones o por una pagina o más de codificación. Cada segmento tiene solamente una entrada y una salida, estos segmentos, asumiendo que no poseen lazos infinitos y no tienen instrucciones que jamas se ejecuten, se denominan programas propios. Cuando varios programas propios se combinan utilizando las tres estructuras básicas de control mencionadas anteriormente, el resultado es también un programa propio.
La programación Estructurada esta basada en el Teorema de la Estructura, el cual establece que cualquier programa propio (un programa con una entrada y una salida exclusivamente) es equivalente a un programa que contiene solamente las estructuras lógicas mencionadas anteriormente.

Una característica importante en un programa estructurado es que puede ser leído en secuencia, desde el comienzo hasta el final sin perder la continuidad de la tarea que cumple el programa, lo contrario de lo que ocurre con otros estilos de programación. Esto es importante debido a que, es mucho más fácil comprender completamente el trabajo que realiza una función determinada, si todas las instrucciones que influyen en su acción están físicamente contiguas y encerradas por un bloque. La facilidad de lectura, de comienzo a fin, es una consecuencia de utilizar solamente tres estructuras de control y de eliminar la instrucción de desvío de flujo de control, excepto en circunstancias muy especiales tales como la simulación de una estructura lógica de control en un lenguaje de programación que no la posea.

VENTAJAS POTENCIALES
Un programa escrito de acuerdo a estos principios no solamente tendrá una estructura, sino también una excelente presentación.
Un programa escrito de esta forma tiende a ser mucho más fácil de comprender que programas escritos en otros estilos.
La facilidad de comprensión del contenido de un programa puede facilitar el chequeo de la codificación y reducir el tiempo de prueba y depuración de programas. Esto ultimo es cierto parcialmente, debido a que la programación estructurada concentra los errores en uno de los factores más generador de fallas en programación: la lógica.
Un programa que es fácil para leer y el cual esta compuesto de segmentos bien definidos tiende a ser simple, rápido y menos expuesto a mantenimiento. Estos beneficios derivan en parte del hecho que, aunque el programa tenga una extensión significativa, en documentación tiende siempre a estar al día, esto no suele suceder con los métodos convencionales de programación.
La programación estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicación, esfuerzo y creatividad.
Tecnologia Orientada  a Objetos

Lenguajes de Programación Orientado a Objetos. En 1985, E. Stroustrup extendió el lenguaje de programación C a C++, es decir C con conceptos de clases y objetos, también por esas fechas se creo desde sus bases el lenguaje EIFFEL. 

En 1995 apareció el más reciente lenguaje OO, Java desarrollado por SUN, que hereda conceptos de C++.

BIBLIOGRAFIA:


1.5 DEFINICIÓN Y HISTORIA DE LAS HERRAMIENTAS CASE.

Se puede definir a las Herramientas CASE como un conjunto de programas y ayudas que dan asistencia.
a los analistas, ingenieros de software y desarrolladores, durante todos los pasos del Ciclo de Vida de desarrollo de un Software. Como es sabido, los estados en el Ciclo de Vida de desarrollo de un Software son: Investigación Preliminar, Análisis, Diseño, Implementación e Instalación.
CASE: Conjunto de métodos, utilidades y técnicas que facilitan la automatización del ciclo de vida del desarrollo de sistemas de información, completamente o en alguna de sus fases.
La realización de un nuevo software requiere que las tareas sean organizadas y completadas en forma correcta y eficiente. Las Herramientas CASE fueron desarrolladas para automatizar esos procesos y facilitar las tareas de coordinación de los eventos que necesitan ser mejorados en el ciclo de desarrollo de software.
La mejor razón para la creación de estas herramientas fue el incremento en la velocidad de desarrollo de los sistemas. Por esto, las compañías pudieron desarrollar sistemas sin encarar el problema de tener cambios en las necesidades del negocio, antes de finalizar el proceso de desarrollo.
También permite a las compañías competir más efectivamente usando estos sistemas desarrollados nuevamente para compararlos con sus necesidades de negocio actuales. En un mercado altamente competitivo, esto puede hacer la diferencia entre el éxito y el fracaso. Las herramientas CASE también permiten a los analistas tener más tiempo para el análisis y diseño y minimizar el tiempo para codificar y probar.
La introducción de CASE integradas está comenzando a tener un impacto significativo en los negocios y sistemas de información de las organizaciones.
Con un CASE integrado, las organizaciones pueden desarrollar rápidamente sistemas de mejor calidad para soportar procesos críticos del negocio y asistir en el desarrollo y promoción intensiva de la información de productos y servicios. Estas herramientas pueden proveer muchos beneficios en todas las etapas del proceso de desarrollo de software, algunas de ellas son:
·         Verificar el uso de todos los elementos en el sistema diseñado.
·         Automatizar el dibujo de diagramas.
·         Ayudar en la documentación del sistema.
·         Ayudar en la creación de relaciones en la Base de Datos.
·         Generar estructuras de código.
La principal ventaja de la utilización de una herramienta CASE, es la mejora de la calidad de los desarrollos realizados y, en segundo término, el aumento de la productividad. Para conseguir estos dos objetivos es conveniente contar con una organización y una metodología de trabajo, además de la propia herramienta.

BIBLIOGRAFIA:

1.6 CLASIFICACIÓN DE LAS HERRAMIENTAS CASE.

 CASE:  CASE es una combinación de herramientas 
software (aplicaciones) y de metodologías de desarrollo:

Las herramientas permiten automatizar el proceso de 
desarrollo del software.
Las metodologías definen los procesos automatizar.

Una primera clasificación del CASE es considerando su amplitud:
  • TOOLKIT: Es una colección de herramientas integradas 
que permiten automatizar un conjunto de tareas de algunas 
de las fases del ciclo de vida del sistema informático : 
Planificación estratégica, Análisis, Diseño, Generación de programas.

    • WORKBENCH: Son conjuntos integrados de herramientas 
    que dan soporte a la automatización del proceso completo 
    de desarrollo del sistema informático. Permiten cubrir 
    el ciclo de vida completo. El producto final aportado 
    por ellas es un sistema en código ejecutable y su documentación.

    • UPPER CASE: Planificación estratégica, Requerimientos de Desarrollo Funcional de Planes Corporativos.

    • MIDDLE CASE: Análisis y Diseño.

    • LOWER CASE: Generación de código, test e implantación

    BIBLIOGRAFIA: