lunes, 21 de noviembre de 2011

TENDENCIAS DE LA INGENIERIA DE SOFTWARE

Una de las preocupaciones actuales más urgentes de la industria del software es crear sistemas confiables y de mayor calidad con menor inversión de tiempo y costo, que resuelvan problemas cada vez más complejos. Es preciso utilizar técnicas avanzadas de la ingeniería de software que ayuden a aliviar el esfuerzo en las diferentes etapas del ciclo de vida.
Tal como lo manifiestan J. Martin y J. Odell[Martin 94], en el software se necesita un avance en:
*Complejidad
    *Capacidad de diseño
    *Flexibilidad
    *Rapidez de desarrollo
    *Facilidad de modificación
    *Confiabilidad
La Tecnologia Orientada a Objetos ha demostrado ser una excelente herramienta para resolver problemas de gran envergadura y complejidad, permitiendo obtener sistemas interoperables, modulares, evolutivos y con alto índice de reusabilidad. La reutilización conduce a un desarrollo más rápido y programas de mejor calidad.
Las técnicas orientadas a objetos combinadas con otras herramientas como las CASE (ingeniería de software asistida por coputadora), programación visual, generadores de código, metodologías basadas en depositos, bases de datos, bibliotecas de clases que maximicen la reutilización, tecnología cliente servidor, etc.; pueden proporcionar la magnitud de cambio necesario para lograr ese salto anteriormente mencionado.
En este capítulo se describen los principales factores que determinan la calidad del software y se introducen los principios y conceptos y conceptos básicos en que se basa para producir software de alta calidad y confiabilidad
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.
Esta ingeniería trata con á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 Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de Información y aplicables a infinidad de áreas (negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet Intranet, etc.).

ENFOQUE DE LA INGENIERIA DE SOFTWARE DENTRO DE LA INFORMATICA

La ingeniería informática es la profesión que consiste en la aplicación de los fundamentos de la ciencia de la computación, la electrónica y la ingeniería de software, para el desarrollo de soluciones integrales de cómputo
La ingeniería informática es la profesión que consiste en la aplicación de los fundamentos de la ciencia de la computación, la electrónica y la ingeniería de software, para el desarrollo de soluciones integrales de cómputo y comunicaciones, capaces de procesar información de manera automática.
Por lo que se refiere al soporte físico, la ingeniería informática se fundamenta en la tecnología electrónica, lo que le permite a los ordenadores interactuar con sistemas físicos, así como desarrollar interfaces de comunicación y control entre el ordenador y diversos dispositivos mecánicos y eléctricos, tales como sistemas de adquisición de datos, instrumentación virtual, control de robots, sistemas de iluminación, etc.
En el aspecto lógico y formal, la ingeniería informática se fundamenta en la teoría de autómatas, los lenguajes formales, la teoría de la información, el diseño de algoritmos, el reconocimiento de patrones, la inteligencia artificial y la ingeniería del conocimiento.
En el aspecto de integración, la ingeniería informática comprende multitud de técnicas y conocimientos específicos para el diseño, construcción y mantenimiento de software, sujetos a restricciones de calidad, tiempo y coste. El conjunto de estas técnicas se conoce como ingeniería del software.
Además de los aspectos puramente técnicos de los sistemas informáticos, la ingeniería informática se ocupa los aspectos de tipo organizativo, social y legal. Por ejemplo, los relacionados con la planificación, dirección y control de proyectos informáticos; la auditoría y control; la realización de peritajes informáticos, etc.
En la actualidad se imparten en España las siguientes titulaciones:
• Ingeniería Informática (5 años)
• Ingeniería Técnica en Informática de Gestión - I.T.I.G. (3 años)
• Ingeniería Técnica en Informática de Sistemas - I.T.I.S. (3 años)
Para considerar cualquiera de estas carreras como terminadas, al igual que en otras ingenierías se exige la entrega de un trabajo final: Proyecto de Fin de Carrera (PFC) en el que el alumno demuestre las capacidades aprendidas durante los años de enseñanza recibidos.
Anteriormente la ingeniería informática era una licenciatura (licenciatura en informática) que tenía una duración de 6 años. Hasta el momento de la creación de dichos estudios no existía el título como tal, siendo una rama de la física o las matemáticas. Sin embargo, algunas universidades siguen adoptando este concepto de licenciatura, como la Universidad de Oriente.
En el mundo anglosajón no existe una carrera equivalente, siendo los estudios de Computer Science, Software Engineering, Hardware Engineering, Information Systems y Computer Engineering los que más se asemejan a ésta. En México se ofertan los estudios de Ingeniería en Informática en el Instituto Politécnico Nacional; dicha carrera tiene una duración de 4 años. Cabe destacar que el IPN fue la primera institución en toda Latinoamérica, en ofrecer el estudio de las computadoras (ordenadores), en el año 1972.
La informática es la disciplina que estudia el tratamiento automático de la información utilizando dispositivos electrónicos y sistemas computacionales. También es definida como el procesamiento de la información en forma automática. Para esto los sistemas informáticos deben realizar las siguientes tres tareas básicas:
• Entrada: Captación de la información digital.
• Proceso: Tratamiento de la información.
• Salida: Transmisión de resultados binarios.
En los inicios del procesado de información, con la informática sólo se facilitaba los trabajos repetitivos y monótonos del área administrativa, gracias a la automatización de esos procesos, ello trajo como consecuencia directa una disminución de los costes y un incremento en la producción.
En la informática convergen los fundamentos de las ciencias de la computación, la programación y las metodologías para el desarrollo de software, la arquitectura de computadores, las redes de datos (como Internet), la inteligencia artificial y ciertas cuestiones relacionadas con la electrónica. Se puede entender por informática a la unión sinergia de todo este conjunto de disciplinas.
Esta disciplina se aplica a numerosas y variadas áreas del conocimiento o la actividad humana, como por ejemplo: gestión de negocios, almacenamiento y consulta de información, monitorización y control de procesos, industria, robótica, comunicaciones, control de transportes, investigación, desarrollo de juegos, diseño computerizado, aplicaciones/herramientas multimedia, medicina, biología, física, química, meteorología, ingeniería, arte, etc. Una de la aplicaciones más importantes de la informática es facilitar información en forma oportuna y veraz, lo cual, por ejemplo, puede tanto facilitar la toma de decisiones a nivel gerencial (en una empresa) como permitir el control de procesos críticos.
Actualmente es difícil concebir un área que no use, de alguna forma, el apoyo de la informática; en un enorme abanico que cubre desde las más simples cuestiones domésticas hasta los cálculos científicos más complejos. Entre las funciones principales de la informática se cuentan las siguientes:
• Creación de nuevas especificaciones de trabajo.
• Desarrollo e implementación de sistemas informáticos.
• Sistematización de procesos.
• Optimización de los métodos y sistemas informáticos existentes.
La ingeniería es la profesión que aplica conocimientos y experiencias para que mediante diseños, modelos y técnicas se resuelvan problemas que afectan a la humanidad.
En ella, el conocimiento de las matemáticas y ciencias naturales, obtenido mediante estudio, experiencia y práctica, se aplica con juicio para desarrollar formas económicas de utilizar los materiales y las fuerzas de la naturaleza para beneficio de la humanidad y del ambiente.
Pese a que la ingeniería como tal (transformación de la idea en realidad) está intrínsecamente ligada al ser humano, su nacimiento como campo de conocimiento los actuales pilares en el desarrollo de las sociedades modernas.específico viene ligado al comienzo de la revolución industrial, constituyendo uno de Otro concepto que define a la ingeniería es el arte de aplicar los conocimientos científicos a la invención, perfeccionamiento o utilización de la técnica en todas sus determinaciones. Esta aplicación se caracteriza por utilizar principalmente el ingenio de una manera más pragmática y ágil que el método científico, puesto que una actividad de ingeniería, por lo general, está limitada a un tiempo y recursos dados por proyectos. El ingenio implica tener una combinación de sabiduría e inspiración para modelar cualquier sistema en la práctica. 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.
Esta ingeniería trata con á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 Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de Información y aplicables a infinidad de áreas (negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet Intranet, etc.).

