miércoles, 29 de abril de 2009

UNIDAD I: Etapas de la Ingenieria Del Software


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. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, 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. 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. 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.

Programacion

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.

Prueba

Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación. 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 practica 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. En general hay dos grandes formas de organizar un área de pruebas, la primera es que esté 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. El segundo enfoque es tener un área de pruebas conformada por programadores con experiencia, personas que saben sin mayores indicaciones en que condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.

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.

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.

martes, 28 de abril de 2009

UNIDAD I: Porque emprender un proyecto de Software

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:
Los sistemas basados en computadora pueden ser de ayuda para eliminar la necesidad de cálculos tediosos y comparaciones repetitivas.
Un sistema automatizado puede ser de gran utilidad si lo que se necesita es un procesamiento acelerado.
*Aumento en el volumen :
La incapacidad para mantener el ritmo de procesamiento no significa el abandono de los procedimientos existentes. Quizá éstos resulten inadecuados para satisfacer las demandas actuales. En estas situaciones el analista de sistemas considera el impacto que tiene la introducción de procesamiento computarizado, si el sistema existente es manual. Es poco probable que únicamente el aumento de la velocidad sea la respuesta. El tiempo de procesamiento por transacción aumenta si se considera la cantidad de actividades comerciales de la empresa junto con su patrón de crecimiento.
* Recuperación más rápida de la información :
Las organizaciones almacenan grandes cantidades de datos, por eso, debe tenerse en cuenta donde almacenarlos y como recuperarlos cuando se los necesita.
Cuando un sistema se desarrolla en forma apropiada, se puede recuperar en forma rápida la información.

Costo

* Vigilancia de los costos:
Para determinar si la compañía evoluciona en la forma esperada, de acuerdo con lo presupuestado, se debe llevar a cabo el seguimiento de los costos de mano de obra, bienes y gastos generales.
La creciente competitividad del mercado crea la necesidad de mejores métodos para seguir los costos y relacionarlos con la productividad individual y organizacional.
* Reducción de costos:
Los diseños de sistemas ayudan a disminuir los costos, ya que toman ventaja de las capacidades de cálculo automático y de recuperación de datos que están incluidos en procedimientos de programas en computadora. Muchas tareas son realizadas por programas de cómputo, lo cual deja un número muy reducido de éstas para su ejecución manual, disminuyendo al personal.

Control

*Mayor seguridad de información:
Algunas veces el hecho de que los datos puedan ser guardados en una forma adecuada para su lectura por medio de una máquina, es una seguridad difícil de alcanzar en un medio ambiente donde no existen computadoras.
Para aumentar la seguridad, generalmente se desarrollan sistemas de información automatizados. El acceso a la información puede estar controlado por un complejo sistemas de contraseñas, limitado a ciertas áreas o personal, si está bien protegido, es difícil de acceder.
*Menor margen de error: (mejora de la exactitud y la consistencia)
Esto se puede lograr por medio del uso de procedimientos de control por lotes, tratando de que siempre se siga el mismo procedimiento. Cada paso se lleva a cabo de la misma manera, consistencia y con exactitud: por otra parte se efectúan todos los pasos para cada lote de transacciones. A diferencia del ser humano, el sistema no se distrae con llamadas telefónicas, ni olvidos e interrupciones que sufre el ser humano. Si no se omiten etapas, es probable que no se produzcan errores.

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)
Muchas empresas aumentan sus vías de comunicación por medio del desarrollo de redes para este fin, dichas vías abarcan todo el país y les permiten acelerar el flujo de información dentro de sus oficinas y otras instalaciones que no se encuentran en la misma localidad.
Una de las características más importantes de los sistemas de información para oficinas es la transmisión electrónica de información, como por ejemplo, los mensajes y los documentos.
* Integración de áreas en las empresas:
Con frecuencia las actividades de las empresas abarcan varias áreas de la organización, la información que surge en un área se necesita en otra área, por ejemplo.
Los sistemas de información ayudan a comunicar los detalles del diseño a los diferentes grupos, mantienen las especificaciones esenciales en un sitio de fácil acceso y calculan factores tales como el estrés y el nivel de costos a partir de detalles proporcionados por otros grupos.

Competitividad

Los sistemas de información computacionales son un arma estratégica, capaz de cambiar la forma en que la compañía compite en el mercado, en consecuencia éstos sistemas mejoran la organización y la ayudan a ganar "ventaja competitiva", sin embargo, si los competidores de la compañía tienen capacidades mas avanzadas para el procesamiento de información, entonces los sistemas de información pueden convertirse en una "desventaja competitiva".

UNIDAD I: Objetivos

El objetivo específico de la IS es producir software de alta calidad.




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 la cual persigue los siguientes objetivos:

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

UNIDAD I: Definición de Ingeniería de Software




La ingeniería de software se puede considerar como la ingeniería aplicada al software, esto es en base a herramientas preestablecidas, la aplicación de las mismas de la forma más eficiente y óptima; objetivos que siempre busca la ingeniería. No es sólo de la resolución de problemas, sino más bien teniendo en cuenta las diferentes soluciones, elegir la más apropiada. Según algunos autores podemos encontrar las siguientes definiciones:


Definición 1. Ingeniería del Software es el estudio de los principios y metodologías para desarrollo y mantenimiento de sistemas de software [Zelkovits, 1978].
Definición 2. Ingeniería del Software es la aplicación practica del conocimiento científico en el diseño y construcción de programas de computadora y la documentación necesaria requerida para desarrollar, operar(funcionar) y mantenerlos [Bohem, 1976].
Definición 3. Ingeniería del Software trata del establecimiento de los principios y métodos de a fin de obtener software de modo rentable que sea fiable y trabaje en máquinas reales [Bauer, 1972].
Definición 4: La aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del software; es decir, la aplicación de Ingeniería al software [IEEE, 1993].


Según la definición del IEEE, "software es la suma total de los programas de computadora, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo". Según el mismo autor, "un producto de software es un producto diseñado para un usuario". En este contexto, de Software (SE del inglés Software Engineering) es un enfoque sistemático del desarrollo, operación, mantenimiento y retiro del software", que en palabras más llanas, se considera que " de Software es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas (eficaces en costo o económicas) a los problemas de desarrollo de 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". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo" .

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

UNIDAD I: Historia


Primera Era: Años 50

Programas con ensamblador.
Funciones matemática.
Época de transición: 60.
Crisis del software.

Segunda Era : 70’s.


Aparición de computadoras más potentes.
Software de uso general, fuerte mantenimiento.
No existe un conocimiento detallado de la estructura interna de los programas.

Tercera Era: 80’s


Marcada por PCs
Disminución de precios
Programación estructurada
Reducción del mantenimiento


Cuarta ERA


Lenguajes de cuarta generación.
Prog. Concurrente con más de un procesador.
Lenguajes orientados a objetos.
Mejores herramientas, pero mayor complejidad.

Crisis de Software

Estimación de desarrollo y costos impreciso

No se corresponde la productividad del software con la demanda Insatisfacción y desconfianza del cliente, debido a un pésimo control de calidad No mantenimiento.

Detección de un fallo no implica una sustitución del módulo

No documentación


Situación Actual

La industria del software no ha acabado de salir de la fase artesanal.
Dedicamos nuestros esfuerzos de hoy a arreglar lo que se hizo mal ayer.

Prisa patológica, estimaciones no realistas (falta de planificación), desorganización nos lleva a:
· Procesos software normalmente improvisados.
· Si se han especificado, no se siguen rigurosamente.
· Organización reactiva (resolver crisis inmediatas).

Recorte de revisiones, pruebas y verificaciones del software:
· Si hay plazos rígidos Þse sacrifican funcionalidad y calidad del producto para satisfacer el plan.
· No existen bases objetivas para juzgar la calidad del producto.
· El 90% de los proyectos no alcanzan los objetivos
· El 40% fracasan por completo
· El 29% no se entregan nunca


La Ingeniería de Software es relativamente nueva ya que aparece a finales de los años sesenta y principios de los setenta, comenzando con las Técnicas de Programación Estructurada, incorporándolas a las fases del ciclo vital de software. La Programación Estructurada fue seguida por otros métodos estructurados de análisis y también métodos estructurados de diseño. Además, comenzaron a usarse tecnologías orientadas a objetos. En un principio la programación era la tarea de oro de la Ingeniería de Software pero ahora la ingeniería y el diseño de requisitos, y en general el proceso de software, son más importantes. En los años noventa la gerencia de proyecto ganó interés y llegó a ser un componente importante en la Ingeniería de Software. En la década pasada, los estándares de la Ingeniería de Software y la madurez de proceso han caracterizado la industria del software como una disciplina madura.

UNIDAD I: Aspectos Generales


El Software invade nuestro mundo:


  • Hace nuestras vidas más confortables, eficientes y efectivas.

  • Trabaja explícitamente y detrás de la escena en muchos aspectos de nuestra vida incluyendo salud, bienestar, finanzas, control , educación, comercio, administración, hogar, entre otros.

El Software nos ha permitido:



  • Ejecutar tareas más rápido y efectivo (procesamiento de palabras, hojas de cálculo, correo electrónico, telefonía móvil, entre otras).

  • Apoyar los desarrollos y avances en medicina, agricultura, transporte, industrias, comercio, entre otras.

  • Permitir hacer nuevas cosas como educación asistida, microcirugía, robótica, entre otras.

Definición de Software:



  • Programas de computadora que cuando se ejecutan proporcionan la función y el rendimiento esperado.

  • Estructuras de datos que permiten a los programas manipular adecuadamente la información.

  • Documentos que describen la operación y uso de programas.

Características del Software:



  • Se desarrolla, no se fabrica.

  • La mayoría del software es hecho a la medida.

INTRODUCCIÓN:

DESCRIPCIÓN DE LA MATERIA:
Los grandes sistemas software constituyen actualmente un elemento común en nuestra sociedad, convirtiéndose día a día en imprescindibles para la industria, el comercio y las personas. La producción del software, como cualquier otro producto industrial, necesita de la aplicación de los conceptos, técnicas y métodos de la ingeniería que posibiliten el desarrollo de sistemas software de calidad dentro de los plazos de tiempo y presupuesto previstos. El reconocimiento de la necesidad de un enfoque de ingeniería al desarrollo del software se remonta a dos conferencias organizadas por la OTAN en los años 1968 y 1969, donde se acuñó el término Ingeniería del Software y se sentaron las bases que han hecho posible el gran avance que esta disciplina ha experimentado en estas tres últimas décadas.

Se pretende que los estudiantes desarrollen las habilidades necesarias para modelar productos y sistemas software a un nivel de abstracción superior al de la implementación de código. Por ello, los conceptos teóricos presentados se refuerzan con el desarrollo de asignaciones que serán desarrolladas a lo largo del curso.

Objetivo Terminal

Siguiendo las recomendaciones internacionales de formación en ingeniería del software, y de acuerdo con el estado del arte y de la práctica actual de la disciplina, el programa de las asignaturas se centrará en la formación de los aspectos técnicos fundamentales relacionados con el análisis, modelado y diseño del software.


Objetivos Específicos
  • Saber en qué consiste la Ingeniería del Software.

  • Conocer y comprender qué pasos se han de seguir para el desarrollo de un producto software.

  • Comprender el proceso de determinar las necesidades del cliente y trasladarlas a requisitos software.