viernes, 8 de julio de 2016

INGENIERÍA DE SOFTWARE






¿Qué es la Ingeniería del Software?

La Ingeniería del software es una disciplina o área de la Informática o Ciencias de la Computación, que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo. Hoy día es cada vez más frecuente la consideración de la Ingeniería del Software como una nueva área de la Ingeniería, y el Ingeniero del Software comienza a ser una profesión implantada en el mundo laboral internacional, con derechos, deberes y responsabilidades que cumplir, junto a una, ya, reconocida consideración social en el mundo empresarial y, por suerte, para esas personas con brillante futuro.

La ingeniería del software trata con áreas muy diversas de la Informática y de las Ciencias de la Computación, tales como construcción de compiladores, sistemas operativos o desarrollos de Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a una infinidad de áreas tales como: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, el mundo del derecho, la red de redes Internet, redes Intranet y Extranet, etc.


Definición del termino Ingeniería del Software

El termino Ingeniería se define en el Diccionario de la Real Academia Española de la Lengua como: "1. Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y de las fuentes de energía. 2. Profesión y ejercicio del Ingeniero" y el termino Ingeniero se define como: persona que profesa o ejerce la Ingeniería. De igual modo la Real Academia de Ciencias Exactas, Físicas y Naturales de España define el termino Ingeniería como: " Un conjunto de conocimientos y técnicas cuya aplicación permite la utilización racional de los materiales y de los recursos naturales, mediante invenciones, construcciones u otras realizaciones provechosas para el hombre".


Evidentemente, si la Ingeniería del Software es una nueva Ingeniería, parece lógico que reúna las propiedades citadas en las definiciones anteriores. Sin embargo ni el DRAE(Diccionario de la Real Academia Española de la Lengua), ni la Real Academia Española de Ciencias han incluido todavía el termino en sus últimas ediciones; en consecuencia vamos a recurrir para su definición más precisa a algunos de los autores más acreditados que comenzaron en su momento a utilizar el término o bien en las definiciones dadas por organismos internacionales profesionales de prestigio tales como IEEE o ACM, de los cuales se han seleccionado las siguientes definiciones de Ingeniería del Software.




LAS TRES NOTACIONES SON UML-BPMN Y DFD

UML:
Lenguaje Unificado de Modelado (LUM o UML) es el lenguaje de modelado de sistemas de software más reconocido y usado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para especificar,  visualizar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema, incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.

Es importante decir que UML es un "lenguaje de modelado" para describir o para especificar métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir; es decir en el lenguaje en el que está descrito el modelo.

Se puede aplicar en el desarrollo de software entregando gran variedad de formas para dar soporte a una metodología de desarrollo de software (tal como el Proceso Unificado Racional o RUP), pero no especifica en sí mismo qué metodología o proceso utilizar.

UML no puede compararse con la programación estructurada, pues UML significa Lenguaje Unificado de Modelado, no es programación, solo se diagrama la realidad de una utilización en un requerimiento. Mientras que, programación estructurada, es una forma de programar como lo es la orientación a objetos, sin embargo, la programación orientada a objetos viene siendo un complemento perfecto de UML, pero no por eso se toma UML sólo para lenguajes orientados a objetos.
Una de las metas principales de UML es avanzar en el estado de la integración institucional proporcionando herramientas de interoperabilidad para el modelado visual de objetos. Sin embargo para lograr un intercambio exitoso de modelos de información entre herramientas, se requirió definir a UML una semántica y una notación.
La notación es la parte gráfica que se ve en los modelos y representa la sintaxis del lenguaje de modelado. Por ejemplo, la notación del diagrama de clases define como se representan los elementos y conceptos como son: una clase, una asociación y una multiplicidad. ¿Y qué significa exactamente una asociación o multiplicidad en una clase? Un metamodelo es la manera de definir esto (un diagrama, usualmente de clases, que define la notación). 


BPMN:

El Business Modeling Notation o BPMN (Notación para el Modelado de Procesos de Negocios) es un método de negocios que ilustra los procesos en forma similar a un diagrama de flujo. El BPMN fue desarrollado en un principio por el Business Process Management Initiative (BPMNI). Actualmente es sostenido por el Grupo de Gestión de Objetos (OMG).

