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.
Unidad 1. Fundamentos de Ingeniería de Software
lunes, 8 de septiembre de 2014
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”.
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.
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:
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:
- Las
plataformas que soportan.
- Las
fases del ciclo de vida del desarrollo de sistemas que cubren.
- La
arquitectura de las aplicaciones que producen.
- Su
funcionalidad.
- Upper
CASE (U-CASE),
herramientas que ayudan en las fases de planificación, análisis de requisitos y estrategia del desarrollo, usando,
entre otros diagramas UML.
- Middle
CASE (M-CASE),
herramientas para automatizar tareas en el análisis y diseño de la aplicación.
- Lower
CASE (L-CASE),
herramientas que semi-automatizan la generación de código, crean programas
de detección de errores, soportan la depuración de programas y pruebas. Además automatizan la
documentación completa de la aplicación. Aquí pueden incluirse las
herramientas de Desarrollo rápido de
aplicaciones.
- 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.
- Herramientas
de generación semiautomática de código.
- Editores UML.
- Herramientas
de Refactorización de código.
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:
Suscribirse a:
Entradas (Atom)