ingenieria del software

14
NATO Software Engineering Conference La crisis del software se fundamentó en el tiempo de creación de software, ya que en la creación del mismo no se obtenían los resultados deseados, además de un gran costo y poca flexibilidad. Es un término informático acuñado en 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software, de la cual nació formalmente la rama de la ingeniería de software. El término se adjudica a F. L. Bauer, aunque previamente había sido utilizado por Edsger Dijkstra en su obra The Humble Programmer. Básicamente, la crisis del software se refiere a la dificultad en escribir programas libres de defectos, fácilmente comprensibles, y que sean verificables. Las causas son, entre otras, la complejidad que supone la tarea de programar, y los cambios a los que se tiene que ver sometido un programa para ser continuamente adaptado a las necesidades de los usuarios. Además, no existen todavía herramientas que permitan estimar de una manera exacta, antes de comenzar el proyecto, cuál es el esfuerzo que se necesitará para desarrollar un programa. Este hecho provoca que la mayoría de las veces no sea posible estimar cuánto tiempo llevará un proyecto, ni cuánto personal será necesario. Cuando se fijan plazos normalmente no se cumplen por este hecho. Del mismo modo, en muchas ocasiones el personal asignado a un proyecto se incrementa con la esperanza de disminuir el plazo de ejecución. Englobó a una serie de sucesos que se venían observando en los proyectos de desarrollo de software: Los proyectos no terminaban en plazo. Los proyectos no se ajustaban al presupuesto inicial.

Upload: christian-manzanares

Post on 18-Jan-2016

2 views

Category:

Documents


0 download

DESCRIPTION

Ingenieria Del Software

TRANSCRIPT

Page 1: Ingenieria Del Software

NATO Software Engineering Conference

La crisis del software se fundamentó en el tiempo de creación de software, ya que en la creación del mismo no se obtenían los resultados deseados, además de un gran costo y poca flexibilidad.

Es un término informático acuñado en 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software, de la cual nació formalmente la rama de la ingeniería de software. El término se adjudica a F. L. Bauer, aunque previamente había sido utilizado por Edsger Dijkstra en su obra The Humble Programmer.

Básicamente, la crisis del software se refiere a la dificultad en escribir programas libres de defectos, fácilmente comprensibles, y que sean verificables. Las causas son, entre otras, la complejidad que supone la tarea de programar, y los cambios a los que se tiene que ver sometido un programa para ser continuamente adaptado a las necesidades de los usuarios.

Además, no existen todavía herramientas que permitan estimar de una manera exacta, antes de comenzar el proyecto, cuál es el esfuerzo que se necesitará para desarrollar un programa. Este hecho provoca que la mayoría de las veces no sea posible estimar cuánto tiempo llevará un proyecto, ni cuánto personal será necesario. Cuando se fijan plazos normalmente no se cumplen por este hecho. Del mismo modo, en muchas ocasiones el personal asignado a un proyecto se incrementa con la esperanza de disminuir el plazo de ejecución.

Englobó a una serie de sucesos que se venían observando en los proyectos de desarrollo de software:

Los proyectos no terminaban en plazo. Los proyectos no se ajustaban al presupuesto inicial. Baja calidad del software generado. Software que no cumplía las especificaciones. Código inmantenible que dificultaba la gestión y evolución del proyecto.

Aunque se han propuesto diversas metodologías para intentar subsanar los problemas mencionados, lo cierto es que todavía hoy no existe ningún método que haya permitido estimar de manera fiable el coste y duración de un proyecto antes de su comienzo

Page 2: Ingenieria Del Software

Las actas recogen, principalmente, los debates producidos en cada ponencia, por lo que son especialmente interesantes.

Algunas reflexiones de la época:

Kolence: El problema básico es que ciertas clases de sistemas están poniendo demandas sobre nosotros, que están más allá de nuestras capacidades y nuestras teorías y métodos de diseño y producción en este momento. Hay muchas áreas donde no hay tal cosa como una crisis - rutinas de ordenación, las aplicaciones de nómina, por ejemplo. Es grandes sistemas que tropiezan con grandes dificultades. No debemos esperar que la producción de este tipo de sistemas a ser fácil. Gestión de programación seguirá mereciendo su mala reputación actual de costos y programas de eficacia hasta que se logra una comprensión más completa del proceso de diseño del programa.

David y Fraser: Particularmente alarmante es la falibilidad aparentemente inevitable de software de gran tamaño, ya que una avería en un sistema de hardware y software avanzado puede ser una cuestión de vida o muerte.

Graham: Construimos sistemas como los hermanos Wright aviones construidos - construir toda la cosa, empujarla por el precipicio, deja que choque, y empezar de nuevo.

d'Agapeyeff: (de reducción del costo del software) de programación es todavía demasiado de un esfuerzo artístico. Necesitamos una base más importante que se les enseñe y vigilado en la práctica en el:

(i) la estructura de los programas y el flujo de su ejecución;(ii) la conformación de módulos y un ambiente para su análisis;(iii) la simulación de las condiciones de tiempo de ejecución.

Ross: Lo más mortífero en el software es el concepto, que parece casi universalmente a seguir, que se va a especificar lo que vas a hacer, y luego hacerlo. Y ahí es donde la mayor parte de nuestros problemas vienen de los proyectos que se llaman éxito, han cumplido con sus especificaciones. Pero esas especificaciones se basan en la ignorancia de los diseñadores antes de empezar el trabajo.

Page 3: Ingenieria Del Software

¿Qué es un proyecto?

Un proyecto  es una planificación que consiste en un conjunto de actividades que se encuentran interrelacionadas y coordinadas. La razón de un proyecto es alcanzar objetivos específicos dentro de los límites que imponen un presupuesto, calidades establecidas previamente y un lapso de tiempo previamente definido.

Etapas de un proyecto

Diagnóstico: Consiste en establecer la necesidad u oportunidad a partir de la cual es posible iniciar el diseño del proyecto. La idea de proyecto puede iniciarse debido a alguna de las siguientes razones:

Porque existen necesidades insatisfechas actuales o se prevé que existirán en el futuro si no se toma medidas al respecto.

Porque existen potencialidades o recursos sub aprovechados que pueden optimizarse y mejorar las condiciones actuales.

Porque es necesario complementar o reforzar otras actividades o proyectos que se producen en el mismo lugar y con los mismos involucrados.

Diseño: Etapa de un proyecto en la que se valoran las opciones, tácticas y estrategias a seguir, teniendo como indicador principal el objetivo a lograr. En esta etapa se produce la aprobación del proyecto, que se suele hacer luego de la revisión del perfil de proyecto y/o de los estudios de pre-factibilidad, o incluso de factibilidad. Una vez dada la aprobación, se realiza la planificación operativa, un proceso relevante que consiste en prever los diferentes recursos y los plazos de tiempo necesarios para alcanzar los fines del proyecto, asimismo establece la asignación o requerimiento de personal respectivo.

Ejecución: Consiste en poner en práctica la planificación llevada a cabo previamente.

Evaluación: Etapa final de un proyecto en la que éste es revisado, y se llevan a cabo las valoraciones pertinentes sobre lo planeado y lo ejecutado, así como sus resultados, en consideración al logro de los objetivos planteados.

Page 4: Ingenieria Del Software

Software

Se conoce como software al equipamiento lógico o soporte lógico de un sistema informático, que comprende el conjunto de los componentes lógicos necesarios que hacen posible la realización de tareas específicas, en contraposición a los componentes físicos que son llamados hardware.

Software Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados, que forman parte de las operaciones de un sistema de computación.

CLASIFICACIÓN DEL SOFTWARE

Software de sistema: Su objetivo es desvincular adecuadamente al usuario y al programador de los detalles del sistema informático en particular que se use, aislándolo especialmente del procesamiento referido a las características internas de: memoria, discos, puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc. El software de sistema les procura al usuario y al programador adecuadas interfaces de alto nivel, controladores, herramientas y utilidades de apoyo que permiten el mantenimiento del sistema global. Incluye entre otros:

Sistemas operativos Controladores de dispositivos Herramientas de diagnóstico Herramientas de Corrección y Optimización Servidores Utilidades

Software de programación: Es el conjunto de herramientas que permiten al programador desarrollar programas informáticos, usando diferentes alternativas y lenguajes de programación, de una manera práctica. Incluyen básicamente:

Editores de texto Compiladores Intérpretes Enlazadores Depuradores

Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas, usualmente en un entorno visual, de forma tal que el programador no necesite introducir múltiples comandos para compilar, interpretar, depurar, etc. Habitualmente cuentan con una avanzada interfaz gráfica de usuario (GUI).

Page 5: Ingenieria Del Software

Software de aplicación: Es aquel que permite a los usuarios llevar a cabo una o varias tareas específicas, en cualquier campo de actividad susceptible de ser automatizado o asistido, con especial énfasis en los negocios. Incluye entre muchos otros:

Aplicaciones para Control de sistemas y automatización industrial Aplicaciones ofimáticas Software educativo Software empresarial Bases de datos Telecomunicaciones (por ejemplo Internet y toda su estructura lógica) Videojuegos Software médico Software de cálculo numérico y simbólico. Software de diseño asistido (CAD) Software de control numérico (CAM)

Page 6: Ingenieria Del Software

Ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y

cuantificable al desarrollo, operación y mantenimiento de software (IEEE 1993), y el

estudio de estos enfoques, es decir, la aplicación de la ingeniería al software.1Integra

matemáticas, ciencias de la computación y prácticas cuyos orígenes se encuentran en la

ingeniería.2

Se citan las definiciones más reconocidas, formuladas por prestigiosos autores:

Ingeniería de software es el estudio de los principios y metodologías para el desarrollo

y mantenimiento de sistemas software (Zelkovitz, 1978).

Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y

construcción de programas de computadora y a la documentación asociada requerida

para desarrollar, operar y mantenerlos. Se conoce también como desarrollo de software

o producción de software (Bohem, 1976).

La ingeniería de software trata del establecimiento de los principios y métodos de la

ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en

máquinas reales (Bauer, 1972).

La ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y

cuantificable al desarollo, operación, y mantenimiento del software (IEEE, 1993).

Un sistema heredado (o sistema legacy) es un sistema informático (equipos informáticos o aplicaciones) que ha quedado anticuado pero continúa siendo utilizado por el usuario (típicamente una organización o empresa) y no se quiere o no se puede reemplazar o actualizar de forma sencilla.

Una web app es una versión del sitio web que está optimizada para ser vista desde dispositivos móviles. En palabras más sencillas, es lo mismo que encontramos en una página web pero con un diseño y organización de la información optimizada para que podamos acceder a ella de manera más fácil desde cualquier dispositivo.

Page 7: Ingenieria Del Software

¿QUÉ ES LA ADMINISTRACIÓN DE PROYECTOS?

Es la planeación, organización, dirección y control de los recursos para lograr un objetivo a corto plazo.

También se dice que la administración de proyectos ocurre cuando se da un énfasis y una atención especial para conducir actividades no repetitivas con el propósito de lograr un conjunto de metas.

Esta actividad es llevada a cabo por un conjunto de administradores que actúan como agentes unificadores para proyectos particulares, tomando en cuenta los recursos existentes, tales como el tiempo, materiales, capital, recursos humanos y tecnología.

IMPORTANCIA DE LA ADMINISTRACIÓN DE PROYECTOS

La administración de proyectos implica una gran importancia, por lo que es usada en una gran diversidad de campos; desde proyectos espaciales, en bancos, en desarrollo de sistemas en computadora, en procesamiento de hidrocarbono, en la industria petroquímica, en telecomunicaciones, en defensa nacional, etc.

Los cambios tecnológicos, la necesidad de introducir nuevos productos al mercado, las cambiantes exigencias de los consumidores de productos, entre otras cosas, incrementan el fluido de operaciones en una organización, provocando que los métodos de administrativos convencionales sean inadecuados. Por esta razón la administración de proyectos es importante, ya que ofrece nuevas alternativas de organización.

Sirve para aprovechar de mejor manera los recursos críticos cuando están limitados en cantidad y/o tiempo de disponibilidad. También ayuda a realizar acciones concisas y efectivas para obtener el máximo beneficio.

FUNCIONES DE LA ADMINISTRACIÓN

La administración procura siempre el máximo aprovechamiento de los recursos, mediante su utilización eficiente. Las principales funciones de la administración se engloban en planeación, organización, dirección y control.

Durante la planeación se decide anticipadamente qué, quién, cómo, cuándo y por qué se hará el proyecto. Las tareas más importantes de la planeación son determinar el status actual de la organización, pronosticar a futuro, determinar los recursos que se necesitarán, revisar y ajustar el plan de acuerdo con los resultados de control y coordinar durante todo el proceso de planeación.

La organización realiza actividades en grupo, de asignación y asesoramiento, y proporciona la autoridad necesaria para llevar a cabo las actividades.

Dentro de esta etapa se identifica, define y divide el trabajo a realizar, se agrupan y definen los puestos, se proporcionan los recursos necesarios y se asignan los grados de autoridad.

El siguiente paso es la dirección, la cual sirve para conducir el comportamiento humano hacia las metas establecidas.

Aquí se comunican y explican los objetivos a los subordinados, se asignan estándares, se entrena y guía a los subordinados para llegar a los estándares requeridos, se recompensa el rendimiento y se mantiene un ambiente motivacional.

Por último se encuentra el control, que se encarga de medir el rendimiento obtenido en relación a las metas fijadas. En caso de haber desviaciones, se determinan las causas y se corrige lo que sea necesario.

Page 8: Ingenieria Del Software

¿QUÉ ES EL ADMINISTRADOR DE PROYECTOS?

El administrador de proyectos puede ser definido como el individuo que cumple con la tarea de integrar los esfuerzos dirigidos hacia la ejecución exitosa de un proyecto específico. Esta persona enfrenta un conjunto de circunstancias único en cada proyecto.

El administrador de proyectos es una extensión del administrador general de una organización.

FUNCIONES DEL ADMINISTRADOR DE PROYECTOS

El administrador de proyectos opera independientemente de la cadena de mando normal dentro de la organización. Debe dirigir y evaluar el proyecto; también planear, proponer e implementar políticas de administración de proyectos, asegurar la finalización del proyecto mediante compromisos contractuales.

Otras tareas que debe cumplir son desarrollar y mantener los planes del proyecto, darle una calendarización y financiamiento adecuados al proyecto y evaluar y reportar su avance.

Debe resolver los problemas a través de decisiones orientadas al objetivo.

Además, el administrador de proyecto debe resolver las siguientes preguntas:

* ¿Qué se va a hacer?

* ¿Cuándo se va a hacer?

* ¿Por qué se va a hacer?

* ¿Cuánto dinero está disponible para hacerlo?

* ¿Qué tan bien se está haciendo el proyecto?

Page 9: Ingenieria Del Software

El desarrollo ágil de software 

Se refiere a métodos de ingeniería del software basados en el desarrollo iterativo e incremental, donde los requisitos y soluciones evolucionan mediante la colaboración de grupos auto organizado y multidisciplinario. Existen muchos métodos de desarrollo ágil; la mayoría minimiza riesgos desarrollando software en lapsos cortos. El software desarrollado en una unidad de tiempo es llamado una iteración, la cual debe durar de una a cuatro semanas. Cada iteración del ciclo de vida incluye: planificación, análisis de requisitos, diseño, codificación, revisión y documentación. Una iteración no debe agregar demasiada funcionalidad para justificar el lanzamiento del producto al mercado, sino que la meta es tener una «demo» (sin errores) al final de cada iteración. Al final de cada iteración el equipo vuelve a evaluar las prioridades del proyecto.

Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación. La mayoría de los equipos ágiles están localizados en una simple oficina abierta, a veces llamadas "plataformas de lanzamiento" (bullpen en inglés). La oficina debe incluir revisores, escritores de documentación y ayuda, diseñadores de iteración y directores de proyecto. Los métodos ágiles también enfatizan que el software funcional es la primera medida del progreso. Combinado con la preferencia por las comunicaciones cara a cara, generalmente los métodos ágiles son criticados y tratados como "indisciplinados" por la falta de documentación técnica.