viernes, 3 de mayo de 2013

EL PROCESO DE SOFTWARE


Se define como Proceso al conjunto ordenado de pasos a seguir para llegar a la solución de un problema u obtención de un producto, en este caso particular, para lograr la obtención de un producto software que resuelva un problema.

Ese proceso de creación de software puede llegar a ser muy complejo, dependiendo de su porte, características y criticidad del mismo. Por ejemplo la creación de un sistema operativo es una tarea que requiere proyecto, gestión, numerosos recursos y todo un equipo disciplinado de trabajo. En el otro extremo, si se trata de un sencillo programa (ejemplo: resolución de una ecuación de segundo orden), éste puede ser realizado por un solo programador (incluso aficionado) fácilmente. Es así que normalmente se dividen en tres categorías según su tamaño (líneas de código) y/o costo: de Pequeño, Mediano y Gran porte. Existen varias metodologías para estimarlo, una de las más populares es el sistema COCOMO que provee métodos y un software (programa) que calcula y provee una estimación de todos los costos de producción en un "proyecto software" (relación horas/hombre, costo monetario, cantidad de líneas fuente de acuerdo a lenguaje usado, etc.).

Considerando los de gran porte, es necesario realizar tantas y tan complejas tareas, tanto técnicas, de gerenciamiento, fuerte gestión y análisis diversos (entre otras) que toda una ingeniería hace falta para su estudio y realización: es la Ingeniería de Software.

En tanto que en los de mediano porte, pequeños equipos de trabajo (incluso un avezado analista-programador solitario) puede realizar la tarea. Aunque, siempre en casos de mediano y gran porte (y a veces también en algunos de pequeño porte, según su complejidad), se deben seguir ciertas etapas que son necesarias para la construcción del software. Tales etapas, si bien deben existir, son flexibles en su forma de aplicación, de acuerdo a la metodología o Proceso de Desarrollo escogido y utilizado por el equipo de desarrollo o analista-programador solitario (si fuere el caso).

Los "procesos de desarrollo de software" poseen reglas preestablecidas, y deben ser aplicados en la creación del software de mediano y gran porte, ya que en caso contrario lo más seguro es que el proyecto o no logre concluir o termine sin cumplir los objetivos previstos y con variedad de fallos inaceptables (fracasan, en pocas palabras). Entre tales "procesos" los hay ágiles o livianos (ejemplo XP), pesados y lentos (ejemplo RUP) y variantes intermedias; y normalmente se aplican de acuerdo al tipo y porte y tipología del software a desarrollar, a criterio del líder (si lo hay) del equipo de desarrollo. etc.

Cualquiera sea el "proceso" utilizado y aplicado en un desarrollo de software (RUP, FDD, etc), y casi independientemente de él, siempre se debe aplicar un "Modelo de Ciclo de Vida".



Análisis y Especificación 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. 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.

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

Pruebas
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 area 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.

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, o bugs. 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

COCOMO

Es un modelo que permite estimar el costo, el esfuerzo, y programar la hora de planificar una nueva actividad de desarrollo de software.

El modelo provee tres “niveles” de aplicación: básico, intermedio y avanzado, basados en los factores considerados por el modelo.

Básico, es un modelo estático simplemente evaluado que calcula el esfuerzo (y costo) del desarrollo del software como función del programa expresado en líneas de código (LDC estimados).

Intermedio, calcula el esfuerzo del desarrollo del software como función del tamaño del programa y un conjunto de “guías de costo” que incluye una evaluación subjetiva del producto, hardware, personal y de los atributos del proyecto.

Avanzado, incorpora todas las características de la versión intermedia con una evaluación del impacto de las vías de costo en cada fase (análisis, diseño, etc) del proceso de la ingeniería de software.


El Modelo Constructivo de Costos (o COCOMO, por su acrónimo del ingléses COnstructive COst MOdel) es un modelo matemático de base empírica utilizado para estimación de costos1 de software. Incluye tres submodelos, cada uno ofrece un nivel de detalle y aproximación, cada vez mayor, a medida que avanza el proceso de desarrollo del software: básico, intermedio y detallado.
Este modelo fue desarrollado por Barry W. Boehm a finales de los años 70 y comienzos de los 80, exponiéndolo detalladamente en su libro "Software Engineering Economics" (Prentice-Hall, 1981).

Modelo básico.
Se utiliza para obtener una primera aproximación rápida del esfuerzo, y hace uso de la siguiente tabla de constantes para calcular distintos aspectos de costes:
MODO
a
b
c
d
Orgánico
3.20
1.05
2.50
0.38
Semilibre
3.00
1.12
2.50
0.35
Rígido
2.80
1.20
2.50
0.32
Estos valores son para las fórmulas:
·         Personas necesarias por mes para llevar adelante el proyecto (MM) = a*(Klb)
·         Tiempo de desarrollo del proyecto (TDEV) = c*(MMd)
·         Personas necesarias para realizar el proyecto (CosteH) = MM/TDEV
·         Costo total del proyecto (CosteM) = CosteH * Salario medio entre los programadores y analistas.
Se puede observar que a medida que aumenta la complejidad del proyecto (modo), las constantes aumentan de 2.4 a 3.6, que corresponde a un incremento del esfuerzo del personal. Hay que utilizar con mucho cuidado el modelo básico puesto que se obvian muchas características del entorno 

Modelo intermedio

Este añade al modelo básico quince modificadores opcionales para tener en cuenta en el entorno de trabajo, incrementando así la precisión de la estimación.
Para este ajuste, al resultado de la fórmula general se lo multiplica por el coeficiente surgido de aplicar los atributos que se decidan utilizar.
Los valores de las constantes a reemplazar en la fórmula son:
MODO
a
b
Orgánico
3.20
1.05
Semilibre
3.00
1.12
Rígido
2.80
1.20
Se puede observar que los exponentes son los mismos que los del modelo básico, confirmando el papel que representa el tamaño; mientras que los coeficientes de los modos orgánico y rígido han cambiado, para mantener el equilibrio alrededor del semilibre con respecto al efecto multiplicador de los atributos de coste.


Características
Pertenece a la categoría de modelos de subestimaciones basados en estimaciones matemáticas. Está orientado a la magnitud del producto final, midiendo el "tamaño" del proyecto, en líneas de código principalmente.

Inconvenientes
  • Los resultados no son proporcionales a las tareas de gestión ya que no tiene en cuenta los recursos necesarios para realizarlas.
  • Se puede desviar de la realidad si se indica mal el porcentaje de líneas de comentarios en el código fuente.
  • Es un tanto subjetivo, puesto que está basado en estimaciones y parámetros que pueden ser "vistos" de distinta manera por distintos analistas que usen el método.
  • Se miden los costes del producto, de acuerdo a su tamaño y otras características, pero no la productividad.
  • La medición por líneas de código no es válida para orientación a objetos.
  • Utilizar este modelo puede resultar un poco complicado, en comparación con otros métodos (que también sólo estiman).
Modelo Detallado
Presenta principalmente dos mejoras respecto al anterior:
·      Los factores correspondientes a los atributos son sensibles o dependientes de la fase sobre la que se realizan las estimaciones. Aspectos tales como la experiencia en la aplicación, utilización de herramientas de software, etc., tienen mayor influencia en unas fases que en otras, y además van variando de una etapa a otra.
·     Establece una jerarquía de tres niveles de productos, de forma que los aspectos que representan gran variación a bajo nivel, se consideran a nivel módulo, los que representan pocas variaciones, a nivel de subsistema; y los restantes son considerados a nivel sistema.

BIBLIOGRAFIA:
                       
              a) http://www.sc.ehu.es/jiwdocoj/mmis/cocomo.htm
              b) http://es.wikipedia.org/wiki/COCOMO
              c)Sistemas VD “http://sistemasvd.wordpress.com/2008/07/05/fases-del-proceso-de-
                 desarrollo-del-software/






miércoles, 24 de abril de 2013

6. BIBLIOGRAFIA


6.1.      DIGITAL

  1. http://www.monografias.com/trabajos5/inso/inso.shtml
  2. http://gabrielaberrospialvarado.blogspot.com/2011/01/resumen-ingenieria-de-software-       los.html
  3. LOLBEL. (14 de Febrero de 2012). blogspot.com. Obtenido de http://re-  
    velm.blogspot.com/2010/03/crisis-de-software -y.html
  4. http://www.monografias.com/trabajos30/Ingenieriadesistemas.shtml
  5.  http://es.wikipedia.org/wiki/Crisis_del_software

5. CONCLUSIÓN


La ingeniería de software es una disciplina que integra métodos, herramientas y procedimientos para el desarrollo de SW de computador”. Lo que nos quiere decir que  es una disciplina que intenta racionalizar el proceso de desarrollo de software y establecer unas pautas a seguir para el desarrollo que minimicen tiempo, esfuerzo, y coste de desarrollo y maximicen la calidad del software.

Lo que me quedo claro fue que no se debería llamar ingeniería de sistemas según la teoría general de sistemas, por ponerles un ejemplo, el tráfico de una ciudad es un sistema, y un ingeniero de sistemas no tiene nada que ver con eso. La carrera debería llamarse ingeniería informática.

4. DESARROLLO


4.1.        INGENIERIA DE SOFTWARE 

Es una disciplina formada por un conjunto de métodos, herramientas y técnicas que se utilizan en el desarrollo de los programas informáticos (software).

Esta disciplina trasciende la actividad de programación, que es el pilar fundamental a la hora de crear una aplicación. El ingeniero de software se encarga de toda la gestión del proyecto para que éste se pueda desarrollar en un plazo determinado y con el presupuesto previsto.
La ingeniería de software, por lo tanto, incluye el análisis previo de la situación, el diseño del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto funcionamiento y la implementación del sistema.

Cabe destacar que el proceso de desarrollo de software implica lo que se conoce como ciclo de vida del software, que está formado por cuatro etapas: concepción, elaboración, construcción y transición. 



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

4.2.        INGENIERIA DE SOFTWARE VS INGENIERIA DE SISTEMAS

Las Diferencias entre estas ingenierías son las siguientes:

  • El ingeniero de software está más enfocado al desarrollo de las soluciones de software mediante el uso de las ciencias de la computación, mejor dicho, a echar código.
  •  El ingeniero informático por su parte debe estar en capacidad de analizar los problemas    que tienen que ver con el manejo de la información y diseñar una solución para los mismos.
  •  La ingeniería de software es como una especialización o división de la ingeniería 
    informática, y también uno de los pilares fundamentales para que esta exista.
EJEMPLO:

En una empresa que acaba de surgir necesitan vender sus productos por internet, y no tienen un sistema de información adecuado para el manejo interno de la empresa. El ingeniero informático debe estar en capacidad de analizar la cadena de producción de dicha empresa, saber dónde se genera la información y el flujo de la misma, comprender como hace la empresa para saber cuánto le costo cada producto, a quienes les vende, cuanto está perdiendo o ganando, cuando tiene que generar nuevas órdenes de producción, que procesos hacen que se genere nueva información o que se modifique la ya existente, y asi mismo diseñar una solución que permita el funcionamiento óptimo de la empresa. Esto por ejemplo puede llevar a la conclusión de que necesita una base de datos, que se comunica con una aplicación interna para el manejo de las cuestiones de la empresa y con un sitio web desde el cual se generan los pedidos y se le informa al cliente cuando serán despachados. El ingeniero de software es el encargado de hacer esta implementación (la aplicación interna, la base de datos, la página web)



4.3.        CRISIS DEL SOFTWARE

El término “Crisis del Software” fue acuñado a principios de los años 70, cuando la ingeniería de software era prácticamente inexistente. El término expresaba las dificultades del desarrollo de software frente al rápido crecimiento de la demanda por software, de la complexidad de los problemas a ser resueltos y de la inexistencia de técnicas establecidas para el desarrollo de sistemas que funcionaran adecuadamente o pudieran ser validados.

La percepción de que esta crisis existía empezó a mediados de los años 60. Una de las primeras referencias al término, y de las más notables, fue hecha por E.W.Dijkstra, en el discurso que pronunció durante la entrega del premio Turing en 1972.

En este trabajo abordaremos porque se produjo esta crisis,  y cuál fue el camino adoptado para resolverla, o minimizar sus efectos de algún modo.



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.

3. FUNDAMENTACIÓN CIENTIFICA


-INGENIERIA DE SOFTWARE: Cabe destacar que el proceso de desarrollo de software implica lo que se conoce como ciclo de vida del software, que está formado por cuatro etapas: concepción, elaboración, construcción y transición.
La concepción fija el alcance del proyecto y desarrolla el modelo de negocio; la elaboración define el plan del proyecto, detalla las características y fundamenta la arquitectura; la construcción es el desarrollo del producto; y la transición es la transferencia del producto terminado a los usuarios.
Una vez que se completa este ciclo, entra en juego el mantenimiento del software. Se trata de una fase de esta ingeniería donde se solucionan los errores descubiertos (muchas veces advertidos por los propios usuarios) y se incorporan actualizaciones para hacer frente a los nuevos requisitos. El proceso de mantenimiento incorpora además nuevos desarrollos, para permitir que el software pueda cumplir con una mayor cantidad de tareas.

-INGENIERIA DE SOFTWARE VS INGENIERIA DE SISTEMAS:Un campo directamente relacionado con la ingeniería de software es la arquitectura de sistemas, que consiste en determinar y esquematizar la estructura general del proyecto, diagramando su esqueleto con un grado relativamente alto de especificidad y señalando los distintos componentes que serán necesarios para llevar a cabo el desarrollo, tales como aplicaciones complementarias y bases de datos. Se trata de un punto fundamental del proceso, y es muchas veces la clave del éxito de un producto informático.

LA CRISIS DE SOFTWARE: 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.

INTRODUCCIÓN Y OBJETIVOS



1. INTRODUCCIÓN

La ingeniería de software  es una disciplina formada por un conjunto de métodos, herramientas y técnicas que se utilizan en el desarrollo de los programas informáticos (software).

Esta disciplina trasciende la actividad de programación, que es el pilar fundamental a la hora de crear una aplicación. El ingeniero de software se encarga de toda la gestión del proyecto para que éste se pueda desarrollar en un plazo determinado y con el presupuesto previsto.
La ingeniería de software, por lo tanto, incluye el análisis previo de la situación, el diseño del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto funcionamiento y la implementación del sistema.

Cabe destacar que el proceso de desarrollo de software implica lo que se conoce como ciclo de vida del software, que está formado por cuatro etapas: concepción, elaboración, construcción y transición.

La aplicación del software ha crecido notablemente el cual juega un papel importante en casi todos los aspectos de la vida cotidiana: gobierno, finanzas, educación, transporte, medicina, entre otros...
También como podemos la complejidad de los sistemas ha crecido de forma dramática, y anualmente se gastan miles de millones de dólares en cuestiones de desarrollo de software
Existen algunos serios problemas relacionados con el desarrollo del software estos problemas de los sistemas que se crean son lo siguiente:
  • ·        Tiempo
  • ·        Costo
  • ·        Calidad
Los productos de software se encuentra entre los más complejos sistemas creados por el hombre . La ingeniería de software busca dar soluciones.
Un programador no es equivalente a un ingeniero de software
“Todo mundo” puede sentarse a programar esto no garantiza que se pueda crear una solución compleja en tiempo, costo y calidad.

El desarrollo del software requiere necesariamente tanto los fundamentos desarrollados dentro de las ciencias de la computación como las rigurosas disciplinas de ingeniería que aportan a la confiabilidad.

El mercado tiene actualmente una fuerte demanda de gente con competencias relacionadas con el desarrollo de software y que un problema que existe en México es que existe relativamente poca
capacitación en el tema.

2.        OBJETIVOS

2.1.          GENERAL

Realizar la respectiva consulta que nos permita obtener conocimientos esenciales sobre la materia de ingeniería de software.

2.2.          ESPECIFICOS

a)    Reconocer el marco de trabajo de la ingeniería de software (ISW)
b)    Identificar y analizar el producto de ISW

PRESENTACIÓN

   UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES  
  
UNIANDES
EXTENSIÓN SANTO DOMINGO

FACULTAD: SISTEMAS MERCANTILES 
CARRERA: SISTEMAS 
MODULO: INGENIERIA DE SOFTWARE

TEMA:  
                             -¿QUÉ ES INGENIERÍA DE SOFTWARE? Y OBJETIVOS
                                    -INGENIERIA DE SOFTWARE VS INGENIERIA DE SISTEMA
              -CRISIS DEL SOFTWARE

AUTOR: AMALIA VÉLEZ
TUTOR: ING. SEGUNDO MENA DPL.
FECHA: 24/04/2013




PERIODO ABRIL –  OCTUBRE  2013