El BPMN proporciona una manera fácil de definir y analizar los procesos de negocios públicos y privados. Además, brinda una notación estándar que sea comprensible para la gestión del personal, analistas y desarrolladores. La intención original del BPMN era ayudar a establecer puentes de comunicación que a menudo existen dentro de una organización o empresa. Esta notación puede ayudar a asegurarse de que el XML (documentos diseñados para la ejecución de diversos procesos de negocios), puedan ser visualizados con una notación común.

Un diagrama de BPMN es ensamblado a partir de un conjunto de elementos básicos. Los elementos se clasifican en tres grupos:

- Objetos de flujo: figuras geométricas como círculos, rectangulos o rombos de control de flujo que indican los eventos Y actividades.

- Objetos de conexión: trazos o líneas de puntos que pueden incluir flechas para indicar la dirección del proceso.

- Swimlanes (carriles de piscina): llamada así por  su semejanza geométrica con las líneas de carril del fondo de  una piscina   olímpica. Rectas sólidas a lo largo y dentro de un cuadrado denominado fondo. El Swinglanes organiza el flujo de objetos en categorías con funcionalidad similar.


DFD:
Un diagrama de flujo de datos (DFD por sus siglas en español e inglés) es una representación gráfica del "flujo" de datos a través de un sistema de información. Un diagrama de flujo de datos también se puede utilizar para la visualización de procesamiento de datos (diseño estructurado). Es una práctica común para un diseñador dibujar un contexto a nivel de DFD que primero muestra la interacción entre el sistema y las entidades externas. Este contexto a nivel de DFD se "explotó" para mostrar más detalles del sistema que se está modelando.

Los diagramas de flujo de datos fueron inventados por Larry Constantine, el desarrollador original del diseño estructurado, basado en el modelo de computación de Martin y Estrin: "flujo gráfico de datos”. Los diagramas de flujo de datos (DFD) son una de las tres perspectivas esenciales de Análisis de Sistemas Estructurados y Diseño por Método SSADM. El patrocinador de un proyecto y los usuarios finales tendrán que ser informados y consultados en todas las etapas de una evolución del sistema.

Con un diagrama de flujo de datos, los usuarios van a poder visualizar la forma en que el sistema funcione, lo que el sistema va a lograr, y cómo el sistema se pondrá en práctica. El antiguo sistema de diagramas de flujo de datos puede ser elaborado y se comparó con el nuevo sistema de diagramas de flujo para establecer diferencias y mejoras a aplicar para desarrollar un sistema más eficiente. Los diagramas de flujo de datos pueden ser usados para proporcionar al usuario final una idea física de cómo resultarán los datos a última instancia, y cómo tienen un efecto sobre la estructura de todo el sistema. La manera en que cualquier sistema es desarrollado puede determinarse a través de un diagrama de flujo de datos. El desarrollo de un DFD ayuda en la identificación de los datos de la transacción en el modelo de datos.


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.

Otras definiciones:
·         Las Herramientas CASE son un 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 sigla genérica para una serie de programas y una filosofía de desarrollo de software que ayuda a automatizar el ciclo de vida de desarrollo de los sistemas.
·         Una innovación en la organización, un concepto avanzado en la evolución de tecnología con un potencial efecto profundo en la organización. Se puede ver al CASE como la unión de las herramientas automáticas de software y las metodologías de desarrollo de software formales.

El empleo de herramientas Case permiten integrar el proceso de ciclo de vida:
·         Análisis de datos y procesos integrados mediante un repositorio.
·         Generación de interfaces entre el análisis y el diseño.
·         Generación del código a partir del diseño.
·         Control de mantenimiento.
·         Tipos de Herramientas CASE

No existe una única clasificación de herramientas CASE, es difícil incluirlas en una clase determinada. Podrían clasificarse atendiendo a:
·         Las plataformas que soportan.
·         Las fases del ciclo de vida del desarrollo de sistemas que abarca.
·         La arquitectura de las aplicaciones que produce.
·         Su funcionalidad.


Las herramientas CASE, en función de las fases del ciclo de vida abarcadas, se pueden agrupar de la forma siguiente:

Herramientas integradas, I-CASE (Integrated CASE, CASE integrado): abarcan todas las fases del ciclo de vida del desarrollo de sistemas. Son llamadas también CASE workbench.
Las herramientas I-CASE se basan en una metodología. Tienen un repositorio y aportan técnicas estructuradas para todas las fases del ciclo de vida. Estas son las características que les confieren su mayor ventaja: una mejora de la calidad de los desarrollos. Sin embargo, no todas ellas son modernas en el sentido de aprovechar la potencia de las estaciones de trabajo o la utilización de lenguajes de alto nivel o técnicas de prototipo.



Herramientas de alto nivel, U-CASE (Upper CASE - CASE superior) o front-end, orientadas a la automatización y soporte de las actividades desarrolladas durante las primeras fases del desarrollo: análisis y diseño.

Una estrategia posible es utilizar una U-CASE para análisis y diseño, combinada con otras herramientas más modernas para las fases de construcción y pruebas. En este caso, habría que vigilar cuidadosamente la integración entre las distintas herramientas.


Herramientas de bajo nivel, L-CASE (Lower CASE - CASE inferior) o back-end, dirigidas a las últimas fases del desarrolloconstrucción e implantación.


Juegos de herramientas o toolkits, son el tipo más simple de herramientas CASE. Automatizan una fase dentro del ciclo de vida. Dentro de este grupo se encontrarían las herramientas de reingeniería, orientadas a la fase de mantenimiento.
Otra posible clasificación, utilizando la funcionalidad como criterio principal, es la siguiente:
·         Herramientas de gestión de proyectos
·         Herramientas de gestión y configuración de software (SCM)
·         Herramientas de calidad y seguridad de software
·         Herramientas de análisis y diseño
·         Herramientas de desarrollo de interfaz de usuarios
·         Herramientas para la Ingeniería de Software Orientada a Objetos
·         Herramientas de integración y prueba
·         Herramientas de métodos formales
·         Herramientas Cliente/Servidor
·         Herramientas de Ingeniería WEB
·         Herramientas de Reingeniería


EJEMPLOS DE HERRAMIENTAS CASE:
·         Microsoft Project
·         Racional Rose
·         JDeveloper
·         MagicDraw
·         Visual Paradigm
·         Microsoft Visio
·         Enterprise Architect



ETAPAS DE LA INGENIERIA DEL SOFTWARE

El proceso requiere una metodología con 5 etapas:

1.        Análisis de requerimientos: 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.

2.       Especificación: Es la tarea de describir detalladamente el software a ser escrito, de una forma rigurosa. Se describe el comportamiento esperado del software y su interacción con los usuarios y/o otros sistemas.

3.       Diseño y arquitectura: 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.
4.       Programación: 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.

5.       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).

6.       Documentación: Realización del manual de usuario, y posiblemente un manual técnico con el propósito de mantenimiento futuro y ampliaciones al sistema. Las tareas de esta etapa se inician ya en el primera fase pero sólo finalizan una vez terminadas las pruebas.

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



RESUMEN

INGENIERÍA DE SOFTWARE

¿Qué es la Ingeniería del Software?

La Ingeniería del software es una disciplina o área de la Informática o Ciencias de la Computación, que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo.
LAS TRES NOTACIONES SON UML-BPMN Y DFD

UML:
Lenguaje Unificado de Modelado (LUM o UML) es el lenguaje de modelado de sistemas de software más reconocido y usado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para especificar,  visualizar, construir y documentar un sistema.
BPMN:
El Business Modeling Notation o BPMN (Notación para el Modelado de Procesos de Negocios) es un método de negocios que ilustra los procesos en forma similar a un diagrama de flujo. El BPMN fue desarrollado en un principio por el Business Process Management Initiative (BPMNI). Actualmente es sostenido por el Grupo de Gestión de Objetos (OMG).

DFD:
Un diagrama de flujo de datos (DFD por sus siglas en español e inglés) es una representación gráfica del "flujo" de datos a través de un sistema de información. Un diagrama de flujo de datos también se puede utilizar para la visualización de procesamiento de datos (diseño estructurado).


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.

Herramientas integradas, I-CASE (Integrated CASE, CASE integrado): abarcan todas las fases del ciclo de vida del desarrollo de sistemas. Son llamadas también CASE workbench.