MITOS SOBRE EL SOFTWARE

MITOS DEL SOFTWARE
Muchas de las causas de la crisis del software pueden ser
  encontradas en una mitología que surge durante los primeros
  años del desarrollo del software
  Los mitos del software propagaron información errónea y con
  fusión
- Los mitos del software tienen varios atributos que los
hacen insidiosos:
         Aparecen como declaraciones responsables de hechos
         Tuvieron un sentido intuitivo
         Frecuentemente fueron promulgados por expertos que
         “ estaban al día “
  Surgen en los primeros años del desarrollo
Mitos_de_Gestión
Los gestores están normalmente bajo la presión de cumplir
  presupuestos, hacer que no se retrase el proyecto y mejorar
  la calidad. El gestor se agarra a un mito del software aun 
  que tal creencia sólo disminuya la presión temporalmente
     Mito: ¿Porqué debemos cambiar nuestra forma de desarro 
           llar el Software?
           Estamos haciendo el mismo tipo de programación a 
           hora que hace diez años
    Realidad: Aunque el dominio de la aplicación puede ser el
           mismo, la demanda de una mayor productividad y
           calidad, y el papel critico del software en obje 
           tivos comerciales estratégicos, ha aumentado sus 
           tancialmente
    Mito : Tenemos un libro que está lleno de estandares y
           procedimientos para construir software
    Realidad: ¿Pero se usa?,¿conocen los trabajadores su
           existencia?,¿refleja las practicas modernas en
           desarrollo del software?,¿es completo?. En muchos
           casos la respuesta a todas estas preguntas es no
    Mito : Nuestra gente dispone de las herramientas de
           desarrollo de software más avanzadas, después de
           todo les compramos las computadoras mas nuevas
   Realidad: Se necesita mucho más que el último modelo de
           computadora, herramientas de software, las cua 
           les son mucho mas importantes que el hardware para
           conseguir buena calidad y productividad.
    Mito: Si fallamos en la planificación podemos añadir más
           programadores y adelantar el tiempo perdido
  Realidad: El desarrollo de software no es un proceso mecá 
           nico como la fabricación . Añadir gente a un pro 
           yecto software retrasado lo retrasa aun mas.
           Cuando se añaden nuevas personas,la necesidad de
           aprender y comunicarse con el equipo puede y hace
           que se reduzca la cantidad de tiempo gastado en el
           desarrollo del producto
               Puede añadirse gente, pero sólo de una manera
           planificada y bien conocida
Mitos_del_cliente
Un cliente que solicita una aplicación software puede
     ser interno a la compañía o una compañía exterior
     El cliente cree en los mitos que existen sobre el soft 
    ware debido a que los gestores y trabajadores responsa 
    sables hacen muy poco para corregir la mala Información

    Los mitos  conducen a que el cliente se cree una falsa
    expectativa y finalmente, quede insatisfecho con el de 
    sarrollo del software
  Mito: Una declaración general de los objetivos es sufi 
        ciente para comenzar a escribir los programas, po 
        demos dar los detalles más adelante
 Realidad: Una mala definición inicial es la principal causa
        del trabajo baldío en software. Una descripción for 
        mal y detallada del dominio de la información,
        funciones,rendimiento,interfaces, ligaduras de dise 
        ño y criterios de Validación es esencial. Estas
        caracteristicas pueden determinarse sólo después de
        una exhaustiva comunicación entre el cliente y el
        analista
  Mito: Los requerimientos del proyecto cambian continuamen 
        te, pero los cambios pueden acomodarse fácilmente ya
        que el software es flexible
  Realidad: El impacto del cambio varia según el tiempo en
        que se introduzca
                                         _____________
           |                             |           |
     Coste |                             |           |
           |                             |           |
      del  |                             |   60      |
           |               __________    |           |
     Cam   |  ___________  |        |    |  100x     |
      bio  |  |  1x     |  | 1,5 6x |    |           |
           |__|_________|__|________|____|___________|_______
               Definición   Desarrollo   Mantenimiento

        Si se pone atención en dar la definición inicial,los
        cambios solicitados pueden pronto acomodarse facil 
        ente, con relativamente poco coste
        Cuando los cambios se solicitan durante el diseño
        diseño del software, el impacto en el coste crece
        rápidamente.
        Cuando se solicita al final de un proyecto, los cam 
        bios pueden producir un orden de magnitud más caro
        que el mismo cambio pedido al principio.
Mitos_de_los_realizadores
Los mitos en los que aún creen muchos programadores
      se han fomentado durante cuatro décadas de cultura
      Informática
      Las viejas formas y actitudes tardan en morir
  Mito: No hay realmente ningún metodo para el análisis,dise 
        ño y prueba que funcione bien, yo simplemente me voy
        a mi terminal y comienzo a codificar
  Realidad: Existen en la industria métodos comprobados para
            el diseño,análisis y prueba, ninguno es infali 
            ble, pero el uso de una metodología para el de 
            sarrollo del software está implícito en todos
            ellos
  Mito: Una vez que escribimos el programa y hacemos que fun 
        cione, nuestro trabajo ha terminado.
  Realidad: Mientras más pronto se comience a escribir código
        más se tarda en terminarlo
        El desarrollo del software abarca tres actividades
               Definición
               Desarrollo
               Mantenimiento
        Además los datos industriales indican que entre el
        50% y 70% de todo el esfuerzo dedicado a un programa
        se realizara después de que se le haya entregado al
        cliente por primera vez.
  Mito: Hasta que no tengo el programa ejecutándose,
        realmente no tengo forma de establecer calidad
  Realidad: Uno de los mecanismos mas efectivos para garanti 
        zar la calidad del software puede aplicarse desde el
        principio de un proyecto, la revisión estructurada
        (Walktroug). La revisión del software es filtro de
        calidad que se ha comprobado que es más efectivo
        que la prueba, para encontrar ciertas clases de
        defectos en el software
  Mito: Lo único que se entrega al terminar el proyecto es el
        programa funcionando
  Realidad: El programa es solo una parte de una configura 
        cion del software, que incluye

                                      Estructuras
                                    / de datos                                      /                                                /                   Plan => Especificación => Diseño  => Listado  => Programa
           requerimientos         \               funcionando
                                   \                /
                                    \ Especifica   /
                                      cion de Pruebas

        La documentación
                Base para un buen desarrollo
                Base para tareas de mantenimiento
  Mito: Una vez que el Software se está usando, el manteni 
        miento es mínimo y puede manejarse sobre la base de
        hacerlo como se pueda
  Realidad: La mitad de un presupuesto se gasta en manteni 
            miento, por tanto el mantenimiento del software
            debe de
                     organizarse
                     Planificarse
                     Controlarse
               Como si fuera un cliente 
 
 

jueves, 10 de noviembre de 2011

Crisis

Crisis del software

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.
Por último, las aplicaciones de hoy en día son programas muy complejos, inabordables por una sola persona. En sus comienzos se valoró como causa también la inmadurez de la ingeniería de software, aunque todavía hoy en día no es posible realizar estimaciones precisas del coste y tiempo que necesitará un proyecto 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.

El entorno actual de desarrollo de sistemas software viene adoleciendo de:
  • Retrasos considerables en la planificación
Poca productividad
Elevadas cargas de mantenimiento
Demandas cada vez más desfasadas con las ofertas
Baja calidad y fiabilidad del producto
Dependencia de los realizadores
esto es lo que se ha denominado comúnmente como “crisis del software”
¿Cómo se define crisis?
La palabra crisis se defien en el diccionario como “un punto decisivo en el curso de algo; momento, etapa, o evento decisivo o crucial”. Sin embargo para el software no ha habido ningún punto crucial, sólo una lenta evolución.
La crisis en la industria del software ha permanecido durante muchos años, lo cual parece una contradicción par el término. Lo que si se podría decir es que hay un problema crónico en el desarrollo de software.
Ello ha venido originado por una falta de:
  • Formalismo y metodología
Herramientas de soporte
Administración eficaz

Historia de la Ingenieria de Software

INTRODUCCIÓN

Durante nuestra carrera como estudiantes hemos sido testigos de los grandes y sorprendentes avances que la tecnología ha desarrollado en los últimos años. El estudiar la especialidad de Licenciatura en Informática nos ha mantenido mucho más cerca de este desarrollo.

Estos avances han sido muy rápidos en la realidad, pero no podemos hablar de que nacen de la noche a la mañana, cada uno de ellos refleja una investigación de mucho tiempo. Estas nuevas tecnologías nos demuestran con hechos y resultados lo importante que son para en la actualidad; a su vez se van convirtiendo en un estándar para poder competir en el mundo real.

Un factor que ha sido relevante en este desarrollo de tecnologías ha sido el Software, ya que ha facilitado y agilizado varios procesos que ya se manejaban con anterioridad. Además que se ha convertido en una característica primordial que deben tener las Organizaciones para poder convertirse en una de las mejores a nivel mundial.
Este trabajo nos presenta como empezó, desarrolló y que rumbos toma el Software actualmente.

PRIMERA ERA

Durante los primeros años de la era de la computadora, el software se contemplaba como un añadido. Desde entonces el campo se ha desarrollado tremendamente. La programación de computadoras era un “arte de andar por casa” para el que existían pocos métodos sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, hasta que los planes comenzaron a descalabrarse y los costos a correr. Los programadores trataban de hacer las cosas bien, y con un esfuerzo heroico, a menudo salían con éxito. Los problemas a ser resueltos eran principalmente de una naturaleza técnica, el énfasis estaba en expresar algoritmos conocidos eficazmente en algún lenguaje de programación.

En estos primeros años lo normal era que el hardware fuera de propósito general. Por otra parte, el software se diseña a medida para cada aplicación y tenía una distribución relativamente pequeña. El software como producto estaba en su infancia. La mayoría del software se desarrollaba y era utilizado por la misma persona un organización. La misma persona lo escribía , lo ejecutaba y, si fallaba, lo depuraba. Debido a que la movilidad en el trabajo era baja, los ejecutivos estaban seguros de que esa persona estará allí cuando se encontrara algún error. Debido a este entorno personalizado del software, el diseño era un proceso implícito, realizado en la mente de alguien, y la documentación normalmente no existía.

A lo largo de los primeros años aprendimos mucho sobre la implementación de sistemas informáticos, pero relativamente poco sobre la ingeniería de las computadoras. Sin embargo, en honor de la verdad, debemos reconocer que durante esa era se desarrollaron muchos sistemas informáticos excepcionales.

Algunos de ellos todavía se siguen utilizando hoy y, por sus características, siguen siendo admirados con toda justicia.

SEGUNDA ERA

La segunda era en la evolución de los sistemas de computadora se extienden desde la mitad de la década de los sesenta hasta finales de los setenta. La multiprogramación y los sistemas multiusuario introdujeron nuevos conceptos de interacción hombre - máquina. Las técnicas interactivas abrieron un nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y del software. Los sistemas de tiempo real podían recoger, analizar y transformar datos de múltiples fuentes, controlando así los procesos y produciendo salidas en milisegundos en lugar de en minutos. Los avances en los dispositivos de almacenamiento en línea condujeron a la primera generación de sistemas de gestión de bases de datos.

La segunda era se caracterizó también por el establecimiento del software ya se desarrollaba para tener una amplia distribución en un mercado multidisciplinario. Los programas se distribuían para computadoras grandes y para minicomputadoras, a cientos e incluso a miles de usuarios. Los patronos de la industria, del gobierno y de la universidad se aprestaban a “desarrollar el mejor paquete de software” y ganar así mucho dinero.

Conforme crecía el número de sistemas informáticos, comenzaron a extenderse as bibliotecas de software de computadora. Las casas desarrollaban proyectos en los que se producían programas de decenas de miles de sentencias fuente. Los productos de software comprados al exterior incorporaban cientos de miles de nuevas sentencias. Una nube negra apareció en el horizonte. Todos esos programas, todas esas sentencias fuente tenían que ser corregidos cuando se detectaban fallos, modificados cuando cambiaban los requisitos de los usuarios o adaptados a nuevos dispositivos hardware que se hubieran adquirido. Esta actividades se llamaron colectivamente mantenimiento del software. El esfuerzo gastado en el mantenimiento del software comenzó a absorber recursos en una medida alarmante.

Aún peor, la naturaleza personalizada de muchos programas los hacía virtualmente imposibles de mantener. Había comenzado una crisis del “software”

TERCERA ERA

La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años setenta y continuó más allá de una década. El sistema distribuido, múltiples computadoras, cada una ejecutando funciones concurrentemente y comunicándose con alguna otra, incrementó notablemente la complejidad de los sistemas informáticos. Las redes de área local y de área global, las comunicaciones digitales de alto ancho de banda y creciente demanda de acceso “instantáneo” a los datos, supusieron una fuente presión sobre los desarrolladores del software. Aún más, los sistemas y el software que lo permitían continuaron residiendo dentro de la industria y de la academia. El uso personal era extraño.

La conclusión de la tercera era se caracterizó por la llegada y amplio uso de los microprocesadores. El microprocesador ha producido un extenso grupo de productos inteligentes, desde productos inteligentes, desde automóviles hasta hornos microondas, desde robots industriales a equipos de diagnóstico de suero sanguíneo, pero ninguno ha sido más importante que la computadora personal.
En menos de una década, las computadoras llegarán a ser fácilmente accesibles al público.


CUARTA ERA

La cuarta era de la evolución de sistemas informáticos se aleja de las computadoras individuales y da los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras individuales y de los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras y del software. Potentes máquinas personales controladas por sistemas operativos sofisticados, en redes globales y locales, acompañadas por aplicaciones de software avanzadas se han convertido en la norma. Las arquitecturas informáticas están cambiando de entornos centralizados de grandes computadoras a entornos descentralizados cliente/servidor. Las redes de información en todo el mundo proporcionan una infraestructura que iguala a expertos y políticos en pensar sobre una “superautopista de información” y una “conexión del ciberespacio”. De hecho internet se puede observar como un “software” al que pueden acceder usuarios individuales.


La industria del software ya es la cuna de la economía del mundo. Las decisiones tomadas por gigantes de la industria tales como Microsoft arriesgan billones de dólares. A medida que la cuarta generación progresa, han comenzado a surgir nuevas tecnologías. Las tecnologías orientadas a objetos están desplazando rápidamente los enfoques de desarrollo de software más convencionales en muchas áreas de aplicaciones. Aunque las predicciones de las computadoras de “quinta generación”” continúan eludiéndonos, “las técnicas de cuarta generación” para el desarrollo del software están cambiando en forma en que la comunidad del software construye programas informáticos. Los sistemas expertos y el software de inteligencia artificial han salido del laboratorio para entrar en aplicaciones prácticas de una gran variedad de problemas del mundo real. El software de redes neuronales artificiales junto con la aplicación de lógica difusa ha abierto posibilidades excitantes para el reconocimiento de patrones y habilidades de procesamiento de información de carácter humano. La programación de realidad virtual y los sistemas multimedia ofrecen formas radicalmente diferentes de comunicar información al usuario final. “Los algoritmos genéricos” ofrecen el potencial para el software que reside dentro de las computadoras biológicas masivamente en paralelo.
Sin embargo, un conjunto de problemas relacionados con el software ha persistido a través de la evolución de los sistemas basados en computadora, y estos problemas continúan aumentado.
APORTACIONES AL CAMPO
Durante el desarrollo del tema, nos hemos percatado del problema que existió en algún momento respecto a que no se llevaba una planificación para un buen desarrollo del software. Esto trajo consecuencias que repercutieron en las Organizaciones.
Muchas de estas consecuencias originaron pérdidas millonarias en diferentes Empresas como el caso de una Aerolínea Internacional de los Estados Unidos de América, que tuvo el problema de que al momento de que un pasajero pretendía hacer su reservación de vuelo, el Sistema de Información mostraba que los asientos se encontraban ocupados, mientras que físicamente el vuelo contaba con demasiados asientos libres. Esto origino una pérdida de $50 millones de dólares.
A la vez se presentaron casos en los cuales las pérdidas eran iguales o mayores materialmente hablando. Las transacciones financieras de aquél entonces se empezaron a llevar por medio de Software Especializado. Pero también tuvo errores, ya que al enviar facturas de pago, su total de pago presentaba $0.00, lo cual originó bastantes pérdidas.
Pero no sólo existieron pérdidas materiales en los malos desarrollos de Software de aquellos días. Una computadora que se usaba para el servicio militar de los Estados Unidos de América, reportó una alarma acerca de la Unión Soviética de Repúblicas Socialistas había iniciado un ataque de proyectiles nucleares en contra de ese país. Esto origino una gran movilización para contrarrestar el ataque, se alistaron a los bombarderos atómicos norteamericanos, pero al día siguiente a través de un periódico se daba la noticia que todo había sido un error en el Software de la computadora.
Otra de las consecuencias en donde si hubo pérdidas humanas, fue en un caso en Inglaterra, en donde se enjuiciaba a una mujer de 54 años de edad por asesinar a su hija. Esto fue debido a un mensaje de un sistema informatizado hizo de la compañía de Seguro Social, informaba a la mujer que ella estaba gravemente enferma, se le decía que padecía una forma incurable de sífilis, además de que había infectado a sus dos hijos. En pánico, ella estranguló a su hija de 15 años e intento matar a su hijo de 13, el muchacho escapó y consiguió ayuda para después impedir que su madre se suicidará. Finalmente el juez culpó el error de la computadora y no consideró a la mujer responsable de sus acciones.
Como nos podemos dar cuenta estas consecuencias fueron de gran gravedad. En los primeros dos casos se atacó hacia los recursos financieros de grandes empresas a nivel internacional. En los siguientes casos aparte de afectar materialmente a la Sociedad, se pierde una vida humana por un error en el Software acerca de un padecimiento. Es así como se observa los diferentes tipos de consecuencias que se originaban por un mal desarrollo de Software.
Con este tipo de casos nos hemos percatado de la importancia que tiene una planeación acerca del desarrollo del Software. En aquel entonces el programador no se adentraba hacia las repercusiones que pudiera tener el Software que estaba creando, y ante la falta de documentación para la enseñanza de la creación de Software, los programadores aprendían solamente practicando.
Actualmente, nosotros como desarrolladores de Software, al momento de diseñarlo debemos de darnos cuenta de varias cosas para no tener ese tipo de errores que existieron con anterioridad. Además de otras cosas creemos que entre lo más importante que debemos saber es:
  • ¿Hacia quién va dirigido el SW?
  • ¿Quienes serán los usuarios?
  • ¿Qué tipo de información les será proporcionada?
  • La facilidad de acceso.
esto, entre muchas otras cosas más. Pero ante todo siempre debemos adoptar la postura de todos los tipos de usuarios que vayan a trabajar con el Software, ya que así podremos observar si los resultados que se obtienen son los que se requieren, es decir todo en base a una buena planeación.
Sin embargo, no es del todo satisfactorio dejar las cosas simplemente en las etapas de planeación. Después de que los programas estén terminados deben recibir mantenimiento, y los esfuerzos de mantenimiento normalmente sobrepasan el esfuerzo gastado en el diseño y programación original.

Parte importante de este aspecto es la documentación. Se deben documentar el Software y los procedimientos para que estén codificados en un formato que pueda ser fácilmente accesado. La documentación permite que los usuarios, programadores y analistas observen el sistema, Software y procedimientos sin tener que interactuar con él.
Después de ver todos los avances podemos observar que no sólo se cambia una manera de trabajar, sino que se cambia la forma de conceptualizar la vida, ¿Quién vive ya sin la ayuda de una computadora que agilice procesos?, y en caso drástico podemos ver que se cambian las costumbres y cultura de la Sociedad Actual.
CONCLUSIONES
A manera de conclusión, queremos finalizar con una semblanza ágil y rápida que nos permitirá observar los aspectos más relevantes que a nuestro juicio han marcado con hechos la Evolución del Software.
ERA AÑOS CARACTERÍSTICAS
1950 - 1965
  • Se trabajaba con la idea de “Codificar y Corregir”.
  • No existía un planteamiento previo.
  • No existía documentación de ningún tipo.
  • Existencia de pocos métodos formales y pocos creyentes en ellos.
  • Desarrollo a base de prueba y error.
1965 - 1972
  • Se busca simplificar código.
  • Aparición de Multiprogramación y Sistemas Multiusuarios.
  • Sistemas de Tiempo Real apoyan la toma de decisiones.
  • Aparición de Software como producto. (Casas de Software).
  • INICIO DE LA CRISIS DEL SOFTWARE.
  • Se buscan procedimientos para el desarrollo del Software.
1972 - 1989
  • Nuevo Concepto: Sistemas Distribuidos.
  • Complejidad en los Sistemas de Información.
  • Aparecen: Redes de área local y global, y Comunicadores Digitales.
  • Amplio Uso de Microprocesadores.
1989 - ¿?
  • Impacto Colectivo de Software.
  • Aparecen: Redes de Información, Tecnologías Orientadas a Objetos.
  • Aparecen: Redes Neuronales, Sistemas Expertos y SW de Inteligencia Artificial.
  • La información como valor preponderante dentro de las Organizaciones.
Creemos de suma relevancia el mencionar algunas de los lenguajes de programación que fueron utilizados en sus respectivas eras. Esto nos ayudará a comprender mejor el objetivo que se perseguía en cada una de ellas.
ERA LENGUAJES CARACTERÍSTICAS
  • Fortran
  • Basic
  • Logo
  • Cobol
  • Fue el primer y principal lenguaje Científico.
  • Diseñado por IBM.
  • Utilizado también para aplicaciones comerciales.
  • Desarrollado como lenguaje de tiempo compartido.
  • Traza elementos gráficos estableciendo la geometría de lápiz.
  • Ampliamente usado en programación en minicomputadores.
  • Pascal
  • Prolog
  • Mumps
  • Lisp
  • Lenguaje Académico.
  • Sus características son copiadas por otros lenguajes.
  • Éxito comercial a través de Borland.
  • Desarrollado en Francia, 1973.
  • Aplicaciones en Inteligencia Artificial (IA).
  • Sistema de Multiprogramación.
  • Incluye su propia base de datos.
  • Utilizado en aplicaciones médicas.
  • Sintaxis muy diferente de los demás lenguajes.
  • Programa aplicaciones en IA.
  • C, C++
  • Modula-2
  • dBase
  • Desarrollado en los ochentas.
  • Se utiliza en aplicaciones comerciales.
  • C++, se utiliza para la tecnología orientada a objetos.
  • Versión mejorada de Pascal.
  • Desarrollada en 1979.
  • Lenguaje estándar para aplicaciones comerciales.
  • Ramas colaterales: Clipper, FoxBase.
  • Visual C++
  • Visual Basic
  • Desarrollado por Microsoft.
  • Principalmente orientado a la tecnología de objetos.
  • Se utiliza para aplicaciones comerciales.
  • Principalmente para aplicaciones comerciales.
  • Versión cotizada, ya que permite interactuar con tablas de manejadores de bases de datos y lenguaje SQL.
En estos días se habla de una nueva plataforma desarrollada por Microsoft: La plataforma .NET, que permitirá a los desarrolladores crear aplicaciones extensas e incluso sistemas de componentes y servicios con gran capacidad para operar entre sí.
Este tipo de aplicaciones se pueden limitar a una organización, pero ésa no es la idea general, ya que los muchos analistas son de la opinión de que hay gran necesidad de aplicaciones que puedan existir en un ambiente distribuido basado en Internet.
Pero creemos que como normalmente sucede sobre todo con el Software de Sistemas, algunas áreas no están terminadas, y aunque la nueva plataforma ofrezca características modernas y sencillas, utilizarlas dependerá si Microsoft logra que los principales negocios acepten cambiar a esta nueva forma de crear soluciones.
A continuación se presenta una lista de algunas personas que hicieron contribuciones significativas en la creación y crecimiento de la industria de productos de software
  • Charles Bachman. Inventó la tecnología del banco de datos en los inicios de los sesentas.
  • John Backus. FORTRAN desarrollado para IBM (1954)
  • Bob Bemer. Uno de los diseñadores de COBOL y el ASCII normal para IBM (años sesenta); inventor de la sucesión del Escape, el mecanismo universal para toda la computadora.
  • Larry Constantine. Inventa los datos que fluyen en los diagramas, presentan primero en papel, los conceptos de un plan estructurado en 1968.
  • Peter Cunningham. Funda una de las primeras empresas de investigación de mercado para enfocar el software y comienza a comercializar los productos del software en 1974.
  • Tom DeMarco. El pionero en utilizar una metodología de caso, el autor, y consultor en los años setenta.
  • Wilfred J. Dixon. Empezó distribuyendo el software estadístico en 1962.
  • Frank Dodge. Co - fundó McCormack & el Regate qué vendió el primer software de contabilidad en 1969.
  • Larry Ellison. Dejó camino abierto para los DBMS.
  • Dave Ferguson. Logró vender el primer producto de software con éxito contra un programa de IBM.
  • Ken Orr. Crea la metodología de caso desarrollada en los años setenta.
La mayoría de estas personas aquí nombradas, trabajaron sobre algún aspecto del Software con el que aún se trabaja, pero en otros casos, este tipo de avances dieron pie a nuevas investigaciones que han contribuido al desarrollo del mismo, es decir, que han servido como base para descubrir nuevas fisonomías del Software con el que actualmente se trabaja.

Herramientas Case

Herramienta CASE

Captura de pantalla del editor UML Umbrello

Las herramientas CASE (Computer Aided Software Engineering, Ingeniería de Software Asistida por Computadora) son diversasaplicaciones informáticas destinadas a aumentar la productividad en el desarrollo de software reduciendo el coste de las mismas en términos de tiempo y de dinero. Estas herramientas nos pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de realizar un diseño del proyecto, cálculo de costes, implementación de parte del código automáticamente con el diseño dado, compilación automática, documentación o detección de errores entre otras.
Sistema de software que intenta proporcionar ayuda automatizada a las actividades del proceso de software. Los sistemas CASE a menudo se utilizan como apoyo al método.

Historia

Ya en los años 70 un proyecto llamado ISDOS diseñó un lenguaje, y por lo tanto un producto, que analizaba la relación existente entre los requisitos de un problema y las necesidades que éstos generaban, el lenguaje en cuestión se denominaba PSL (Problem Statement Language) y la aplicación que ayudaba a buscar las necesidades de los diseñadores PSA (Problem Statement Analyzer).
Aunque ésos son los inicios de las herramientas informáticas que ayudan a crear nuevos proyectos informáticos, la primera herramienta CASE fue Excelerator que salió a la luz en el año 1984 y trabajaba bajo una plataforma PC.

Las herramientas CASE alcanzaron su techo a principios de los años 90. En la época en la que IBM había conseguido una alianza con la empresa de software AD/Cycle para trabajar con sus mainframes, estos dos gigantes trabajaban con herramientas CASE que abarcaban todo el ciclo de vida del software. Pero poco a poco los mainframes han ido siendo menos utilizados y actualmente el mercado de las Big CASE ha muerto completamente abriendo el mercado de diversas herramientas más específicas para cada fase del ciclo de vida del software.

 Objetivos

  1. Mejorar la productividad en el desarrollo y mantenimiento del software.
  2. Aumentar la calidad del software.
  3. Reducir el tiempo y coste de desarrollo y mantenimiento de los sistemas informáticos.
  4. Mejorar la planificación de un proyecto
  5. Aumentar la biblioteca de conocimiento informático de una empresa ayudando a la búsqueda de soluciones para los requisitos.
  6. Automatizar el desarrollo del software, la documentación, la generación de código, las pruebas de errores y la gestión del proyecto.
  7. Ayuda a la reutilización del software, portabilidad y estandarización de la documentación
  8. Gestión global en todas las fases de desarrollo de software con una misma herramienta.
  9. Facilitar el uso de las distintas metodologías propias de la ingeniería del software.

Clasificación

Aunque no es fácil y no existe una forma única de clasificarlas, las herramientas CASE se pueden clasificar teniendo en cuenta los siguientes parámetros:
  1. Las plataformas que soportan.
  2. Las fases del ciclo de vida del desarrollo de sistemas que cubren.
  3. La arquitectura de las aplicaciones que producen.
  4. Su funcionalidad.
La siguiente clasificación es la más habitual basada en las fases del ciclo de desarrollo que cubren:
Existen otros nombres que se le dan a este tipo de herramientas, y que no es una clasificación excluyente entre sí, ni con la anterior:
  • Integrated CASE (I-CASE), herramientas que engloban todo el proceso de desarrollo software, desde análisis hasta implementación.
  • MetaCASE, herramientas que permiten la definición de nuestra propia técnica de modelado, los elementos permitidos del metamodelo generado se guardan en un repositorio y pueden ser usados por otros analistas, es decir, es como si definiéramos nuestro propio UML, con nuestros elementos, restricciones y relaciones posibles.
  • CAST (Computer-Aided Software Testing), herramientas de soporte a la prueba de software.
  • IPSE (Integrated Programming Support Environment), herramientas que soportan todo el ciclo de vida, incluyen componentes para la gestión de proyectos y gestión de la configuración.
Por funcionalidad podríamos diferenciar algunas como:

jueves, 3 de noviembre de 2011

Introduccion a la Ingeniería de software

Ingeniería de software es el área de la ingeniería que ofrece métodos y técnicas para desarrollar y mantener software.

Esta ingeniería trata con á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 Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a infinidad de áreas: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc.

Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden citar las enunciadas por algunos de los más 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).
  • 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).
  • Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993).
En el 2004, en los Estados Unidos, la Oficina de Estadísticas del Trabajo (U. S. Bureau of Labor Statistics) contó 760.840 ingenieros de software de computadora.1 El término "ingeniero de software", sin embargo, se utiliza en forma genérica en el ambiente empresarial, y no todos los ingenieros de software poseen realmente títulos de ingeniería de universidades reconocidas.

Algunos autores consideran que "desarrollo de software" es un término más apropiado que "ingeniería de software" para el proceso de crear software. Personas como Pete McBreen (autor de "Software Craftmanship") cree que el término IS implica niveles de rigor y prueba de procesos que no son apropiados para todo tipo de desarrollo de software.

Indistintamente se utilizan los términos "ingeniería de software" o "ingeniería del software". En Hispanoamérica el término usado normalmente es el primero de ellos.

La creación del software es un proceso intrínsecamente creativo y la ingeniería del software trata de sistematizar este proceso con el fin de acotar el riesgo del fracaso en la consecución del objetivo creativo por medio de diversas técnicas que se han demostrado adecuadas en base a la experiencia previa.

La IS se puede considerar como la ingeniería aplicada al software, esto es, por medios sistematizados y con herramientas preestablecidas, la aplicación de ellos de la forma más eficiente para la obtención de resultados óptimos; 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.

Implicaciones socioeconómicas

La ingeniería de software afecta a la economía y las sociedades de variadas formas.

Económicamente

En los Estados Unidos, el software contribuyó a una octava parte de todo el incremento del PIB durante la década de 1990 (alrededor de 90,000 millones de dólares por año), y un noveno de todo el crecimiento de productividad durante los últimos años de la década (alrededor de 33.000 millones de dólares estadounidenses por año). La ingeniería de software contribuyó a US$ 1 billón de crecimiento económico y productividad en esa década. Alrededor del globo, el software contribuye al crecimiento económico en formas similares, aunque es difícil de encontrar estadísticas fiables. [cita requerida]
Además, con la industria del lenguaje está hallando cada vez más campos de aplicación a escala global.


Socialmente : La ingeniería de software cambia la cultura del mundo debido al extendido uso de la computadora. El correo electrónico (E-mail), la WWW y la mensajería instantánea permiten a la gente interactuar en nuevas formas. El software baja el costo y mejora la calidad de los servicios de salud, los departamentos de bomberos, las dependencias gubernamentales y otros servicios sociales. Los proyectos exitosos donde se han usado métodos de ingeniería de software incluyen a GNU/Linux, el software del transbordador espacial, los cajeros automáticos y muchos otros.



 
Metodología: Un objetivo de décadas ha sido el encontrar procesos y metodologías, que sean sistemáticas, predecibles y repetibles, a fin de mejorar la productividad en el desarrollo y la calidad del producto software.



Etapas del proceso: La ingeniería de software requiere llevar a cabo numerosas tareas, dentro de etapas como las siguientes:

Análisis de requerimientos: Extraer los requisitos y requerimientos 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 requerimientos incompletos, ambiguos o contradictorios. El resultado del análisis de requerimientos 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 CMMI. 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 requerimientos (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 requerimientos, por ejemplo en dos capítulos del libro de Sommerville "Ingeniería del software" titulados "Requerimientos del software" y "Procesos de la Ingeniería de Requerimientos".

La IEEE Std. 830-1998 normaliza la creación de las especificaciones de requerimientos de software (Software Requirements Specification).

 
Especificación: La especificación de requisitos describe el comportamiento esperado en el 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:
Siendo los primeros más rigurosas y formales, los segundas más ágiles e informales.

 Arquitectura

La integración de infraestructura, desarrollo de aplicaciones, bases de datos y herramientas gerenciales, requieren de capacidad y liderazgo para poder ser conceptualizados y proyectados a futuro, solucionando los problemas de hoy. El rol en el cual se delegan todas estas actividades es el del Arquitecto.

El arquitecto de software es la persona que añade valor a los procesos de negocios gracias a su valioso aporte de soluciones tecnológicas.

La arquitectura de sistemas en general, es una actividad de planeación, ya sea a nivel de infraestructura de red y hardware, o de software.

La arquitectura de software consiste en el diseño de componentes de una aplicación (entidades del negocio), 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:
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

 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. 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 qué 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 de casos de uso, 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 [cita requerida] 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 [cita requerida].

 Modelos de desarrollo de software

La ingeniería de software tiene varios modelos, paradigmas o filosofías de desarrollo en los cuales se puede apoyar para la realización de software, de los cuales podemos destacar a éstos por ser los más utilizados y los más completos:

Naturaleza de la IS: La ingeniería de software tiene que ver con varios campos en diferentes formas: 

Matemáticas: Los programas tienen muchas propiedades matemáticas. Por ejemplo la corrección y la complejidad de muchos algoritmos son conceptos matemáticos que pueden ser rigurosamente probados. El uso de matemáticas en la IS es llamado métodos formales.

 
Creación: Los programas son construidos en una secuencia de pasos. El hecho de definir propiamente y llevar a cabo estos pasos, como en una línea de ensamblaje, es necesario para mejorar la productividad de los desarrolladores y la calidad final de los programas. Este punto de vista inspira los diferentes procesos y metodologías que encontramos en la IS.
 
Gestión de Proyectos: El software comercial (y mucho no comercial) requiere gestión de proyectos. Hay presupuestos y establecimiento de tiempos. Gente para liderar. Recursos (espacio de oficina, computadoras) por adquirir. Todo esto encaja apropiadamente con la visión de la Gestión de Proyectos.

 
Arte: Los programas contienen muchos elementos artísticos. Las interfaces de usuario, la codificación, etc. Incluso la decisión para un nombre de una variable o una clase. Donald Knuth es famoso porque ha argumentado que la programación es un arte. 


Responsabilidad: La responsabilidad en la ingeniería del software es un concepto complejo, sobre todo porque al estar los sistemas informáticos fuertemente caracterizados por su complejidad, es difícil apreciar sus consecuencias.

En la ingeniería del software la responsabilidad será compartida por un grupo grande de personas, que comprende desde el ingeniero de requisitos, hasta el arquitecto software, y contando con el diseñador, o el encargado de realizar las pruebas. Por encima de todos ellos destaca el director del proyecto. El software demanda una clara distribución de la responsabilidad entre los diferentes roles que se dan en el proceso de producción.

El ingeniero del software tiene una responsabilidad moral y legal limitada a las consecuencias directas.

Importancia Ingenieria Del Software

Introducción

Este término fue introducido a finales de los 60 a raíz de la crisis del software. Esta crisis fue el resultado de la introducción de la tercera generación del hardware. 

El hardware dejo de ser un impedimento para el desarrollo de la informática; redujo los costos y mejoro la calidad y eficiencia en el software producido

La crisis se caracterizo por los siguientes problemas:

Imprecisión en la planificación del proyecto y estimación de los costos.
Baja calidad del software.
Dificultad de mantenimiento de programas con un diseño poco estructurado, etc.
Por otra parte se exige que el software sea eficaz y barato tanto en el desarrollo como en la compra.
Tambien se requiere una serie de características como fiabilidad, facilidad de mantenimiento y de uso, eficiencia, etc.

2. 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 softwar. 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:
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.

3. 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”.

Una organización puede ganar ventaja competitiva a través de sus sistemas de información de diferentes formas.
  • Asegurar clientes:
Como los clientes son los más importante 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.

La ventaja en precios se observa continuamente en la actividad comercial (sí el producto es exclusivo o distinto entonces tener el liderazgo en precios bajos quizás no sea el objetivo a alcanzar).

La estrategia eficaz de precios a menudo se alcanza al desarrollar sistemas de información por razones tales como reducción de costos y ganancia en la exactitud.

Generalmente cuando una compañía puede ofrecer servicios exclusivos y atraer clientes, es posible que los competidores no sean capaces de atraer a los clientes de la compañía.
  • Dejar fuera a los competidores:
Pasar sobre los competidores puede ser un inconveniente si ellos se encuentran la forma para duplicar los logros de la compañía, los sistemas de información pueden ser la base para dejar fuera del mercado a la competencia ya sea el disuadir sus intentos por ingresar al mercado o creándoles obstáculo para su entrada.
  • Mejores acuerdos con los proveedores:
En los negocios, los proveedores también tienen importancia estratégica. Una manera de utilizar los sistemas de información para favorecer arreglos con los proveedores es ofreciendo un mejor precio. Disminuyendo los costos.
  • Formar bases para nuevos productos
Los sistemas de información también forman la base de muchos productos y servicios nuevos.

Los servicios de base de datos experimentan un crecimiento común en todas las industrias.

Productos que van desde programas personales hasta planes de construcción pueden hacerse a la medida del cliente gracias al procesamiento de información.
Una cosa es clara, es necesario que los sistemas entren en operación y que trabajen de manera confiable.

4. 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. Todas estas situaciones están determinadas por tres métodos básicos:

5. Método del ciclo de vida clásico

El método del ciclo de vida para desarrollo de sistemas es el conjunto de actividades que los analistas, diseñadores y usuarios realizan para desarrollar e implantar un sistema de información.
El método del ciclo de vida para el desarrollo de sistemas consta de las siguientes actividades:

1) Investigación preliminar

La solicitud para recibir ayuda de un sistema de información pueden originarse por una persona, cuando se formula la solicitud comienza la primera actividad del sistema. Esta actividad tiene tres partes:
  • Aclaración de la solicitud
Antes de considerar cualquier investigación de sistemas, la solicitud de proyecto debe examinarse para determinar con precisión lo que el solicitante desea; ya que muchas solicitudes que provienen de empleados y usuarios no están formuladas de manera clara.
  • Estudio de factibilidad
En la investigación preliminar un punto importante es determinar que el sistema solicitado sea factible. Existen tres aspectos relacionados con el estudio de factibilidad, que son realizados por los general por analistas capacitados o directivos:

-Factibilidad técnica.

Estudia si el trabajo para el proyecto, puede desarrollarse con el software y el personal existente, y si en caso de necesitar nueva tecnología, cuales son las posibilidades de desarrollarla (no solo el hardware).

-Factibilidad económica.

Investiga si los costos se justifican con los beneficios que se obtienen, y si se ha invertido demasiado, como para no crear el sistema si se cree necesario.

-Factibilidad operacional:

Investiga si será utilizado el sistema, si los usuarios usaran el sistema, como para obtener beneficios.
  • Aprobación de la solicitud
Algunas organizaciones reciben tantas solicitudes de sus empleados que sólo es posible atender unas cuantas. Sin embargo, aquellos proyectos que son deseables y factibles deben incorporarse en los planes. En algunos casos el desarrollo puede comenzar inmediatamente, aunque lo común es que los miembros del equipo de sistemas estén ocupados en otros proyectos. Cuando esto ocurre, la administración decide que proyectos son los más importantes y el orden en que se llevarán acabo.

Después de aprobar la solicitud de un proyecto se estima su costo, el tiempo necesario para terminarlo y las necesidades de personal

2) Determinación de los requisitos del sistema.

Los analistas, al trabajar con los empleados y administradores, deben estudiar los procesos de una empresa para dar respuesta a ciertas preguntas claves.

Para contestar estas preguntas, el analista conversa con varias personas para reunir detalles relacionados con los procesos de la empresa. Cuando no es posible entrevistar, en forma personal a los miembros de grupos grandes dentro de la organización, se emplean cuestionarios para obtener esta información.

Las investigaciones detalladas requieren el estudio de manuales y reportes, la observación en condiciones reales de las actividades del trabajo y, en algunas ocasiones, muestras de formas y documentos con el fin de comprender el proceso en su totalidad.

Reunidos los detalles, los analistas estudian los datos sobre requerimientos con la finalidad de identificar las características que debe tener el nuevo sistema.

3)Diseño del sistema.(diseño lógico)

El diseño de un sistema de información responde a la forma en la que el sistema cumplirá con los requerimientos identificados durante la fase de análisis.

Es común que los diseñadores hagan un esquema del formato o pantalla que esperan que aparezca cuando el sistema esta terminado, se realiza en papel o en la pantalla de una terminal utilizando algunas de las herramientas automatizadas disponibles para el desarrollo de sistemas.

También se indican los datos de entrada, los que serán calculados y los que deben ser almacenados. Los diseñadores seleccionan las estructuras de archivo y los dispositivos de almacenamiento. Los procedimientos que se escriben indican cómo procesar los datos y producir salidas.

Los documentos que contienen las especificaciones de diseño representan a éste mediante diagramas, tablas y símbolos especiales.

La información detallada del diseño se proporciona al equipo de programación para comenzar la fase de desarrollo de software.

Los diseñadores son responsables de dar a los programadores las especificaciones de software completas y claramente delineadas.

4) Desarrollo de software (diseño físico).

Los encargados de desarrollar software pueden instalar software comprado a terceros o escribir programas diseñados a la medida del solicitante. La elección depende del costo de cada alternativa, del tiempo disponible para escribir el software y de la disponibilidad de los programadores.

Los programadores son responsables de la documentación de los programas y de explicar su codificación, esta documentación es esencial para probar el programa y hacer el mantenimiento.

5) 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. Se alimentan como entradas conjuntos de datos de prueba para su procesamiento y después se examinan los resultados. En ocasiones se permite que varios usuarios utilicen el sistema, para que los analistas observen si tratan de emplearlo en formas no previstas, antes de que la organización implante el sistema y dependa de él.

En muchas organizaciones, las pruebas son conducidas por personas ajenas al grupo que escribió los programas originales; para asegurarse de que las pruebas sean completas e imparciales y, por otra, que el software sea más confiable.

6) Implantación y evaluación.

La implantación es el proceso de verificar e instalar nuevo equipo, entrenar a los usuarios, instalar la aplicación y construir todos los archivos de datos necesarios para utilizarla.

Cada estrategia de implantación tiene sus méritos de acuerdo con la situación que se considere dentro de la empresa. Sin importar cuál sea la estrategia utilizada, los encargados de desarrollar el sistema procuran que el uso inicial del sistema se encuentre libre de problemas.

Los sistemas de información deben mantenerse siempre al día, la implantación es un proceso de constante evolución.

La evaluación de un sistema se lleva a cabo para identificar puntos débiles y fuertes. La evaluación ocurre a lo largo de cualquiera de las siguientes dimensiones: