UNIDAD 1: FUNDAMENTOS
DE INGENIERÍA DE SOFTWARE
1.1.- Conceptos
Básicos
Sin importar cualquiera que sea el tipo de software a ser
desarrollado sea de sistemas (Son programas que sirven a otros programas
en el trabajo de desarrollo como compiladores, editores.), tiempo real (Software encargado de analizar datos del mundo en forma real tales como análisis de datos, control automatizado, monitoreo de
datos), gestión (a esta categoría se incluye
el software comercial a nivel empresarial nominas, inventarios), ingeniería y científico (es software que
posee un amplio manejo numérico usado en biología, astronomía, CAD, …), empotrado (software
que se encuentra residente en memoria, tales como : controles
automáticos en los vehículos, sistemas de background, partes del sistema operativo.).
La ingeniería del software pretende utilizar los recursos computacionales de tal manera
que se produzcan soluciones eficientes y eficaces a los problemas informáticos, el éxito de un proyecto involucra elementos
como la planeación, la administración y la utilización de
metodologías de desarrollo de software.
Calidad
en la ingeniería del software. En una versión sucinta la calidad en la ingeniería del
software es un grupo de
características que representa la efectividad y la eficiencia de un sistema de información. Es
importante enfatizar en dos puntos :
·
Un
software de calidad debe ser eficaz, es decir, que debe realizar las funciones establecidas, debe ser
amigable. Un usuario debe utilizar el software porque produce resultados
confiables, realiza todas las operaciones que se requieren, ejecuta las
operaciones en un tiempo aceptado y es fácilmente usado por el grupo de
usuarios a quien este dirigido.
·
Un
software de calidad debe ser eficiente, es decir el costo de su desarrollo tomando todos los
recursos y el costo de su operación debe ser tal que las organizaciones involucradas en su desarrollo
y uso obtengan el máximo beneficio o por lo menos un beneficio aceptable en un
período de tiempo establecido.
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.
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).
1.3.- Etapas del
Desarrollo de Software
El modelo de desarrollo de software por etapas es
similar al modelo de prototipos ya que se muestra al cliente
el software en diferentes estados sucesivos de desarrollo, se diferencia en que
las especificaciones no son conocidas en detalle al inicio del proyecto y por
tanto se van desarrollando simultáneamente con las diferentes versiones del
código.
Pueden distinguirse las siguientes fases:
- Especificación
conceptual
- Análisis
de requisitos
- Diseño
inicial
- Diseño
detallado, codificación, depuración y liberación
Este modelo estipula que el software será
desarrollado en sucesivas etapas:
1. Plan operativo: Etapa
donde se define el problema que resolver, las metas del proyecto, las metas de
calidad y se identifica cualquier restricción aplicable al proyecto.
2. Especificación de requisitos: Permite entregar una visión de alto nivel sobre el proyecto, poniendo énfasis en la descripción del problema desde el punto de vista de los clientes y desarrolladores.
También se considera la posibilidad de una
planificación de los recursos sobre una escala de tiempos.
3. Especificación funcional: Especifica la información sobre la cual el software a desarrollar trabajará.
4. Diseño: Permite describir como el sistema va a satisfacer los requisitos. Esta etapa a menudo tiene diferentes niveles de detalle.
Los niveles más altos de detalle generalmente
describen los componentes o módulos que formarán el software a ser producido.
Los niveles más bajos, describen, con mucho
detalle, cada módulo que contendrá el sistema.
5. Implementación: Aquí es
donde el software a ser desarrollado se codifica. Dependiendo del tamaño del
proyecto, la programación puede ser distribuida entre distintos programadores o
grupos de programadores.
Cada uno se concentrará en la construcción y prueba
de una parte del software, a menudo un subsistema.
Las pruebas, en general, tienen por objetivo
asegurar que todas las funciones están correctamente implementadas dentro del
sistema.
6. Integración: Es la fase donde todos los subsistemas codificados independientemente se juntan.
Cada sección es enlazada con otra y, entonces,
probada. Este proceso se repite hasta que se han agregado todos los módulos y
el sistema se prueba como un todo.
7. Validación y verificación: Una vez que el sistema ha sido integrado, comienza esta etapa. Es donde es probado para verificar que el sistema es consistente con la definición de requisitos y la especificación funcional.
Por otro
lado, la verificación consiste en una serie de actividades que aseguran que el
software implementa correctamente una función específica.
Al finalizar
esta etapa, el sistema ya puede ser instalado en ambiente de explotación.
8. Mantenimiento: El mantenimiento ocurre cuando existe algún problema dentro de un sistema existente, e involucraría la corrección de errores que no fueron descubiertos en las fases de prueba, mejoras en la implementación de las unidades del sistema y cambios para que responda a los nuevos requisitos.
Las mantenciones se puede clasificar en:
correctiva, adaptativa, perfectiva y preventiva.
1.4.-
Clasificación de la Tecnología en el Desarrollo de
Software, (Tecnología Estructurada y
Orientada a Objetos).
La Tecnología Orientada a Objetos es un nuevo
enfoque sobre la manera de organizar las diferentes piezas que componen un
sistema de información (software), como en el hardware (equipo físico), la base
de datos e incluso, en organizaciones todas estas piezas se denominan
"objetos", los cuales son pequeños subsistemas independientes con
datos propios sobre estos elementos y sus clases y tipos, rigen tales
propiedades como herencia, comunicación con lenguajes, polimorfismos y otros
que en conjunto permiten ventajas prácticas.
Estas están incluidas en las versiones orientadas a
objetos de metodología para análisis y diseño de programación y base de datos.
Con esto, nos hemos referido a la tecnología orientada a objetos aplicada a
software.
Sin embargo este enfoque también es aplicado en la
construcción de hardware, así como también es válido en el diseño organizativo.
A las acciones que, cualquier elemento del mundo
real, realiza como reacción frente a un estímulo las denominaremos Operaciones.
Algunos comportamientos complejos son el resultado
de la interacción o sucesión de varias operaciones, a éstos los denominaremos Procesos.
Tres más importantes de estructuradas.
Simulación. Representación
directa de elementos que "maneja" el usuario en el mundo real consiste
en recrear el mundo real.
No se trata de construir "modelos
ideales", sino de representarlo directamente. Por ello, en este enfoque,
primero se identifican las características
de los elementos del mundo real, los que se organizan en las denominadas estructuras de datos.
Encapsulamiento. Utilización del concepto de “caja negra” a una potencia mucho mayor.
Empaquetar datos y operaciones en forma conjunta se llama encapsulamiento.
Reutilización. Capacidad
de reutilizar código sin alterarlo, programando solo lo adicional o diferente.
Base de la herencia
Encapsulamiento de objetos
El encapsulamiento es combinar las funciones
relacionadas, atributos y estados para formar "objetos". El
encapsulamiento implica auto continencia, por ejemplo el objeto
"Carro" encapsula o "reúne" sus atributos, funciones y
estados en una unidad auto contenido, el encapsulamiento usa información
oculta. Algunas partes del objeto son visibles a todas es decir, públicas.
Es cualquier cosa real o
abstracta, acerca de la cual almacenamos datos y los métodos que controlan
dichos datos.
Es una categoría de un
objeto; y un objeto es una instancia de un tipo de objeto.
Especifican la forma en
que se controlan los datos de un objeto. Los métodos en un tipo de objeto sólo
hacen referencia a las estructuras de datos de ese tipo de objeto.
El empaque conjunto de
datos y métodos se llama encapsulado.
El objeto esconde sus datos de los demás objetos y permite el acceso a los
datos mediante sus propios métodos, esto recibe el nombre de ocultamiento de la información. El
encapsulado evita la corrupción de los datos de un objeto, protegiéndolos del
uso arbitrario y no pretendido.
Un mensaje es una solicitud para que se lleve a cabo la
operación indicada y se
produzca el resultado; en consecuencia, las implantaciones OO se refieren a los
mensajes como solicitudes.
El término clase se refiere a la implantación en
software de un tipo de objeto. Especifica una estructura de datos y los métodos
operativos permisibles que se aplican a cada uno de sus objetos.
Herencia
Un tipo de objeto de alto
nivel puede especializarse en tipos de objeto de bajo nivel. Un tipo de objeto
puede tener subtipos. Una clase implanta el tipo de objeto.
Es una implantación de la
generalización. La generalización establece que las propiedades de un tipo se aplican a sus subtipos.
Polimorfismo
Se aplica a una operación
que adopta varias formas de implantación. Una de las ventajas del polimorfismo
es que se puede hacer una solicitud de una operación sin conocer el método que
debe ser llamado.
Es el acto o resultado de
eliminar diferencias entre los objetos, de modo que podamos ver los aspectos
comunes. Todo objeto es único, sin embargo, la abstracción elimina algunas
distinciones para que podamos ver los aspectos comunes entre los objetos.
Es el acto o el resultado
de distinguir un concepto que es más general que otro. La generalización nos
permite examinar si los conceptos tiene algo en común.
Es un cambio en el estado
de un objeto. En el análisis orientado a objetos el mundo se describe en
términos de los objetos y sus estados, así como de los eventos que modifican
esos eventos. Así, los eventos sirven como indicadores de los instantes en que
ocurren los cambios de estado.
Es la propiedad de un
sistema que ha sido dividido en componentes. Los módulos son la división física
de la abstracción lógica.
1.5.-
Definición e Historia de las Herramientas Case
(Computer Aided Software Engineering,
Ingeniería de Software Asistida por Ordenador)
Son diversas aplicaciones
informáticas destinadas a aumentar la productividad en el desarrollo de
software reduciendo el coste de las mismas en términos de tiempo y de dinero.
Estas herramientas nos 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 costes, 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.
Historia
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.
Tecnología case
La tecnología CASE supone la automatización del desarrollo del
software, contribuyendo a mejorar la calidad y la productividad en el
desarrollo de sistemas de información y se plantean los siguientes objetivos:
•
Permitir la aplicación práctica de metodologías
estructuradas, las cuales al ser realizadas con una herramienta se consigue
agilizar el trabajo.
•
Facilitar la realización de prototipos y el
desarrollo conjunto de aplicaciones.
•
Simplificar el mantenimiento de los programas.
•
Mejorar y estandarizar la documentación.
•
Aumentar la portabilidad de las aplicaciones.
•
Facilitar la reutilización de componentes software.
•
Permitir un desarrollo y un refinamiento visual de
las aplicaciones, mediante la utilización de gráficos.
1.6.-
Clasificación de las Herramientas Case
No existe una única clasificación
de herramientas CASE y, en ocasiones, 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 cubren.
• La arquitectura de las
aplicaciones que producen.
• Su funcionalidad.
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 desarrollo: construcción e implantación.
Juegos de herramientas o Tools-Case, 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.
Componentes y funcionalidades de
una Herramienta CASE Módulos de
diagramación y modelización
Algunos de los diagramas y modelos
utilizados con mayor frecuencia son:
• Diagrama de
flujo de datos.
• Modelo
entidad - interrelación.
• Historia de
la vida de las entidades.
• Diagrama
Estructura de datos.
• Diagrama Estructura
de cuadros.
• Técnicas matriciales.
Algunas características referentes
a los diagramas son:
• Número máximo
de niveles para poder soportar diseños complejos.
• Número máximo
de objetos que se pueden incluir para no encontrarse limitado
• En el diseño
de grandes aplicaciones.
• Número de diagramas distintos en
pantalla o al mismo tiempo en diferentes ventanas.
Biografía
El Analista de Sistemas
Grupo de Estudios AS – http://members.xoom.com/analista/portada.htm
Revista, Tecnología de Punta
Ing. Víctor Castañeda Guzmán
Herramientas para el Desarrollo de Sistemas de Información
Instituto Nacional de Estadística e Informática
Power Designer
http://www.sybase.com/products/powerdesigner
Oracle Designer
http://www.oracle.com/tools/designer/quicktour/contents.htm#features
Erwin
http://www.platinum.com/products/brochure/als/b_erwin.htm
System Architect
The Case Tool Home Page
Herramientas CASE
http://www.geocities.com/SiliconValley/Bit/6238/index.htm