Herramientas de alto nivel, U-CASE (Upper CASE - CASE superior) o front-end, orientadas a la automatización y soporte de las actividades desarrolladas durante las primeras fases del desarrollo: análisis y diseño.

Herramientas de bajo nivel, L-CASE (Lower CASE - CASE inferior) o back-end, dirigidas a las últimas fases del desarrolloconstrucción e implantación.

Juegos de herramientas o toolkits, son el tipo más simple de herramientas CASE. Automatizan una fase dentro del ciclo de vida. Dentro de este grupo se encontrarían las herramientas de reingeniería, orientadas a la fase de mantenimiento.

ETAPAS DE LA INGENIERIA DEL SOFTWARE

El proceso requiere una metodología con 5 etapas:

Análisis de requerimientos: 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.

Especificación: Es la tarea de describir detalladamente el software a ser escrito, de una forma rigurosa. Se describe el comportamiento esperado del software y su interacción con los usuarios y/o otros sistemas.

Diseño y arquitectura: 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. 

Programación: 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”.

Prueba: Consiste en comprobar que el software responda/realice correctamente las tareas indicadas en la especificación.
Documentación: Realización del manual de usuario, y posiblemente un manual técnico con el propósito de mantenimiento futuro y ampliaciones al sistema.

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


SUMARY

SOFTWARE ENGINEERING
What is Software Engineering?

Software Engineering is a discipline or area of ​​Information Technology or Computer Science, which offers methods and techniques to develop and maintain quality software that solve problems of all kinds.
THREE-UML notations are BPMN and DFD

UML:
Unified Modeling Language (LUM or UML) modeling language is the most recognized systems and software currently used; It is supported by the OMG (Object Management Group). It is a graphical language to specify, visualize, construct and document a system.
BPMN:
The Business Modeling Notation or BPMN (Notation for Business Process Modeling) is a business method illustrating processes similar to a flowchart. BPMN was developed initially by the Business Process Management Initiative (BPMNI). He is currently held by the Object Management Group (OMG).

DFD:
A data flow diagram (DFD for its acronym in Spanish and English) is a graphical representation of the "flow" of data through an information system. A data flow diagram may also be used for visualization of data processing (structured design).

CASE tools

You can define CASE tools as a set of programs and grants that assist analysts, software engineers and developers during all steps of the life cycle of a software development.

integrated tools, I-CASE (Integrated CASE, CASE integrated): cover all phases of the life cycle of systems development. They are also called CASE workbench.

High-level tools, U-CASE (Upper CASE - CASE higher) or front-end, oriented automation and support activities during the early stages of development: analysis and design.

Low-level tools, L-CASE (Lower CASE - CASE bottom) or back-end, aimed at the final stages of development: construction and implementation.

Toolkits or toolkits are the simplest type of CASE tools. Automate a phase in the life cycle. Within this group reengineering tools aimed at the maintenance phase would be found.
STAGES OF SOFTWARE ENGINEERING

The process requires a methodology with 5 stages:

Requirements analysis: the requirements of the software product are removed. At this stage the skill and experience in software engineering is critical to recognize incomplete, ambiguous or conflicting requirements.

Specification: It is the task of describing in detail the software to be written, in a rigorous way. the expected behavior of the software and its interaction with users and / or other systems described.

Design and architecture: Determine how work generally without elaborating incorporating technology implementation considerations, such as hardware, network, etc.
Programming: the design is translated code. It is the most obvious part of the software engineering work and the first in which "tangible" results.
Test: it consists of checking that the software responds / successfully perform the tasks outlined in the specification.
Documentation: Making user manual, and possibly a technical manual for the purpose of future maintenance and upgrades to the system.
Maintenance: At this stage corrective maintenance (resolver errors) and evolutionary maintenance are performed (improve functionality and / or respond to new

RECOMENDACIONES

1. Se recomienda ampliamente la continuidad del proyecto generación de software de ingeniería, puesto que puede proporcionar herramientas muy útiles   a los estudiantes. Específicamente, la realización de programas en tareas específicas, puede ahorrar una gran cantidad de tiempo en cálculos repetitivos, para pasar entonces a una etapa de análisis que puede resultar mucho más retribuyente.

2. Se recomienda del mismo modo el uso de Excel y VBA por encima de cualquier otro software de programación para la realización de esta  tarea,  puesto que esta disponible prácticamente en cualquier PC, y por que es hasta   el momento la herramienta más versátil.

3. En la realización de programas se recomienda conocer con profundidad  la tarea a realizar, así como llevar a cabo una planeación adecuada que permita tener flexibilidad en la realización de cambios al mismo. Por otra parte esta planeación debe pensar en el acoplamiento de estos programas con otros para su complementación dinámica.

4. Es de suma importancia conocer bien el lenguaje y herramientas que  tiene VBA, sin embargo, la experiencia enseña que el aprendizaje es continuo, por lo tanto se debe de pensar en una mejora también continua de cada programa que se realice, puesto que se encontrarán herramientas muy útiles sobre en el camino de realización de los programas.


Los cambios radicales en hardware a partir de la última mitad del siglo anterior causaron una forzada evolución del software, lo cual ha generado el establecimiento de modelos, estándares y redefinición de conceptos que ratifican un establecimiento cada vez más fuerte de la Ingeniería del Software a nivel mundial.

La gestión de proyectos de desarrollo de software es motor esencial para el éxito de cualquier proyecto de este tipo. La gestión debe fraccionarse en las etapas definidas claramente, manteniendo en cuenta los 4 requisitos indispensables: las personas, el producto, el proceso y el proyecto.

La programación orientada a objetos es una extensión actual de la tecnología que si bien ha evolucionado desde mediados del siglo pasado, presenta hoy día un enfoque nuevo y distinto al tradicional.

El diseño de la arquitectura es parte fundamental de los principios de la Ingeniería del Software y es único en el sentido de que se organiza en función de los objetos y clases que se definirán. De hecho, probablemente la parte más difícil del desarrollo de software orientado a objetos es la identificación de clases necesarias y la forma como interactúan entre sí.
Teniendo en cuenta los principios de Ingeniería del Software resumidos en este ensayo, profundizando en cada uno de ellos y llevando un trabajo juicioso y concienzudo, garantizará el éxito en cualquier proyecto de construcción de software y, porque no? en proyectos de otro tipo.

APRECIACIÓN DEL EQUIPO 

1.       Diseñar soluciones apropiadas a diversos dominios de aplicación, utilizando los principios y métodos propios de la ingeniería, que integren los aspectos éticos, sociales, legales y económicos, ajustadas a las necesidades de las organizaciones.

2.       Demostrar la comprensión y capacidad de aplicación de las teorías, modelos y técnicas actuales para la identificación de problemas, el análisis, el diseño del software, el desarrollo, la implementación, la verificación y la documentación.

3.       Demostrar la comprensión y apreciación de la importancia de la negociación, hábitos de trabajo efectivos, liderazgo y buena comunicación con las partes interesadas en un entorno típico de desarrollo de software.

4.    Estimar los costes de un proyecto y determinar los tiempos de desarrollo, efectuando el seguimiento de costes y plazos y dirigir y asesorar a los equipos de trabajo.
     
        GLOSARIO DE TÉRMINOS
     
      ACOPLAMIENTO
Es la cantidad de relaciones que se establecen entre los módulos de un programa.

Es un módulo de software ejecutable que tiene identidad y una interface bien definida. 

Es aquella que trata el estado de las propiedades deseadas del sistema en forma puramente declarativa.

IMPLEMENTACIÓN
Es la definición de cómo está construido o compuesto algo. Por ejemplo: una clase es una implementación de un tipo, un método es una implementación de una operación.

PROTOCOLO
       Es el conjunto de mensajes a los cuales responde un objeto. 

      LINKOGRAFÍA 

 http://infoblog-ingsoftware.blogspot.pe/2010/11/las-tres-notaciones-son-y-uml-lenguaje.html
 http://www.monografias.com/trabajos5/inso/inso.shtml
http://www.monografias.com/trabajos73/herramientas-case-proceso-desarrollosoftware/herramientas-case-proceso-desarrollo-software.shtml
http://proyectosguerrilla.com/blog/2013/02/las-cinco-etapas-en-la-ingenieria-del-software/
http://www.monografias.com/trabajos102/ingenieria-del-software/ingenieria-del-software.shtml#conclusina

     LINK DE LA DIAPOSITIVA


      VIDEO DE REFERENCIA