martes, 7 de abril de 2009

Ingeniería de Software

El proceso de ingeniería de software se define como "un conjunto de etapas parcialmente ordenadas con la intención de lograr un objetivo, en este caso, la obtención de un producto de software de calidad" (Jacobson 1998). El proceso de desarrollo de software "es aquel en que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseño y el diseño implementado en código, el código es probado, documentado y certificado para su uso operativo". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo" (Jacobson 1998).
El proceso de desarrollo de software requiere por un lado, un conjunto de conceptos, una metodología y un lenguaje propio. A este proceso también se le llama el ciclo de vida del software que comprende cuatro grandes fases: concepción, elaboración, construcción y transición. La concepción define el alcance del proyecto y desarrolla un caso de negocio. La elaboración define un plan del proyecto, especifica las características y fundamenta la arquitectura. La construcción crea el producto y la transición transfiere el producto a los usuarios.
Actualmente se encuentra en una etapa de madurez el enfoque Orientado a Objetos (OO) como paradigma del desarrollo de sistemas de información. El Object Management Group (OMG)
es un consorcio a nivel internacional que integra a los principales representantes de la industria de la tecnología de información OO. El OMG tiene como objetivo central la promoción, fortalecimiento e impulso de la industria OO. El OMG propone y adopta por consenso especificaciones entorno a la tecnología OO. Una de las especificaciones más importantes es la adopción en 1998 del Lenguaje de Modelado Unificado o UML (del inglés Unified Modeling Language) como un estándar, que junto con el Proceso Unificado están consolidando la tecnología OO.
La Ingeniería del Software tratas á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 en Intranet/Internet, abordando 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, el mundo del derecho, la red de redes Internet, redes Intranet y Extranet, etc.
Tomando como base la referencia de estas definiciones seleccionadas, se produce de inmediato la pregunta: ¿Cuales son las Actividades que se encuadran hoy en día en el mundo de la ingeniería del software?
La respuesta a esta pregunta se manifiesta de muy diversas formas pero creo que tal vez las fuentes más objetivas sean las conferencias, congresos, eventos y acontecimientos más relevantes realizados en estos últimos años. Podemos nombrar algunas como lo son:
- Inspección de Software Crítico
- Software de Tecnologías de Procesos de Negocios
- Arquitecturas de Software Distribuido
- UML (Lenguaje Unificado de Modelado de Booch, Rumbaugch y Jacobson)
- Control Técnico de Proyectos de Software
- Marcos de Trabajo (FrameWorks) de empresa orienta a objetos
- CORBA (Estándar para objetos distribuidos)
- Estrategias de Ingeniería Inversa para migración de software
- Ingeniería de Objetos
- Modelado y Análisis de Arquitectura de Software
- Objetos Distribuidos
- Sistemas Cliente Servidor
- Reingeniería
- CASE
- Análisis y Diseño Orientado a Objetos
- Reutilización de Software
- Ingeniería de Bases de Datos
- Datawarehousing
- Datamining
- Ingeniería Web
- Metodología Ágiles
- Entre Otros
La ingeniería de software es la disciplina o área de la informática
que ofrece métodos y técnicas para desarrollar y mantener software de calidad.
Etapas del proceso
La ingeniería de software requiere llevar a cabo numerosas tareas, dentro de etapas como las siguientes:
Análisis de requisitos
Extraer los requisitos de un producto de software es la primera etapa para crearlo. Se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I
(es un modelo para la mejora de procesos que proporciona a las organizaciones los elementos esenciales para procesos eficaces). Asimismo, se define un diagrama de entidad/relación, en el que se plasman las principales entidades que participarán en el desarrollo del software.
La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos de trabajo para estos fines. Aunque aún no está formalizada, ya se habla de la Ingeniería de Requisitos
.
La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).
Especificación
Es la tarea de describir detalladamente el software a ser escrito, en una forma matemáticamente rigurosa. En la realidad, la mayoría de las buenas especificaciones han sido escritas para entender y afinar aplicaciones que ya estaban desarrolladas. Las especificaciones son más importantes para las interfaces externas, que deben permanecer estables.
Diseño y arquitectura
Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los casos de uso
para cubrir las funciones que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a la programación orientada a objetos.
Programación
Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no necesariamente es la que demanda mayor trabajo y ni la más complicada. La complejidad y la duración de esta etapa está íntimamente relacionada al o a los lenguajes de programación utilizados, así como al diseño previamente realizado.
Prueba
Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral, para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas.
Documentación
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML),
diagramas, pruebas, manuales de usuario, manuales técnicos, etc.; todo con el propósito de eventuales correcciones, mantenimiento futuro y ampliaciones al sistema.
Mantenimiento
Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas.

Objetivos de la ingeniería de software
En la construcción
y desarrollo de proyectos se aplican métodos y técnicas para resolver los problemas, la informática aporta herramientas y procedimientos sobre los que se apoya la ingeniería de software.
- Mejorar la calidad de los productos
de software
- Aumentar la productividad
y trabajo de los ingenieros del software.
- Facilitar el control
del proceso de desarrollo de software.
- Suministrar a los desarrolladores las bases para construir software de alta calidad en una forma eficiente.
- Definir una disciplina
que garantice la producción y el mantenimiento de los productos software desarrollados en el plazo fijado y dentro del costo estimado.
Objetivos de los proyectos de sistemas
Para que los objetivos se cumplan las empresas
emprenden proyectos por las siguientes razones: "Las cinco C. "
Capacidad
Las actividades de la organización
están influenciadas por la capacidad de ésta para procesar transacciones con rapidez y eficiencia.
Los sistemas de información
mejoran esta capacidad en tres formas.
- Aumentan la velocidad
de procesamiento.
- Aumento en el volumen.

- Recuperación más rápida de la información
.
Costo
- Vigilancia de los costos.
- Reducción de costos.
Control
- Mayor seguridad
de información.
- Menor margen de error: (mejora de la exactitud y la consistencia).
Comunicación
La falta de comunicación
es una fuente común de dificultades que afectan tanto a cliente como a empleados. Sin embargo, los sistemas de información bien desarrollados amplían la comunicación y facilitan la integración de funciones individuales.
- Interconexión: (aumento en la comunicación).
- Integración de áreas en las empresas.
Competitividad
- Asegurar clientes.
Como los clientes son los más importantes para una organización, los directivos buscan diferentes formas para conseguir nuevos clientes y mantener los que tienen. Para eso las empresas proporcionan:
1- Mejores precios
2- Servicios
exclusivos.
3- Productos diferentes.
Estrategias para su desarrollo
Los sistemas de información basados en computadoras sirven para diversas finalidades que van desde el procesamiento de las transacciones de una empresa
hasta proveer de la información necesaria para decidir sobre asuntos que se presentan con frecuencia.
En algunos casos los factores que deben considerarse en un proyecto de sistema de información
, como el aspecto más apropiado de la computadora o la tecnología de comunicaciones que se va a utilizar, el impacto del nuevo sistema sobre los empleados de la empresa y las características específicas que el sistema debe tener se pueden determinar de manera secuencial.
Método de desarrollo por análisis estructurado
Muchos especialistas en sistemas de información reconocen la dificultad de comprender de manera completa sistemas grandes y complejos. El método de desarrollo del análisis estructurado tiene como finalidad superar esta dificultad por medio de:
La división del sistema en componentes.
La construcción de un modelo
del sistema.
El análisis estructurado se concentra en especificar lo que se requiere que haga el sistema o la aplicación. Permite que las personas observen los elementos lógicos (lo que hará el sistema) separados de los componentes físicos (computadora, terminales, sistemas de almacenamiento
, etc.). Después de esto se puede desarrollar un diseño físico eficiente para la situación donde será utilizado.
Componentes
Símbolos gráficos: Íconos y convenciones para identificar y describir los componentes de un sistema junto con las relaciones entre estos componentes.
Diccionario de datos: Descripción de todos los datos usados en el sistema. Puede ser manual o automatizado.
Descripciones de procesos y procedimientos: Declaraciones formales que usan técnicas y lenguajes que permiten a los analistas describir actividades importantes que forman parte del sistema.
Reglas: Estándares para describir y documentar el sistema en forma correcta y completa.
Diseño Estructurado.
El diseño Estructurado es otro elemento del Método de Desarrollo por Análisis Estructurado que emplea la descripción gráfica, se enfoca en el desarrollo de especificaciones del software. El objetivo del Diseño Estructurado es programas formados por módulos independientes unos de otros desde el punto de vista funcional.
La herramienta fundamental del Diseño Estructurado es el diagrama
estructurado que es de naturaleza gráfica y evitan cualquier referencia relacionada con el hardware o detalles físicos. Su finalidad no es mostrar la lógica de los programas (que es la tarea de los diagramas de flujo). Los Diagramas Estructurados describen la interacción entre módulos independientes junto con los datos que un módulo pasa a otro cuando interacciona con él.
Análisis de flujo de datos.
Estudia el empleo
de los datos para llevar a cabo procesos específicos de la empresa dentro del ámbito de una investigación de sistemas usa los diagrama de flujos de datos y los diccionarios de datos.
Herramientas
Las herramientas muestran todas las características esenciales del sistema y la forma en que se ajustan entre si, como es muy difícil entender todo un proceso de la empresa en forma verbal, las herramientas ayudan a ilustrar los componentes esenciales de un sistema, junto con sus acciones.

Diagrama de flujo de datos
Es el modelo del sistema. Es la herramienta más importante y la base sobre la cual se desarrollan otros componentes.
El modelo original se detalla en diagramas de bajo nivel que muestran características adicionales del sistema. Cada proceso puede desglosarse en diagramas de flujos de datos cada vez más detallados. Repitiéndose esta secuencia hasta que se obtienen suficientes detalles para que el analista comprenda la parte del sistema que se encuentra bajo investigación.
Flujo de datos: Son movimientos de datos en una determinada dirección,
desde un origen hasta un destino. Es un paquete de datos.
Proceso: Son personas, procedimientos o dispositivos que utilizan o producen datos. No identifica el componente físico.
Fuente o destino de los datos: Pueden ser personas, programas, organizaciones u otras entidades que interactúan con el sistema pero que se encuentre fuera.
Almacenamiento de datos: Es un lugar donde se guardan los datos. El almacenamiento de datos puede representar dispositivos tanto computarizados como no computarizados.
Cada componente en un diagrama de flujo
de datos tiene una etiqueta con un nombre descriptivo. Los nombres de los procesos reciben un número para poder identificarlos, este número tiene un valor adicional cuando se estudian los componentes que integran un proceso específico.

No hay comentarios:

Publicar un comentario