lunes, 8 de septiembre de 2014

UNIDAD 1. INGENIERÍA DE SOFTWARE



A lo largo de tiempo la ingeniería de software ha cobrado gran importancia. Día con día la tecnología va avanzando a grandes pasos y se podría presumir que el actor principal ha sido la ingeniería de software ya que esta disciplina es la encargada de generar los diferentes tipos de software en las diferentes áreas de estudio.

En este blog hablaremos sobre ésta disciplina, algunos de sus conceptos básicos, su evolución a lo largo de la historia, las diferentes etapas que ha pasado al igual hablaremos de las herramientas case.




1.1 Conceptos Básicos

                         
Los campos en que se utilizan las computadoras hoy en día son innumerables. Se ha llegado al punto en que es posible decir que no hay un solo campo del conocimiento humano en el que no se haya aplicado la computación, pues se han creado aplicaciones para áreas del conocimiento humano tan distintas como lo pueden ser la astrofísica y la cocina. Por esta razón el software que se puede crear es tan variado como las ideas que se forman en las mentes de las personas. Aún así, todos los proyectos de creación de software siguen un proceso muy parecido para llegar desde la idea original hasta un producto terminado y funcional. Este proceso básico está conformado por análisis, diseño, implementación, pruebas y mantenimiento. 

 Ahora bien, este ciclo de vida básico, como a veces se le llama, es tan solo la idea general tras cualquier proceso particular de desarrollo de software. Existen diversos modelos, o métodos, para lograr cumplir con los pasos necesarios de este ciclo, cada uno con un enfoque distinto. Así pues, está el modelo de Construcción de Prototipos, el modelo de Desarrollo Rápido de Aplicaciones, el de Procesos Evolutivos - que a su vez se divide en los modelos incremental, en espiral, de ensamblaje de componentes y de desarrollo concurrente - el modelo de Métodos Formales, y por último las Técnicas de

La ingeniería del software
Es el proceso formal de desarrollo de software en el que las necesidades del usuario se traducen en requerimientos, estos se transforman en diseño que se implementa en código que se prueba, documenta y se certifica para su uso operativo. Según la definición del IEEE la ingeniería del software se define como “la aplicación de un método sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, esto es, la aplicación de la ingeniería al software”.


Ingeniería
Se define como el ingenio o el conocimiento de las ciencias naturales y matemáticas obtenidas con el estudio, la práctica y la experiencia se aplica con juicio para desarrollar formas de utilizar de modo económico, los materiales y fuerzas de la naturaleza para beneficio de la humanidad.

Software
Es el conjunto de todos los programas que existen dentro de una computadora o también conocido como el producto del desarrollo que realizan los ingenieros de software resultado de requerimientos de información.


Herramientas CASE

Como un conjunto de programas y ayudas que dan asistencia.

1.2 EL PAPEL EVOLUTIVO DEL SOFTWARE



Hoy en día, el software tiene un papel dual. Es producto y canal de distribución de este. Como producto, ofrece la potencia de cómputo presentada como hardware de una computadora o, de manera más global por una red de computadoras accesible mediante hardware local y de acceso físico. Sin importar el lugar en que resida el software, ya sea en un celular o dentro de una computadora central, éste es un transformador de información; 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 relación y el control de otros programas (utilerías de software y ambientes).

PRIMERA ERA  (De 1950  a 1965)

·         Se trabajaba con la idea de “Codificar y Corregir”.
·          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.


 SEGUNDA ERA (De 1965 a 1972)

·         Se busca simplificar código.
·         Aparición de Multiprogramación y Sistemas Multiusuarios.
·         Sistemas de Tiempo Real apoyan la toma de decisiones.
·         Aparición de Software como producto. (Casas de Software).
·         Se buscan procedimientos para el desarrollo del Software.

TERCERA ERA (De 1972 a 1985)

·         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.

CUARTA  ERA (De 1985 a 1995 )
·         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.

QUINTA ERA (De 2000 hasta hoy en día)
En esta era se utilizan los mismos requisitos de las era pasadas pero con el aumento de la web en todos lados, la reutilización de información y componentes de software 

·          Codificar: Transformar mediante las reglas de un código la formulación de un mensaje.
·         Hardware: Componente físico de la computadora. Por ejemplo: el monitor, la impresora o el disco rígido. El hardware por sí mismo no hace que una máquina funcione.

·          Multiprogramación: Se denomina multiprogramación a la técnica que permite que dos o más procesos ocupen la misma unidad de memoria principal y que sean ejecutados al "mismo tiempo“.

1.3 ETAPAS DE DESARROLLO DEL SOFTWARE

      

       
La ingeniería del software es el proceso formal de desarrollo de software en el que las necesidades del usuario se traducen en requerimientos, estos se transforman en diseño que se implementa en código que se prueba, documenta y se certifica para su uso operativo. Según la definición del IEEE la ingeniería del software se define como “la aplicación de un método sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, esto es, la aplicación de la ingeniería al software”.

El proceso de la ingeniería del software  requiere una metodología con 5 etapas:

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. Se extraen los requisitos del producto de software. En esta etapa la habilidad y experiencia en la ingeniería del software es crítica para reconocer requisitos incompletos, ambiguos o contradictorios. Usualmente el cliente/usuario tiene una visión incompleta/inexacta de lo que necesita y es necesario ayudarle para obtener la visión completa de los requerimientos.  El contenido de comunicación en esta etapa es muy intenso ya que el objetivo es eliminar la ambigüedad en la medida de lo posible.

Etapa de Diseño: 
Determinar cómo funcionará de forma general sin entrar en detalles incorporando consideraciones de la implementación tecnológica, como el hardware, la red, etc.  Consiste en el diseño de los componentes del sistema que dan respuesta a las funcionalidades descritas en la segunda etapa también conocidas como las entidades de negocio. Generalmente se realiza en base a diagramas que permitan describir las interacciones entre las entidades y su secuenciado.

Etapa de Desarrollo: 
Se traduce el diseño a código. Es la parte más obvia del trabajo de ingeniería de software y la primera en que se obtienen resultados “tangibles”. No necesariamente es la etapa más larga ni la más compleja aunque una especificación o diseño incompletos/ambiguos pueden exigir que, tareas propias de las etapas anteriores se tengan que realizarse en esta.

Etapa de Pruebas o Verificación Prueba: 
Consiste en comprobar que el software responda/realice correctamente las tareas indicadas en la especificación. Es una buena praxis realizar pruebas a distintos niveles (por ejemplo primero a nivel unitario y después de forma integrada de cada componente) y por equipos diferenciados del de desarrollo (pruebas cruzadas entre los programadores o realizadas por un área de test independiente).

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

 Etapa de Mantenimiento: 
En esta etapa se realizan un mantenimiento correctivo (resolver errores) y un mantenimiento evolutivo (mejorar las funcionalidades y/o dar respuesta a nuevos requisitos).


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.



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




Las tecnologías de desarrollo estructurado son las más convencionales de las empleadas hoy día. Han surgido de la evolución de las ideas de programación estructurada (hace más de veinticinco años) hacia las fases iniciales del ciclo de vida. En su formulación actual, las notaciones empleadas en las primeras fases del ciclo de vida (especificación de requisitos de usuario y sistema) suelen estar constituidas por lenguajes gráficos que permiten: identificar el sistema y el entorno; representar el flujo de información entre los elementos; y, describir los datos y las actividades del sistema.
La idea base de esta tecnología es que es posible estructurar el modelo de un sistema de software en base a funciones que procesan información que reciben de otras funciones (o del exterior) y dirigen la información procesada a otros módulos funcionales (o al exterior). El enfoque seguido, por tanto, es el de pensar en las funciones del sistema necesarias (extraídas de los requisitos del sistema) y luego en los datos que requieren.

Orientado a Objetos

Los métodos de descomposición orientada a objetos constituyen la tendencia más influyente observada en la ingeniería de sistemas de software en los últimos años. Con ellos nos referimos a un conjunto de métodos (aún en fase de desarrollo o evolución) que permiten al analista y diseñador concebir su sistema identificando clases de objetos, operaciones permitidas y relaciones entre ellos como base para la estructura del sistema a diseñar.
En ellas, un objeto es un conjunto de datos y funciones de manipulación de los mismos encapsulados en una unidad que es posible tratar como un todo (crear, copiar, destruir, etc.). Un objeto posee unas operaciones visibles a otros objetos aunque éstos no conocen cómo están implementadas. El diseñador reconoce inicialmente clases de objetos de las que se derivan los objetos concretos que utilizará en el diseño.
Un objeto puede construirse jerárquicamente empleando, a su vez, a otros objetos más simples. Una clase implica una generalización del concepto de objeto (identificando similitudes entre objetos similares) y constituye la base a partir de las cuales se construye el sistema.
Existen varias tecnologías orientadas a objetos que, aunque similares en su potencia expresiva, ofrecen algunas diferencias que las hacen más adecuadas para algún tipo concreto de sistemas.
Podemos mencionar como una de las más representativas a OMT.
OMT está soportada por muchas herramientas CASE comerciales.

Corresponde a una notación gráfica que permite representar las clases de objetos, sus relaciones y la creación de ejemplares de los mismos. Aunque básicamente empleada para la fase de análisis de requisitos del sistema puede también emplearse para las primeras fases del diseño.

1.5 DEFINICIÓN E HISTORIA DE LAS HERRAMIENTAS CASE.


    


Las herramientas CASE (Computer Aided Software Engineering, Ingeniería de Software Asistida por Computadora) son diversas aplicaciones informáticas destinadas a aumentar la productividad en el desarrollo de software reduciendo el costo de las mismas en términos de tiempo y de dinero. Estas herramientas pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de realizar un diseño del proyecto, cálculo de costos, implementación de parte del código automáticamente con el diseño dado, compilación automática, documentación o detección de errores entre otras. Ya en los años 70 un proyecto llamado ISDOS diseñó un lenguaje y por lo tanto un producto que analizaba la relación existente entre los requisitos de un problema y las necesidades que éstos generaban, el lenguaje en cuestión se denominaba PSL (Problem Statement Language) y la aplicación que ayudaba a buscar las necesidades de los diseñadores PSA (Problem Statement Analyzer).
Aunque ésos son los inicios de las herramientas informáticas que ayudan a crear nuevos proyectos informáticos, la primera herramienta CASE fue Excelerator que salió a la luz en el año 1984 y trabajaba bajo una plataforma PC.
Las herramientas CASE alcanzaron su techo a principios de los años 90. En la época en la que IBM había conseguido una alianza con la empresa de software AD/Cycle para trabajar con sus mainframes, estos dos gigantes trabajaban con herramientas CASE que abarcaban todo el ciclo de vida del software. Pero poco a poco los mainframes han ido siendo menos utilizados y actualmente el mercado de las Big CASE ha muerto completamente abriendo el mercado de diversas herramientas más específicas para cada fase del ciclo de vida del 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.





1.6 CLASIFICACIÓN DE LAS HERRAMIENTAS CASE.



Aunque no es fácil y no existe una forma única de clasificarlas, las herramientas CASE se pueden clasificar teniendo en cuenta los siguientes parámetros:
  1. Las plataformas que soportan.
  2. Las fases del ciclo de vida del desarrollo de sistemas que cubren.
  3. La arquitectura de las aplicaciones que producen.
  4. Su funcionalidad.
La siguiente clasificación es la más habitual basada en las fases del ciclo de desarrollo que cubren:
Existen otros nombres que se le dan a este tipo de herramientas, y que no es una clasificación excluyente entre sí, ni con la anterior:
  • Integrated CASE (I-CASE), herramientas que engloban todo el proceso de desarrollo software, desde análisis hasta implementación.
  • MetaCASE, herramientas que permiten la definición de nuestra propia técnica de modelado, los elementos permitidos del metamodelo generado se guardan en un repositorio y pueden ser usados por otros analistas, es decir, es como si definiéramos nuestro propio UML, con nuestros elementos, restricciones y relaciones posibles.
  • CAST (Computer-Aided Software Testing), herramientas de soporte a la prueba de software.
  • IPSE (Integrated Programming Support Environment), herramientas que soportan todo el ciclo de vida, incluyen componentes para la gestión de proyectos y gestión de la configuración activa.
Por funcionalidad podríamos diferenciar algunas como:
  • Herramientas de generación semiautomática de código.
  • Editores UML.
  • Herramientas de Refactorización de código.
Herramientas de mantenimiento como los sistemas de control de versiones.




CARRERA: Ingeniería en Sistemas Comunicacionales
DOCENTE: M.S.I Ma. Guadalupe Rivera García
ALUMNA: Cecilia Hernández Hernández
SEMESTRE Y GRUPO:  5to. "A"


CITAS BIBLIOGRÁFICAS: