sábado, 30 de abril de 2011

Ingenieria de software

1.- QUÉ ES LA INGENIERIA DE SOFTWARE

Ingeniería de software es la disciplina o área de la Ingeniería que ofrece métodos y técnicas para desarrollar y mantener software, es decir, permite elaborar consistentemente productos correctos, utilizables y costo-efectivos.

El proceso de ingeniería de software se define como un conjunto de etapas parcialmente ordenadas con la intención de logra un objetivo, en este caso, la obtención de un producto de software de calidad. 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.

METODOLOGIAS
El objetivo de encontrar procesos y metodologías, son a fin de mejorar la productividad en el desarrollo y la calidad del producto software.

Por ello la ingeniería de software consta de las siguientes etapas:


1) Planeación: Etapa inicial en el desarrollo de un proyecto de software, la cual transforma inquietudes y requerimientos de información de un área específica, en un estudio de factibilidad que contiene:

• Definición organizada de los requerimientos
• Recursos con que se cuenta
• Alternativas de desarrollo
• Cronograma de actividades


2) Determinación de los requisitos del sistema:
Extraer los requisitos y requerimientos de un producto de software es la primera etapa para crearlo, el proceso de reunión de requisitos se intensifica y se centra específicamente en el software. Dentro del proceso de análisis es fundamental que a través de una colección de requerimientos funcionales y no funcionales, el desarrollador del software comprenda completamente la naturaleza de los programas que deben construirse para desarrollar la aplicación, la función requerida, comportamiento, rendimiento e interconexión.

El resultado del análisis de requerimientos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema.

La captura, análisis y especificación de requerimientos, es una parte decisiva ya que de esta etapa depende el logro de los objetivos finales.


3) Especificación:
La Especificación de Requisitos describe el comportamiento que se espera del software una vez desarrollado. Gran parte del éxito de un proyecto de software radicará en la identificación de las necesidades del negocio (definidas por la alta dirección), así como la interacción con los usuarios funcionales para la recolección, clasificación, identificación, priorización y especificación de los requisitos del software.

Entre las técnicas utilizadas para la especificación de requisitos se encuentran:


Casos de Uso,
Historias de usuario,


Siendo los primeros más rigurosos y formales, los segundas más ágiles e informales.

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


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

La Arquitectura de Software consiste en el diseño de componentes de una aplicación generalmente utilizando patrones de arquitectura. El diseño arquitectónico debe permitir visualizar la interacción entre las entidades del negocio y además poder ser validado, por ejemplo por medio de diagramas de secuencia. Un diseño arquitectónico describe en general el cómo se construirá una aplicación de software. Para ello se documenta utilizando diagramas, por ejemplo:


Diagramas de clases

Diagramas de base de datos

Diagramas de despliegue plegados


Diagramas de secuencia multidireccional

Siendo los dos primeros los mínimos necesarios para describir la arquitectura de un proyecto que iniciará a ser codificado. Depende del alcance del proyecto, complejidad y necesidades, el arquitecto elige qué diagramas elaborar. Entre las herramientas para diseñar arquitecturas de software se encuentran:

Enterprise Architect
Microsoft Visio for Enterprise Architects


5) 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 es necesariamente la porción más larga. La complejidad y la duración es esta etapa está íntimamente ligada al o a los lenguajes de programación utilizados.


6) Prueba de sistemas:
Durante esta fase, el sistema se emplea de manera experimental para asegurarse que el software no tenga fallas, es decir, que funciona de acuerdo con las especificaciones y en la forma en que los usuarios esperan que lo haga.


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.

En general hay dos grandes formas de organizar un área de pruebas:

a) Compuesta por personal inexperto y que desconozca el tema de pruebas, de esta forma se evalúa que la documentación entregada sea de calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas.
b) Conformada por programadores con experiencia, personas que saben sin mayores indicaciones en qué condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.

7) 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, usabilidad, mantenimiento futuro y ampliaciones al sistema.

8) 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. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería civil, arquitectura y trabajo de construcción es dar mantenimiento.

MODELOS DE DESARROLLO DE SOFTWARE

Para el desarrollo de cualquier producto de software se realizan una serie de tareas entre la idea inicial y el producto final, un modelo de desarrollo establece el orden en el que se harán las cosas en el proyecto, provee de requisitos de entrada y de salida para cada una de las actividades, por ello es necesario el modelo de desarrollo.

A continuación se muestran los modelos de desarrollo de software, de los cuales podemos destacar a éstos por ser los más utilizados y los más completos:

Modelo en cascada: Ordena rigurosamente las etapas del ciclo de vida del software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la inmediatamente anterior.

Modelo de prototipos: Este diseño conduce a la construcción de un prototipo, el cual es evaluado por el cliente para una retroalimentación, debe ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar mucho dinero pues a partir de que éste sea aprobado nosotros podemos iniciar el verdadero desarrollo del software.

Modelo en espiral: Las actividades de este modelo se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas a priori, sino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior.


Desarrollo iterativo y creciente o Incremental: Permite construir el proyecto en etapas incrementales en donde cada etapa agrega funcionalidad, cada etapa consiste de requerimientos, diseño, codificación, pruebas y entrega, es más rápido que el modelo en cascada.

RAD (Desarrollo rápido de aplicaciones): Comprende el desarrollo iterativo, la construcción de prototipos y el uso de utilidades CASE, tiende a englobar también la usabilidad, utilidad y la rapidez de ejecución.

Desarrollo concurrente: Se utiliza como paradigma de desarrollo de aplicaciones cliente/servidor, que cuando se aplica, el modelo de proceso concurrente define actividades en dos dimensiones: una dimensión de sistemas y una dimensión de componentes. Los aspectos del nivel de sistemas se afrontan mediante tres actividades: diseño, ensamblaje y uso.

 Proceso Unificado: Es un proceso de software genérico que puede ser utilizado para una gran cantidad de tipos de sistemas de software, para diferentes áreas de aplicación, diferentes tipos de organizaciones, diferentes niveles de competencia y diferentes tamaños de proyectos.

RUP (Proceso Racional Unificado): Es un proceso de desarrollo de software y junto con el Lenguaje Unificado de Modelado UML, constituye la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos.


2.-UTILIDAD DE UN MANUAL DE USUARIO

Es un documento técnico de un determinado sistema que intenta dar asistencia a sus usuarios, generalmente son incluidos a dispositivos electrónicos, hardware de computadora y aplicaciones. El manual de usuario puede venir tanto en forma de libro como en forma de documento digital, e incluso poder ser consultado por internet.

ELABORACION DE UN MANUAL DE USUARIO


Un manual de usuario generalmente debe contener:
 
1. Portada: De que se trata el documento y quien lo elaboro
2. Introducción: Describe el uso del documento para qué sirve y de que habla
3. Análisis y requerimientos del sistema: Que se ocupa para poder instalarlo y usarlo
4. Explicación del funcionamiento: Debes de poner paso a paso y con pantallas bien explicadas cómo funciona el programa
5. Glosario
• Debe ser escrito de tal manera, que cualquier persona pueda entenderlo con la menor dificultad posible.
• Es recomendable, detallar todos aquellos pasos que se llevan a cabo para usar el programa.
• Especificar los alcances y las limitaciones que tiene el programa.
• Un buen punto de partida para un manual de usuario, es hacer de cuenta que las personas que lo van a leer no tienen el más mínimo conocimiento sobre computadores.

3.- UTILIDAD DE UN MANUAL TECNICO

Un manual técnico es aquel que va dirigido a un público con conocimientos técnicos sobre algún área, para que puedan darle mantenimiento en caso que se requiera, también puede ser utilizado por el departamento de auditoría de sistemas.

ELABORACIÓN DE UN MANUAL TECNICO
 

Este documento contiene toda la información sobre los recursos utilizados por el proyecto, llevan una descripción muy bien detallada sobre las características físicas y técnicas de cada elemento. Por ejemplo: características de procesadores, velocidad, dimensiones del equipo, garantías, soporte, proveedores y equipo adicional.

Debe incluir:

A) Logotipo de la organización.
• Nombre oficial de la organización.
• Denominación y extensión
• Lugar y fecha de elaboración.
• Número de revisión (en su caso).
• Unidades responsables de su elaboración, revisión y/o autorización.
• Clave de la forma.
B) Indice o contenido
C) Prologo y/o introducción
D) Objetivos de los procedimientos
E) Áreas de aplicación y alcance de los procedimientos
F) Responsables
G) Normas de operación
H) Concepto (s)
I) Procedimiento
J) Formulario de Impresos
K) Diagramas de flujo
L) Glosario de términos